@simplysm/sd-cli 7.0.65 → 7.0.66

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/SdCliBuildResultError.d.ts +5 -0
  2. package/dist/bin/sd-cli.d.ts +2 -0
  3. package/dist/bin/sd-cli.mjs +3 -3
  4. package/dist/build-tool/SdCliCacheCompilerHost.d.ts +10 -0
  5. package/dist/build-tool/SdCliCordova.d.ts +16 -0
  6. package/dist/build-tool/SdCliCordova.mjs +171 -0
  7. package/dist/build-tool/SdCliIndexFileGenerator.d.ts +13 -0
  8. package/dist/{entry-points → build-tool}/SdCliIndexFileGenerator.mjs +4 -3
  9. package/dist/build-tool/SdCliNgCacheCompilerHost.d.ts +11 -0
  10. package/dist/build-tool/SdCliPackageLinter.d.ts +8 -0
  11. package/dist/build-tool/SdCliPackageLinter.mjs +19 -2
  12. package/dist/builder/SdCliClientBuilder.d.ts +23 -0
  13. package/dist/builder/SdCliClientBuilder.mjs +68 -6
  14. package/dist/builder/SdCliJsLibBuilder.d.ts +14 -0
  15. package/dist/builder/SdCliServerBuilder.d.ts +25 -0
  16. package/dist/builder/SdCliServerBuilder.mjs +11 -13
  17. package/dist/builder/SdCliTsLibBuilder.d.ts +34 -0
  18. package/dist/builder/SdCliTsLibBuilder.mjs +83 -36
  19. package/dist/commons.d.ts +85 -0
  20. package/dist/entry-points/SdCliLocalUpdate.d.ts +13 -0
  21. package/dist/entry-points/SdCliNpm.d.ts +6 -0
  22. package/dist/entry-points/SdCliPrepare.d.ts +5 -0
  23. package/dist/entry-points/SdCliWorkspace.d.ts +28 -0
  24. package/dist/entry-points/SdCliWorkspace.mjs +12 -16
  25. package/dist/index.d.ts +29 -0
  26. package/dist/index.mjs +5 -3
  27. package/dist/ng-tools/SdCliNgModuleGenerator.d.ts +26 -0
  28. package/dist/ng-tools/SdCliNgModuleGenerator.mjs +404 -0
  29. package/dist/ng-tools/babel/SdCliBbFileMetadata.d.ts +23 -0
  30. package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +187 -36
  31. package/dist/ng-tools/babel/SdCliBbRootMetadata.d.ts +22 -0
  32. package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +10 -7
  33. package/dist/ng-tools/babel/SdCliBbUtil.d.ts +5 -0
  34. package/dist/ng-tools/babel/SdCliBbUtil.mjs +2 -2
  35. package/dist/ng-tools/babel/TSdCliBbNgMetadata.d.ts +42 -0
  36. package/dist/ng-tools/babel/TSdCliBbNgMetadata.mjs +107 -76
  37. package/dist/ng-tools/babel/TSdCliBbTypeMetadata.d.ts +44 -0
  38. package/dist/ng-tools/commons.d.ts +9 -0
  39. package/dist/ng-tools/typescript/SdCliTsFileMetadata.d.ts +61 -0
  40. package/dist/ng-tools/typescript/SdCliTsFileMetadata.mjs +13 -12
  41. package/dist/ng-tools/typescript/SdCliTsRootMetadata.d.ts +8 -0
  42. package/dist/ng-tools/typescript/SdCliTsUtil.d.ts +5 -0
  43. package/dist/ng-tools/typescript/SdCliTsUtil.mjs +28 -0
  44. package/dist/packages/SdCliPackage.d.ts +23 -0
  45. package/dist/packages/SdCliPackage.mjs +2 -3
  46. package/dist/utils/SdCliBuildResultUtil.d.ts +9 -0
  47. package/dist/utils/SdCliConfigUtil.d.ts +7 -0
  48. package/dist/utils/SdCliNpmConfigUtil.d.ts +7 -0
  49. package/package.json +11 -6
  50. package/src/bin/sd-cli.ts +2 -2
  51. package/src/build-tool/SdCliCordova.ts +219 -0
  52. package/src/{entry-points → build-tool}/SdCliIndexFileGenerator.ts +3 -2
  53. package/src/build-tool/SdCliPackageLinter.ts +18 -2
  54. package/src/builder/SdCliClientBuilder.ts +83 -5
  55. package/src/builder/SdCliServerBuilder.ts +10 -12
  56. package/src/builder/SdCliTsLibBuilder.ts +100 -44
  57. package/src/commons.ts +24 -0
  58. package/src/entry-points/SdCliWorkspace.ts +14 -17
  59. package/src/index.ts +4 -2
  60. package/src/ng-tools/{NgModuleGenerator.ts → SdCliNgModuleGenerator.ts} +241 -64
  61. package/src/ng-tools/babel/SdCliBbFileMetadata.ts +234 -38
  62. package/src/ng-tools/babel/SdCliBbRootMetadata.ts +10 -6
  63. package/src/ng-tools/babel/SdCliBbUtil.ts +1 -1
  64. package/src/ng-tools/babel/TSdCliBbNgMetadata.ts +36 -22
  65. package/src/ng-tools/commons.ts +1 -1
  66. package/src/ng-tools/typescript/SdCliTsFileMetadata.ts +13 -12
  67. package/src/ng-tools/typescript/SdCliTsUtil.ts +29 -0
  68. package/src/packages/SdCliPackage.ts +1 -2
  69. package/tsconfig-build.json +1 -1
  70. package/dist/ng-tools/NgModuleGenerator.mjs +0 -278
