@simplysm/sd-cli 7.0.247 → 7.0.263

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 (110) hide show
  1. package/README.md +48 -0
  2. package/dist/bin/sd-cli.mjs +171 -13
  3. package/dist/build-tool/SdCliElectron.mjs +3 -2
  4. package/dist/builder/SdCliClientBuilder.mjs +33 -35
  5. package/dist/builder/SdCliServerBuilder.d.ts +1 -0
  6. package/dist/builder/SdCliServerBuilder.mjs +58 -22
  7. package/dist/builder/SdCliTsLibBuilder.mjs +18 -12
  8. package/dist/commons.d.ts +9 -1
  9. package/dist/entry-points/SdCliProjectGenerator.d.ts +37 -0
  10. package/dist/entry-points/SdCliProjectGenerator.mjs +288 -0
  11. package/dist/entry-points/SdCliWorkspace.d.ts +6 -3
  12. package/dist/entry-points/SdCliWorkspace.mjs +147 -120
  13. package/dist/entry-points/file/base/fc_package_eslintrc.d.ts +3 -0
  14. package/dist/entry-points/file/base/fc_package_eslintrc.mjs +31 -0
  15. package/dist/entry-points/file/base/fc_package_npmconfig.d.ts +9 -0
  16. package/dist/entry-points/file/base/fc_package_npmconfig.mjs +32 -0
  17. package/dist/entry-points/file/base/fc_package_tsconfig.d.ts +4 -0
  18. package/dist/entry-points/file/base/fc_package_tsconfig.mjs +12 -0
  19. package/dist/entry-points/file/client/fc_package_AppModule.d.ts +1 -0
  20. package/dist/entry-points/file/client/fc_package_AppModule.mjs +37 -0
  21. package/dist/entry-points/file/client/fc_package_AppPage.d.ts +1 -0
  22. package/dist/entry-points/file/client/fc_package_AppPage.mjs +34 -0
  23. package/dist/entry-points/file/client/fc_package_appicons.d.ts +1 -0
  24. package/dist/entry-points/file/client/fc_package_appicons.mjs +6 -0
  25. package/dist/entry-points/file/client/fc_package_client_main.d.ts +1 -0
  26. package/dist/entry-points/file/client/fc_package_client_main.mjs +19 -0
  27. package/dist/entry-points/file/client/fc_package_index.d.ts +3 -0
  28. package/dist/entry-points/file/client/fc_package_index.mjs +88 -0
  29. package/dist/entry-points/file/client/fc_package_manifest.d.ts +5 -0
  30. package/dist/entry-points/file/client/fc_package_manifest.mjs +54 -0
  31. package/dist/entry-points/file/client/fc_package_polyfills.d.ts +1 -0
  32. package/dist/entry-points/file/client/fc_package_polyfills.mjs +11 -0
  33. package/dist/entry-points/file/client/fc_package_styles.d.ts +1 -0
  34. package/dist/entry-points/file/client/fc_package_styles.mjs +7 -0
  35. package/dist/entry-points/file/db/fc_package_DbContext.d.ts +3 -0
  36. package/dist/entry-points/file/db/fc_package_DbContext.mjs +14 -0
  37. package/dist/entry-points/file/db/fc_package_DbModel.d.ts +4 -0
  38. package/dist/entry-points/file/db/fc_package_DbModel.mjs +12 -0
  39. package/dist/entry-points/file/project/fc_project_editor_config.d.ts +1 -0
  40. package/dist/entry-points/file/project/fc_project_editor_config.mjs +22 -0
  41. package/dist/entry-points/file/project/fc_project_eslintrc.d.ts +1 -0
  42. package/dist/entry-points/file/project/fc_project_eslintrc.mjs +30 -0
  43. package/dist/entry-points/file/project/fc_project_gitattributes.d.ts +1 -0
  44. package/dist/entry-points/file/project/fc_project_gitattributes.mjs +6 -0
  45. package/dist/entry-points/file/project/fc_project_gitignore.d.ts +1 -0
  46. package/dist/entry-points/file/project/fc_project_gitignore.mjs +17 -0
  47. package/dist/entry-points/file/project/fc_project_npmconfig.d.ts +7 -0
  48. package/dist/entry-points/file/project/fc_project_npmconfig.mjs +35 -0
  49. package/dist/entry-points/file/project/fc_project_readme.d.ts +3 -0
  50. package/dist/entry-points/file/project/fc_project_readme.mjs +12 -0
  51. package/dist/entry-points/file/project/fc_project_simplysm.d.ts +1 -0
  52. package/dist/entry-points/file/project/fc_project_simplysm.mjs +2 -0
  53. package/dist/entry-points/file/project/fc_project_tsconfig.d.ts +1 -0
  54. package/dist/entry-points/file/project/fc_project_tsconfig.mjs +26 -0
  55. package/dist/entry-points/file/server/fc_package_server_main.d.ts +4 -0
  56. package/dist/entry-points/file/server/fc_package_server_main.mjs +60 -0
  57. package/dist/index.d.ts +23 -0
  58. package/dist/index.mjs +24 -1
  59. package/dist/packages/SdCliPackage.d.ts +1 -0
  60. package/dist/packages/SdCliPackage.mjs +68 -62
  61. package/dist/utils/SdCliBuildResultUtil.mjs +2 -2
  62. package/dist/worker/server-worker.d.ts +1 -0
  63. package/dist/worker/server-worker.mjs +67 -0
  64. package/package.json +10 -8
  65. package/src/bin/sd-cli.ts +198 -12
  66. package/src/build-tool/SdCliElectron.ts +2 -1
  67. package/src/builder/SdCliClientBuilder.ts +36 -36
  68. package/src/builder/SdCliJsLibBuilder.ts +70 -70
  69. package/src/builder/SdCliServerBuilder.ts +58 -20
  70. package/src/builder/SdCliTsLibBuilder.ts +450 -445
  71. package/src/commons.ts +7 -1
  72. package/src/entry-points/SdCliProjectGenerator.ts +353 -0
  73. package/src/entry-points/SdCliWorkspace.ts +171 -137
  74. package/src/entry-points/file/assets/assets/icons/icon-128x128.png +0 -0
  75. package/src/entry-points/file/assets/assets/icons/icon-144x144.png +0 -0
  76. package/src/entry-points/file/assets/assets/icons/icon-152x152.png +0 -0
  77. package/src/entry-points/file/assets/assets/icons/icon-192x192.png +0 -0
  78. package/src/entry-points/file/assets/assets/icons/icon-384x384.png +0 -0
  79. package/src/entry-points/file/assets/assets/icons/icon-512x512.png +0 -0
  80. package/src/entry-points/file/assets/assets/icons/icon-72x72.png +0 -0
  81. package/src/entry-points/file/assets/assets/icons/icon-96x96.png +0 -0
  82. package/src/entry-points/file/assets/favicon.ico +0 -0
  83. package/src/entry-points/file/base/fc_package_eslintrc.ts +30 -0
  84. package/src/entry-points/file/base/fc_package_npmconfig.ts +43 -0
  85. package/src/entry-points/file/base/fc_package_tsconfig.ts +11 -0
  86. package/src/entry-points/file/client/fc_package_AppModule.ts +36 -0
  87. package/src/entry-points/file/client/fc_package_AppPage.ts +33 -0
  88. package/src/entry-points/file/client/fc_package_appicons.ts +5 -0
  89. package/src/entry-points/file/client/fc_package_client_main.ts +18 -0
  90. package/src/entry-points/file/client/fc_package_index.ts +87 -0
  91. package/src/entry-points/file/client/fc_package_manifest.ts +53 -0
  92. package/src/entry-points/file/client/fc_package_polyfills.ts +10 -0
  93. package/src/entry-points/file/client/fc_package_styles.ts +6 -0
  94. package/src/entry-points/file/db/fc_package_DbContext.ts +14 -0
  95. package/src/entry-points/file/db/fc_package_DbModel.ts +11 -0
  96. package/src/entry-points/file/project/fc_project_editor_config.ts +21 -0
  97. package/src/entry-points/file/project/fc_project_eslintrc.ts +29 -0
  98. package/src/entry-points/file/project/fc_project_gitattributes.ts +5 -0
  99. package/src/entry-points/file/project/fc_project_gitignore.ts +16 -0
  100. package/src/entry-points/file/project/fc_project_npmconfig.ts +34 -0
  101. package/src/entry-points/file/project/fc_project_readme.ts +11 -0
  102. package/src/entry-points/file/project/fc_project_simplysm.ts +1 -0
  103. package/src/entry-points/file/project/fc_project_tsconfig.ts +25 -0
  104. package/src/entry-points/file/server/fc_package_server_main.ts +62 -0
  105. package/src/index.ts +23 -0
  106. package/src/packages/SdCliPackage.ts +75 -58
  107. package/src/utils/SdCliBuildResultUtil.ts +76 -76
  108. package/src/worker/server-worker.ts +72 -0
  109. package/tsconfig-build.json +2 -1
  110. package/tsconfig.json +2 -1
