@simplysm/sd-cli 7.0.54 → 7.0.62

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 (42) hide show
  1. package/dist/SdCliBuildResultError.mjs +8 -0
  2. package/dist/builder/SdCliJsLibBuilder.mjs +2 -2
  3. package/dist/builder/SdCliServerBuilder.mjs +7 -4
  4. package/dist/builder/SdCliTsLibBuilder.mjs +25 -2
  5. package/dist/entry-points/SdCliIndexFileGenerator.mjs +4 -4
  6. package/dist/entry-points/SdCliLocalUpdate.mjs +2 -2
  7. package/dist/entry-points/SdCliWorkspace.mjs +7 -4
  8. package/dist/index.mjs +28 -0
  9. package/dist/ng-tools/NgModuleGenerator.mjs +278 -0
  10. package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +331 -0
  11. package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +171 -0
  12. package/dist/ng-tools/babel/SdCliBbUtil.mjs +14 -0
  13. package/dist/ng-tools/babel/TSdCliBbNgMetadata.mjs +169 -0
  14. package/dist/ng-tools/babel/TSdCliBbTypeMetadata.mjs +127 -0
  15. package/dist/ng-tools/commons.mjs +2 -0
  16. package/dist/ng-tools/typescript/SdCliTsFileMetadata.mjs +325 -0
  17. package/dist/ng-tools/typescript/SdCliTsRootMetadata.mjs +28 -0
  18. package/dist/utils/SdCliBuildResultUtil.mjs +3 -3
  19. package/dist/utils/SdCliNpmConfigUtil.mjs +3 -3
  20. package/lib/ts-node-esm-paths.mjs +2 -2
  21. package/package.json +11 -7
  22. package/src/SdCliBuildResultError.ts +9 -0
  23. package/src/builder/SdCliJsLibBuilder.ts +1 -1
  24. package/src/builder/SdCliServerBuilder.ts +6 -3
  25. package/src/builder/SdCliTsLibBuilder.ts +29 -1
  26. package/src/entry-points/SdCliIndexFileGenerator.ts +3 -3
  27. package/src/entry-points/SdCliLocalUpdate.ts +1 -1
  28. package/src/entry-points/SdCliWorkspace.ts +7 -4
  29. package/src/index.ts +27 -0
  30. package/src/ng-tools/NgModuleGenerator.ts +361 -0
  31. package/src/ng-tools/babel/SdCliBbFileMetadata.ts +372 -0
  32. package/src/ng-tools/babel/SdCliBbRootMetadata.ts +207 -0
  33. package/src/ng-tools/babel/SdCliBbUtil.ts +15 -0
  34. package/src/ng-tools/babel/TSdCliBbNgMetadata.ts +220 -0
  35. package/src/ng-tools/babel/TSdCliBbTypeMetadata.ts +177 -0
  36. package/src/ng-tools/commons.ts +3 -0
  37. package/src/ng-tools/typescript/SdCliTsFileMetadata.ts +384 -0
  38. package/src/ng-tools/typescript/SdCliTsRootMetadata.ts +32 -0
  39. package/src/utils/SdCliBuildResultUtil.ts +2 -2
  40. package/src/utils/SdCliNpmConfigUtil.ts +2 -2
  41. package/tsconfig-build.json +2 -1
  42. package/tsconfig.json +2 -1
