65 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| const fs_1 = __importDefault(require("fs"));
 | |
| const path_1 = __importDefault(require("path"));
 | |
| const read_pkg_1 = __importDefault(require("read-pkg"));
 | |
| const hookList = {
 | |
|     applypatchmsg: 'applypatch-msg',
 | |
|     commitmsg: 'commit-msg',
 | |
|     postapplypatch: 'post-applypatch',
 | |
|     postcheckout: 'post-checkout',
 | |
|     postcommit: 'post-commit',
 | |
|     postmerge: 'post-merge',
 | |
|     postreceive: 'post-receive',
 | |
|     postrewrite: 'post-rewrite',
 | |
|     postupdate: 'post-update',
 | |
|     preapplypatch: 'pre-applypatch',
 | |
|     preautogc: 'pre-auto-gc',
 | |
|     precommit: 'pre-commit',
 | |
|     preparecommitmsg: 'prepare-commit-msg',
 | |
|     prepush: 'pre-push',
 | |
|     prerebase: 'pre-rebase',
 | |
|     prereceive: 'pre-receive',
 | |
|     pushtocheckout: 'push-to-checkout',
 | |
|     sendemailvalidate: 'sendemail-validate',
 | |
|     update: 'update'
 | |
| };
 | |
| function upgrade(cwd) {
 | |
|     const pkgFile = path_1.default.join(cwd, 'package.json');
 | |
|     if (fs_1.default.existsSync(pkgFile)) {
 | |
|         const pkg = read_pkg_1.default.sync({ cwd, normalize: false });
 | |
|         console.log(`husky > upgrading ${pkgFile}`);
 | |
|         // Don't overwrite 'husky' field if it exists
 | |
|         if (pkg.husky) {
 | |
|             return console.log(`husky field in package.json isn't empty, skipping automatic upgrade`);
 | |
|         }
 | |
|         const hooks = {};
 | |
|         // Find hooks in package.json 'scripts' field
 | |
|         Object.keys(hookList).forEach((name) => {
 | |
|             if (pkg.scripts) {
 | |
|                 const script = pkg.scripts[name];
 | |
|                 if (script) {
 | |
|                     delete pkg.scripts[name];
 | |
|                     const newName = hookList[name];
 | |
|                     hooks[newName] = script.replace(/\bGIT_PARAMS\b/g, 'HUSKY_GIT_PARAMS');
 | |
|                     console.log(`moved scripts.${name} to husky.hooks.${newName}`);
 | |
|                 }
 | |
|             }
 | |
|         });
 | |
|         // Move found hooks to 'husky.hooks' field
 | |
|         if (Object.keys(hooks).length) {
 | |
|             pkg.husky = { hooks };
 | |
|         }
 | |
|         else {
 | |
|             console.log('no hooks found');
 | |
|         }
 | |
|         // Update package.json
 | |
|         fs_1.default.writeFileSync(pkgFile, `${JSON.stringify(pkg, null, 2)}\n`, 'utf-8');
 | |
|         console.log(`husky > done`);
 | |
|     }
 | |
| }
 | |
| exports.default = upgrade;
 |