@simplysm/sd-cli 12.11.2 → 12.11.4
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/fix/convert-extends-sd-print-template-base-to-interface.d.ts +1 -0
- package/dist/fix/convert-extends-sd-print-template-base-to-interface.js +179 -0
- package/dist/fix/convert-extends-sd-print-template-base-to-interface.js.map +1 -0
- package/dist/fix/convert-flat-pages-to-flat-menus.d.ts +1 -0
- package/dist/fix/convert-flat-pages-to-flat-menus.js +68 -0
- package/dist/fix/convert-flat-pages-to-flat-menus.js.map +1 -0
- package/dist/fix/convert-get-menus-to-usable-menus.d.ts +1 -0
- package/dist/fix/convert-get-menus-to-usable-menus.js +48 -0
- package/dist/fix/convert-get-menus-to-usable-menus.js.map +1 -0
- package/dist/fix/convert-modal-show-params.d.ts +1 -1
- package/dist/fix/convert-modal-show-params.js +1 -1
- package/dist/fix/convert-modal-show-params.js.map +1 -1
- package/dist/fix/convert-print-params.d.ts +1 -0
- package/dist/fix/convert-print-params.js +37 -0
- package/dist/fix/convert-print-params.js.map +1 -0
- package/dist/fix/convert-to-use-perms-signal.d.ts +1 -0
- package/dist/fix/convert-to-use-perms-signal.js +99 -0
- package/dist/fix/convert-to-use-perms-signal.js.map +1 -0
- package/dist/fix/remove-unused-imports.d.ts +1 -0
- package/dist/fix/remove-unused-imports.js +42 -0
- package/dist/fix/remove-unused-imports.js.map +1 -0
- package/dist/fix/remove-unused-injects.d.ts +1 -0
- package/dist/fix/remove-unused-injects.js +38 -0
- package/dist/fix/remove-unused-injects.js.map +1 -0
- package/dist/sd-cli-entry.js +16 -1
- package/dist/sd-cli-entry.js.map +1 -1
- package/package.json +9 -9
- package/src/fix/convert-extends-sd-print-template-base-to-interface.ts +201 -0
- package/src/fix/convert-flat-pages-to-flat-menus.ts +83 -0
- package/src/fix/convert-get-menus-to-usable-menus.ts +60 -0
- package/src/fix/convert-modal-show-params.ts +1 -1
- package/src/fix/convert-print-params.ts +51 -0
- package/src/fix/convert-to-use-perms-signal.ts +133 -0
- package/src/fix/remove-unused-imports.ts +50 -0
- package/src/fix/remove-unused-injects.ts +50 -0
- package/src/sd-cli-entry.ts +26 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function convertExtendsSdPrintTemplateBaseToInterface(): void;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import * as path from "path";
|
|
3
|
+
import { SyntaxKind } from "ts-morph";
|
|
4
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
5
|
+
import removeNamedImport from "./core/remove-named-import";
|
|
6
|
+
export function convertExtendsSdPrintTemplateBaseToInterface() {
|
|
7
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
8
|
+
let totalChanged = 0;
|
|
9
|
+
for (const sourceFile of sourceFiles) {
|
|
10
|
+
let changed = false;
|
|
11
|
+
const relPath = path.basename(sourceFile.getFilePath());
|
|
12
|
+
const printClass = sourceFile.getClasses().find((classDecl) => {
|
|
13
|
+
const extendsClause = classDecl
|
|
14
|
+
.getHeritageClauses()
|
|
15
|
+
.find((h) => h.getToken() === SyntaxKind.ExtendsKeyword);
|
|
16
|
+
if (!extendsClause)
|
|
17
|
+
return false;
|
|
18
|
+
const typeNodes = extendsClause.getTypeNodes();
|
|
19
|
+
return typeNodes.some((typeNode) => /^SdPrintTemplateBase\s*<[^>]+>$/.test(typeNode.getText()));
|
|
20
|
+
});
|
|
21
|
+
if (!printClass)
|
|
22
|
+
continue;
|
|
23
|
+
const extendsClause = printClass
|
|
24
|
+
.getHeritageClauses()
|
|
25
|
+
.find((h) => h.getToken() === SyntaxKind.ExtendsKeyword);
|
|
26
|
+
if (!extendsClause)
|
|
27
|
+
continue;
|
|
28
|
+
const typeNodes = extendsClause.getTypeNodes();
|
|
29
|
+
const match = typeNodes[0]?.getText().match(/^SdPrintTemplateBase\s*<([^>]+)>$/);
|
|
30
|
+
if (!match)
|
|
31
|
+
continue;
|
|
32
|
+
const paramTypeName = match[1].trim();
|
|
33
|
+
const paramInterface = sourceFile.getInterface(paramTypeName);
|
|
34
|
+
if (!paramInterface)
|
|
35
|
+
continue;
|
|
36
|
+
const props = paramInterface.getProperties();
|
|
37
|
+
const paramNames = props.map((p) => p.getName());
|
|
38
|
+
// 1. property/class 필드 추가
|
|
39
|
+
let lastPropIdx = 0;
|
|
40
|
+
for (const prop of props) {
|
|
41
|
+
const propName = prop.getName();
|
|
42
|
+
const isOptional = prop.hasQuestionToken();
|
|
43
|
+
const propType = prop.getTypeNode()?.getText() ?? "any";
|
|
44
|
+
const initializer = `input${isOptional ? "" : ".required"}<${propType}>()`;
|
|
45
|
+
if (!printClass.getProperty(propName)) {
|
|
46
|
+
printClass.insertProperty(lastPropIdx, { name: propName, initializer });
|
|
47
|
+
lastPropIdx++;
|
|
48
|
+
changed = true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// 2. implements 추가
|
|
52
|
+
if (!printClass.getImplements().some(i => i.getText() === "ISdPrint")) {
|
|
53
|
+
printClass.addImplements("ISdPrint");
|
|
54
|
+
changed = true;
|
|
55
|
+
}
|
|
56
|
+
// 3. super() 삭제 (생성자)
|
|
57
|
+
const ctor = printClass.getConstructors().first();
|
|
58
|
+
if (ctor) {
|
|
59
|
+
ctor.getStatements().forEach((stmt) => {
|
|
60
|
+
if (stmt.getKind() === SyntaxKind.ExpressionStatement) {
|
|
61
|
+
const expr = stmt.asKind(SyntaxKind.ExpressionStatement)?.getExpression();
|
|
62
|
+
if (expr?.asKind(SyntaxKind.CallExpression)?.getExpression().getText() === "super") {
|
|
63
|
+
stmt.remove();
|
|
64
|
+
changed = true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
// 4. this.print() 전체 삭제
|
|
70
|
+
printClass
|
|
71
|
+
.getDescendantsOfKind(SyntaxKind.CallExpression)
|
|
72
|
+
.filter((expr) => expr.getExpression().getKind() === SyntaxKind.PropertyAccessExpression &&
|
|
73
|
+
expr.getExpression().getText() === "this.print")
|
|
74
|
+
.forEach((expr) => {
|
|
75
|
+
const parentStmt = expr.getFirstAncestorByKind(SyntaxKind.ExpressionStatement);
|
|
76
|
+
if (parentStmt) {
|
|
77
|
+
parentStmt.remove();
|
|
78
|
+
changed = true;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// 5. params().xxx → xxx() 및 this.params().xxx → this.xxx() AST 치환
|
|
82
|
+
printClass.forEachDescendant((node) => {
|
|
83
|
+
if (node.getKind() === SyntaxKind.PropertyAccessExpression) {
|
|
84
|
+
const propAccess = node.asKind(SyntaxKind.PropertyAccessExpression);
|
|
85
|
+
const propName = propAccess.getName();
|
|
86
|
+
if (!paramNames.includes(propName))
|
|
87
|
+
return;
|
|
88
|
+
const expr = propAccess.getExpression();
|
|
89
|
+
if (expr.getKind() === SyntaxKind.CallExpression) {
|
|
90
|
+
const callExpr = expr.asKind(SyntaxKind.CallExpression);
|
|
91
|
+
const innerExpr = callExpr.getExpression();
|
|
92
|
+
if (innerExpr.getKind() === SyntaxKind.Identifier && innerExpr.getText() === "params") {
|
|
93
|
+
propAccess.replaceWithText(`${propName}()`);
|
|
94
|
+
changed = true;
|
|
95
|
+
}
|
|
96
|
+
else if (innerExpr.getKind() === SyntaxKind.PropertyAccessExpression &&
|
|
97
|
+
innerExpr.asKind(SyntaxKind.PropertyAccessExpression).getExpression().getKind() === SyntaxKind.ThisKeyword &&
|
|
98
|
+
innerExpr.asKind(SyntaxKind.PropertyAccessExpression).getName() === "params") {
|
|
99
|
+
propAccess.replaceWithText(`this.${propName}()`);
|
|
100
|
+
changed = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
// 6. @Component template: params().xxx → xxx() 치환
|
|
106
|
+
const componentDecorator = printClass.getDecorator("Component");
|
|
107
|
+
if (componentDecorator) {
|
|
108
|
+
const arg = componentDecorator.getArguments().first();
|
|
109
|
+
if (arg?.getKind() === SyntaxKind.ObjectLiteralExpression) {
|
|
110
|
+
const tplProp = arg.asKind(SyntaxKind.ObjectLiteralExpression).getProperty("template");
|
|
111
|
+
if (tplProp?.getKind() === SyntaxKind.PropertyAssignment &&
|
|
112
|
+
tplProp.asKind(SyntaxKind.PropertyAssignment).getInitializer()) {
|
|
113
|
+
const propAssign = tplProp.asKind(SyntaxKind.PropertyAssignment);
|
|
114
|
+
const init = propAssign.getInitializerOrThrow();
|
|
115
|
+
let tplText = init.getText();
|
|
116
|
+
let tplTextRaw = tplText;
|
|
117
|
+
for (const paramName of paramNames) {
|
|
118
|
+
const paramsPattern = new RegExp(`params\\(\\)\\.${paramName}\\b`, "g");
|
|
119
|
+
tplTextRaw = tplTextRaw.replace(paramsPattern, `${paramName}()`);
|
|
120
|
+
}
|
|
121
|
+
if (tplTextRaw !== tplText) {
|
|
122
|
+
propAssign.setInitializer(tplTextRaw);
|
|
123
|
+
changed = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 7. import 정리
|
|
129
|
+
const sdAngularImport = sourceFile.getImportDeclaration(d => d.getModuleSpecifierValue() === "@simplysm/sd-angular");
|
|
130
|
+
if (sdAngularImport) {
|
|
131
|
+
const namedImports = sdAngularImport.getNamedImports();
|
|
132
|
+
if (!namedImports.some(n => n.getName() === "ISdPrint")) {
|
|
133
|
+
sdAngularImport.addNamedImport("ISdPrint");
|
|
134
|
+
changed = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
sourceFile.addImportDeclaration({
|
|
139
|
+
namedImports: ["ISdPrint"],
|
|
140
|
+
moduleSpecifier: "@simplysm/sd-angular"
|
|
141
|
+
});
|
|
142
|
+
changed = true;
|
|
143
|
+
}
|
|
144
|
+
const ngCoreImport = sourceFile.getImportDeclaration((d) => d.getModuleSpecifierValue() === "@angular/core");
|
|
145
|
+
if (ngCoreImport) {
|
|
146
|
+
const imports = ngCoreImport.getNamedImports().map((n) => n.getName());
|
|
147
|
+
if (!imports.includes("input")) {
|
|
148
|
+
ngCoreImport.addNamedImport("input");
|
|
149
|
+
changed = true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
sourceFile.addImportDeclaration({
|
|
154
|
+
namedImports: ["input"],
|
|
155
|
+
moduleSpecifier: "@angular/core",
|
|
156
|
+
});
|
|
157
|
+
changed = true;
|
|
158
|
+
}
|
|
159
|
+
// 8. interface 선언 삭제
|
|
160
|
+
paramInterface.remove();
|
|
161
|
+
// 9. extends 삭제
|
|
162
|
+
printClass.removeExtends();
|
|
163
|
+
// 10. 불필요한 import 제거
|
|
164
|
+
removeNamedImport(sourceFile, "@simplysm/sd-angular", "SdPrintTemplateBase");
|
|
165
|
+
// 11. 저장 및 로그 출력
|
|
166
|
+
if (changed) {
|
|
167
|
+
sourceFile.saveSync();
|
|
168
|
+
totalChanged++;
|
|
169
|
+
console.log(`[print-updated] ${relPath} :: 프린트 기반 변경 완료`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (totalChanged > 0) {
|
|
173
|
+
console.log(`\n[완료] 프린트 변환 완료 (총 ${totalChanged}개)`);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.log(`[완료] 변환 대상 없음`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=convert-extends-sd-print-template-base-to-interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-extends-sd-print-template-base-to-interface.js","sourceRoot":"","sources":["../../src/fix/convert-extends-sd-print-template-base-to-interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function convertFlatPagesToUsableFlatMenus(): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { SyntaxKind } from "ts-morph";
|
|
3
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
+
export function convertFlatPagesToUsableFlatMenus() {
|
|
5
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
+
let totalChanged = 0;
|
|
7
|
+
for (const sourceFile of sourceFiles) {
|
|
8
|
+
let changed = false;
|
|
9
|
+
for (const cls of sourceFile.getClasses()) {
|
|
10
|
+
// 1. flatPages property 선언 확인
|
|
11
|
+
const prop = cls.getInstanceProperty("flatPages")?.asKind(SyntaxKind.PropertyDeclaration);
|
|
12
|
+
if (!prop)
|
|
13
|
+
continue;
|
|
14
|
+
const initializer = prop.getInitializer();
|
|
15
|
+
if (!initializer)
|
|
16
|
+
continue;
|
|
17
|
+
const callExpr = initializer.asKind(SyntaxKind.CallExpression);
|
|
18
|
+
if (!callExpr)
|
|
19
|
+
continue;
|
|
20
|
+
const expr = callExpr.getExpression();
|
|
21
|
+
if (expr.getKind() === SyntaxKind.PropertyAccessExpression &&
|
|
22
|
+
expr.getText() === "this._sdAppStructure.getFlatPages") {
|
|
23
|
+
// 2. 선언 변경
|
|
24
|
+
prop.rename("flatMenus");
|
|
25
|
+
prop.setInitializer("this._sdAppStructure.usableFlatMenus()");
|
|
26
|
+
changed = true;
|
|
27
|
+
console.log(`[변환됨] ${sourceFile.getBaseName()} → flatPages 선언 → flatMenus`);
|
|
28
|
+
}
|
|
29
|
+
// 3. 클래스 내 this.flatPages → this.flatMenus 치환
|
|
30
|
+
cls.forEachDescendant((node) => {
|
|
31
|
+
if (node.getKind() === SyntaxKind.PropertyAccessExpression) {
|
|
32
|
+
const propAccess = node.asKind(SyntaxKind.PropertyAccessExpression);
|
|
33
|
+
if (propAccess.getExpression().getKind() === SyntaxKind.ThisKeyword &&
|
|
34
|
+
propAccess.getName() === "flatPages") {
|
|
35
|
+
propAccess.replaceWithText("this.flatMenus");
|
|
36
|
+
changed = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// 4. @Component의 template 내 문자열 치환
|
|
41
|
+
const componentDecorator = cls.getDecorator("Component");
|
|
42
|
+
const arg = componentDecorator?.getArguments()[0]?.asKind(SyntaxKind.ObjectLiteralExpression);
|
|
43
|
+
const templateProp = arg?.getProperty("template")?.asKind(SyntaxKind.PropertyAssignment);
|
|
44
|
+
const templateInit = templateProp?.getInitializer();
|
|
45
|
+
if (templateInit &&
|
|
46
|
+
(templateInit.getKind() === SyntaxKind.NoSubstitutionTemplateLiteral ||
|
|
47
|
+
templateInit.getKind() === SyntaxKind.StringLiteral ||
|
|
48
|
+
templateInit.getKind() === SyntaxKind.TemplateExpression)) {
|
|
49
|
+
const originalText = templateInit.getText();
|
|
50
|
+
const newText = originalText.replace(/\bflatPages\b/g, "flatMenus");
|
|
51
|
+
if (newText !== originalText) {
|
|
52
|
+
templateInit.replaceWithText(newText);
|
|
53
|
+
changed = true;
|
|
54
|
+
console.log(`[변환됨] ${sourceFile.getBaseName()} → 템플릿 내 flatPages → flatMenus`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (changed) {
|
|
59
|
+
sourceFile.saveSync();
|
|
60
|
+
totalChanged++;
|
|
61
|
+
console.log(`[updated] ${sourceFile.getBaseName()} :: flatMenus 변환 완료`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
console.log(totalChanged > 0
|
|
65
|
+
? `\n[완료] flatPages → flatMenus 전체 변환 완료 (총 ${totalChanged}개)`
|
|
66
|
+
: `[완료] 변환 대상 없음`);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=convert-flat-pages-to-flat-menus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-flat-pages-to-flat-menus.js","sourceRoot":"","sources":["../../src/fix/convert-flat-pages-to-flat-menus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function convertGetMenusToUsableMenus(): void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { SyntaxKind } from "ts-morph";
|
|
3
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
+
export function convertGetMenusToUsableMenus() {
|
|
5
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
+
let totalChanged = 0;
|
|
7
|
+
for (const sourceFile of sourceFiles) {
|
|
8
|
+
let changed = false;
|
|
9
|
+
for (const cls of sourceFile.getClasses()) {
|
|
10
|
+
const menusProp = cls.getInstanceProperty("menus")?.asKind(SyntaxKind.PropertyDeclaration);
|
|
11
|
+
if (!menusProp)
|
|
12
|
+
continue;
|
|
13
|
+
const initializer = menusProp.getInitializer()?.asKind(SyntaxKind.CallExpression);
|
|
14
|
+
if (!initializer ||
|
|
15
|
+
initializer.getFirstChildByKind(SyntaxKind.Identifier)?.getText() !== "$computed") {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const arrowFn = initializer
|
|
19
|
+
.asKind(SyntaxKind.CallExpression)
|
|
20
|
+
?.getArguments()
|
|
21
|
+
.first()
|
|
22
|
+
?.asKind(SyntaxKind.ArrowFunction);
|
|
23
|
+
if (!arrowFn)
|
|
24
|
+
continue;
|
|
25
|
+
const body = arrowFn.getBody().asKind(SyntaxKind.CallExpression);
|
|
26
|
+
if (!body || !body.getText().includes("this._sdAppStructure.getMenus")) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const callExpr = body.asKind(SyntaxKind.CallExpression);
|
|
30
|
+
const calleeExpr = callExpr.getExpression();
|
|
31
|
+
if (calleeExpr.getKind() === SyntaxKind.PropertyAccessExpression &&
|
|
32
|
+
calleeExpr.getText() === "this._sdAppStructure.getMenus") {
|
|
33
|
+
// 수정 실행: getMenus → usableMenus
|
|
34
|
+
calleeExpr.replaceWithText("this._sdAppStructure.usableMenus");
|
|
35
|
+
changed = true;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (changed) {
|
|
39
|
+
sourceFile.saveSync();
|
|
40
|
+
totalChanged++;
|
|
41
|
+
console.log(`[updated] ${sourceFile.getBaseName()} :: menus → usableMenus 변경 완료`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log(totalChanged > 0
|
|
45
|
+
? `\n[완료] usableMenus 변경 완료 (총 ${totalChanged}개)`
|
|
46
|
+
: `[완료] 변환 대상 없음`);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=convert-get-menus-to-usable-menus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-get-menus-to-usable-menus.js","sourceRoot":"","sources":["../../src/fix/convert-get-menus-to-usable-menus.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAErE,MAAM,UAAU,4BAA4B;IAC1C,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YAC3F,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAClF,IACE,CAAC,WAAW;gBACZ,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,WAAW,EACjF,CAAC;gBACD,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,WAAW;iBACxB,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC;gBAClC,EAAE,YAAY,EAAE;iBACf,KAAK,EAAE;gBACR,EAAE,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACjE,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBACvE,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAE,CAAC;YACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC5C,IACE,UAAU,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,wBAAwB;gBAC5D,UAAU,CAAC,OAAO,EAAE,KAAK,+BAA+B,EACxD,CAAC;gBACD,gCAAgC;gBAChC,UAAU,CAAC,eAAe,CAAC,kCAAkC,CAAC,CAAC;gBAC/D,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtB,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,YAAY,GAAG,CAAC;QACd,CAAC,CAAC,+BAA+B,YAAY,IAAI;QACjD,CAAC,CAAC,eAAe,CACpB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default function
|
|
1
|
+
export default function convertModalShowParams(): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Node, SyntaxKind } from "ts-morph";
|
|
2
2
|
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
3
|
-
export default function
|
|
3
|
+
export default function convertModalShowParams() {
|
|
4
4
|
const sourceFiles = getTsMorphSourceFiles();
|
|
5
5
|
for (const sourceFile of sourceFiles) {
|
|
6
6
|
const callExprs = sourceFile
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-modal-show-params.js","sourceRoot":"","sources":["../../src/fix/convert-modal-show-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAErE,MAAM,CAAC,OAAO,UAAU,
|
|
1
|
+
{"version":3,"file":"convert-modal-show-params.js","sourceRoot":"","sources":["../../src/fix/convert-modal-show-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAErE,MAAM,CAAC,OAAO,UAAU,sBAAsB;IAC5C,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAE5C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,UAAU;aACzB,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC;aAC/C,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtC,OAAO,CACL,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBACrC,IAAI,CAAC,OAAO,EAAE,KAAK,WAAW;gBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,eAAe,CACnD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS,CAAC,eAAe;YAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;YAE9C,MAAM,KAAK,GAAG,CAAC,SAAS,QAAQ,EAAE,EAAE,UAAU,SAAS,EAAE,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;YACpF,MAAM,iBAAiB,GAAG,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAE3D,MAAM,OAAO,GAAG,CAAC,GAAG,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAElG,QAAQ,CAAC,eAAe,CAAC,2BAA2B,OAAO,GAAG,CAAC,CAAC;QAClE,CAAC;QAED,UAAU,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function convertPrintParams(): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from "ts-morph";
|
|
2
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
3
|
+
export default function convertPrintParams() {
|
|
4
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
5
|
+
for (const sourceFile of sourceFiles) {
|
|
6
|
+
const typeChecker = sourceFile.getProject().getTypeChecker();
|
|
7
|
+
const callExprs = sourceFile
|
|
8
|
+
.getDescendantsOfKind(SyntaxKind.CallExpression)
|
|
9
|
+
.filter((callExpr) => {
|
|
10
|
+
const expr = callExpr.getExpression();
|
|
11
|
+
return (Node.isPropertyAccessExpression(expr) &&
|
|
12
|
+
expr.getName() === "printAsync" &&
|
|
13
|
+
expr.getExpression().getText() === "this._sdPrint");
|
|
14
|
+
});
|
|
15
|
+
for (const callExpr of callExprs) {
|
|
16
|
+
const args = callExpr.getArguments();
|
|
17
|
+
if (args.length < 2)
|
|
18
|
+
continue;
|
|
19
|
+
const firstArg = args[0];
|
|
20
|
+
const type = typeChecker.getTypeAtLocation(firstArg);
|
|
21
|
+
// 클래스 타입인지 확인 (Symbol이 존재하고, 선언이 class인지 여부 판단)
|
|
22
|
+
const symbol = type.getSymbol();
|
|
23
|
+
const isClass = symbol?.getDeclarations().some((decl) => Node.isClassDeclaration(decl)) ?? false;
|
|
24
|
+
if (!isClass)
|
|
25
|
+
continue;
|
|
26
|
+
// 변환 처리
|
|
27
|
+
const typeText = firstArg.getText();
|
|
28
|
+
const inputsText = args[1]?.getText() ?? "{}";
|
|
29
|
+
const props = [`type: ${typeText}`, `inputs: ${inputsText}`];
|
|
30
|
+
const objectLiteralText = `{\n ${props.join(",\n ")}\n}`;
|
|
31
|
+
const newArgs = [`${objectLiteralText}`, ...args.slice(2).map((arg) => arg.getText())].join(", ");
|
|
32
|
+
callExpr.replaceWithText(`this._sdPrint.printAsync(${newArgs})`);
|
|
33
|
+
}
|
|
34
|
+
sourceFile.saveSync();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=convert-print-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-print-params.js","sourceRoot":"","sources":["../../src/fix/convert-print-params.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAErE,MAAM,CAAC,OAAO,UAAU,kBAAkB;IACxC,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAE5C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,CAAC;QAE7D,MAAM,SAAS,GAAG,UAAU;aACzB,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC;aAC/C,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtC,OAAO,CACL,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBACrC,IAAI,CAAC,OAAO,EAAE,KAAK,YAAY;gBAC/B,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,eAAe,CACnD,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,IAAI,GAAG,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAErD,gDAAgD;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,OAAO,GACX,MAAM,EAAE,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC;YAEnF,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,QAAQ;YACR,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;YAE9C,MAAM,KAAK,GAAG,CAAC,SAAS,QAAQ,EAAE,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAE3D,MAAM,OAAO,GAAG,CAAC,GAAG,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CACzF,IAAI,CACL,CAAC;YAEF,QAAQ,CAAC,eAAe,CAAC,4BAA4B,OAAO,GAAG,CAAC,CAAC;QACnE,CAAC;QAED,UAAU,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function convertToUsePermsSignal(): void;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { SyntaxKind, } from "ts-morph";
|
|
3
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
+
export function convertToUsePermsSignal() {
|
|
5
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
+
let totalChanged = 0;
|
|
7
|
+
for (const sourceFile of sourceFiles) {
|
|
8
|
+
let changed = false;
|
|
9
|
+
for (const cls of sourceFile.getClasses()) {
|
|
10
|
+
try {
|
|
11
|
+
const result = processClass(cls);
|
|
12
|
+
if (result.success) {
|
|
13
|
+
changed = true;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error(`[오류] ${sourceFile.getBaseName()} 클래스 처리 중 오류:`, error);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (changed) {
|
|
21
|
+
addImportIfNeeded(sourceFile);
|
|
22
|
+
sourceFile.saveSync();
|
|
23
|
+
totalChanged++;
|
|
24
|
+
console.log(`[updated] ${sourceFile.getBaseName()} :: usePermsSignal 변환 완료`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
console.log(totalChanged > 0 ? `\n[완료] 변환 완료 (총 ${totalChanged}개)` : `[완료] 변환 대상 없음`);
|
|
28
|
+
}
|
|
29
|
+
function processClass(cls) {
|
|
30
|
+
const viewCodesProp = getPropertyDeclaration(cls, "viewCodes");
|
|
31
|
+
const permsProp = getPropertyDeclaration(cls, "perms");
|
|
32
|
+
if (!viewCodesProp || !permsProp) {
|
|
33
|
+
return { success: false, reason: "필수 프로퍼티 없음" };
|
|
34
|
+
}
|
|
35
|
+
const viewCodesInit = viewCodesProp.getInitializer();
|
|
36
|
+
const permsInit = permsProp.getInitializer();
|
|
37
|
+
if (!isValidViewCodesInit(viewCodesInit) || !isValidPermsInit(permsInit)) {
|
|
38
|
+
return { success: false, reason: "초기화 값이 유효하지 않음" };
|
|
39
|
+
}
|
|
40
|
+
const permsCallExpr = permsInit;
|
|
41
|
+
const arrowFunction = getArrowFunction(permsCallExpr);
|
|
42
|
+
if (!arrowFunction) {
|
|
43
|
+
return { success: false, reason: "Arrow function을 찾을 수 없음" };
|
|
44
|
+
}
|
|
45
|
+
const callExpression = getPermsCallExpression(arrowFunction);
|
|
46
|
+
if (!callExpression) {
|
|
47
|
+
return { success: false, reason: "getViewPerms 호출을 찾을 수 없음" };
|
|
48
|
+
}
|
|
49
|
+
const args = callExpression.getArguments();
|
|
50
|
+
if (args.length !== 2) {
|
|
51
|
+
return { success: false, reason: "인자 개수가 맞지 않음" };
|
|
52
|
+
}
|
|
53
|
+
// 변환 실행
|
|
54
|
+
const viewCodesText = viewCodesInit.getText();
|
|
55
|
+
const permsText = args[1].getText();
|
|
56
|
+
permsProp.setInitializer(`usePermsSignal(${viewCodesText}, ${permsText})`);
|
|
57
|
+
viewCodesProp.remove();
|
|
58
|
+
return { success: true };
|
|
59
|
+
}
|
|
60
|
+
function getPropertyDeclaration(cls, name) {
|
|
61
|
+
const prop = cls.getInstanceProperty(name);
|
|
62
|
+
return prop?.getKind() === SyntaxKind.PropertyDeclaration ? prop : undefined;
|
|
63
|
+
}
|
|
64
|
+
function isValidViewCodesInit(init) {
|
|
65
|
+
return init?.getKind() === SyntaxKind.ArrayLiteralExpression;
|
|
66
|
+
}
|
|
67
|
+
function isValidPermsInit(init) {
|
|
68
|
+
return init?.getKind() === SyntaxKind.CallExpression;
|
|
69
|
+
}
|
|
70
|
+
function getArrowFunction(callExpr) {
|
|
71
|
+
const firstArg = callExpr.getArguments().first();
|
|
72
|
+
return firstArg?.getKind() === SyntaxKind.ArrowFunction ? firstArg : undefined;
|
|
73
|
+
}
|
|
74
|
+
function getPermsCallExpression(arrowFn) {
|
|
75
|
+
const body = arrowFn.getBody();
|
|
76
|
+
if (body.getKind() !== SyntaxKind.CallExpression) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const callExpr = body;
|
|
80
|
+
return callExpr.getText().includes("this._sdAppStructure.getViewPerms") ? callExpr : undefined;
|
|
81
|
+
}
|
|
82
|
+
function addImportIfNeeded(sourceFile) {
|
|
83
|
+
const sdAngularImport = sourceFile.getImportDeclaration((d) => d.getModuleSpecifierValue() === "@simplysm/sd-angular");
|
|
84
|
+
if (sdAngularImport) {
|
|
85
|
+
const hasImport = sdAngularImport
|
|
86
|
+
.getNamedImports()
|
|
87
|
+
.some((n) => n.getName() === "usePermsSignal");
|
|
88
|
+
if (!hasImport) {
|
|
89
|
+
sdAngularImport.addNamedImport("usePermsSignal");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
sourceFile.addImportDeclaration({
|
|
94
|
+
namedImports: ["usePermsSignal"],
|
|
95
|
+
moduleSpecifier: "@simplysm/sd-angular",
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=convert-to-use-perms-signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert-to-use-perms-signal.js","sourceRoot":"","sources":["../../src/fix/convert-to-use-perms-signal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function removeUnusedImports(): void;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { SyntaxKind } from "ts-morph";
|
|
3
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
+
export function removeUnusedImports() {
|
|
5
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
+
let totalChanged = 0;
|
|
7
|
+
for (const sourceFile of sourceFiles) {
|
|
8
|
+
let changed = false;
|
|
9
|
+
for (const importDecl of sourceFile.getImportDeclarations()) {
|
|
10
|
+
// ⚠️ 사이드이펙트 import는 유지
|
|
11
|
+
if (importDecl.getNamedImports().length === 0) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
// ⚙️ Named import 제거
|
|
15
|
+
for (const namedImport of importDecl.getNamedImports()) {
|
|
16
|
+
const name = namedImport.getName();
|
|
17
|
+
const used = sourceFile
|
|
18
|
+
.getDescendantsOfKind(SyntaxKind.Identifier)
|
|
19
|
+
.some((id) => id.getText() === name && id !== namedImport.getNameNode());
|
|
20
|
+
if (!used) {
|
|
21
|
+
namedImport.remove();
|
|
22
|
+
changed = true;
|
|
23
|
+
console.log(`[정리됨] ${sourceFile.getBaseName()} → 미사용 import: ${name}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// 모든 import가 제거된 경우 전체 import 선언 제거
|
|
27
|
+
if (importDecl.getNamedImports().length === 0) {
|
|
28
|
+
importDecl.remove();
|
|
29
|
+
changed = true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (changed) {
|
|
33
|
+
sourceFile.saveSync();
|
|
34
|
+
totalChanged++;
|
|
35
|
+
console.log(`[updated] ${sourceFile.getBaseName()} :: import 정리 완료`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
console.log(totalChanged > 0
|
|
39
|
+
? `\n[완료] 미사용 import 정리 완료 (총 ${totalChanged}개)`
|
|
40
|
+
: `[완료] 정리 대상 없음`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=remove-unused-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-unused-imports.js","sourceRoot":"","sources":["../../src/fix/remove-unused-imports.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAErE,MAAM,UAAU,mBAAmB;IACjC,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC;YAC5D,uBAAuB;YACvB,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,SAAS;YACX,CAAC;YAED,qBAAqB;YACrB,KAAK,MAAM,WAAW,IAAI,UAAU,CAAC,eAAe,EAAE,EAAE,CAAC;gBACvD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,UAAU;qBACpB,oBAAoB,CAAC,UAAU,CAAC,UAAU,CAAC;qBAC3C,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC3E,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,WAAW,CAAC,MAAM,EAAE,CAAC;oBACrB,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,WAAW,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtB,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,YAAY,GAAG,CAAC;QACd,CAAC,CAAC,8BAA8B,YAAY,IAAI;QAChD,CAAC,CAAC,eAAe,CACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function removeUnusedInjects(): void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import { SyntaxKind } from "ts-morph";
|
|
3
|
+
import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
|
|
4
|
+
export function removeUnusedInjects() {
|
|
5
|
+
const sourceFiles = getTsMorphSourceFiles();
|
|
6
|
+
let totalChanged = 0;
|
|
7
|
+
for (const sourceFile of sourceFiles) {
|
|
8
|
+
let changed = false;
|
|
9
|
+
for (const cls of sourceFile.getClasses()) {
|
|
10
|
+
const injectVars = cls
|
|
11
|
+
.getInstanceProperties()
|
|
12
|
+
.filter((p) => p.isKind(SyntaxKind.PropertyDeclaration) &&
|
|
13
|
+
p.getInitializer()?.isKind(SyntaxKind.CallExpression) &&
|
|
14
|
+
p.getInitializer().getText().startsWith("inject("));
|
|
15
|
+
for (const propDecl of injectVars) {
|
|
16
|
+
const name = propDecl.getName();
|
|
17
|
+
// 클래스 전체에서 해당 변수명이 참조되고 있는지 확인
|
|
18
|
+
const references = cls
|
|
19
|
+
.getDescendants()
|
|
20
|
+
.filter((desc) => desc.getText() === name && desc !== propDecl.getNameNode());
|
|
21
|
+
if (references.length === 0) {
|
|
22
|
+
propDecl.remove();
|
|
23
|
+
changed = true;
|
|
24
|
+
console.log(`[정리됨] ${sourceFile.getBaseName()} → 미사용 inject: ${name}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (changed) {
|
|
29
|
+
sourceFile.saveSync();
|
|
30
|
+
totalChanged++;
|
|
31
|
+
console.log(`[updated] ${sourceFile.getBaseName()} :: inject 정리 완료`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
console.log(totalChanged > 0
|
|
35
|
+
? `\n[완료] 미사용 inject 정리 완료 (총 ${totalChanged}개)`
|
|
36
|
+
: `[완료] 정리 대상 없음`);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=remove-unused-injects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-unused-injects.js","sourceRoot":"","sources":["../../src/fix/remove-unused-injects.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,qBAAqB,MAAM,kCAAkC,CAAC;AAErE,MAAM,UAAU,mBAAmB;IACjC,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,GAAG;iBACnB,qBAAqB,EAAE;iBACvB,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBACxC,CAAC,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC;gBACrD,CAAC,CAAC,cAAc,EAAG,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CACtD,CAAC;YAEJ,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAEhC,+BAA+B;gBAC/B,MAAM,UAAU,GAAG,GAAG;qBACnB,cAAc,EAAE;qBAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBAEhF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClB,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,WAAW,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtB,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,YAAY,GAAG,CAAC;QACd,CAAC,CAAC,8BAA8B,YAAY,IAAI;QAChD,CAAC,CAAC,eAAe,CACpB,CAAC;AACJ,CAAC"}
|