UNPKG

ntts

Version:

A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.

137 lines (136 loc) 6.82 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = require("fs"); var path_1 = require("path"); var logger_1 = __importDefault(require("../logger/logger")); var file_rename_1 = __importDefault(require("../file-rename/file-rename")); var tsconfig_handler_1 = __importDefault(require("../tsconfig-handler/tsconfig-handler")); var PackageJsonHandler = /** @class */ (function () { function PackageJsonHandler() { } var _a; _a = PackageJsonHandler; PackageJsonHandler.isNodeScript = function (script) { return /^(.*? +)?node(?! +inspect)(\s+-.*?)* [^\-\s].*$/.test(script); }; PackageJsonHandler.parseNodeScript = function (script) { return script .replace(/\s+/g, ' ') .split(' ') .reduce(function (acc, parameter) { if (!acc.node && parameter !== 'node') { return __assign(__assign({}, acc), { preNodeArguments: __spreadArray(__spreadArray([], acc.preNodeArguments, true), [parameter], false) }); } if (!acc.node && parameter === 'node') { return __assign(__assign({}, acc), { node: true }); } if (!acc.scriptFile && parameter.startsWith('-')) { return __assign(__assign({}, acc), { options: __spreadArray(__spreadArray([], acc.options, true), [parameter], false) }); } if (!acc.scriptFile) { return __assign(__assign({}, acc), { scriptFile: file_rename_1.default.renameFileEnding(parameter, '.ts') }); } return __assign(__assign({}, acc), { arguments: __spreadArray(__spreadArray([], acc.arguments, true), [parameter], false) }); }, { preNodeArguments: [], node: false, options: [], arguments: [], }); }; PackageJsonHandler.fileInTargetPath = function (path, file) { return !!file && (0, path_1.resolve)(file).startsWith((0, path_1.resolve)(path)); }; PackageJsonHandler.transformNodeScript = function (script, path, tsconfig) { var trimmed = script.trim(); if (!_a.isNodeScript(trimmed)) { return trimmed; } var parsedScript = _a.parseNodeScript(trimmed); if (_a.fileInTargetPath(path, parsedScript.scriptFile)) { return ("".concat(parsedScript.preNodeArguments.join(' '), " ts-node -P ") + "".concat(tsconfig, " ").concat(parsedScript.scriptFile, " ").concat(parsedScript.arguments.join(' '))).trim(); } return trimmed; }; PackageJsonHandler.splitScript = function (script) { return script .split(' && ') .reduce(function (acc, s) { return acc.concat(s.split(' & ')); }, []); }; PackageJsonHandler.joinScripts = function (scripts, connectors) { return scripts .reduce(function (acc, s, index) { if (index === 0) { return s; } return acc + (connectors ? connectors[index - 1] : ' && ') + s; }, ''); }; PackageJsonHandler.uniqueName = function (scripts, name, counter) { var newName = "".concat(name, "-").concat(counter); if (Object.prototype.hasOwnProperty.call(scripts, newName)) { var newCounter = counter + 1; return _a.uniqueName(scripts, name, newCounter); } return newName; }; PackageJsonHandler.addTscScriptName = function (scripts, name, script) { var _b, _c; if (Object.prototype.hasOwnProperty.call(scripts, name)) { var newName = _a.uniqueName(scripts, name, 1); return __assign(__assign({}, scripts), (_b = {}, _b[newName] = script, _b)); } return __assign(__assign({}, scripts), (_c = {}, _c[name] = script, _c)); }; PackageJsonHandler.changeMainFile = function (packageJson, target) { if (packageJson.main && _a.fileInTargetPath(target, packageJson.main)) { return __assign(__assign({}, packageJson), { main: file_rename_1.default.renameFileEnding(packageJson.main, '.ts') }); } return packageJson; }; PackageJsonHandler.addTsScripts = function (scripts, path) { var tsconfig = tsconfig_handler_1.default.tsconfigFileName(); var watchScripts = _a.addTscScriptName(scripts, 'tsc-watch', "tsc -w -p ".concat(tsconfig)); var fullScripts = _a.addTscScriptName(watchScripts, 'tsc-build', "tsc -p ".concat(tsconfig)); return Object .entries(fullScripts) .reduce(function (acc, _b) { var _c; var name = _b[0], script = _b[1]; var connectors = script.match(/ +[&]{1,2} +/g); var transformed = _a.splitScript(script).map(function (s) { return _a.transformNodeScript(s, path, tsconfig); }); var result = _a.joinScripts(transformed, connectors); return __assign(__assign({}, acc), (_c = {}, _c[name] = result, _c)); }, {}); }; PackageJsonHandler.readPackageJson = function () { var packageJson = JSON.parse((0, fs_1.readFileSync)('package.json', { encoding: 'utf-8' })); if (!Object.prototype.hasOwnProperty.call(packageJson, 'scripts')) { return __assign(__assign({}, packageJson), { scripts: {} }); } return packageJson; }; PackageJsonHandler.writePackageJson = function (packageJson) { (0, fs_1.writeFileSync)('package.json', JSON.stringify(packageJson, null, 2)); }; PackageJsonHandler.refactorScripts = function (target) { logger_1.default.info('Adding new scripts to package.json'); var packageJson = _a.changeMainFile(PackageJsonHandler.readPackageJson(), target); var scripts = PackageJsonHandler.addTsScripts(packageJson.scripts, target); PackageJsonHandler.writePackageJson(__assign(__assign({}, packageJson), { scripts: scripts })); logger_1.default.success('Scripts added to package.json!'); }; return PackageJsonHandler; }()); exports.default = PackageJsonHandler;