@simplysm/sd-cli 12.8.21 → 12.9.1

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 (96) hide show
  1. package/dist/entry/sd-cli-ai-command.js +2 -1
  2. package/dist/entry/sd-cli-ai-command.js.map +1 -1
  3. package/dist/entry/sd-cli-cordova.d.ts +1 -1
  4. package/dist/entry/sd-cli-cordova.js +10 -9
  5. package/dist/entry/sd-cli-cordova.js.map +1 -1
  6. package/dist/entry/sd-cli-electron.d.ts +6 -6
  7. package/dist/entry/sd-cli-electron.js +15 -9
  8. package/dist/entry/sd-cli-electron.js.map +1 -1
  9. package/dist/entry/sd-cli-local-update.d.ts +5 -5
  10. package/dist/entry/sd-cli-local-update.js +8 -12
  11. package/dist/entry/sd-cli-local-update.js.map +1 -1
  12. package/dist/entry/sd-cli-project.d.ts +11 -11
  13. package/dist/entry/sd-cli-project.js +11 -14
  14. package/dist/entry/sd-cli-project.js.map +1 -1
  15. package/dist/entry/utils/loadProjConfAsync.d.ts +5 -0
  16. package/dist/entry/utils/loadProjConfAsync.js +8 -0
  17. package/dist/entry/utils/loadProjConfAsync.js.map +1 -0
  18. package/dist/pkg-builders/client/sd-client.build-runner.js +1 -1
  19. package/dist/pkg-builders/client/sd-client.build-runner.js.map +1 -1
  20. package/dist/pkg-builders/client/sd-ng.bundler-context.d.ts +6 -5
  21. package/dist/pkg-builders/client/sd-ng.bundler-context.js +6 -6
  22. package/dist/pkg-builders/client/sd-ng.bundler-context.js.map +1 -1
  23. package/dist/pkg-builders/client/sd-ng.bundler.d.ts +13 -13
  24. package/dist/pkg-builders/client/sd-ng.bundler.js +1 -1
  25. package/dist/pkg-builders/client/sd-ng.bundler.js.map +1 -1
  26. package/dist/pkg-builders/client/sd-ng.plugin-creator.js +4 -88
  27. package/dist/pkg-builders/client/sd-ng.plugin-creator.js.map +1 -1
  28. package/dist/pkg-builders/lib/sd-js-lib.build-runner.js.map +1 -1
  29. package/dist/pkg-builders/lib/sd-ts-lib.build-runner.d.ts +1 -1
  30. package/dist/pkg-builders/lib/sd-ts-lib.build-runner.js.map +1 -1
  31. package/dist/pkg-builders/lib/sd-ts-lib.builder.js.map +1 -1
  32. package/dist/pkg-builders/sd-multi.build-runner.d.ts +4 -0
  33. package/dist/pkg-builders/sd-multi.build-runner.js +33 -25
  34. package/dist/pkg-builders/sd-multi.build-runner.js.map +1 -1
  35. package/dist/pkg-builders/server/sd-server.build-runner.js.map +1 -1
  36. package/dist/pkg-builders/server/sd-server.bundler.d.ts +6 -2
  37. package/dist/pkg-builders/server/sd-server.bundler.js +24 -24
  38. package/dist/pkg-builders/server/sd-server.bundler.js.map +1 -1
  39. package/dist/sd-cli/vitest.config.d.ts +2 -0
  40. package/dist/sd-cli/vitest.config.js +15 -0
  41. package/dist/sd-cli/vitest.config.js.map +1 -0
  42. package/dist/sd-cli.js +7 -36
  43. package/dist/sd-cli.js.map +1 -1
  44. package/dist/ts-compiler/sd-dependency-analyzer.d.ts +8 -0
  45. package/dist/ts-compiler/sd-dependency-analyzer.js +244 -0
  46. package/dist/ts-compiler/sd-dependency-analyzer.js.map +1 -0
  47. package/dist/ts-compiler/sd-dependency-cache.d.ts +27 -0
  48. package/dist/ts-compiler/sd-dependency-cache.js +232 -0
  49. package/dist/ts-compiler/sd-dependency-cache.js.map +1 -0
  50. package/dist/ts-compiler/sd-ts-compiler.d.ts +7 -9
  51. package/dist/ts-compiler/sd-ts-compiler.js +101 -188
  52. package/dist/ts-compiler/sd-ts-compiler.js.map +1 -1
  53. package/dist/types/worker.types.d.ts +19 -0
  54. package/dist/utils/sd-cli-performance-time.d.ts +2 -1
  55. package/dist/utils/sd-cli-performance-time.js +9 -9
  56. package/dist/utils/sd-cli-performance-time.js.map +1 -1
  57. package/dist/workers/style-bundler.worker.d.ts +1 -0
  58. package/dist/workers/style-bundler.worker.js +56 -0
  59. package/dist/workers/style-bundler.worker.js.map +1 -0
  60. package/package.json +11 -11
  61. package/src/entry/sd-cli-ai-command.ts +2 -1
  62. package/src/entry/sd-cli-cordova.ts +20 -20
  63. package/src/entry/sd-cli-electron.ts +54 -23
  64. package/src/entry/sd-cli-local-update.ts +14 -29
  65. package/src/entry/sd-cli-project.ts +24 -41
  66. package/src/entry/utils/loadProjConfAsync.ts +12 -0
  67. package/src/pkg-builders/client/sd-client.build-runner.ts +7 -7
  68. package/src/pkg-builders/client/sd-ng.bundler-context.ts +15 -12
  69. package/src/pkg-builders/client/sd-ng.bundler.ts +17 -20
  70. package/src/pkg-builders/client/sd-ng.plugin-creator.ts +5 -94
  71. package/src/pkg-builders/lib/sd-js-lib.build-runner.ts +6 -6
  72. package/src/pkg-builders/lib/sd-ts-lib.build-runner.ts +7 -7
  73. package/src/pkg-builders/lib/sd-ts-lib.builder.ts +1 -1
  74. package/src/pkg-builders/sd-multi.build-runner.ts +54 -39
  75. package/src/pkg-builders/server/sd-server.build-runner.ts +6 -6
  76. package/src/pkg-builders/server/sd-server.bundler.ts +43 -35
  77. package/src/sd-cli.ts +7 -36
  78. package/src/ts-compiler/sd-dependency-analyzer.ts +312 -0
  79. package/src/ts-compiler/sd-dependency-cache.ts +328 -0
  80. package/src/ts-compiler/sd-ts-compiler.ts +161 -256
  81. package/src/types/worker.types.ts +17 -0
  82. package/src/utils/sd-cli-performance-time.ts +9 -9
  83. package/src/workers/style-bundler.worker.ts +70 -0
  84. package/tests/deps/sd-dependency-analyzer.spec.ts +272 -0
  85. package/tests/deps/sd-dependency-cache.spec.ts +144 -0
  86. package/tsconfig.json +1 -1
  87. package/tsconfig.test.json +8 -0
  88. package/vitest.config.ts +15 -0
  89. package/dist/index.d.ts +0 -34
  90. package/dist/index.js +0 -35
  91. package/dist/index.js.map +0 -1
  92. package/dist/ts-compiler/sd-ts-dependency-analyzer.d.ts +0 -10
  93. package/dist/ts-compiler/sd-ts-dependency-analyzer.js +0 -140
  94. package/dist/ts-compiler/sd-ts-dependency-analyzer.js.map +0 -1
  95. package/src/index.ts +0 -34
  96. package/src/ts-compiler/sd-ts-dependency-analyzer.ts +0 -176