@@ -0,0 +1,87 @@
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();
@@ -0,0 +1,53 @@
1
+ export const fc_package_manifest = (opt: { author: string; description: string; version: string }): string => JSON.stringify({
2
+ "name": opt.description,
3
+ "short_name": opt.description,
4
+ "version": opt.version,
5
+ "description": opt.description,
6
+ "author": opt.author,
7
+ "theme_color": "#263238",
8
+ "background_color": "#f5f5f5",
9
+ "display": "standalone",
10
+ "start_url": "index.html",
11
+ "icons": [
12
+ {
13
+ "src": "assets/icons/icon-72x72.png",
14
+ "sizes": "72x72",
15
+ "type": "image/png"
16
+ },
17
+ {
18
+ "src": "assets/icons/icon-96x96.png",
19
+ "sizes": "96x96",
20
+ "type": "image/png"
21
+ },
22
+ {
23
+ "src": "assets/icons/icon-128x128.png",
24
+ "sizes": "128x128",
25
+ "type": "image/png"
26
+ },
27
+ {
28
+ "src": "assets/icons/icon-144x144.png",
29
+ "sizes": "144x144",
30
+ "type": "image/png"
31
+ },
32
+ {
33
+ "src": "assets/icons/icon-152x152.png",
34
+ "sizes": "152x152",
35
+ "type": "image/png"
36
+ },
37
+ {
38
+ "src": "assets/icons/icon-192x192.png",
39
+ "sizes": "192x192",
40
+ "type": "image/png"
41
+ },
42
+ {
43
+ "src": "assets/icons/icon-384x384.png",
44
+ "sizes": "384x384",
45
+ "type": "image/png"
46
+ },
47
+ {
48
+ "src": "assets/icons/icon-512x512.png",
49
+ "sizes": "512x512",
50
+ "type": "image/png"
51
+ }
52
+ ]
53
+ }, undefined, 2);
@@ -0,0 +1,10 @@
1
+ export const fc_package_polyfills = (): string => /* language=ts */ `
2
+
3
+ // 무조건 zone.js가 sd-core-browser 보다 위에 와야함
4
+
5
+ import "zone.js";
6
+ import "@simplysm/sd-core-common";
7
+ import "@simplysm/sd-core-browser";
8
+
9
+
10
+ `.trim();
@@ -0,0 +1,6 @@
1
+ export const fc_package_styles = (): string => /* language=scss */ `
2
+
3
+ @import "~@simplysm/sd-angular/scss/styles.scss";
4
+
5
+
6
+ `.trim();
@@ -0,0 +1,14 @@
1
+ import { StringUtil } from "@simplysm/sd-core-common";
2
+
3
+ export const fc_package_DbContext = (opt: { name: string }): string => /* language=ts */ `
4
+
5
+ import { Type } from "@simplysm/sd-core-common";
6
+ import { IDbMigration, DbContext } from "@simplysm/sd-orm-common";
7
+
8
+ export class ${StringUtil.toPascalCase(opt.name)}DbContext extends DbContext {
9
+ public get migrations(): Type<IDbMigration>[] {
10
+ return [];
11
+ }
12
+ }
13
+
14
+ `.trim();
@@ -0,0 +1,11 @@
1
+ export const fc_package_DbModel = (opt: { name: string; description: string }): string => /* language=ts */ `
2
+
3
+ import { Column, Table } from "@simplysm/sd-orm-common";
4
+
5
+ @Table({ description: "${opt.description}" })
6
+ export class ${opt.name} {
7
+ @Column({ description: "ID", autoIncrement: true, primaryKey: 1 })
8
+ public id?: number;
9
+ }
10
+
11
+ `.trim();
@@ -0,0 +1,21 @@
1
+ export const fc_project_editor_config = (): string => /* language=editorconfig */ `
2
+
3
+ root = true
4
+
5
+ [*]
6
+ end_of_line = lf
7
+ insert_final_newline = true
8
+
9
+ charset = utf-8
10
+ indent_style = space
11
+ indent_size = 2
12
+
13
+ ij_any_else_on_new_line = true
14
+ ij_any_catch_on_new_line = true
15
+ ij_any_finally_on_new_line = true
16
+ ij_typescript_spaces_within_object_literal_braces = true
17
+ ij_typescript_spaces_within_imports = true
18
+ ij_javascript_spaces_within_object_literal_braces = true
19
+ ij_javascript_spaces_within_imports = true
20
+
21
+ `.trim();
@@ -0,0 +1,29 @@
1
+ export const fc_project_eslintrc = (): string => /* language=cjs */ `
2
+
3
+ module.exports = {
4
+ root: true,
5
+ ignorePatterns: [
6
+ "**/node_modules/**",
7
+ "**/dist/**",
8
+ "**/.*/**"
9
+ ],
10
+ overrides: [
11
+ {
12
+ files: ["*.js", "*.cjs", "*.mjs"],
13
+ extends: ["plugin:@simplysm/base"]
14
+ },
15
+ {
16
+ files: ["*.mjs"],
17
+ parserOptions: {
18
+ ecmaVersion: 2020,
19
+ sourceType: "module"
20
+ }
21
+ },
22
+ {
23
+ files: ["*.ts"],
24
+ extends: ["plugin:@simplysm/typescript"]
25
+ }
26
+ ]
27
+ };
28
+
29
+ `.trim();
@@ -0,0 +1,5 @@
1
+ export const fc_project_gitattributes = (): string => /* language=gitattributes */ `
2
+
3
+ *.sql filter=lfs diff=lfs merge=lfs -text
4
+
5
+ `.trim();
@@ -0,0 +1,16 @@
1
+ export const fc_project_gitignore = (): string => /* language=gitignore */ `
2
+
3
+ .idea/**/workspace.xml
4
+ .idea/shelf
5
+ node_modules
6
+ tsconfig-build.json
7
+ dist
8
+ .cache
9
+ .cordova
10
+ _logs
11
+ _modules
12
+ _routes.ts
13
+ ~$*.xlsx
14
+ .*
15
+
16
+ `.trim();
@@ -0,0 +1,34 @@
1
+ export const fc_project_npmconfig = (opt: { name: string; description: string; author: string; gitUrl: string; cliVersion?: string }): string => JSON.stringify({
2
+ name: opt.name,
3
+ version: "1.0.0",
4
+ description: opt.description,
5
+ author: opt.author,
6
+ repository: {
7
+ type: "git",
8
+ url: opt.gitUrl
9
+ },
10
+ type: "module",
11
+ license: "UNLICENSED",
12
+ private: true,
13
+ engines: {
14
+ node: "^16"
15
+ },
16
+ workspaces: [
17
+ "packages/*"
18
+ ],
19
+ scripts: {
20
+ "watch": "sd-cli watch",
21
+ "build": "sd-cli build",
22
+ "publish": "sd-cli publish",
23
+ "----- utils": "",
24
+ "postinstall": "sd-cli prepare"
25
+ },
26
+ devDependencies: {
27
+ "@simplysm/eslint-plugin": "~7.0.0",
28
+ "@simplysm/sd-cli": opt.cliVersion ?? "~7.0.0",
29
+ "@types/node": "^17.0.12",
30
+ "cross-env": "^7.0.3",
31
+ "eslint": "^8.7.0",
32
+ "typescript": "~4.5.5"
33
+ }
34
+ }, undefined, 2);
@@ -0,0 +1,11 @@
1
+ export const fc_project_readme = (opt: { description: string }): string => /* language=md */ `
2
+ # ${opt.description}
3
+
4
+ ## Requirements
5
+
6
+ * node@16.x.x
7
+
8
+ ## Installation
9
+
10
+ npm install
11
+ `.trim();
@@ -0,0 +1 @@
1
+ export const fc_project_simplysm = (): string => JSON.stringify({}, undefined, 2);
@@ -0,0 +1,25 @@
1
+ export const fc_project_tsconfig = (): string => JSON.stringify({
2
+ compilerOptions: {
3
+ declaration: true,
4
+ downlevelIteration: true,
5
+ experimentalDecorators: true,
6
+ emitDecoratorMetadata: true,
7
+ module: "ES2020",
8
+ target: "ES2020",
9
+ strict: true,
10
+ moduleResolution: "node",
11
+ esModuleInterop: true,
12
+ noImplicitOverride: true,
13
+ noImplicitReturns: true,
14
+ noImplicitAny: false,
15
+ useUnknownInCatchVariables: false,
16
+ noFallthroughCasesInSwitch: true,
17
+ inlineSourceMap: true,
18
+ skipDefaultLibCheck: true,
19
+ skipLibCheck: true,
20
+ forceConsistentCasingInFileNames: true,
21
+ noPropertyAccessFromIndexSignature: true,
22
+ importHelpers: true,
23
+ noUnusedLocals: true
24
+ }
25
+ }, undefined, 2);
@@ -0,0 +1,62 @@
1
+ import path from "path";
2
+ import { INpmConfig } from "../../../commons";
3
+ import { FsUtil } from "@simplysm/sd-core-node";
4
+
5
+ export const fc_package_server_main = (opt: { projPath: string; pkgName: string }): string => {
6
+ const projNpmConfig = FsUtil.readJson(path.resolve(opt.projPath, "package.json")) as INpmConfig;
7
+
8
+ return /* language=ts */ `
9
+
10
+ import { SdServiceServer } from "@simplysm/sd-service-server";
11
+ import { Logger, LoggerSeverity } from "@simplysm/sd-core-node";
12
+ import path from "path";
13
+
14
+ Error.stackTraceLimit = Infinity;
15
+
16
+ if (process.env["NODE_ENV"] === "production") {
17
+ Logger.setConfig({
18
+ console: {
19
+ level: LoggerSeverity.none
20
+ },
21
+ file: {
22
+ level: LoggerSeverity.debug,
23
+ outDir: path.resolve(__dirname, "_logs")
24
+ }
25
+ });
26
+ }
27
+ else if (process.env["SD_CLI_LOGGER_SEVERITY"] === "DEBUG") {
28
+ Logger.setConfig({
29
+ console: {
30
+ level: LoggerSeverity.debug
31
+ }
32
+ });
33
+ }
34
+ else {
35
+ Logger.setConfig({
36
+ console: {
37
+ level: LoggerSeverity.log,
38
+ },
39
+ file: {
40
+ level: LoggerSeverity.debug,
41
+ outDir: path.resolve(process.cwd(), "_logs")
42
+ }
43
+ });
44
+ }
45
+
46
+ const server = new SdServiceServer({
47
+ rootPath: __dirname,
48
+ services: [],
49
+ port: 50180
50
+ });
51
+
52
+ const logger = Logger.get(["${projNpmConfig.name}", "${opt.pkgName}"]);
53
+
54
+ server.listenAsync().catch((err) => {
55
+ logger.error(err);
56
+ process.exit(1);
57
+ });
58
+
59
+ export = server;
60
+
61
+ `.trim();
62
+ };
package/src/index.ts CHANGED
@@ -10,10 +10,33 @@ export * from "./builder/SdCliJsLibBuilder";
10
10
  export * from "./builder/SdCliServerBuilder";
