From 6b30e633961c50117388cdbcb9e3ebd7c2457b3a Mon Sep 17 00:00:00 2001 From: Aidas Patas Date: Thu, 11 Mar 2021 15:57:50 +0200 Subject: [PATCH] support number as property type, added support for inheriting --- index.js | 25 +++++++++++++++++++------ parser.js | 13 ++++++++----- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/index.js b/index.js index c28102c..983ee84 100644 --- a/index.js +++ b/index.js @@ -17,9 +17,10 @@ const processCode = (code) => { let className = null; let firstClassReferenceLine = null; let classHash = null; + let replaceSuper = false; const transformedCodeArray = lines.map((line, i) => { - if(parser.isComment(line)) { + if (parser.isComment(line)) { return ''; } if (new RegExp(className).test(line)) { @@ -35,7 +36,15 @@ const processCode = (code) => { } if (parser.isConstructor(line)) { constructorLine = i; - return parser.replaceConstructorName(line, lines, i); + const [replaced, didReplace] = parser.replaceConstructorName( + line, + lines, + i, + ); + if (didReplace) { + replaceSuper = true; + } + return replaced; } if (parser.isDecorator(line)) { const [decorator, decoratorArguments] = parser.parseDecorator(line); @@ -76,21 +85,25 @@ const processCode = (code) => { classHash = newClassHash; let times = 0; - const replacedReferencesToClasses = processedCode.map((line) => { + const replacedClassReferencesAndSuperCall = processedCode.map((line) => { if (new RegExp(className).test(line)) { - if (times > 0) { + if (times > 0 && !line.startsWith('export')) { return line.replace(className, `${className}_${classHash}`); } times += 1; } + if (/super\(.*\)/.test(line) && replaceSuper) { + return ''; + } + return line; }); const compiledJavascript = ts.transpileModule( - replacedReferencesToClasses.join('\n'), + replacedClassReferencesAndSuperCall.join('\n'), { - compilerOptions: { removeComments: false, target: 'es6' }, + compilerOptions: { removeComments: false, target: 'es6', module: 'commonjs' }, }, ).outputText; diff --git a/parser.js b/parser.js index 2dd76b6..b3e1dee 100644 --- a/parser.js +++ b/parser.js @@ -20,8 +20,7 @@ const buildCompiledClass = (className) => { module.exports = { injectCompiledClass(code, line, className) { const [hash, classLine] = buildCompiledClass(className); - code.splice(line + 5, 0, classLine); - console.log(code); + code.splice(line + 4, 0, ...[null, classLine]); return [hash, code]; }, replaceClassReferenceToCompiled(className, hash, line) { @@ -54,7 +53,11 @@ module.exports = { const cleanedUp = field.replace(/ /g, ''); const [name, type] = cleanedUp.split(':'); - const cleanType = type.replace(';', ''); + let cleanType = type.replace(';', ''); + + if (cleanType === 'number') { + cleanType = 'int'; + } return [name, cleanType]; }, @@ -73,10 +76,10 @@ module.exports = { } if (shouldReplace) { - return line.replace('constructor', 'ctor'); + return ['ctor() {', shouldReplace]; } - return line; + return [line, shouldReplace]; }, injectBootstrap(code) { code.unshift(`