@@ -1,140 +0,0 @@
1
- import * as ts from "typescript";
2
- import { PathUtils } from "@simplysm/sd-core-node";
3
- import * as module from "node:module";
4
- import path from "path";
5
- export class SdTsDependencyAnalyzer {
6
- static analyze(program, compilerHost, scopePaths) {
7
- const compilerOpts = program.getCompilerOptions();
8
- const allDepMap = new Map();
9
- const visited = new Set();
10
- const messages = [];
11
- const getOrgSourceFile = (sf) => {
12
- if (sf.fileName.endsWith(".ngtypecheck.ts")) {
13
- const orgFileName = sf.fileName.slice(0, -15) + ".ts";
14
- return program.getSourceFile(orgFileName);
15
- }
16
- return sf;
17
- };
18
- const inScope = (filePath) => {
19
- return scopePaths.some((scope) => PathUtils.isChildPath(filePath, scope));
20
- };
21
- const resolveModule = (text, base) => {
22
- const res = ts.resolveModuleName(text, base, compilerOpts, compilerHost);
23
- if (res.resolvedModule) {
24
- return { resolvedFileName: res.resolvedModule.resolvedFileName, isFallback: false };
25
- }
26
- const absPath = path.resolve(path.dirname(base), text);
27
- if (compilerHost.fileExists(absPath)) {
28
- return { resolvedFileName: absPath, isFallback: true };
29
- }
30
- return undefined;
31
- };
32
- const error = (sf, node, msg) => {
33
- try {
34
- const pos = ts.getLineAndCharacterOfPosition(sf, node.getStart());
35
- messages.push({
36
- filePath: PathUtils.norm(sf.fileName),
37
- line: pos.line,
38
- char: pos.character,
39
- code: undefined,
40
- severity: "error",
41
- message: msg,
42
- type: "deps",
43
- });
44
- }
45
- catch {
46
- messages.push({
47
- filePath: PathUtils.norm(sf.fileName),
48
- line: 0,
49
- char: 0,
50
- code: undefined,
51
- severity: "error",
52
- message: `${msg} (pos unknown)`,
53
- type: "deps",
54
- });
55
- }
56
- };
57
- const collectDeps = (sf, fromFile) => {
58
- if (allDepMap.has(fromFile))
59
- return;
60
- const deps = new Set();
61
- const pushDep = (raw, node) => {
62
- if (module.builtinModules.includes(raw.replace(/^node:/, "")))
63
- return;
64
- const resolved = resolveModule(raw, sf.fileName);
65
- if (!resolved) {
66
- error(sf, node, `파일 "${sf.fileName}"에서 "${raw}" 모듈을 해석할 수 없습니다.`);
67
- return;
68
- }
69
- if (!inScope(resolved.resolvedFileName))
70
- return;
71
- const norm = PathUtils.norm(resolved.resolvedFileName);
72
- deps.add(norm);
73
- if (!visited.has(norm) && !resolved.isFallback) {
74
- visited.add(norm);
75
- const targetSf = program.getSourceFile(norm);
76
- if (!targetSf) {
77
- error(sf, node, `모듈 "${raw}"은(는) "${resolved}" 파일로 해석되었으나, 해당 파일의 ts.SourceFile이 없습니다.`);
78
- return;
79
- }
80
- collectDeps(targetSf, norm);
81
- }
82
- };
83
- const visit = (node) => {
84
- if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {
85
- const spec = node.moduleSpecifier;
86
- if (spec && ts.isStringLiteral(spec))
87
- pushDep(spec.text, node);
88
- }
89
- else if (ts.isCallExpression(node) &&
90
- node.expression.kind === ts.SyntaxKind.ImportKeyword &&
91
- ts.isStringLiteral(node.arguments[0])) {
92
- pushDep(node.arguments[0].text, node);
93
- }
94
- else if (ts.isCallExpression(node) &&
95
- ts.isIdentifier(node.expression) &&
96
- node.expression.text === "require" &&
97
- node.arguments.length === 1 &&
98
- ts.isStringLiteral(node.arguments[0])) {
99
- pushDep(node.arguments[0].text, node);
100
- }
101
- else if (ts.isCallExpression(node) &&
102
- ts.isPropertyAccessExpression(node.expression) &&
103
- ts.isIdentifier(node.expression.expression) &&
104
- node.expression.expression.text === "require" &&
105
- node.expression.name.text === "resolve" &&
106
- node.arguments.length === 1 &&
107
- ts.isStringLiteral(node.arguments[0])) {
108
- pushDep(node.arguments[0].text, node);
109
- }
110
- else if (ts.isCallExpression(node) &&
111
- ts.isPropertyAccessExpression(node.expression) &&
112
- ts.isMetaProperty(node.expression.expression) &&
113
- node.expression.expression.keywordToken === ts.SyntaxKind.ImportKeyword &&
114
- node.expression.name.text === "meta" &&
115
- node.arguments.length === 1 &&
116
- ts.isStringLiteral(node.arguments[0])) {
117
- pushDep(node.arguments[0].text, node);
118
- }
119
- ts.forEachChild(node, visit);
120
- };
121
- ts.forEachChild(sf, visit);
122
- allDepMap.set(fromFile, deps);
123
- };
124
- const sourceFileSet = new Set(program.getSourceFiles()
125
- .map((sf) => getOrgSourceFile(sf))
126
- .filterExists());
127
- for (const sf of sourceFileSet) {
128
- if (!inScope(sf.fileName))
129
- continue;
130
- const normFile = PathUtils.norm(sf.fileName);
131
- collectDeps(sf, normFile);
132
- }
133
- return {
134
- allDepMap,
135
- sourceFileSet,
136
- messages,
137
- };
138
- }
139
- }
140
- //# sourceMappingURL=sd-ts-dependency-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sd-ts-dependency-analyzer.js","sourceRoot":"","sources":["../../src/ts-compiler/sd-ts-dependency-analyzer.ts"],"names":[],"mappings":"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"}
package/src/index.ts DELETED
@@ -1,34 +0,0 @@
1
- export * from "./entry/sd-cli-ai-command";
2
- export * from "./entry/sd-cli-cordova";
3
- export * from "./entry/sd-cli-electron";
4
- export * from "./entry/sd-cli-local-update";
5
- export * from "./entry/sd-cli-postinstall";
6
- export * from "./entry/sd-cli-project";
7
- export * from "./pkg-builders/client/sd-cli-ng-routes.file-generator";
8
- export * from "./pkg-builders/client/sd-client.build-runner";
9
- export * from "./pkg-builders/client/sd-ng.bundler-context";
10
- export * from "./pkg-builders/client/sd-ng.bundler";
11
- export * from "./pkg-builders/client/sd-ng.plugin-creator";
12
- export * from "./pkg-builders/lib/sd-cli-db-context.file-generator";
13
- export * from "./pkg-builders/lib/sd-cli-index.file-generator";
14
- export * from "./pkg-builders/lib/sd-js-lib.build-runner";
15
- export * from "./pkg-builders/lib/sd-ts-lib.build-runner";
16
- export * from "./pkg-builders/lib/sd-ts-lib.builder";
17
- export * from "./pkg-builders/sd-multi.build-runner";
18
- export * from "./pkg-builders/server/sd-server.build-runner";
19
- export * from "./pkg-builders/server/sd-server.bundler";
20
- export * from "./pkg-builders/server/sd-server.plugin-creator";
21
- import "./sd-cli";
22
- export * from "./ts-compiler/sd-ts-compiler";
23
- export * from "./ts-compiler/sd-ts-dependency-analyzer";
24
- export * from "./types/build-plugin.types";
25
- export * from "./types/build-runner.types";
26
- export * from "./types/build.types";
27
- export * from "./types/common-configs.types";
28
- export * from "./types/config.types";
29
- export * from "./types/ts-compiler.types";
30
- export * from "./types/worker.types";
31
- export * from "./utils/sd-cli-convert-message.utils";
32
- export * from "./utils/sd-cli-performance-time";
33
- import "./workers/build-runner.worker";
34
- import "./workers/server.worker";
@@ -1,176 +0,0 @@
1
- import * as ts from "typescript";
2
- import { PathUtils, TNormPath } from "@simplysm/sd-core-node";
3
- import { ISdBuildMessage } from "../types/build.types";
4
- import * as module from "node:module";
5
- import path from "path";
6
-
7
- export class SdTsDependencyAnalyzer {
8
- static analyze(
9
- program: ts.Program,
10
- compilerHost: ts.CompilerHost,
11
- scopePaths: TNormPath[],
12
- ) {
13
- const compilerOpts = program.getCompilerOptions();
14
- const allDepMap = new Map<TNormPath, Set<TNormPath>>();
15
- const visited = new Set<TNormPath>();
16
- const messages: ISdBuildMessage[] = [];
17
-
18
- const getOrgSourceFile = (sf: ts.SourceFile) => {
19
- if (sf.fileName.endsWith(".ngtypecheck.ts")) {
20
- const orgFileName = sf.fileName.slice(0, -15) + ".ts";
21
- return program.getSourceFile(orgFileName);
22
- }
23
-
24
- return sf;
25
- };
26
-
27
- const inScope = (filePath: string): boolean => {
28
- return scopePaths.some((scope) => PathUtils.isChildPath(filePath, scope));
29
- };
30
-
31
- const resolveModule = (text: string, base: string): {
32
- resolvedFileName: string,
33
- isFallback: boolean
34
- } | undefined => {
35
- const res = ts.resolveModuleName(text, base, compilerOpts, compilerHost);
36
- if (res.resolvedModule) {
37
- return { resolvedFileName: res.resolvedModule.resolvedFileName, isFallback: false };
38
- }
39
-
40
- const absPath = path.resolve(path.dirname(base), text);
41
- if (compilerHost.fileExists(absPath)) {
42
- return { resolvedFileName: absPath, isFallback: true };
43
- }
44
-
45
- return undefined;
46
- };
47
-
48
- const error = (sf: ts.SourceFile, node: ts.Node, msg: string) => {
49
- try {
50
- const pos = ts.getLineAndCharacterOfPosition(sf, node.getStart());
51
- messages.push({
52
- filePath: PathUtils.norm(sf.fileName),
53
- line: pos.line,
54
- char: pos.character,
55
- code: undefined,
56
- severity: "error",
57
- message: msg,
58
- type: "deps",
59
- });
60
- }
61
- catch {
62
- messages.push({
63
- filePath: PathUtils.norm(sf.fileName),
64
- line: 0,
65
- char: 0,
66
- code: undefined,
67
- severity: "error",
68
- message: `${msg} (pos unknown)`,
69
- type: "deps",
70
- });
71
- }
72
- };
73
-
74
- const collectDeps = (sf: ts.SourceFile, fromFile: TNormPath) => {
75
- if (allDepMap.has(fromFile)) return;
76
- const deps = new Set<TNormPath>();
77
-
78
- const pushDep = (raw: string, node: ts.Node) => {
79
- if (module.builtinModules.includes(raw.replace(/^node:/, ""))) return;
80
-
81
- const resolved = resolveModule(raw, sf.fileName);
82
- if (!resolved) {
83
- error(sf, node, `파일 "${sf.fileName}"에서 "${raw}" 모듈을 해석할 수 없습니다.`);
84
- return;
85
- }
86
-
87
- if (!inScope(resolved.resolvedFileName)) return;
88
-
89
- const norm = PathUtils.norm(resolved.resolvedFileName);
90
- deps.add(norm);
91
-
92
- if (!visited.has(norm) && !resolved.isFallback) {
93
- visited.add(norm);
94
- const targetSf = program.getSourceFile(norm);
95
- if (!targetSf) {
96
- error(
97
- sf,
98
- node,
99
- `모듈 "${raw}"은(는) "${resolved}" 파일로 해석되었으나, 해당 파일의 ts.SourceFile이 없습니다.`,
100
- );
101
- return;
102
- }
103
-
104
- collectDeps(targetSf, norm);
105
- }
106
- };
107
-
108
- const visit = (node: ts.Node) => {
109
- if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {
110
- const spec = node.moduleSpecifier;
111
- if (spec && ts.isStringLiteral(spec)) pushDep(spec.text, node);
112
- }
113
- else if (
114
- ts.isCallExpression(node) &&
115
- node.expression.kind === ts.SyntaxKind.ImportKeyword &&
116
- ts.isStringLiteral(node.arguments[0])
117
- ) {
118
- pushDep(node.arguments[0].text, node);
119
- }
120
- else if (
121
- ts.isCallExpression(node) &&
122
- ts.isIdentifier(node.expression) &&
123
- node.expression.text === "require" &&
124
- node.arguments.length === 1 &&
125
- ts.isStringLiteral(node.arguments[0])
126
- ) {
127
- pushDep(node.arguments[0].text, node);
128
- }
129
- else if (
130
- ts.isCallExpression(node) &&
131
- ts.isPropertyAccessExpression(node.expression) &&
132
- ts.isIdentifier(node.expression.expression) &&
133
- node.expression.expression.text === "require" &&
134
- node.expression.name.text === "resolve" &&
135
- node.arguments.length === 1 &&
136
- ts.isStringLiteral(node.arguments[0])
137
- ) {
138
- pushDep(node.arguments[0].text, node);
139
- }
140
- else if (
141
- ts.isCallExpression(node) &&
142
- ts.isPropertyAccessExpression(node.expression) &&
143
- ts.isMetaProperty(node.expression.expression) &&
144
- node.expression.expression.keywordToken === ts.SyntaxKind.ImportKeyword &&
145
- node.expression.name.text === "meta" &&
146
- node.arguments.length === 1 &&
147
- ts.isStringLiteral(node.arguments[0])
148
- ) {
149
- pushDep(node.arguments[0].text, node);
150
- }
151
- ts.forEachChild(node, visit);
152
- };
153
-
154
- ts.forEachChild(sf, visit);
155
- allDepMap.set(fromFile, deps);
156
- };
157
-
158
- const sourceFileSet = new Set(
159
- program.getSourceFiles()
160
- .map((sf) => getOrgSourceFile(sf))
161
- .filterExists()
162
- );
163
-
164
- for (const sf of sourceFileSet) {
165
- if (!inScope(sf.fileName)) continue;
166
- const normFile = PathUtils.norm(sf.fileName);
167
- collectDeps(sf, normFile);
168
- }
169
-
170
- return {
171
- allDepMap,
172
- sourceFileSet,
173
- messages,
174
- };
175
- }
176
- }