11
11
  export * from "./builder/SdCliTsLibBuilder";
12
12
  export * from "./commons";
13
+ export * from "./entry-points/file/base/fc_package_eslintrc";
14
+ export * from "./entry-points/file/base/fc_package_npmconfig";
15
+ export * from "./entry-points/file/base/fc_package_tsconfig";
16
+ export * from "./entry-points/file/client/fc_package_appicons";
17
+ export * from "./entry-points/file/client/fc_package_AppModule";
18
+ export * from "./entry-points/file/client/fc_package_AppPage";
19
+ export * from "./entry-points/file/client/fc_package_client_main";
20
+ export * from "./entry-points/file/client/fc_package_index";
21
+ export * from "./entry-points/file/client/fc_package_manifest";
22
+ export * from "./entry-points/file/client/fc_package_polyfills";
23
+ export * from "./entry-points/file/client/fc_package_styles";
24
+ export * from "./entry-points/file/db/fc_package_DbContext";
25
+ export * from "./entry-points/file/db/fc_package_DbModel";
26
+ export * from "./entry-points/file/project/fc_project_editor_config";
27
+ export * from "./entry-points/file/project/fc_project_eslintrc";
28
+ export * from "./entry-points/file/project/fc_project_gitattributes";
29
+ export * from "./entry-points/file/project/fc_project_gitignore";
30
+ export * from "./entry-points/file/project/fc_project_npmconfig";
31
+ export * from "./entry-points/file/project/fc_project_readme";
32
+ export * from "./entry-points/file/project/fc_project_simplysm";
33
+ export * from "./entry-points/file/project/fc_project_tsconfig";
34
+ export * from "./entry-points/file/server/fc_package_server_main";
13
35
  export * from "./entry-points/SdCliFileCrypto";