@@ -0,0 +1,325 @@
1
+ import { FsUtil } from "@simplysm/sd-core-node";
2
+ import ts from "typescript";
3
+ import { NeverEntryError } from "@simplysm/sd-core-common";
4
+ import path from "path";
5
+ export class SdCliTsFileMetadata {
6
+ constructor(filePath) {
7
+ this.filePath = filePath;
8
+ const fileContent = FsUtil.readFile(filePath);
9
+ this._sourceFile = ts.createSourceFile(filePath, fileContent, ts.ScriptTarget.ES2017);
10
+ }
11
+ get directExportClasses() {
12
+ if (this._directExportClassesCache)
13
+ return this._directExportClassesCache;
14
+ const result = [];
15
+ this._sourceFile.forEachChild((node) => {
16
+ if (!node.modifiers || !node.modifiers.some((item) => item.kind === ts.SyntaxKind.ExportKeyword))
17
+ return;
18
+ if (!ts.isClassDeclaration(node))
19
+ return;
20
+ if (node.name === undefined) {
21
+ throw new NeverEntryError();
22
+ }
23
+ result.push({ exportedName: node.name.text, target: new SdCliTsClassMetadata(this, node) });
24
+ });
25
+ this._directExportClassesCache = result;
26
+ return result;
27
+ }
28
+ get imports() {
29
+ const result = [];
30
+ ts.forEachChild(this._sourceFile, (node) => {
31
+ if (ts.isImportDeclaration(node)) {
32
+ if (ts.isStringLiteral(node.moduleSpecifier)) {
33
+ if (node.importClause) {
34
+ if (node.moduleSpecifier.text.includes(".")) {
35
+ const moduleFilePath = path.resolve(path.dirname(this.filePath), node.moduleSpecifier.text);
36
+ if (node.importClause.namedBindings) {
37
+ if (ts.isNamedImports(node.importClause.namedBindings)) {
38
+ for (const el of node.importClause.namedBindings.elements) {
39
+ result.push({
40
+ filePath: moduleFilePath,
41
+ name: el.name.text,
42
+ __TDeclRef__: "__TDeclRef__"
43
+ });
44
+ }
45
+ }
46
+ else {
47
+ throw new NeverEntryError();
48
+ }
49
+ }
50
+ else {
51
+ result.push({
52
+ filePath: moduleFilePath,
53
+ name: "default",
54
+ __TDeclRef__: "__TDeclRef__"
55
+ });
56
+ }
57
+ }
58
+ else {
59
+ const moduleName = node.moduleSpecifier.text;
60
+ if (node.importClause.namedBindings) {
61
+ if (ts.isNamedImports(node.importClause.namedBindings)) {
62
+ for (const el of node.importClause.namedBindings.elements) {
63
+ result.push({
64
+ moduleName,
65
+ name: el.propertyName?.text ?? el.name.text,
66
+ __TDeclRef__: "__TDeclRef__"
67
+ });
68
+ }
69
+ }
70
+ else {
71
+ const nsUseList = this._findNamespaceUse(node.importClause.namedBindings.name.text);
72
+ for (const nsUse of nsUseList) {
73
+ result.push({
74
+ moduleName,
75
+ name: nsUse,
76
+ __TDeclRef__: "__TDeclRef__"
77
+ });
78
+ }
79
+ }
80
+ }
81
+ else if (node.importClause.name) {
82
+ const nsUseList = this._findNamespaceUse(node.importClause.name.text);
83
+ for (const nsUse of nsUseList) {
84
+ result.push({
85
+ moduleName: moduleName,
86
+ name: nsUse,
87
+ __TDeclRef__: "__TDeclRef__"
88
+ });
89
+ }
90
+ }
91
+ else {
92
+ throw new NeverEntryError();
93
+ }
94
+ }
95
+ }
96
+ else {
97
+ // 무시
98
+ }
99
+ }
100
+ else {
101
+ throw new NeverEntryError();
102
+ }
103
+ }
104
+ else if (ts.isExportDeclaration(node)) {
105
+ if (node.exportClause &&
106
+ ts.isNamedExports(node.exportClause) &&
107
+ node.moduleSpecifier &&
108
+ ts.isStringLiteral(node.moduleSpecifier)) {
109
+ if (node.moduleSpecifier.text.includes(".")) {
110
+ const moduleFilePath = path.resolve(path.dirname(this.filePath), node.moduleSpecifier.text);
111
+ for (const el of node.exportClause.elements) {
112
+ if (el.propertyName && el.name.text !== el.propertyName.text) {
113
+ throw new NeverEntryError();
114
+ }
115
+ result.push({
116
+ filePath: moduleFilePath,
117
+ name: el.name.text,
118
+ __TDeclRef__: "__TDeclRef__"
119
+ });
120
+ }
121
+ }
122
+ else {
123
+ throw new NeverEntryError();
124
+ }
125
+ }
126
+ else {
127
+ throw new NeverEntryError();
128
+ }
129
+ }
130
+ });
131
+ return result;
132
+ }
133
+ _findNamespaceUse(localName) {
134
+ const fn = (parent) => {
135
+ const result = [];
136
+ ts.forEachChild(parent, (node) => {
137
+ if (ts.isPropertyAccessExpression(node)) {
138
+ if (ts.isIdentifier(node.expression) &&
139
+ node.expression.text === localName &&
140
+ ts.isIdentifier(node.name)) {
141
+ result.push(node.name.text);
142
+ }
143
+ }
144
+ else {
145
+ result.push(...fn(node));
146
+ }
147
+ });
148
+ return result;
149
+ };
150
+ return fn(this._sourceFile);
151
+ }
152
+ getMetaFromNode(node) {
153
+ if (ts.isClassDeclaration(node)) {
154
+ return new SdCliTsClassMetadata(this, node);
155
+ }
156
+ else if (ts.isStringLiteral(node)) {
157
+ return node.text;
158
+ }
159
+ else if (ts.isNoSubstitutionTemplateLiteral(node)) {
160
+ return node.text;
161
+ }
162
+ else if (node.kind === ts.SyntaxKind.NullKeyword) {
163
+ return null;
164
+ }
165
+ throw new NeverEntryError();
166
+ }
167
+ }
168
+ export class SdCliTsClassMetadata {
169
+ constructor(_fileMeta, _node) {
170
+ this._fileMeta = _fileMeta;
171
+ this._node = _node;
172
+ }
173
+ get ngDecl() {
174
+ if (this._ngDeclCache !== undefined)
175
+ return this._ngDeclCache;
176
+ if (!this._node.decorators)
177
+ return undefined;
178
+ for (const deco of this._node.decorators) {
179
+ if (!ts.isCallExpression(deco.expression))
180
+ continue;
181
+ if (!ts.isIdentifier(deco.expression.expression)) {
182
+ throw new NeverEntryError();
183
+ }
184
+ if (deco.expression.expression.text === "Injectable") {
185
+ this._ngDeclCache = new SdCliTsNgInjectableMetadata(this._fileMeta, deco);
186
+ return this._ngDeclCache;
187
+ }
188
+ else if (deco.expression.expression.text === "Directive") {
189
+ this._ngDeclCache = new SdCliTsNgDirectiveMetadata(this._fileMeta, deco);
190
+ return this._ngDeclCache;
191
+ }
192
+ else if (deco.expression.expression.text === "Component") {
193
+ this._ngDeclCache = new SdCliTsNgComponentMetadata(this._fileMeta, deco);
194
+ return this._ngDeclCache;
195
+ }
196
+ else if (deco.expression.expression.text === "Pipe") {
197
+ this._ngDeclCache = new SdCliTsNgPipeMetadata(this._fileMeta, deco);
198
+ return this._ngDeclCache;
199
+ }
200
+ }
201
+ return undefined;
202
+ }
203
+ }
204
+ export class SdCliTsObjectMetadata {
205
+ constructor(_fileMeta, _node) {
206
+ this._fileMeta = _fileMeta;
207
+ this._node = _node;
208
+ this._getPropValueCache = new Map();
209
+ }
210
+ getPropValue(propName) {
211
+ if (this._getPropValueCache.has(propName)) {
212
+ return this._getPropValueCache.get(propName);
213
+ }
214
+ const prop = this._node.properties.single((item) => (ts.isPropertyAssignment(item) &&
215
+ ts.isIdentifier(item.name) &&
216
+ item.name.text === propName));
217
+ if (!prop) {
218
+ this._getPropValueCache.set(propName, undefined);
219
+ return undefined;
220
+ }
221
+ const result = this._fileMeta.getMetaFromNode(prop.initializer);
222
+ this._getPropValueCache.set(propName, result);
223
+ return result;
224
+ }
225
+ }
226
+ export class SdCliTsNgInjectableMetadata {
227
+ constructor(_fileMeta, _node) {
228
+ this._fileMeta = _fileMeta;
229
+ this._node = _node;
230
+ }
231
+ get providedIn() {
232
+ if (this._providedInCache !== undefined)
233
+ return this._providedInCache;
234
+ if (!ts.isCallExpression(this._node.expression))
235
+ throw new NeverEntryError();
236
+ if (this._node.expression.arguments.length > 0 && ts.isObjectLiteralExpression(this._node.expression.arguments[0])) {
237
+ const decoArg = new SdCliTsObjectMetadata(this._fileMeta, this._node.expression.arguments[0]);
238
+ const decoArgSelectorVal = decoArg.getPropValue("providedIn");
239
+ if (typeof decoArgSelectorVal === "string") {
240
+ this._providedInCache = decoArgSelectorVal;
241
+ return decoArgSelectorVal;
242
+ }
243
+ }
244
+ return undefined;
245
+ }
246
+ }
247
+ export class SdCliTsNgDirectiveMetadata {
248
+ constructor(_fileMeta, _node) {
249
+ this._fileMeta = _fileMeta;
250
+ this._node = _node;
251
+ }
252
+ get selector() {
253
+ if (this._selectorCache !== undefined)
254
+ return this._selectorCache;
255
+ if (!ts.isCallExpression(this._node.expression))
256
+ throw new NeverEntryError();
257
+ if (this._node.expression.arguments.length > 0 && ts.isObjectLiteralExpression(this._node.expression.arguments[0])) {
258
+ const decoArg = new SdCliTsObjectMetadata(this._fileMeta, this._node.expression.arguments[0]);
259
+ const decoArgSelectorVal = decoArg.getPropValue("selector");
260
+ if (typeof decoArgSelectorVal === "string") {
261
+ this._selectorCache = decoArgSelectorVal;
262
+ return decoArgSelectorVal;
263
+ }
264
+ }
265
+ throw new NeverEntryError();
266
+ }
267
+ }
268
+ export class SdCliTsNgComponentMetadata {
269
+ constructor(_fileMeta, _node) {
270
+ this._fileMeta = _fileMeta;
271
+ this._node = _node;
272
+ }
273
+ get selector() {
274
+ if (this._selectorCache !== undefined)
275
+ return this._selectorCache;
276
+ if (!ts.isCallExpression(this._node.expression))
277
+ throw new NeverEntryError();
278
+ if (this._node.expression.arguments.length > 0 && ts.isObjectLiteralExpression(this._node.expression.arguments[0])) {
279
+ const decoArg = new SdCliTsObjectMetadata(this._fileMeta, this._node.expression.arguments[0]);
280
+ const decoArgSelectorVal = decoArg.getPropValue("selector");
281
+ if (typeof decoArgSelectorVal === "string") {
282
+ this._selectorCache = decoArgSelectorVal;
283
+ return decoArgSelectorVal;
284
+ }
285
+ }
286
+ throw new NeverEntryError();
287
+ }
288
+ get template() {
289
+ if (this._templateCache !== undefined)
290
+ return this._templateCache;
291
+ if (!ts.isCallExpression(this._node.expression))
292
+ throw new NeverEntryError();
293
+ if (this._node.expression.arguments.length > 0 && ts.isObjectLiteralExpression(this._node.expression.arguments[0])) {
294
+ const decoArg = new SdCliTsObjectMetadata(this._fileMeta, this._node.expression.arguments[0]);
295
+ const decoArgSelectorVal = decoArg.getPropValue("template");
296
+ if (typeof decoArgSelectorVal === "string") {
297
+ this._templateCache = decoArgSelectorVal;
298
+ return decoArgSelectorVal;
299
+ }
300
+ }
301
+ throw new NeverEntryError();
302
+ }
303
+ }
304
+ export class SdCliTsNgPipeMetadata {
305
+ constructor(_fileMeta, _node) {
306
+ this._fileMeta = _fileMeta;
307
+ this._node = _node;
308
+ }
309
+ get pipeName() {
310
+ if (this._pipeNameCache !== undefined)
311
+ return this._pipeNameCache;
312
+ if (!ts.isCallExpression(this._node.expression))
313
+ throw new NeverEntryError();
314
+ if (this._node.expression.arguments.length > 0 && ts.isObjectLiteralExpression(this._node.expression.arguments[0])) {
315
+ const decoArg = new SdCliTsObjectMetadata(this._fileMeta, this._node.expression.arguments[0]);
316
+ const decoArgSelectorVal = decoArg.getPropValue("name");
317
+ if (typeof decoArgSelectorVal === "string") {
318
+ this._pipeNameCache = decoArgSelectorVal;
319
+ return decoArgSelectorVal;
320
+ }
321
+ }
322
+ throw new NeverEntryError();
323
+ }
324
+ }
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlUc0ZpbGVNZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZy10b29scy90eXBlc2NyaXB0L1NkQ2xpVHNGaWxlTWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE1BQU0sT0FBTyxtQkFBbUI7SUFHOUIsWUFBbUMsUUFBZ0I7UUFBaEIsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNqRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBSUQsSUFBVyxtQkFBbUI7UUFDNUIsSUFBSSxJQUFJLENBQUMseUJBQXlCO1lBQUUsT0FBTyxJQUFJLENBQUMseUJBQXlCLENBQUM7UUFFMUUsTUFBTSxNQUFNLEdBQTZELEVBQUUsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7Z0JBQUUsT0FBTztZQUN6RyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElB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
@@ -0,0 +1,28 @@
1
+ import path from "path";
2
+ import ts from "typescript";
3
+ import { FsUtil } from "@simplysm/sd-core-node";
4
+ import { SdCliTsFileMetadata } from "./SdCliTsFileMetadata";
5
+ export class SdCliTsRootMetadata {
6
+ constructor(_packagePath) {
7
+ this._packagePath = _packagePath;
8
+ this._fileMetaCache = new Map();
9
+ }
10
+ removeCaches(filePaths) {
11
+ for (const filePath of filePaths) {
12
+ this._fileMetaCache.delete(filePath);
13
+ }
14
+ }
15
+ getFileMetas() {
16
+ const tsconfigPath = path.resolve(this._packagePath, "tsconfig-build.json");
17
+ const tsconfig = FsUtil.readJson(tsconfigPath);
18
+ const parsedTsconfig = ts.parseJsonConfigFileContent(tsconfig, ts.sys, this._packagePath, tsconfig.angularCompilerOptions);
19
+ const result = [];
20
+ for (const fileName of parsedTsconfig.fileNames) {
21
+ const filePath = path.resolve(fileName);
22
+ const fileMeta = this._fileMetaCache.getOrCreate(filePath, () => new SdCliTsFileMetadata(filePath));
23
+ result.push(fileMeta);
24
+ }
25
+ return result;
26
+ }
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlUc1Jvb3RNZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZy10b29scy90eXBlc2NyaXB0L1NkQ2xpVHNSb290TWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixZQUFvQyxZQUFvQjtRQUFwQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUZ2QyxtQkFBYyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO0lBR3pFLENBQUM7SUFFTSxZQUFZLENBQUMsU0FBbUI7UUFDckMsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTNILE1BQU0sTUFBTSxHQUEwQixFQUFFLENBQUM7UUFDekMsS0FBSyxNQUFNLFFBQVEsSUFBSSxjQUFjLENBQUMsU0FBUyxFQUFFO1lBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIn0=
@@ -1,6 +1,6 @@
1
1
  import ts from "typescript";
2
- import * as os from "os";
3
- import * as path from "path";
2
+ import os from "os";
3
+ import path from "path";
4
4
  export class SdCliBuildResultUtil {
5
5
  static convertFromTsDiag(diag) {
6
6
  const severity = diag.category === ts.DiagnosticCategory.Error ? "error"
@@ -57,4 +57,4 @@ export class SdCliBuildResultUtil {
57
57
  return str;
58
58
  }
59
59
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCdWlsZFJlc3VsdFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU2RDbGlCdWlsZFJlc3VsdFV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBSTdCLE1BQU0sT0FBTyxvQkFBb0I7SUFDeEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQW1CO1FBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUMzRCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFaEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzFFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENB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
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCdWlsZFJlc3VsdFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvU2RDbGlCdWlsZFJlc3VsdFV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFJeEIsTUFBTSxPQUFPLG9CQUFvQjtJQUN4QixNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBbUI7UUFDakQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQzNELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVoQyxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFHMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIs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
@@ -3,13 +3,13 @@ export class SdCliNpmConfigUtil {
3
3
  return {
4
4
  defaults: [
5
5
  ...Object.keys(npmConfig.dependencies ?? {}),
6
- ...Object.keys(npmConfig.peerDependencies ?? {}).filter((item) => !npmConfig.peerDependenciesMeta?.[item].optional)
6
+ ...Object.keys(npmConfig.peerDependencies ?? {}).filter((item) => !npmConfig.peerDependenciesMeta?.[item]?.optional)
7
7
  ].distinct(),
8
8
  optionals: [
9
9
  ...Object.keys(npmConfig.optionalDependencies ?? {}),
10
- ...Object.keys(npmConfig.peerDependencies ?? {}).filter((item) => npmConfig.peerDependenciesMeta?.[item].optional)
10
+ ...Object.keys(npmConfig.peerDependencies ?? {}).filter((item) => npmConfig.peerDependenciesMeta?.[item]?.optional)
11
11
  ].distinct()
12
12
  };
13
13
  }
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlOcG1Db25maWdVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1NkQ2xpTnBtQ29uZmlnVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBcUI7UUFDakQsT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDUixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQzVDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQzthQUNwSCxDQUFDLFFBQVEsRUFBRTtZQUNaLFNBQVMsRUFBRTtnQkFDVCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztnQkFDcEQsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQzthQUNuSCxDQUFDLFFBQVEsRUFBRTtTQUNiLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlOcG1Db25maWdVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1NkQ2xpTnBtQ29uZmlnVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3RCLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBcUI7UUFDakQsT0FBTztZQUNMLFFBQVEsRUFBRTtnQkFDUixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQzVDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQzthQUNySCxDQUFDLFFBQVEsRUFBRTtZQUNaLFNBQVMsRUFBRTtnQkFDVCxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztnQkFDcEQsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQzthQUNwSCxDQUFDLFFBQVEsRUFBRTtTQUNiLENBQUM7SUFDSixDQUFDO0NBQ0YifQ==
@@ -1,5 +1,5 @@
1
1
  import { resolve as resolveTs } from "ts-node/esm";
2
- import * as tsConfigPaths from "tsconfig-paths";
2
+ import tsConfigPaths from "tsconfig-paths";
3
3
  import { pathToFileURL } from "url";
4
4
 
5
5
  const { absoluteBaseUrl, paths } = tsConfigPaths.loadConfig();
@@ -12,4 +12,4 @@ export function resolve(specifier, ctx, defaultResolve) {
12
12
  : resolveTs(specifier, ctx, defaultResolve);
13
13
  }
14
14
 
15
- export { getFormat, load, transformSource } from "ts-node/esm";
15
+ export { getFormat, load, transformSource } from "ts-node/esm";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "7.0.54",
3
+ "version": "7.0.62",
4
4
  "description": "심플리즘 패키지 - CLI",
5
5
  "author": "김석래",
6
6
  "repository": {
@@ -44,19 +44,23 @@
44
44
  "sass-loader": "^12.4.0",
45
45
  "connect": "^3.7.0",
46
46
  "node-polyfill-webpack-plugin": "^1.1.4",
47
- "chokidar": "^3.5.3"
47
+ "chokidar": "^3.5.3",
48
+ "@babel/parser": "^7.17.0",
49
+ "@babel/types": "^7.17.0",
50
+ "jsdom": "^19.0.0"
48
51
  },
49
52
  "devDependencies": {
50
53
  "@types/semver": "^7.3.9",
51
54
  "@types/yargs": "^17.0.8",
52
55
  "@types/webpack-hot-middleware": "^2.25.5",
53
56
  "@types/connect": "^3.4.35",
54
- "@types/source-map-support": "^0.5.4"
57
+ "@types/source-map-support": "^0.5.4",
58
+ "@types/jsdom": "^16.2.14"
55
59
  },
56
60
  "peerDependencies": {
57
- "@simplysm/sd-core-common": "7.0.54",
58
- "@simplysm/sd-core-node": "7.0.54",
59
- "@simplysm/sd-service-common": "7.0.54",
60
- "@simplysm/sd-service-server": "7.0.54"
61
+ "@simplysm/sd-core-common": "7.0.62",
62
+ "@simplysm/sd-core-node": "7.0.62",
63
+ "@simplysm/sd-service-common": "7.0.62",
64
+ "@simplysm/sd-service-server": "7.0.62"
61
65
  }
62
66
  }
@@ -0,0 +1,9 @@
1
+ import { SdError } from "@simplysm/sd-core-common";
2
+ import { ISdCliPackageBuildResult } from "./commons";
3
+ import { SdCliBuildResultUtil } from "./utils/SdCliBuildResultUtil";
4
+
5
+ export class SdCliBuildResultError extends SdError {
6
+ public constructor(buildResult: ISdCliPackageBuildResult) {
7
+ super(SdCliBuildResultUtil.getMessage(buildResult));
8
+ }
9
+ }
@@ -1,7 +1,7 @@
1
1
  import { ISdCliPackageBuildResult } from "../commons";
2
2
  import { EventEmitter } from "events";
3
3
  import { FsUtil, Logger, SdFsWatcher } from "@simplysm/sd-core-node";
4
- import * as path from "path";
4
+ import path from "path";
5
5
  import { SdCliPackageLinter } from "../build-tool/SdCliPackageLinter";
6
6
 
7
7
  export class SdCliJsLibBuilder extends EventEmitter {
@@ -287,9 +287,7 @@ export class SdCliServerBuilder extends EventEmitter {
287
287
  managedPaths: internalModuleCachePaths
288
288
  }
289
289
  } : {},
290
- node: {
291
- __dirname: true
292
- },
290
+ node: false,
293
291
  optimization: {
294
292
  minimizer: watch ? [] : [
295
293
  new TerserPlugin({
@@ -315,6 +313,11 @@ export class SdCliServerBuilder extends EventEmitter {
315
313
  },
316
314
  module: {
317
315
  strictExportPresence: true,
316
+ parser: {
317
+ javascript: {
318
+ importMeta: false
319
+ }
320
+ },
318
321
  rules: [
319
322
  {
320
323
  test: /\.[cm]?[tj]sx?$/,
@@ -2,7 +2,7 @@ import { INpmConfig, ISdCliPackageBuildResult } from "../commons";
2
2
  import { EventEmitter } from "events";
3
3
  import ts from "typescript";
4
4
  import { FsUtil, Logger, PathUtil, SdFsWatcher } from "@simplysm/sd-core-node";
5
- import * as path from "path";
5
+ import path from "path";
6
6
  import { createHash } from "crypto";
7
7
  import { SdCliBuildResultUtil } from "../utils/SdCliBuildResultUtil";
8
8
  import { NgtscProgram } from "@angular/compiler-cli";
@@ -12,6 +12,7 @@ import { SdCliCacheCompilerHost } from "../build-tool/SdCliCacheCompilerHost";
12
12
  import { SdCliNgCacheCompilerHost } from "../build-tool/SdCliNgCacheCompilerHost";
13
13
  import { NgCompiler } from "@angular/compiler-cli/src/ngtsc/core";
14
14
  import { SdCliNpmConfigUtil } from "../utils/SdCliNpmConfigUtil";
15
+ import { NgModuleGenerator } from "../ng-tools/NgModuleGenerator";
15
16
 
16
17
  export class SdCliTsLibBuilder extends EventEmitter {
17
18
  private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
@@ -26,6 +27,7 @@ export class SdCliTsLibBuilder extends EventEmitter {
26
27
  private _program?: ts.Program;
27
28
  private _ngProgram?: NgtscProgram;
28
29
  private _builder?: ts.EmitAndSemanticDiagnosticsBuilderProgram;
30
+ private _ngModuleGenerator?: NgModuleGenerator;
29
31
 
30
32
  private readonly _tsconfigFilePath: string;
31
33
  private readonly _parsedTsconfig: ts.ParsedCommandLine;
@@ -61,6 +63,26 @@ export class SdCliTsLibBuilder extends EventEmitter {
61
63
  // DIST 비우기
62
64
  await FsUtil.removeAsync(this._parsedTsconfig.options.outDir!);
63
65
 
66
+ if (this._isAngular) {
67
+ // NgModule 생성기 초기화
68
+ this._ngModuleGenerator = new NgModuleGenerator(this._rootPath, [
69
+ "controls",
70
+ "directives",
71
+ "guards",
72
+ "modals",
73
+ "providers",
74
+ "pages",
75
+ "print-templates",
76
+ "toasts"
77
+ ]);
78
+
79
+ // NgModule 타겟 디렉토리 삭제
80
+ await this._ngModuleGenerator.clearModulesAsync();
81
+
82
+ // NgModule 생성
83
+ await this._ngModuleGenerator.runAsync();
84
+ }
85
+
64
86
  // 프로그램 리로드
65
87
  const buildPack = this._createSdBuildPack(this._parsedTsconfig);
66
88
 
@@ -78,6 +100,12 @@ export class SdCliTsLibBuilder extends EventEmitter {
78
100
  this._fileCache.delete(PathUtil.posix(changeFilePath));
79
101
  }
80
102
 
103
+ if (this._isAngular) {
104
+ // NgModule 생성
105
+ this._ngModuleGenerator!.removeCaches(changeFilePaths);
106
+ await this._ngModuleGenerator!.runAsync();
107
+ }
108
+
81
109
  const watchBuildResults: ISdCliPackageBuildResult[] = [];
82
110
 
83
111
  // 빌드
@@ -1,8 +1,8 @@
1
1
  import { ITsconfig } from "../commons";
2
- import * as path from "path";
2
+ import path from "path";
3
3
  import { FsUtil, PathUtil } from "@simplysm/sd-core-node";
4
- import * as os from "os";
5
- import * as chokidar from "chokidar";
4
+ import os from "os";
5
+ import chokidar from "chokidar";
6
6
 
7
7
  export class SdCliIndexFileGenerator {
8
8
  private readonly _indexFilePath = path.resolve(this.rootPath, "src/index.ts");
@@ -1,6 +1,6 @@
1
1
  import { SdCliConfigUtil } from "../utils/SdCliConfigUtil";
2
2
  import { FsUtil, Logger, PathUtil, SdFsWatcher } from "@simplysm/sd-core-node";
3
- import * as path from "path";
3
+ import path from "path";
4
4
 
5
5
  export class SdCliLocalUpdate {
6
6
  private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
@@ -109,7 +109,10 @@ export class SdCliWorkspace {
109
109
 
110
110
  this._logger.log(`서버(${pkg.name}) 재시작...`);
111
111
  try {
112
- const serverInfo = this._serverInfoMap.getOrCreate(path.basename(pkg.rootPath), { middlewares: [], clientInfos: [] });
112
+ const serverInfo = this._serverInfoMap.getOrCreate(path.basename(pkg.rootPath), {
113
+ middlewares: [],
114
+ clientInfos: []
115
+ });
113
116
  if (serverInfo.server) {
114
117
  await serverInfo.server.closeAsync();
115
118
  delete serverInfo.server;
@@ -202,11 +205,11 @@ export class SdCliWorkspace {
202
205
  this._logger.debug("프로젝트 및 패키지 버전 설정...");
203
206
  await this._upgradeVersionAsync(pkgs);
204
207
 
205
- this._logger.debug("노드패키지 업데이트...");
206
- await new SdCliNpm(this._rootPath).updateAsync();
207
-
208
208
  // 빌드
209
209
  if (!opt.noBuild) {
210
+ this._logger.debug("노드패키지 업데이트...");
211
+ await new SdCliNpm(this._rootPath).updateAsync();
212
+
210
213
  this._logger.debug("빌드를 시작합니다...");
211
214
  await this._buildPkgsAsync(pkgs);
212
215
  }