ntts
Version:
A CLI tool for refactoring an existing NodeJs application to a fully functional TypeScript application.
137 lines (136 loc) • 6.82 kB
JavaScript
;
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;