@simplysm/sd-cli 7.3.2 → 10.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/.eslintrc.cjs +18 -0
  2. package/dist/build-cluster.js +75 -0
  3. package/dist/build-cluster.js.map +1 -0
  4. package/dist/builders/SdCliJsLibLinter.d.ts +18 -0
  5. package/dist/builders/SdCliJsLibLinter.js +69 -0
  6. package/dist/builders/SdCliJsLibLinter.js.map +1 -0
  7. package/dist/builders/SdCliTsLibBuilder.d.ts +20 -0
  8. package/dist/builders/SdCliTsLibBuilder.js +205 -0
  9. package/dist/builders/SdCliTsLibBuilder.js.map +1 -0
  10. package/dist/commons.d.ts +3 -117
  11. package/dist/commons.js +2 -0
  12. package/dist/commons.js.map +1 -0
  13. package/dist/entry/SdCliProject.d.ts +28 -0
  14. package/dist/entry/SdCliProject.js +269 -0
  15. package/dist/entry/SdCliProject.js.map +1 -0
  16. package/dist/sd-cli.js +118 -0
  17. package/dist/sd-cli.js.map +1 -0
  18. package/dist/utils/SdCliBuildResultUtil.d.ts +1 -4
  19. package/dist/utils/SdCliBuildResultUtil.js +37 -0
  20. package/dist/utils/SdCliBuildResultUtil.js.map +1 -0
  21. package/dist/utils/SdCliConfigUtil.js +69 -0
  22. package/dist/utils/SdCliConfigUtil.js.map +1 -0
  23. package/package.json +10 -59
  24. package/src/build-cluster.ts +82 -0
  25. package/src/builders/SdCliJsLibLinter.ts +84 -0
  26. package/src/builders/SdCliTsLibBuilder.ts +265 -0
  27. package/src/commons.ts +3 -123
  28. package/src/entry/SdCliProject.ts +351 -0
  29. package/src/sd-cli.ts +135 -0
  30. package/src/utils/SdCliBuildResultUtil.ts +5 -38
  31. package/tsconfig.json +18 -0
  32. package/README.md +0 -105
  33. package/assets/client-files/assets/icons/icon-128x128.png +0 -0
  34. package/assets/client-files/assets/icons/icon-144x144.png +0 -0
  35. package/assets/client-files/assets/icons/icon-152x152.png +0 -0
  36. package/assets/client-files/assets/icons/icon-192x192.png +0 -0
  37. package/assets/client-files/assets/icons/icon-384x384.png +0 -0
  38. package/assets/client-files/assets/icons/icon-512x512.png +0 -0
  39. package/assets/client-files/assets/icons/icon-72x72.png +0 -0
  40. package/assets/client-files/assets/icons/icon-96x96.png +0 -0
  41. package/assets/client-files/favicon.ico +0 -0
  42. package/dist/SdCliBuildResultError.d.ts +0 -5
  43. package/dist/SdCliBuildResultError.mjs +0 -8
  44. package/dist/bin/sd-cli.d.ts +0 -2
  45. package/dist/bin/sd-cli.mjs +0 -410
  46. package/dist/build-tool/SdCliCacheCompilerHost.d.ts +0 -10
  47. package/dist/build-tool/SdCliCacheCompilerHost.mjs +0 -51
  48. package/dist/build-tool/SdCliCordova.d.ts +0 -16
  49. package/dist/build-tool/SdCliCordova.mjs +0 -212
  50. package/dist/build-tool/SdCliElectron.d.ts +0 -9
  51. package/dist/build-tool/SdCliElectron.mjs +0 -71
  52. package/dist/build-tool/SdCliGithubApi.d.ts +0 -13
  53. package/dist/build-tool/SdCliGithubApi.mjs +0 -92
  54. package/dist/build-tool/SdCliIndexFileGenerator.d.ts +0 -13
  55. package/dist/build-tool/SdCliIndexFileGenerator.mjs +0 -62
  56. package/dist/build-tool/SdCliNgCacheCompilerHost.d.ts +0 -12
  57. package/dist/build-tool/SdCliNgCacheCompilerHost.mjs +0 -43
  58. package/dist/build-tool/SdCliPackageLinter.d.ts +0 -8
  59. package/dist/build-tool/SdCliPackageLinter.mjs +0 -62
  60. package/dist/builder/SdCliClientBuilder.d.ts +0 -26
  61. package/dist/builder/SdCliClientBuilder.mjs +0 -761
  62. package/dist/builder/SdCliJsLibBuilder.d.ts +0 -14
  63. package/dist/builder/SdCliJsLibBuilder.mjs +0 -54
  64. package/dist/builder/SdCliServerBuilder.d.ts +0 -28
  65. package/dist/builder/SdCliServerBuilder.mjs +0 -482
  66. package/dist/builder/SdCliTsLibBuilder.d.ts +0 -35
  67. package/dist/builder/SdCliTsLibBuilder.mjs +0 -317
  68. package/dist/commons.mjs +0 -2
  69. package/dist/entry-points/SdCliFileCrypto.d.ts +0 -7
  70. package/dist/entry-points/SdCliFileCrypto.mjs +0 -72
  71. package/dist/entry-points/SdCliLocalUpdate.d.ts +0 -13
  72. package/dist/entry-points/SdCliLocalUpdate.mjs +0 -100
  73. package/dist/entry-points/SdCliPrepare.d.ts +0 -5
  74. package/dist/entry-points/SdCliPrepare.mjs +0 -86
  75. package/dist/entry-points/SdCliProject.d.ts +0 -34
  76. package/dist/entry-points/SdCliProject.mjs +0 -416
  77. package/dist/entry-points/SdCliProjectGenerator.d.ts +0 -44
  78. package/dist/entry-points/SdCliProjectGenerator.mjs +0 -326
  79. package/dist/entry-points/file/base/fc_package_eslintrc.d.ts +0 -3
  80. package/dist/entry-points/file/base/fc_package_eslintrc.mjs +0 -31
  81. package/dist/entry-points/file/base/fc_package_npmconfig.d.ts +0 -9
  82. package/dist/entry-points/file/base/fc_package_npmconfig.mjs +0 -32
  83. package/dist/entry-points/file/base/fc_package_tsconfig.d.ts +0 -5
  84. package/dist/entry-points/file/base/fc_package_tsconfig.mjs +0 -13
  85. package/dist/entry-points/file/client/fc_package_AppModule.d.ts +0 -1
  86. package/dist/entry-points/file/client/fc_package_AppModule.mjs +0 -37
  87. package/dist/entry-points/file/client/fc_package_AppPage.d.ts +0 -1
  88. package/dist/entry-points/file/client/fc_package_AppPage.mjs +0 -14
  89. package/dist/entry-points/file/client/fc_package_Page.d.ts +0 -4
  90. package/dist/entry-points/file/client/fc_package_Page.mjs +0 -19
  91. package/dist/entry-points/file/client/fc_package_client_main.d.ts +0 -1
  92. package/dist/entry-points/file/client/fc_package_client_main.mjs +0 -19
  93. package/dist/entry-points/file/client/fc_package_index.d.ts +0 -3
  94. package/dist/entry-points/file/client/fc_package_index.mjs +0 -88
  95. package/dist/entry-points/file/client/fc_package_manifest.d.ts +0 -5
  96. package/dist/entry-points/file/client/fc_package_manifest.mjs +0 -54
  97. package/dist/entry-points/file/client/fc_package_polyfills.d.ts +0 -1
  98. package/dist/entry-points/file/client/fc_package_polyfills.mjs +0 -11
  99. package/dist/entry-points/file/client/fc_package_styles.d.ts +0 -1
  100. package/dist/entry-points/file/client/fc_package_styles.mjs +0 -7
  101. package/dist/entry-points/file/db/fc_package_DbContext.d.ts +0 -3
  102. package/dist/entry-points/file/db/fc_package_DbContext.mjs +0 -14
  103. package/dist/entry-points/file/db/fc_package_DbModel.d.ts +0 -4
  104. package/dist/entry-points/file/db/fc_package_DbModel.mjs +0 -12
  105. package/dist/entry-points/file/project/fc_project_editor_config.d.ts +0 -1
  106. package/dist/entry-points/file/project/fc_project_editor_config.mjs +0 -22
  107. package/dist/entry-points/file/project/fc_project_eslintrc.d.ts +0 -1
  108. package/dist/entry-points/file/project/fc_project_eslintrc.mjs +0 -30
  109. package/dist/entry-points/file/project/fc_project_gitattributes.d.ts +0 -1
  110. package/dist/entry-points/file/project/fc_project_gitattributes.mjs +0 -6
  111. package/dist/entry-points/file/project/fc_project_gitignore.d.ts +0 -1
  112. package/dist/entry-points/file/project/fc_project_gitignore.mjs +0 -27
  113. package/dist/entry-points/file/project/fc_project_npmconfig.d.ts +0 -7
  114. package/dist/entry-points/file/project/fc_project_npmconfig.mjs +0 -37
  115. package/dist/entry-points/file/project/fc_project_readme.d.ts +0 -3
  116. package/dist/entry-points/file/project/fc_project_readme.mjs +0 -13
  117. package/dist/entry-points/file/project/fc_project_simplysm.d.ts +0 -1
  118. package/dist/entry-points/file/project/fc_project_simplysm.mjs +0 -2
  119. package/dist/entry-points/file/project/fc_project_tsconfig.d.ts +0 -1
  120. package/dist/entry-points/file/project/fc_project_tsconfig.mjs +0 -25
  121. package/dist/entry-points/file/server/fc_package_server_main.d.ts +0 -5
  122. package/dist/entry-points/file/server/fc_package_server_main.mjs +0 -60
  123. package/dist/index.d.ts +0 -54
  124. package/dist/index.mjs +0 -55
  125. package/dist/ng-tools/SdCliNgModuleGenerator.d.ts +0 -29
  126. package/dist/ng-tools/SdCliNgModuleGenerator.mjs +0 -502
  127. package/dist/ng-tools/babel/SdCliBbFileMetadata.d.ts +0 -25
  128. package/dist/ng-tools/babel/SdCliBbFileMetadata.mjs +0 -539
  129. package/dist/ng-tools/babel/SdCliBbRootMetadata.d.ts +0 -23
  130. package/dist/ng-tools/babel/SdCliBbRootMetadata.mjs +0 -247
  131. package/dist/ng-tools/babel/SdCliBbUtil.d.ts +0 -5
  132. package/dist/ng-tools/babel/SdCliBbUtil.mjs +0 -14
  133. package/dist/ng-tools/babel/TSdCliBbNgMetadata.d.ts +0 -42
  134. package/dist/ng-tools/babel/TSdCliBbNgMetadata.mjs +0 -216
  135. package/dist/ng-tools/babel/TSdCliBbTypeMetadata.d.ts +0 -55
  136. package/dist/ng-tools/babel/TSdCliBbTypeMetadata.mjs +0 -151
  137. package/dist/ng-tools/commons.d.ts +0 -9
  138. package/dist/ng-tools/commons.mjs +0 -2
  139. package/dist/ng-tools/typescript/SdCliTsFileMetadata.d.ts +0 -61
  140. package/dist/ng-tools/typescript/SdCliTsFileMetadata.mjs +0 -325
  141. package/dist/ng-tools/typescript/SdCliTsRootMetadata.d.ts +0 -8
  142. package/dist/ng-tools/typescript/SdCliTsRootMetadata.mjs +0 -28
  143. package/dist/ng-tools/typescript/SdCliTsUtil.d.ts +0 -5
  144. package/dist/ng-tools/typescript/SdCliTsUtil.mjs +0 -28
  145. package/dist/packages/SdCliPackage.d.ts +0 -22
  146. package/dist/packages/SdCliPackage.mjs +0 -206
  147. package/dist/utils/SdCliBuildResultUtil.mjs +0 -63
  148. package/dist/utils/SdCliConfigUtil.mjs +0 -69
  149. package/dist/utils/SdCliNpmConfigUtil.d.ts +0 -7
  150. package/dist/utils/SdCliNpmConfigUtil.mjs +0 -15
  151. package/dist/worker/build-worker.mjs +0 -67
  152. package/dist/worker/server-worker.mjs +0 -67
  153. package/docs/client-add-page.md +0 -8
  154. package/docs/client-router.md +0 -85
  155. package/docs/client-sw.md +0 -101
  156. package/docs/conf-orm.md +0 -81
  157. package/docs/conf-usage.md +0 -5
  158. package/docs/lib-local-update.md +0 -50
  159. package/docs/lib-ts-paths.md +0 -25
  160. package/lib/cordova-entry.js +0 -22
  161. package/src/SdCliBuildResultError.ts +0 -9
  162. package/src/bin/sd-cli.ts +0 -493
  163. package/src/build-tool/SdCliCacheCompilerHost.ts +0 -79
  164. package/src/build-tool/SdCliCordova.ts +0 -263
  165. package/src/build-tool/SdCliElectron.ts +0 -84
  166. package/src/build-tool/SdCliGithubApi.ts +0 -111
  167. package/src/build-tool/SdCliIndexFileGenerator.ts +0 -79
  168. package/src/build-tool/SdCliNgCacheCompilerHost.ts +0 -58
  169. package/src/build-tool/SdCliPackageLinter.ts +0 -74
  170. package/src/builder/SdCliClientBuilder.ts +0 -871
  171. package/src/builder/SdCliJsLibBuilder.ts +0 -70
  172. package/src/builder/SdCliServerBuilder.ts +0 -552
  173. package/src/builder/SdCliTsLibBuilder.ts +0 -450
  174. package/src/entry-points/SdCliFileCrypto.ts +0 -87
  175. package/src/entry-points/SdCliLocalUpdate.ts +0 -121
  176. package/src/entry-points/SdCliPrepare.ts +0 -86
  177. package/src/entry-points/SdCliProject.ts +0 -491
  178. package/src/entry-points/SdCliProjectGenerator.ts +0 -402
  179. package/src/entry-points/file/base/fc_package_eslintrc.ts +0 -30
  180. package/src/entry-points/file/base/fc_package_npmconfig.ts +0 -43
  181. package/src/entry-points/file/base/fc_package_tsconfig.ts +0 -12
  182. package/src/entry-points/file/client/fc_package_AppModule.ts +0 -36
  183. package/src/entry-points/file/client/fc_package_AppPage.ts +0 -13
  184. package/src/entry-points/file/client/fc_package_Page.ts +0 -19
  185. package/src/entry-points/file/client/fc_package_client_main.ts +0 -18
  186. package/src/entry-points/file/client/fc_package_index.ts +0 -87
  187. package/src/entry-points/file/client/fc_package_manifest.ts +0 -53
  188. package/src/entry-points/file/client/fc_package_polyfills.ts +0 -10
  189. package/src/entry-points/file/client/fc_package_styles.ts +0 -6
  190. package/src/entry-points/file/db/fc_package_DbContext.ts +0 -14
  191. package/src/entry-points/file/db/fc_package_DbModel.ts +0 -11
  192. package/src/entry-points/file/project/fc_project_editor_config.ts +0 -21
  193. package/src/entry-points/file/project/fc_project_eslintrc.ts +0 -29
  194. package/src/entry-points/file/project/fc_project_gitattributes.ts +0 -5
  195. package/src/entry-points/file/project/fc_project_gitignore.ts +0 -26
  196. package/src/entry-points/file/project/fc_project_npmconfig.ts +0 -36
  197. package/src/entry-points/file/project/fc_project_readme.ts +0 -12
  198. package/src/entry-points/file/project/fc_project_simplysm.ts +0 -1
  199. package/src/entry-points/file/project/fc_project_tsconfig.ts +0 -24
  200. package/src/entry-points/file/server/fc_package_server_main.ts +0 -62
  201. package/src/index.ts +0 -54
  202. package/src/ng-tools/SdCliNgModuleGenerator.ts +0 -672
  203. package/src/ng-tools/babel/SdCliBbFileMetadata.ts +0 -629
  204. package/src/ng-tools/babel/SdCliBbRootMetadata.ts +0 -292
  205. package/src/ng-tools/babel/SdCliBbUtil.ts +0 -15
  206. package/src/ng-tools/babel/TSdCliBbNgMetadata.ts +0 -251
  207. package/src/ng-tools/babel/TSdCliBbTypeMetadata.ts +0 -212
  208. package/src/ng-tools/commons.ts +0 -3
  209. package/src/ng-tools/typescript/SdCliTsFileMetadata.ts +0 -384
  210. package/src/ng-tools/typescript/SdCliTsRootMetadata.ts +0 -32
  211. package/src/ng-tools/typescript/SdCliTsUtil.ts +0 -29
  212. package/src/packages/SdCliPackage.ts +0 -259
  213. package/src/utils/SdCliNpmConfigUtil.ts +0 -16
  214. package/src/worker/build-worker.ts +0 -73
  215. package/src/worker/server-worker.ts +0 -72
  216. /package/dist/{worker/build-worker.d.ts → build-cluster.d.ts} +0 -0
  217. /package/dist/{worker/server-worker.d.ts → sd-cli.d.ts} +0 -0