@@ -0,0 +1,26 @@
1
+ export declare class SdCliNgModuleGenerator {
2
+ private readonly _srcDirRelPaths;
3
+ private readonly _routeOpts;
4
+ private readonly _bbMeta;
5
+ private readonly _tsMeta;
6
+ private readonly _srcPath;
7
+ private readonly _modulesPath;
8
+ private readonly _fileWriterCache;
9
+ constructor(packagePath: string, _srcDirRelPaths: string[], _routeOpts: {
10
+ glob: string;
11
+ fileEndsWith: string;
12
+ rootClassName: string;
13
+ } | undefined);
14
+ removeCaches(changedFilePaths: string[]): void;
15
+ runAsync(): Promise<void>;
16
+ private _findBbMetasFromMeta;
17
+ private _getBbNgModuleDefs;
18
+ private _getTsGenNgModulePreset;
19
+ private _getGenNgModuleDefs;
20
+ private _getGenNgRoutingModuleDefsAsync;
21
+ private _getGenNgRoutingModuleDefChildrenAsync;
22
+ private _getGenNgRoutingModuleFiles;
23
+ private _getGenNgModuleFiles;
24
+ private _writeFilesAsync;
25
+ private _getImportModuleName;
26
+ }
@@ -0,0 +1,404 @@
1
+ import { SdCliTsRootMetadata } from "./typescript/SdCliTsRootMetadata";
2
+ import { SdCliBbRootMetadata } from "./babel/SdCliBbRootMetadata";
3
+ import { SdCliBbClassMetadata, SdCliBbObjectMetadata } from "./babel/TSdCliBbTypeMetadata";
4
+ import { SdCliBbNgComponentMetadata, SdCliBbNgDirectiveMetadata, SdCliBbNgModuleMetadata, SdCliBbNgPipeMetadata } from "./babel/TSdCliBbNgMetadata";
5
+ import { NeverEntryError, StringUtil } from "@simplysm/sd-core-common";
6
+ import { SdCliTsNgInjectableMetadata } from "./typescript/SdCliTsFileMetadata";
7
+ import path from "path";
8
+ import { JSDOM } from "jsdom";
9
+ import { FsUtil, PathUtil } from "@simplysm/sd-core-node";
10
+ import os from "os";
11
+ // TODO: 에러 메시지 처리
12
+ // TODO: forRoot에 있는 Provider 처리??
13
+ export class SdCliNgModuleGenerator {
14
+ constructor(packagePath, _srcDirRelPaths, _routeOpts) {
15
+ this._srcDirRelPaths = _srcDirRelPaths;
16
+ this._routeOpts = _routeOpts;
17
+ this._fileWriterCache = new Map();
18
+ this._srcPath = path.resolve(packagePath, "src");
19
+ this._modulesPath = path.resolve(packagePath, "src", "_modules");
20
+ this._bbMeta = new SdCliBbRootMetadata(packagePath);
21
+ this._tsMeta = new SdCliTsRootMetadata(packagePath);
22
+ const glob = FsUtil.glob(path.resolve(this._modulesPath, "**", "*.ts"));
23
+ for (const currFilePath of glob) {
24
+ const content = FsUtil.readFile(currFilePath);
25
+ this._fileWriterCache.set(currFilePath, content);
26
+ }
27
+ }
28
+ removeCaches(changedFilePaths) {
29
+ this._bbMeta.removeCaches(changedFilePaths);
30
+ this._tsMeta.removeCaches(changedFilePaths);
31
+ for (const changedFilePath of changedFilePaths) {
32
+ if (this._fileWriterCache.has(changedFilePath) && !FsUtil.exists(changedFilePath)) {
33
+ this._fileWriterCache.delete(changedFilePath);
34
+ }
35
+ }
36
+ }
37
+ async runAsync() {
38
+ const bbNgModules = this._getBbNgModuleDefs();
39
+ const tsPreset = this._getTsGenNgModulePreset();
40
+ const genNgRoutingModules = await this._getGenNgRoutingModuleDefsAsync();
41
+ const genNgModules = this._getGenNgModuleDefs(bbNgModules, tsPreset.modules, tsPreset.sources);
42
+ const files = [
43
+ ...this._getGenNgRoutingModuleFiles(genNgRoutingModules),
44
+ ...this._getGenNgModuleFiles(genNgModules)
45
+ ];
46
+ await this._writeFilesAsync(files);
47
+ }
48
+ _findBbMetasFromMeta(srcMeta) {
49
+ const metaTmp = typeof srcMeta !== "string" && "__TSdCliMetaRef__" in srcMeta ? this._bbMeta.findMeta(srcMeta) : srcMeta;
50
+ return metaTmp instanceof Array ? metaTmp : [metaTmp];
51
+ }
52
+ _getBbNgModuleDefs() {
53
+ const entryRecord = this._bbMeta.getEntryFileMetaRecord();
54
+ const result = [];
55
+ for (const moduleName of Object.keys(entryRecord)) {
56
+ const fileMeta = entryRecord[moduleName];
57
+ for (const exp of fileMeta.exports) {
58
+ const metas = this._findBbMetasFromMeta(exp.target);
59
+ for (const meta of metas) {
60
+ if (meta instanceof SdCliBbClassMetadata) {
61
+ if (meta.ngDecl instanceof SdCliBbNgModuleMetadata) {
62
+ const ngDecl = meta.ngDecl;
63
+ const resultItem = {
64
+ moduleName,
65
+ name: exp.exportedName === "*" ? meta.name : exp.exportedName,
66
+ providers: [],
67
+ exports: [],
68
+ selectors: [],
69
+ pipeNames: []
70
+ };
71
+ for (const modProv of ngDecl.def.providers) {
72
+ const modProvMetas = this._findBbMetasFromMeta(modProv);
73
+ if (modProvMetas.length === 0) {
74
+ throw new NeverEntryError();
75
+ }
76
+ for (const modProvMeta of modProvMetas) {
77
+ if (modProvMeta instanceof SdCliBbClassMetadata) {
78
+ const ref = this._bbMeta.findExportRef({
79
+ filePath: modProvMeta.filePath,
80
+ name: modProvMeta.name
81
+ });
82
+ if (ref) {
83
+ resultItem.providers.push(ref);
84
+ }
85
+ }
86
+ else if (modProvMeta instanceof SdCliBbObjectMetadata) {
87
+ // 무시
88
+ }
89
+ else {
90
+ throw new NeverEntryError();
91
+ }
92
+ }
93
+ }
94
+ for (const modExp of ngDecl.def.exports) {
95
+ const modExpMetas = this._findBbMetasFromMeta(modExp);
96
+ if (modExpMetas.length === 0) {
97
+ throw new NeverEntryError();
98
+ }
99
+ for (const modExpMeta of modExpMetas) {
100
+ if (modExpMeta instanceof SdCliBbClassMetadata) {
101
+ const ref = this._bbMeta.findExportRef({
102
+ filePath: modExpMeta.filePath,
103
+ name: modExpMeta.name
104
+ });
105
+ if (ref) {
106
+ resultItem.exports.push(ref);
107
+ }
108
+ if (modExpMeta.ngDecl instanceof SdCliBbNgDirectiveMetadata) {
109
+ resultItem.selectors.push(modExpMeta.ngDecl.selector);
110
+ }
111
+ else if (modExpMeta.ngDecl instanceof SdCliBbNgComponentMetadata) {
112
+ resultItem.selectors.push(modExpMeta.ngDecl.selector);
113
+ }
114
+ else if (modExpMeta.ngDecl instanceof SdCliBbNgPipeMetadata) {
115
+ resultItem.pipeNames.push(modExpMeta.ngDecl.pipeName);
116
+ }
117
+ }
118
+ else {
119
+ throw new NeverEntryError();
120
+ }
121
+ }
122
+ }
123
+ result.push(resultItem);
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return result;
130
+ }
131
+ _getTsGenNgModulePreset() {
132
+ const fileMetas = this._tsMeta.getFileMetas();
133
+ const result = { modules: [], sources: [] };
134
+ for (const fileMeta of fileMetas) {
135
+ if (!this._srcDirRelPaths.some((item) => fileMeta.filePath.startsWith(path.resolve(this._srcPath, item)))) {
136
+ continue;
137
+ }
138
+ for (const cls of fileMeta.directExportClasses) {
139
+ if (cls.target.ngDecl) {
140
+ if (cls.target.ngDecl instanceof SdCliTsNgInjectableMetadata) {
141
+ if (cls.target.ngDecl.providedIn === "root") {
142
+ continue;
143
+ }
144
+ }
145
+ const moduleClassName = cls.exportedName + "Module";
146
+ const moduleFilePath = path.resolve(this._modulesPath, path.relative(this._srcPath, path.dirname(fileMeta.filePath)), moduleClassName);
147
+ result.sources.push({
148
+ filePath: fileMeta.filePath,
149
+ name: cls.exportedName,
150
+ module: {
151
+ filePath: moduleFilePath,
152
+ name: moduleClassName
153
+ },
154
+ imports: fileMeta.imports,
155
+ template: "template" in cls.target.ngDecl ? cls.target.ngDecl.template : undefined,
156
+ isProvider: cls.target.ngDecl instanceof SdCliTsNgInjectableMetadata
157
+ });
158
+ result.modules.push({
159
+ filePath: moduleFilePath,
160
+ name: moduleClassName,
161
+ source: {
162
+ filePath: fileMeta.filePath,
163
+ name: cls.exportedName
164
+ },
165
+ selector: "selector" in cls.target.ngDecl ? cls.target.ngDecl.selector : undefined,
166
+ pipeName: "pipeName" in cls.target.ngDecl ? cls.target.ngDecl.pipeName : undefined
167
+ });
168
+ }
169
+ }
170
+ }
171
+ return result;
172
+ }
173
+ _getGenNgModuleDefs(bbModules, presetModules, presetSources) {
174
+ const result = [];
175
+ for (const el of presetSources) {
176
+ const imports = [];
177
+ for (const imp of el.imports) {
178
+ if ("moduleName" in imp) {
179
+ for (const mod of bbModules) {
180
+ if (mod.exports.some((item) => item.moduleName === imp.moduleName && item.name === imp.name)) {
181
+ imports.push({ moduleName: mod.moduleName, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
182
+ }
183
+ if (mod.providers.some((item) => item.moduleName === imp.moduleName && item.name === imp.name)) {
184
+ imports.push({ moduleName: mod.moduleName, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
185
+ }
186
+ }
187
+ }
188
+ else {
189
+ for (const mod of presetModules) {
190
+ if (mod.source && mod.source.filePath === imp.filePath && mod.source.name === imp.name) {
191
+ imports.push({ filePath: mod.filePath, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
192
+ }
193
+ }
194
+ }
195
+ }
196
+ if (el.template !== undefined) {
197
+ const templateDOM = new JSDOM(el.template);
198
+ for (const mod of bbModules) {
199
+ for (const selector of mod.selectors) {
200
+ if (templateDOM.window.document.querySelector([
201
+ selector,
202
+ selector.replace(/\[/g, "[\\[").replace(/]/g, "\\]]"),
203
+ selector.replace(/\[/g, "[\\(").replace(/]/g, "\\)]")
204
+ ].join(", ")) != null) {
205
+ imports.push({ moduleName: mod.moduleName, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
206
+ }
207
+ }
208
+ for (const pipeName of mod.pipeNames) {
209
+ if (new RegExp("| *" + pipeName + "[^\\w]").test(el.template)) {
210
+ imports.push({ moduleName: mod.moduleName, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
211
+ }
212
+ }
213
+ }
214
+ for (const mod of presetModules) {
215
+ if (mod.selector !== undefined) {
216
+ if (templateDOM.window.document.querySelector([
217
+ mod.selector,
218
+ mod.selector.replace(/\[/g, "[\\[").replace(/]/g, "\\]]"),
219
+ mod.selector.replace(/\[/g, "[\\(").replace(/]/g, "\\)]")
220
+ ].join(", ")) != null) {
221
+ imports.push({ filePath: mod.filePath, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
222
+ }
223
+ }
224
+ if (mod.pipeName !== undefined) {
225
+ if (new RegExp("| *" + mod.pipeName + "[^\\w]").test(el.template)) {
226
+ imports.push({ filePath: mod.filePath, name: mod.name, __TSdCliMetaRef__: "__TSdCliMetaRef__" });
227
+ }
228
+ }
229
+ }
230
+ }
231
+ result.push({
232
+ filePath: el.module.filePath,
233
+ name: el.module.name,
234
+ imports: imports.distinct(),
235
+ exports: el.isProvider ? [] : [{ filePath: el.filePath, name: el.name }],
236
+ providers: el.isProvider ? [{ filePath: el.filePath, name: el.name }] : []
237
+ });
238
+ }
239
+ return result;
240
+ }
241
+ async _getGenNgRoutingModuleDefsAsync() {
242
+ if (this._routeOpts === undefined)
243
+ return [];
244
+ const result = [];
245
+ const filePaths = await FsUtil.globAsync(path.resolve(this._srcPath, this._routeOpts.glob));
246
+ for (const filePath of filePaths) {
247
+ const sourceClassName = path.basename(filePath, path.extname(filePath));
248
+ if (sourceClassName === this._routeOpts.rootClassName) {
249
+ const childDirName = StringUtil.toKebabCase(sourceClassName.slice(0, -this._routeOpts.fileEndsWith.length));
250
+ const childDirPath = path.resolve(path.dirname(filePath), childDirName);
251
+ result.push({
252
+ filePath: path.resolve(this._srcPath, "_routes"),
253
+ children: await this._getGenNgRoutingModuleDefChildrenAsync(childDirPath)
254
+ });
255
+ }
256
+ else {
257
+ const routingModuleClassName = sourceClassName + "RoutingModule";
258
+ const routingModuleFilePath = path.resolve(this._modulesPath, path.relative(this._srcPath, path.dirname(filePath)), routingModuleClassName);
259
+ const childDirName = StringUtil.toKebabCase(sourceClassName.slice(0, -this._routeOpts.fileEndsWith.length));
260
+ const childDirPath = path.resolve(path.dirname(filePath), childDirName);
261
+ result.push({
262
+ filePath: routingModuleFilePath,
263
+ name: routingModuleClassName,
264
+ component: { filePath: filePath.replace(/\.ts$/, ""), name: sourceClassName },
265
+ children: FsUtil.exists(childDirPath) ? await this._getGenNgRoutingModuleDefChildrenAsync(childDirPath) : undefined
266
+ });
267
+ }
268
+ }
269
+ return result;
270
+ }
271
+ async _getGenNgRoutingModuleDefChildrenAsync(rootPath) {
272
+ const result = [];
273
+ const childNames = await FsUtil.readdirAsync(rootPath);
274
+ for (const childName of childNames) {
275
+ if (!FsUtil.stat(path.resolve(rootPath, childName)).isDirectory()) { // 파일
276
+ const sourceFilePath = path.resolve(rootPath, childName);
277
+ const sourceClassName = path.basename(sourceFilePath, path.extname(childName));
278
+ const moduleClassName = sourceClassName + "Module";
279
+ const moduleFilePath = path.resolve(this._modulesPath, path.relative(this._srcPath, path.dirname(sourceFilePath)), moduleClassName);
280
+ result.push({
281
+ path: StringUtil.toKebabCase(childName.substring(0, childName.length - 7)),
282
+ target: { filePath: moduleFilePath, name: moduleClassName }
283
+ });
284
+ }
285
+ else if (!FsUtil.exists(path.resolve(rootPath, StringUtil.toPascalCase(childName) + this._routeOpts.fileEndsWith + ".ts"))) { // 파일없는 디렉토리
286
+ result.push({
287
+ path: childName,
288
+ children: await this._getGenNgRoutingModuleDefChildrenAsync(path.resolve(rootPath, childName))
289
+ });
290
+ }
291
+ }
292
+ return result;
293
+ }
294
+ _getGenNgRoutingModuleFiles(defs) {
295
+ const result = [];
296
+ for (const def of defs) {
297
+ const fn = (children) => {
298
+ let fnResult = "[\n";
299
+ for (const child of children) {
300
+ fnResult += " {\n";
301
+ fnResult += ` path: "${child.path}",\n`;
302
+ if ("target" in child) {
303
+ fnResult += ` loadChildren: async () => await import("${this._getImportModuleName(def.filePath, child.target.filePath)}").then((m) => m.${child.target.name})\n`;
304
+ }
305
+ else {
306
+ fnResult += ` children: ${fn(child.children).replace(/\n/g, "\n ")}\n`;
307
+ }
308
+ fnResult += " },\n";
309
+ }
310
+ fnResult = fnResult.slice(0, -2) + "\n";
311
+ fnResult += "]";
312
+ return fnResult;
313
+ };
314
+ const content = "component" in def ? `
315
+ import { NgModule } from "@angular/core";
316
+ import { RouterModule } from "@angular/router";
317
+ import { SdCanDeactivateGuard } from "@simplysm/sd-angular";
318
+ import { ${def.component.name} } from "${this._getImportModuleName(def.filePath, def.component.filePath)}";
319
+
320
+ @NgModule({
321
+ imports: [
322
+ RouterModule.forChild([
323
+ {
324
+ path: "",
325
+ component: ${def.component.name},
326
+ canDeactivate: [SdCanDeactivateGuard]${def.children ? `,
327
+ children: ${fn(def.children).replace(/\n/g, "\n ")}` : ""}
328
+ }
329
+ ])
330
+ ],
331
+ exports: [RouterModule]
332
+ })
333
+ export class ${def.name} {
334
+ }`.trim() : `
335
+ import { Routes } from "@angular/router";
336
+
337
+ export const routes: Routes = ${fn(def.children)};
338
+ `.trim();
339
+ result.push({ filePath: def.filePath + ".ts", content });
340
+ }
341
+ return result;
342
+ }
343
+ _getGenNgModuleFiles(mods) {
344
+ const result = [];
345
+ for (const mod of mods) {
346
+ const importMap = [...mod.imports, ...mod.exports, ...mod.providers]
347
+ .map((item) => ({
348
+ moduleName: "moduleName" in item ? item.moduleName : this._getImportModuleName(mod.filePath, item.filePath),
349
+ name: item.name
350
+ }))
351
+ .groupBy((item) => item.moduleName)
352
+ .toMap((item) => item.key, (item) => item.values.map((v) => v.name));
353
+ importMap.getOrCreate("@angular/core", []).push("NgModule");
354
+ const importTexts = [];
355
+ for (const moduleName of Array.from(importMap.keys()).orderBy()) {
356
+ const targetNames = importMap.get(moduleName).distinct();
357
+ if (targetNames.length === 0)
358
+ continue;
359
+ importTexts.push(`import { ${targetNames.join(", ")} } from "${moduleName}";`);
360
+ }
361
+ const moduleImportNames = mod.imports.map((item) => item.name);
362
+ if (this._routeOpts !== undefined
363
+ && mod.filePath.endsWith(this._routeOpts.fileEndsWith + "Module")
364
+ && mod.name !== this._routeOpts.rootClassName + "Module") {
365
+ const routingModuleName = mod.name.replace(/Module$/, "RoutingModule");
366
+ importTexts.push(`import { ${routingModuleName} } from "./${routingModuleName}";`);
367
+ moduleImportNames.push(routingModuleName);
368
+ }
369
+ const content = `
370
+ ${importTexts.join(os.EOL)}
371
+
372
+ @NgModule({
373
+ imports: [${moduleImportNames.orderBy().join(", ")}],
374
+ declarations: [${mod.exports.map((item) => item.name).distinct().orderBy().join(", ")}],
375
+ exports: [${mod.exports.map((item) => item.name).distinct().orderBy().join(", ")}],
376
+ providers: [${mod.providers.map((item) => item.name).distinct().orderBy().join(", ")}]
377
+ })
378
+ export class ${mod.name} {
379
+ }`.trim();
380
+ result.push({ filePath: mod.filePath + ".ts", content });
381
+ }
382
+ return result;
383
+ }
384
+ async _writeFilesAsync(files) {
385
+ for (const file of files) {
386
+ if (this._fileWriterCache.get(file.filePath) !== file.content) {
387
+ await FsUtil.writeFileAsync(file.filePath, file.content);
388
+ this._fileWriterCache.set(file.filePath, file.content);
389
+ }
390
+ }
391
+ const glob = await FsUtil.globAsync(path.resolve(this._modulesPath, "**", "*"));
392
+ for (const currFilePath of glob) {
393
+ if (!files.some((item) => item.filePath.startsWith(currFilePath))) {
394
+ await FsUtil.removeAsync(currFilePath);
395
+ this._fileWriterCache.delete(currFilePath);
396
+ }
397
+ }
398
+ }
399
+ _getImportModuleName(mainFilePath, importFilePath) {
400
+ const filePath = PathUtil.posix(path.relative(path.dirname(mainFilePath), importFilePath).replace(/\.ts$/, ""));
401
+ return filePath.startsWith(".") ? filePath : "./" + filePath;
402
+ }
403
+ }
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlOZ01vZHVsZUdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uZy10b29scy9TZENsaU5nTW9kdWxlR2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBb0IsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUVwQixrQkFBa0I7QUFDbEIsa0NBQWtDO0FBQ2xDLE1BQU0sT0FBTyxzQkFBc0I7SUFTakMsWUFBbUIsV0FBbUIsRUFDRixlQUF5QixFQUN6QixVQUlKO1FBTEksb0JBQWUsR0FBZixlQUFlLENBQVU7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FJZDtRQVJmLHFCQUFnQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBUzVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFlB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
@@ -0,0 +1,23 @@
1
+ import { Declaration, Expression, File, PatternLike, SpreadElement, Statement } from "@babel/types";
2
+ import { ParseResult } from "@babel/parser";
3
+ import { TSdCliBbMetadata } from "./SdCliBbRootMetadata";
4
+ import { SdCliBbObjectMetadata } from "./TSdCliBbTypeMetadata";
5
+ export declare class SdCliBbFileMetadata {
6
+ readonly filePath: string;
7
+ readonly ast: ParseResult<File>;
8
+ readonly rawMetas: Statement[];
9
+ constructor(filePath: string);
10
+ private _exportsCache?;
11
+ get exports(): {
12
+ exportedName: string;
13
+ target: TSdCliBbMetadata;
14
+ }[];
15
+ private readonly _findMetaFromOutsideCache;
16
+ findMetaFromOutside(name: string): TSdCliBbMetadata | undefined;
17
+ private readonly _findMetaFromInsideCache;
18
+ private _findMetaFromInside;
19
+ getMetaFromRaw(rawMeta: Declaration | Expression | PatternLike | SpreadElement): TSdCliBbMetadata;
20
+ private readonly _getNgDecoArgCache;
21
+ getNgDecoArg(className: string): SdCliBbObjectMetadata;
22
+ getNgDecoPropValue(className: string, decoName: string, propName: string): TSdCliBbMetadata | undefined;
23
+ }