@simplysm/sd-cli 12.13.23 → 12.13.36

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 (209) hide show
  1. package/dist/entry/SdCliAiCommand.d.ts +3 -0
  2. package/dist/entry/SdCliAiCommand.js +65 -0
  3. package/dist/entry/SdCliAiCommand.js.map +1 -0
  4. package/dist/entry/SdCliCordova.d.ts +16 -0
  5. package/dist/entry/SdCliCordova.js +398 -0
  6. package/dist/entry/SdCliCordova.js.map +1 -0
  7. package/dist/entry/SdCliElectron.d.ts +18 -0
  8. package/dist/entry/SdCliElectron.js +129 -0
  9. package/dist/entry/SdCliElectron.js.map +1 -0
  10. package/dist/entry/SdCliLocalUpdate.d.ts +11 -0
  11. package/dist/entry/SdCliLocalUpdate.js +84 -0
  12. package/dist/entry/SdCliLocalUpdate.js.map +1 -0
  13. package/dist/entry/SdCliPostinstall.d.ts +3 -0
  14. package/dist/entry/SdCliPostinstall.js +39 -0
  15. package/dist/entry/SdCliPostinstall.js.map +1 -0
  16. package/dist/entry/SdCliProject.d.ts +21 -0
  17. package/dist/entry/SdCliProject.js +302 -0
  18. package/dist/entry/SdCliProject.js.map +1 -0
  19. package/dist/fix/convert-extends-sd-modal-base-to-interface.d.ts +1 -0
  20. package/dist/fix/convert-extends-sd-modal-base-to-interface.js +289 -0
  21. package/dist/fix/convert-extends-sd-modal-base-to-interface.js.map +1 -0
  22. package/dist/fix/convert-extends-sd-print-template-base-to-interface.d.ts +1 -0
  23. package/dist/fix/convert-extends-sd-print-template-base-to-interface.js +179 -0
  24. package/dist/fix/convert-extends-sd-print-template-base-to-interface.js.map +1 -0
  25. package/dist/fix/convert-flat-pages-to-flat-menus.d.ts +1 -0
  26. package/dist/fix/convert-flat-pages-to-flat-menus.js +68 -0
  27. package/dist/fix/convert-flat-pages-to-flat-menus.js.map +1 -0
  28. package/dist/fix/convert-get-menus-to-usable-menus.d.ts +1 -0
  29. package/dist/fix/convert-get-menus-to-usable-menus.js +48 -0
  30. package/dist/fix/convert-get-menus-to-usable-menus.js.map +1 -0
  31. package/dist/fix/convert-modal-show-params.d.ts +1 -0
  32. package/dist/fix/convert-modal-show-params.js +29 -0
  33. package/dist/fix/convert-modal-show-params.js.map +1 -0
  34. package/dist/fix/convert-print-params.d.ts +1 -0
  35. package/dist/fix/convert-print-params.js +37 -0
  36. package/dist/fix/convert-print-params.js.map +1 -0
  37. package/dist/fix/convert-private-to-hash.d.ts +1 -0
  38. package/dist/fix/convert-private-to-hash.js +59 -0
  39. package/dist/fix/convert-private-to-hash.js.map +1 -0
  40. package/dist/fix/convert-sd-angular-symbol-names.d.ts +1 -0
  41. package/dist/fix/convert-sd-angular-symbol-names.js +23 -0
  42. package/dist/fix/convert-sd-angular-symbol-names.js.map +1 -0
  43. package/dist/fix/convert-sd-icon-to-fa-icon.d.ts +1 -0
  44. package/dist/fix/convert-sd-icon-to-fa-icon.js +80 -0
  45. package/dist/fix/convert-sd-icon-to-fa-icon.js.map +1 -0
  46. package/dist/fix/convert-sd-sheet-bindings-safety.d.ts +1 -0
  47. package/dist/fix/convert-sd-sheet-bindings-safety.js +57 -0
  48. package/dist/fix/convert-sd-sheet-bindings-safety.js.map +1 -0
  49. package/dist/fix/convert-select-modal-button-to-select-button.d.ts +1 -0
  50. package/dist/fix/convert-select-modal-button-to-select-button.js +64 -0
  51. package/dist/fix/convert-select-modal-button-to-select-button.js.map +1 -0
  52. package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.d.ts +1 -0
  53. package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.js +38 -0
  54. package/dist/fix/convert-setup-cumulate-selected-keys-to-object-param.js.map +1 -0
  55. package/dist/fix/convert-to-use-perms-signal.d.ts +1 -0
  56. package/dist/fix/convert-to-use-perms-signal.js +99 -0
  57. package/dist/fix/convert-to-use-perms-signal.js.map +1 -0
  58. package/dist/fix/core/convert-symbol.d.ts +1 -0
  59. package/dist/fix/core/convert-symbol.js +102 -0
  60. package/dist/fix/core/convert-symbol.js.map +1 -0
  61. package/dist/fix/core/get-ts-morph-source-files.d.ts +1 -0
  62. package/dist/fix/core/get-ts-morph-source-files.js +8 -0
  63. package/dist/fix/core/get-ts-morph-source-files.js.map +1 -0
  64. package/dist/fix/core/remove-named-import.d.ts +1 -0
  65. package/dist/fix/core/remove-named-import.js +14 -0
  66. package/dist/fix/core/remove-named-import.js.map +1 -0
  67. package/dist/fix/core/remove-symbol.d.ts +1 -0
  68. package/dist/fix/core/remove-symbol.js +76 -0
  69. package/dist/fix/core/remove-symbol.js.map +1 -0
  70. package/dist/fix/remove-sd-angular-symbol-names.d.ts +1 -0
  71. package/dist/fix/remove-sd-angular-symbol-names.js +9 -0
  72. package/dist/fix/remove-sd-angular-symbol-names.js.map +1 -0
  73. package/dist/fix/remove-unused-imports.d.ts +1 -0
  74. package/dist/fix/remove-unused-imports.js +42 -0
  75. package/dist/fix/remove-unused-imports.js.map +1 -0
  76. package/dist/fix/remove-unused-injects.d.ts +1 -0
  77. package/dist/fix/remove-unused-injects.js +38 -0
  78. package/dist/fix/remove-unused-injects.js.map +1 -0
  79. package/dist/fix/remove-unused-protected-readonly.d.ts +1 -0
  80. package/dist/fix/remove-unused-protected-readonly.js +58 -0
  81. package/dist/fix/remove-unused-protected-readonly.js.map +1 -0
  82. package/dist/pkg-builders/SdProjectBuildRunner.d.ts +18 -0
  83. package/dist/pkg-builders/SdProjectBuildRunner.js +235 -0
  84. package/dist/pkg-builders/SdProjectBuildRunner.js.map +1 -0
  85. package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.d.ts +9 -0
  86. package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.js +89 -0
  87. package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.js.map +1 -0
  88. package/dist/pkg-builders/client/SdClientBuildRunner.d.ts +8 -0
  89. package/dist/pkg-builders/client/SdClientBuildRunner.js +115 -0
  90. package/dist/pkg-builders/client/SdClientBuildRunner.js.map +1 -0
  91. package/dist/pkg-builders/client/SdNgBundler.d.ts +23 -0
  92. package/dist/pkg-builders/client/SdNgBundler.js +490 -0
  93. package/dist/pkg-builders/client/SdNgBundler.js.map +1 -0
  94. package/dist/pkg-builders/client/SdNgBundlerContext.d.ts +22 -0
  95. package/dist/pkg-builders/client/SdNgBundlerContext.js +90 -0
  96. package/dist/pkg-builders/client/SdNgBundlerContext.js.map +1 -0
  97. package/dist/pkg-builders/client/createSdNgPlugin.d.ts +14 -0
  98. package/dist/pkg-builders/client/createSdNgPlugin.js +143 -0
  99. package/dist/pkg-builders/client/createSdNgPlugin.js.map +1 -0
  100. package/dist/pkg-builders/commons/ScopePathSet.d.ts +7 -0
  101. package/dist/pkg-builders/commons/ScopePathSet.js +14 -0
  102. package/dist/pkg-builders/commons/ScopePathSet.js.map +1 -0
  103. package/dist/pkg-builders/commons/SdBuildRunnerBase.d.ts +20 -0
  104. package/dist/pkg-builders/commons/SdBuildRunnerBase.js +30 -0
  105. package/dist/pkg-builders/commons/SdBuildRunnerBase.js.map +1 -0
  106. package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.d.ts +9 -0
  107. package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.js +134 -0
  108. package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.js.map +1 -0
  109. package/dist/pkg-builders/lib/SdCliIndexFileGenerator.d.ts +10 -0
  110. package/dist/pkg-builders/lib/SdCliIndexFileGenerator.js +61 -0
  111. package/dist/pkg-builders/lib/SdCliIndexFileGenerator.js.map +1 -0
  112. package/dist/pkg-builders/lib/SdJsLibBuildRunner.d.ts +8 -0
  113. package/dist/pkg-builders/lib/SdJsLibBuildRunner.js +45 -0
  114. package/dist/pkg-builders/lib/SdJsLibBuildRunner.js.map +1 -0
  115. package/dist/pkg-builders/lib/SdTsLibBuildRunner.d.ts +8 -0
  116. package/dist/pkg-builders/lib/SdTsLibBuildRunner.js +36 -0
  117. package/dist/pkg-builders/lib/SdTsLibBuildRunner.js.map +1 -0
  118. package/dist/pkg-builders/lib/SdTsLibBuilder.d.ts +9 -0
  119. package/dist/pkg-builders/lib/SdTsLibBuilder.js +65 -0
  120. package/dist/pkg-builders/lib/SdTsLibBuilder.js.map +1 -0
  121. package/dist/pkg-builders/server/SdServerBuildRunner.d.ts +8 -0
  122. package/dist/pkg-builders/server/SdServerBuildRunner.js +249 -0
  123. package/dist/pkg-builders/server/SdServerBuildRunner.js.map +1 -0
  124. package/dist/pkg-builders/server/SdServerBundler.d.ts +18 -0
  125. package/dist/pkg-builders/server/SdServerBundler.js +153 -0
  126. package/dist/pkg-builders/server/SdServerBundler.js.map +1 -0
  127. package/dist/pkg-builders/server/createSdServerPlugin.d.ts +14 -0
  128. package/dist/pkg-builders/server/createSdServerPlugin.js +63 -0
  129. package/dist/pkg-builders/server/createSdServerPlugin.js.map +1 -0
  130. package/dist/sd-cli-entry.d.ts +2 -0
  131. package/dist/sd-cli-entry.js +257 -0
  132. package/dist/sd-cli-entry.js.map +1 -0
  133. package/dist/sd-cli.d.ts +2 -0
  134. package/dist/sd-cli.js +85 -0
  135. package/dist/sd-cli.js.map +1 -0
  136. package/dist/ts-compiler/SdDepAnalyzer.d.ts +15 -0
  137. package/dist/ts-compiler/SdDepAnalyzer.js +300 -0
  138. package/dist/ts-compiler/SdDepAnalyzer.js.map +1 -0
  139. package/dist/ts-compiler/SdDepCache.d.ts +33 -0
  140. package/dist/ts-compiler/SdDepCache.js +247 -0
  141. package/dist/ts-compiler/SdDepCache.js.map +1 -0
  142. package/dist/ts-compiler/SdStyleBundler.d.ts +16 -0
  143. package/dist/ts-compiler/SdStyleBundler.js +118 -0
  144. package/dist/ts-compiler/SdStyleBundler.js.map +1 -0
  145. package/dist/ts-compiler/SdTsCompiler.d.ts +9 -0
  146. package/dist/ts-compiler/SdTsCompiler.js +407 -0
  147. package/dist/ts-compiler/SdTsCompiler.js.map +1 -0
  148. package/dist/types/build/ISdBuildMessage.d.ts +10 -0
  149. package/dist/types/build/ISdBuildMessage.js +2 -0
  150. package/dist/types/build/ISdBuildMessage.js.map +1 -0
  151. package/dist/types/build/ISdBuildResult.d.ts +8 -0
  152. package/dist/types/build/ISdBuildResult.js +2 -0
  153. package/dist/types/build/ISdBuildResult.js.map +1 -0
  154. package/dist/types/build/ISdTsCompilerOptions.d.ts +13 -0
  155. package/dist/types/build/ISdTsCompilerOptions.js +2 -0
  156. package/dist/types/build/ISdTsCompilerOptions.js.map +1 -0
  157. package/dist/types/build/ISdTsCompilerResult.d.ts +14 -0
  158. package/dist/types/build/ISdTsCompilerResult.js +2 -0
  159. package/dist/types/build/ISdTsCompilerResult.js.map +1 -0
  160. package/dist/types/build/TStylesheetBundlingResult.d.ts +12 -0
  161. package/dist/types/build/TStylesheetBundlingResult.js +2 -0
  162. package/dist/types/build/TStylesheetBundlingResult.js.map +1 -0
  163. package/dist/types/common-config/INpmConfig.d.ts +17 -0
  164. package/dist/types/common-config/INpmConfig.js +2 -0
  165. package/dist/types/common-config/INpmConfig.js.map +1 -0
  166. package/dist/types/common-config/ITsConfig.d.ts +7 -0
  167. package/dist/types/common-config/ITsConfig.js +2 -0
  168. package/dist/types/common-config/ITsConfig.js.map +1 -0
  169. package/dist/types/config/ISdProjectConfig.d.ts +108 -0
  170. package/dist/types/config/ISdProjectConfig.js +2 -0
  171. package/dist/types/config/ISdProjectConfig.js.map +1 -0
  172. package/dist/types/plugin/ISdCliNgPluginResultCache.d.ts +8 -0
  173. package/dist/types/plugin/ISdCliNgPluginResultCache.js +2 -0
  174. package/dist/types/plugin/ISdCliNgPluginResultCache.js.map +1 -0
  175. package/dist/types/plugin/ISdCliServerPluginResultCache.d.ts +8 -0
  176. package/dist/types/plugin/ISdCliServerPluginResultCache.js +2 -0
  177. package/dist/types/plugin/ISdCliServerPluginResultCache.js.map +1 -0
  178. package/dist/types/worker/ISdBuildRunnerWorkerType.d.ts +23 -0
  179. package/dist/types/worker/ISdBuildRunnerWorkerType.js +2 -0
  180. package/dist/types/worker/ISdBuildRunnerWorkerType.js.map +1 -0
  181. package/dist/types/worker/IServerWorkerType.d.ts +17 -0
  182. package/dist/types/worker/IServerWorkerType.js +2 -0
  183. package/dist/types/worker/IServerWorkerType.js.map +1 -0
  184. package/dist/utils/SdCliConvertMessageUtils.d.ts +21 -0
  185. package/dist/utils/SdCliConvertMessageUtils.js +139 -0
  186. package/dist/utils/SdCliConvertMessageUtils.js.map +1 -0
  187. package/dist/utils/SdCliPerformanceTimer.d.ts +9 -0
  188. package/dist/utils/SdCliPerformanceTimer.js +51 -0
  189. package/dist/utils/SdCliPerformanceTimer.js.map +1 -0
  190. package/dist/utils/loadProjConfAsync.d.ts +5 -0
  191. package/dist/utils/loadProjConfAsync.js +8 -0
  192. package/dist/utils/loadProjConfAsync.js.map +1 -0
  193. package/dist/workers/build-runner.worker.d.ts +1 -0
  194. package/dist/workers/build-runner.worker.js +39 -0
  195. package/dist/workers/build-runner.worker.js.map +1 -0
  196. package/dist/workers/server.worker.d.ts +1 -0
  197. package/dist/workers/server.worker.js +50 -0
  198. package/dist/workers/server.worker.js.map +1 -0
  199. package/package.json +5 -5
  200. package/src/fix/core/convert-symbol.ts +35 -16
  201. package/src/fix/remove-unused-protected-readonly.ts +7 -1
  202. package/src/pkg-builders/SdProjectBuildRunner.ts +8 -1
  203. package/src/pkg-builders/commons/SdBuildRunnerBase.ts +1 -1
  204. package/src/pkg-builders/lib/SdTsLibBuilder.ts +0 -1
  205. package/src/sd-cli.ts +8 -8
  206. package/src/ts-compiler/SdTsCompiler.ts +26 -31
  207. package/src/types/build/ISdTsCompilerOptions.ts +0 -1
  208. package/src/types/worker/ISdBuildRunnerWorkerType.ts +1 -1
  209. package/src/workers/build-runner.worker.ts +1 -1
