@simplysm/sd-cli 6.0.28 → 6.0.38

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.
Files changed (70) hide show
  1. package/dist-node/bin/sd-cli.js +19 -4
  2. package/dist-node/bin/sd-cli.js.map +1 -1
  3. package/dist-node/build-tools/SdCliNgModuleFilesGenerator.js +106 -57
  4. package/dist-node/build-tools/SdCliNgModuleFilesGenerator.js.map +1 -1
  5. package/dist-node/build-tools/metadata/SdAotMetadataReader.js +13 -11
  6. package/dist-node/build-tools/metadata/SdAotMetadataReader.js.map +1 -1
  7. package/dist-node/build-tools/metadata/SdIvyMetadataReader.js +23 -6
  8. package/dist-node/build-tools/metadata/SdIvyMetadataReader.js.map +1 -1
  9. package/dist-node/build-tools/metadata/SdMetadataError.js +13 -0
  10. package/dist-node/build-tools/metadata/SdMetadataError.js.map +1 -0
  11. package/dist-node/build-tools/metadata/SdMyMetadataReader.js +22 -5
  12. package/dist-node/build-tools/metadata/SdMyMetadataReader.js.map +1 -1
  13. package/dist-node/builders/SdCliNgClientBuilder.js +74 -74
  14. package/dist-node/builders/SdCliNgClientBuilder.js.map +1 -1
  15. package/dist-node/builders/SdCliNgLibraryBuilder.js +49 -45
  16. package/dist-node/builders/SdCliNgLibraryBuilder.js.map +1 -1
  17. package/dist-node/builders/SdCliServerBuilder.js +33 -23
  18. package/dist-node/builders/SdCliServerBuilder.js.map +1 -1
  19. package/dist-node/builders/SdCliTypescriptBuilder.js +75 -65
  20. package/dist-node/builders/SdCliTypescriptBuilder.js.map +1 -1
  21. package/dist-node/entry-points/SdCliProject.js +17 -17
  22. package/dist-node/entry-points/SdCliProject.js.map +1 -1
  23. package/dist-node/packages/SdCliClientPackage.js +6 -4
  24. package/dist-node/packages/SdCliClientPackage.js.map +1 -1
  25. package/dist-node/packages/SdCliLibraryPackage.js +5 -3
  26. package/dist-node/packages/SdCliLibraryPackage.js.map +1 -1
  27. package/dist-node/packages/SdCliServerPackage.js +4 -3
  28. package/dist-node/packages/SdCliServerPackage.js.map +1 -1
  29. package/dist-node/utils/SdWebpackUtil.js +33 -13
  30. package/dist-node/utils/SdWebpackUtil.js.map +1 -1
  31. package/dist-node/workers/client-ng-gen-worker.js +54 -0
  32. package/dist-node/workers/client-ng-gen-worker.js.map +1 -0
  33. package/dist-node/workers/lib-build-worker.js +7 -6
  34. package/dist-node/workers/lib-build-worker.js.map +1 -1
  35. package/dist-types/build-tools/metadata/SdIvyMetadataReader.d.ts +1 -0
  36. package/dist-types/build-tools/metadata/SdMetadataError.d.ts +6 -0
  37. package/dist-types/build-tools/metadata/SdMyMetadataReader.d.ts +1 -0
  38. package/dist-types/builders/SdCliNgClientBuilder.d.ts +6 -2
  39. package/dist-types/builders/SdCliNgLibraryBuilder.d.ts +3 -2
  40. package/dist-types/builders/SdCliServerBuilder.d.ts +2 -1
  41. package/dist-types/builders/SdCliTypescriptBuilder.d.ts +5 -5
  42. package/dist-types/commons.d.ts +4 -1
  43. package/dist-types/entry-points/SdCliProject.d.ts +5 -1
  44. package/dist-types/packages/SdCliClientPackage.d.ts +2 -1
  45. package/dist-types/packages/SdCliLibraryPackage.d.ts +2 -1
  46. package/dist-types/packages/SdCliServerPackage.d.ts +2 -1
  47. package/dist-types/utils/SdWebpackUtil.d.ts +1 -1
  48. package/dist-types/workers/client-ng-gen-worker.d.ts +1 -0
  49. package/package.json +7 -7
  50. package/schema/schema.json +72 -1
  51. package/sd-tsconfig.node.json +2 -1
  52. package/src/bin/sd-cli.ts +19 -4
  53. package/src/build-tools/SdCliNgModuleFilesGenerator.ts +122 -70
  54. package/src/build-tools/metadata/SdAotMetadataReader.ts +4 -1
  55. package/src/build-tools/metadata/SdIvyMetadataReader.ts +27 -4
  56. package/src/build-tools/metadata/SdMetadataError.ts +7 -0
  57. package/src/build-tools/metadata/SdMyMetadataReader.ts +25 -3
  58. package/src/builders/SdCliNgClientBuilder.ts +123 -66
  59. package/src/builders/SdCliNgLibraryBuilder.ts +79 -42
  60. package/src/builders/SdCliServerBuilder.ts +48 -19
  61. package/src/builders/SdCliTypescriptBuilder.ts +102 -78
  62. package/src/commons.ts +2 -1
  63. package/src/entry-points/SdCliProject.ts +22 -14
  64. package/src/packages/SdCliClientPackage.ts +5 -3
  65. package/src/packages/SdCliLibraryPackage.ts +4 -2
  66. package/src/packages/SdCliServerPackage.ts +4 -3
  67. package/src/utils/SdWebpackUtil.ts +42 -22
  68. package/src/workers/client-ng-gen-worker.ts +60 -0
  69. package/src/workers/lib-build-worker.ts +7 -6
  70. package/tsconfig.json +2 -1
