@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.
Files changed (121) hide show
  1. package/dist/pkg-builders/SdBuildRunnerBase.d.ts +14 -0
  2. package/dist/pkg-builders/SdBuildRunnerBase.js +23 -0
  3. package/dist/pkg-builders/SdBuildRunnerBase.js.map +1 -0
  4. package/dist/pkg-builders/SdProjectBuildRunner.js +18 -14
  5. package/dist/pkg-builders/SdProjectBuildRunner.js.map +1 -1
  6. package/dist/pkg-builders/client/SdClientBuildRunner.d.ts +1 -1
  7. package/dist/pkg-builders/client/SdClientBuildRunner.js +17 -36
  8. package/dist/pkg-builders/client/SdClientBuildRunner.js.map +1 -1
  9. package/dist/pkg-builders/client/SdNgBundler.d.ts +10 -16
  10. package/dist/pkg-builders/client/SdNgBundler.js +59 -54
  11. package/dist/pkg-builders/client/SdNgBundler.js.map +1 -1
  12. package/dist/pkg-builders/client/createSdNgPlugin.d.ts +2 -11
  13. package/dist/pkg-builders/client/createSdNgPlugin.js +16 -25
  14. package/dist/pkg-builders/client/createSdNgPlugin.js.map +1 -1
  15. package/dist/pkg-builders/lib/SdJsLibBuildRunner.d.ts +1 -1
  16. package/dist/pkg-builders/lib/SdJsLibBuildRunner.js +5 -5
  17. package/dist/pkg-builders/lib/SdJsLibBuildRunner.js.map +1 -1
  18. package/dist/pkg-builders/lib/SdTsLibBuildRunner.d.ts +1 -1
  19. package/dist/pkg-builders/lib/SdTsLibBuildRunner.js +6 -6
  20. package/dist/pkg-builders/lib/SdTsLibBuildRunner.js.map +1 -1
  21. package/dist/pkg-builders/lib/SdTsLibBuilder.d.ts +3 -3
  22. package/dist/pkg-builders/lib/SdTsLibBuilder.js +6 -15
  23. package/dist/pkg-builders/lib/SdTsLibBuilder.js.map +1 -1
  24. package/dist/pkg-builders/server/SdServerBuildRunner.d.ts +1 -1
  25. package/dist/pkg-builders/server/SdServerBuildRunner.js +25 -42
  26. package/dist/pkg-builders/server/SdServerBuildRunner.js.map +1 -1
  27. package/dist/pkg-builders/server/SdServerBundler.d.ts +4 -10
  28. package/dist/pkg-builders/server/SdServerBundler.js +15 -22
  29. package/dist/pkg-builders/server/SdServerBundler.js.map +1 -1
  30. package/dist/pkg-builders/server/createSdServerPlugin.d.ts +2 -11
  31. package/dist/pkg-builders/server/createSdServerPlugin.js +10 -19
  32. package/dist/pkg-builders/server/createSdServerPlugin.js.map +1 -1
  33. package/dist/sd-cli-entry.js +1 -1
  34. package/dist/sd-cli-entry.js.map +1 -1
  35. package/dist/ts-compiler/ScopePathSet.js.map +1 -0
  36. package/dist/ts-compiler/SdDepAnalyzer.d.ts +1 -1
  37. package/dist/ts-compiler/SdStyleBundler.d.ts +8 -5
  38. package/dist/ts-compiler/SdStyleBundler.js +30 -15
  39. package/dist/ts-compiler/SdStyleBundler.js.map +1 -1
  40. package/dist/ts-compiler/SdTsCompiler.d.ts +2 -1
  41. package/dist/ts-compiler/SdTsCompiler.js +68 -53
  42. package/dist/ts-compiler/SdTsCompiler.js.map +1 -1
  43. package/dist/types/build/ISdTsCompilerOptions.d.ts +6 -9
  44. package/dist/types/worker/ISdBuildRunnerWorkerType.d.ts +4 -7
  45. package/dist/workers/build-runner.worker.js +4 -5
  46. package/dist/workers/build-runner.worker.js.map +1 -1
  47. package/package.json +5 -5
  48. package/src/pkg-builders/SdBuildRunnerBase.ts +36 -0
  49. package/src/pkg-builders/SdProjectBuildRunner.ts +24 -16
  50. package/src/pkg-builders/client/SdClientBuildRunner.ts +25 -46
  51. package/src/pkg-builders/client/SdNgBundler.ts +69 -73
  52. package/src/pkg-builders/client/createSdNgPlugin.ts +21 -35
  53. package/src/pkg-builders/lib/SdJsLibBuildRunner.ts +5 -5
  54. package/src/pkg-builders/lib/SdTsLibBuildRunner.ts +9 -13
  55. package/src/pkg-builders/lib/SdTsLibBuilder.ts +7 -23
  56. package/src/pkg-builders/server/SdServerBuildRunner.ts +32 -50
  57. package/src/pkg-builders/server/SdServerBundler.ts +16 -32
  58. package/src/pkg-builders/server/createSdServerPlugin.ts +15 -29
  59. package/src/sd-cli-entry.ts +1 -1
  60. package/src/ts-compiler/SdDepAnalyzer.ts +1 -1
  61. package/src/ts-compiler/SdStyleBundler.ts +34 -15
  62. package/src/ts-compiler/SdTsCompiler.ts +75 -63
  63. package/src/types/build/ISdTsCompilerOptions.ts +6 -9
  64. package/src/types/worker/ISdBuildRunnerWorkerType.ts +4 -9
  65. package/src/workers/build-runner.worker.ts +7 -16
  66. package/dist/fix/convert-extends-sd-modal-base-to-interface.d.ts +0 -1
  67. package/dist/fix/convert-extends-sd-modal-base-to-interface.js +0 -289
  68. package/dist/fix/convert-extends-sd-modal-base-to-interface.js.map +0 -1
  69. package/dist/fix/convert-extends-sd-print-template-base-to-interface.d.ts +0 -1
  70. package/dist/fix/convert-extends-sd-print-template-base-to-interface.js +0 -179
  71. package/dist/fix/convert-extends-sd-print-template-base-to-interface.js.map +0 -1
  72. package/dist/fix/convert-flat-pages-to-flat-menus.d.ts +0 -1
  73. package/dist/fix/convert-flat-pages-to-flat-menus.js +0 -68
  74. package/dist/fix/convert-flat-pages-to-flat-menus.js.map +0 -1
  75. package/dist/fix/convert-get-menus-to-usable-menus.d.ts +0 -1
  76. package/dist/fix/convert-get-menus-to-usable-menus.js +0 -48
  77. package/dist/fix/convert-get-menus-to-usable-menus.js.map +0 -1
  78. package/dist/fix/convert-modal-show-params.d.ts +0 -1
  79. package/dist/fix/convert-modal-show-params.js +0 -29
  80. package/dist/fix/convert-modal-show-params.js.map +0 -1
  81. package/dist/fix/convert-print-params.d.ts +0 -1
  82. package/dist/fix/convert-print-params.js +0 -37
  83. package/dist/fix/convert-print-params.js.map +0 -1
  84. package/dist/fix/convert-sd-icon-to-fa-icon.d.ts +0 -1
  85. package/dist/fix/convert-sd-icon-to-fa-icon.js +0 -80
  86. package/dist/fix/convert-sd-icon-to-fa-icon.js.map +0 -1
  87. package/dist/fix/convert-sd-sheet-bindings-safety.d.ts +0 -1
  88. package/dist/fix/convert-sd-sheet-bindings-safety.js +0 -57
  89. package/dist/fix/convert-sd-sheet-bindings-safety.js.map +0 -1
  90. package/dist/fix/convert-select-modal-button-to-select-button.d.ts +0 -1
  91. package/dist/fix/convert-select-modal-button-to-select-button.js +0 -64
  92. package/dist/fix/convert-select-modal-button-to-select-button.js.map +0 -1
  93. package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.d.ts +0 -1
  94. package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.js +0 -38
  95. package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.js.map +0 -1
  96. package/dist/fix/convert-to-use-perms-signal.d.ts +0 -1
  97. package/dist/fix/convert-to-use-perms-signal.js +0 -99
  98. package/dist/fix/convert-to-use-perms-signal.js.map +0 -1
  99. package/dist/fix/core/remove-named-import.d.ts +0 -1
  100. package/dist/fix/core/remove-named-import.js +0 -14
  101. package/dist/fix/core/remove-named-import.js.map +0 -1
  102. package/dist/pkg-builders/commons/ScopePathSet.js.map +0 -1
  103. package/dist/pkg-builders/commons/SdBuildRunnerBase.d.ts +0 -20
  104. package/dist/pkg-builders/commons/SdBuildRunnerBase.js +0 -30
  105. package/dist/pkg-builders/commons/SdBuildRunnerBase.js.map +0 -1
  106. package/src/fix/convert-extends-sd-modal-base-to-interface.ts +0 -324
  107. package/src/fix/convert-extends-sd-print-template-base-to-interface.ts +0 -201
  108. package/src/fix/convert-flat-pages-to-flat-menus.ts +0 -83
  109. package/src/fix/convert-get-menus-to-usable-menus.ts +0 -60
  110. package/src/fix/convert-modal-show-params.ts +0 -37
  111. package/src/fix/convert-print-params.ts +0 -51
  112. package/src/fix/convert-sd-icon-to-fa-icon.ts +0 -95
  113. package/src/fix/convert-sd-sheet-bindings-safety.ts +0 -73
  114. package/src/fix/convert-select-modal-button-to-select-button.ts +0 -91
  115. package/src/fix/convert-setup-cumulate-selected-keys-to-object-param.ts +0 -44
  116. package/src/fix/convert-to-use-perms-signal.ts +0 -133
  117. package/src/fix/core/remove-named-import.ts +0 -14
  118. package/src/pkg-builders/commons/SdBuildRunnerBase.ts +0 -47
  119. /package/dist/{pkg-builders/commons → ts-compiler}/ScopePathSet.d.ts +0 -0
  120. /package/dist/{pkg-builders/commons → ts-compiler}/ScopePathSet.js +0 -0
  121. /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
- }