@@ -0,0 +1,129 @@
1
+ import { FsUtils, SdLogger, SdProcess } from "@simplysm/sd-core-node";
2
+ import fs from "fs";
3
+ import os from "os";
4
+ import path from "path";
5
+ import { loadProjConfAsync } from "../utils/loadProjConfAsync";
6
+ export class SdCliElectron {
7
+ static #logger = SdLogger.get(["simplysm", "sd-cli", "SdCliElectron"]);
8
+ static async runAsync(opt) {
9
+ this.#logger.log("설정 가져오기...");
10
+ const { pkgPath, electronPath, electronConfig } = await this.#loadDevConfig(opt);
11
+ this.#logger.log("준비...");
12
+ await this.#prepareAsync({ pkgPath, electronPath, electronConfig });
13
+ this.#logger.log("실행...");
14
+ await SdProcess.spawnAsync("npx", ["electron", "."], { cwd: electronPath, showMessage: true });
15
+ }
16
+ static async buildForDevAsync(opt) {
17
+ this.#logger.log("설정 가져오기...");
18
+ const { pkgPath, electronPath, electronConfig } = await this.#loadDevConfig(opt);
19
+ this.#logger.log("준비...");
20
+ const { npmConfig } = await this.#prepareAsync({ pkgPath, electronPath, electronConfig });
21
+ this.#logger.log("빌드...");
22
+ const electronDistPath = path.resolve(pkgPath, ".electron/dist");
23
+ await this.#buildAsync({ pkgPath, electronPath, electronDistPath, npmConfig, electronConfig });
24
+ }
25
+ static async buildAsync(opt) {
26
+ this.#logger.log("준비...");
27
+ const electronPath = path.resolve(opt.pkgPath, ".electron/src");
28
+ const { npmConfig } = await this.#prepareAsync({ ...opt, electronPath });
29
+ this.#logger.log("빌드...");
30
+ const electronDistPath = path.resolve(opt.pkgPath, ".electron/dist");
31
+ await this.#buildAsync({
32
+ pkgPath: opt.pkgPath,
33
+ electronPath,
34
+ electronDistPath,
35
+ npmConfig,
36
+ electronConfig: opt.electronConfig,
37
+ });
38
+ }
39
+ static async #loadDevConfig(opt) {
40
+ const projConf = await loadProjConfAsync(process.cwd(), true, opt);
41
+ const pkgConf = projConf.packages[opt.package];
42
+ if (pkgConf?.type !== "client" || pkgConf.builder?.electron === undefined) {
43
+ throw new Error();
44
+ }
45
+ const pkgPath = path.resolve(process.cwd(), `packages/${opt.package}`);
46
+ const electronPath = path.resolve(pkgPath, "dist/electron");
47
+ return {
48
+ pkgPath,
49
+ electronPath,
50
+ electronConfig: pkgConf.builder.electron,
51
+ };
52
+ }
53
+ static async #prepareAsync(opt) {
54
+ const npmConfig = FsUtils.readJson(path.resolve(opt.pkgPath, `package.json`));
55
+ const reinstallPkgNames = opt.electronConfig.reinstallDependencies ?? [];
56
+ FsUtils.writeJson(path.resolve(opt.electronPath, `package.json`), {
57
+ name: npmConfig.name.replace(/^@/, "").replace(/\//, "-"),
58
+ version: npmConfig.version,
59
+ description: npmConfig.description,
60
+ main: "electron-main.js",
61
+ ...(opt.electronConfig.postInstallScript !== undefined
62
+ ? {
63
+ scripts: {
64
+ postinstall: opt.electronConfig.postInstallScript,
65
+ },
66
+ }
67
+ : {}),
68
+ dependencies: reinstallPkgNames.toObject((item) => item, (item) => npmConfig.dependencies[item]),
69
+ });
70
+ await SdProcess.spawnAsync("npm", ["install"], { cwd: opt.electronPath, showMessage: true });
71
+ await SdProcess.spawnAsync("npx", ["electron-rebuild"], {
72
+ cwd: opt.electronPath,
73
+ showMessage: true,
74
+ });
75
+ return { npmConfig };
76
+ }
77
+ static async #buildAsync(opt) {
78
+ if (!this.#canCreateSymlink()) {
79
+ throw new Error("'Electron 빌드'를 위해서는 'Symlink 생성' 권한이 필요합니다. 윈도우의 개발자모드를 활성화하세요.");
80
+ }
81
+ const electronConfig = {
82
+ appId: opt.electronConfig.appId,
83
+ productName: opt.npmConfig.description,
84
+ asar: false,
85
+ win: {
86
+ target: opt.electronConfig.portable ? "portable" : "nsis",
87
+ },
88
+ nsis: opt.electronConfig.nsisOptions ?? {},
89
+ directories: {
90
+ app: opt.electronPath,
91
+ output: opt.electronDistPath,
92
+ },
93
+ ...(opt.electronConfig.installerIcon !== undefined
94
+ ? {
95
+ icon: path.resolve(opt.pkgPath, opt.electronConfig.installerIcon),
96
+ }
97
+ : {}),
98
+ removePackageScripts: false,
99
+ npmRebuild: false,
100
+ forceCodeSigning: false,
101
+ };
102
+ const configFilePath = path.resolve(opt.pkgPath, ".electron/builder-config.json");
103
+ FsUtils.writeJson(configFilePath, electronConfig);
104
+ await SdProcess.spawnAsync("npx", ["electron-builder", "--win", "--config", configFilePath]);
105
+ FsUtils.copy(path.resolve(opt.electronDistPath, `${opt.npmConfig.description} ${opt.electronConfig.portable ? "" : "Setup "}${opt.npmConfig.version}.exe`), path.resolve(opt.pkgPath, `dist/electron/${opt.npmConfig.description}${opt.electronConfig.portable ? "-portable" : ""}-latest.exe`));
106
+ FsUtils.copy(path.resolve(opt.electronDistPath, `${opt.npmConfig.description} ${opt.electronConfig.portable ? "" : "Setup "}${opt.npmConfig.version}.exe`), path.resolve(opt.pkgPath, `dist/electron/updates/${opt.npmConfig.version}.exe`));
107
+ }
108
+ static #canCreateSymlink() {
109
+ const tmpDir = os.tmpdir();
110
+ const testTarget = path.join(tmpDir, "symlink-test-target.txt");
111
+ const testLink = path.join(tmpDir, "symlink-test-link.txt");
112
+ try {
113
+ // 대상 파일 생성
114
+ fs.writeFileSync(testTarget, "test");
115
+ // symlink 시도
116
+ fs.symlinkSync(testTarget, testLink, "file");
117
+ // symlink 성공 여부 확인
118
+ const isSymlink = fs.lstatSync(testLink).isSymbolicLink();
119
+ // 정리
120
+ fs.unlinkSync(testLink);
121
+ fs.unlinkSync(testTarget);
122
+ return isSymlink;
123
+ }
124
+ catch {
125
+ return false;
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=SdCliElectron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdCliElectron.js","sourceRoot":"","sources":["../../src/entry/SdCliElectron.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class SdCliLocalUpdate {
2
+ #private;
3
+ static runAsync(opt: {
4
+ config: string;
5
+ options?: string[];
6
+ }): Promise<void>;
7
+ static watchAsync(opt: {
8
+ config: string;
9
+ options?: string[];
10
+ }): Promise<void>;
11
+ }
@@ -0,0 +1,84 @@
1
+ import { FsUtils, PathUtils, SdFsWatcher, SdLogger } from "@simplysm/sd-core-node";
2
+ import path from "path";
3
+ import { loadProjConfAsync } from "../utils/loadProjConfAsync";
4
+ export class SdCliLocalUpdate {
5
+ static async runAsync(opt) {
6
+ const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliLocalUpdate", "runAsync"]);
7
+ logger.debug("프로젝트 설정 가져오기...");
8
+ const projConf = await loadProjConfAsync(process.cwd(), true, opt);
9
+ if (!projConf.localUpdates)
10
+ return;
11
+ const updatePathInfos = this.#getUpdatePathInfos(projConf.localUpdates);
12
+ logger.debug("로컬 업데이트 구성");
13
+ logger.log("로컬 라이브러리 업데이트 시작...");
14
+ for (const updatePathInfo of updatePathInfos) {
15
+ if (!FsUtils.exists(updatePathInfo.source)) {
16
+ logger.warn(`소스경로를 찾을 수 없어 무시됩니다(${updatePathInfo.source})`);
17
+ return;
18
+ }
19
+ // 소스경로에서 대상경로로 파일 복사
20
+ FsUtils.copy(updatePathInfo.source, updatePathInfo.target, (src) => {
21
+ return !src.includes("node_modules") && !src.endsWith("package.json");
22
+ });
23
+ }
24
+ logger.info("로컬 라이브러리 업데이트 완료");
25
+ }
26
+ static async watchAsync(opt) {
27
+ const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliLocalUpdate", "watchAsync"]);
28
+ logger.debug("프로젝트 설정 가져오기...");
29
+ const projConf = await loadProjConfAsync(process.cwd(), true, opt);
30
+ if (!projConf.localUpdates)
31
+ return;
32
+ const updatePathInfos = this.#getUpdatePathInfos(projConf.localUpdates);
33
+ logger.debug("로컬 업데이트 구성");
34
+ const watcher = SdFsWatcher.watch(updatePathInfos.map((item) => item.source));
35
+ watcher.onChange({ delay: 1000 }, (changedInfos) => {
36
+ const changedFileInfos = changedInfos.filter((item) => ["add", "change", "unlink"].includes(item.event));
37
+ if (changedFileInfos.length === 0)
38
+ return;
39
+ logger.log("로컬 라이브러리 변경감지...");
40
+ for (const changedFileInfo of changedFileInfos) {
41
+ for (const updatePathInfo of updatePathInfos) {
42
+ if (!PathUtils.isChildPath(changedFileInfo.path, updatePathInfo.source))
43
+ continue;
44
+ const sourceRelPath = path.relative(updatePathInfo.source, changedFileInfo.path);
45
+ const targetFilePath = path.resolve(updatePathInfo.target, sourceRelPath);
46
+ if (changedFileInfo.event === "unlink") {
47
+ logger.debug(`변경파일감지(삭제): ${targetFilePath}`);
48
+ FsUtils.remove(targetFilePath);
49
+ }
50
+ else {
51
+ logger.debug(`변경파일감지(복사): ${changedFileInfo.path} => ${targetFilePath}`);
52
+ FsUtils.copy(changedFileInfo.path, targetFilePath);
53
+ }
54
+ }
55
+ }
56
+ logger.info("로컬 라이브러리 복사 완료");
57
+ });
58
+ }
59
+ static #getUpdatePathInfos(record) {
60
+ const result = [];
61
+ for (const pkgGlobPath of Object.keys(record)) {
62
+ // "node_modules'에서 로컬업데이트 설정에 맞는 패키지를 "glob"하여 대상 패키지경로 목록 가져오기
63
+ const targetPaths = [
64
+ ...FsUtils.glob(path.resolve(process.cwd(), "node_modules", pkgGlobPath)),
65
+ ...FsUtils.glob(path.resolve(process.cwd(), "packages", "*", "node_modules", pkgGlobPath)),
66
+ ];
67
+ result.push(...targetPaths
68
+ .map((targetPath) => {
69
+ // 대상의 명칭 추출
70
+ const regexpText = pkgGlobPath.replace(/[\\/.*]/g, (item) => item === "/" ? "[\\\\\\/]" : item === "." ? "\\." : item === "*" ? "(.*)" : item);
71
+ const targetNameMatch = new RegExp(regexpText).exec(targetPath);
72
+ if (!targetNameMatch || typeof targetNameMatch[1] === "undefined")
73
+ return undefined;
74
+ const targetName = targetNameMatch[1];
75
+ // 가져올 소스 경로 추출
76
+ const sourcePath = path.resolve(record[pkgGlobPath].replace(/\*/g, targetName));
77
+ return { source: sourcePath, target: targetPath };
78
+ })
79
+ .filterExists());
80
+ }
81
+ return result;
82
+ }
83
+ }
84
+ //# sourceMappingURL=SdCliLocalUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdCliLocalUpdate.js","sourceRoot":"","sources":["../../src/entry/SdCliLocalUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAA2C;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC;QAEpF,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,YAAY;YAAE,OAAO;QAEnC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE3B,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,uBAAuB,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,qBAAqB;YACrB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAA2C;QACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;QAEtF,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,YAAY;YAAE,OAAO;QAEnC,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE3B,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE;YACjD,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACpD,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CACjD,CAAC;YACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE1C,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAE/B,KAAK,MAAM,eAAe,IAAI,gBAAgB,EAAE,CAAC;gBAC/C,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;oBAC7C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;wBAAE,SAAS;oBAElF,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;oBACjF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBAE1E,IAAI,eAAe,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACvC,MAAM,CAAC,KAAK,CAAC,eAAe,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACjC,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,KAAK,CAAC,eAAe,eAAe,CAAC,IAAI,OAAO,cAAc,EAAE,CAAC,CAAC;wBACzE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,MAA8B;QACvD,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,gEAAgE;YAChE,MAAM,WAAW,GAAG;gBAClB,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;gBACzE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;aAC3F,CAAC;YAEF,MAAM,CAAC,IAAI,CACT,GAAG,WAAW;iBACX,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBAClB,YAAY;gBACZ,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAC1D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACjF,CAAC;gBACF,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAChE,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,WAAW;oBAAE,OAAO,SAAS,CAAC;gBACpF,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAEtC,eAAe;gBACf,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;gBAChF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACpD,CAAC,CAAC;iBACD,YAAY,EAAE,CAClB,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export declare class SdCliPostinstall {
2
+ static run(): void;
3
+ }
@@ -0,0 +1,39 @@
1
+ import { fileURLToPath } from "url";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ export class SdCliPostinstall {
5
+ static run() {
6
+ {
7
+ const filePath = fileURLToPath(import.meta.resolve("@angular/build/package.json"));
8
+ const contents = JSON.parse(fs.readFileSync(filePath).toString());
9
+ delete contents.exports;
10
+ fs.writeFileSync(filePath, JSON.stringify(contents, undefined, 2));
11
+ }
12
+ {
13
+ const fortawesomeDirPath = path.resolve(path.dirname(fileURLToPath(import.meta.resolve("@fortawesome/fontawesome-svg-core/package.json"))), "..");
14
+ const iconsDirNames = fs
15
+ .readdirSync(fortawesomeDirPath)
16
+ .filter((item) => item.endsWith("-icons"));
17
+ for (const iconsDirName of iconsDirNames) {
18
+ const dirPath = path.resolve(fortawesomeDirPath, iconsDirName);
19
+ const contents = JSON.parse(fs.readFileSync(path.resolve(dirPath, "package.json")).toString());
20
+ contents.exports = {
21
+ "./package.json": "./package.json",
22
+ "./*": "./*.js",
23
+ };
24
+ fs.writeFileSync(path.resolve(dirPath, "package.json"), JSON.stringify(contents, undefined, 2));
25
+ fs.rmSync(path.resolve(dirPath, "index.d.ts"), { force: true });
26
+ fs.rmSync(path.resolve(dirPath, "index.js"), { force: true });
27
+ fs.rmSync(path.resolve(dirPath, "index.mjs"), { force: true });
28
+ }
29
+ }
30
+ {
31
+ const filePath = fileURLToPath(import.meta.resolve("cordova/bin/cordova"));
32
+ let contents = fs.readFileSync(filePath).toString();
33
+ contents = contents.replace("process.exitCode = err.code || 1;", "process.exitCode = 1;");
34
+ contents = contents.replace("console.error(err.message);", "console.error(err);");
35
+ fs.writeFileSync(filePath, contents);
36
+ }
37
+ }
38
+ }
39
+ //# sourceMappingURL=SdCliPostinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdCliPostinstall.js","sourceRoot":"","sources":["../../src/entry/SdCliPostinstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,GAAG;QACR,CAAC;YACC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClE,OAAO,QAAQ,CAAC,OAAO,CAAC;YACxB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,CAAC;YACC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CACrC,IAAI,CAAC,OAAO,CACV,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC,CACrF,EACD,IAAI,CACL,CAAC;YACF,MAAM,aAAa,GAAG,EAAE;iBACrB,WAAW,CAAC,kBAAkB,CAAC;iBAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;gBAE/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CACzB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAClE,CAAC;gBACF,QAAQ,CAAC,OAAO,GAAG;oBACjB,gBAAgB,EAAE,gBAAgB;oBAClC,KAAK,EAAE,QAAQ;iBAChB,CAAC;gBACF,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CACvC,CAAC;gBACF,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,CAAC;YACC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC3E,IAAI,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,mCAAmC,EAAE,uBAAuB,CAAC,CAAC;YAC1F,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,CAAC;YAClF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ export declare class SdCliProject {
2
+ #private;
3
+ static watchAsync(opt: {
4
+ config: string;
5
+ options?: string[];
6
+ packages?: string[];
7
+ emitOnly?: boolean;
8
+ noEmit?: boolean;
9
+ }): Promise<void>;
10
+ static buildAsync(opt: {
11
+ config: string;
12
+ options?: string[];
13
+ packages?: string[];
14
+ }): Promise<void>;
15
+ static publishAsync(opt: {
16
+ config: string;
17
+ options?: string[];
18
+ packages?: string[];
19
+ noBuild?: boolean;
20
+ }): Promise<void>;
21
+ }
@@ -0,0 +1,302 @@
1
+ import path from "path";
2
+ import { FsUtils, PathUtils, SdLogger, SdProcess } from "@simplysm/sd-core-node";
3
+ import semver from "semver";
4
+ import { NeverEntryError, StringUtils, Wait } from "@simplysm/sd-core-common";
5
+ import { SdStorage } from "@simplysm/sd-storage";
6
+ import { SdCliLocalUpdate } from "./SdCliLocalUpdate";
7
+ import { SdCliConvertMessageUtils } from "../utils/SdCliConvertMessageUtils";
8
+ import { loadProjConfAsync } from "../utils/loadProjConfAsync";
9
+ import { SdProjectBuildRunner } from "../pkg-builders/SdProjectBuildRunner";
10
+ export class SdCliProject {
11
+ static async watchAsync(opt) {
12
+ const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliProject", "watchAsync"]);
13
+ logger.debug("프로젝트 설정 가져오기...");
14
+ const projConf = await loadProjConfAsync(process.cwd(), true, opt);
15
+ if (!opt.noEmit) {
16
+ if (projConf.localUpdates) {
17
+ logger.debug("로컬 라이브러리 업데이트 변경감지 시작...");
18
+ await SdCliLocalUpdate.watchAsync(opt);
19
+ }
20
+ }
21
+ logger.debug("프로젝트 package.json 가져오기...");
22
+ const projNpmConf = (await FsUtils.readJsonAsync(path.resolve(process.cwd(), "package.json")));
23
+ logger.debug("패키지 목록 구성...");
24
+ if (!projNpmConf.workspaces) {
25
+ throw new Error("프로젝트 package.json에 workspaces가 설정되어있지 않습니다.");
26
+ }
27
+ const allPkgPaths = (await projNpmConf.workspaces.mapManyAsync(async (item) => await FsUtils.globAsync(item)))
28
+ .filter((item) => !item.includes("."))
29
+ .map((item) => PathUtils.norm(item));
30
+ let pkgPaths = allPkgPaths.filter((pkgPath) => path.basename(pkgPath) in projConf.packages);
31
+ if (opt.packages) {
32
+ pkgPaths = pkgPaths.filter((pkgPath) => opt.packages.includes(path.basename(pkgPath)));
33
+ }
34
+ logger.debug("패키지 존재 확인...");
35
+ const notExistsPkgs = Object.keys(projConf.packages).filter((pkgConfKey) => allPkgPaths.every((pkgPath) => path.basename(pkgPath) !== pkgConfKey));
36
+ if (notExistsPkgs.length > 0) {
37
+ throw new Error("패키지를 찾을 수 없습니다. (" + notExistsPkgs.join(", ") + ")");
38
+ }
39
+ await SdProjectBuildRunner.watchAsync({
40
+ pkgPaths,
41
+ projConf,
42
+ emitOnly: opt.emitOnly ?? false,
43
+ noEmit: opt.noEmit ?? false,
44
+ onChange: () => {
45
+ logger.debug("빌드를 시작합니다...");
46
+ },
47
+ onComplete: (messages) => {
48
+ this.#logging(messages, logger);
49
+ },
50
+ });
51
+ }
52
+ static async buildAsync(opt) {
53
+ const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliProject", "watchAsync"]);
54
+ logger.debug("프로젝트 설정 가져오기...");
55
+ const projConf = await loadProjConfAsync(process.cwd(), true, opt);
56
+ logger.debug("프로젝트 package.json 가져오기...");
57
+ const projNpmConf = (await FsUtils.readJsonAsync(path.resolve(process.cwd(), "package.json")));
58
+ logger.debug("패키지 목록 구성...");
59
+ if (!projNpmConf.workspaces) {
60
+ throw new Error("프로젝트 package.json에 workspaces가 설정되어있지 않습니다.");
61
+ }
62
+ const allPkgPaths = (await projNpmConf.workspaces.mapManyAsync(async (item) => await FsUtils.globAsync(item)))
63
+ .filter((item) => !item.includes("."))
64
+ .map((item) => PathUtils.norm(item));
65
+ let pkgPaths = allPkgPaths.filter((pkgPath) => path.basename(pkgPath) in projConf.packages);
66
+ if (opt.packages) {
67
+ pkgPaths = pkgPaths.filter((pkgPath) => opt.packages.includes(path.basename(pkgPath)));
68
+ }
69
+ logger.debug("패키지 존재 확인...");
70
+ const notExistsPkgs = Object.keys(projConf.packages).filter((pkgConfKey) => allPkgPaths.every((pkgPath) => path.basename(pkgPath) !== pkgConfKey));
71
+ if (notExistsPkgs.length > 0) {
72
+ throw new Error("패키지를 찾을 수 없습니다. (" + notExistsPkgs.join(", ") + ")");
73
+ }
74
+ logger.debug("프로젝트 및 패키지 버전 설정...");
75
+ this.#upgradeVersion(projNpmConf, allPkgPaths);
76
+ logger.debug("빌드 프로세스 시작...");
77
+ const messages = await SdProjectBuildRunner.buildAsync({
78
+ pkgPaths,
79
+ projConf,
80
+ });
81
+ this.#logging(messages, logger);
82
+ }
83
+ static async publishAsync(opt) {
84
+ const logger = SdLogger.get(["simplysm", "sd-cli", "SdCliProject", "publishAsync"]);
85
+ logger.debug("프로젝트 설정 가져오기...");
86
+ const projConf = await loadProjConfAsync(process.cwd(), false, opt);
87
+ logger.debug("프로젝트 package.json 가져오기...");
88
+ const projNpmConf = FsUtils.readJson(path.resolve(process.cwd(), "package.json"));
89
+ if (opt.noBuild) {
90
+ logger.warn("빌드하지 않고, 배포하는것은 상당히 위험합니다.");
91
+ await this.#waitSecMessageAsync("프로세스를 중지하려면, 'CTRL+C'를 누르세요.", 5);
92
+ }
93
+ else {
94
+ // GIT 사용중일 경우, 커밋되지 않은 수정사항이 있는지 확인
95
+ if (FsUtils.exists(path.resolve(process.cwd(), ".git"))) {
96
+ logger.debug("GIT 커밋여부 확인...");
97
+ const gitStatusResult = await SdProcess.spawnAsync("git", ["status"]);
98
+ if (gitStatusResult.includes("Changes") || gitStatusResult.includes("Untracked")) {
99
+ throw new Error("커밋되지 않은 정보가 있습니다.\n" + gitStatusResult);
100
+ }
101
+ }
102
+ }
103
+ logger.debug("패키지 목록 구성...");
104
+ if (!projNpmConf.workspaces) {
105
+ throw new Error("프로젝트 package.json에 workspaces가 설정되어있지 않습니다.");
106
+ }
107
+ const allPkgPaths = projNpmConf.workspaces
108
+ .mapMany((item) => FsUtils.glob(item))
109
+ .filter((item) => !item.includes("."))
110
+ .map((item) => PathUtils.norm(item));
111
+ let pkgPaths = allPkgPaths.filter((pkgPath) => path.basename(pkgPath) in projConf.packages);
112
+ if (opt.packages) {
113
+ pkgPaths = pkgPaths.filter((pkgPath) => opt.packages.includes(path.basename(pkgPath)));
114
+ }
115
+ logger.debug("패키지 존재 확인...");
116
+ const notExistsPkgs = Object.keys(projConf.packages).filter((pkgConfKey) => allPkgPaths.every((pkgPath) => path.basename(pkgPath) !== pkgConfKey));
117
+ if (notExistsPkgs.length > 0) {
118
+ throw new Error("패키지를 찾을 수 없습니다. (" + notExistsPkgs.join(", ") + ")");
119
+ }
120
+ if (!opt.noBuild) {
121
+ logger.debug("프로젝트 및 패키지 버전 설정...");
122
+ this.#upgradeVersion(projNpmConf, allPkgPaths);
123
+ // 빌드
124
+ try {
125
+ logger.debug("빌드 프로세스 시작...");
126
+ const messages = await SdProjectBuildRunner.buildAsync({
127
+ pkgPaths,
128
+ projConf,
129
+ });
130
+ this.#logging(messages, logger);
131
+ }
132
+ catch (err) {
133
+ await SdProcess.spawnAsync("git", ["checkout", "."]);
134
+ throw err;
135
+ }
136
+ // GIT 사용중일경우, 새 버전 커밋 및 TAG 생성
137
+ if (FsUtils.exists(path.resolve(process.cwd(), ".git"))) {
138
+ logger.debug("새 버전 커밋 및 TAG 생성...");
139
+ await SdProcess.spawnAsync("git", ["add", "."]);
140
+ await SdProcess.spawnAsync("git", ["commit", "-m", `v${projNpmConf.version}`]);
141
+ await SdProcess.spawnAsync("git", [
142
+ "tag",
143
+ "-a",
144
+ `v${projNpmConf.version}`,
145
+ "-m",
146
+ `v${projNpmConf.version}`,
147
+ ]);
148
+ logger.debug("새 버전 푸쉬...");
149
+ await SdProcess.spawnAsync("git", ["push"]);
150
+ await SdProcess.spawnAsync("git", ["push", "--tags"]);
151
+ }
152
+ }
153
+ logger.debug("배포 시작...");
154
+ await pkgPaths.parallelAsync(async (pkgPath) => {
155
+ const pkgName = path.basename(pkgPath);
156
+ const pkgConf = projConf.packages[pkgName];
157
+ if (pkgConf?.publish == null)
158
+ return;
159
+ logger.debug(`[${pkgName}] 배포 시작...`);
160
+ await this.#publishPkgAsync(pkgPath, pkgConf.publish);
161
+ logger.debug(`[${pkgName}] 배포 완료`);
162
+ });
163
+ if (projConf.postPublish && projConf.postPublish.length > 0) {
164
+ logger.debug("배포후 작업...");
165
+ for (const postPublishItem of projConf.postPublish) {
166
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
167
+ if (postPublishItem.type === "script") {
168
+ const replaceEnvPath = (str) => str.replace(/%([^%]*)%/g, (item) => {
169
+ const envName = item.replace(/%/g, "");
170
+ if (!StringUtils.isNullOrEmpty(projNpmConf.version) && envName === "SD_VERSION") {
171
+ return projNpmConf.version;
172
+ }
173
+ if (envName === "SD_PROJECT_PATH") {
174
+ return process.cwd();
175
+ }
176
+ return process.env[envName] ?? item;
177
+ });
178
+ const cmd = replaceEnvPath(postPublishItem.cmd);
179
+ const args = postPublishItem.args.map((arg) => replaceEnvPath(arg));
180
+ await SdProcess.spawnAsync(cmd, args);
181
+ }
182
+ else {
183
+ throw new NeverEntryError();
184
+ }
185
+ }
186
+ }
187
+ logger.info(`모든 배포가 완료되었습니다. (v${projNpmConf.version})`);
188
+ }
189
+ static async #publishPkgAsync(pkgPath, pkgPubConf) {
190
+ if (pkgPubConf === "npm") {
191
+ await SdProcess.spawnAsync("yarn", ["npm", "publish", "--access", "public"], {
192
+ cwd: pkgPath,
193
+ });
194
+ }
195
+ else if (pkgPubConf?.type === "local-directory") {
196
+ const pkgNpmConf = FsUtils.readJson(path.resolve(pkgPath, "package.json"));
197
+ const targetRootPath = pkgPubConf.path.replace(/%([^%]*)%/g, (item) => {
198
+ const envName = item.replace(/%/g, "");
199
+ if (!StringUtils.isNullOrEmpty(pkgNpmConf.version) && envName === "SD_VERSION") {
200
+ return pkgNpmConf.version;
201
+ }
202
+ if (envName === "SD_PROJECT_PATH") {
203
+ return process.cwd();
204
+ }
205
+ return process.env[envName] ?? item;
206
+ });
207
+ const filePaths = FsUtils.glob(path.resolve(pkgPath, "dist", "**", "*"), {
208
+ dot: true,
209
+ nodir: true,
210
+ });
211
+ for (const filePath of filePaths) {
212
+ const relativeFilePath = path.relative(path.resolve(pkgPath, "dist"), filePath);
213
+ const targetPath = PathUtils.posix(targetRootPath, relativeFilePath);
214
+ FsUtils.copy(filePath, targetPath);
215
+ }
216
+ }
217
+ else if (pkgPubConf?.type === "ftp" ||
218
+ pkgPubConf?.type === "ftps" ||
219
+ pkgPubConf?.type === "sftp") {
220
+ await SdStorage.connectAsync(pkgPubConf.type, {
221
+ host: pkgPubConf.host,
222
+ port: pkgPubConf.port,
223
+ user: pkgPubConf.user,
224
+ pass: pkgPubConf.pass,
225
+ }, async (storage) => {
226
+ await storage.uploadDirAsync(path.resolve(pkgPath, "dist"), pkgPubConf.path ?? "/");
227
+ });
228
+ }
229
+ else {
230
+ throw new NeverEntryError();
231
+ }
232
+ }
233
+ static async #waitSecMessageAsync(msg, sec) {
234
+ for (let i = sec; i > 0; i--) {
235
+ if (i !== sec) {
236
+ process.stdout.cursorTo(0);
237
+ }
238
+ process.stdout.write(`${msg} ${i}`);
239
+ await Wait.time(1000);
240
+ }
241
+ process.stdout.cursorTo(0);
242
+ process.stdout.clearLine(0);
243
+ }
244
+ static #upgradeVersion(projNpmConf, allPkgPaths) {
245
+ // 작업공간 package.json 버전 설정
246
+ const newVersion = semver.inc(projNpmConf.version, "patch");
247
+ projNpmConf.version = newVersion;
248
+ const pkgNames = allPkgPaths.map((pkgPath) => {
249
+ const pkgNpmConf = FsUtils.readJson(path.resolve(pkgPath, "package.json"));
250
+ return pkgNpmConf.name;
251
+ });
252
+ const updateDepVersion = (deps) => {
253
+ if (!deps)
254
+ return;
255
+ for (const depName of Object.keys(deps)) {
256
+ if (pkgNames.includes(depName)) {
257
+ deps[depName] = newVersion;
258
+ }
259
+ }
260
+ };
261
+ updateDepVersion(projNpmConf.dependencies);
262
+ updateDepVersion(projNpmConf.optionalDependencies);
263
+ updateDepVersion(projNpmConf.devDependencies);
264
+ updateDepVersion(projNpmConf.peerDependencies);
265
+ const projNpmConfFilePath = path.resolve(process.cwd(), "package.json");
266
+ FsUtils.writeJson(projNpmConfFilePath, projNpmConf, { space: 2 });
267
+ // 각 패키지 package.json 버전 설정
268
+ for (const pkgPath of allPkgPaths) {
269
+ const pkgNpmConfFilePath = path.resolve(pkgPath, "package.json");
270
+ const pkgNpmConf = FsUtils.readJson(pkgNpmConfFilePath);
271
+ pkgNpmConf.version = newVersion;
272
+ updateDepVersion(pkgNpmConf.dependencies);
273
+ updateDepVersion(pkgNpmConf.optionalDependencies);
274
+ updateDepVersion(pkgNpmConf.devDependencies);
275
+ updateDepVersion(pkgNpmConf.peerDependencies);
276
+ FsUtils.writeJson(pkgNpmConfFilePath, pkgNpmConf, { space: 2 });
277
+ if (FsUtils.exists(path.resolve(pkgPath, "plugin.xml"))) {
278
+ const cordovaPluginConfFilePath = path.resolve(pkgPath, "plugin.xml");
279
+ const cordovaPluginConfContent = FsUtils.readFile(cordovaPluginConfFilePath);
280
+ const newCordovaPluginConfContent = cordovaPluginConfContent.replace(/(<plugin\s[^>]*\bversion\s*=\s*")[^"]+(")/, `$1${newVersion}$2`);
281
+ FsUtils.writeFile(cordovaPluginConfFilePath, newCordovaPluginConfContent);
282
+ }
283
+ }
284
+ }
285
+ static #logging(buildResults, logger) {
286
+ const messageMap = buildResults.toSetMap((item) => item.severity, (item) => SdCliConvertMessageUtils.getBuildMessageString(item));
287
+ if (messageMap.has("message")) {
288
+ logger.log(`알림\n${[...messageMap.get("message")].join("\n")}`);
289
+ }
290
+ if (messageMap.has("suggestion")) {
291
+ logger.info(`제안\n${[...messageMap.get("suggestion")].join("\n")}`);
292
+ }
293
+ if (messageMap.has("warning")) {
294
+ logger.warn(`경고\n${[...messageMap.get("warning")].join("\n")}`);
295
+ }
296
+ if (messageMap.has("error")) {
297
+ logger.error(`오류\n${[...messageMap.get("error")].join("\n")}`);
298
+ }
299
+ logger.info("모든 빌드가 완료되었습니다.");
300
+ }
301
+ }
302
+ //# sourceMappingURL=SdCliProject.js.map