@simplysm/sd-cli 12.11.2 → 12.11.3

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.
@@ -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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"}
@@ -1 +1 @@
1
- export default function convertShowAsyncCall(): void;
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 convertShowAsyncCall() {
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,oBAAoB;IAC1C,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"}
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"}
@@ -18,6 +18,8 @@ import convertSdSheetBindingsInInlineTemplate from "./fix/convert-sd-sheet-bindi
18
18
  import convertSetupCumulateSelectedKeysToObjectParam from "./fix/convert-setup-cumulate-selected-keys-to-object-param";
19
19
  import prefixUnderscoreForAccessModifiers from "./fix/prefix-underscore-for-access-modifiers";
20
20
  import removeSdAngularSymbolNames from "./fix/remove-sd-angular-symbol-names";
21
+ import { convertExtendsSdPrintTemplateBaseToInterface } from "./fix/convert-extends-sd-print-template-base-to-interface";
22
+ import convertPrintParams from "./fix/convert-print-params";
21
23
  Error.stackTraceLimit = Infinity;
22
24
  EventEmitter.defaultMaxListeners = 0;
23
25
  await yargs(hideBin(process.argv))
@@ -207,6 +209,8 @@ await yargs(hideBin(process.argv))
207
209
  convertSetupCumulateSelectedKeysToObjectParam();
208
210
  convertExtendsSdModalBaseToInterface();
209
211
  convertModalShowParams();
212
+ convertExtendsSdPrintTemplateBaseToInterface();
213
+ convertPrintParams();
210
214
  //-- last
211
215
  removeSdAngularSymbolNames();
212
216
  convertSdAngularSymbolNames();
@@ -1 +1 @@
1
- {"version":3,"file":"sd-cli-entry.js","sourceRoot":"","sources":["../src/sd-cli-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-cli-entry.js","sourceRoot":"","sources":["../src/sd-cli-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "12.11.2",
3
+ "version": "12.11.3",
4
4
  "description": "심플리즘 패키지 - CLI",
5
5
  "author": "김석래",
6
6
  "repository": {
@@ -12,15 +12,15 @@
12
12
  "bin": "./dist/sd-cli.js",
13
13
  "type": "module",
14
14
  "dependencies": {
15
- "@angular/build": "^19.2.13",
16
- "@angular/compiler": "^19.2.13",
17
- "@angular/compiler-cli": "^19.2.13",
15
+ "@angular/build": "^19.2.14",
16
+ "@angular/compiler": "^19.2.14",
17
+ "@angular/compiler-cli": "^19.2.14",
18
18
  "@anthropic-ai/sdk": "^0.52.0",
19
19
  "@electron/rebuild": "^4.0.1",
20
- "@simplysm/sd-core-common": "12.11.2",
21
- "@simplysm/sd-core-node": "12.11.2",
22
- "@simplysm/sd-service-server": "12.11.2",
23
- "@simplysm/sd-storage": "12.11.2",
20
+ "@simplysm/sd-core-common": "12.11.3",
21
+ "@simplysm/sd-core-node": "12.11.3",
22
+ "@simplysm/sd-service-server": "12.11.3",
23
+ "@simplysm/sd-storage": "12.11.3",
24
24
  "browserslist": "^4.24.5",
25
25
  "cordova": "^12.0.0",
26
26
  "css-has-pseudo": "^7.0.2",
@@ -37,7 +37,7 @@
37
37
  "specifier-resolution-node": "^1.1.4",
38
38
  "ts-morph": "^26.0.0",
39
39
  "typescript": "~5.7.3",
40
- "yargs": "^17.7.2"
40
+ "yargs": "^18.0.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/xml2js": "^0.4.14",
@@ -0,0 +1,201 @@
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
+
7
+ export function convertExtendsSdPrintTemplateBaseToInterface() {
8
+ const sourceFiles = getTsMorphSourceFiles();
9
+
10
+ let totalChanged = 0;
11
+
12
+ for (const sourceFile of sourceFiles) {
13
+ let changed = false;
14
+ const relPath = path.basename(sourceFile.getFilePath());
15
+
16
+ const printClass = sourceFile.getClasses().find((classDecl) => {
17
+ const extendsClause = classDecl
18
+ .getHeritageClauses()
19
+ .find((h) => h.getToken() === SyntaxKind.ExtendsKeyword);
20
+ if (!extendsClause) return false;
21
+ const typeNodes = extendsClause.getTypeNodes();
22
+ return typeNodes.some((typeNode) =>
23
+ /^SdPrintTemplateBase\s*<[^>]+>$/.test(typeNode.getText()),
24
+ );
25
+ });
26
+
27
+ if (!printClass) continue;
28
+
29
+ const extendsClause = printClass
30
+ .getHeritageClauses()
31
+ .find((h) => h.getToken() === SyntaxKind.ExtendsKeyword);
32
+ if (!extendsClause) continue;
33
+ const typeNodes = extendsClause.getTypeNodes();
34
+ const match = typeNodes[0]?.getText().match(/^SdPrintTemplateBase\s*<([^>]+)>$/);
35
+ if (!match) continue;
36
+ const paramTypeName = match[1].trim();
37
+ const paramInterface = sourceFile.getInterface(paramTypeName);
38
+ if (!paramInterface) continue;
39
+ const props = paramInterface.getProperties();
40
+ const paramNames = props.map((p) => p.getName());
41
+
42
+ // 1. property/class 필드 추가
43
+ let lastPropIdx = 0;
44
+ for (const prop of props) {
45
+ const propName = prop.getName();
46
+ const isOptional = prop.hasQuestionToken();
47
+ const propType = prop.getTypeNode()?.getText() ?? "any";
48
+ const initializer = `input${isOptional ? "" : ".required"}<${propType}>()`;
49
+ if (!printClass.getProperty(propName)) {
50
+ printClass.insertProperty(lastPropIdx, { name: propName, initializer });
51
+ lastPropIdx++;
52
+ changed = true;
53
+ }
54
+ }
55
+
56
+ // 2. implements 추가
57
+ if (!printClass.getImplements().some(i => i.getText() === "ISdPrint")) {
58
+ printClass.addImplements("ISdPrint");
59
+ changed = true;
60
+ }
61
+
62
+ // 3. super() 삭제 (생성자)
63
+ const ctor = printClass.getConstructors().first();
64
+ if (ctor) {
65
+ ctor.getStatements().forEach((stmt) => {
66
+ if (stmt.getKind() === SyntaxKind.ExpressionStatement) {
67
+ const expr = stmt.asKind(SyntaxKind.ExpressionStatement)?.getExpression();
68
+ if (expr?.asKind(SyntaxKind.CallExpression)?.getExpression().getText() === "super") {
69
+ stmt.remove();
70
+ changed = true;
71
+ }
72
+ }
73
+ });
74
+ }
75
+
76
+ // 4. this.print() 전체 삭제
77
+ printClass
78
+ .getDescendantsOfKind(SyntaxKind.CallExpression)
79
+ .filter((expr) =>
80
+ expr.getExpression().getKind() === SyntaxKind.PropertyAccessExpression &&
81
+ expr.getExpression().getText() === "this.print",
82
+ )
83
+ .forEach((expr) => {
84
+ const parentStmt = expr.getFirstAncestorByKind(SyntaxKind.ExpressionStatement);
85
+ if (parentStmt) {
86
+ parentStmt.remove();
87
+ changed = true;
88
+ }
89
+ });
90
+
91
+ // 5. params().xxx → xxx() 및 this.params().xxx → this.xxx() AST 치환
92
+ printClass.forEachDescendant((node) => {
93
+ if (node.getKind() === SyntaxKind.PropertyAccessExpression) {
94
+ const propAccess = node.asKind(SyntaxKind.PropertyAccessExpression)!;
95
+ const propName = propAccess.getName();
96
+ if (!paramNames.includes(propName)) return;
97
+ const expr = propAccess.getExpression();
98
+
99
+ if (expr.getKind() === SyntaxKind.CallExpression) {
100
+ const callExpr = expr.asKind(SyntaxKind.CallExpression)!;
101
+ const innerExpr = callExpr.getExpression();
102
+
103
+ if (innerExpr.getKind() === SyntaxKind.Identifier && innerExpr.getText() === "params") {
104
+ propAccess.replaceWithText(`${propName}()`);
105
+ changed = true;
106
+ } else if (
107
+ innerExpr.getKind() === SyntaxKind.PropertyAccessExpression &&
108
+ innerExpr.asKind(SyntaxKind.PropertyAccessExpression)!.getExpression().getKind() === SyntaxKind.ThisKeyword &&
109
+ innerExpr.asKind(SyntaxKind.PropertyAccessExpression)!.getName() === "params"
110
+ ) {
111
+ propAccess.replaceWithText(`this.${propName}()`);
112
+ changed = true;
113
+ }
114
+ }
115
+ }
116
+ });
117
+
118
+ // 6. @Component template: params().xxx → xxx() 치환
119
+ const componentDecorator = printClass.getDecorator("Component");
120
+ if (componentDecorator) {
121
+ const arg = componentDecorator.getArguments().first();
122
+ if (arg?.getKind() === SyntaxKind.ObjectLiteralExpression) {
123
+ const tplProp = arg.asKind(SyntaxKind.ObjectLiteralExpression)!.getProperty("template");
124
+ if (
125
+ tplProp?.getKind() === SyntaxKind.PropertyAssignment &&
126
+ tplProp.asKind(SyntaxKind.PropertyAssignment)!.getInitializer()
127
+ ) {
128
+ const propAssign = tplProp.asKind(SyntaxKind.PropertyAssignment)!;
129
+ const init = propAssign.getInitializerOrThrow();
130
+ let tplText = init.getText();
131
+ let tplTextRaw = tplText;
132
+ for (const paramName of paramNames) {
133
+ const paramsPattern = new RegExp(`params\\(\\)\\.${paramName}\\b`, "g");
134
+ tplTextRaw = tplTextRaw.replace(paramsPattern, `${paramName}()`);
135
+ }
136
+ if (tplTextRaw !== tplText) {
137
+ propAssign.setInitializer(tplTextRaw);
138
+ changed = true;
139
+ }
140
+ }
141
+ }
142
+ }
143
+
144
+ // 7. import 정리
145
+ const sdAngularImport = sourceFile.getImportDeclaration(
146
+ d => d.getModuleSpecifierValue() === "@simplysm/sd-angular"
147
+ );
148
+ if (sdAngularImport) {
149
+ const namedImports = sdAngularImport.getNamedImports();
150
+ if (!namedImports.some(n => n.getName() === "ISdPrint")) {
151
+ sdAngularImport.addNamedImport("ISdPrint");
152
+ changed = true;
153
+ }
154
+ } else {
155
+ sourceFile.addImportDeclaration({
156
+ namedImports: ["ISdPrint"],
157
+ moduleSpecifier: "@simplysm/sd-angular"
158
+ });
159
+ changed = true;
160
+ }
161
+
162
+ const ngCoreImport = sourceFile.getImportDeclaration(
163
+ (d) => d.getModuleSpecifierValue() === "@angular/core",
164
+ );
165
+ if (ngCoreImport) {
166
+ const imports = ngCoreImport.getNamedImports().map((n) => n.getName());
167
+ if (!imports.includes("input")) {
168
+ ngCoreImport.addNamedImport("input");
169
+ changed = true;
170
+ }
171
+ } else {
172
+ sourceFile.addImportDeclaration({
173
+ namedImports: ["input"],
174
+ moduleSpecifier: "@angular/core",
175
+ });
176
+ changed = true;
177
+ }
178
+
179
+ // 8. interface 선언 삭제
180
+ paramInterface.remove();
181
+
182
+ // 9. extends 삭제
183
+ printClass.removeExtends();
184
+
185
+ // 10. 불필요한 import 제거
186
+ removeNamedImport(sourceFile, "@simplysm/sd-angular", "SdPrintTemplateBase");
187
+
188
+ // 11. 저장 및 로그 출력
189
+ if (changed) {
190
+ sourceFile.saveSync();
191
+ totalChanged++;
192
+ console.log(`[print-updated] ${relPath} :: 프린트 기반 변경 완료`);
193
+ }
194
+ }
195
+
196
+ if (totalChanged > 0) {
197
+ console.log(`\n[완료] 프린트 변환 완료 (총 ${totalChanged}개)`);
198
+ } else {
199
+ console.log(`[완료] 변환 대상 없음`);
200
+ }
201
+ }
@@ -1,7 +1,7 @@
1
1
  import { Node, SyntaxKind } from "ts-morph";
2
2
  import getTsMorphSourceFiles from "./core/get-ts-morph-source-files";
3
3
 
4
- export default function convertShowAsyncCall() {
4
+ export default function convertModalShowParams() {
5
5
  const sourceFiles = getTsMorphSourceFiles();
6
6
 
7
7
  for (const sourceFile of sourceFiles) {
@@ -0,0 +1,51 @@
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
+ }
@@ -13,13 +13,21 @@ import { SdCliLocalUpdate } from "./entry/sd-cli-local-update";
13
13
  import { SdCliPostinstall } from "./entry/sd-cli-postinstall";
14
14
  import { SdCliProject } from "./entry/sd-cli-project";
15
15
  import convertEcmaPrivateToTsPrivate from "./fix/convert-ecma-private-to-ts-private";
16
- import { convertExtendsSdModalBaseToInterface } from "./fix/convert-extends-sd-modal-base-to-interface";
16
+ import {
17
+ convertExtendsSdModalBaseToInterface
18
+ } from "./fix/convert-extends-sd-modal-base-to-interface";
17
19
  import convertModalShowParams from "./fix/convert-modal-show-params";
18
20
  import convertSdAngularSymbolNames from "./fix/convert-sd-angular-symbol-names";
19
- import convertSdSheetBindingsInInlineTemplate from "./fix/convert-sd-sheet-bindings-inInline-template";
20
- import convertSetupCumulateSelectedKeysToObjectParam from "./fix/convert-setup-cumulate-selected-keys-to-object-param";
21
+ import convertSdSheetBindingsInInlineTemplate
22
+ from "./fix/convert-sd-sheet-bindings-inInline-template";
23
+ import convertSetupCumulateSelectedKeysToObjectParam
24
+ from "./fix/convert-setup-cumulate-selected-keys-to-object-param";
21
25
  import prefixUnderscoreForAccessModifiers from "./fix/prefix-underscore-for-access-modifiers";
22
26
  import removeSdAngularSymbolNames from "./fix/remove-sd-angular-symbol-names";
27
+ import {
28
+ convertExtendsSdPrintTemplateBaseToInterface
29
+ } from "./fix/convert-extends-sd-print-template-base-to-interface";
30
+ import convertPrintParams from "./fix/convert-print-params";
23
31
 
24
32
  Error.stackTraceLimit = Infinity;
25
33
  EventEmitter.defaultMaxListeners = 0;
@@ -267,6 +275,8 @@ await yargs(hideBin(process.argv))
267
275
  convertSetupCumulateSelectedKeysToObjectParam();
268
276
  convertExtendsSdModalBaseToInterface();
269
277
  convertModalShowParams();
278
+ convertExtendsSdPrintTemplateBaseToInterface();
279
+ convertPrintParams();
270
280
 
271
281
  //-- last
272
282
  removeSdAngularSymbolNames();