@simplysm/sd-cli 12.13.37 → 12.13.39
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/pkg-builders/SdBuildRunnerBase.d.ts +14 -0
- package/dist/pkg-builders/SdBuildRunnerBase.js +23 -0
- package/dist/pkg-builders/SdBuildRunnerBase.js.map +1 -0
- package/dist/pkg-builders/SdProjectBuildRunner.js +18 -14
- package/dist/pkg-builders/SdProjectBuildRunner.js.map +1 -1
- package/dist/pkg-builders/client/SdClientBuildRunner.d.ts +1 -1
- package/dist/pkg-builders/client/SdClientBuildRunner.js +17 -36
- package/dist/pkg-builders/client/SdClientBuildRunner.js.map +1 -1
- package/dist/pkg-builders/client/SdNgBundler.d.ts +10 -16
- package/dist/pkg-builders/client/SdNgBundler.js +59 -54
- package/dist/pkg-builders/client/SdNgBundler.js.map +1 -1
- package/dist/pkg-builders/client/createSdNgPlugin.d.ts +2 -11
- package/dist/pkg-builders/client/createSdNgPlugin.js +16 -25
- package/dist/pkg-builders/client/createSdNgPlugin.js.map +1 -1
- package/dist/pkg-builders/lib/SdJsLibBuildRunner.d.ts +1 -1
- package/dist/pkg-builders/lib/SdJsLibBuildRunner.js +5 -5
- package/dist/pkg-builders/lib/SdJsLibBuildRunner.js.map +1 -1
- package/dist/pkg-builders/lib/SdTsLibBuildRunner.d.ts +1 -1
- package/dist/pkg-builders/lib/SdTsLibBuildRunner.js +6 -6
- package/dist/pkg-builders/lib/SdTsLibBuildRunner.js.map +1 -1
- package/dist/pkg-builders/lib/SdTsLibBuilder.d.ts +3 -3
- package/dist/pkg-builders/lib/SdTsLibBuilder.js +6 -15
- package/dist/pkg-builders/lib/SdTsLibBuilder.js.map +1 -1
- package/dist/pkg-builders/server/SdServerBuildRunner.d.ts +1 -1
- package/dist/pkg-builders/server/SdServerBuildRunner.js +25 -42
- package/dist/pkg-builders/server/SdServerBuildRunner.js.map +1 -1
- package/dist/pkg-builders/server/SdServerBundler.d.ts +4 -10
- package/dist/pkg-builders/server/SdServerBundler.js +15 -22
- package/dist/pkg-builders/server/SdServerBundler.js.map +1 -1
- package/dist/pkg-builders/server/createSdServerPlugin.d.ts +2 -11
- package/dist/pkg-builders/server/createSdServerPlugin.js +10 -19
- package/dist/pkg-builders/server/createSdServerPlugin.js.map +1 -1
- package/dist/sd-cli-entry.js +1 -1
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/ts-compiler/ScopePathSet.js.map +1 -0
- package/dist/ts-compiler/SdDepAnalyzer.d.ts +1 -1
- package/dist/ts-compiler/SdStyleBundler.d.ts +8 -5
- package/dist/ts-compiler/SdStyleBundler.js +30 -15
- package/dist/ts-compiler/SdStyleBundler.js.map +1 -1
- package/dist/ts-compiler/SdTsCompiler.d.ts +2 -1
- package/dist/ts-compiler/SdTsCompiler.js +68 -53
- package/dist/ts-compiler/SdTsCompiler.js.map +1 -1
- package/dist/types/build/ISdTsCompilerOptions.d.ts +6 -9
- package/dist/types/worker/ISdBuildRunnerWorkerType.d.ts +4 -7
- package/dist/workers/build-runner.worker.js +4 -5
- package/dist/workers/build-runner.worker.js.map +1 -1
- package/package.json +5 -5
- package/src/pkg-builders/SdBuildRunnerBase.ts +36 -0
- package/src/pkg-builders/SdProjectBuildRunner.ts +24 -16
- package/src/pkg-builders/client/SdClientBuildRunner.ts +25 -46
- package/src/pkg-builders/client/SdNgBundler.ts +69 -73
- package/src/pkg-builders/client/createSdNgPlugin.ts +21 -35
- package/src/pkg-builders/lib/SdJsLibBuildRunner.ts +5 -5
- package/src/pkg-builders/lib/SdTsLibBuildRunner.ts +9 -13
- package/src/pkg-builders/lib/SdTsLibBuilder.ts +7 -23
- package/src/pkg-builders/server/SdServerBuildRunner.ts +32 -50
- package/src/pkg-builders/server/SdServerBundler.ts +16 -32
- package/src/pkg-builders/server/createSdServerPlugin.ts +15 -29
- package/src/sd-cli-entry.ts +1 -1
- package/src/ts-compiler/SdDepAnalyzer.ts +1 -1
- package/src/ts-compiler/SdStyleBundler.ts +34 -15
- package/src/ts-compiler/SdTsCompiler.ts +75 -63
- package/src/types/build/ISdTsCompilerOptions.ts +6 -9
- package/src/types/worker/ISdBuildRunnerWorkerType.ts +4 -9
- package/src/workers/build-runner.worker.ts +7 -16
- package/dist/fix/convert-extends-sd-modal-base-to-interface.d.ts +0 -1
- package/dist/fix/convert-extends-sd-modal-base-to-interface.js +0 -289
- package/dist/fix/convert-extends-sd-modal-base-to-interface.js.map +0 -1
- package/dist/fix/convert-extends-sd-print-template-base-to-interface.d.ts +0 -1
- package/dist/fix/convert-extends-sd-print-template-base-to-interface.js +0 -179
- package/dist/fix/convert-extends-sd-print-template-base-to-interface.js.map +0 -1
- package/dist/fix/convert-flat-pages-to-flat-menus.d.ts +0 -1
- package/dist/fix/convert-flat-pages-to-flat-menus.js +0 -68
- package/dist/fix/convert-flat-pages-to-flat-menus.js.map +0 -1
- package/dist/fix/convert-get-menus-to-usable-menus.d.ts +0 -1
- package/dist/fix/convert-get-menus-to-usable-menus.js +0 -48
- package/dist/fix/convert-get-menus-to-usable-menus.js.map +0 -1
- package/dist/fix/convert-modal-show-params.d.ts +0 -1
- package/dist/fix/convert-modal-show-params.js +0 -29
- package/dist/fix/convert-modal-show-params.js.map +0 -1
- package/dist/fix/convert-print-params.d.ts +0 -1
- package/dist/fix/convert-print-params.js +0 -37
- package/dist/fix/convert-print-params.js.map +0 -1
- package/dist/fix/convert-sd-icon-to-fa-icon.d.ts +0 -1
- package/dist/fix/convert-sd-icon-to-fa-icon.js +0 -80
- package/dist/fix/convert-sd-icon-to-fa-icon.js.map +0 -1
- package/dist/fix/convert-sd-sheet-bindings-safety.d.ts +0 -1
- package/dist/fix/convert-sd-sheet-bindings-safety.js +0 -57
- package/dist/fix/convert-sd-sheet-bindings-safety.js.map +0 -1
- package/dist/fix/convert-select-modal-button-to-select-button.d.ts +0 -1
- package/dist/fix/convert-select-modal-button-to-select-button.js +0 -64
- package/dist/fix/convert-select-modal-button-to-select-button.js.map +0 -1
- package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.d.ts +0 -1
- package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.js +0 -38
- package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.js.map +0 -1
- package/dist/fix/convert-to-use-perms-signal.d.ts +0 -1
- package/dist/fix/convert-to-use-perms-signal.js +0 -99
- package/dist/fix/convert-to-use-perms-signal.js.map +0 -1
- package/dist/fix/core/remove-named-import.d.ts +0 -1
- package/dist/fix/core/remove-named-import.js +0 -14
- package/dist/fix/core/remove-named-import.js.map +0 -1
- package/dist/pkg-builders/commons/ScopePathSet.js.map +0 -1
- package/dist/pkg-builders/commons/SdBuildRunnerBase.d.ts +0 -20
- package/dist/pkg-builders/commons/SdBuildRunnerBase.js +0 -30
- package/dist/pkg-builders/commons/SdBuildRunnerBase.js.map +0 -1
- package/src/fix/convert-extends-sd-modal-base-to-interface.ts +0 -324
- package/src/fix/convert-extends-sd-print-template-base-to-interface.ts +0 -201
- package/src/fix/convert-flat-pages-to-flat-menus.ts +0 -83
- package/src/fix/convert-get-menus-to-usable-menus.ts +0 -60
- package/src/fix/convert-modal-show-params.ts +0 -37
- package/src/fix/convert-print-params.ts +0 -51
- package/src/fix/convert-sd-icon-to-fa-icon.ts +0 -95
- package/src/fix/convert-sd-sheet-bindings-safety.ts +0 -73
- package/src/fix/convert-select-modal-button-to-select-button.ts +0 -91
- package/src/fix/convert-setup-cumulate-selected-keys-to-object-param.ts +0 -44
- package/src/fix/convert-to-use-perms-signal.ts +0 -133
- package/src/fix/core/remove-named-import.ts +0 -14
- package/src/pkg-builders/commons/SdBuildRunnerBase.ts +0 -47
- /package/dist/{pkg-builders/commons → ts-compiler}/ScopePathSet.d.ts +0 -0
- /package/dist/{pkg-builders/commons → ts-compiler}/ScopePathSet.js +0 -0
- /package/src/{pkg-builders/commons → ts-compiler}/ScopePathSet.ts +0 -0
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { Node, SyntaxKind } from "ts-morph";
|
|
2
|
-
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
3
|
-
|
|
4
|
-
export default function convertModalShowParams() {
|
|
5
|
-
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
-
|
|
7
|
-
for (const sourceFile of sourceFiles) {
|
|
8
|
-
const callExprs = sourceFile
|
|
9
|
-
.getDescendantsOfKind(SyntaxKind.CallExpression)
|
|
10
|
-
.filter((callExpr) => {
|
|
11
|
-
const expr = callExpr.getExpression();
|
|
12
|
-
return (
|
|
13
|
-
Node.isPropertyAccessExpression(expr) &&
|
|
14
|
-
expr.getName() === "showAsync" &&
|
|
15
|
-
expr.getExpression().getText() === "this._sdModal"
|
|
16
|
-
);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
for (const callExpr of callExprs) {
|
|
20
|
-
const args = callExpr.getArguments();
|
|
21
|
-
if (args.length < 3) continue; // 최소 3개는 있어야 함
|
|
22
|
-
|
|
23
|
-
const typeText = args[0].getText();
|
|
24
|
-
const titleText = args[1].getText();
|
|
25
|
-
const inputsText = args[2]?.getText() ?? "{}";
|
|
26
|
-
|
|
27
|
-
const props = [`type: ${typeText}`, `title: ${titleText}`, `inputs: ${inputsText}`];
|
|
28
|
-
const objectLiteralText = `{\n ${props.join(",\n ")}\n}`;
|
|
29
|
-
|
|
30
|
-
const newArgs = [`${objectLiteralText}`, ...args.slice(3).map((arg) => arg.getText())].join(", ");
|
|
31
|
-
|
|
32
|
-
callExpr.replaceWithText(`this._sdModal.showAsync(${newArgs})`);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
sourceFile.saveSync();
|
|
36
|
-
}
|
|
37
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Node, SyntaxKind } from "ts-morph";
|
|
2
|
-
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
3
|
-
|
|
4
|
-
export default function convertPrintParams() {
|
|
5
|
-
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
-
|
|
7
|
-
for (const sourceFile of sourceFiles) {
|
|
8
|
-
const typeChecker = sourceFile.getProject().getTypeChecker();
|
|
9
|
-
|
|
10
|
-
const callExprs = sourceFile
|
|
11
|
-
.getDescendantsOfKind(SyntaxKind.CallExpression)
|
|
12
|
-
.filter((callExpr) => {
|
|
13
|
-
const expr = callExpr.getExpression();
|
|
14
|
-
return (
|
|
15
|
-
Node.isPropertyAccessExpression(expr) &&
|
|
16
|
-
expr.getName() === "printAsync" &&
|
|
17
|
-
expr.getExpression().getText() === "this._sdPrint"
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
for (const callExpr of callExprs) {
|
|
22
|
-
const args = callExpr.getArguments();
|
|
23
|
-
if (args.length < 2) continue;
|
|
24
|
-
|
|
25
|
-
const firstArg = args[0];
|
|
26
|
-
const type = typeChecker.getTypeAtLocation(firstArg);
|
|
27
|
-
|
|
28
|
-
// 클래스 타입인지 확인 (Symbol이 존재하고, 선언이 class인지 여부 판단)
|
|
29
|
-
const symbol = type.getSymbol();
|
|
30
|
-
const isClass =
|
|
31
|
-
symbol?.getDeclarations().some((decl) => Node.isClassDeclaration(decl)) ?? false;
|
|
32
|
-
|
|
33
|
-
if (!isClass) continue;
|
|
34
|
-
|
|
35
|
-
// 변환 처리
|
|
36
|
-
const typeText = firstArg.getText();
|
|
37
|
-
const inputsText = args[1]?.getText() ?? "{}";
|
|
38
|
-
|
|
39
|
-
const props = [`type: ${typeText}`, `inputs: ${inputsText}`];
|
|
40
|
-
const objectLiteralText = `{\n ${props.join(",\n ")}\n}`;
|
|
41
|
-
|
|
42
|
-
const newArgs = [`${objectLiteralText}`, ...args.slice(2).map((arg) => arg.getText())].join(
|
|
43
|
-
", ",
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
callExpr.replaceWithText(`this._sdPrint.printAsync(${newArgs})`);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
sourceFile.saveSync();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import { SyntaxKind } from "ts-morph";
|
|
3
|
-
import getTsMortphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
-
import convertSymbols from "./core/convert-symbol";
|
|
5
|
-
|
|
6
|
-
export default function convertSdIconToFaIcon() {
|
|
7
|
-
// 1. SdIconControl → FaIconComponent
|
|
8
|
-
convertSymbols({
|
|
9
|
-
"@simplysm/sd-angular#SdIconControl": "@fortawesome/angular-fontawesome#FaIconComponent",
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
const sourceFiles = getTsMortphSourceFiles();
|
|
13
|
-
|
|
14
|
-
for (const sourceFile of sourceFiles) {
|
|
15
|
-
const filePath = sourceFile.getFilePath();
|
|
16
|
-
let didChange = false;
|
|
17
|
-
|
|
18
|
-
const importDecls = sourceFile.getImportDeclarations();
|
|
19
|
-
|
|
20
|
-
for (const importDecl of importDecls) {
|
|
21
|
-
const moduleSpecifier = importDecl.getModuleSpecifierValue();
|
|
22
|
-
|
|
23
|
-
// 2. pro-regular-svg-icons → 개별 모듈로 분할
|
|
24
|
-
if (moduleSpecifier === "@fortawesome/pro-regular-svg-icons") {
|
|
25
|
-
const namedImports = importDecl.getNamedImports();
|
|
26
|
-
|
|
27
|
-
for (const namedImport of namedImports) {
|
|
28
|
-
const name = namedImport.getName(); // e.g. faLock
|
|
29
|
-
sourceFile.insertImportDeclaration(importDecl.getChildIndex(), {
|
|
30
|
-
namedImports: [name],
|
|
31
|
-
moduleSpecifier: `@fortawesome/pro-regular-svg-icons/${name}`,
|
|
32
|
-
});
|
|
33
|
-
console.log(` [아이콘 분할 import] ${name} → /${name}`);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
importDecl.remove();
|
|
37
|
-
didChange = true;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// 2. free-solid-svg-icons → 개별 모듈로 분할
|
|
41
|
-
if (moduleSpecifier === "@fortawesome/free-solid-svg-icons") {
|
|
42
|
-
const namedImports = importDecl.getNamedImports();
|
|
43
|
-
|
|
44
|
-
for (const namedImport of namedImports) {
|
|
45
|
-
const name = namedImport.getName(); // e.g. faLock
|
|
46
|
-
sourceFile.insertImportDeclaration(importDecl.getChildIndex(), {
|
|
47
|
-
namedImports: [name],
|
|
48
|
-
moduleSpecifier: `@fortawesome/free-solid-svg-icons/${name}`,
|
|
49
|
-
});
|
|
50
|
-
console.log(` [아이콘 분할 import] ${name} → /${name}`);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
importDecl.remove();
|
|
54
|
-
didChange = true;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// 3. 템플릿 내 sd-icon → fa-icon 및 fixedWidth 보정
|
|
59
|
-
const templates = sourceFile.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral);
|
|
60
|
-
|
|
61
|
-
for (const tmpl of templates) {
|
|
62
|
-
const raw = tmpl.getLiteralText();
|
|
63
|
-
if (!raw.includes("<sd-icon")) continue;
|
|
64
|
-
|
|
65
|
-
const replaced = raw
|
|
66
|
-
// <sd-icon ... /> → <fa-icon ... />
|
|
67
|
-
.replace(/<sd-icon\b([^>]*)\/>/g, (_, attrs) => {
|
|
68
|
-
const newAttrs = attrs
|
|
69
|
-
// 이미 바인딩된 [fixedWidth]=은 건드리지 않음
|
|
70
|
-
.replace(/\s(?<!\[)fixedWidth(?!\s*=\s*["'])/g, ' [fixedWidth]="true"')
|
|
71
|
-
.trim();
|
|
72
|
-
return `<fa-icon ${newAttrs} />`;
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
// <sd-icon ...>...</sd-icon> → <fa-icon ...>...</fa-icon>
|
|
76
|
-
.replace(/<sd-icon\b([^>]*)>([\s\S]*?)<\/sd-icon>/g, (_, attrs, inner) => {
|
|
77
|
-
const newAttrs = attrs
|
|
78
|
-
.replace(/\s(?<!\[)fixedWidth(?!\s*=\s*["'])/g, ' [fixedWidth]="true"')
|
|
79
|
-
.trim();
|
|
80
|
-
return `<fa-icon ${newAttrs}>${inner}</fa-icon>`;
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
if (replaced !== raw) {
|
|
84
|
-
tmpl.setLiteralValue(replaced);
|
|
85
|
-
console.log(`[template] ${sourceFile.getBaseName()} :: <sd-icon> → <fa-icon> 변환됨`);
|
|
86
|
-
didChange = true;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (didChange) {
|
|
91
|
-
sourceFile.saveSync();
|
|
92
|
-
console.log(`[저장 완료] ${filePath}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import { SyntaxKind } from "ts-morph";
|
|
3
|
-
import getTsMortphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
-
|
|
5
|
-
export default function convertSdSheetBindingsSafely() {
|
|
6
|
-
const sourceFiles = getTsMortphSourceFiles();
|
|
7
|
-
|
|
8
|
-
for (const sourceFile of sourceFiles) {
|
|
9
|
-
for (const classDecl of sourceFile.getClasses()) {
|
|
10
|
-
const decorator = classDecl.getDecorator("Component");
|
|
11
|
-
if (!decorator) continue;
|
|
12
|
-
|
|
13
|
-
const arg = decorator.getArguments()[0];
|
|
14
|
-
if (!arg.asKind(SyntaxKind.ObjectLiteralExpression)) continue;
|
|
15
|
-
|
|
16
|
-
const obj = arg.asKindOrThrow(SyntaxKind.ObjectLiteralExpression);
|
|
17
|
-
const templateProp = obj.getProperty("template");
|
|
18
|
-
if (!templateProp || !templateProp.isKind(SyntaxKind.PropertyAssignment)) continue;
|
|
19
|
-
|
|
20
|
-
const initializer = templateProp.getInitializer();
|
|
21
|
-
if (!initializer) continue;
|
|
22
|
-
|
|
23
|
-
let rawTemplate: string | undefined;
|
|
24
|
-
if (
|
|
25
|
-
initializer.isKind(SyntaxKind.NoSubstitutionTemplateLiteral) ||
|
|
26
|
-
initializer.isKind(SyntaxKind.StringLiteral)
|
|
27
|
-
) {
|
|
28
|
-
rawTemplate = initializer.getLiteralText();
|
|
29
|
-
} else if (initializer.isKind(SyntaxKind.TemplateExpression)) {
|
|
30
|
-
rawTemplate = initializer.getFullText().slice(1, -1);
|
|
31
|
-
} else continue;
|
|
32
|
-
|
|
33
|
-
// 정규식으로 <sd-sheet> 안에서만 바인딩 속성 치환
|
|
34
|
-
let newTemplate = rawTemplate.replace(/<sd-sheet([\s\S]*?)>/g, (match) =>
|
|
35
|
-
match
|
|
36
|
-
.replace(/\[\(page\)\]/g, "[(currentPage)]")
|
|
37
|
-
.replace(/\[pageLength\]/g, "[totalPageCount]")
|
|
38
|
-
.replace(/\[\(ordering\)\]/g, "[(sorts)]")
|
|
39
|
-
.replace(/\[pageItemCount\]/g, "[itemsPerPage]"),
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
newTemplate = newTemplate.replace(/<sd-pagination([\s\S]*?)>/g, (match) =>
|
|
43
|
-
match
|
|
44
|
-
.replace(/\[\(page\)\]/g, "[(currentPage)]")
|
|
45
|
-
.replace(/\[pageLength\]/g, "[totalPageCount]")
|
|
46
|
-
.replace(/\[displayPageLength\]/g, "[visiblePageCount]"),
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
newTemplate = newTemplate.replace(/<sd-sheet-column([\s\S]*?)>/g, (match) =>
|
|
50
|
-
match
|
|
51
|
-
.replace(/\[disableOrdering\]/g, "[disableSorting]")
|
|
52
|
-
.replace(/\sdisableOrdering/g, " disableSorting"),
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
newTemplate = newTemplate.replace(/<ng-template([\s\S]*?)>/g, (match) =>
|
|
56
|
-
match
|
|
57
|
-
.replace(/target="content"/g, "#content")
|
|
58
|
-
.replace(/target="topbar"/g, "#pageTopbar")
|
|
59
|
-
.replace(/target="bottom"/g, "#modalBottom"),
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
if (rawTemplate !== newTemplate) {
|
|
63
|
-
initializer.replaceWithText("`" + newTemplate + "`");
|
|
64
|
-
console.log(
|
|
65
|
-
`[template-updated] ${sourceFile.getBaseName()} :: 바인딩 속성 안전하게 변경 완료`,
|
|
66
|
-
);
|
|
67
|
-
sourceFile.saveSync();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
console.log("[완료] 정규식 기반 안전한 sd-sheet 바인딩 속성 변경 완료");
|
|
73
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import { SyntaxKind } from "ts-morph";
|
|
3
|
-
import getTsMortphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
-
import convertSymbols from "./core/convert-symbol";
|
|
5
|
-
|
|
6
|
-
export default function convertSelectModalButtonToSelectButton() {
|
|
7
|
-
// 1. SdIconControl → FaIconComponent
|
|
8
|
-
convertSymbols({
|
|
9
|
-
"@simplysm/sd-angular#SdSharedDataSelectModalButtonControl":
|
|
10
|
-
"@simplysm/sd-angular#SdSharedDataSelectButtonControl",
|
|
11
|
-
"@simplysm/sd-angular#SdSelectModalButtonControl":
|
|
12
|
-
"@simplysm/sd-angular#SdDataSelectButtonControl",
|
|
13
|
-
"@simplysm/sd-angular#TSelectValue": "@simplysm/sd-angular#TSelectModeValue",
|
|
14
|
-
"@simplysm/sd-angular#SdSharedDataSelectViewControl": "@simplysm/sd-angular#SdSharedDataSelectListControl",
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const sourceFiles = getTsMortphSourceFiles();
|
|
18
|
-
|
|
19
|
-
for (const sourceFile of sourceFiles) {
|
|
20
|
-
const filePath = sourceFile.getFilePath();
|
|
21
|
-
let didChange = false;
|
|
22
|
-
|
|
23
|
-
// 3. 템플릿 내 sd-shared-data-select-modal-button → sd-shared-data-select-button
|
|
24
|
-
const templates = sourceFile.getDescendantsOfKind(SyntaxKind.NoSubstitutionTemplateLiteral);
|
|
25
|
-
|
|
26
|
-
for (const tmpl of templates) {
|
|
27
|
-
const raw = tmpl.getLiteralText();
|
|
28
|
-
if (raw.includes("<sd-shared-data-select-modal-button")) {
|
|
29
|
-
const replaced = raw
|
|
30
|
-
// <sd-icon ...>...</sd-icon> → <fa-icon ...>...</fa-icon>
|
|
31
|
-
.replace(
|
|
32
|
-
/<sd-shared-data-select-modal-button\b([^>]*)>([\s\S]*?)<\/sd-shared-data-select-modal-button>/g,
|
|
33
|
-
(_, attrs, inner) => {
|
|
34
|
-
return `<sd-shared-data-select-button ${attrs}>${inner}</sd-shared-data-select-button>`;
|
|
35
|
-
},
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
if (replaced !== raw) {
|
|
39
|
-
tmpl.setLiteralValue(replaced);
|
|
40
|
-
console.log(
|
|
41
|
-
`[template] ${sourceFile.getBaseName()} :: <sd-shared-data-select-modal-button> → <sd-shared-data-select-button> 변환됨`,
|
|
42
|
-
);
|
|
43
|
-
didChange = true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (raw.includes("<sd-select-modal-button")) {
|
|
48
|
-
const replaced = raw
|
|
49
|
-
// <sd-icon ...>...</sd-icon> → <fa-icon ...>...</fa-icon>
|
|
50
|
-
.replace(
|
|
51
|
-
/<sd-select-modal-button\b([^>]*)>([\s\S]*?)<\/sd-select-modal-button>/g,
|
|
52
|
-
(_, attrs, inner) => {
|
|
53
|
-
return `<sd-data-select-button ${attrs}>${inner}</sd-data-select-button>`;
|
|
54
|
-
},
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
if (replaced !== raw) {
|
|
58
|
-
tmpl.setLiteralValue(replaced);
|
|
59
|
-
console.log(
|
|
60
|
-
`[template] ${sourceFile.getBaseName()} :: <sd-select-modal-button> → <sd-data-select-button> 변환됨`,
|
|
61
|
-
);
|
|
62
|
-
didChange = true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (raw.includes("<sd-shared-data-select-view")) {
|
|
67
|
-
const replaced = raw
|
|
68
|
-
// <sd-icon ...>...</sd-icon> → <fa-icon ...>...</fa-icon>
|
|
69
|
-
.replace(
|
|
70
|
-
/<sd-shared-data-select-view\b([^>]*)>([\s\S]*?)<\/sd-shared-data-select-view>/g,
|
|
71
|
-
(_, attrs, inner) => {
|
|
72
|
-
return `<sd-shared-data-select-list ${attrs}>${inner}</sd-shared-data-select-list>`;
|
|
73
|
-
},
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
if (replaced !== raw) {
|
|
77
|
-
tmpl.setLiteralValue(replaced);
|
|
78
|
-
console.log(
|
|
79
|
-
`[template] ${sourceFile.getBaseName()} :: <sd-shared-data-select-view> → <sd-shared-data-select-list> 변환됨`,
|
|
80
|
-
);
|
|
81
|
-
didChange = true;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (didChange) {
|
|
87
|
-
sourceFile.saveSync();
|
|
88
|
-
console.log(`[저장 완료] ${filePath}`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import { SyntaxKind } from "ts-morph";
|
|
3
|
-
import getTsMortphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
-
|
|
5
|
-
export default function convertSetupCumulateSelectedKeysToObjectParam() {
|
|
6
|
-
const sourceFiles = getTsMortphSourceFiles();
|
|
7
|
-
|
|
8
|
-
for (const sourceFile of sourceFiles) {
|
|
9
|
-
let changed = false;
|
|
10
|
-
|
|
11
|
-
sourceFile.forEachDescendant((node) => {
|
|
12
|
-
if (node.getKind() !== SyntaxKind.CallExpression) return;
|
|
13
|
-
|
|
14
|
-
const callExpr = node.asKindOrThrow(SyntaxKind.CallExpression);
|
|
15
|
-
const exprText = callExpr.getExpression().getText();
|
|
16
|
-
|
|
17
|
-
if (exprText !== "setupCumulateSelectedKeys") return;
|
|
18
|
-
const args = callExpr.getArguments();
|
|
19
|
-
if (args.length !== 5) return;
|
|
20
|
-
|
|
21
|
-
const [items, selectMode, selectedItems, selectedItemIds, keySelectorFn] = args;
|
|
22
|
-
|
|
23
|
-
// 객체 리터럴 생성
|
|
24
|
-
const newArgText = `{
|
|
25
|
-
items: ${items.getText()},
|
|
26
|
-
selectMode: ${selectMode.getText()},
|
|
27
|
-
selectedItems: ${selectedItems.getText()},
|
|
28
|
-
selectedItemKeys: ${selectedItemIds.getText()},
|
|
29
|
-
keySelectorFn: ${keySelectorFn.getText()}
|
|
30
|
-
}`;
|
|
31
|
-
|
|
32
|
-
callExpr.replaceWithText(`setupCumulateSelectedKeys(${newArgText})`);
|
|
33
|
-
changed = true;
|
|
34
|
-
console.log(`[updated] ${sourceFile.getBaseName()} :: setupCumulateSelectedKeys 인자 구조 변경`);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
38
|
-
if (changed) {
|
|
39
|
-
sourceFile.saveSync();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
console.log("[완료] setupCumulateSelectedKeys → object parameter 구조 변환 완료");
|
|
44
|
-
}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
|
-
import {
|
|
3
|
-
ArrowFunction,
|
|
4
|
-
CallExpression,
|
|
5
|
-
PropertyDeclaration,
|
|
6
|
-
SourceFile,
|
|
7
|
-
SyntaxKind,
|
|
8
|
-
} from "ts-morph";
|
|
9
|
-
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
10
|
-
|
|
11
|
-
export function convertToUsePermsSignal() {
|
|
12
|
-
const sourceFiles = getTsMorphSourceFiles();
|
|
13
|
-
let totalChanged = 0;
|
|
14
|
-
|
|
15
|
-
for (const sourceFile of sourceFiles) {
|
|
16
|
-
let changed = false;
|
|
17
|
-
|
|
18
|
-
for (const cls of sourceFile.getClasses()) {
|
|
19
|
-
try {
|
|
20
|
-
const result = processClass(cls);
|
|
21
|
-
if (result.success) {
|
|
22
|
-
changed = true;
|
|
23
|
-
}
|
|
24
|
-
} catch (error) {
|
|
25
|
-
console.error(`[오류] ${sourceFile.getBaseName()} 클래스 처리 중 오류:`, error);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (changed) {
|
|
30
|
-
addImportIfNeeded(sourceFile);
|
|
31
|
-
sourceFile.saveSync();
|
|
32
|
-
totalChanged++;
|
|
33
|
-
console.log(`[updated] ${sourceFile.getBaseName()} :: usePermsSignal 변환 완료`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
console.log(
|
|
38
|
-
totalChanged > 0 ? `\n[완료] 변환 완료 (총 ${totalChanged}개)` : `[완료] 변환 대상 없음`,
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function processClass(cls: any) {
|
|
43
|
-
const viewCodesProp = getPropertyDeclaration(cls, "viewCodes");
|
|
44
|
-
const permsProp = getPropertyDeclaration(cls, "perms");
|
|
45
|
-
|
|
46
|
-
if (!viewCodesProp || !permsProp) {
|
|
47
|
-
return { success: false, reason: "필수 프로퍼티 없음" };
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const viewCodesInit = viewCodesProp.getInitializer();
|
|
51
|
-
const permsInit = permsProp.getInitializer();
|
|
52
|
-
|
|
53
|
-
if (!isValidViewCodesInit(viewCodesInit) || !isValidPermsInit(permsInit)) {
|
|
54
|
-
return { success: false, reason: "초기화 값이 유효하지 않음" };
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const permsCallExpr = permsInit as CallExpression;
|
|
58
|
-
const arrowFunction = getArrowFunction(permsCallExpr);
|
|
59
|
-
|
|
60
|
-
if (!arrowFunction) {
|
|
61
|
-
return { success: false, reason: "Arrow function을 찾을 수 없음" };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const callExpression = getPermsCallExpression(arrowFunction);
|
|
65
|
-
|
|
66
|
-
if (!callExpression) {
|
|
67
|
-
return { success: false, reason: "getViewPerms 호출을 찾을 수 없음" };
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const args = callExpression.getArguments();
|
|
71
|
-
if (args.length !== 2) {
|
|
72
|
-
return { success: false, reason: "인자 개수가 맞지 않음" };
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// 변환 실행
|
|
76
|
-
const viewCodesText = viewCodesInit!.getText();
|
|
77
|
-
const permsText = args[1].getText();
|
|
78
|
-
|
|
79
|
-
permsProp.setInitializer(`usePermsSignal(${viewCodesText}, ${permsText})`);
|
|
80
|
-
viewCodesProp.remove();
|
|
81
|
-
|
|
82
|
-
return { success: true };
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function getPropertyDeclaration(cls: any, name: string): PropertyDeclaration | undefined {
|
|
86
|
-
const prop = cls.getInstanceProperty(name);
|
|
87
|
-
return prop?.getKind() === SyntaxKind.PropertyDeclaration ? prop : undefined;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function isValidViewCodesInit(init: any): boolean {
|
|
91
|
-
return init?.getKind() === SyntaxKind.ArrayLiteralExpression;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function isValidPermsInit(init: any): boolean {
|
|
95
|
-
return init?.getKind() === SyntaxKind.CallExpression;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
function getArrowFunction(callExpr: CallExpression): ArrowFunction | undefined {
|
|
99
|
-
const firstArg = callExpr.getArguments().first();
|
|
100
|
-
return firstArg?.getKind() === SyntaxKind.ArrowFunction ? (firstArg as ArrowFunction) : undefined;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
function getPermsCallExpression(arrowFn: ArrowFunction): CallExpression | undefined {
|
|
104
|
-
const body = arrowFn.getBody();
|
|
105
|
-
|
|
106
|
-
if (body.getKind() !== SyntaxKind.CallExpression) {
|
|
107
|
-
return undefined;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const callExpr = body as CallExpression;
|
|
111
|
-
return callExpr.getText().includes("this._sdAppStructure.getViewPerms") ? callExpr : undefined;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function addImportIfNeeded(sourceFile: SourceFile) {
|
|
115
|
-
const sdAngularImport = sourceFile.getImportDeclaration(
|
|
116
|
-
(d: any) => d.getModuleSpecifierValue() === "@simplysm/sd-angular",
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
if (sdAngularImport) {
|
|
120
|
-
const hasImport = sdAngularImport
|
|
121
|
-
.getNamedImports()
|
|
122
|
-
.some((n: any) => n.getName() === "usePermsSignal");
|
|
123
|
-
|
|
124
|
-
if (!hasImport) {
|
|
125
|
-
sdAngularImport.addNamedImport("usePermsSignal");
|
|
126
|
-
}
|
|
127
|
-
} else {
|
|
128
|
-
sourceFile.addImportDeclaration({
|
|
129
|
-
namedImports: ["usePermsSignal"],
|
|
130
|
-
moduleSpecifier: "@simplysm/sd-angular",
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export default function removeNamedImport(sourceFile, moduleSpecifier, symbolName) {
|
|
2
|
-
const importDecl = sourceFile.getImportDeclaration(
|
|
3
|
-
(d) => d.getModuleSpecifierValue() === moduleSpecifier,
|
|
4
|
-
);
|
|
5
|
-
if (importDecl == null) return;
|
|
6
|
-
importDecl
|
|
7
|
-
.getNamedImports()
|
|
8
|
-
.filter((n) => n.getName() === symbolName)
|
|
9
|
-
.forEach((n) => n.remove());
|
|
10
|
-
// 만약 named import가 모두 사라지면 import문 자체 삭제
|
|
11
|
-
if (importDecl.getNamedImports().length === 0) {
|
|
12
|
-
importDecl.remove();
|
|
13
|
-
}
|
|
14
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { FsUtils, SdLogger, TNormPath } from "@simplysm/sd-core-node";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { ISdProjectConfig, TSdPackageConfig } from "../../types/config/ISdProjectConfig";
|
|
4
|
-
import { ScopePathSet } from "./ScopePathSet";
|
|
5
|
-
import { ISdBuildResult } from "../../types/build/ISdBuildResult";
|
|
6
|
-
|
|
7
|
-
export abstract class SdBuildRunnerBase<T extends "server" | "library" | "client"> {
|
|
8
|
-
protected abstract _logger: SdLogger;
|
|
9
|
-
|
|
10
|
-
protected _pkgName: string;
|
|
11
|
-
protected _pkgConf: TSdPackageConfig<T>;
|
|
12
|
-
|
|
13
|
-
protected _scopePathSet: ScopePathSet;
|
|
14
|
-
|
|
15
|
-
constructor(
|
|
16
|
-
protected _pkgPath: TNormPath,
|
|
17
|
-
protected _projConf: ISdProjectConfig,
|
|
18
|
-
scopePathSet: Set<TNormPath>,
|
|
19
|
-
protected _watch: boolean,
|
|
20
|
-
protected _dev: boolean,
|
|
21
|
-
protected _emitOnly?: boolean,
|
|
22
|
-
protected _noEmit?: boolean,
|
|
23
|
-
) {
|
|
24
|
-
this._pkgName = path.basename(_pkgPath);
|
|
25
|
-
this._pkgConf = _projConf.packages[this._pkgName] as TSdPackageConfig<T>;
|
|
26
|
-
|
|
27
|
-
this._scopePathSet = new ScopePathSet(scopePathSet);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async rebuildAsync(modifiedFileSet?: Set<TNormPath>): Promise<ISdBuildResult> {
|
|
31
|
-
if (!modifiedFileSet && !this._noEmit) {
|
|
32
|
-
const distPath = path.resolve(this._pkgPath, "dist");
|
|
33
|
-
if (FsUtils.exists(distPath)) {
|
|
34
|
-
this._debug("dist 초기화...");
|
|
35
|
-
FsUtils.remove(distPath);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return await this._runAsync(modifiedFileSet);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
protected abstract _runAsync(modifiedFileSet?: Set<TNormPath>): Promise<ISdBuildResult>;
|
|
43
|
-
|
|
44
|
-
protected _debug(msg: string): void {
|
|
45
|
-
this._logger.debug(`[${path.basename(this._pkgPath)}] ${msg}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|