14
36
  export * from "./entry-points/SdCliLocalUpdate";
15
37
  export * from "./entry-points/SdCliNpm";
16
38
  export * from "./entry-points/SdCliPrepare";
39
+ export * from "./entry-points/SdCliProjectGenerator";
17
40
  export * from "./entry-points/SdCliWorkspace";
18
41
  export * from "./ng-tools/babel/SdCliBbFileMetadata";
19
42
  export * from "./ng-tools/babel/SdCliBbRootMetadata";
@@ -74,41 +74,27 @@ export class SdCliPackage extends EventEmitter {
74
74
  await this._genBuildTsconfigAsync();
75
75
  }
76
76
 
77
- const workerPath = fileURLToPath(await import.meta.resolve!("../worker/build-worker"));
78
- await new Promise<void>((resolve, reject) => {
79
- const worker = cp.fork(workerPath, [
80
- "watch",
81
- this.rootPath,
82
- JsonConvert.stringify(this.config),
83
- this._workspaceRootPath
84
- ], {
85
- stdio: ["pipe", "pipe", "pipe", "ipc"],
86
- env: process.env
87
- });
88
-
89
- worker.on("error", (err) => {
90
- reject(err);
91
- });
92
-
93
- worker.stdout!.pipe(process.stdout);
94
- worker.stderr!.pipe(process.stderr);
95
-
96
- worker.on("message", (json: string) => {
97
- const msg = JsonConvert.parse(json);
77
+ await this._runBuildWorkerAsync(
78
+ "watch",
79
+ (message) => {
80
+ const msg = JsonConvert.parse(message);
98
81
  if (msg.event === "ready") {
99
- resolve();
82
+ return true;
100
83
  }
101
84
  else if (msg.event === "change") {
102
85
  this.emit("change");
86
+ return undefined;
103
87
  }
104
88
  else if (msg.event === "complete") {
105
89
  this.emit("complete", msg.body);
90
+ return undefined;
106
91
  }
107
92
  else {
108
- throw new NeverEntryError();
93
+ return new NeverEntryError();
109
94
  }
110
- });
111
- });
95
+ },
96
+ (err) => err
97
+ );
112
98
  }
