@simplysm/sd-cli 7.0.61 → 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.
- package/dist/SdCliBuildResultError.mjs +8 -0
- package/dist/builder/SdCliTsLibBuilder.mjs +24 -1
- package/dist/index.mjs +28 -0
- package/dist/ng-tools/NgModuleGenerator.mjs +278 -0
- package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +331 -0
- package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +171 -0
- package/dist/ng-tools/babel/SdCliBbUtil.mjs +14 -0
- package/dist/ng-tools/babel/TSdCliBbNgMetadata.mjs +169 -0
- package/dist/ng-tools/babel/TSdCliBbTypeMetadata.mjs +127 -0
- package/dist/ng-tools/commons.mjs +2 -0
- package/dist/ng-tools/typescript/SdCliTsFileMetadata.mjs +325 -0
- package/dist/ng-tools/typescript/SdCliTsRootMetadata.mjs +28 -0
- package/dist/utils/SdCliNpmConfigUtil.mjs +3 -3
- package/package.json +11 -7
- package/src/SdCliBuildResultError.ts +9 -0
- package/src/builder/SdCliTsLibBuilder.ts +28 -0
- package/src/index.ts +27 -0
- package/src/ng-tools/NgModuleGenerator.ts +361 -0
- package/src/ng-tools/babel/SdCliBbFileMetadata.ts +372 -0
- package/src/ng-tools/babel/SdCliBbRootMetadata.ts +207 -0
- package/src/ng-tools/babel/SdCliBbUtil.ts +15 -0
- package/src/ng-tools/babel/TSdCliBbNgMetadata.ts +220 -0
- package/src/ng-tools/babel/TSdCliBbTypeMetadata.ts +177 -0
- package/src/ng-tools/commons.ts +3 -0
- package/src/ng-tools/typescript/SdCliTsFileMetadata.ts +384 -0
- package/src/ng-tools/typescript/SdCliTsRootMetadata.ts +32 -0
- package/src/utils/SdCliNpmConfigUtil.ts +2 -2
- package/tsconfig-build.json +5 -1
- package/tsconfig.json +5 -1
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { isArrayExpression, isClassDeclaration, isExportDeclaration, isExportDefaultDeclaration, isExportNamedDeclaration, isExportSpecifier, isFunctionDeclaration, isIdentifier, isImportDeclaration, isImportSpecifier, isObjectExpression, isSpreadElement, isStringLiteral, isVariableDeclaration } from "@babel/types";
|
|
2
|
+
import babelParser from "@babel/parser";
|
|
3
|
+
import { FsUtil } from "@simplysm/sd-core-node";
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { SdCliBbArrayMetadata, SdCliBbClassMetadata, SdCliBbFunctionMetadata, SdCliBbObjectMetadata, SdCliBbVariableMetadata } from "./TSdCliBbTypeMetadata";
|
|
6
|
+
import { SdCliBbUtil } from "./SdCliBbUtil";
|
|
7
|
+
export class SdCliBbFileMetadata {
|
|
8
|
+
constructor(filePath) {
|
|
9
|
+
this.filePath = filePath;
|
|
10
|
+
this.rawMetas = [];
|
|
11
|
+
this._findMetaFromOutsideCache = new Map();
|
|
12
|
+
this._findMetaFromInsideCache = new Map();
|
|
13
|
+
let realFilePath;
|
|
14
|
+
for (const ext of ["", ".mjs", ".cjs", ".js"]) {
|
|
15
|
+
if (FsUtil.exists(filePath + ext) && !FsUtil.isDirectory(filePath + ext)) {
|
|
16
|
+
realFilePath = filePath + ext;
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (realFilePath === undefined) {
|
|
21
|
+
throw SdCliBbUtil.error("파일을 찾을 수 없습니다.", filePath);
|
|
22
|
+
}
|
|
23
|
+
const fileContent = FsUtil.readFile(realFilePath);
|
|
24
|
+
this.rawMetas = babelParser.parse(fileContent, { sourceType: "module" }).program.body;
|
|
25
|
+
}
|
|
26
|
+
get exports() {
|
|
27
|
+
if (this._exportsCache)
|
|
28
|
+
return this._exportsCache;
|
|
29
|
+
const result = [];
|
|
30
|
+
for (const rawMeta of this.rawMetas) {
|
|
31
|
+
if (!isExportDeclaration(rawMeta))
|
|
32
|
+
continue;
|
|
33
|
+
if (isExportNamedDeclaration(rawMeta)) {
|
|
34
|
+
for (const specifier of rawMeta.specifiers) {
|
|
35
|
+
if (isExportSpecifier(specifier)) {
|
|
36
|
+
const exportedName = isIdentifier(specifier.exported) ? specifier.exported.name : undefined;
|
|
37
|
+
if (exportedName === undefined) {
|
|
38
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
39
|
+
}
|
|
40
|
+
if (rawMeta.source) {
|
|
41
|
+
if (rawMeta.source.value.includes(".")) {
|
|
42
|
+
const moduleFilePath = path.resolve(path.dirname(this.filePath), rawMeta.source.value);
|
|
43
|
+
result.push({
|
|
44
|
+
exportedName,
|
|
45
|
+
target: {
|
|
46
|
+
filePath: moduleFilePath,
|
|
47
|
+
name: specifier.local.name,
|
|
48
|
+
__TDeclRef__: "__TDeclRef__"
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const moduleName = rawMeta.source.value;
|
|
54
|
+
result.push({
|
|
55
|
+
exportedName,
|
|
56
|
+
target: { moduleName, name: specifier.local.name, __TDeclRef__: "__TDeclRef__" }
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
result.push({
|
|
62
|
+
exportedName,
|
|
63
|
+
target: this._findMetaFromInside(specifier.local.name)
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (isExportDefaultDeclaration(rawMeta)) {
|
|
73
|
+
result.push({
|
|
74
|
+
exportedName: "default",
|
|
75
|
+
target: this.getMetaFromRaw(rawMeta.declaration)
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (rawMeta.source.value.includes(".")) {
|
|
80
|
+
const moduleFilePath = path.resolve(path.dirname(this.filePath), rawMeta.source.value);
|
|
81
|
+
result.push({
|
|
82
|
+
exportedName: "*",
|
|
83
|
+
target: {
|
|
84
|
+
filePath: moduleFilePath,
|
|
85
|
+
name: "*",
|
|
86
|
+
__TDeclRef__: "__TDeclRef__"
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this._exportsCache = result;
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
findMetaFromOutside(name) {
|
|
99
|
+
const cache = this._findMetaFromOutsideCache.get(name);
|
|
100
|
+
if (cache !== undefined)
|
|
101
|
+
return cache;
|
|
102
|
+
for (const rawMeta of this.rawMetas) {
|
|
103
|
+
if (isExportNamedDeclaration(rawMeta)) {
|
|
104
|
+
if (rawMeta.declaration) {
|
|
105
|
+
if (isVariableDeclaration(rawMeta.declaration)) {
|
|
106
|
+
for (const decl of rawMeta.declaration.declarations) {
|
|
107
|
+
if (isIdentifier(decl.id)) {
|
|
108
|
+
if (decl.id.name === name) {
|
|
109
|
+
const result = new SdCliBbVariableMetadata(this, decl);
|
|
110
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (isClassDeclaration(rawMeta.declaration)) {
|
|
120
|
+
if (rawMeta.declaration.id.name === name) {
|
|
121
|
+
const result = new SdCliBbClassMetadata(this, rawMeta.declaration);
|
|
122
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (isFunctionDeclaration(rawMeta.declaration)) {
|
|
127
|
+
if (rawMeta.declaration.id) {
|
|
128
|
+
if (rawMeta.declaration.id.name === name) {
|
|
129
|
+
const result = new SdCliBbFunctionMetadata(this, rawMeta.declaration);
|
|
130
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
for (const specifier of rawMeta.specifiers) {
|
|
144
|
+
if (isExportSpecifier(specifier)) {
|
|
145
|
+
const exportedName = isIdentifier(specifier.exported) ? specifier.exported.name : undefined;
|
|
146
|
+
if (exportedName === undefined) {
|
|
147
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
148
|
+
}
|
|
149
|
+
else if (exportedName === name) {
|
|
150
|
+
if (rawMeta.source) {
|
|
151
|
+
if (rawMeta.source.value.includes(".")) {
|
|
152
|
+
const moduleFilePath = path.resolve(path.dirname(this.filePath), rawMeta.source.value);
|
|
153
|
+
const result = {
|
|
154
|
+
filePath: moduleFilePath,
|
|
155
|
+
name: specifier.local.name,
|
|
156
|
+
__TDeclRef__: "__TDeclRef__"
|
|
157
|
+
};
|
|
158
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
const moduleName = rawMeta.source.value;
|
|
163
|
+
const result = {
|
|
164
|
+
moduleName,
|
|
165
|
+
name: specifier.local.name,
|
|
166
|
+
__TDeclRef__: "__TDeclRef__"
|
|
167
|
+
};
|
|
168
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const result = this._findMetaFromInside(specifier.local.name);
|
|
174
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (isExportDefaultDeclaration(rawMeta) && name === "default") {
|
|
183
|
+
const result = this.getMetaFromRaw(rawMeta.declaration);
|
|
184
|
+
if (Array.isArray(result)) {
|
|
185
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
186
|
+
}
|
|
187
|
+
this._findMetaFromOutsideCache.set(name, result);
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
throw SdCliBbUtil.error(`'${name}'에 대한 'export'를 찾을 수 없습니다.`, this.filePath);
|
|
192
|
+
}
|
|
193
|
+
_findMetaFromInside(localName) {
|
|
194
|
+
const cache = this._findMetaFromInsideCache.get(localName);
|
|
195
|
+
if (cache !== undefined)
|
|
196
|
+
return cache;
|
|
197
|
+
for (const rawMeta of this.rawMetas) {
|
|
198
|
+
if (isClassDeclaration(rawMeta) && rawMeta.id.name === localName) {
|
|
199
|
+
return new SdCliBbClassMetadata(this, rawMeta);
|
|
200
|
+
}
|
|
201
|
+
else if (isExportNamedDeclaration(rawMeta)) {
|
|
202
|
+
for (const specifier of rawMeta.specifiers) {
|
|
203
|
+
if (isExportSpecifier(specifier)) {
|
|
204
|
+
const exportedName = isIdentifier(specifier.exported) ? specifier.exported.name : undefined;
|
|
205
|
+
if (exportedName === undefined) {
|
|
206
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
207
|
+
}
|
|
208
|
+
else if (exportedName === localName) {
|
|
209
|
+
if (rawMeta.source) {
|
|
210
|
+
if (rawMeta.source.value.includes(".")) {
|
|
211
|
+
const moduleFilePath = path.resolve(path.dirname(this.filePath), rawMeta.source.value);
|
|
212
|
+
const result = {
|
|
213
|
+
filePath: moduleFilePath,
|
|
214
|
+
name: specifier.local.name,
|
|
215
|
+
__TDeclRef__: "__TDeclRef__"
|
|
216
|
+
};
|
|
217
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const moduleName = rawMeta.source.value;
|
|
222
|
+
const result = {
|
|
223
|
+
moduleName,
|
|
224
|
+
name: specifier.local.name,
|
|
225
|
+
__TDeclRef__: "__TDeclRef__"
|
|
226
|
+
};
|
|
227
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/*else if (isExportDefaultDeclaration(rawMeta) && localName === "default") {
|
|
236
|
+
const result = this.getMetaFromRaw(rawMeta.declaration);
|
|
237
|
+
if (Array.isArray(result)) {
|
|
238
|
+
throw new NeverEntryError();
|
|
239
|
+
}
|
|
240
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
241
|
+
return result;
|
|
242
|
+
}*/
|
|
243
|
+
else if (isImportDeclaration(rawMeta)) {
|
|
244
|
+
for (const specifier of rawMeta.specifiers) {
|
|
245
|
+
if (isImportSpecifier(specifier)) {
|
|
246
|
+
const impLocalName = isIdentifier(specifier.local) ? specifier.local.name : undefined;
|
|
247
|
+
if (impLocalName === undefined) {
|
|
248
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
249
|
+
}
|
|
250
|
+
else if (impLocalName === localName) {
|
|
251
|
+
if (isIdentifier(specifier.imported)) {
|
|
252
|
+
if (rawMeta.source.value.includes(".")) {
|
|
253
|
+
const moduleFilePath = path.resolve(path.dirname(this.filePath), rawMeta.source.value);
|
|
254
|
+
const result = {
|
|
255
|
+
filePath: moduleFilePath,
|
|
256
|
+
name: specifier.imported.name,
|
|
257
|
+
__TDeclRef__: "__TDeclRef__"
|
|
258
|
+
};
|
|
259
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const moduleName = rawMeta.source.value;
|
|
264
|
+
const result = {
|
|
265
|
+
moduleName,
|
|
266
|
+
name: specifier.imported.name,
|
|
267
|
+
__TDeclRef__: "__TDeclRef__"
|
|
268
|
+
};
|
|
269
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
else if (isVariableDeclaration(rawMeta)) {
|
|
281
|
+
for (const decl of rawMeta.declarations) {
|
|
282
|
+
if (isIdentifier(decl.id)) {
|
|
283
|
+
if (decl.id.name === localName) {
|
|
284
|
+
const result = new SdCliBbVariableMetadata(this, decl);
|
|
285
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else if (isFunctionDeclaration(rawMeta)) {
|
|
295
|
+
if (rawMeta.id) {
|
|
296
|
+
if (rawMeta.id.name === localName) {
|
|
297
|
+
const result = new SdCliBbFunctionMetadata(this, rawMeta);
|
|
298
|
+
this._findMetaFromInsideCache.set(localName, result);
|
|
299
|
+
return result;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
throw SdCliBbUtil.error(`'${localName}'에 대한 내부선언을 찾을 수 없습니다.`, this.filePath);
|
|
308
|
+
}
|
|
309
|
+
getMetaFromRaw(rawMeta) {
|
|
310
|
+
if (isIdentifier(rawMeta)) {
|
|
311
|
+
return this._findMetaFromInside(rawMeta.name);
|
|
312
|
+
}
|
|
313
|
+
else if (isClassDeclaration(rawMeta)) {
|
|
314
|
+
return new SdCliBbClassMetadata(this, rawMeta);
|
|
315
|
+
}
|
|
316
|
+
else if (isArrayExpression(rawMeta)) {
|
|
317
|
+
return new SdCliBbArrayMetadata(this, rawMeta);
|
|
318
|
+
}
|
|
319
|
+
else if (isObjectExpression(rawMeta)) {
|
|
320
|
+
return new SdCliBbObjectMetadata(this, rawMeta);
|
|
321
|
+
}
|
|
322
|
+
else if (isStringLiteral(rawMeta)) {
|
|
323
|
+
return rawMeta.value;
|
|
324
|
+
}
|
|
325
|
+
else if (isSpreadElement(rawMeta)) {
|
|
326
|
+
return this.getMetaFromRaw(rawMeta.argument);
|
|
327
|
+
}
|
|
328
|
+
throw SdCliBbUtil.error("예상치 못한 방식의 코드가 발견되었습니다.", this.filePath, rawMeta);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCYkZpbGVNZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZy10b29scy9iYWJlbC9TZENsaUJiRmlsZU1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixlQUFlLEVBQ2YscUJBQXFCLEVBSXRCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxNQUFNLE9BQU8sbUJBQW1CO0lBRzlCLFlBQW1DLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFGbkMsYUFBUSxHQUFnQixFQUFFLENBQUM7UUErRjFCLDhCQUF5QixHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO1FBbUdoRSw2QkFBd0IsR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztRQS9MOUUsSUFBSSxZQUFnQyxDQUFDO1FBQ3JDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtZQUM3QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMs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
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { SdCliBbFileMetadata } from "./SdCliBbFileMetadata";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { SdCliNpmConfigUtil } from "../../utils/SdCliNpmConfigUtil";
|
|
4
|
+
import { NeverEntryError, StringUtil } from "@simplysm/sd-core-common";
|
|
5
|
+
import { FsUtil, PathUtil } from "@simplysm/sd-core-node";
|
|
6
|
+
export class SdCliBbRootMetadata {
|
|
7
|
+
constructor(packagePath) {
|
|
8
|
+
this._fileMetaCache = new Map();
|
|
9
|
+
const allDepPaths = this._getAllDepPaths(packagePath);
|
|
10
|
+
this._entryMap = this._getEntryMap(allDepPaths);
|
|
11
|
+
// const ngDepPaths = this._getNgDepPaths(allDepPaths);
|
|
12
|
+
// this._entryMap = this._getEntryMap(ngDepPaths);
|
|
13
|
+
}
|
|
14
|
+
removeCaches(filePaths) {
|
|
15
|
+
for (const filePath of filePaths) {
|
|
16
|
+
this._fileMetaCache.delete(filePath);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
getEntryFileMetaRecord() {
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const moduleName of this._entryMap.keys()) {
|
|
22
|
+
const entryFilePath = this._entryMap.get(moduleName);
|
|
23
|
+
result[moduleName] = this._fileMetaCache.getOrCreate(entryFilePath, () => new SdCliBbFileMetadata(entryFilePath));
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
findMeta(ref) {
|
|
28
|
+
const filePath = "moduleName" in ref ? this._entryMap.get(ref.moduleName) : ref.filePath;
|
|
29
|
+
if (filePath === undefined) {
|
|
30
|
+
throw new NeverEntryError();
|
|
31
|
+
}
|
|
32
|
+
const fileMeta = this._fileMetaCache.getOrCreate(filePath, () => new SdCliBbFileMetadata(filePath));
|
|
33
|
+
if (ref.name === "*") {
|
|
34
|
+
const result = [];
|
|
35
|
+
for (const exp of fileMeta.exports) {
|
|
36
|
+
const meta = exp.target;
|
|
37
|
+
if (typeof meta !== "string" && "__TDeclRef__" in meta) {
|
|
38
|
+
const resultMeta = this.findMeta(meta);
|
|
39
|
+
if (resultMeta instanceof Array) {
|
|
40
|
+
result.push(...resultMeta);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
result.push(resultMeta);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
result.push(meta);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const meta = fileMeta.findMetaFromOutside(ref.name);
|
|
54
|
+
if (typeof meta !== "string" && "__TDeclRef__" in meta) {
|
|
55
|
+
return this.findMeta(meta);
|
|
56
|
+
}
|
|
57
|
+
return meta;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
findExportRef(localRef) {
|
|
61
|
+
const record = this.getEntryFileMetaRecord();
|
|
62
|
+
for (const moduleName of Object.keys(record)) {
|
|
63
|
+
const entryFileMeta = record[moduleName];
|
|
64
|
+
for (const exp of entryFileMeta.exports) {
|
|
65
|
+
if (typeof exp.target !== "string" &&
|
|
66
|
+
"filePath" in exp.target &&
|
|
67
|
+
exp.target.filePath === localRef.filePath) {
|
|
68
|
+
if (exp.target.name === "*") {
|
|
69
|
+
throw new NeverEntryError();
|
|
70
|
+
}
|
|
71
|
+
else if (exp.target.name === localRef.name) {
|
|
72
|
+
return { moduleName, name: exp.exportedName };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
_getAllDepPaths(packagePath) {
|
|
80
|
+
const loadedModuleNames = [];
|
|
81
|
+
const results = [];
|
|
82
|
+
const fn = (currPath) => {
|
|
83
|
+
const npmConfig = FsUtil.readJson(path.resolve(currPath, "package.json"));
|
|
84
|
+
const deps = SdCliNpmConfigUtil.getDependencies(npmConfig);
|
|
85
|
+
for (const moduleName of deps.defaults) {
|
|
86
|
+
if (loadedModuleNames.includes(moduleName))
|
|
87
|
+
continue;
|
|
88
|
+
loadedModuleNames.push(moduleName);
|
|
89
|
+
const modulePath = FsUtil.findAllParentChildDirPaths("node_modules/" + moduleName, currPath, process.cwd()).first();
|
|
90
|
+
if (StringUtil.isNullOrEmpty(modulePath)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
results.push(modulePath);
|
|
94
|
+
fn(modulePath);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
fn(packagePath);
|
|
98
|
+
return results;
|
|
99
|
+
}
|
|
100
|
+
// private _getNgDepPaths(allDepPaths: string[]): string[] {
|
|
101
|
+
// const results: string[] = [];
|
|
102
|
+
//
|
|
103
|
+
// for (const depPath of allDepPaths) {
|
|
104
|
+
// const npmConfig = FsUtil.readJson(path.resolve(depPath, "package.json")) as INpmConfig;
|
|
105
|
+
// const defaultDeps = SdCliNpmConfigUtil.getDependencies(npmConfig).defaults;
|
|
106
|
+
// if (npmConfig.name === "@angular/core" || defaultDeps.includes("@angular/core")) {
|
|
107
|
+
// results.push(depPath);
|
|
108
|
+
// }
|
|
109
|
+
// }
|
|
110
|
+
//
|
|
111
|
+
// return results;
|
|
112
|
+
// }
|
|
113
|
+
_getEntryMap(ngDepPaths) {
|
|
114
|
+
const entryMap = new Map();
|
|
115
|
+
for (const ngDepPath of ngDepPaths) {
|
|
116
|
+
const npmConfig = FsUtil.readJson(path.resolve(ngDepPath, "package.json"));
|
|
117
|
+
const entryFilePath = npmConfig["es2015"] ?? npmConfig["browser"] ?? npmConfig["module"] ?? npmConfig["main"] ?? npmConfig["default"];
|
|
118
|
+
if (entryFilePath !== undefined) {
|
|
119
|
+
entryMap.set(npmConfig.name, path.resolve(ngDepPath, entryFilePath));
|
|
120
|
+
}
|
|
121
|
+
if (npmConfig.exports) {
|
|
122
|
+
const exportKeys = Object.keys(npmConfig.exports);
|
|
123
|
+
for (const exportKey of exportKeys) {
|
|
124
|
+
if (exportKey.includes("/locales") ||
|
|
125
|
+
exportKey.endsWith("/package.json") ||
|
|
126
|
+
exportKey.endsWith("/testing") ||
|
|
127
|
+
exportKey.endsWith("/upgrade")) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const expEntryFilePath = npmConfig.exports[exportKey]["es2015"] ??
|
|
131
|
+
npmConfig.exports[exportKey]["browser"] ??
|
|
132
|
+
npmConfig.exports[exportKey]["module"] ??
|
|
133
|
+
npmConfig.exports[exportKey]["main"] ??
|
|
134
|
+
npmConfig.exports[exportKey]["default"];
|
|
135
|
+
if (expEntryFilePath !== undefined) {
|
|
136
|
+
const exportPath = path.resolve(ngDepPath, expEntryFilePath);
|
|
137
|
+
const exportResult = this._getGlobExportResult(PathUtil.posix(npmConfig.name, exportKey), exportPath);
|
|
138
|
+
for (const exportResultItem of exportResult) {
|
|
139
|
+
entryMap.set(exportResultItem.name, exportResultItem.target);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return entryMap;
|
|
146
|
+
}
|
|
147
|
+
_getGlobExportResult(globName, globTarget) {
|
|
148
|
+
if (globName.includes("*") && globTarget.includes("*")) {
|
|
149
|
+
const result = [];
|
|
150
|
+
const regexpText = globTarget.replace(/[\\/.*]/g, (item) => (item === "/" || item === "\\" ? "[\\\\/]"
|
|
151
|
+
: item === "." ? "\\."
|
|
152
|
+
: item === "*" ? "(.*)"
|
|
153
|
+
: item));
|
|
154
|
+
const targets = FsUtil.glob(globTarget);
|
|
155
|
+
for (const target of targets) {
|
|
156
|
+
const targetNameMatch = new RegExp(regexpText).exec(target);
|
|
157
|
+
if (!targetNameMatch || typeof targetNameMatch[1] === "undefined") {
|
|
158
|
+
throw new NeverEntryError();
|
|
159
|
+
}
|
|
160
|
+
const targetName = targetNameMatch[1];
|
|
161
|
+
const name = globName.replace("*", targetName);
|
|
162
|
+
result.push({ name, target });
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
return [{ name: globName, target: globTarget }];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCYlJvb3RNZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uZy10b29scy9iYWJlbC9TZENsaUJiUm9vdE1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUV4QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJMUQsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixZQUFtQixXQUFtQjtRQUZyQixtQkFBYyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBR3ZFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELHVEQUF1RDtRQUN2RCxrREFBa0Q7SUFDcEQsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUFtQjtRQUNyQyxLQUFLLE1BQU0sUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsTUFBTSxNQUFNLEdBQXdDLEVBQUUsQ0FBQztRQUN2RCxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENB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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SdCliBuildResultError } from "../../SdCliBuildResultError";
|
|
2
|
+
export class SdCliBbUtil {
|
|
3
|
+
static error(message, filePath, meta) {
|
|
4
|
+
return new SdCliBuildResultError({
|
|
5
|
+
filePath,
|
|
6
|
+
line: meta?.loc?.start.line,
|
|
7
|
+
char: meta?.loc?.start.column,
|
|
8
|
+
code: undefined,
|
|
9
|
+
severity: "error",
|
|
10
|
+
message: "예상치 못한 방식의 코드가 발견되었습니다."
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2RDbGlCYlV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmctdG9vbHMvYmFiZWwvU2RDbGlCYlV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEUsTUFBTSxPQUFPLFdBQVc7SUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLElBQVc7UUFDakUsT0FBTyxJQUFJLHFCQUFxQixDQUFDO1lBQy9CLFFBQVE7WUFDUixJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUMzQixJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUM3QixJQUFJLEVBQUUsU0FBUztZQUNmLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSx5QkFBeUI7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
|