@@ -1,402 +0,0 @@
1
- import { FsUtil, Logger, SdProcess } from "@simplysm/sd-core-node";
2
- import path from "path";
3
- import { StringUtil } from "@simplysm/sd-core-common";
4
- import { fc_project_editor_config } from "./file/project/fc_project_editor_config";
5
- import { fc_project_eslintrc } from "./file/project/fc_project_eslintrc";
6
- import { fc_project_gitignore } from "./file/project/fc_project_gitignore";
7
- import { fc_project_gitattributes } from "./file/project/fc_project_gitattributes";
8
- import { fc_project_npmconfig } from "./file/project/fc_project_npmconfig";
9
- import { fc_project_readme } from "./file/project/fc_project_readme";
10
- import { fc_project_simplysm } from "./file/project/fc_project_simplysm";
11
- import { fc_project_tsconfig } from "./file/project/fc_project_tsconfig";
12
- import { fc_package_eslintrc } from "./file/base/fc_package_eslintrc";
13
- import { fc_package_npmconfig } from "./file/base/fc_package_npmconfig";
14
- import { fc_package_tsconfig } from "./file/base/fc_package_tsconfig";
15
- import { fc_package_DbContext } from "./file/db/fc_package_DbContext";
16
- import { fc_package_DbModel } from "./file/db/fc_package_DbModel";
17
- import { fc_package_server_main } from "./file/server/fc_package_server_main";
18
- import { fc_package_AppModule } from "./file/client/fc_package_AppModule";
19
- import { fc_package_AppPage } from "./file/client/fc_package_AppPage";
20
- import { fileURLToPath } from "url";
21
- import { fc_package_index } from "./file/client/fc_package_index";
22
- import { fc_package_client_main } from "./file/client/fc_package_client_main";
23
- import { fc_package_manifest } from "./file/client/fc_package_manifest";
24
- import { INpmConfig } from "../commons";
25
- import { fc_package_polyfills } from "./file/client/fc_package_polyfills";
26
- import { fc_package_styles } from "./file/client/fc_package_styles";
27
- import { ISdAutoIndexConfig } from "../build-tool/SdCliIndexFileGenerator";
28
- import { fc_package_Page } from "./file/client/fc_package_Page";
29
-
30
- export class SdCliProjectGenerator {
31
- private readonly _logger = Logger.get(["simplysm", "sd-cli", this.constructor.name]);
32
-
33
- public constructor(private readonly _rootPath: string) {
34
- }
35
-
36
- public async initAsync(opt: { name?: string; description: string; author: string; gitUrl: string }): Promise<void> {
37
- if ((await FsUtil.readdirAsync(this._rootPath)).filter((item) => ![".idea", "yarn.lock", "package.json", ".yarn", ".yarnrc.yml", "node_modules"].includes(path.basename(item))).length > 0) {
38
- throw new Error("빈 디렉토리가 아닙니다. (.idea, yarn.lock, package.json, .yarn, .yarnrc.yml, node_modules 외의 파일/폴더가 존재하는 경우, 초기화할 수 없습니다.)");
39
- }
40
-
41
- const projName = opt.name ?? path.basename(this._rootPath);
42
-
43
- this._logger.log("'.editorconfig' 파일 생성");
44
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, ".editorconfig"), fc_project_editor_config());
45
-
46
- this._logger.log(`[${projName}] '.eslintrc.cjs' 파일 생성`);
47
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, ".eslintrc.cjs"), fc_project_eslintrc());
48
-
49
- this._logger.log(`[${projName}]'.gitattributes' 파일 생성`);
50
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, ".gitattributes"), fc_project_gitattributes());
51
-
52
- this._logger.log(`[${projName}] '.gitignore' 파일 생성`);
53
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, ".gitignore"), fc_project_gitignore());
54
-
55
- this._logger.log(`[${projName}] 'package.json' 파일 생성`);
56
- let cliVersion: string | undefined;
57
- if (FsUtil.exists(path.resolve(this._rootPath, "package.json"))) {
58
- const npmConfig = await FsUtil.readJsonAsync(path.resolve(this._rootPath, "package.json")) as INpmConfig;
59
- cliVersion = npmConfig.dependencies?.["@simplysm/sd-cli"];
60
- }
61
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, "package.json"), fc_project_npmconfig({
62
- name: projName,
63
- description: opt.description,
64
- author: opt.author,
65
- gitUrl: opt.gitUrl,
66
- cliVersion
67
- }));
68
-
69
- this._logger.log(`[${projName}] 'README.md' 파일 생성`);
70
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, "README.md"), fc_project_readme({
71
- description: opt.description
72
- }));
73
-
74
- this._logger.log(`[${projName}] 'simplysm.json' 파일 생성`);
75
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, "simplysm.json"), fc_project_simplysm());
76
-
77
- this._logger.log(`[${projName}] 'tsconfig.json' 파일 생성`);
78
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, "tsconfig.json"), fc_project_tsconfig());
79
-
80
- this._logger.log(`[${projName}] 'yarn.lock' 파일 생성`);
81
- await FsUtil.writeFileAsync(path.resolve(this._rootPath, "yarn.lock"), "");
82
-
83
- this._logger.log(`[${projName}] 'packages' 디렉토리 생성`);
84
- await FsUtil.mkdirsAsync(path.resolve(this._rootPath, "packages"));
85
-
86
- this._logger.log(`[${projName}] yarn install`);
87
- await SdProcess.spawnAsync("yarn install", { cwd: this._rootPath }, true);
88
- }
89
-
90
- public async addTsLibAsync(opt: { name: string; description: string; useDom: boolean; isForAngular: boolean }): Promise<void> {
91
- const projNpmConfig = await this._getProjNpmConfigAsync();
92
- const projName = projNpmConfig.name;
93
-
94
- await this._addPackageBaseTemplate({
95
- name: opt.name,
96
- description: opt.description,
97
- useDom: opt.isForAngular || opt.useDom,
98
- isForAngular: opt.isForAngular,
99
- isModule: true,
100
- types: "dist/index.d.ts",
101
- main: "dist/index.mjs",
102
- dependencies: {},
103
- tsconfigOptions: {}
104
- });
105
-
106
- this._logger.log(`[${opt.name}] 'simplysm.json' 파일에 등록`);
107
-
108
- await this._addPackageToSimplysmJson({
109
- name: opt.name,
110
- type: "library",
111
- ...opt.isForAngular ? { angular: true } : {},
112
- autoIndex: {
113
- ...opt.isForAngular ? {
114
- polyfills: [
115
- "@simplysm/sd-core-common",
116
- "@simplysm/sd-core-browser"
117
- ]
118
- } : {}
119
- },
120
- });
121
-
122
- this._logger.log(`[${projName}] yarn install`);
123
- await SdProcess.spawnAsync("yarn install", { cwd: this._rootPath }, true);
124
- }
125
-
126
- public async addDbLibAsync(opt: { name: string }): Promise<void> {
127
- const pkgName = "db-" + opt.name;
128
- const pkgPath = path.resolve(this._rootPath, "packages", pkgName);
129
- const projNpmConfig = await this._getProjNpmConfigAsync();
130
- const projName = projNpmConfig.name;
131
-
132
- await this._addPackageBaseTemplate({
133
- name: pkgName,
134
- description: "DB " + opt.name.toUpperCase(),
135
- useDom: false,
136
- isModule: true,
137
- isForAngular: false,
138
- types: "dist/index.d.ts",
139
- main: "dist/index.mjs",
140
- dependencies: {
141
- "@simplysm/sd-core-common": "~7.1.0",
142
- "@simplysm/sd-orm-common": "~7.1.0"
143
- },
144
- tsconfigOptions: {}
145
- });
146
-
147
- this._logger.log(`[${pkgName}] 'src/${StringUtil.toPascalCase(opt.name)}DbContext.ts' 파일 생성`);
148
- await FsUtil.writeFileAsync(path.resolve(pkgPath, `src/${StringUtil.toPascalCase(opt.name)}DbContext.ts`), fc_package_DbContext({
149
- name: opt.name
150
- }));
151
-
152
- this._logger.log(`[${pkgName}] 'src/models' 디렉토리 생성`);
153
- await FsUtil.mkdirsAsync(path.resolve(pkgPath, "src/models"));
154
-
155
- this._logger.log(`[${pkgName}] 'simplysm.json' 파일에 등록`);
156
- await this._addPackageToSimplysmJson({
157
- name: pkgName,
158
- type: "library",
159
- autoIndex: {}
160
- });
161
-
162
- this._logger.log(`[${projName}] yarn install`);
163
- await SdProcess.spawnAsync("yarn install", { cwd: this._rootPath }, true);
164
- }
165
-
166
- public async addDbLibModelAsync(opt: { dbPkgName: string; category: string; name: string; description: string }): Promise<void> {
167
- const pkgName = "db-" + opt.dbPkgName;
168
- const pkgPath = path.resolve(this._rootPath, "packages", pkgName);
169
-
170
- this._logger.log(`[${pkgName}] 'src/models/${opt.category}/${opt.name}.ts' 파일 생성`);
171
-
172
- await FsUtil.writeFileAsync(
173
- path.resolve(pkgPath, `src/models/${opt.category}/${opt.name}.ts`),
174
- fc_package_DbModel({
175
- name: opt.name,
176
- description: opt.description
177
- })
178
- );
179
-
180
- this._logger.log(`[${pkgName}] DbContext 파일에 등록`);
181
- let dbContextContent = await FsUtil.readFileAsync(path.resolve(pkgPath, `src/${StringUtil.toPascalCase(opt.dbPkgName)}DbContext.ts`));
182
-
183
- if (!dbContextContent.includes(`Queryable`)) {
184
- this._logger.log(`[${pkgName}] DbContext 파일에 등록: import: Queryable`);
185
- dbContextContent = dbContextContent.replace(/ } from "@simplysm\/sd-orm-common";/, `, Queryable } from "@simplysm/sd-orm-common";`);
186
- }
187
-
188
- this._logger.log(`[${pkgName}] DbContext 파일에 등록: import: MODEL`);
189
- dbContextContent = `import { ${opt.name} } from "./models/${opt.category}/${opt.name}";\n` + dbContextContent;
190
-
191
- if (!dbContextContent.includes(`//-- ${opt.category}\n`)) {
192
- this._logger.log(`[${opt.name}] DbContext 파일에 등록: CATEGORY`);
193
-
194
- dbContextContent = dbContextContent.replace(/\n}/, `\n\n //-- ${opt.category}\n}`);
195
- }
196
-
197
- this._logger.log(`[${pkgName}] DbContext 파일에 등록: MODEL`);
198
-
199
- dbContextContent = dbContextContent.replace(new RegExp(`//-- ${opt.category}\n`), `
200
- //-- ${opt.category}
201
- public readonly ${StringUtil.toCamelCase(opt.name)} = new Queryable(this, ${opt.name});
202
- `.trim() + "\n");
203
-
204
- await FsUtil.writeFileAsync(path.resolve(pkgPath, `src/${StringUtil.toPascalCase(opt.dbPkgName)}DbContext.ts`), dbContextContent);
205
- }
206
-
207
- public async addServerAsync(opt: { name?: string; description?: string }): Promise<void> {
208
- const pkgName = "server" + (opt.name === undefined ? "" : `-${opt.name}`);
209
- const pkgPath = path.resolve(this._rootPath, "packages", pkgName);
210
- const projNpmConfig = await this._getProjNpmConfigAsync();
211
- const projName = projNpmConfig.name;
212
-
213
- await this._addPackageBaseTemplate({
214
- name: pkgName,
215
- description: (opt.description === undefined ? "" : `${opt.description.toUpperCase()} `) + "서버",
216
- useDom: false,
217
- isModule: false,
218
- isForAngular: false,
219
- main: "dist/main.js",
220
- dependencies: {
221
- "@simplysm/sd-core-common": "~7.1.0",
222
- "@simplysm/sd-core-node": "~7.1.0",
223
- "@simplysm/sd-service-common": "~7.1.0",
224
- "@simplysm/sd-service-server": "~7.1.0"
225
- },
226
- tsconfigOptions: {}
227
- });
228
-
229
- this._logger.log(`[${pkgName}] 'src/main.ts' 파일 등록`);
230
- await FsUtil.writeFileAsync(path.resolve(pkgPath, `src/main.ts`), fc_package_server_main({
231
- projPath: this._rootPath,
232
- pkgName: pkgName,
233
- port: Math.floor(Math.random() * 10000) + 50000
234
- }));
235
-
236
- this._logger.log(`[${pkgName}] 'simplysm.json' 파일에 등록`);
237
- await this._addPackageToSimplysmJson({
238
- name: pkgName,
239
- type: "server"
240
- });
241
-
242
- this._logger.log(`[${projName}] yarn install`);
243
- await SdProcess.spawnAsync("yarn install", { cwd: this._rootPath }, true);
244
- }
245
-
246
- public async addClientAsync(opt: { name: string; description: string; serverName: string }): Promise<void> {
247
- const pkgName = `client-${opt.name}`;
248
- const pkgPath = path.resolve(this._rootPath, "packages", pkgName);
249
-
250
- const projNpmConfig = await this._getProjNpmConfigAsync();
251
- const projName = projNpmConfig.name;
252
-
253
- await this._addPackageBaseTemplate({
254
- name: pkgName,
255
- description: `${opt.description} 클라이언트`,
256
- useDom: true,
257
- isModule: true,
258
- isForAngular: true,
259
- dependencies: {
260
- "@angular/platform-browser": "^14.1.1",
261
- "@angular/platform-browser-dynamic": "^14.1.1",
262
- "@angular/compiler": "^14.1.1"
263
- },
264
- tsconfigOptions: {
265
- angularCompilerOptions: {
266
- "enableI18nLegacyMessageIdFormat": false,
267
- "strictInjectionParameters": true,
268
- "strictInputAccessModifiers": true,
269
- "strictTemplates": true,
270
- "strictInputTypes": false,
271
- "strictOutputEventTypes": false
272
- }
273
- }
274
- });
275
-
276
- this._logger.log(`[${pkgName}] 'src/AppModule.ts' 파일 등록`);
277
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/AppModule.ts"), fc_package_AppModule());
278
-
279
- this._logger.log(`[${pkgName}] 'src/AppPage.ts' 파일 등록`);
280
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/AppPage.ts"), fc_package_AppPage());
281
-
282
- this._logger.log(`[${pkgName}] 'src/index.html' 파일 등록`);
283
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/index.html"), fc_package_index({
284
- description: projNpmConfig.description + " - " + opt.description
285
- }));
286
-
287
- this._logger.log(`[${pkgName}] 'src/main.ts' 파일 등록`);
288
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/main.ts"), fc_package_client_main());
289
-
290
- this._logger.log(`[${pkgName}] 'src/manifest.json' 파일 등록`);
291
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/manifest.json"), fc_package_manifest({
292
- description: projNpmConfig.description + " - " + opt.description,
293
- author: projNpmConfig.author,
294
- version: projNpmConfig.version
295
- }));
296
-
297
- this._logger.log(`[${pkgName}] 'src/polyfills.ts' 파일 등록`);
298
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/polyfills.ts"), fc_package_polyfills());
299
-
300
- this._logger.log(`[${pkgName}] 'src/styles.scss' 파일 등록`);
301
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "src/styles.scss"), fc_package_styles());
302
-
303
- this._logger.log(`[${pkgName}] 'src/assets' 파일 복사`);
304
- await FsUtil.copyAsync(
305
- path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../assets/client-files"),
306
- path.resolve(pkgPath, "src")
307
- );
308
-
309
- await this._addPackageToSimplysmJson({
310
- name: pkgName,
311
- type: "client",
312
- serverName: opt.serverName
313
- });
314
-
315
- this._logger.log(`[${projName}] yarn install`);
316
- await SdProcess.spawnAsync("yarn install", { cwd: this._rootPath }, true);
317
- }
318
-
319
- public async addPageAsync(opt: { pkgName: string; category?: string; name: string; isRouteParent: boolean }): Promise<void> {
320
- const pkgPath = path.resolve(this._rootPath, "packages", opt.pkgName);
321
-
322
- this._logger.log(`[${opt.pkgName}] 'src/app/${Boolean(opt.category) ? opt.category + "/" : ""}${opt.name}Page.ts' 파일 생성`);
323
- await FsUtil.writeFileAsync(
324
- path.resolve(pkgPath, `src/app/${Boolean(opt.category) ? opt.category + "/" : ""}${opt.name}Page.ts`),
325
- fc_package_Page({
326
- name: opt.name,
327
- isRouteParent: opt.isRouteParent
328
- })
329
- );
330
-
331
- if (opt.isRouteParent) {
332
- this._logger.log(`[${opt.name}] 'src/app/${Boolean(opt.category) ? opt.category + "/" : ""}${StringUtil.toKebabCase(opt.name)}' 디렉토리 생성`);
333
- await FsUtil.mkdirsAsync(path.resolve(pkgPath, `src/app/${Boolean(opt.category) ? opt.category + "/" : ""}${StringUtil.toKebabCase(opt.name)}`));
334
- }
335
- }
336
-
337
- private async _addPackageBaseTemplate(opt: { name: string; description: string; useDom: boolean; isModule: boolean; isForAngular: boolean; main?: string; types?: string; dependencies: Record<string, string>; tsconfigOptions: Record<string, any> }): Promise<void> {
338
- const pkgPath = path.resolve(this._rootPath, "packages", opt.name);
339
-
340
- this._logger.log(`[${opt.name}] '.eslintrc.cjs' 파일 생성`);
341
- await FsUtil.writeFileAsync(path.resolve(pkgPath, ".eslintrc.cjs"), fc_package_eslintrc({
342
- isForAngular: opt.isForAngular
343
- }));
344
-
345
- this._logger.log(`[${opt.name}] 'package.json' 파일 생성`);
346
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "package.json"), fc_package_npmconfig({
347
- projPath: this._rootPath,
348
- name: opt.name,
349
- description: opt.description,
350
- isModule: opt.isModule,
351
- main: opt.main,
352
- types: opt.types,
353
- dependencies: {
354
- ...opt.dependencies,
355
- ...opt.isForAngular ? {
356
- "@angular/common": "^14.1.1",
357
- "@angular/core": "^14.1.1",
358
- "@simplysm/sd-angular": "~7.1.0",
359
- "@simplysm/sd-core-common": "~7.1.0",
360
- "@simplysm/sd-core-browser": "~7.1.0",
361
- "rxjs": "^7.5.6",
362
- "zone.js": "~0.11.8"
363
- } : {}
364
- }
365
- }));
366
-
367
- this._logger.log(`[${opt.name}] 'tsconfig.json' 파일 생성`);
368
- await FsUtil.writeFileAsync(path.resolve(pkgPath, "tsconfig.json"), fc_package_tsconfig({
369
- isModule: opt.isModule,
370
- useDom: opt.useDom,
371
- options: opt.tsconfigOptions
372
- }));
373
-
374
- this._logger.log(`[${opt.name}] 'src' 디렉토리 생성`);
375
- await FsUtil.mkdirsAsync(path.resolve(pkgPath, "src"));
376
- }
377
-
378
- private async _addPackageToSimplysmJson(opt: { name: string; type: string; angular?: boolean; autoIndex?: ISdAutoIndexConfig; serverName?: string }): Promise<void> {
379
- const config = await FsUtil.readJsonAsync(path.resolve(this._rootPath, "simplysm.json"));
380
- config.packages = config.packages ?? {};
381
- config.packages[opt.name] = {
382
- type: opt.type,
383
- ...opt.autoIndex ? { autoIndex: opt.autoIndex } : {},
384
- ...opt.angular ? { angular: true } : {},
385
- ...opt.serverName !== undefined ? { server: opt.serverName } : {}
386
- };
387
- await FsUtil.writeJsonAsync(path.resolve(this._rootPath, "simplysm.json"), config, { space: 2 });
388
- }
389
-
390
- private async _getProjNpmConfigAsync(): Promise<INpmConfig & { description: string; author: string }> {
391
- const projNpmConfig = await FsUtil.readJsonAsync(path.resolve(this._rootPath, "package.json")) as INpmConfig;
392
-
393
- if (projNpmConfig.description === undefined) {
394
- throw new Error("프로젝트 package.json 파일에 description 이 설정되어있지 않습니다.");
395
- }
396
- if (projNpmConfig.author === undefined) {
397
- throw new Error("프로젝트 package.json 파일에 author 가 설정되어있지 않습니다.");
398
- }
399
-
400
- return projNpmConfig as any;
401
- }
402
- }
@@ -1,30 +0,0 @@
1
- export const fc_package_eslintrc = (opt: { isForAngular: boolean }): string => /* language=cjs */ `
2
-
3
- module.exports = {
4
- overrides: [
5
- {
6
- files: ["*.ts"],
7
- parserOptions: {
8
- tsconfigRootDir: __dirname,
9
- project: "tsconfig.json"
10
- },
11
- settings: {
12
- "import/resolver": {
13
- "typescript": {
14
- project: require("path").resolve(__dirname, "tsconfig.json")
15
- }
16
- }
17
- }
18
- }${opt.isForAngular ? `,
19
- {
20
- files: ["*.ts"],
21
- extends: ["plugin:@simplysm/angular"]
22
- },
23
- {
24
- files: ["*.html"],
25
- extends: ["plugin:@simplysm/angular-template"]
26
- }` : ""}
27
- ]
28
- };
29
-
30
- `.trim();
@@ -1,43 +0,0 @@
1
- import { INpmConfig } from "../../../commons";
2
- import { FsUtil } from "@simplysm/sd-core-node";
3
- import path from "path";
4
-
5
- export const fc_package_npmconfig = (opt: {
6
- projPath: string;
7
- name: string;
8
- description: string;
9
- isModule: boolean;
10
- main?: string;
11
- types?: string;
12
- dependencies: Record<string, string>;
13
- }): string => {
14
- const projNpmConfig = FsUtil.readJson(path.resolve(opt.projPath, "package.json")) as INpmConfig;
15
-
16
- if (projNpmConfig.repository?.url === undefined) {
17
- throw new Error("프로젝트 package.json 파일에 reposotry.url 이 설정되어있지 않습니다.");
18
- }
19
-
20
- return JSON.stringify({
21
- name: `@${projNpmConfig.name}/${opt.name}`,
22
- version: `${projNpmConfig.version}`,
23
- description: `${projNpmConfig.description} - ${opt.description}`,
24
- author: projNpmConfig.author,
25
- repository: {
26
- type: "git",
27
- url: projNpmConfig.repository.url,
28
- directory: `packages/${opt.name}`
29
- },
30
- license: "UNLICENSED",
31
- ...opt.isModule ? {
32
- type: "module"
33
- } : {},
34
- private: true,
35
- sideEffects: false,
36
- engines: {
37
- node: "^16"
38
- },
39
- ...opt.types !== undefined ? { types: opt.types } : {},
40
- ...opt.main !== undefined ? { main: opt.main } : {},
41
- ...Object.keys(opt.dependencies).length > 0 ? { dependencies: opt.dependencies } : {}
42
- }, undefined, 2);
43
- };
@@ -1,12 +0,0 @@
1
- export const fc_package_tsconfig = (opt: { isModule: boolean; useDom: boolean; options: Record<string, any> }): string => JSON.stringify({
2
- extends: "../../tsconfig.json",
3
- compilerOptions: {
4
- ...!opt.isModule ? { module: "CommonJS" } : {},
5
- lib: [
6
- "ES2020",
7
- ...opt.useDom ? ["DOM"] : []
8
- ],
9
- outDir: "./dist"
10
- },
11
- ...opt.options
12
- }, undefined, 2);
@@ -1,36 +0,0 @@
1
- export const fc_package_AppModule = (): string => /* language=ts */ `
2
-
3
- import { ApplicationRef, DoBootstrap, NgModule } from "@angular/core";
4
- import { BrowserModule } from "@angular/platform-browser";
5
- import {
6
- SdAngularModule,
7
- SdCanDeactivateGuardModule,
8
- SdToastProvider,
9
- SdToastProviderModule
10
- } from "@simplysm/sd-angular";
11
- import { AppPageModule } from "./_modules/AppPageModule";
12
- import { AppPage } from "./AppPage";
13
-
14
- @NgModule({
15
- imports: [
16
- BrowserModule,
17
-
18
- SdAngularModule.forRoot(),
19
- SdToastProviderModule,
20
- SdCanDeactivateGuardModule,
21
-
22
- AppPageModule
23
- ]
24
- })
25
- export class AppModule implements DoBootstrap {
26
- public constructor(private readonly _toast: SdToastProvider) {
27
- }
28
-
29
- public ngDoBootstrap(appRef: ApplicationRef): void {
30
- this._toast.alertThemes = ["danger"];
31
-
32
- appRef.bootstrap(AppPage);
33
- }
34
- }
35
-
36
- `.trim();
@@ -1,13 +0,0 @@
1
- export const fc_package_AppPage = (): string => /* language=ts */ `
2
-
3
- import { ChangeDetectionStrategy, Component } from "@angular/core";
4
-
5
- @Component({
6
- selector: "app-root",
7
- changeDetection: ChangeDetectionStrategy.OnPush,
8
- template: \`APP_PAGE\`
9
- })
10
- export class AppPage {
11
- }
12
-
13
- `.trim();
@@ -1,19 +0,0 @@
1
- import { StringUtil } from "@simplysm/sd-core-common";
2
-
3
- export const fc_package_Page = (opt: { name: string; isRouteParent: boolean }): string => /* language=ts */ `
4
-
5
- import { ChangeDetectionStrategy, Component } from "@angular/core";
6
-
7
- @Component({
8
- selector: "app-${StringUtil.toKebabCase(opt.name)}",
9
- changeDetection: ChangeDetectionStrategy.OnPush,
10
- template: \`
11
- ${opt.name}${opt.isRouteParent ? `<br/>
12
- <router-outlet></router-outlet>
13
- ` : ``}
14
- \`
15
- })
16
- export class ${opt.name}Page {
17
- }
18
-
19
- `.trim();
@@ -1,18 +0,0 @@
1
- export const fc_package_client_main = (): string => /* language=ts */ `
2
-
3
- import { enableProdMode } from "@angular/core";
4
- import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";
5
- import { AppModule } from "./AppModule";
6
-
7
- if (process.env["NODE_ENV"] === "production") {
8
- enableProdMode();
9
- }
10
-
11
- platformBrowserDynamic().bootstrapModule(AppModule)
12
- .catch(err => {
13
- // eslint-disable-next-line no-console
14
- console.error(err);
15
- });
16
-
17
-
18
- `.trim();
@@ -1,87 +0,0 @@
1
- export const fc_package_index = (opt: { description: string }): string => /* language=html */ `
2
-
3
- <!doctype html>
4
- <html lang="ko">
5
- <head>
6
- <meta charset="utf-8">
7
- <title>${opt.description}</title>
8
- <meta name="viewport" content="initial-scale=1, width=device-width, viewport-fit=cover">
9
- <link rel="shortcut icon" type="image/x-icon" href="favicon.ico">
10
- <meta name="format-detection" content="telephone=no">
11
- <meta name="msapplication-tap-highlight" content="no">
12
- </head>
13
- <body>
14
- <app-root>
15
- <style>
16
- *,
17
- *:after,
18
- *:before {
19
- box-sizing: border-box;
20
- }
21
-
22
- html, body {
23
- padding: 0;
24
- margin: 0;
25
- background: #f5f5f5;
26
- }
27
-
28
- .app-loader-bar {
29
- position: fixed;
30
- top: 0;
31
- left: 0;
32
- height: 2px;
33
- width: 100%;
34
- background-color: white;
35
- }
36
-
37
- .app-loader-bar > div {
38
- position: fixed;
39
- top: 0;
40
- left: 0;
41
- display: inline-block;
42
- height: 2px;
43
- width: 100%;
44
-
45
- transform-origin: left;
46
- }
47
-
48
- .app-loader-bar > div:first-child {
49
- background-color: #3f51b5;
50
- animation: app-loader-bar-1 2s infinite ease-in;
51
- }
52
-
53
- .app-loader-bar > div:last-child {
54
- background-color: white;
55
- animation: app-loader-bar-2 2s infinite ease-out;
56
- }
57
-
58
- @keyframes app-loader-bar-1 {
59
- 0% {
60
- transform: scaleX(0);
61
- }
62
- 60%, 100% {
63
- transform: scaleX(1.0);
64
- }
65
- }
66
-
67
- @keyframes app-loader-bar-2 {
68
- 0%, 50% {
69
- transform: scaleX(0);
70
- }
71
- 100% {
72
- transform: scaleX(1.0);
73
- }
74
- }
75
- </style>
76
-
77
- <div class="app-loader-bar">
78
- <div></div>
79
- <div></div>
80
- </div>
81
- </app-root>
82
-
83
- <noscript>Please enable JavaScript to continue using this application.</noscript>
84
- </body>
85
- </html>
86
-
87
- `.trim();