113
99
 
114
100
  public async buildAsync(): Promise<ISdCliPackageBuildResult[]> {
@@ -118,40 +104,18 @@ export class SdCliPackage extends EventEmitter {
118
104
  await this._genBuildTsconfigAsync();
119
105
  }
120
106
 
121
- const workerPath = fileURLToPath(await import.meta.resolve!("../worker/build-worker"));
122
- return await new Promise<ISdCliPackageBuildResult[]>((resolve, reject) => {
123
- const worker = cp.fork(workerPath, [
124
- "build",
125
- this.rootPath,
126
- JsonConvert.stringify(this.config),
127
- this._workspaceRootPath
128
- ], {
129
- stdio: ["pipe", "pipe", "pipe", "ipc"],
130
- env: process.env
131
- });
107
+ let result: ISdCliPackageBuildResult[] = [];
132
108
 
133
- worker.on("error", (err) => {
134
- reject(err);
135
- });
136
-
137
- worker.stdout!.pipe(process.stdout);
138
- worker.stderr!.pipe(process.stderr);
139
-
140
- let result: ISdCliPackageBuildResult[] = [];
141
-
142
- worker.on("message", (json: string) => {
143
- result = JsonConvert.parse(json);
144
- });
145
-
146
- worker.on("exit", (code) => {
147
- if (code !== 0) {
148
- reject(new Error(`오류와 함께 닫힘 (${code})`));
149
- return;
150
- }
109
+ await this._runBuildWorkerAsync(
110
+ "build",
111
+ (message) => {
112
+ result = JsonConvert.parse(message);
113
+ return undefined;
114
+ },
115
+ err => err
116
+ );
151
117
 
152
- resolve(result);
153
- });
154
- });
118
+ return result;
155
119
  }
