@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.
@@ -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;AA4BD,wBAAgB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAKhF;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,iBAAiB,QAKxF;AAED,wBAAgB,aAAa,WAkB5B;AAED,wBAAgB,WAAW,SAW1B;AAED,wBAAgB,mBAAmB,SAWlC"}
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"}
@@ -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 && 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() {
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../../src/cli/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,MAAM,mCAAmC,CAAC;AACnD,OAAO,EAAE,wCAAwC,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,wCAAwC,EAAE,MAAM,gDAAgD,CAAC;AAC1G,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,MAAM,UAAU,eAAe,CAAC,OAAmB;IAClD,OAAO;QACN,MAAM,EAAE;YACP,6BAA6B,CAAC,OAAO,CAAC;YACtC,6BAA6B,CAAC,OAAO,CAAC;SACtC;QACD,KAAK,EAAE,EAAE;QACT,iBAAiB,EAAE;YAClB,wCAAwC,CAAC,OAAO,CAAqD;YACrG,wCAAwC,CAAC,OAAO,CAAqD;SACrG;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAmB;IACjD,OAAO,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,iBAAiB,GAAG,CAAC,OAAiC,EAAiC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC;IACvH,OAAO,CAAC,OAAmB,EAAE,EAAE;QAC9B,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,iBAAiB,CAAC;QAC1B,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;QAChB,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,iBAAiB,CAAC;IAC1B,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAmB;IAC9C,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAwB,EAAE,OAA2B;IACjF,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,WAAW,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,GAA6B;IAC5C,oBAAoB,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;IAClC,mBAAmB,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB;IAC/C,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO;CAChC,CAAC;AAEF,SAAS,gBAAgB,CAAC,UAAyB;IAClD,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,4BAA4B,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAChI,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,UAAyB;IAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,GAAyB;IACjF,MAAM,aAAa,GAAG,EAAE,CAAC,uCAAuC,CAAC;IACjE,MAAM,IAAI,GAAG,EAAE,CAAC,uBAAuB,CACtC,UAAU,EACV,GAAG,CAAC,OAAO,EACX,EAAE,CAAC,GAAG,EACN,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,GAAG,CAAC,YAAY,CAChB,CAAC;IACF,MAAM,cAAc,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;IACnD,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,CAAC;IAC5C,WAAW,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAID,MAAM,UAAU,YAAY,CAAC,SAAqB;IACjD,MAAM,OAAO,GAAG,SAAyB,CAAC;IAC1C,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC9B,MAAM,mBAAmB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,GAAG,CAAC,gBAAgC,EAAE,SAAgC,EAAE,iBAAwC,EAAE,gBAA0B,EAAE,kBAA0C,EAAiB,EAAE;QACtN,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;QAC9G,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE;YACvF,MAAM,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,MAAO,CAAC;YAC/E,KAAK,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,KAAM,CAAC;YAC5E,iBAAiB,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,IAAI,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,iBAAkB,CAAC;SAChH,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8CAA8C,CAAC,SAAwC,EAAE,OAAuC,EAAE,IAAsB,EAAE,UAAoE,EAAE,4BAAuD,EAAE,iBAA8D;IACtW,MAAM,OAAO,GAAG,EAAE,CAAC,8CAA8C,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,4BAA4B,EAAE,iBAAiB,CAAC,CAAC;IACzJ,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC;AAChB,CAAC;AAGD,MAAM,QAAQ,GAAG;IAChB,oBAAoB,EAAE,UAAU,QAAgB;QAC/C,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;IACD,mBAAmB,EAAE;QACpB,OAAO,EAAE,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IACrC,CAAC;IACD,UAAU,EAAE;QACX,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;IACvB,CAAC;CACD,CAAC;AAEF,SAAS,UAAU,CAAC,IAAmB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClE,EAAE,CAAC,oCAAoC,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC3D,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,YAAkD;IAC1F,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,UAAU,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,cAAsB,EAAE,GAAyB;IAChF,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,EAAE,CAAC,yBAAyB,CAAC,EAAE,CAAC,GAAG,EAAE,8CAA8C,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/I,MAAM,QAAQ,GAAG,EAAE,CAAC,qBAAqB,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACvE,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,cAAsB,EAAE,GAAyB;IACxF,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,EAAE,CAAC,kCAAkC,CAAC,EAAE,CAAC,GAAG,EAAE,8CAA8C,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACvJ,MAAM,QAAQ,GAAG,EAAE,CAAC,8BAA8B,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAClG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,eAAe,CAAC,CAAC;QACjD,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IACD,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc,CACnC,IAAI,EAAI,cAAc,CACtB,EAAE,CAAC,GAAG,CAAC,UAAU,EACjB,QAAQ,IAAI,eAAe,CAC3B,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW;IAC1B,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;IACR,CAAC;IACD,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;QACnC,eAAe,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACP,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB;IAClC,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;IACR,CAAC;IACD,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;QACnC,uBAAuB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACP,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;AACF,CAAC","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"]}
@@ -1,7 +1,7 @@
1
1
  import { DecoratorInfo } from '../transformer/modules.js';
2
2
  export interface DirectiveInfo {
3
3
  selector: string;
4
- successor?: string;
4
+ successors?: string[];
5
5
  inputs?: DecoratorInfo[];
6
6
  outputs?: DecoratorInfo[];
7
7
  }
@@ -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,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,QAgBxD"}
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"}
@@ -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
- successor: info.successor,
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,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,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\tsuccessor?: string,\n\tinputs?: DecoratorInfo[],\n\toutputs?: DecoratorInfo[],\n}\n\nexport function registerDirectiveCall(info: DirectiveInfo) {\n\tdirectiveRegistry.set(info.selector, {\n\t\tsuccessor: info.successor,\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"]}
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.0",
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.3.0",
40
- "@ibyar/decorators": "^2.3.0",
41
- "@ibyar/directives": "^2.3.0",
42
- "@ibyar/elements": "^2.3.0",
43
- "@ibyar/expressions": "^2.3.0",
44
- "@ibyar/pipes": "^2.3.0",
45
- "tslib": "^2.6.3",
46
- "typescript": "^5.5.2"
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": "5bf90bcb6f9139753886e2e38272399af4c7153b"
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;AAiBnD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,CAwMvG"}
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, getTextValueForProperty, isComponentDecorator } from './helpers.js';
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
- if (importSpecifier.propertyName?.getText() === 'Component') {
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 (importSpecifier.name.getText() === 'Component') {
33
- visitSourceFile = true;
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 = getTextValueForProperty(option, '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
- interFaceType: createInterfaceType(viewName, extendsType),
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.interFaceType, updateSourceFile);
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;AAUnD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC,CAkFvG"}
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, getTextValueForProperty, isDirectiveDecorator } from './helpers.js';
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
- if (importSpecifier.propertyName?.getText() === 'Directive') {
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 (importSpecifier.name.getText() === 'Directive') {
30
- visitSourceFile = true;
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 = getTextValueForProperty(options, 'selector');
60
+ const selector = getTextValueFormLiteralProperty(options, 'selector');
61
61
  if (selector) {
62
- const successor = getTextValueForProperty(options, 'successor');
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
- successor,
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
- successor,
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":"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","sourcesContent":["import ts from 'typescript/lib/tsserverlibrary.js';\nimport { ClassInfo, moduleManger } from './modules.js';\nimport {\n\tgetInputs, getOutputs,\n\tgetTextValueForProperty,\n\tisDirectiveDecorator\n} from './helpers.js';\nimport { registerDirectiveCall } from '../directives/register.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\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() === '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 (importSpecifier.name.getText() === '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}\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 = getTextValueForProperty(options, 'selector');\n\t\t\t\t\t\t\t\t\tif (selector) {\n\t\t\t\t\t\t\t\t\t\tconst successor = getTextValueForProperty(options, 'successor');\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\tregisterDirectiveCall({\n\t\t\t\t\t\t\t\t\t\t\tselector,\n\t\t\t\t\t\t\t\t\t\t\tsuccessor,\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});\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\tsuccessor,\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});\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"]}
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"]}
@@ -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,CA+BlG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,CAwB/F"}
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"}
@@ -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
- public static observedAttributes: [${attributes}];
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.successor) {
149
- temp.push(`successor: '${directive.successor}'`);
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"]}
@@ -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 getTextValueForProperty(option: ts.ObjectLiteralExpression, property: string): string | undefined;
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;AAG7C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,aAAa,SAAc,GAAG,OAAO,CAElG;AAGD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,aAAa,SAAc,GAAG,OAAO,CAElG;AAED,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,aAAa,SAAc,EAAE,aAAa,SAAc,GAAG,OAAO,CAE1I;AAGD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,SAAS,GAAG,OAAO,CAEnF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,cAAc,SAAe,GAAG,OAAO,CAErG;AAGD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAKjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,GAAG,OAAO,CAElE;AAED,wBAAgB,uCAAuC,CAAC,MAAM,EAAE,EAAE,CAAC,mBAAmB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,aAAa,EAAE,CAqBzL;AAED,wBAAgB,0CAA0C,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,aAAa,EAAE,CA4B/L;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,OAAO,CAAC,GAAG,aAAa,EAAE,CAUnK;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,aAAa,EAAE,CAElG;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,MAAM,EAAE,CAE/F;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,aAAa,EAAE,CAEnG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,MAAM,EAAE,CAEhG;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAShH"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/cli/transformer/helpers.ts"],"names":[],"mappings":"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"}
@@ -165,7 +165,7 @@ export function getOutputNames(classNode, checker) {
165
165
  * @param property
166
166
  * @returns
167
167
  */
168
- export function getTextValueForProperty(option, property) {
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"]}
@@ -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
- interFaceType: ts.InterfaceDeclaration;
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
- successor?: string;
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;AAExD,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;CACxB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE,aAAa,EAAE,CAAC;CACzB,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
+ {"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":"AAuBA,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';\n\nexport type ViewInfo = {\n\tselector: string;\n\textendsType: string;\n\tviewName: string;\n\tinterFaceType: ts.InterfaceDeclaration;\n\tformAssociated: boolean;\n};\n\nexport type DecoratorInfo = { name: string, aliasName: string, type?: string };\n\nexport type ClassInfo = {\n\ttype: 'component' | 'directive';\n\tname: string,\n\tsuccessor?: string;\n\tviews: ViewInfo[];\n\tinputs: DecoratorInfo[];\n\toutputs: DecoratorInfo[];\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
+ {"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;AAmDnD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI,CAMzE"}
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' || name === 'successor') && member.type && ts.isLiteralTypeNode(member.type)) {
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":"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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' || name === 'successor') && 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 === '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"]}
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,4 @@
1
+ export type SignalKey = 'input' | 'output' | 'model' | 'formValue' | 'view' | 'viewChild' | 'viewChildren';
2
+ export type SignalDetails = Partial<Record<SignalKey, string>>;
3
+ export declare const SIGNAL_NAMES: string[];
4
+ //# sourceMappingURL=signals.d.ts.map
@@ -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,10 @@
1
+ export const SIGNAL_NAMES = [
2
+ 'input',
3
+ 'output',
4
+ 'model',
5
+ 'formValue',
6
+ 'view',
7
+ 'viewChild',
8
+ 'viewChildren'
9
+ ];
10
+ //# sourceMappingURL=signals.js.map
@@ -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"]}
@@ -1,7 +1,12 @@
1
- import type * as webpack from 'webpack';
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: webpack.LoaderContext<{}>, contents: string, inputSourceMap?: Record<string, any>): void;
10
+ export declare function loader(this: webpackLoaderContext, contents: string, inputSourceMap?: Record<string, any>): void;
11
+ export {};
7
12
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/webpack/loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AASxC;;GAEG;AAEH,wBAAgB,cAAc,SAY7B;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAoB7G"}
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"}
@@ -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;AAEjC,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;AAExC;;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,CAAkC,QAAgB,EAAE,cAAoC;IAC7G,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 type * as webpack from 'webpack';\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\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: webpack.LoaderContext<{}>, 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"]}
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"]}