@ibyar/cli 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiler/compiler.d.ts.map +1 -1
- package/compiler/compiler.js +16 -3
- package/compiler/compiler.js.map +1 -1
- package/directives/register.d.ts +1 -1
- package/directives/register.d.ts.map +1 -1
- package/directives/register.js +1 -1
- package/directives/register.js.map +1 -1
- package/package.json +13 -10
- package/transformer/before-component.d.ts.map +1 -1
- package/transformer/before-component.js +21 -13
- package/transformer/before-component.js.map +1 -1
- package/transformer/before-directive.d.ts.map +1 -1
- package/transformer/before-directive.js +24 -14
- package/transformer/before-directive.js.map +1 -1
- package/transformer/factory.d.ts +10 -1
- package/transformer/factory.d.ts.map +1 -1
- package/transformer/factory.js +34 -5
- package/transformer/factory.js.map +1 -1
- package/transformer/helpers.d.ts +19 -2
- package/transformer/helpers.d.ts.map +1 -1
- package/transformer/helpers.js +66 -1
- package/transformer/helpers.js.map +1 -1
- package/transformer/modules.d.ts +9 -2
- package/transformer/modules.d.ts.map +1 -1
- package/transformer/modules.js.map +1 -1
- package/transformer/scan-directives.d.ts.map +1 -1
- package/transformer/scan-directives.js +5 -1
- package/transformer/scan-directives.js.map +1 -1
- package/transformer/signals.d.ts +4 -0
- package/transformer/signals.d.ts.map +1 -0
- package/transformer/signals.js +10 -0
- package/transformer/signals.js.map +1 -0
- package/webpack/loader.d.ts +7 -2
- package/webpack/loader.d.ts.map +1 -1
- package/webpack/loader.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/cli/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,mCAAmC,CAAC;AASnD,wBAAgB,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAY1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,QAEjD;AAED,wBAAgB,+BAA+B,cAG7B,EAAE,CAAC,OAAO,eADO,EAAE,CAAC,qBAAqB,KAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAS1F;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,QAG9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,QAIjF;AAoBD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAejF;AAID,wBAAgB,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,QAcjD;AAED,wBAAgB,8CAA8C,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,wCAAwC,GAAG,SAAS,EAAE,4BAA4B,CAAC,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,gBAAgB,EAAE,GAAG,SAAS,+CAKtW;
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/cli/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,mCAAmC,CAAC;AASnD,wBAAgB,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAY1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,QAEjD;AAED,wBAAgB,+BAA+B,cAG7B,EAAE,CAAC,OAAO,eADO,EAAE,CAAC,qBAAqB,KAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAS1F;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,QAG9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,QAIjF;AAoBD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAejF;AAID,wBAAgB,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,QAcjD;AAED,wBAAgB,8CAA8C,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,eAAe,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,wCAAwC,GAAG,SAAS,EAAE,4BAA4B,CAAC,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,gBAAgB,EAAE,GAAG,SAAS,+CAKtW;AAyCD,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAMhF;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAMxF;AAED,wBAAgB,aAAa,WAkB5B;AAED,wBAAgB,WAAW,SAW1B;AAED,wBAAgB,mBAAmB,SAWlC"}
|
package/compiler/compiler.js
CHANGED
|
@@ -5,7 +5,7 @@ import { afterDeclarationsCompileDirectiveOptions } from '../transformer/after-d
|
|
|
5
5
|
import { beforeCompileComponentOptions } from '../transformer/before-component.js';
|
|
6
6
|
import { beforeCompileDirectiveOptions } from '../transformer/before-directive.js';
|
|
7
7
|
import { scanDirectivesTypeVisitor } from '../transformer/scan-directives.js';
|
|
8
|
-
import { dirname, join, resolve } from 'path';
|
|
8
|
+
import { dirname, join, resolve, relative } from 'path';
|
|
9
9
|
import { existsSync } from 'fs';
|
|
10
10
|
export function getTransformers(program) {
|
|
11
11
|
return {
|
|
@@ -99,27 +99,40 @@ const diagHost = {
|
|
|
99
99
|
return ts.sys.newLine;
|
|
100
100
|
}
|
|
101
101
|
};
|
|
102
|
+
function getTime() {
|
|
103
|
+
const date = new Date();
|
|
104
|
+
return `[${date.toLocaleTimeString('en-US')}]`;
|
|
105
|
+
}
|
|
102
106
|
function reportDiag(diag) {
|
|
103
|
-
let output = ts.sys.writeOutputIsTTY
|
|
107
|
+
let output = ts.sys.writeOutputIsTTY?.() ?
|
|
104
108
|
ts.formatDiagnosticsWithColorAndContext([diag], diagHost) :
|
|
105
109
|
ts.formatDiagnostic(diag, diagHost);
|
|
106
110
|
output = output.replace(/^[\r\n]+/, '').replace(/[\r\n]+$/, '');
|
|
107
|
-
ts.sys.write(output + '\n');
|
|
111
|
+
ts.sys.write(`${getTime()} ${output}` + '\n');
|
|
108
112
|
}
|
|
109
113
|
function reportError(errorCount, filesInError) {
|
|
110
114
|
ts.sys.write(`Error count: ${errorCount}\n`);
|
|
111
115
|
filesInError.forEach(error => ts.sys.write(`Error file: ${error?.fileName}(${error?.line})\n`));
|
|
112
116
|
}
|
|
117
|
+
function printProjects(solution) {
|
|
118
|
+
const projects = solution?.getBuildOrder();
|
|
119
|
+
if (Array.isArray(projects) && projects?.length) {
|
|
120
|
+
console.log(`${getTime()} Projects in this build: `);
|
|
121
|
+
projects.forEach(project => console.log(`\t* ${relative(process.cwd(), project)}`));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
113
124
|
export function compileSolution(configFilePath, cmd) {
|
|
114
125
|
const rootNames = [dirname(configFilePath)];
|
|
115
126
|
const solutionHost = ts.createSolutionBuilderHost(ts.sys, createEmitAndSemanticDiagnosticsBuilderProgram, reportDiag, reportDiag, reportError);
|
|
116
127
|
const solution = ts.createSolutionBuilder(solutionHost, rootNames, {});
|
|
128
|
+
printProjects(solution);
|
|
117
129
|
solution.build();
|
|
118
130
|
}
|
|
119
131
|
export function compileSolutionAndWatch(configFilePath, cmd) {
|
|
120
132
|
const rootNames = [dirname(configFilePath)];
|
|
121
133
|
const solutionHost = ts.createSolutionBuilderWithWatchHost(ts.sys, createEmitAndSemanticDiagnosticsBuilderProgram, reportDiag, reportDiag, reportDiag);
|
|
122
134
|
const solution = ts.createSolutionBuilderWithWatch(solutionHost, rootNames, {}, cmd.watchOptions);
|
|
135
|
+
printProjects(solution);
|
|
123
136
|
solution.build();
|
|
124
137
|
}
|
|
125
138
|
export function getConfigPath() {
|
package/compiler/compiler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/cli/compiler/compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import '../directives/register.js';\nimport ts from 'typescript/lib/tsserverlibrary.js';\nimport { afterDeclarationsCompileComponentOptions } from '../transformer/after-declarations-component.js';\nimport { afterDeclarationsCompileDirectiveOptions } from '../transformer/after-declarations-directive.js';\nimport { beforeCompileComponentOptions } from '../transformer/before-component.js';\nimport { beforeCompileDirectiveOptions } from '../transformer/before-directive.js';\nimport { scanDirectivesTypeVisitor } from '../transformer/scan-directives.js';\nimport { dirname, join, resolve } from 'path';\nimport { existsSync } from 'fs';\n\nexport function getTransformers(program: ts.Program): ts.CustomTransformers {\n\treturn {\n\t\tbefore: [\n\t\t\tbeforeCompileDirectiveOptions(program),\n\t\t\tbeforeCompileComponentOptions(program),\n\t\t],\n\t\tafter: [],\n\t\tafterDeclarations: [\n\t\t\tafterDeclarationsCompileComponentOptions(program) as ts.TransformerFactory<ts.SourceFile | ts.Bundle>,\n\t\t\tafterDeclarationsCompileDirectiveOptions(program) as ts.TransformerFactory<ts.SourceFile | ts.Bundle>,\n\t\t],\n\t};\n}\n\nexport function scanDirectives(program: ts.Program) {\n\tprogram.getSourceFiles().forEach(scanDirectivesTypeVisitor);\n}\n\nexport function scanDirectivesOnceAsTransformer() {\n\tlet scanDone = false;\n\tlet ignoreTransformer = (context: ts.TransformationContext): ts.Transformer<ts.SourceFile> => sourceFile => sourceFile;\n\treturn (program: ts.Program) => {\n\t\tif (scanDone) {\n\t\t\treturn ignoreTransformer;\n\t\t}\n\t\tscanDone = true;\n\t\tscanDirectives(program);\n\t\treturn ignoreTransformer;\n\t};\n}\n\nexport function emitProgram(program: ts.Program) {\n\tscanDirectives(program);\n\tprogram.emit(undefined, undefined, undefined, undefined, getTransformers(program));\n}\n\nexport function compileFiles(files: readonly string[], options: ts.CompilerOptions) {\n\tconst host = ts.createCompilerHost(options);\n\tconst program = ts.createProgram(files, options, host);\n\temitProgram(program);\n}\n\nconst formatHost: ts.FormatDiagnosticsHost = {\n\tgetCanonicalFileName: path => path,\n\tgetCurrentDirectory: ts.sys.getCurrentDirectory,\n\tgetNewLine: () => ts.sys.newLine\n};\n\nfunction reportDiagnostic(diagnostic: ts.Diagnostic) {\n\tconsole.error(\"Error\", diagnostic.code, \":\", ts.flattenDiagnosticMessageText(diagnostic.messageText, formatHost.getNewLine()));\n}\n\n/**\n * Prints a diagnostic every time the watch status changes.\n * This is mainly for messages like \"Starting compilation\" or \"Compilation completed\".\n */\nfunction reportWatchStatusChanged(diagnostic: ts.Diagnostic) {\n\tconsole.info(ts.formatDiagnostic(diagnostic, formatHost));\n}\n\nexport function compileAndWatchFiles(configPath: string, cmd: ts.ParsedCommandLine) {\n\tconst createProgram = ts.createSemanticDiagnosticsBuilderProgram;\n\tconst host = ts.createWatchCompilerHost(\n\t\tconfigPath,\n\t\tcmd.options,\n\t\tts.sys,\n\t\tcreateProgram,\n\t\treportDiagnostic,\n\t\treportWatchStatusChanged,\n\t\tcmd.watchOptions,\n\t);\n\tconst programFactory = ts.createWatchProgram(host);\n\tconst programBuilder = programFactory.getProgram();\n\tconst program = programBuilder.getProgram();\n\temitProgram(program);\n}\n\ntype ProgramPatch = ts.Program & { __emit: (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback, cancellationToken?: ts.CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: ts.CustomTransformers) => ts.EmitResult };\n\nexport function patchProgram(tsProgram: ts.Program) {\n\tconst program = tsProgram as ProgramPatch;\n\tprogram.__emit = program.emit;\n\tconst programTransformers = getTransformers(program);\n\tprogram.emit = (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback, cancellationToken?: ts.CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: ts.CustomTransformers): ts.EmitResult => {\n\t\tif (!customTransformers) {\n\t\t\treturn program.__emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, programTransformers);\n\t\t}\n\t\treturn program.__emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, {\n\t\t\tbefore: [...(customTransformers?.before ?? []), ...programTransformers.before!],\n\t\t\tafter: [...(customTransformers?.after ?? []), ...programTransformers.after!],\n\t\t\tafterDeclarations: [...(customTransformers?.afterDeclarations ?? []), ...programTransformers.afterDeclarations!],\n\t\t});\n\t};\n}\n\nexport function createEmitAndSemanticDiagnosticsBuilderProgram(rootNames: readonly string[] | undefined, options: ts.CompilerOptions | undefined, host?: ts.CompilerHost, oldProgram?: ts.EmitAndSemanticDiagnosticsBuilderProgram | undefined, configFileParsingDiagnostics?: readonly ts.Diagnostic[], projectReferences?: readonly ts.ProjectReference[] | undefined) {\n\tconst program = ts.createEmitAndSemanticDiagnosticsBuilderProgram(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences);\n\tscanDirectives(program.getProgram());\n\tpatchProgram(program.getProgram());\n\treturn program;\n}\n\n\nconst diagHost = {\n\tgetCanonicalFileName: function (fileName: string) {\n\t\treturn ts.sys.resolvePath(fileName)\n\t},\n\tgetCurrentDirectory: function () {\n\t\treturn ts.sys.getCurrentDirectory();\n\t},\n\tgetNewLine: function () {\n\t\treturn ts.sys.newLine;\n\t}\n};\n\nfunction reportDiag(diag: ts.Diagnostic) {\n\tlet output = ts.sys.writeOutputIsTTY && ts.sys.writeOutputIsTTY() ?\n\t\tts.formatDiagnosticsWithColorAndContext([diag], diagHost) :\n\t\tts.formatDiagnostic(diag, diagHost);\n\toutput = output.replace(/^[\\r\\n]+/, '').replace(/[\\r\\n]+$/, '');\n\tts.sys.write(output + '\\n');\n}\n\nfunction reportError(errorCount: number, filesInError: (ts.ReportFileInError | undefined)[]) {\n\tts.sys.write(`Error count: ${errorCount}\\n`);\n\tfilesInError.forEach(error => ts.sys.write(`Error file: ${error?.fileName}(${error?.line})\\n`));\n}\n\nexport function compileSolution(configFilePath: string, cmd: ts.ParsedCommandLine) {\n\tconst rootNames = [dirname(configFilePath)];\n\tconst solutionHost = ts.createSolutionBuilderHost(ts.sys, createEmitAndSemanticDiagnosticsBuilderProgram, reportDiag, reportDiag, reportError);\n\tconst solution = ts.createSolutionBuilder(solutionHost, rootNames, {});\n\tsolution.build();\n}\n\nexport function compileSolutionAndWatch(configFilePath: string, cmd: ts.ParsedCommandLine) {\n\tconst rootNames = [dirname(configFilePath)];\n\tconst solutionHost = ts.createSolutionBuilderWithWatchHost(ts.sys, createEmitAndSemanticDiagnosticsBuilderProgram, reportDiag, reportDiag, reportDiag);\n\tconst solution = ts.createSolutionBuilderWithWatch(solutionHost, rootNames, {}, cmd.watchOptions);\n\tsolution.build();\n}\n\nexport function getConfigPath() {\n\tconst args = process.argv.slice(2);\n\tlet tsconfig = args.filter(arg => arg.includes('tsconfig'))[0];\n\tif (!tsconfig && args.length > 1 /** -b */) {\n\t\tconst path = join(args.at(-1)!, 'tsconfig.json');\n\t\tif (existsSync(path)) {\n\t\t\ttsconfig = resolve(path);\n\t\t}\n\t}\n\tconst configPath = ts.findConfigFile(\n\t\t'./',\t\t\t/*searchPath*/\n\t\tts.sys.fileExists,\n\t\ttsconfig ?? 'tsconfig.json'\n\t);\n\tif (!configPath) {\n\t\tthrow new Error(\"Could not find a valid 'tsconfig.json'.\");\n\t}\n\treturn configPath;\n}\n\nexport function compileArgs() {\n\tconst configPath = getConfigPath();\n\tconst cmd = ts.getParsedCommandLineOfConfigFile(configPath, {}, ts.sys as any);\n\tif (!cmd) {\n\t\treturn;\n\t}\n\tif (cmd.projectReferences?.length) {\n\t\tcompileSolution(configPath, cmd);\n\t} else {\n\t\tcompileFiles(cmd.fileNames, cmd.options);\n\t}\n}\n\nexport function compileAndWatchArgs() {\n\tconst configPath = getConfigPath();\n\tconst cmd = ts.getParsedCommandLineOfConfigFile(configPath, {}, ts.sys as any);\n\tif (!cmd) {\n\t\treturn;\n\t}\n\tif (cmd.projectReferences?.length) {\n\t\tcompileSolutionAndWatch(configPath, cmd);\n\t} else {\n\t\tcompileAndWatchFiles(configPath, cmd);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/cli/compiler/compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import '../directives/register.js';\nimport ts from 'typescript/lib/tsserverlibrary.js';\nimport { afterDeclarationsCompileComponentOptions } from '../transformer/after-declarations-component.js';\nimport { afterDeclarationsCompileDirectiveOptions } from '../transformer/after-declarations-directive.js';\nimport { beforeCompileComponentOptions } from '../transformer/before-component.js';\nimport { beforeCompileDirectiveOptions } from '../transformer/before-directive.js';\nimport { scanDirectivesTypeVisitor } from '../transformer/scan-directives.js';\nimport { dirname, join, resolve, relative } from 'path';\nimport { existsSync } from 'fs';\n\nexport function getTransformers(program: ts.Program): ts.CustomTransformers {\n\treturn {\n\t\tbefore: [\n\t\t\tbeforeCompileDirectiveOptions(program),\n\t\t\tbeforeCompileComponentOptions(program),\n\t\t],\n\t\tafter: [],\n\t\tafterDeclarations: [\n\t\t\tafterDeclarationsCompileComponentOptions(program) as ts.TransformerFactory<ts.SourceFile | ts.Bundle>,\n\t\t\tafterDeclarationsCompileDirectiveOptions(program) as ts.TransformerFactory<ts.SourceFile | ts.Bundle>,\n\t\t],\n\t};\n}\n\nexport function scanDirectives(program: ts.Program) {\n\tprogram.getSourceFiles().forEach(scanDirectivesTypeVisitor);\n}\n\nexport function scanDirectivesOnceAsTransformer() {\n\tlet scanDone = false;\n\tlet ignoreTransformer = (context: ts.TransformationContext): ts.Transformer<ts.SourceFile> => sourceFile => sourceFile;\n\treturn (program: ts.Program) => {\n\t\tif (scanDone) {\n\t\t\treturn ignoreTransformer;\n\t\t}\n\t\tscanDone = true;\n\t\tscanDirectives(program);\n\t\treturn ignoreTransformer;\n\t};\n}\n\nexport function emitProgram(program: ts.Program) {\n\tscanDirectives(program);\n\tprogram.emit(undefined, undefined, undefined, undefined, getTransformers(program));\n}\n\nexport function compileFiles(files: readonly string[], options: ts.CompilerOptions) {\n\tconst host = ts.createCompilerHost(options);\n\tconst program = ts.createProgram(files, options, host);\n\temitProgram(program);\n}\n\nconst formatHost: ts.FormatDiagnosticsHost = {\n\tgetCanonicalFileName: path => path,\n\tgetCurrentDirectory: ts.sys.getCurrentDirectory,\n\tgetNewLine: () => ts.sys.newLine\n};\n\nfunction reportDiagnostic(diagnostic: ts.Diagnostic) {\n\tconsole.error(\"Error\", diagnostic.code, \":\", ts.flattenDiagnosticMessageText(diagnostic.messageText, formatHost.getNewLine()));\n}\n\n/**\n * Prints a diagnostic every time the watch status changes.\n * This is mainly for messages like \"Starting compilation\" or \"Compilation completed\".\n */\nfunction reportWatchStatusChanged(diagnostic: ts.Diagnostic) {\n\tconsole.info(ts.formatDiagnostic(diagnostic, formatHost));\n}\n\nexport function compileAndWatchFiles(configPath: string, cmd: ts.ParsedCommandLine) {\n\tconst createProgram = ts.createSemanticDiagnosticsBuilderProgram;\n\tconst host = ts.createWatchCompilerHost(\n\t\tconfigPath,\n\t\tcmd.options,\n\t\tts.sys,\n\t\tcreateProgram,\n\t\treportDiagnostic,\n\t\treportWatchStatusChanged,\n\t\tcmd.watchOptions,\n\t);\n\tconst programFactory = ts.createWatchProgram(host);\n\tconst programBuilder = programFactory.getProgram();\n\tconst program = programBuilder.getProgram();\n\temitProgram(program);\n}\n\ntype ProgramPatch = ts.Program & { __emit: (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback, cancellationToken?: ts.CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: ts.CustomTransformers) => ts.EmitResult };\n\nexport function patchProgram(tsProgram: ts.Program) {\n\tconst program = tsProgram as ProgramPatch;\n\tprogram.__emit = program.emit;\n\tconst programTransformers = getTransformers(program);\n\tprogram.emit = (targetSourceFile?: ts.SourceFile, writeFile?: ts.WriteFileCallback, cancellationToken?: ts.CancellationToken, emitOnlyDtsFiles?: boolean, customTransformers?: ts.CustomTransformers): ts.EmitResult => {\n\t\tif (!customTransformers) {\n\t\t\treturn program.__emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, programTransformers);\n\t\t}\n\t\treturn program.__emit(targetSourceFile, writeFile, cancellationToken, emitOnlyDtsFiles, {\n\t\t\tbefore: [...(customTransformers?.before ?? []), ...programTransformers.before!],\n\t\t\tafter: [...(customTransformers?.after ?? []), ...programTransformers.after!],\n\t\t\tafterDeclarations: [...(customTransformers?.afterDeclarations ?? []), ...programTransformers.afterDeclarations!],\n\t\t});\n\t};\n}\n\nexport function createEmitAndSemanticDiagnosticsBuilderProgram(rootNames: readonly string[] | undefined, options: ts.CompilerOptions | undefined, host?: ts.CompilerHost, oldProgram?: ts.EmitAndSemanticDiagnosticsBuilderProgram | undefined, configFileParsingDiagnostics?: readonly ts.Diagnostic[], projectReferences?: readonly ts.ProjectReference[] | undefined) {\n\tconst program = ts.createEmitAndSemanticDiagnosticsBuilderProgram(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences);\n\tscanDirectives(program.getProgram());\n\tpatchProgram(program.getProgram());\n\treturn program;\n}\n\n\nconst diagHost = {\n\tgetCanonicalFileName: function (fileName: string) {\n\t\treturn ts.sys.resolvePath(fileName)\n\t},\n\tgetCurrentDirectory: function () {\n\t\treturn ts.sys.getCurrentDirectory();\n\t},\n\tgetNewLine: function () {\n\t\treturn ts.sys.newLine;\n\t}\n};\n\nfunction getTime() {\n\tconst date = new Date();\n\treturn `[${date.toLocaleTimeString('en-US')}]`;\n}\n\nfunction reportDiag(diag: ts.Diagnostic) {\n\tlet output = ts.sys.writeOutputIsTTY?.() ?\n\t\tts.formatDiagnosticsWithColorAndContext([diag], diagHost) :\n\t\tts.formatDiagnostic(diag, diagHost);\n\toutput = output.replace(/^[\\r\\n]+/, '').replace(/[\\r\\n]+$/, '');\n\tts.sys.write(`${getTime()} ${output}` + '\\n');\n}\n\nfunction reportError(errorCount: number, filesInError: (ts.ReportFileInError | undefined)[]) {\n\tts.sys.write(`Error count: ${errorCount}\\n`);\n\tfilesInError.forEach(error => ts.sys.write(`Error file: ${error?.fileName}(${error?.line})\\n`));\n}\n\nfunction printProjects(solution: ts.SolutionBuilder<ts.EmitAndSemanticDiagnosticsBuilderProgram>) {\n\tconst projects = (solution as any)?.getBuildOrder() as string[];\n\tif (Array.isArray(projects) && projects?.length) {\n\t\tconsole.log(`${getTime()} Projects in this build: `);\n\t\tprojects.forEach(project => console.log(`\\t* ${relative(process.cwd(), project)}`));\n\t}\n}\n\nexport function compileSolution(configFilePath: string, cmd: ts.ParsedCommandLine) {\n\tconst rootNames = [dirname(configFilePath)];\n\tconst solutionHost = ts.createSolutionBuilderHost(ts.sys, createEmitAndSemanticDiagnosticsBuilderProgram, reportDiag, reportDiag, reportError);\n\tconst solution = ts.createSolutionBuilder(solutionHost, rootNames, {});\n\tprintProjects(solution);\n\tsolution.build();\n}\n\nexport function compileSolutionAndWatch(configFilePath: string, cmd: ts.ParsedCommandLine) {\n\tconst rootNames = [dirname(configFilePath)];\n\tconst solutionHost = ts.createSolutionBuilderWithWatchHost(ts.sys, createEmitAndSemanticDiagnosticsBuilderProgram, reportDiag, reportDiag, reportDiag);\n\tconst solution = ts.createSolutionBuilderWithWatch(solutionHost, rootNames, {}, cmd.watchOptions);\n\tprintProjects(solution);\n\tsolution.build();\n}\n\nexport function getConfigPath() {\n\tconst args = process.argv.slice(2);\n\tlet tsconfig = args.filter(arg => arg.includes('tsconfig'))[0];\n\tif (!tsconfig && args.length > 1 /** -b */) {\n\t\tconst path = join(args.at(-1)!, 'tsconfig.json');\n\t\tif (existsSync(path)) {\n\t\t\ttsconfig = resolve(path);\n\t\t}\n\t}\n\tconst configPath = ts.findConfigFile(\n\t\t'./',\t\t\t/*searchPath*/\n\t\tts.sys.fileExists,\n\t\ttsconfig ?? 'tsconfig.json'\n\t);\n\tif (!configPath) {\n\t\tthrow new Error(\"Could not find a valid 'tsconfig.json'.\");\n\t}\n\treturn configPath;\n}\n\nexport function compileArgs() {\n\tconst configPath = getConfigPath();\n\tconst cmd = ts.getParsedCommandLineOfConfigFile(configPath, {}, ts.sys as any);\n\tif (!cmd) {\n\t\treturn;\n\t}\n\tif (cmd.projectReferences?.length) {\n\t\tcompileSolution(configPath, cmd);\n\t} else {\n\t\tcompileFiles(cmd.fileNames, cmd.options);\n\t}\n}\n\nexport function compileAndWatchArgs() {\n\tconst configPath = getConfigPath();\n\tconst cmd = ts.getParsedCommandLineOfConfigFile(configPath, {}, ts.sys as any);\n\tif (!cmd) {\n\t\treturn;\n\t}\n\tif (cmd.projectReferences?.length) {\n\t\tcompileSolutionAndWatch(configPath, cmd);\n\t} else {\n\t\tcompileAndWatchFiles(configPath, cmd);\n\t}\n}\n"]}
|
package/directives/register.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/cli/directives/register.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/cli/directives/register.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,QAgBxD"}
|
package/directives/register.js
CHANGED
|
@@ -3,7 +3,7 @@ import { directiveRegistry } from '@ibyar/elements/node.js';
|
|
|
3
3
|
import { metadataHoler } from '@ibyar/decorators';
|
|
4
4
|
export function registerDirectiveCall(info) {
|
|
5
5
|
directiveRegistry.set(info.selector, {
|
|
6
|
-
|
|
6
|
+
successors: info.successors,
|
|
7
7
|
inputs: info.inputs?.map(i => i.aliasName),
|
|
8
8
|
outputs: info.outputs?.map(i => i.aliasName),
|
|
9
9
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/directives/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASlD,MAAM,UAAU,qBAAqB,CAAC,IAAmB;IACxD,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpC,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/directives/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASlD,MAAM,UAAU,qBAAqB,CAAC,IAAmB;IACxD,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE;QACpC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAC5C,CAAC,CAAC;IAEH,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,EAAE,CAAC;IACnB,UAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IAChD,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrD,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7G,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { deleteDirective, provideDirective } from '@ibyar/core/node.js';\nimport { directiveRegistry } from '@ibyar/elements/node.js';\nimport { DecoratorInfo } from '../transformer/modules.js';\nimport { metadataHoler } from '@ibyar/decorators';\n\nexport interface DirectiveInfo {\n\tselector: string,\n\tsuccessors?: string[],\n\tinputs?: DecoratorInfo[],\n\toutputs?: DecoratorInfo[],\n}\n\nexport function registerDirectiveCall(info: DirectiveInfo) {\n\tdirectiveRegistry.set(info.selector, {\n\t\tsuccessors: info.successors,\n\t\tinputs: info.inputs?.map(i => i.aliasName),\n\t\toutputs: info.outputs?.map(i => i.aliasName),\n\t});\n\n\tdeleteDirective(info.selector);\n\tconst modelClass = {};\n\tconst modelKey = {};\n\t(modelClass as any)[Symbol.metadata] = modelKey;\n\tconst metadata = metadataHoler.getOrCreate(modelKey);\n\tmetadata.modelClass = modelClass;\n\tmetadata.selector = info.selector;\n\tmetadata.inputs = info.inputs?.map(input => ({ modelProperty: input.name, viewAttribute: input.aliasName }));\n\tprovideDirective(modelClass);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibyar/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "The Ibyar/Aurora CLI tool",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ibyar/aurora",
|
|
@@ -36,14 +36,17 @@
|
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@ibyar/core": "^2.
|
|
40
|
-
"@ibyar/decorators": "^2.
|
|
41
|
-
"@ibyar/directives": "^2.
|
|
42
|
-
"@ibyar/elements": "^2.
|
|
43
|
-
"@ibyar/expressions": "^2.
|
|
44
|
-
"@ibyar/pipes": "^2.
|
|
45
|
-
"tslib": "^2.
|
|
46
|
-
"typescript": "^5.
|
|
39
|
+
"@ibyar/core": "^2.5.0",
|
|
40
|
+
"@ibyar/decorators": "^2.5.0",
|
|
41
|
+
"@ibyar/directives": "^2.5.0",
|
|
42
|
+
"@ibyar/elements": "^2.5.0",
|
|
43
|
+
"@ibyar/expressions": "^2.5.0",
|
|
44
|
+
"@ibyar/pipes": "^2.5.0",
|
|
45
|
+
"tslib": "^2.7.0",
|
|
46
|
+
"typescript": "^5.6.3"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "22.7.4"
|
|
47
50
|
},
|
|
48
51
|
"scripts": {
|
|
49
52
|
"build": "tsc --build --verbose",
|
|
@@ -74,5 +77,5 @@
|
|
|
74
77
|
"shadow-dom",
|
|
75
78
|
"typescript"
|
|
76
79
|
],
|
|
77
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "67b064cb1a4a9c11cf4bf31da7dd7cc8bb3675ce"
|
|
78
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-component.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/before-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"before-component.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/before-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAmBnD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,CAgNvG"}
|
|
@@ -2,9 +2,10 @@ import ts from 'typescript/lib/tsserverlibrary.js';
|
|
|
2
2
|
import { buildExpressionNodes } from '@ibyar/core/node.js';
|
|
3
3
|
import { htmlParser } from '@ibyar/elements/node.js';
|
|
4
4
|
import { getExtendsTypeBySelector } from '../elements/tags.js';
|
|
5
|
-
import { createConstructorOfViewInterfaceDeclaration, convertToProperties, createInterfaceType } from './factory.js';
|
|
5
|
+
import { createConstructorOfViewInterfaceDeclaration, convertToProperties, createInterfaceType, createSignalsAssignment } from './factory.js';
|
|
6
6
|
import { moduleManger } from './modules.js';
|
|
7
|
-
import { getInputs, getOutputs,
|
|
7
|
+
import { getInputs, getOutputs, scanSignals, getTextValueFormLiteralProperty, isComponentDecorator } from './helpers.js';
|
|
8
|
+
import { SIGNAL_NAMES } from './signals.js';
|
|
8
9
|
/**
|
|
9
10
|
* search for `@Component({})` and precompile the source code
|
|
10
11
|
* @param program a ts program
|
|
@@ -16,22 +17,20 @@ export function beforeCompileComponentOptions(program) {
|
|
|
16
17
|
return sourceFile => {
|
|
17
18
|
let visitSourceFile = false;
|
|
18
19
|
let componentPropertyName;
|
|
20
|
+
const signals = {};
|
|
19
21
|
for (const statement of sourceFile.statements) {
|
|
20
22
|
if (ts.isImportDeclaration(statement)) {
|
|
21
23
|
const modulePath = statement.moduleSpecifier.getText();
|
|
22
24
|
if (statement.importClause && modulePath.includes('@ibyar/aurora') || modulePath.includes('@ibyar/core')) {
|
|
23
25
|
statement.importClause?.namedBindings?.forEachChild(importSpecifier => {
|
|
24
|
-
if (visitSourceFile) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
26
|
if (ts.isImportSpecifier(importSpecifier)) {
|
|
28
|
-
|
|
27
|
+
const importName = importSpecifier.propertyName?.getText() ?? importSpecifier.name.getText();
|
|
28
|
+
if (importName === 'Component') {
|
|
29
29
|
visitSourceFile = true;
|
|
30
30
|
componentPropertyName = importSpecifier.name.getText();
|
|
31
31
|
}
|
|
32
|
-
else if (
|
|
33
|
-
|
|
34
|
-
componentPropertyName = importSpecifier.name.getText();
|
|
32
|
+
else if (SIGNAL_NAMES.includes(importName)) {
|
|
33
|
+
signals[importName] = importSpecifier.name.getText();
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
});
|
|
@@ -58,12 +57,13 @@ export function beforeCompileComponentOptions(program) {
|
|
|
58
57
|
return childNode;
|
|
59
58
|
}
|
|
60
59
|
const viewInfos = [];
|
|
60
|
+
const signalMetadata = scanSignals(childNode, signals);
|
|
61
61
|
const modifiers = childNode.modifiers?.map(modifier => {
|
|
62
62
|
if (!ts.isDecorator(modifier)) {
|
|
63
63
|
return modifier;
|
|
64
64
|
}
|
|
65
65
|
const updateDecoratorOptions = (option) => {
|
|
66
|
-
const selector =
|
|
66
|
+
const selector = getTextValueFormLiteralProperty(option, 'selector');
|
|
67
67
|
if (!selector) {
|
|
68
68
|
console.error(`Component missing selector name: ${childNode.name?.getText()}`);
|
|
69
69
|
return option;
|
|
@@ -76,12 +76,18 @@ export function beforeCompileComponentOptions(program) {
|
|
|
76
76
|
const extendsType = getExtendsTypeBySelector(extend);
|
|
77
77
|
const formAssociatedProperty = option.properties.find(prop => prop.name?.getText() === 'formAssociated');
|
|
78
78
|
const formAssociated = formAssociatedProperty?.initializer.getText().substring(1, formAssociatedProperty?.initializer.getText().length - 1);
|
|
79
|
+
const disabledFeaturesInitializer = option.properties.find(prop => prop.name?.getText() === 'disabledFeatures')?.initializer;
|
|
80
|
+
let disabledFeatures = undefined;
|
|
81
|
+
if (disabledFeaturesInitializer && ts.isArrayLiteralExpression(disabledFeaturesInitializer)) {
|
|
82
|
+
disabledFeatures = disabledFeaturesInitializer.elements.filter(ts.isStringLiteral).map(el => el.getText(sourceFile));
|
|
83
|
+
}
|
|
79
84
|
viewInfos.push({
|
|
80
85
|
selector,
|
|
81
86
|
viewName,
|
|
82
87
|
extendsType,
|
|
83
|
-
|
|
88
|
+
interfaceType: createInterfaceType(viewName, extendsType),
|
|
84
89
|
formAssociated: 'true' == formAssociated,
|
|
90
|
+
disabledFeatures: disabledFeatures,
|
|
85
91
|
});
|
|
86
92
|
const stylesProperty = option.properties.find(prop => prop.name?.getText() === 'styles');
|
|
87
93
|
const styles = stylesProperty?.initializer.getText().substring(1, stylesProperty?.initializer.getText().length - 1);
|
|
@@ -98,6 +104,7 @@ export function beforeCompileComponentOptions(program) {
|
|
|
98
104
|
const name = ts.factory.createIdentifier('compiledTemplate');
|
|
99
105
|
const initializer = ts.factory.createObjectLiteralExpression(convertToProperties(json));
|
|
100
106
|
const update = ts.factory.updatePropertyAssignment(template, name, initializer);
|
|
107
|
+
const signalsOption = createSignalsAssignment(signalMetadata);
|
|
101
108
|
decoratorArguments = option.properties.map(prop => {
|
|
102
109
|
if (template === prop) {
|
|
103
110
|
return update;
|
|
@@ -108,7 +115,7 @@ export function beforeCompileComponentOptions(program) {
|
|
|
108
115
|
return false;
|
|
109
116
|
}
|
|
110
117
|
return true;
|
|
111
|
-
});
|
|
118
|
+
}).concat([signalsOption]);
|
|
112
119
|
return ts.factory.updateObjectLiteralExpression(option, decoratorArguments);
|
|
113
120
|
}
|
|
114
121
|
return option;
|
|
@@ -148,6 +155,7 @@ export function beforeCompileComponentOptions(program) {
|
|
|
148
155
|
views: viewInfos,
|
|
149
156
|
inputs: getInputs(childNode, typeChecker),
|
|
150
157
|
outputs: getOutputs(childNode, typeChecker),
|
|
158
|
+
signals: signalMetadata,
|
|
151
159
|
});
|
|
152
160
|
// const staticMembers = viewInfos.map(
|
|
153
161
|
// viewInfo => ts.factory.createPropertyDeclaration(
|
|
@@ -171,7 +179,7 @@ export function beforeCompileComponentOptions(program) {
|
|
|
171
179
|
const statements = updateSourceFile.statements?.slice() ?? [];
|
|
172
180
|
statements.push(createConstructorOfViewInterfaceDeclaration());
|
|
173
181
|
const interfaces = classes.flatMap(s => s.views).map(info => {
|
|
174
|
-
return ts.setTextRange(info.
|
|
182
|
+
return ts.setTextRange(info.interfaceType, updateSourceFile);
|
|
175
183
|
});
|
|
176
184
|
statements.push(); //emit inputs and outputs for component and directives;
|
|
177
185
|
statements.push(...interfaces);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-component.js","sourceRoot":"","sources":["../../../src/cli/transformer/before-component.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { buildExpressionNodes } from '@ibyar/core/node.js';\nimport { htmlParser } from '@ibyar/elements/node.js';\nimport { getExtendsTypeBySelector } from '../elements/tags.js';\nimport {\n\tcreateConstructorOfViewInterfaceDeclaration,\n\tconvertToProperties, createInterfaceType\n} from './factory.js';\nimport { moduleManger, ViewInfo, ClassInfo } from './modules.js';\nimport {\n\tgetInputs, getOutputs,\n\tgetTextValueForProperty,\n\tisComponentDecorator\n} from './helpers.js';\n\n\n\n/**\n * search for `@Component({})` and precompile the source code\n * @param program a ts program \n * @returns a transformer factory of source file\n */\nexport function beforeCompileComponentOptions(program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n\tconst typeChecker = program.getTypeChecker();\n\treturn (context: ts.TransformationContext): ts.Transformer<ts.SourceFile> => {\n\t\treturn sourceFile => {\n\t\t\tlet visitSourceFile = false;\n\t\t\tlet componentPropertyName: string;\n\t\t\tfor (const statement of sourceFile.statements) {\n\t\t\t\tif (ts.isImportDeclaration(statement)) {\n\t\t\t\t\tconst modulePath = statement.moduleSpecifier.getText();\n\t\t\t\t\tif (statement.importClause && modulePath.includes('@ibyar/aurora') || modulePath.includes('@ibyar/core')) {\n\t\t\t\t\t\tstatement.importClause?.namedBindings?.forEachChild(importSpecifier => {\n\t\t\t\t\t\t\tif (visitSourceFile) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ts.isImportSpecifier(importSpecifier)) {\n\t\t\t\t\t\t\t\tif (importSpecifier.propertyName?.getText() === 'Component') {\n\t\t\t\t\t\t\t\t\tvisitSourceFile = true;\n\t\t\t\t\t\t\t\t\tcomponentPropertyName = importSpecifier.name.getText();\n\t\t\t\t\t\t\t\t} else if (importSpecifier.name.getText() === 'Component') {\n\t\t\t\t\t\t\t\t\tvisitSourceFile = true;\n\t\t\t\t\t\t\t\t\tcomponentPropertyName = importSpecifier.name.getText();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (visitSourceFile) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!visitSourceFile) {\n\t\t\t\treturn sourceFile;\n\t\t\t}\n\n\t\t\tconst classes: ClassInfo[] = [];\n\t\t\tconst updateSourceFile = ts.visitNode(sourceFile, (node: ts.SourceFile) => {\n\t\t\t\treturn ts.visitEachChild(node, (childNode) => {\n\t\t\t\t\tlet decoratorArguments: ts.ObjectLiteralElementLike[] | undefined;\n\t\t\t\t\tif (ts.isClassDeclaration(childNode)) {\n\t\t\t\t\t\tconst decorators = ts.getDecorators(childNode);\n\t\t\t\t\t\tif (!decorators || decorators.length === 0) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hasDecorator = decorators.some(decorator => isComponentDecorator(decorator, componentPropertyName));\n\t\t\t\t\t\tif (!hasDecorator) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst viewInfos: ViewInfo[] = [];\n\t\t\t\t\t\tconst modifiers = childNode.modifiers?.map(modifier => {\n\t\t\t\t\t\t\tif (!ts.isDecorator(modifier)) {\n\t\t\t\t\t\t\t\treturn modifier;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst updateDecoratorOptions = (option: ts.ObjectLiteralExpression) => {\n\t\t\t\t\t\t\t\tconst selector = getTextValueForProperty(option, 'selector');\n\t\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\t\tconsole.error(`Component missing selector name: ${childNode.name?.getText()}`);\n\t\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst viewName = `HTML${selector.split('-')\n\t\t\t\t\t\t\t\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t\t\t\t\t\t\t\t.join('')}Element`;\n\n\n\t\t\t\t\t\t\t\tconst extendProperty = option.properties.find(prop => prop.name?.getText() === 'extend') as ts.PropertyAssignment | undefined;\n\t\t\t\t\t\t\t\tconst extend = extendProperty?.initializer.getText().substring(1, extendProperty?.initializer.getText().length - 1);\n\t\t\t\t\t\t\t\tconst extendsType = getExtendsTypeBySelector(extend);\n\n\t\t\t\t\t\t\t\tconst formAssociatedProperty = option.properties.find(prop => prop.name?.getText() === 'formAssociated') as ts.PropertyAssignment | undefined;\n\t\t\t\t\t\t\t\tconst formAssociated = formAssociatedProperty?.initializer.getText().substring(1, formAssociatedProperty?.initializer.getText().length - 1);\n\n\t\t\t\t\t\t\t\tviewInfos.push({\n\t\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\t\tviewName,\n\t\t\t\t\t\t\t\t\textendsType,\n\t\t\t\t\t\t\t\t\tinterFaceType: createInterfaceType(viewName, extendsType),\n\t\t\t\t\t\t\t\t\tformAssociated: 'true' == formAssociated,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst stylesProperty = option.properties.find(prop => prop.name?.getText() === 'styles') as ts.PropertyAssignment | undefined;\n\t\t\t\t\t\t\t\tconst styles = stylesProperty?.initializer.getText().substring(1, stylesProperty?.initializer.getText().length - 1);\n\n\t\t\t\t\t\t\t\tconst template = option.properties.find(prop => prop.name?.getText() === 'template');\n\t\t\t\t\t\t\t\tif (template && ts.isPropertyAssignment(template) && ts.isStringLiteralLike(template.initializer)) {\n\t\t\t\t\t\t\t\t\tconst text = template?.initializer.getText().substring(1, template?.initializer.getText().length - 1);\n\t\t\t\t\t\t\t\t\tconst html = styles\n\t\t\t\t\t\t\t\t\t\t? `<style>${styles}</style>${text}`\n\t\t\t\t\t\t\t\t\t\t: text;\n\t\t\t\t\t\t\t\t\tconst domNode = htmlParser.toDomRootNode(html);\n\t\t\t\t\t\t\t\t\tbuildExpressionNodes(domNode);\n\t\t\t\t\t\t\t\t\tconst serialized = JSON.stringify(domNode);\n\t\t\t\t\t\t\t\t\tconst json = JSON.parse(serialized);\n\t\t\t\t\t\t\t\t\tconst name = ts.factory.createIdentifier('compiledTemplate');\n\t\t\t\t\t\t\t\t\tconst initializer = ts.factory.createObjectLiteralExpression(convertToProperties(json));\n\t\t\t\t\t\t\t\t\tconst update = ts.factory.updatePropertyAssignment(template, name, initializer);\n\t\t\t\t\t\t\t\t\tdecoratorArguments = option.properties.map(prop => {\n\t\t\t\t\t\t\t\t\t\tif (template === prop) {\n\t\t\t\t\t\t\t\t\t\t\treturn update;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn prop;\n\t\t\t\t\t\t\t\t\t}).filter(prop => {\n\t\t\t\t\t\t\t\t\t\tif (prop.name?.getText(sourceFile) === 'styles') {\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\treturn ts.factory.updateObjectLiteralExpression(option, decoratorArguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn option;\n\n\t\t\t\t\t\t\t\t// options.properties.filter((prop: ts.PropertyAssignment) => {\n\t\t\t\t\t\t\t\t// \tswitch (prop.name.getText()) {\n\t\t\t\t\t\t\t\t// \t\tcase 'template':\n\t\t\t\t\t\t\t\t// \t\tcase 'templateUrl':\n\t\t\t\t\t\t\t\t// \t\tcase 'styles':\n\t\t\t\t\t\t\t\t// \t\t\treturn true;\n\t\t\t\t\t\t\t\t// \t\tdefault: return false;\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst decoratorCall = modifier.expression as ts.CallExpression;\n\t\t\t\t\t\t\tconst options = decoratorCall.arguments[0];\n\t\t\t\t\t\t\tlet argumentsOption: ts.Expression | undefined;\n\t\t\t\t\t\t\tif (ts.isArrayLiteralExpression(options)) {\n\t\t\t\t\t\t\t\tconst elements: ts.Expression[] = options.elements.map(element => {\n\t\t\t\t\t\t\t\t\tif (ts.isObjectLiteralExpression(element)) {\n\t\t\t\t\t\t\t\t\t\treturn updateDecoratorOptions(element);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn element;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\targumentsOption = ts.factory.updateArrayLiteralExpression(options, elements);\n\t\t\t\t\t\t\t} else if (ts.isObjectLiteralExpression(options)) {\n\t\t\t\t\t\t\t\targumentsOption = updateDecoratorOptions(options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (argumentsOption) {\n\t\t\t\t\t\t\t\treturn ts.factory.updateDecorator(\n\t\t\t\t\t\t\t\t\tmodifier,\n\t\t\t\t\t\t\t\t\tts.factory.updateCallExpression(\n\t\t\t\t\t\t\t\t\t\tdecoratorCall,\n\t\t\t\t\t\t\t\t\t\tdecoratorCall.expression,\n\t\t\t\t\t\t\t\t\t\tdecoratorCall.typeArguments,\n\t\t\t\t\t\t\t\t\t\t[argumentsOption]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn modifier;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tclasses.push({\n\t\t\t\t\t\t\ttype: 'component',\n\t\t\t\t\t\t\tname: childNode.name?.getText() ?? '',\n\t\t\t\t\t\t\tviews: viewInfos,\n\t\t\t\t\t\t\tinputs: getInputs(childNode, typeChecker),\n\t\t\t\t\t\t\toutputs: getOutputs(childNode, typeChecker),\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// const staticMembers = viewInfos.map(\n\t\t\t\t\t\t// \tviewInfo => ts.factory.createPropertyDeclaration(\n\t\t\t\t\t\t// \t\t[\n\t\t\t\t\t\t// \t\t\tts.factory.createModifier(ts.SyntaxKind.StaticKeyword),\n\t\t\t\t\t\t// \t\t\tts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)\n\t\t\t\t\t\t// \t\t],\n\t\t\t\t\t\t// \t\tviewInfo.viewName,\n\t\t\t\t\t\t// \t\tundefined,\n\t\t\t\t\t\t// \t\tcreateStaticPropertyViewType(viewInfo.viewName),\n\t\t\t\t\t\t// \t\tundefined,\n\t\t\t\t\t\t// \t)\n\t\t\t\t\t\t// );\n\t\t\t\t\t\treturn ts.factory.updateClassDeclaration(\n\t\t\t\t\t\t\tchildNode,\n\t\t\t\t\t\t\tmodifiers ? ts.factory.createNodeArray(modifiers) : void 0,\n\t\t\t\t\t\t\tchildNode.name,\n\t\t\t\t\t\t\tchildNode.typeParameters,\n\t\t\t\t\t\t\tchildNode.heritageClauses,\n\t\t\t\t\t\t\t[/*...staticMembers,*/ ...childNode.members.slice()],\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn childNode;\n\t\t\t\t}, context);\n\t\t\t}) as ts.SourceFile;\n\t\t\tif (classes.length) {\n\t\t\t\tmoduleManger.add({ path: sourceFile.fileName, classes });\n\t\t\t\tconst statements = updateSourceFile.statements?.slice() ?? [];\n\t\t\t\tstatements.push(createConstructorOfViewInterfaceDeclaration());\n\t\t\t\tconst interfaces = classes.flatMap(s => s.views).map(info => {\n\t\t\t\t\treturn ts.setTextRange(info.interFaceType, updateSourceFile);\n\t\t\t\t});\n\t\t\t\tstatements.push(); //emit inputs and outputs for component and directives;\n\t\t\t\tstatements.push(...interfaces);\n\t\t\t\treturn ts.factory.updateSourceFile(\n\t\t\t\t\tsourceFile,\n\t\t\t\t\tstatements,\n\t\t\t\t\tupdateSourceFile.isDeclarationFile,\n\t\t\t\t\tupdateSourceFile.typeReferenceDirectives,\n\t\t\t\t\tupdateSourceFile.referencedFiles,\n\t\t\t\t\tupdateSourceFile.hasNoDefaultLib,\n\t\t\t\t\tupdateSourceFile.libReferenceDirectives,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn updateSourceFile;\n\t\t};\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"before-component.js","sourceRoot":"","sources":["../../../src/cli/transformer/before-component.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { buildExpressionNodes } from '@ibyar/core/node.js';\nimport { htmlParser } from '@ibyar/elements/node.js';\nimport { getExtendsTypeBySelector } from '../elements/tags.js';\nimport {\n\tcreateConstructorOfViewInterfaceDeclaration,\n\tconvertToProperties, createInterfaceType,\n\tcreateSignalsAssignment\n} from './factory.js';\nimport { moduleManger, ViewInfo, ClassInfo } from './modules.js';\nimport {\n\tgetInputs, getOutputs, scanSignals,\n\tgetTextValueFormLiteralProperty,\n\tisComponentDecorator\n} from './helpers.js';\nimport { SIGNAL_NAMES, SignalDetails, SignalKey } from './signals.js';\n\n\n\n/**\n * search for `@Component({})` and precompile the source code\n * @param program a ts program \n * @returns a transformer factory of source file\n */\nexport function beforeCompileComponentOptions(program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n\tconst typeChecker = program.getTypeChecker();\n\treturn (context: ts.TransformationContext): ts.Transformer<ts.SourceFile> => {\n\t\treturn sourceFile => {\n\t\t\tlet visitSourceFile = false;\n\t\t\tlet componentPropertyName: string;\n\t\t\tconst signals: SignalDetails = {};\n\t\t\tfor (const statement of sourceFile.statements) {\n\t\t\t\tif (ts.isImportDeclaration(statement)) {\n\t\t\t\t\tconst modulePath = statement.moduleSpecifier.getText();\n\t\t\t\t\tif (statement.importClause && modulePath.includes('@ibyar/aurora') || modulePath.includes('@ibyar/core')) {\n\t\t\t\t\t\tstatement.importClause?.namedBindings?.forEachChild(importSpecifier => {\n\t\t\t\t\t\t\tif (ts.isImportSpecifier(importSpecifier)) {\n\t\t\t\t\t\t\t\tconst importName = importSpecifier.propertyName?.getText() ?? importSpecifier.name.getText();\n\t\t\t\t\t\t\t\tif (importName === 'Component') {\n\t\t\t\t\t\t\t\t\tvisitSourceFile = true;\n\t\t\t\t\t\t\t\t\tcomponentPropertyName = importSpecifier.name.getText();\n\t\t\t\t\t\t\t\t} else if (SIGNAL_NAMES.includes(importName)) {\n\t\t\t\t\t\t\t\t\tsignals[importName as SignalKey] = importSpecifier.name.getText();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (visitSourceFile) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!visitSourceFile) {\n\t\t\t\treturn sourceFile;\n\t\t\t}\n\n\t\t\tconst classes: ClassInfo[] = [];\n\t\t\tconst updateSourceFile = ts.visitNode(sourceFile, (node: ts.SourceFile) => {\n\t\t\t\treturn ts.visitEachChild(node, (childNode) => {\n\t\t\t\t\tlet decoratorArguments: ts.ObjectLiteralElementLike[] | undefined;\n\t\t\t\t\tif (ts.isClassDeclaration(childNode)) {\n\t\t\t\t\t\tconst decorators = ts.getDecorators(childNode);\n\t\t\t\t\t\tif (!decorators || decorators.length === 0) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hasDecorator = decorators.some(decorator => isComponentDecorator(decorator, componentPropertyName));\n\t\t\t\t\t\tif (!hasDecorator) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst viewInfos: ViewInfo[] = [];\n\t\t\t\t\t\tconst signalMetadata = scanSignals(childNode, signals);\n\t\t\t\t\t\tconst modifiers = childNode.modifiers?.map(modifier => {\n\t\t\t\t\t\t\tif (!ts.isDecorator(modifier)) {\n\t\t\t\t\t\t\t\treturn modifier;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst updateDecoratorOptions = (option: ts.ObjectLiteralExpression) => {\n\t\t\t\t\t\t\t\tconst selector = getTextValueFormLiteralProperty(option, 'selector');\n\t\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\t\tconsole.error(`Component missing selector name: ${childNode.name?.getText()}`);\n\t\t\t\t\t\t\t\t\treturn option;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst viewName = `HTML${selector.split('-')\n\t\t\t\t\t\t\t\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t\t\t\t\t\t\t\t.join('')}Element`;\n\n\n\t\t\t\t\t\t\t\tconst extendProperty = option.properties.find(prop => prop.name?.getText() === 'extend') as ts.PropertyAssignment | undefined;\n\t\t\t\t\t\t\t\tconst extend = extendProperty?.initializer.getText().substring(1, extendProperty?.initializer.getText().length - 1);\n\t\t\t\t\t\t\t\tconst extendsType = getExtendsTypeBySelector(extend);\n\n\t\t\t\t\t\t\t\tconst formAssociatedProperty = option.properties.find(prop => prop.name?.getText() === 'formAssociated') as ts.PropertyAssignment | undefined;\n\t\t\t\t\t\t\t\tconst formAssociated = formAssociatedProperty?.initializer.getText().substring(1, formAssociatedProperty?.initializer.getText().length - 1);\n\n\t\t\t\t\t\t\t\tconst disabledFeaturesInitializer = (option.properties.find(prop => prop.name?.getText() === 'disabledFeatures') as ts.PropertyAssignment | undefined)?.initializer as ts.ArrayLiteralExpression | undefined;\n\t\t\t\t\t\t\t\tlet disabledFeatures: string[] | undefined = undefined;\n\t\t\t\t\t\t\t\tif (disabledFeaturesInitializer && ts.isArrayLiteralExpression(disabledFeaturesInitializer)) {\n\t\t\t\t\t\t\t\t\tdisabledFeatures = disabledFeaturesInitializer.elements.filter(ts.isStringLiteral).map(el => el.getText(sourceFile));\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tviewInfos.push({\n\t\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\t\tviewName,\n\t\t\t\t\t\t\t\t\textendsType,\n\t\t\t\t\t\t\t\t\tinterfaceType: createInterfaceType(viewName, extendsType),\n\t\t\t\t\t\t\t\t\tformAssociated: 'true' == formAssociated,\n\t\t\t\t\t\t\t\t\tdisabledFeatures: disabledFeatures,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst stylesProperty = option.properties.find(prop => prop.name?.getText() === 'styles') as ts.PropertyAssignment | undefined;\n\t\t\t\t\t\t\t\tconst styles = stylesProperty?.initializer.getText().substring(1, stylesProperty?.initializer.getText().length - 1);\n\n\t\t\t\t\t\t\t\tconst template = option.properties.find(prop => prop.name?.getText() === 'template');\n\t\t\t\t\t\t\t\tif (template && ts.isPropertyAssignment(template) && ts.isStringLiteralLike(template.initializer)) {\n\t\t\t\t\t\t\t\t\tconst text = template?.initializer.getText().substring(1, template?.initializer.getText().length - 1);\n\t\t\t\t\t\t\t\t\tconst html = styles\n\t\t\t\t\t\t\t\t\t\t? `<style>${styles}</style>${text}`\n\t\t\t\t\t\t\t\t\t\t: text;\n\t\t\t\t\t\t\t\t\tconst domNode = htmlParser.toDomRootNode(html);\n\t\t\t\t\t\t\t\t\tbuildExpressionNodes(domNode);\n\t\t\t\t\t\t\t\t\tconst serialized = JSON.stringify(domNode);\n\t\t\t\t\t\t\t\t\tconst json = JSON.parse(serialized);\n\t\t\t\t\t\t\t\t\tconst name = ts.factory.createIdentifier('compiledTemplate');\n\t\t\t\t\t\t\t\t\tconst initializer = ts.factory.createObjectLiteralExpression(convertToProperties(json));\n\t\t\t\t\t\t\t\t\tconst update = ts.factory.updatePropertyAssignment(template, name, initializer);\n\t\t\t\t\t\t\t\t\tconst signalsOption = createSignalsAssignment(signalMetadata);\n\t\t\t\t\t\t\t\t\tdecoratorArguments = option.properties.map(prop => {\n\t\t\t\t\t\t\t\t\t\tif (template === prop) {\n\t\t\t\t\t\t\t\t\t\t\treturn update;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn prop;\n\t\t\t\t\t\t\t\t\t}).filter(prop => {\n\t\t\t\t\t\t\t\t\t\tif (prop.name?.getText(sourceFile) === 'styles') {\n\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}).concat([signalsOption]);\n\t\t\t\t\t\t\t\t\treturn ts.factory.updateObjectLiteralExpression(option, decoratorArguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn option;\n\n\t\t\t\t\t\t\t\t// options.properties.filter((prop: ts.PropertyAssignment) => {\n\t\t\t\t\t\t\t\t// \tswitch (prop.name.getText()) {\n\t\t\t\t\t\t\t\t// \t\tcase 'template':\n\t\t\t\t\t\t\t\t// \t\tcase 'templateUrl':\n\t\t\t\t\t\t\t\t// \t\tcase 'styles':\n\t\t\t\t\t\t\t\t// \t\t\treturn true;\n\t\t\t\t\t\t\t\t// \t\tdefault: return false;\n\t\t\t\t\t\t\t\t// \t}\n\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst decoratorCall = modifier.expression as ts.CallExpression;\n\t\t\t\t\t\t\tconst options = decoratorCall.arguments[0];\n\t\t\t\t\t\t\tlet argumentsOption: ts.Expression | undefined;\n\t\t\t\t\t\t\tif (ts.isArrayLiteralExpression(options)) {\n\t\t\t\t\t\t\t\tconst elements: ts.Expression[] = options.elements.map(element => {\n\t\t\t\t\t\t\t\t\tif (ts.isObjectLiteralExpression(element)) {\n\t\t\t\t\t\t\t\t\t\treturn updateDecoratorOptions(element);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn element;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\targumentsOption = ts.factory.updateArrayLiteralExpression(options, elements);\n\t\t\t\t\t\t\t} else if (ts.isObjectLiteralExpression(options)) {\n\t\t\t\t\t\t\t\targumentsOption = updateDecoratorOptions(options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (argumentsOption) {\n\t\t\t\t\t\t\t\treturn ts.factory.updateDecorator(\n\t\t\t\t\t\t\t\t\tmodifier,\n\t\t\t\t\t\t\t\t\tts.factory.updateCallExpression(\n\t\t\t\t\t\t\t\t\t\tdecoratorCall,\n\t\t\t\t\t\t\t\t\t\tdecoratorCall.expression,\n\t\t\t\t\t\t\t\t\t\tdecoratorCall.typeArguments,\n\t\t\t\t\t\t\t\t\t\t[argumentsOption]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn modifier;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tclasses.push({\n\t\t\t\t\t\t\ttype: 'component',\n\t\t\t\t\t\t\tname: childNode.name?.getText() ?? '',\n\t\t\t\t\t\t\tviews: viewInfos,\n\t\t\t\t\t\t\tinputs: getInputs(childNode, typeChecker),\n\t\t\t\t\t\t\toutputs: getOutputs(childNode, typeChecker),\n\t\t\t\t\t\t\tsignals: signalMetadata,\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// const staticMembers = viewInfos.map(\n\t\t\t\t\t\t// \tviewInfo => ts.factory.createPropertyDeclaration(\n\t\t\t\t\t\t// \t\t[\n\t\t\t\t\t\t// \t\t\tts.factory.createModifier(ts.SyntaxKind.StaticKeyword),\n\t\t\t\t\t\t// \t\t\tts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)\n\t\t\t\t\t\t// \t\t],\n\t\t\t\t\t\t// \t\tviewInfo.viewName,\n\t\t\t\t\t\t// \t\tundefined,\n\t\t\t\t\t\t// \t\tcreateStaticPropertyViewType(viewInfo.viewName),\n\t\t\t\t\t\t// \t\tundefined,\n\t\t\t\t\t\t// \t)\n\t\t\t\t\t\t// );\n\t\t\t\t\t\treturn ts.factory.updateClassDeclaration(\n\t\t\t\t\t\t\tchildNode,\n\t\t\t\t\t\t\tmodifiers ? ts.factory.createNodeArray(modifiers) : void 0,\n\t\t\t\t\t\t\tchildNode.name,\n\t\t\t\t\t\t\tchildNode.typeParameters,\n\t\t\t\t\t\t\tchildNode.heritageClauses,\n\t\t\t\t\t\t\t[/*...staticMembers,*/ ...childNode.members.slice()],\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn childNode;\n\t\t\t\t}, context);\n\t\t\t}) as ts.SourceFile;\n\t\t\tif (classes.length) {\n\t\t\t\tmoduleManger.add({ path: sourceFile.fileName, classes });\n\t\t\t\tconst statements = updateSourceFile.statements?.slice() ?? [];\n\t\t\t\tstatements.push(createConstructorOfViewInterfaceDeclaration());\n\t\t\t\tconst interfaces = classes.flatMap(s => s.views).map(info => {\n\t\t\t\t\treturn ts.setTextRange(info.interfaceType, updateSourceFile);\n\t\t\t\t});\n\t\t\t\tstatements.push(); //emit inputs and outputs for component and directives;\n\t\t\t\tstatements.push(...interfaces);\n\t\t\t\treturn ts.factory.updateSourceFile(\n\t\t\t\t\tsourceFile,\n\t\t\t\t\tstatements,\n\t\t\t\t\tupdateSourceFile.isDeclarationFile,\n\t\t\t\t\tupdateSourceFile.typeReferenceDirectives,\n\t\t\t\t\tupdateSourceFile.referencedFiles,\n\t\t\t\t\tupdateSourceFile.hasNoDefaultLib,\n\t\t\t\t\tupdateSourceFile.libReferenceDirectives,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn updateSourceFile;\n\t\t};\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-directive.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/before-directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"before-directive.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/before-directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAanD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,CA0FvG"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import ts from 'typescript/lib/tsserverlibrary.js';
|
|
2
2
|
import { moduleManger } from './modules.js';
|
|
3
|
-
import { getInputs, getOutputs,
|
|
3
|
+
import { getInputs, getOutputs, scanSignals, getTextValueFormArrayLiteralProperty, getTextValueFormLiteralProperty, isDirectiveDecorator } from './helpers.js';
|
|
4
4
|
import { registerDirectiveCall } from '../directives/register.js';
|
|
5
|
+
import { SIGNAL_NAMES } from './signals.js';
|
|
6
|
+
import { createSignalsAssignment } from './factory.js';
|
|
5
7
|
/**
|
|
6
8
|
* search for `@Directive({})` and to register with the html parser
|
|
7
9
|
* @param program a ts program
|
|
@@ -13,22 +15,20 @@ export function beforeCompileDirectiveOptions(program) {
|
|
|
13
15
|
return sourceFile => {
|
|
14
16
|
let visitSourceFile = false;
|
|
15
17
|
let directivePropertyName;
|
|
18
|
+
const signals = {};
|
|
16
19
|
for (const statement of sourceFile.statements) {
|
|
17
20
|
if (ts.isImportDeclaration(statement)) {
|
|
18
21
|
const modulePath = statement.moduleSpecifier.getText();
|
|
19
22
|
if (statement.importClause && modulePath.includes('@ibyar/aurora') || modulePath.includes('@ibyar/core')) {
|
|
20
23
|
statement.importClause?.namedBindings?.forEachChild(importSpecifier => {
|
|
21
|
-
if (visitSourceFile) {
|
|
22
|
-
return;
|
|
23
|
-
}
|
|
24
24
|
if (ts.isImportSpecifier(importSpecifier)) {
|
|
25
|
-
|
|
25
|
+
const importName = importSpecifier.propertyName?.getText() ?? importSpecifier.name.getText();
|
|
26
|
+
if (importName === 'Directive') {
|
|
26
27
|
visitSourceFile = true;
|
|
27
28
|
directivePropertyName = importSpecifier.name.getText();
|
|
28
29
|
}
|
|
29
|
-
else if (
|
|
30
|
-
|
|
31
|
-
directivePropertyName = importSpecifier.name.getText();
|
|
30
|
+
else if (SIGNAL_NAMES.includes(importName)) {
|
|
31
|
+
signals[importName] = importSpecifier.name.getText();
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
});
|
|
@@ -57,24 +57,34 @@ export function beforeCompileDirectiveOptions(program) {
|
|
|
57
57
|
if (ts.isDecorator(modifier) && isDirectiveDecorator(modifier, directivePropertyName)) {
|
|
58
58
|
const options = modifier.expression.arguments[0];
|
|
59
59
|
if (ts.isObjectLiteralExpression(options)) {
|
|
60
|
-
const selector =
|
|
60
|
+
const selector = getTextValueFormLiteralProperty(options, 'selector');
|
|
61
61
|
if (selector) {
|
|
62
|
-
const
|
|
62
|
+
const successors = getTextValueFormArrayLiteralProperty(options, 'successors');
|
|
63
63
|
const inputs = getInputs(childNode, typeChecker);
|
|
64
64
|
const outputs = getOutputs(childNode, typeChecker);
|
|
65
|
+
const signalDetails = scanSignals(childNode, signals);
|
|
66
|
+
const signalsOption = createSignalsAssignment(signalDetails);
|
|
67
|
+
const allInputs = (inputs ?? [])
|
|
68
|
+
.concat(signalDetails.input ?? [])
|
|
69
|
+
.concat(signalDetails.formValue ?? [])
|
|
70
|
+
.concat(signalDetails.model ?? []);
|
|
71
|
+
const allOutputs = (outputs ?? []).
|
|
72
|
+
concat(signalDetails.output ?? [])
|
|
73
|
+
.concat(signalDetails.model ?? []);
|
|
65
74
|
registerDirectiveCall({
|
|
66
75
|
selector,
|
|
67
|
-
|
|
68
|
-
inputs,
|
|
69
|
-
outputs
|
|
76
|
+
successors,
|
|
77
|
+
inputs: allInputs,
|
|
78
|
+
outputs: allOutputs,
|
|
70
79
|
});
|
|
71
80
|
classes.push({
|
|
72
81
|
type: 'directive',
|
|
73
82
|
name: selector,
|
|
74
|
-
|
|
83
|
+
successors,
|
|
75
84
|
inputs,
|
|
76
85
|
outputs,
|
|
77
86
|
views: [],
|
|
87
|
+
signals: signalDetails
|
|
78
88
|
});
|
|
79
89
|
}
|
|
80
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"before-directive.js","sourceRoot":"","sources":["../../../src/cli/transformer/before-directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACnD,OAAO,EAAa,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACN,SAAS,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"before-directive.js","sourceRoot":"","sources":["../../../src/cli/transformer/before-directive.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { ClassInfo, moduleManger } from './modules.js';\nimport {\n\tgetInputs, getOutputs, scanSignals,\n\tgetTextValueFormArrayLiteralProperty,\n\tgetTextValueFormLiteralProperty,\n\tisDirectiveDecorator\n} from './helpers.js';\nimport { registerDirectiveCall } from '../directives/register.js';\nimport { SIGNAL_NAMES, SignalDetails, SignalKey } from './signals.js';\nimport { createSignalsAssignment } from './factory.js';\n\n\n/**\n * search for `@Directive({})` and to register with the html parser\n * @param program a ts program \n * @returns a transformer factory of source file\n */\nexport function beforeCompileDirectiveOptions(program: ts.Program): ts.TransformerFactory<ts.SourceFile> {\n\tconst typeChecker = program.getTypeChecker();\n\treturn (context: ts.TransformationContext): ts.Transformer<ts.SourceFile> => {\n\t\treturn sourceFile => {\n\t\t\tlet visitSourceFile = false;\n\t\t\tlet directivePropertyName: string;\n\t\t\tconst signals: SignalDetails = {};\n\t\t\tfor (const statement of sourceFile.statements) {\n\t\t\t\tif (ts.isImportDeclaration(statement)) {\n\t\t\t\t\tconst modulePath = statement.moduleSpecifier.getText();\n\t\t\t\t\tif (statement.importClause && modulePath.includes('@ibyar/aurora') || modulePath.includes('@ibyar/core')) {\n\t\t\t\t\t\tstatement.importClause?.namedBindings?.forEachChild(importSpecifier => {\n\t\t\t\t\t\t\tif (ts.isImportSpecifier(importSpecifier)) {\n\t\t\t\t\t\t\t\tconst importName = importSpecifier.propertyName?.getText() ?? importSpecifier.name.getText();\n\t\t\t\t\t\t\t\tif (importName === 'Directive') {\n\t\t\t\t\t\t\t\t\tvisitSourceFile = true;\n\t\t\t\t\t\t\t\t\tdirectivePropertyName = importSpecifier.name.getText();\n\t\t\t\t\t\t\t\t} else if (SIGNAL_NAMES.includes(importName)) {\n\t\t\t\t\t\t\t\t\tsignals[importName as SignalKey] = importSpecifier.name.getText();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (visitSourceFile) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!visitSourceFile) {\n\t\t\t\treturn sourceFile;\n\t\t\t}\n\t\t\tconst classes: ClassInfo[] = [];\n\t\t\tts.visitNode(sourceFile, (node: ts.SourceFile) => {\n\t\t\t\treturn ts.visitEachChild(node, (childNode) => {\n\t\t\t\t\tif (ts.isClassDeclaration(childNode)) {\n\t\t\t\t\t\tconst decorators = ts.getDecorators(childNode);\n\t\t\t\t\t\tif (!decorators || decorators.length === 0) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hasDecorator = decorators.some(decorator => isDirectiveDecorator(decorator, directivePropertyName));\n\t\t\t\t\t\tif (!hasDecorator) {\n\t\t\t\t\t\t\treturn childNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchildNode.modifiers?.forEach(modifier => {\n\t\t\t\t\t\t\tif (ts.isDecorator(modifier) && isDirectiveDecorator(modifier, directivePropertyName)) {\n\t\t\t\t\t\t\t\tconst options = (modifier.expression as ts.CallExpression).arguments[0];\n\t\t\t\t\t\t\t\tif (ts.isObjectLiteralExpression(options)) {\n\t\t\t\t\t\t\t\t\tconst selector = getTextValueFormLiteralProperty(options, 'selector');\n\t\t\t\t\t\t\t\t\tif (selector) {\n\t\t\t\t\t\t\t\t\t\tconst successors = getTextValueFormArrayLiteralProperty(options, 'successors');\n\t\t\t\t\t\t\t\t\t\tconst inputs = getInputs(childNode, typeChecker);\n\t\t\t\t\t\t\t\t\t\tconst outputs = getOutputs(childNode, typeChecker);\n\t\t\t\t\t\t\t\t\t\tconst signalDetails = scanSignals(childNode, signals);\n\t\t\t\t\t\t\t\t\t\tconst signalsOption = createSignalsAssignment(signalDetails);\n\t\t\t\t\t\t\t\t\t\tconst allInputs = (inputs ?? [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(signalDetails.input ?? [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(signalDetails.formValue ?? [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(signalDetails.model ?? []);\n\t\t\t\t\t\t\t\t\t\tconst allOutputs = (outputs ?? []).\n\t\t\t\t\t\t\t\t\t\t\tconcat(signalDetails.output ?? [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(signalDetails.model ?? []);\n\t\t\t\t\t\t\t\t\t\tregisterDirectiveCall({\n\t\t\t\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\t\t\t\tsuccessors,\n\t\t\t\t\t\t\t\t\t\t\tinputs: allInputs,\n\t\t\t\t\t\t\t\t\t\t\toutputs: allOutputs,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tclasses.push({\n\t\t\t\t\t\t\t\t\t\t\ttype: 'directive',\n\t\t\t\t\t\t\t\t\t\t\tname: selector,\n\t\t\t\t\t\t\t\t\t\t\tsuccessors,\n\t\t\t\t\t\t\t\t\t\t\tinputs,\n\t\t\t\t\t\t\t\t\t\t\toutputs,\n\t\t\t\t\t\t\t\t\t\t\tviews: [],\n\t\t\t\t\t\t\t\t\t\t\tsignals: signalDetails\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn childNode;\n\t\t\t\t}, context);\n\t\t\t});\n\t\t\tif (classes.length) {\n\t\t\t\tmoduleManger.add({ path: sourceFile.fileName, classes });\n\t\t\t}\n\t\t\treturn sourceFile;\n\t\t};\n\t};\n}\n"]}
|
package/transformer/factory.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ts from 'typescript/lib/tsserverlibrary.js';
|
|
2
|
-
import { ClassInfo } from './modules.js';
|
|
2
|
+
import { ClassInfo, SignalInfo } from './modules.js';
|
|
3
|
+
import { SignalKey } from './signals.js';
|
|
3
4
|
export declare function convertToProperties(json: {
|
|
4
5
|
[key: string]: any;
|
|
5
6
|
}): ts.ObjectLiteralElementLike[];
|
|
@@ -53,4 +54,12 @@ export declare function updateModuleTypeWithComponentView(classes: ClassInfo[]):
|
|
|
53
54
|
* @returns new array of statements
|
|
54
55
|
*/
|
|
55
56
|
export declare function updateModuleTypeWithDirectives(classes: ClassInfo[]): ts.NodeArray<ts.Statement>;
|
|
57
|
+
export declare function convertToRuntimeMetadata(signalMetadata: Partial<Record<SignalKey, SignalInfo[]>>): {
|
|
58
|
+
signal: string;
|
|
59
|
+
options: {
|
|
60
|
+
name: string;
|
|
61
|
+
alias: string;
|
|
62
|
+
}[];
|
|
63
|
+
}[];
|
|
64
|
+
export declare function createSignalsAssignment(signalMetadata: Partial<Record<SignalKey, SignalInfo[]>>): ts.PropertyAssignment;
|
|
56
65
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,EAAE,CAAC,wBAAwB,EAAE,CAG/F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,wBAAwB,CAEpF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,UAAU,CAmB3D;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,2BAQxE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,sBAWjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,2CAA2C,4BAY1D;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,wBAG5D;AAGD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,kBAAyB,EAAE,UAAU,gBAAmB,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAEvJ;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,kBAAyB,EAAE,UAAU,gBAAmB,GAAG,CAAC,CAErI;AAED;;;;;;GAMG;AAEH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAQ5H;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,EAAE,CAAC,wBAAwB,EAAE,CAG/F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,wBAAwB,CAEpF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,UAAU,CAmB3D;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,2BAQxE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,sBAWjD;AAED;;;;;;;;;GASG;AACH,wBAAgB,2CAA2C,4BAY1D;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,wBAG5D;AAGD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,kBAAyB,EAAE,UAAU,gBAAmB,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAEvJ;AAED,wBAAgB,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,kBAAyB,EAAE,UAAU,gBAAmB,GAAG,CAAC,CAErI;AAED;;;;;;GAMG;AAEH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAQ5H;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAsClG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAwB/F;AAGD,wBAAgB,wBAAwB,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;;;;;;IAkBhG;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,yBAE/F"}
|
package/transformer/factory.js
CHANGED
|
@@ -94,8 +94,9 @@ export function updateModuleTypeWithComponentView(classes) {
|
|
|
94
94
|
const inputs = c.inputs.map(input => input.aliasName);
|
|
95
95
|
const outputs = c.outputs.map(input => input.aliasName).map(output => 'on' + ToCamelCase(output));
|
|
96
96
|
const attributes = [...inputs, ...outputs].map(s => `'${s}'`).join(' | ');
|
|
97
|
+
const observedAttributes = attributes.length ? `public static observedAttributes: (${attributes})[];` : '';
|
|
97
98
|
const interfaceBody = `
|
|
98
|
-
|
|
99
|
+
${observedAttributes}
|
|
99
100
|
|
|
100
101
|
${c.inputs.map(input => `public ${input.aliasName}${input.type ? `: ${input.type}` : ''};`).join('\n')}
|
|
101
102
|
|
|
@@ -103,12 +104,18 @@ export function updateModuleTypeWithComponentView(classes) {
|
|
|
103
104
|
|
|
104
105
|
`;
|
|
105
106
|
// need to fix @FormValue type;
|
|
106
|
-
return c.views.map(view =>
|
|
107
|
+
return c.views.map(view => {
|
|
108
|
+
const disabledFeatures = (Array.isArray(view.disabledFeatures) && view.disabledFeatures.length > 0)
|
|
109
|
+
? `public static disabledFeatures: ('${view.disabledFeatures.join(' | ')}')[];`
|
|
110
|
+
: '';
|
|
111
|
+
return `
|
|
107
112
|
declare class ${view.viewName} extends ${view.extendsType} {
|
|
113
|
+
${disabledFeatures}
|
|
108
114
|
${interfaceBody.trim()}
|
|
109
115
|
}
|
|
110
116
|
declare interface ${view.viewName} extends ${view.formAssociated ? `BaseFormAssociatedComponent<${c.name}>, ` : ''}BaseComponent<${c.name}> {}
|
|
111
|
-
|
|
117
|
+
`;
|
|
118
|
+
});
|
|
112
119
|
});
|
|
113
120
|
const views = classes.flatMap(c => c.views.map(v => ({ tagName: v.selector, viewName: v.viewName })));
|
|
114
121
|
const sourceCode = `
|
|
@@ -145,8 +152,8 @@ export function updateModuleTypeWithDirectives(classes) {
|
|
|
145
152
|
const inputs = directive.inputs.map(input => `{name: '${input.name}', aliasName: '${input.aliasName}'}`);
|
|
146
153
|
const outputs = directive.outputs.map(output => `{name: '${output.name}', aliasName: '${output.aliasName}'}`);
|
|
147
154
|
const temp = [`selector: '${directive.name}'`];
|
|
148
|
-
if (directive.
|
|
149
|
-
temp.push(`
|
|
155
|
+
if (directive.successors) {
|
|
156
|
+
temp.push(`successors: [${directive.successors.map(successor => `'${successor}'`).join(',')}]`);
|
|
150
157
|
}
|
|
151
158
|
if (directive.inputs.length > 0) {
|
|
152
159
|
temp.push(`inputs: [${inputs.join(',')}]`);
|
|
@@ -165,4 +172,26 @@ export function updateModuleTypeWithDirectives(classes) {
|
|
|
165
172
|
});
|
|
166
173
|
return generateStatements(nodes.join());
|
|
167
174
|
}
|
|
175
|
+
export function convertToRuntimeMetadata(signalMetadata) {
|
|
176
|
+
return Object.entries(signalMetadata).flatMap(([key, infos]) => {
|
|
177
|
+
const optional = infos.filter(info => !info.necessity);
|
|
178
|
+
const optionalItem = {
|
|
179
|
+
signal: key,
|
|
180
|
+
options: optional.map(info => ({ name: info.name, alias: info.aliasName })),
|
|
181
|
+
};
|
|
182
|
+
const required = infos.filter(info => info.necessity);
|
|
183
|
+
if (!required.length) {
|
|
184
|
+
return [optionalItem];
|
|
185
|
+
}
|
|
186
|
+
const requiredItem = {
|
|
187
|
+
signal: key,
|
|
188
|
+
necessity: 'required',
|
|
189
|
+
options: required.map(info => ({ name: info.name, alias: info.aliasName })),
|
|
190
|
+
};
|
|
191
|
+
return [optionalItem, requiredItem];
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
export function createSignalsAssignment(signalMetadata) {
|
|
195
|
+
return ts.factory.createPropertyAssignment('signals', createInitializer(convertToRuntimeMetadata(signalMetadata)));
|
|
196
|
+
}
|
|
168
197
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/cli/transformer/factory.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { ToCamelCase } from '@ibyar/core/node.js';\nimport { ClassInfo } from './modules.js';\n\n\nexport function convertToProperties(json: { [key: string]: any }): ts.ObjectLiteralElementLike[] {\n\tconst keys = Object.keys(json);\n\treturn keys.map(key => createProperty(key, json[key]));\n}\n\nexport function createProperty(name: string, value: any): ts.ObjectLiteralElementLike {\n\treturn ts.factory.createPropertyAssignment(name, createInitializer(value));\n}\n\nexport function createInitializer(value: any): ts.Expression {\n\tif (Array.isArray(value)) {\n\t\tconst elements = value.map(createInitializer);\n\t\treturn ts.factory.createArrayLiteralExpression(elements);\n\t}\n\tswitch (typeof value) {\n\t\tcase 'string': return ts.factory.createStringLiteral(value);\n\t\tcase 'number': return ts.factory.createNumericLiteral(value);\n\t\tcase 'bigint': return ts.factory.createBigIntLiteral(value.toString());\n\t\tcase 'boolean': return value ? ts.factory.createTrue() : ts.factory.createFalse();\n\t\tcase 'object': {\n\t\t\tif (!value) {\n\t\t\t\treturn ts.factory.createNull();\n\t\t\t}\n\t\t\tconst properties = convertToProperties(value);\n\t\t\treturn ts.factory.createObjectLiteralExpression(properties);\n\t\t};\n\t}\n\treturn ts.factory.createNull();\n}\n\n\nexport function createInterfaceType(viewName: string, extendsType: string) {\n\tconst identifier = ts.factory.createIdentifier(extendsType);\n\tconst expressionWithTypeArguments = ts.factory.createExpressionWithTypeArguments(identifier, undefined);\n\tconst heritageClause = ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [expressionWithTypeArguments]);\n\treturn ts.factory.createInterfaceDeclaration(undefined, viewName, undefined, [heritageClause], []);\n\t// const exportModifier: ts.ModifierSyntaxKind = ts.SyntaxKind.ExportKeyword;\n\t// const modifier = ts.factory.createModifier(exportModifier);\n\t// return ts.factory.createInterfaceDeclaration([modifier], viewName, undefined, [heritageClause], []);\n}\n\nexport function createTypeLiteral(typeName: string) {\n\tconst members: ts.TypeElement[] = [\n\t\tts.factory.createConstructSignature(undefined, [], ts.factory.createTypeReferenceNode(typeName)),\n\t\tts.factory.createPropertySignature(\n\t\t\t[ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)],\n\t\t\t'prototype',\n\t\t\tundefined,\n\t\t\tts.factory.createTypeReferenceNode(typeName)\n\t\t),\n\t];\n\treturn ts.factory.createTypeLiteralNode(members);\n}\n\n/**\n * create view constructor interface of Type `T`\n * \n * ```ts\n * interface ConstructorOfView<T> {\n * \tnew(): T;\n * \treadonly prototype: T;\n * }\n * ```\n */\nexport function createConstructorOfViewInterfaceDeclaration() {\n\tconst typeParameter = ts.factory.createTypeParameterDeclaration(undefined, 'T');\n\tconst members: ts.TypeElement[] = [\n\t\tts.factory.createConstructSignature(undefined, [], ts.factory.createTypeReferenceNode('T')),\n\t\tts.factory.createPropertySignature(\n\t\t\t[ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)],\n\t\t\t'prototype',\n\t\t\tundefined,\n\t\t\tts.factory.createTypeReferenceNode('T')\n\t\t),\n\t];\n\treturn ts.factory.createInterfaceDeclaration(undefined, 'ConstructorOfView', [typeParameter], undefined, members);\n}\n\nexport function createStaticPropertyViewType(typeName: string) {\n\tconst typeArgument = ts.factory.createTypeReferenceNode(typeName);\n\treturn ts.factory.createTypeReferenceNode('ConstructorOfView', [typeArgument]);\n}\n\n\nexport function generateStatements(sourceText: string, scriptTarget = ts.ScriptTarget.ES2020, scriptKind = ts.ScriptKind.TS): ts.NodeArray<ts.Statement> {\n\treturn ts.createSourceFile('temp', sourceText, scriptTarget, false, scriptKind).statements;\n}\n\nexport function generateNode<T = ts.Node>(sourceText: string, scriptTarget = ts.ScriptTarget.ES2020, scriptKind = ts.ScriptKind.TS): T {\n\treturn generateStatements(sourceText, scriptTarget, scriptKind)[0] as T;\n}\n\n/**\n * declare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'user-view': HTMLUserViewElement;\n\t}\n}\n */\n\nexport function updateGlobalHTMLElementTagNameMap(views: { tagName: string, viewName: string }[]): ts.NodeArray<ts.Statement> {\n\tconst sourceCode = `\n\t\tdeclare global {\n\t\t\tinterface HTMLElementTagNameMap {\n\t\t\t\t${views.map(view => `['${view.tagName}']: ${view.viewName};`).join('\\n')}\n\t\t\t}\n\t\t}`;\n\treturn generateStatements(sourceCode);\n}\n\nexport function updateModuleTypeWithComponentView(classes: ClassInfo[]): ts.NodeArray<ts.Statement> {\n\tconst viewClassDeclarations = classes.map(c => {\n\t\tconst inputs = c.inputs.map(input => input.aliasName);\n\t\tconst outputs = c.outputs.map(input => input.aliasName).map(output => 'on' + ToCamelCase(output));\n\t\tconst attributes = [...inputs, ...outputs].map(s => `'${s}'`).join(' | ');\n\t\tconst interfaceBody = `\n\t\t\tpublic static observedAttributes: [${attributes}];\n\n\t\t\t${c.inputs.map(input => `public ${input.aliasName}${input.type ? `: ${input.type}` : ''};`).join('\\n')}\n\n\t\t\t${c.outputs.map(output => `public on${ToCamelCase(output.aliasName)}${output.type ? `: ${output.type}` : ''};`).join('\\n')}\n\t\t\t\n\t\t`;\n\t\t// need to fix @FormValue type;\n\t\treturn c.views.map(view => `\n\t\t\tdeclare class ${view.viewName} extends ${view.extendsType} {\n\t\t\t\t${interfaceBody.trim()}\n\t\t\t}\n\t\t\tdeclare interface ${view.viewName} extends ${view.formAssociated ? `BaseFormAssociatedComponent<${c.name}>, ` : ''}BaseComponent<${c.name}> {}\n\t\t`);\n\t});\n\tconst views = classes.flatMap(c => c.views.map(v => ({ tagName: v.selector, viewName: v.viewName })));\n\tconst sourceCode = `\n\t\timport { BaseComponent, BaseFormAssociatedComponent, ConstructorOfView } from '@ibyar/core';\n\t\t${viewClassDeclarations.join('\\n')}\n\t\tdeclare global {\n\t\t\tinterface HTMLElementTagNameMap {\n\t\t\t\t${views.map(view => `['${view.tagName}']: ${view.viewName};`).join('\\n')}\n\t\t\t}\n\t\t}`;\n\treturn generateStatements(sourceCode);\n}\n\n/**\n * create new type with name `ɵɵ0Directives0ɵɵ`\n * \n * example:\n * ```ts\n * export type ɵɵ0IfDirective0ɵɵ = {\n * \tselector: '*if';\n * \tsuccessor: '*else',\n * \tinputs: [\n * \t\t{ name: 'ifCondition', aliasName: 'if' },\n * \t\t{ name: 'thenTemplateRef', aliasName: 'then' },\n * \t\t{ name: 'elseTemplateRef', aliasName: 'else' },\n * \t],\n * \toutputs: [],\n * };\n * ```\n * @param classes directive class information\n * @returns new array of statements\n */\nexport function updateModuleTypeWithDirectives(classes: ClassInfo[]): ts.NodeArray<ts.Statement> {\n\tconst nodes: string[] | undefined = classes.map(directive => {\n\t\tconst inputs: string[] = directive.inputs.map(input => `{name: '${input.name}', aliasName: '${input.aliasName}'}`);\n\t\tconst outputs: string[] = directive.outputs.map(output => `{name: '${output.name}', aliasName: '${output.aliasName}'}`);\n\t\tconst temp: string[] = [`selector: '${directive.name}'`];\n\t\tif (directive.successor) {\n\t\t\ttemp.push(`successor: '${directive.successor}'`);\n\t\t}\n\t\tif (directive.inputs.length > 0) {\n\t\t\ttemp.push(`inputs: [${inputs.join(',')}]`);\n\t\t}\n\t\tif (directive.outputs.length > 0) {\n\t\t\ttemp.push(`outputs: [${outputs.join(',')}]`);\n\t\t}\n\t\tlet directiveTypeName = directive.name.startsWith('*')\n\t\t\t? directive.name.substring(1)\n\t\t\t: directive.name;\n\t\tdirectiveTypeName = directiveTypeName.replaceAll('-', ' ')\n\t\t\t.split(' ')\n\t\t\t.map(str => str.charAt(0).toUpperCase() + str.substring(1))\n\t\t\t.join('');\n\t\treturn `export type ɵɵ0${ToCamelCase(directiveTypeName)}Directive0ɵɵ = {${temp.join(',')}};`;\n\t});\n\treturn generateStatements(nodes.join());\n}\n"]}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/cli/transformer/factory.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { ToCamelCase } from '@ibyar/core/node.js';\nimport { ClassInfo, SignalInfo } from './modules.js';\nimport { SignalKey } from './signals.js';\n\n\nexport function convertToProperties(json: { [key: string]: any }): ts.ObjectLiteralElementLike[] {\n\tconst keys = Object.keys(json);\n\treturn keys.map(key => createProperty(key, json[key]));\n}\n\nexport function createProperty(name: string, value: any): ts.ObjectLiteralElementLike {\n\treturn ts.factory.createPropertyAssignment(name, createInitializer(value));\n}\n\nexport function createInitializer(value: any): ts.Expression {\n\tif (Array.isArray(value)) {\n\t\tconst elements = value.map(createInitializer);\n\t\treturn ts.factory.createArrayLiteralExpression(elements);\n\t}\n\tswitch (typeof value) {\n\t\tcase 'string': return ts.factory.createStringLiteral(value);\n\t\tcase 'number': return ts.factory.createNumericLiteral(value);\n\t\tcase 'bigint': return ts.factory.createBigIntLiteral(value.toString());\n\t\tcase 'boolean': return value ? ts.factory.createTrue() : ts.factory.createFalse();\n\t\tcase 'object': {\n\t\t\tif (!value) {\n\t\t\t\treturn ts.factory.createNull();\n\t\t\t}\n\t\t\tconst properties = convertToProperties(value);\n\t\t\treturn ts.factory.createObjectLiteralExpression(properties);\n\t\t};\n\t}\n\treturn ts.factory.createNull();\n}\n\n\nexport function createInterfaceType(viewName: string, extendsType: string) {\n\tconst identifier = ts.factory.createIdentifier(extendsType);\n\tconst expressionWithTypeArguments = ts.factory.createExpressionWithTypeArguments(identifier, undefined);\n\tconst heritageClause = ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [expressionWithTypeArguments]);\n\treturn ts.factory.createInterfaceDeclaration(undefined, viewName, undefined, [heritageClause], []);\n\t// const exportModifier: ts.ModifierSyntaxKind = ts.SyntaxKind.ExportKeyword;\n\t// const modifier = ts.factory.createModifier(exportModifier);\n\t// return ts.factory.createInterfaceDeclaration([modifier], viewName, undefined, [heritageClause], []);\n}\n\nexport function createTypeLiteral(typeName: string) {\n\tconst members: ts.TypeElement[] = [\n\t\tts.factory.createConstructSignature(undefined, [], ts.factory.createTypeReferenceNode(typeName)),\n\t\tts.factory.createPropertySignature(\n\t\t\t[ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)],\n\t\t\t'prototype',\n\t\t\tundefined,\n\t\t\tts.factory.createTypeReferenceNode(typeName)\n\t\t),\n\t];\n\treturn ts.factory.createTypeLiteralNode(members);\n}\n\n/**\n * create view constructor interface of Type `T`\n * \n * ```ts\n * interface ConstructorOfView<T> {\n * \tnew(): T;\n * \treadonly prototype: T;\n * }\n * ```\n */\nexport function createConstructorOfViewInterfaceDeclaration() {\n\tconst typeParameter = ts.factory.createTypeParameterDeclaration(undefined, 'T');\n\tconst members: ts.TypeElement[] = [\n\t\tts.factory.createConstructSignature(undefined, [], ts.factory.createTypeReferenceNode('T')),\n\t\tts.factory.createPropertySignature(\n\t\t\t[ts.factory.createModifier(ts.SyntaxKind.ReadonlyKeyword)],\n\t\t\t'prototype',\n\t\t\tundefined,\n\t\t\tts.factory.createTypeReferenceNode('T')\n\t\t),\n\t];\n\treturn ts.factory.createInterfaceDeclaration(undefined, 'ConstructorOfView', [typeParameter], undefined, members);\n}\n\nexport function createStaticPropertyViewType(typeName: string) {\n\tconst typeArgument = ts.factory.createTypeReferenceNode(typeName);\n\treturn ts.factory.createTypeReferenceNode('ConstructorOfView', [typeArgument]);\n}\n\n\nexport function generateStatements(sourceText: string, scriptTarget = ts.ScriptTarget.ES2020, scriptKind = ts.ScriptKind.TS): ts.NodeArray<ts.Statement> {\n\treturn ts.createSourceFile('temp', sourceText, scriptTarget, false, scriptKind).statements;\n}\n\nexport function generateNode<T = ts.Node>(sourceText: string, scriptTarget = ts.ScriptTarget.ES2020, scriptKind = ts.ScriptKind.TS): T {\n\treturn generateStatements(sourceText, scriptTarget, scriptKind)[0] as T;\n}\n\n/**\n * declare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'user-view': HTMLUserViewElement;\n\t}\n}\n */\n\nexport function updateGlobalHTMLElementTagNameMap(views: { tagName: string, viewName: string }[]): ts.NodeArray<ts.Statement> {\n\tconst sourceCode = `\n\t\tdeclare global {\n\t\t\tinterface HTMLElementTagNameMap {\n\t\t\t\t${views.map(view => `['${view.tagName}']: ${view.viewName};`).join('\\n')}\n\t\t\t}\n\t\t}`;\n\treturn generateStatements(sourceCode);\n}\n\nexport function updateModuleTypeWithComponentView(classes: ClassInfo[]): ts.NodeArray<ts.Statement> {\n\tconst viewClassDeclarations = classes.map(c => {\n\t\tconst inputs = c.inputs.map(input => input.aliasName);\n\t\tconst outputs = c.outputs.map(input => input.aliasName).map(output => 'on' + ToCamelCase(output));\n\t\tconst attributes = [...inputs, ...outputs].map(s => `'${s}'`).join(' | ');\n\t\tconst observedAttributes = attributes.length ? `public static observedAttributes: (${attributes})[];` : '';\n\t\tconst interfaceBody = `\n\t\t\t${observedAttributes}\n\n\t\t\t${c.inputs.map(input => `public ${input.aliasName}${input.type ? `: ${input.type}` : ''};`).join('\\n')}\n\n\t\t\t${c.outputs.map(output => `public on${ToCamelCase(output.aliasName)}${output.type ? `: ${output.type}` : ''};`).join('\\n')}\n\t\t\t\n\t\t`;\n\t\t// need to fix @FormValue type;\n\t\treturn c.views.map(view => {\n\t\t\tconst disabledFeatures = (Array.isArray(view.disabledFeatures) && view.disabledFeatures.length > 0)\n\t\t\t\t? `public static disabledFeatures: ('${view.disabledFeatures.join(' | ')}')[];`\n\t\t\t\t: '';\n\t\t\treturn `\n\t\t\tdeclare class ${view.viewName} extends ${view.extendsType} {\n\t\t\t\t${disabledFeatures}\n\t\t\t\t${interfaceBody.trim()}\n\t\t\t}\n\t\t\tdeclare interface ${view.viewName} extends ${view.formAssociated ? `BaseFormAssociatedComponent<${c.name}>, ` : ''}BaseComponent<${c.name}> {}\n\t\t`;\n\t\t});\n\t});\n\tconst views = classes.flatMap(c => c.views.map(v => ({ tagName: v.selector, viewName: v.viewName })));\n\tconst sourceCode = `\n\t\timport { BaseComponent, BaseFormAssociatedComponent, ConstructorOfView } from '@ibyar/core';\n\t\t${viewClassDeclarations.join('\\n')}\n\t\tdeclare global {\n\t\t\tinterface HTMLElementTagNameMap {\n\t\t\t\t${views.map(view => `['${view.tagName}']: ${view.viewName};`).join('\\n')}\n\t\t\t}\n\t\t}`;\n\treturn generateStatements(sourceCode);\n}\n\n/**\n * create new type with name `ɵɵ0Directives0ɵɵ`\n * \n * example:\n * ```ts\n * export type ɵɵ0IfDirective0ɵɵ = {\n * \tselector: '*if';\n * \tsuccessor: '*else',\n * \tinputs: [\n * \t\t{ name: 'ifCondition', aliasName: 'if' },\n * \t\t{ name: 'thenTemplateRef', aliasName: 'then' },\n * \t\t{ name: 'elseTemplateRef', aliasName: 'else' },\n * \t],\n * \toutputs: [],\n * };\n * ```\n * @param classes directive class information\n * @returns new array of statements\n */\nexport function updateModuleTypeWithDirectives(classes: ClassInfo[]): ts.NodeArray<ts.Statement> {\n\tconst nodes: string[] | undefined = classes.map(directive => {\n\t\tconst inputs: string[] = directive.inputs.map(input => `{name: '${input.name}', aliasName: '${input.aliasName}'}`);\n\t\tconst outputs: string[] = directive.outputs.map(output => `{name: '${output.name}', aliasName: '${output.aliasName}'}`);\n\t\tconst temp: string[] = [`selector: '${directive.name}'`];\n\t\tif (directive.successors) {\n\t\t\ttemp.push(`successors: [${directive.successors.map(successor => `'${successor}'`).join(',')}]`);\n\t\t}\n\t\tif (directive.inputs.length > 0) {\n\t\t\ttemp.push(`inputs: [${inputs.join(',')}]`);\n\t\t}\n\t\tif (directive.outputs.length > 0) {\n\t\t\ttemp.push(`outputs: [${outputs.join(',')}]`);\n\t\t}\n\t\tlet directiveTypeName = directive.name.startsWith('*')\n\t\t\t? directive.name.substring(1)\n\t\t\t: directive.name;\n\t\tdirectiveTypeName = directiveTypeName.replaceAll('-', ' ')\n\t\t\t.split(' ')\n\t\t\t.map(str => str.charAt(0).toUpperCase() + str.substring(1))\n\t\t\t.join('');\n\t\treturn `export type ɵɵ0${ToCamelCase(directiveTypeName)}Directive0ɵɵ = {${temp.join(',')}};`;\n\t});\n\treturn generateStatements(nodes.join());\n}\n\n\nexport function convertToRuntimeMetadata(signalMetadata: Partial<Record<SignalKey, SignalInfo[]>>) {\n\treturn Object.entries(signalMetadata).flatMap(([key, infos]) => {\n\t\tconst optional = infos.filter(info => !info.necessity);\n\t\tconst optionalItem = {\n\t\t\tsignal: key,\n\t\t\toptions: optional.map(info => ({ name: info.name, alias: info.aliasName })),\n\t\t};\n\t\tconst required = infos.filter(info => info.necessity);\n\t\tif (!required.length) {\n\t\t\treturn [optionalItem];\n\t\t}\n\t\tconst requiredItem = {\n\t\t\tsignal: key,\n\t\t\tnecessity: 'required',\n\t\t\toptions: required.map(info => ({ name: info.name, alias: info.aliasName })),\n\t\t};\n\t\treturn [optionalItem, requiredItem];\n\t});\n}\n\nexport function createSignalsAssignment(signalMetadata: Partial<Record<SignalKey, SignalInfo[]>>) {\n\treturn ts.factory.createPropertyAssignment('signals', createInitializer(convertToRuntimeMetadata(signalMetadata)));\n}\n"]}
|
package/transformer/helpers.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ts from 'typescript/lib/tsserverlibrary.js';
|
|
2
|
-
import { DecoratorInfo } from './modules.js';
|
|
2
|
+
import { DecoratorInfo, SignalMetadata, SignalInfo } from './modules.js';
|
|
3
|
+
import { SignalDetails } from './signals.js';
|
|
3
4
|
/**
|
|
4
5
|
* check if a decorator is a `@Component` decorator;
|
|
5
6
|
* @param decorator
|
|
@@ -78,5 +79,21 @@ export declare function getOutputNames(classNode: ts.ClassDeclaration, checker:
|
|
|
78
79
|
* @param property
|
|
79
80
|
* @returns
|
|
80
81
|
*/
|
|
81
|
-
export declare function
|
|
82
|
+
export declare function getTextValueFormLiteralProperty(option: ts.ObjectLiteralExpression, property: string): string | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* get text value for a property in ObjectLiteralExpression
|
|
85
|
+
* @param option
|
|
86
|
+
* @param property
|
|
87
|
+
* @returns
|
|
88
|
+
*/
|
|
89
|
+
export declare function getTextValueFormArrayLiteralProperty(option: ts.ObjectLiteralExpression, property: string): string[];
|
|
90
|
+
export declare function scanAliasName(call: ts.CallExpression): string | void;
|
|
91
|
+
export declare function scanSignalCall(call: ts.CallExpression, signalKey: string, name: string): SignalInfo | false;
|
|
92
|
+
/**
|
|
93
|
+
* get component and directive signals that is evaluated with `input`, `output`, ... etc.
|
|
94
|
+
* @param classNode
|
|
95
|
+
* @param signals
|
|
96
|
+
* @returns
|
|
97
|
+
*/
|
|
98
|
+
export declare function scanSignals(classNode: ts.ClassDeclaration, signals: SignalDetails): SignalMetadata;
|
|
82
99
|
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/helpers.ts"],"names":[],"mappings":"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"}
|
package/transformer/helpers.js
CHANGED
|
@@ -165,7 +165,7 @@ export function getOutputNames(classNode, checker) {
|
|
|
165
165
|
* @param property
|
|
166
166
|
* @returns
|
|
167
167
|
*/
|
|
168
|
-
export function
|
|
168
|
+
export function getTextValueFormLiteralProperty(option, property) {
|
|
169
169
|
const selectorProperty = option.properties
|
|
170
170
|
.find(prop => prop.name?.getText() === property);
|
|
171
171
|
const initializer = selectorProperty?.initializer.getText();
|
|
@@ -174,4 +174,69 @@ export function getTextValueForProperty(option, property) {
|
|
|
174
174
|
}
|
|
175
175
|
return initializer?.substring(1, initializer.length - 1);
|
|
176
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* get text value for a property in ObjectLiteralExpression
|
|
179
|
+
* @param option
|
|
180
|
+
* @param property
|
|
181
|
+
* @returns
|
|
182
|
+
*/
|
|
183
|
+
export function getTextValueFormArrayLiteralProperty(option, property) {
|
|
184
|
+
const selectorProperty = option.properties
|
|
185
|
+
.find(prop => prop.name?.getText() === property);
|
|
186
|
+
if (!selectorProperty?.initializer || !ts.isArrayLiteralExpression(selectorProperty.initializer)) {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
return selectorProperty.initializer.elements
|
|
190
|
+
.map(initializer => initializer.getText())
|
|
191
|
+
.map(initializer => initializer.substring(1, initializer.length - 1));
|
|
192
|
+
}
|
|
193
|
+
export function scanAliasName(call) {
|
|
194
|
+
const alias = call.arguments
|
|
195
|
+
.filter(expr => ts.isObjectLiteralExpression(expr))
|
|
196
|
+
.flatMap(expr => expr.properties)
|
|
197
|
+
.filter(expr => ts.isPropertyAssignment(expr) && ts.isStringLiteral(expr.initializer) && ts.isIdentifier(expr.name) && expr.name.getText() === 'alias')
|
|
198
|
+
.at(0);
|
|
199
|
+
const initializer = alias?.initializer.getText();
|
|
200
|
+
return initializer?.substring(1, initializer.length - 1);
|
|
201
|
+
}
|
|
202
|
+
export function scanSignalCall(call, signalKey, name) {
|
|
203
|
+
const type = call.typeArguments?.[0].getText();
|
|
204
|
+
if (ts.isIdentifier(call.expression) && call.expression.getText() === signalKey) {
|
|
205
|
+
return { name, type, aliasName: scanAliasName(call) ?? name };
|
|
206
|
+
}
|
|
207
|
+
else if (ts.isPropertyAccessExpression(call.expression)
|
|
208
|
+
&& ts.isIdentifier(call.expression.expression) && call.expression.expression.getText() === signalKey
|
|
209
|
+
&& ts.isIdentifier(call.expression.name) && call.expression.name.getText() === 'required') {
|
|
210
|
+
return { name, type, necessity: 'required', aliasName: scanAliasName(call) ?? name };
|
|
211
|
+
}
|
|
212
|
+
else if (ts.isElementAccessExpression(call.expression)
|
|
213
|
+
&& ts.isIdentifier(call.expression.expression) && call.expression.expression.getText() === signalKey
|
|
214
|
+
&& ts.isIdentifier(call.expression.argumentExpression) && call.expression.argumentExpression.getText() === 'required') {
|
|
215
|
+
return { name, type, necessity: 'required', aliasName: scanAliasName(call) ?? name };
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* get component and directive signals that is evaluated with `input`, `output`, ... etc.
|
|
221
|
+
* @param classNode
|
|
222
|
+
* @param signals
|
|
223
|
+
* @returns
|
|
224
|
+
*/
|
|
225
|
+
export function scanSignals(classNode, signals) {
|
|
226
|
+
const infos = {};
|
|
227
|
+
const members = classNode.members
|
|
228
|
+
.filter(member => ts.isPropertyDeclaration(member)
|
|
229
|
+
&& member.initializer
|
|
230
|
+
&& ts.isCallExpression(member.initializer));
|
|
231
|
+
Object.entries(signals).forEach(([alias, signal]) => {
|
|
232
|
+
members.forEach(member => {
|
|
233
|
+
const name = (ts.isComputedPropertyName(member.name) && ts.isStringLiteral(member.name.expression))
|
|
234
|
+
? member.name.expression.getText()
|
|
235
|
+
: member.name.getText();
|
|
236
|
+
const info = scanSignalCall(member.initializer, alias, name);
|
|
237
|
+
info && (infos[signal] ??= []).push(info);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
return infos;
|
|
241
|
+
}
|
|
177
242
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/cli/transformer/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { DecoratorInfo } from './modules.js';\n\n\n/**\n * check if a decorator is a `@Component` decorator;\n * @param decorator \n * @param expressionName \n * @returns \n */\nexport function isComponentDecorator(decorator: ts.Decorator, componentName = 'Component'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === componentName;\n};\n\n\n/**\n * check if a decorator is a `@Directive` decorator;\n * @param decorator \n * @param directiveName \n * @returns \n */\nexport function isDirectiveDecorator(decorator: ts.Decorator, directiveName = 'Directive'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === directiveName;\n};\n\nexport function isComponentOrDirectiveDecorator(decorator: ts.Decorator, componentName = 'Component', directiveName = 'Directive'): boolean {\n\treturn isComponentDecorator(decorator, componentName) || isDirectiveDecorator(decorator, directiveName);\n};\n\n\n/**\n * check if a decorator is a `@Pipe` decorator;\n * @param decorator \n * @param pipeName \n * @returns \n */\nexport function isPipeDecorator(decorator: ts.Decorator, pipeName = 'Pipe'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === pipeName;\n};\n\n/**\n * check if a decorator is a `@Injectable` decorator;\n * @param decorator \n * @param injectableName \n * @returns \n */\nexport function isInjectableDecorator(decorator: ts.Decorator, injectableName = 'Injectable'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === injectableName;\n};\n\n\n/**\n * check if Decorator is `@Input` or `@FormValue`\n * @param decorator \n * @returns \n */\nexport function isInputDecorator(decorator: ts.Decorator): boolean {\n\treturn ts.isCallExpression(decorator.expression) && (\n\t\tdecorator.expression.expression.getText() === 'Input'\n\t\t|| decorator.expression.expression.getText() === 'FormValue'\n\t);\n}\n\n/**\n * check if Decorator is `@Output`\n * @param decorator \n * @returns \n */\nexport function isOutputDecorator(decorator: ts.Decorator): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === 'Output';\n}\n\nexport function getMapByDecoratorForPropertyDeclaration(member: ts.PropertyDeclaration, checker: ts.TypeChecker, decoratorFilter: ((decorator: ts.Decorator) => boolean)): DecoratorInfo[] {\n\tconst infos: DecoratorInfo[] = [];\n\tconst decorators = ts.getDecorators(member);\n\tif (!decorators) {\n\t\treturn infos;\n\t}\n\tconst inputDecorators = decorators.filter(decoratorFilter);\n\tif (!inputDecorators.length) {\n\t\treturn infos;\n\t}\n\tlet inputType = member.type?.getText();\n\tif (!inputType && member.initializer) {\n\t\tinputType = checker.typeToString(checker.getTypeAtLocation(member.initializer), member.initializer, undefined);\n\t}\n\tinputDecorators.forEach(input => {\n\t\tconst decoratorCall = input.expression as ts.CallExpression;\n\t\tconst aliasName = decoratorCall.arguments[0] as ts.StringLiteralLike;\n\t\tconst alias = aliasName ? aliasName.text : member.name.getText();\n\t\tinfos.push({ name: member.name.getText(), aliasName: alias, type: inputType });\n\t});\n\treturn infos;\n}\n\nexport function getMapByDecoratorForSetAccessorDeclaration(member: ts.SetAccessorDeclaration, checker: ts.TypeChecker, decoratorFilter: ((decorator: ts.Decorator) => boolean)): DecoratorInfo[] {\n\tconst infos: DecoratorInfo[] = [];\n\tconst decorators = ts.getDecorators(member);\n\tif (!decorators) {\n\t\treturn infos;\n\t}\n\tconst inputDecorators = decorators.filter(decoratorFilter);\n\tif (!inputDecorators.length) {\n\t\treturn infos;\n\t}\n\n\tlet memberName: string;\n\tif (ts.isIdentifier(member.name)) {\n\t\tmemberName = member.name.getText();\n\t} else if (ts.isComputedPropertyName(member.name) && ts.isStringLiteral(member.name.expression)) {\n\t\tmemberName = member.name.expression.getText();\n\t} else {\n\t\treturn infos;\n\t}\n\n\tlet inputType = checker.typeToString(checker.getTypeAtLocation(member.parameters[0]), member.parameters[0], undefined);\n\tinputDecorators.forEach(input => {\n\t\tconst decoratorCall = input.expression as ts.CallExpression;\n\t\tconst aliasName = decoratorCall.arguments[0] as ts.StringLiteralLike;\n\t\tconst alias = aliasName ? aliasName.text : memberName;\n\t\tinfos.push({ name: memberName, aliasName: alias, type: inputType });\n\t});\n\treturn infos;\n}\n\nexport function getMapByDecorator(classNode: ts.ClassDeclaration, checker: ts.TypeChecker, decoratorFilter: ((decorator: ts.Decorator) => boolean)): DecoratorInfo[] {\n\tconst infos: DecoratorInfo[] = [];\n\tclassNode.members.forEach(member => {\n\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\tinfos.push(...getMapByDecoratorForPropertyDeclaration(member, checker, decoratorFilter));\n\t\t} else if (ts.isSetAccessorDeclaration(member)) {\n\t\t\tinfos.push(...getMapByDecoratorForSetAccessorDeclaration(member, checker, decoratorFilter));\n\t\t}\n\t})\n\treturn infos;\n}\n\n/**\n * get a component or directive inputs that is annotated by `@Input` or `@FormValue`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getInputs(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): DecoratorInfo[] {\n\treturn getMapByDecorator(classNode, checker, isInputDecorator);\n}\n\n/**\n * get a component or directive input names that is annotated by `@Input` or `@FormValue`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getInputNames(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): string[] {\n\treturn getInputs(classNode, checker).map(info => info.aliasName);\n}\n\n/**\n * get a component or directive outputs that is annotated by `@Output`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getOutputs(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): DecoratorInfo[] {\n\treturn getMapByDecorator(classNode, checker, isOutputDecorator);\n}\n\n/**\n * get a component or directive output names that is annotated by `@Output`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getOutputNames(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): string[] {\n\treturn getOutputs(classNode, checker).map(info => info.aliasName);\n}\n\n/**\n * get text value for a property in ObjectLiteralExpression\n * @param option \n * @param property \n * @returns \n */\nexport function getTextValueForProperty(option: ts.ObjectLiteralExpression, property: string): string | undefined {\n\tconst selectorProperty = option.properties\n\t\t.find(prop => prop.name?.getText() === property) as ts.PropertyAssignment | undefined;\n\n\tconst initializer = selectorProperty?.initializer.getText();\n\tif (!initializer) {\n\t\treturn;\n\t}\n\treturn initializer?.substring(1, initializer.length - 1);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/cli/transformer/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { DecoratorInfo, SignalMetadata, SignalInfo } from './modules.js';\nimport { SignalDetails, SignalKey } from './signals.js';\n\n\n/**\n * check if a decorator is a `@Component` decorator;\n * @param decorator \n * @param expressionName \n * @returns \n */\nexport function isComponentDecorator(decorator: ts.Decorator, componentName = 'Component'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === componentName;\n};\n\n\n/**\n * check if a decorator is a `@Directive` decorator;\n * @param decorator \n * @param directiveName \n * @returns \n */\nexport function isDirectiveDecorator(decorator: ts.Decorator, directiveName = 'Directive'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === directiveName;\n};\n\nexport function isComponentOrDirectiveDecorator(decorator: ts.Decorator, componentName = 'Component', directiveName = 'Directive'): boolean {\n\treturn isComponentDecorator(decorator, componentName) || isDirectiveDecorator(decorator, directiveName);\n};\n\n\n/**\n * check if a decorator is a `@Pipe` decorator;\n * @param decorator \n * @param pipeName \n * @returns \n */\nexport function isPipeDecorator(decorator: ts.Decorator, pipeName = 'Pipe'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === pipeName;\n};\n\n/**\n * check if a decorator is a `@Injectable` decorator;\n * @param decorator \n * @param injectableName \n * @returns \n */\nexport function isInjectableDecorator(decorator: ts.Decorator, injectableName = 'Injectable'): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === injectableName;\n};\n\n\n/**\n * check if Decorator is `@Input` or `@FormValue`\n * @param decorator \n * @returns \n */\nexport function isInputDecorator(decorator: ts.Decorator): boolean {\n\treturn ts.isCallExpression(decorator.expression) && (\n\t\tdecorator.expression.expression.getText() === 'Input'\n\t\t|| decorator.expression.expression.getText() === 'FormValue'\n\t);\n}\n\n/**\n * check if Decorator is `@Output`\n * @param decorator \n * @returns \n */\nexport function isOutputDecorator(decorator: ts.Decorator): boolean {\n\treturn ts.isCallExpression(decorator.expression) && decorator.expression.expression.getText() === 'Output';\n}\n\nexport function getMapByDecoratorForPropertyDeclaration(member: ts.PropertyDeclaration, checker: ts.TypeChecker, decoratorFilter: ((decorator: ts.Decorator) => boolean)): DecoratorInfo[] {\n\tconst infos: DecoratorInfo[] = [];\n\tconst decorators = ts.getDecorators(member);\n\tif (!decorators) {\n\t\treturn infos;\n\t}\n\tconst inputDecorators = decorators.filter(decoratorFilter);\n\tif (!inputDecorators.length) {\n\t\treturn infos;\n\t}\n\tlet inputType = member.type?.getText();\n\tif (!inputType && member.initializer) {\n\t\tinputType = checker.typeToString(checker.getTypeAtLocation(member.initializer), member.initializer, undefined);\n\t}\n\tinputDecorators.forEach(input => {\n\t\tconst decoratorCall = input.expression as ts.CallExpression;\n\t\tconst aliasName = decoratorCall.arguments[0] as ts.StringLiteralLike;\n\t\tconst alias = aliasName ? aliasName.text : member.name.getText();\n\t\tinfos.push({ name: member.name.getText(), aliasName: alias, type: inputType });\n\t});\n\treturn infos;\n}\n\nexport function getMapByDecoratorForSetAccessorDeclaration(member: ts.SetAccessorDeclaration, checker: ts.TypeChecker, decoratorFilter: ((decorator: ts.Decorator) => boolean)): DecoratorInfo[] {\n\tconst infos: DecoratorInfo[] = [];\n\tconst decorators = ts.getDecorators(member);\n\tif (!decorators) {\n\t\treturn infos;\n\t}\n\tconst inputDecorators = decorators.filter(decoratorFilter);\n\tif (!inputDecorators.length) {\n\t\treturn infos;\n\t}\n\n\tlet memberName: string;\n\tif (ts.isIdentifier(member.name)) {\n\t\tmemberName = member.name.getText();\n\t} else if (ts.isComputedPropertyName(member.name) && ts.isStringLiteral(member.name.expression)) {\n\t\tmemberName = member.name.expression.getText();\n\t} else {\n\t\treturn infos;\n\t}\n\n\tlet inputType = checker.typeToString(checker.getTypeAtLocation(member.parameters[0]), member.parameters[0], undefined);\n\tinputDecorators.forEach(input => {\n\t\tconst decoratorCall = input.expression as ts.CallExpression;\n\t\tconst aliasName = decoratorCall.arguments[0] as ts.StringLiteralLike;\n\t\tconst alias = aliasName ? aliasName.text : memberName;\n\t\tinfos.push({ name: memberName, aliasName: alias, type: inputType });\n\t});\n\treturn infos;\n}\n\nexport function getMapByDecorator(classNode: ts.ClassDeclaration, checker: ts.TypeChecker, decoratorFilter: ((decorator: ts.Decorator) => boolean)): DecoratorInfo[] {\n\tconst infos: DecoratorInfo[] = [];\n\tclassNode.members.forEach(member => {\n\t\tif (ts.isPropertyDeclaration(member)) {\n\t\t\tinfos.push(...getMapByDecoratorForPropertyDeclaration(member, checker, decoratorFilter));\n\t\t} else if (ts.isSetAccessorDeclaration(member)) {\n\t\t\tinfos.push(...getMapByDecoratorForSetAccessorDeclaration(member, checker, decoratorFilter));\n\t\t}\n\t})\n\treturn infos;\n}\n\n/**\n * get a component or directive inputs that is annotated by `@Input` or `@FormValue`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getInputs(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): DecoratorInfo[] {\n\treturn getMapByDecorator(classNode, checker, isInputDecorator);\n}\n\n/**\n * get a component or directive input names that is annotated by `@Input` or `@FormValue`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getInputNames(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): string[] {\n\treturn getInputs(classNode, checker).map(info => info.aliasName);\n}\n\n/**\n * get a component or directive outputs that is annotated by `@Output`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getOutputs(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): DecoratorInfo[] {\n\treturn getMapByDecorator(classNode, checker, isOutputDecorator);\n}\n\n/**\n * get a component or directive output names that is annotated by `@Output`.\n * @param classNode \n * @param checker \n * @returns \n */\nexport function getOutputNames(classNode: ts.ClassDeclaration, checker: ts.TypeChecker): string[] {\n\treturn getOutputs(classNode, checker).map(info => info.aliasName);\n}\n\n/**\n * get text value for a property in ObjectLiteralExpression\n * @param option \n * @param property \n * @returns \n */\nexport function getTextValueFormLiteralProperty(option: ts.ObjectLiteralExpression, property: string): string | undefined {\n\tconst selectorProperty = option.properties\n\t\t.find(prop => prop.name?.getText() === property) as ts.PropertyAssignment | undefined;\n\n\tconst initializer = selectorProperty?.initializer.getText();\n\tif (!initializer) {\n\t\treturn;\n\t}\n\treturn initializer?.substring(1, initializer.length - 1);\n}\n\n\n/**\n * get text value for a property in ObjectLiteralExpression\n * @param option \n * @param property \n * @returns \n */\nexport function getTextValueFormArrayLiteralProperty(option: ts.ObjectLiteralExpression, property: string): string[] {\n\tconst selectorProperty = option.properties\n\t\t.find(prop => prop.name?.getText() === property) as ts.PropertyAssignment | undefined;\n\tif (!selectorProperty?.initializer || !ts.isArrayLiteralExpression(selectorProperty.initializer)) {\n\t\treturn [];\n\t}\n\treturn selectorProperty.initializer.elements\n\t\t.map(initializer => initializer.getText())\n\t\t.map(initializer => initializer.substring(1, initializer.length - 1));\n}\n\n\nexport function scanAliasName(call: ts.CallExpression): string | void {\n\tconst alias = call.arguments\n\t\t.filter(expr => ts.isObjectLiteralExpression(expr))\n\t\t.flatMap(expr => expr.properties)\n\t\t.filter(expr => ts.isPropertyAssignment(expr) && ts.isStringLiteral(expr.initializer) && ts.isIdentifier(expr.name) && expr.name.getText() === 'alias')\n\t\t.at(0) as ts.PropertyAssignment | undefined;\n\tconst initializer = alias?.initializer.getText();\n\treturn initializer?.substring(1, initializer.length - 1);\n}\n\nexport function scanSignalCall(call: ts.CallExpression, signalKey: string, name: string): SignalInfo | false {\n\tconst type = call.typeArguments?.[0].getText();\n\tif (ts.isIdentifier(call.expression) && call.expression.getText() === signalKey) {\n\t\treturn { name, type, aliasName: scanAliasName(call) ?? name } as SignalInfo;\n\t} else if (ts.isPropertyAccessExpression(call.expression)\n\t\t&& ts.isIdentifier(call.expression.expression) && call.expression.expression.getText() === signalKey\n\t\t&& ts.isIdentifier(call.expression.name) && call.expression.name.getText() === 'required') {\n\t\treturn { name, type, necessity: 'required', aliasName: scanAliasName(call) ?? name } as SignalInfo;\n\t} else if (ts.isElementAccessExpression(call.expression)\n\t\t&& ts.isIdentifier(call.expression.expression) && call.expression.expression.getText() === signalKey\n\t\t&& ts.isIdentifier(call.expression.argumentExpression) && call.expression.argumentExpression.getText() === 'required') {\n\t\treturn { name, type, necessity: 'required', aliasName: scanAliasName(call) ?? name } as SignalInfo;\n\t}\n\treturn false;\n}\n\n/**\n * get component and directive signals that is evaluated with `input`, `output`, ... etc.\n * @param classNode \n * @param signals \n * @returns \n */\nexport function scanSignals(classNode: ts.ClassDeclaration, signals: SignalDetails): SignalMetadata {\n\tconst infos: SignalMetadata = {};\n\tconst members = classNode.members\n\t\t.filter(member => ts.isPropertyDeclaration(member)\n\t\t\t&& member.initializer\n\t\t\t&& ts.isCallExpression(member.initializer)\n\t\t) as ts.PropertyDeclaration[];\n\tObject.entries(signals).forEach(([alias, signal]) => {\n\t\tmembers.forEach(member => {\n\t\t\tconst name = (ts.isComputedPropertyName(member.name) && ts.isStringLiteral(member.name.expression))\n\t\t\t\t? member.name.expression.getText()\n\t\t\t\t: member.name.getText()\n\t\t\tconst info = scanSignalCall(member.initializer as ts.CallExpression, alias, name);\n\t\t\tinfo && (infos[signal as SignalKey] ??= []).push(info);\n\t\t});\n\t});\n\treturn infos;\n}\n"]}
|
package/transformer/modules.d.ts
CHANGED
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
import type ts from 'typescript/lib/tsserverlibrary.js';
|
|
2
|
+
import { SignalKey } from './signals.js';
|
|
2
3
|
export type ViewInfo = {
|
|
3
4
|
selector: string;
|
|
4
5
|
extendsType: string;
|
|
5
6
|
viewName: string;
|
|
6
|
-
|
|
7
|
+
interfaceType: ts.InterfaceDeclaration;
|
|
7
8
|
formAssociated: boolean;
|
|
9
|
+
disabledFeatures?: string[];
|
|
8
10
|
};
|
|
9
11
|
export type DecoratorInfo = {
|
|
10
12
|
name: string;
|
|
11
13
|
aliasName: string;
|
|
12
14
|
type?: string;
|
|
13
15
|
};
|
|
16
|
+
export type SignalInfo = DecoratorInfo & {
|
|
17
|
+
necessity?: 'required';
|
|
18
|
+
};
|
|
19
|
+
export type SignalMetadata = Partial<Record<SignalKey, SignalInfo[]>>;
|
|
14
20
|
export type ClassInfo = {
|
|
15
21
|
type: 'component' | 'directive';
|
|
16
22
|
name: string;
|
|
17
|
-
|
|
23
|
+
successors?: string[];
|
|
18
24
|
views: ViewInfo[];
|
|
19
25
|
inputs: DecoratorInfo[];
|
|
20
26
|
outputs: DecoratorInfo[];
|
|
27
|
+
signals: SignalMetadata;
|
|
21
28
|
};
|
|
22
29
|
export type ModuleInfo = {
|
|
23
30
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"modules.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,mCAAmC,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,EAAE,CAAC,oBAAoB,CAAC;IACvC,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/E,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG;IAAE,SAAS,CAAC,EAAE,UAAU,CAAC;CAAE,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CAAE,CAAA;AAEjE,cAAM,YAAa,YAAW,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IACpD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAG3D,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAiB;IAE7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,OAAO,CAAC,GAAG,CAAiC;IAE5C,GAAG,CAAC,IAAI,EAAE,UAAU;IAGpB,KAAK,IAAI,IAAI;IAGb,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAG5B,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAGhH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAGxC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAGzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAIzC,OAAO,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAGjD,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAGhC,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC;CAGtC;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../src/cli/transformer/modules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../../src/cli/transformer/modules.ts"],"names":[],"mappings":"AA4BA,MAAM,YAAY;IACjB,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpC,CAAC;IACD,CAAC,MAAM,CAAC,WAAW,CAAC,GAAW,aAAa,CAAC;IAE7C,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB,CAAC;IAEO,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE5C,GAAG,CAAC,IAAgB;QACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK;QACJ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IACD,MAAM,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,UAAkF,EAAE,OAAa;QACxG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,GAAG,CAAC,GAAW;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,GAAW;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,GAAG,CAAC,GAAW,EAAE,KAAiB;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,IAAI;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC","sourcesContent":["import type ts from 'typescript/lib/tsserverlibrary.js';\nimport { SignalKey } from './signals.js';\n\nexport type ViewInfo = {\n\tselector: string;\n\textendsType: string;\n\tviewName: string;\n\tinterfaceType: ts.InterfaceDeclaration;\n\tformAssociated: boolean;\n\tdisabledFeatures?: string[];\n};\n\nexport type DecoratorInfo = { name: string, aliasName: string, type?: string };\nexport type SignalInfo = DecoratorInfo & { necessity?: 'required'; };\nexport type SignalMetadata = Partial<Record<SignalKey, SignalInfo[]>>;\n\nexport type ClassInfo = {\n\ttype: 'component' | 'directive';\n\tname: string,\n\tsuccessors?: string[];\n\tviews: ViewInfo[];\n\tinputs: DecoratorInfo[];\n\toutputs: DecoratorInfo[];\n\tsignals: SignalMetadata;\n};\n\nexport type ModuleInfo = { path: string; classes?: ClassInfo[]; }\n\nclass ModuleManger implements Map<string, ModuleInfo> {\n\t[Symbol.iterator](): IterableIterator<[string, ModuleInfo]> {\n\t\treturn this.map[Symbol.iterator]();\n\t}\n\t[Symbol.toStringTag]: string = 'Module Info';\n\n\tget size(): number {\n\t\treturn this.map.size;\n\t}\n\n\tprivate map = new Map<string, ModuleInfo>();\n\n\tadd(info: ModuleInfo) {\n\t\tthis.map.set(info.path, info);\n\t}\n\tclear(): void {\n\t\tthis.map.clear();\n\t}\n\tdelete(key: string): boolean {\n\t\treturn this.map.delete(key);\n\t}\n\tforEach(callbackfn: (value: ModuleInfo, key: string, map: Map<string, ModuleInfo>) => void, thisArg?: any): void {\n\t\tthis.map.forEach(callbackfn, thisArg);\n\t}\n\tget(key: string): ModuleInfo | undefined {\n\t\treturn this.map.get(key);\n\t}\n\thas(key: string): boolean {\n\t\treturn this.map.has(key);\n\t}\n\tset(key: string, value: ModuleInfo): this {\n\t\tthis.map.set(key, value);\n\t\treturn this;\n\t}\n\tentries(): IterableIterator<[string, ModuleInfo]> {\n\t\treturn this.map.entries();\n\t}\n\tkeys(): IterableIterator<string> {\n\t\treturn this.map.keys();\n\t}\n\tvalues(): IterableIterator<ModuleInfo> {\n\t\treturn this.map.values();\n\t}\n}\n\nexport const moduleManger = new ModuleManger();\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-directives.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/scan-directives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"scan-directives.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/scan-directives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAsDnD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAMzE"}
|
|
@@ -14,10 +14,14 @@ function extractDirectives(alias, sourceFile) {
|
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
16
|
const name = member.name.getText(sourceFile);
|
|
17
|
-
if ((name === 'selector'
|
|
17
|
+
if ((name === 'selector') && member.type && ts.isLiteralTypeNode(member.type)) {
|
|
18
18
|
const value = member.type.literal.getText(sourceFile);
|
|
19
19
|
info[name] = removeQuotations(value);
|
|
20
20
|
}
|
|
21
|
+
else if ((name === 'successors') && member.type && ts.isArrayLiteralExpression(member.type)) {
|
|
22
|
+
const values = member.type.elements.map(elm => elm.getText(sourceFile));
|
|
23
|
+
info[name] = values.map(removeQuotations);
|
|
24
|
+
}
|
|
21
25
|
else if ((name === 'inputs' || name === 'outputs') && member.type && ts.isTupleTypeNode(member.type)) {
|
|
22
26
|
const value = [];
|
|
23
27
|
member.type.elements.forEach(item => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-directives.js","sourceRoot":"","sources":["../../../src/cli/transformer/scan-directives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACnD,OAAO,EAAiB,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGjF,SAAS,gBAAgB,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA8B,EAAE,UAAyB;IACnF,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO;IACR,CAAC;IACD,MAAM,IAAI,GAAG,EAAmB,CAAC;IACjC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC5B,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO;QACR,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"scan-directives.js","sourceRoot":"","sources":["../../../src/cli/transformer/scan-directives.ts"],"names":[],"mappings":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { DirectiveInfo, registerDirectiveCall } from '../directives/register.js';\n\n\nfunction removeQuotations(string: string) {\n\treturn string.substring(1, string.length - 1);\n}\n\nfunction extractDirectives(alias: ts.TypeAliasDeclaration, sourceFile: ts.SourceFile) {\n\tconst elm = alias.type;\n\tif (!ts.isTypeLiteralNode(elm)) {\n\t\treturn;\n\t}\n\tconst info = {} as DirectiveInfo;\n\telm.members.forEach(member => {\n\t\tif (!ts.isPropertySignature(member)) {\n\t\t\treturn;\n\t\t}\n\t\tconst name = member.name.getText(sourceFile);\n\t\tif ((name === 'selector') && member.type && ts.isLiteralTypeNode(member.type)) {\n\t\t\tconst value = member.type.literal.getText(sourceFile);\n\t\t\tinfo[name] = removeQuotations(value);\n\t\t} else if ((name === 'successors') && member.type && ts.isArrayLiteralExpression(member.type)) {\n\t\t\tconst values = member.type.elements.map(elm => elm.getText(sourceFile));\n\t\t\tinfo[name] = values.map(removeQuotations);\n\t\t} else if ((name === 'inputs' || name === 'outputs') && member.type && ts.isTupleTypeNode(member.type)) {\n\t\t\ttype Item = { name: string, aliasName: string };\n\t\t\tconst value: Item[] = [];\n\t\t\tmember.type.elements.forEach(item => {\n\t\t\t\tif (!ts.isTypeLiteralNode(item)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst itemObject = {} as Item;\n\t\t\t\titem.members.forEach(property => {\n\t\t\t\t\tif (!ts.isPropertySignature(property)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst key = property.name.getText(sourceFile);\n\t\t\t\t\tif ((key === 'name' || key == 'aliasName') && property.type && ts.isLiteralTypeNode(property.type)) {\n\t\t\t\t\t\tconst keyValue = property.type.literal.getText(sourceFile);\n\t\t\t\t\t\titemObject[key] = removeQuotations(keyValue);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tvalue.push(itemObject);\n\t\t\t});\n\t\t\tinfo[name] = value;\n\t\t}\n\t});\n\tif (!info.selector) {\n\t\treturn;\n\t}\n\tregisterDirectiveCall(info);\n}\n\n/**\n * search for `ɵɵ0Directive.*0ɵɵ` type\n * \n * example:\n * ```ts\n * export type ɵɵ0IfDirective0ɵɵ = {\n * \tselector: '*if';\n * \tsuccessor: '*else',\n * \tinputs: [\n * \t\t{ name: 'ifCondition', aliasName: 'if' },\n * \t\t{ name: 'thenTemplateRef', aliasName: 'then' },\n * \t\t{ name: 'elseTemplateRef', aliasName: 'else' },\n * \t],\n * \toutputs: [],\n * };\n * ```\n * @param program a ts program \n * @returns a transformer factory of source file\n */\nexport function scanDirectivesTypeVisitor(sourceFile: ts.SourceFile): void {\n\tts.forEachChild(sourceFile, node => {\n\t\tif (ts.isTypeAliasDeclaration(node) && node.name.getText(sourceFile).endsWith('Directive0ɵɵ')) {\n\t\t\textractDirectives(node, sourceFile);\n\t\t}\n\t});\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/signals.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAClB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,WAAW,GACX,MAAM,GACN,WAAW,GACX,cAAc,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D,eAAO,MAAM,YAAY,UAQxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/cli/transformer/signals.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,MAAM;IACN,WAAW;IACX,cAAc;CACd,CAAC","sourcesContent":["\nexport type SignalKey =\n\t| 'input'\n\t| 'output'\n\t| 'model'\n\t| 'formValue'\n\t| 'view'\n\t| 'viewChild'\n\t| 'viewChildren';\n\nexport type SignalDetails = Partial<Record<SignalKey, string>>;\n\nexport const SIGNAL_NAMES = [\n\t'input',\n\t'output',\n\t'model',\n\t'formValue',\n\t'view',\n\t'viewChild',\n\t'viewChildren'\n];\n\n"]}
|
package/webpack/loader.d.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
interface webpackLoaderContext {
|
|
2
|
+
resourcePath: string;
|
|
3
|
+
callback(e: Error): void;
|
|
4
|
+
callback(e: null, content?: string, sourceMap?: string): void;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* The entry point for ts-loader
|
|
4
8
|
*/
|
|
5
9
|
export declare function initTypeScript(): void;
|
|
6
|
-
export declare function loader(this:
|
|
10
|
+
export declare function loader(this: webpackLoaderContext, contents: string, inputSourceMap?: Record<string, any>): void;
|
|
11
|
+
export {};
|
|
7
12
|
//# sourceMappingURL=loader.d.ts.map
|
package/webpack/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/webpack/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/webpack/loader.ts"],"names":[],"mappings":"AASA,UAAU,oBAAoB;IAE7B,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAEzB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAE9D;AAED;;GAEG;AAEH,wBAAgB,cAAc,SAY7B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAoBxG"}
|
package/webpack/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/cli/webpack/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/cli/webpack/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzF,IAAI,IAAqB,CAAC;AAC1B,IAAI,OAAmB,CAAC;AACxB,IAAI,YAAkC,CAAC;AACvC,IAAI,YAAmC,CAAC;AAYxC;;GAEG;AAEH,MAAM,UAAU,cAAc;IAC7B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,EAAE,CAAC,gCAAgC,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,GAAU,CAAC,CAAC;IAC/E,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;IAC9B,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7D,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,cAAc,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,MAAM,CAA6B,QAAgB,EAAE,cAAoC;IACxG,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,IAAI,CAAC;YACJ,cAAc,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,CAAU,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IACD,IAAI,OAA2B,EAAE,SAA6B,CAAC;IAC/D,IAAI,CAAC,SAAS,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,EAAE;QACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,SAAS,GAAG,QAAQ,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,GAAG,QAAQ,CAAC;QACpB,CAAC;IACF,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7F,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;AAC/B,CAAC","sourcesContent":["import { normalize } from 'path';\nimport ts from 'typescript/lib/tsserverlibrary.js';\nimport { getConfigPath, getTransformers, scanDirectives } from '../compiler/compiler.js';\n\nlet host: ts.CompilerHost;\nlet program: ts.Program;\nlet orgWriteFile: ts.WriteFileCallback;\nlet transformers: ts.CustomTransformers;\n\ninterface webpackLoaderContext {\n\n\tresourcePath: string;\n\n\tcallback(e: Error): void;\n\n\tcallback(e: null, content?: string, sourceMap?: string): void;\n\n}\n\n/**\n * The entry point for ts-loader\n */\n\nexport function initTypeScript() {\n\tconst configPath = getConfigPath();\n\tconst cmd = ts.getParsedCommandLineOfConfigFile(configPath, {}, ts.sys as any);\n\tif (!cmd) {\n\t\tconsole.log(`can't parse command line `);\n\t\tthrow new Error('');\n\t}\n\thost = ts.createCompilerHost(cmd.options);\n\torgWriteFile = host.writeFile;\n\tprogram = ts.createProgram(cmd.fileNames, cmd.options, host);\n\ttransformers = getTransformers(program);\n\tscanDirectives(program);\n}\n\nexport function loader(this: webpackLoaderContext, contents: string, inputSourceMap?: Record<string, any>) {\n\tif (!program) {\n\t\ttry {\n\t\t\tinitTypeScript();\n\t\t} catch (e) {\n\t\t\tthis.callback(e as Error);\n\t\t}\n\t}\n\tlet content: string | undefined, sourceMap: string | undefined;\n\thost.writeFile = (fileName: string, contents: string) => {\n\t\tif (fileName.endsWith('.map')) {\n\t\t\tsourceMap = contents;\n\t\t} else if (fileName.endsWith('.js')) {\n\t\t\tcontent = contents;\n\t\t}\n\t};\n\tconst filePath = normalize(this.resourcePath);\n\tprogram.emit(program.getSourceFile(filePath), undefined, undefined, undefined, transformers);\n\tthis.callback(null, content, sourceMap);\n\thost.writeFile = orgWriteFile;\n}\n"]}
|