156
120
 
157
121
  public async publishAsync(): Promise<void> {
@@ -167,7 +131,11 @@ export class SdCliPackage extends EventEmitter {
167
131
  }
168
132
  else {
169
133
  if (this.config.publish.type === "github") {
170
- const repoUrl = typeof this._npmConfig.repository === "string" ? this._npmConfig.repository : this._npmConfig.repository.url;
134
+ if (!this._npmConfig.repository) {
135
+ throw new Error("패키지의 package.json에 repository가 설정되지 않아 github로 배포할 수 없습니다.");
136
+ }
137
+
138
+ const repoUrl = this._npmConfig.repository.url;
171
139
  const repoOwner = repoUrl.split("/").slice(-2)[0];
172
140
  const repoName = repoUrl.split("/").slice(-2)[1].replace(/\..*/g, "");
173
141
 
@@ -239,4 +207,53 @@ export class SdCliPackage extends EventEmitter {
239
207
  const buildTsconfigFilePath = path.resolve(this.rootPath, "tsconfig-build.json");
240
208
  await FsUtil.writeJsonAsync(buildTsconfigFilePath, buildTsconfig, { space: 2 });
241
209
  }
210
+
211
+ private async _runBuildWorkerAsync(cmd: string, success: (message: string) => undefined | true | Error, error: (err: Error) => undefined | true | Error): Promise<void> {
212
+ return await new Promise<void>(async (resolve, reject) => {
213
+ const worker = cp.fork(
214
+ fileURLToPath(await import.meta.resolve!("../worker/build-worker")),
215
+ [
216
+ cmd,
217
+ this.rootPath,
218
+ JsonConvert.stringify(this.config),
219
+ this._workspaceRootPath
220
+ ],
221
+ {
222
+ stdio: ["pipe", "pipe", "pipe", "ipc"],
223
+ env: process.env
224
+ });
225
+
226
+ worker.on("error", (err) => {
227
+ const r = error(err);
228
+ if (r === true) {
229
+ resolve();
230
+ }
231
+ else if (r != null) {
232
+ reject(r);
233
+ }
234
+ });
235
+
236
+ worker.stdout!.pipe(process.stdout);
237
+ worker.stderr!.pipe(process.stderr);
238
+
239
+ worker.on("message", (json: string) => {
240
+ const r = success(json);
241
+ if (r === true) {
242
+ resolve();
243
+ }
244
+ else if (r != null) {
245
+ reject(r);
246
+ }
247
+ });
248
+
249
+ worker.on("exit", (code) => {
250
+ if (code !== 0) {
251
+ reject(new Error(`오류와 함께 닫힘 (${code})`));
252
+ return;
253
+ }
254
+
255
+ resolve();
256
+ });
257
+ });
258
+ }
242
259
  }