@@ -15,6 +15,7 @@ export class SdCliLibraryPackage extends SdCliPackageBase {
15
15
 
16
16
  public constructor(public readonly rootPath: string,
17
17
  public readonly config: ISdLibraryPackageConfig,
18
+ private readonly _skipProcesses: ("emit" | "check" | "lint" | "genIndex")[],
18
19
  private readonly _processWorkManager: SdProcessWorkManager) {
19
20
  super(rootPath);
20
21
  this._logger = Logger.get(["simplysm", "sd-cli", this.constructor.name, this.npmConfig.name]);
@@ -66,7 +67,7 @@ export class SdCliLibraryPackage extends SdCliPackageBase {
66
67
  .on("complete", (results) => {
67
68
  this.emit("complete", target, results);
68
69
  })
69
- .sendAsync(this.rootPath, target, watch, autoIndexConfig);
70
+ .sendAsync(this.rootPath, target, watch, this._skipProcesses, autoIndexConfig);
70
71
  }
71
72
 
72
73
  private async _genBuildTsconfigAsync(): Promise<void> {
@@ -105,7 +106,8 @@ export class SdCliLibraryPackage extends SdCliPackageBase {
105
106
  strictInputAccessModifiers: true,
106
107
  strictTemplates: true,
107
108
  strictInputTypes: false,
108
- strictOutputEventTypes: false
109
+ strictOutputEventTypes: false,
110
+ disableTypeScriptVersionCheck: true
109
111
  };
110
112
  }
111
113
 
@@ -15,7 +15,8 @@ export class SdCliServerPackage extends SdCliPackageBase {
15
15
  }
16
16
 
17
17
  public constructor(public readonly rootPath: string,
18
- public readonly config: ISdServerPackageConfig) {
18
+ public readonly config: ISdServerPackageConfig,
19
+ public readonly useCache: boolean) {
19
20
  super(rootPath);
20
21
  }
21
22
 
@@ -23,7 +24,7 @@ export class SdCliServerPackage extends SdCliPackageBase {
23
24
  await this._genBuildTsconfigAsync();
24
25
 
25
26
  const buildTsconfigFilePath = path.resolve(this.rootPath, `sd-tsconfig.json`);
26
- const builder = new SdCliServerBuilder(this.rootPath, buildTsconfigFilePath, process.cwd(), this.config);
27
+ const builder = new SdCliServerBuilder(this.rootPath, buildTsconfigFilePath, process.cwd(), this.config, this.useCache);
27
28
 
28
29
  await builder
29
30
  .on("change", () => {
@@ -50,7 +51,7 @@ export class SdCliServerPackage extends SdCliPackageBase {
50
51
  await this._genBuildTsconfigAsync();
51
52
 
52
53
  const buildTsconfigFilePath = path.resolve(this.rootPath, `sd-tsconfig.json`);
53
- const builder = new SdCliServerBuilder(this.rootPath, buildTsconfigFilePath, process.cwd(), this.config);
54
+ const builder = new SdCliServerBuilder(this.rootPath, buildTsconfigFilePath, process.cwd(), this.config, this.useCache);
54
55
 
55
56
  await builder
56
57
  .on("change", () => {
@@ -1,6 +1,6 @@
1
1
  import { ISdPackageBuildResult } from "../commons";
2
2
  import * as webpack from "webpack";
3
- import { StringUtil } from "@simplysm/sd-core-common";
3
+ import { NeverEntryError } from "@simplysm/sd-core-common";
4
4
 
5
5
  export class SdWebpackUtil {
6
6
  public static getWebpackResults(stats: Error | webpack.Stats): ISdPackageBuildResult[] {
@@ -14,37 +14,57 @@ export class SdWebpackUtil {
14
14
 
15
15
  const results: ISdPackageBuildResult[] = [];
16
16
 
17
- const info = stats.toJson("errors-warnings");
17
+ for (const warn of stats.compilation.warnings) {
18
+ if (stats.compilation.options.ignoreWarnings?.some((ignoreWarning) => ignoreWarning(warn, stats.compilation))) continue;
18
19
 
19
- if (info.warnings) {
20
- results.push(
21
- ...info.warnings.map((statWarning) => ({
22
- filePath: undefined,
23
- severity: "warning" as const,
24
- message: this._statErrorToMessage(statWarning)
25
- }))
26
- );
20
+ results.push({
21
+ filePath: undefined,
22
+ severity: "warning",
23
+ message: this._errorToMessage(warn)
24
+ });
27
25
  }
28
26
 
29
- if (info.errors) {
30
- results.push(
31
- ...info.errors.map((statError) => ({
32
- filePath: undefined,
33
- severity: "error" as const,
34
- message: this._statErrorToMessage(statError)
35
- }))
36
- );
27
+ for (const err of stats.compilation.errors) {
28
+ results.push({
29
+ filePath: undefined,
30
+ severity: "error",
31
+ message: this._errorToMessage(err)
32
+ });
37
33
  }
38
34
 
39
35
  return results;
40
36
  }
41
37
 
42
- private static _statErrorToMessage(statsError: webpack.StatsError): string {
43
- if (StringUtil.isNullOrEmpty(statsError.moduleName)) {
44
- return statsError.message;
38
+ private static _errorToMessage(err: Partial<webpack.WebpackError>): string {
39
+ let result = "";
40
+
41
+ if ("error" in err && "originalSassError" in err["error"]) {
42
+ const sassError = err["error"]["originalSassError"];
43
+ result += sassError.file.replace(/^\.\//, "");
44
+ // result += `(${sassError.line as number}${sassError.column !== undefined ? `, ${sassError.column as number}` : ""})`;
45
+ result += ": ";
46
+ result += err.name + ": ";
47
+ result += err.message;
45
48
  }
46
49
  else {
47
- return `${statsError.moduleName.replace(/^\.\//, "")}:${statsError.loc!} - error: ${statsError.message}`;
50
+ if (err.file !== undefined) {
51
+ result += err.file.replace(/^\.\//, "");
52
+ if (err.loc !== undefined) {
53
+ if ("start" in err.loc) {
54
+ result += `(${err.loc.start.line}${err.loc.start.column !== undefined ? `, ${err.loc.start.column}` : ""})`;
55
+ }
56
+ else {
57
+ throw new NeverEntryError();
58
+ }
59
+ }
60
+ result += ": ";
61
+
62
+ result += err.name + ": ";
63
+ }
64
+
65
+ result += err.message;
48
66
  }
67
+
68
+ return result;
49
69
  }
50
70
  }
@@ -0,0 +1,60 @@
1
+ import { EventEmitter } from "events";
2
+ import { Logger, LoggerSeverity, SdProcessChildWorker } from "@simplysm/sd-core-node";
3
+ import { SdCliNgLibraryBuilder } from "../builders/SdCliNgLibraryBuilder";
4
+ import * as path from "path";
5
+
6
+ EventEmitter.defaultMaxListeners = 0;
7
+ process.setMaxListeners(0);
8
+
9
+ const logger = Logger.get(["simplysm", "sd-cli", "ng-gen-worker"]);
10
+
11
+ if (process.env.SD_CLI_LOGGER_SEVERITY === "DEBUG") {
12
+ Error.stackTraceLimit = 100; //Infinity;
13
+
14
+ Logger.setConfig(["simplysm", "sd-cli"], {
15
+ console: {
16
+ level: LoggerSeverity.debug
17
+ }
18
+ });
19
+ }
20
+ else {
21
+ Logger.setConfig(["simplysm", "sd-cli"], {
22
+ dot: true
23
+ });
24
+ }
25
+
26
+
27
+ try {
28
+ let ngGenerator: SdCliNgLibraryBuilder | undefined;
29
+ SdProcessChildWorker.defineWorker(async (worker, args) => {
30
+ const rootPath = args[0] as string;
31
+ const watch = args[1] as boolean;
32
+ const changedFilePaths = args[2] as string[] | undefined;
33
+
34
+ const tsconfigFilePath = path.resolve(rootPath, `sd-tsconfig.json`);
35
+
36
+ if (!ngGenerator || !changedFilePaths) {
37
+ ngGenerator = new SdCliNgLibraryBuilder(rootPath, tsconfigFilePath, ["emit", "check", "lint", "genIndex"], undefined);
38
+ const genDirtyFilePaths = await ngGenerator.reloadProgramAsync(watch);
39
+ const genResult = await ngGenerator.generateAdditionalFilesAsync(genDirtyFilePaths, watch);
40
+ worker.send("complete", {
41
+ dirtyFilePaths: [...genDirtyFilePaths, ...genResult.dirtyFilePaths],
42
+ result: genResult.result
43
+ });
44
+ }
45
+ else {
46
+ const genDirtyFilePaths = await ngGenerator.reloadChangedProgramAsync(changedFilePaths, watch);
47
+ if (genDirtyFilePaths.length === 0) {
48
+ worker.send("complete", { dirtyFilePaths: [], result: [] });
49
+ return;
50
+ }
51
+
52
+ const genResult = await ngGenerator.generateAdditionalFilesAsync(genDirtyFilePaths.distinct(), watch);
53
+ worker.send("complete", { dirtyFilePaths: genResult.dirtyFilePaths, result: genResult.result });
54
+ }
55
+ });
56
+ }
57
+ catch (err) {
58
+ logger.error(err);
59
+ process.exit(1);
60
+ }
@@ -14,14 +14,14 @@ const logger = Logger.get(["simplysm", "sd-cli", "lib-build-worker"]);
14
14
  if (process.env.SD_CLI_LOGGER_SEVERITY === "DEBUG") {
15
15
  Error.stackTraceLimit = 100; //Infinity;
16
16
 
17
- Logger.setConfig({
17
+ Logger.setConfig(["simplysm", "sd-cli"], {
18
18
  console: {
19
19
  level: LoggerSeverity.debug
20
20
  }
21
21
  });
22
22
  }
23
23
  else {
24
- Logger.setConfig({
24
+ Logger.setConfig(["simplysm", "sd-cli"], {
25
25
  dot: true
26
26
  });
27
27
  }
@@ -32,13 +32,14 @@ try {
32
32
  const rootPath = args[0] as string;
33
33
  const target = args[1] as "node" | "browser" | "angular" | undefined;
34
34
  const watch = args[2] as boolean;
35
+ const skipProcesses = args[3] as ("emit" | "check" | "lint" | "genIndex")[];
35
36
 
36
37
  if (target === undefined) {
37
38
  // 1. output를 내놓지 않는 Typescript 라이브러리(types)인 경우, typecheck와 lint만 수행
38
39
  if (FsUtil.exists(path.resolve(rootPath, `tsconfig.json`))) {
39
40
  const tsconfigFilePath = path.resolve(rootPath, `tsconfig.json`);
40
41
 
41
- const builder = new SdCliTypescriptBuilder(rootPath, tsconfigFilePath, ["emit", "genIndex"], undefined);
42
+ const builder = new SdCliTypescriptBuilder(rootPath, tsconfigFilePath, skipProcesses.concat(["emit", "genIndex"]).distinct(), undefined);
42
43
  await builder
43
44
  .on("change", () => {
44
45
  worker.send("change");
@@ -62,11 +63,11 @@ try {
62
63
  }
63
64
  }
64
65
  else {
65
- const autoIndexConfig = args[3] as ISdAutoIndexConfig | undefined;
66
+ const autoIndexConfig = args[4] as ISdAutoIndexConfig | undefined;
66
67
  const tsconfigFilePath = path.resolve(rootPath, `sd-tsconfig.${target}.json`);
67
68
 
68
69
  if (target !== "angular") {
69
- const builder = new SdCliTypescriptBuilder(rootPath, tsconfigFilePath, [], autoIndexConfig);
70
+ const builder = new SdCliTypescriptBuilder(rootPath, tsconfigFilePath, skipProcesses, autoIndexConfig);
70
71
  await builder
71
72
  .on("change", () => {
72
73
  worker.send("change");
@@ -77,7 +78,7 @@ try {
77
78
  .buildAsync(watch);
78
79
  }
79
80
  else {
80
- const builder = new SdCliNgLibraryBuilder(rootPath, tsconfigFilePath, [], autoIndexConfig);
81
+ const builder = new SdCliNgLibraryBuilder(rootPath, tsconfigFilePath, skipProcesses, autoIndexConfig);
81
82
  await builder
82
83
  .on("change", () => {
83
84
  worker.send("change");
package/tsconfig.json CHANGED
@@ -23,6 +23,7 @@
23
23
  },
24
24
  "files": [
25
25
  "src/bin/sd-cli.ts",
26
- "src/workers/lib-build-worker.ts"
26
+ "src/workers/lib-build-worker.ts",
27
+ "src/workers/client-ng-gen-worker.ts"
27
28
  ]
28
29
  }