@simplysm/sd-cli 14.0.66 → 14.0.69

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 (100) hide show
  1. package/dist/commands/init/generators/client-common.d.ts +3 -0
  2. package/dist/commands/init/generators/client-common.d.ts.map +1 -0
  3. package/dist/commands/init/generators/client-common.js +17 -0
  4. package/dist/commands/init/generators/client-common.js.map +1 -0
  5. package/dist/commands/init/generators/client.d.ts +3 -0
  6. package/dist/commands/init/generators/client.d.ts.map +1 -0
  7. package/dist/commands/init/generators/client.js +20 -0
  8. package/dist/commands/init/generators/client.js.map +1 -0
  9. package/dist/commands/init/generators/common.d.ts +3 -0
  10. package/dist/commands/init/generators/common.d.ts.map +1 -0
  11. package/dist/commands/init/generators/common.js +14 -0
  12. package/dist/commands/init/generators/common.js.map +1 -0
  13. package/dist/commands/init/generators/root.d.ts +3 -0
  14. package/dist/commands/init/generators/root.d.ts.map +1 -0
  15. package/dist/commands/init/generators/root.js +28 -0
  16. package/dist/commands/init/generators/root.js.map +1 -0
  17. package/dist/commands/init/generators/server.d.ts +3 -0
  18. package/dist/commands/init/generators/server.d.ts.map +1 -0
  19. package/dist/commands/init/generators/server.js +12 -0
  20. package/dist/commands/init/generators/server.js.map +1 -0
  21. package/dist/commands/init/init.d.ts +5 -0
  22. package/dist/commands/init/init.d.ts.map +1 -0
  23. package/dist/commands/init/init.js +44 -0
  24. package/dist/commands/init/init.js.map +1 -0
  25. package/dist/commands/init/normalize.d.ts +3 -0
  26. package/dist/commands/init/normalize.d.ts.map +1 -0
  27. package/dist/commands/init/normalize.js +42 -0
  28. package/dist/commands/init/normalize.js.map +1 -0
  29. package/dist/commands/init/prompts.d.ts +3 -0
  30. package/dist/commands/init/prompts.d.ts.map +1 -0
  31. package/dist/commands/init/prompts.js +89 -0
  32. package/dist/commands/init/prompts.js.map +1 -0
  33. package/dist/commands/init/render.d.ts +4 -0
  34. package/dist/commands/init/render.d.ts.map +1 -0
  35. package/dist/commands/init/render.js +20 -0
  36. package/dist/commands/init/render.js.map +1 -0
  37. package/dist/commands/init/template-paths.d.ts +2 -0
  38. package/dist/commands/init/template-paths.d.ts.map +1 -0
  39. package/dist/commands/init/template-paths.js +7 -0
  40. package/dist/commands/init/template-paths.js.map +1 -0
  41. package/dist/commands/init/types.d.ts +47 -0
  42. package/dist/commands/init/types.d.ts.map +1 -0
  43. package/dist/commands/init/types.js +2 -0
  44. package/dist/commands/init/types.js.map +1 -0
  45. package/dist/commands/init/validate.d.ts +4 -0
  46. package/dist/commands/init/validate.d.ts.map +1 -0
  47. package/dist/commands/init/validate.js +31 -0
  48. package/dist/commands/init/validate.js.map +1 -0
  49. package/dist/sd-cli-entry.d.ts.map +1 -1
  50. package/dist/sd-cli-entry.js +14 -1
  51. package/dist/sd-cli-entry.js.map +1 -1
  52. package/package.json +5 -4
  53. package/src/commands/init/generators/client-common.ts +29 -0
  54. package/src/commands/init/generators/client.ts +29 -0
  55. package/src/commands/init/generators/common.ts +22 -0
  56. package/src/commands/init/generators/root.ts +32 -0
  57. package/src/commands/init/generators/server.ts +16 -0
  58. package/src/commands/init/init.ts +54 -0
  59. package/src/commands/init/normalize.ts +46 -0
  60. package/src/commands/init/prompts.ts +101 -0
  61. package/src/commands/init/render.ts +25 -0
  62. package/src/commands/init/template-paths.ts +8 -0
  63. package/src/commands/init/templates/client/ngsw-config.json +27 -0
  64. package/src/commands/init/templates/client/package.json.hbs +29 -0
  65. package/src/commands/init/templates/client/src/AppPage.ts.hbs +18 -0
  66. package/src/commands/init/templates/client/src/index.html.hbs +12 -0
  67. package/src/commands/init/templates/client/src/main.ts.hbs +28 -0
  68. package/src/commands/init/templates/client/src/polyfills.ts +2 -0
  69. package/src/commands/init/templates/client/src/routes.ts +3 -0
  70. package/src/commands/init/templates/client/src/styles.scss +1 -0
  71. package/src/commands/init/templates/client/tsconfig.json +20 -0
  72. package/src/commands/init/templates/client-common/package.json.hbs +20 -0
  73. package/src/commands/init/templates/client-common/src/index.ts.hbs +11 -0
  74. package/src/commands/init/templates/client-common/src/providers/AppOrmProvider.ts.hbs +36 -0
  75. package/src/commands/init/templates/client-common/src/providers/AppServiceProvider.ts +27 -0
  76. package/src/commands/init/templates/client-common/tsconfig.json +20 -0
  77. package/src/commands/init/templates/common/package.json.hbs +10 -0
  78. package/src/commands/init/templates/common/src/MainDbContext.ts +4 -0
  79. package/src/commands/init/templates/common/src/index.ts.hbs +5 -0
  80. package/src/commands/init/templates/common/tsconfig.json +8 -0
  81. package/src/commands/init/templates/server/package.json.hbs +23 -0
  82. package/src/commands/init/templates/server/src/index.ts +1 -0
  83. package/src/commands/init/templates/server/src/main.ts.hbs +25 -0
  84. package/src/commands/init/templates/server/tsconfig.json +8 -0
  85. package/src/commands/init/templates/workspace-root/.prettierignore +1 -0
  86. package/src/commands/init/templates/workspace-root/.prettierrc.yaml +12 -0
  87. package/src/commands/init/templates/workspace-root/eslint.config.ts +4 -0
  88. package/src/commands/init/templates/workspace-root/mise.toml.hbs +7 -0
  89. package/src/commands/init/templates/workspace-root/package.json.hbs +43 -0
  90. package/src/commands/init/templates/workspace-root/pnpm-workspace.yaml +17 -0
  91. package/src/commands/init/templates/workspace-root/sd.config.ts.hbs +63 -0
  92. package/src/commands/init/templates/workspace-root/tsconfig.json.hbs +30 -0
  93. package/src/commands/init/templates/workspace-root/vitest.config.ts.hbs +72 -0
  94. package/src/commands/init/types.ts +51 -0
  95. package/src/commands/init/validate.ts +41 -0
  96. package/src/sd-cli-entry.ts +19 -1
  97. package/tests/init/__snapshots__/render.spec.ts.snap +213 -0
  98. package/tests/init/normalize.spec.ts +114 -0
  99. package/tests/init/render.spec.ts +216 -0
  100. package/tests/init/validate.spec.ts +80 -0
@@ -1 +1 @@
1
- {"version":3,"file":"sd-cli-entry.js","sourceRoot":"","sources":["../src/sd-cli-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sd-cli-entry.js","sourceRoot":"","sources":["../src/sd-cli-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplysm/sd-cli",
3
- "version": "14.0.66",
3
+ "version": "14.0.69",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -31,6 +31,7 @@
31
31
  "esbuild": "^0.28.0",
32
32
  "eslint": "^9.39.4",
33
33
  "glob": "^13.0.6",
34
+ "handlebars": "^4.7.9",
34
35
  "jiti": "^2.7.0",
35
36
  "lmdb": "^3.5.4",
36
37
  "mime": "^4.1.0",
@@ -44,9 +45,9 @@
44
45
  "ws": "^8.20.1",
45
46
  "yaml": "^2.9.0",
46
47
  "yargs": "^18.0.0",
47
- "@simplysm/core-common": "14.0.66",
48
- "@simplysm/storage": "14.0.66",
49
- "@simplysm/core-node": "14.0.66"
48
+ "@simplysm/core-common": "14.0.69",
49
+ "@simplysm/storage": "14.0.69",
50
+ "@simplysm/core-node": "14.0.69"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@types/semver": "^7.7.1",
@@ -0,0 +1,29 @@
1
+ import path from "path";
2
+ import { copyFixed, renderToFile } from "../render";
3
+ import { TEMPLATES_ROOT } from "../template-paths";
4
+ import type { RenderData } from "../types";
5
+
6
+ const TPL = path.join(TEMPLATES_ROOT, "client-common");
7
+
8
+ export async function generateClientCommon(cwd: string, data: RenderData): Promise<void> {
9
+ const out = path.resolve(cwd, "packages/client-common");
10
+
11
+ await copyFixed(path.join(TPL, "tsconfig.json"), path.join(out, "tsconfig.json"));
12
+
13
+ await renderToFile(path.join(TPL, "package.json.hbs"), path.join(out, "package.json"), data);
14
+ await renderToFile(path.join(TPL, "src/index.ts.hbs"), path.join(out, "src/index.ts"), data);
15
+
16
+ if (data.hasServer) {
17
+ await copyFixed(
18
+ path.join(TPL, "src/providers/AppServiceProvider.ts"),
19
+ path.join(out, "src/providers/AppServiceProvider.ts"),
20
+ );
21
+ }
22
+ if (data.hasDb) {
23
+ await renderToFile(
24
+ path.join(TPL, "src/providers/AppOrmProvider.ts.hbs"),
25
+ path.join(out, "src/providers/AppOrmProvider.ts"),
26
+ data,
27
+ );
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ import path from "path";
2
+ import { copyFixed, renderToFile } from "../render";
3
+ import { TEMPLATES_ROOT } from "../template-paths";
4
+ import type { ClientSpec, RenderData } from "../types";
5
+
6
+ const TPL = path.join(TEMPLATES_ROOT, "client");
7
+
8
+ export async function generateClient(
9
+ cwd: string,
10
+ base: RenderData,
11
+ client: ClientSpec,
12
+ ): Promise<void> {
13
+ const out = path.resolve(cwd, "packages", client.name);
14
+ const data = { ...base, client };
15
+
16
+ await copyFixed(path.join(TPL, "tsconfig.json"), path.join(out, "tsconfig.json"));
17
+ await copyFixed(path.join(TPL, "ngsw-config.json"), path.join(out, "ngsw-config.json"));
18
+ await copyFixed(path.join(TPL, "src/polyfills.ts"), path.join(out, "src/polyfills.ts"));
19
+ await copyFixed(path.join(TPL, "src/styles.scss"), path.join(out, "src/styles.scss"));
20
+
21
+ await renderToFile(path.join(TPL, "package.json.hbs"), path.join(out, "package.json"), data);
22
+ await renderToFile(path.join(TPL, "src/main.ts.hbs"), path.join(out, "src/main.ts"), data);
23
+ await renderToFile(path.join(TPL, "src/AppPage.ts.hbs"), path.join(out, "src/AppPage.ts"), data);
24
+ await renderToFile(path.join(TPL, "src/index.html.hbs"), path.join(out, "src/index.html"), data);
25
+
26
+ if (client.hasRouter) {
27
+ await copyFixed(path.join(TPL, "src/routes.ts"), path.join(out, "src/routes.ts"));
28
+ }
29
+ }
@@ -0,0 +1,22 @@
1
+ import path from "path";
2
+ import { copyFixed, renderToFile } from "../render";
3
+ import { TEMPLATES_ROOT } from "../template-paths";
4
+ import type { RenderData } from "../types";
5
+
6
+ const TPL = path.join(TEMPLATES_ROOT, "common");
7
+
8
+ export async function generateCommon(cwd: string, data: RenderData): Promise<void> {
9
+ const out = path.resolve(cwd, "packages/common");
10
+
11
+ await copyFixed(path.join(TPL, "tsconfig.json"), path.join(out, "tsconfig.json"));
12
+
13
+ await renderToFile(path.join(TPL, "package.json.hbs"), path.join(out, "package.json"), data);
14
+ await renderToFile(path.join(TPL, "src/index.ts.hbs"), path.join(out, "src/index.ts"), data);
15
+
16
+ if (data.hasDb) {
17
+ await copyFixed(
18
+ path.join(TPL, "src/MainDbContext.ts"),
19
+ path.join(out, "src/MainDbContext.ts"),
20
+ );
21
+ }
22
+ }
@@ -0,0 +1,32 @@
1
+ import path from "path";
2
+ import { copyFixed, renderToFile } from "../render";
3
+ import { TEMPLATES_ROOT } from "../template-paths";
4
+ import type { RenderData } from "../types";
5
+
6
+ const TPL = path.join(TEMPLATES_ROOT, "workspace-root");
7
+
8
+ const FIXED = [
9
+ ".gitignore",
10
+ ".npmrc",
11
+ ".prettierignore",
12
+ ".prettierrc.yaml",
13
+ "eslint.config.ts",
14
+ "pnpm-workspace.yaml",
15
+ ];
16
+
17
+ const HBS = [
18
+ "mise.toml",
19
+ "package.json",
20
+ "tsconfig.json",
21
+ "sd.config.ts",
22
+ "vitest.config.ts",
23
+ ];
24
+
25
+ export async function generateRoot(cwd: string, data: RenderData): Promise<void> {
26
+ for (const name of FIXED) {
27
+ await copyFixed(path.join(TPL, name), path.join(cwd, name));
28
+ }
29
+ for (const name of HBS) {
30
+ await renderToFile(path.join(TPL, `${name}.hbs`), path.join(cwd, name), data);
31
+ }
32
+ }
@@ -0,0 +1,16 @@
1
+ import path from "path";
2
+ import { copyFixed, renderToFile } from "../render";
3
+ import { TEMPLATES_ROOT } from "../template-paths";
4
+ import type { RenderData } from "../types";
5
+
6
+ const TPL = path.join(TEMPLATES_ROOT, "server");
7
+
8
+ export async function generateServer(cwd: string, data: RenderData): Promise<void> {
9
+ const out = path.resolve(cwd, "packages/server");
10
+
11
+ await copyFixed(path.join(TPL, "tsconfig.json"), path.join(out, "tsconfig.json"));
12
+ await copyFixed(path.join(TPL, "src/index.ts"), path.join(out, "src/index.ts"));
13
+
14
+ await renderToFile(path.join(TPL, "package.json.hbs"), path.join(out, "package.json"), data);
15
+ await renderToFile(path.join(TPL, "src/main.ts.hbs"), path.join(out, "src/main.ts"), data);
16
+ }
@@ -0,0 +1,54 @@
1
+ import crypto from "crypto";
2
+ import { createLazyLogger } from "../../runtime/lazy-logger";
3
+ import { generateClient } from "./generators/client";
4
+ import { generateClientCommon } from "./generators/client-common";
5
+ import { generateCommon } from "./generators/common";
6
+ import { generateRoot } from "./generators/root";
7
+ import { generateServer } from "./generators/server";
8
+ import { normalize } from "./normalize";
9
+ import { promptInit } from "./prompts";
10
+ import type { RenderData } from "./types";
11
+ import { validateBeforePrompt, validateInput } from "./validate";
12
+
13
+ const logger = createLazyLogger("sd:cli:init");
14
+
15
+ export interface InitOptions {
16
+ cwd: string;
17
+ }
18
+
19
+ export async function runInit(opts: InitOptions): Promise<void> {
20
+ await validateBeforePrompt(opts.cwd);
21
+
22
+ const input = await promptInit();
23
+ validateInput(input);
24
+
25
+ const normalized = normalize(input);
26
+ const data: RenderData = {
27
+ ...normalized,
28
+ jwtSecret: crypto.randomBytes(32).toString("hex"),
29
+ };
30
+
31
+ logger.info(`워크스페이스 부트스트랩 시작: ${opts.cwd}`);
32
+
33
+ await generateRoot(opts.cwd, data);
34
+ if (data.hasServer) await generateServer(opts.cwd, data);
35
+ if (data.hasCommon) await generateCommon(opts.cwd, data);
36
+ if (data.hasClientCommon) await generateClientCommon(opts.cwd, data);
37
+ for (const client of data.clients) {
38
+ await generateClient(opts.cwd, data, client);
39
+ }
40
+
41
+ logger.info("워크스페이스 부트스트랩 완료.");
42
+
43
+ const steps: string[] = ["pnpm install"];
44
+ if (data.hasDb) {
45
+ steps.push("sd.config.ts 의 configs.orm.MAIN 접속 정보 (host/port/user/password/database) 를 실제 값으로 수정");
46
+ }
47
+ if (data.hasMobile) {
48
+ steps.push(`(prod 빌드 필요 시) capacitor 키스토어를 packages/${data.firstMobileClientName!}/res/ 에 배치 후 sd.config.ts 의 capacitor.platform.android.sign 블록 수동 추가`);
49
+ }
50
+ steps.push("CLAUDE.md 가 필요하면 Claude Code 내장 /init 으로 작성");
51
+
52
+ logger.info("다음 단계:");
53
+ steps.forEach((s, i) => logger.info(` ${i + 1}. ${s}`));
54
+ }
@@ -0,0 +1,46 @@
1
+ import type { ClientSpec, InitInput, NormalizedInput } from "./types";
2
+
3
+ const DB_PORTS: Record<NonNullable<InitInput["dbDialect"]>, number> = {
4
+ mysql: 3306,
5
+ postgres: 5432,
6
+ mssql: 1433,
7
+ };
8
+
9
+ export function normalize(input: InitInput): NormalizedInput {
10
+ const clients: ClientSpec[] = input.clients.map((c) => {
11
+ const name = c.name.startsWith("client-") ? c.name : `client-${c.name}`;
12
+ const isMobile = c.type === "mobile";
13
+ return {
14
+ name,
15
+ type: c.type,
16
+ hasRouter: isMobile ? false : c.hasRouter,
17
+ isMobile,
18
+ };
19
+ });
20
+
21
+ const hasDb = input.hasServer && input.hasDb;
22
+ const hasCommon = input.hasServer;
23
+ const hasClientCommon = input.hasServer || clients.length >= 2;
24
+ const hasMobile = clients.some((c) => c.isMobile);
25
+
26
+ return {
27
+ workspaceName: input.workspaceName,
28
+ workspaceNameUpper: input.workspaceName.toUpperCase().replace(/-/g, "_"),
29
+ description: input.description,
30
+ hasServer: input.hasServer,
31
+ hasDb,
32
+ dbDialect: hasDb ? input.dbDialect : undefined,
33
+ dbPort: hasDb && input.dbDialect != null ? DB_PORTS[input.dbDialect] : 0,
34
+ isMysql: hasDb && input.dbDialect === "mysql",
35
+ isPostgres: hasDb && input.dbDialect === "postgres",
36
+ isMssql: hasDb && input.dbDialect === "mssql",
37
+ serverPort: input.serverPort ?? 40080,
38
+ mobileAppId: hasMobile ? input.mobileAppId : undefined,
39
+ firstMobileClientName: clients.find((c) => c.isMobile)?.name,
40
+ clients,
41
+ hasCommon,
42
+ hasClientCommon,
43
+ hasMobile,
44
+ hasAnyClient: clients.length > 0,
45
+ };
46
+ }
@@ -0,0 +1,101 @@
1
+ import { confirm, input, select } from "@inquirer/prompts";
2
+ import type { ClientInputSpec, ClientType, DbDialect, InitInput } from "./types";
3
+
4
+ const KEBAB_CASE_RE = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
5
+ const APPID_RE = /^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$/;
6
+
7
+ export async function promptInit(): Promise<InitInput> {
8
+ const workspaceName = await input({
9
+ message: "워크스페이스 이름 (영문 kebab-case, 예: my-project):",
10
+ validate: (v) => KEBAB_CASE_RE.test(v) || "영문 kebab-case 만 허용됩니다.",
11
+ });
12
+
13
+ const description = await input({
14
+ message: "한 줄 설명:",
15
+ });
16
+
17
+ const hasServer = await confirm({
18
+ message: "server 패키지를 만들까요?",
19
+ default: true,
20
+ });
21
+
22
+ let hasDb = false;
23
+ let dbDialect: DbDialect | undefined;
24
+ let serverPort: number | undefined;
25
+ if (hasServer) {
26
+ hasDb = await confirm({
27
+ message: "DB 를 사용할까요? (ORM 부트스트랩 포함)",
28
+ default: true,
29
+ });
30
+ if (hasDb) {
31
+ dbDialect = await select<DbDialect>({
32
+ message: "DB dialect 를 선택하세요:",
33
+ choices: [
34
+ { name: "MySQL", value: "mysql" },
35
+ { name: "PostgreSQL", value: "postgres" },
36
+ { name: "MSSQL", value: "mssql" },
37
+ ],
38
+ });
39
+ }
40
+
41
+ const portStr = await input({
42
+ message: "server port (dev/prod 동일):",
43
+ default: "40080",
44
+ validate: (v) => {
45
+ const n = Number(v);
46
+ return (Number.isInteger(n) && n > 0 && n < 65536) || "유효한 포트 번호 (1-65535)";
47
+ },
48
+ });
49
+ serverPort = Number(portStr);
50
+ }
51
+
52
+ const clients: ClientInputSpec[] = [];
53
+ for (;;) {
54
+ const shouldAdd =
55
+ clients.length === 0
56
+ ? await confirm({ message: "client 를 추가할까요?", default: true })
57
+ : await confirm({ message: "다른 client 를 더 추가할까요?", default: false });
58
+ if (!shouldAdd) break;
59
+
60
+ const clientName = await input({
61
+ message: "client 이름 (예: admin → 자동으로 client-admin):",
62
+ validate: (v) => KEBAB_CASE_RE.test(v) || "영문 kebab-case 만 허용됩니다.",
63
+ });
64
+ const clientType = await select<ClientType>({
65
+ message: "client 타입:",
66
+ choices: [
67
+ { name: "일반 웹", value: "web" },
68
+ { name: "모바일 (capacitor)", value: "mobile" },
69
+ ],
70
+ });
71
+
72
+ let hasRouter = false;
73
+ if (clientType !== "mobile") {
74
+ hasRouter = await confirm({
75
+ message: `${clientName}: 라우팅 (@angular/router) 을 쓸까요?`,
76
+ default: true,
77
+ });
78
+ }
79
+
80
+ clients.push({ name: clientName, type: clientType, hasRouter });
81
+ }
82
+
83
+ let mobileAppId: string | undefined;
84
+ if (clients.some((c) => c.type === "mobile")) {
85
+ mobileAppId = await input({
86
+ message: "capacitor appId (reverse-DNS, 예: kr.co.example.app):",
87
+ validate: (v) => APPID_RE.test(v) || "reverse-DNS 형식이어야 합니다.",
88
+ });
89
+ }
90
+
91
+ return {
92
+ workspaceName,
93
+ description,
94
+ hasServer,
95
+ clients,
96
+ hasDb,
97
+ dbDialect,
98
+ mobileAppId,
99
+ serverPort,
100
+ };
101
+ }
@@ -0,0 +1,25 @@
1
+ import Handlebars from "handlebars";
2
+ import { fsx } from "@simplysm/core-node";
3
+
4
+ type Compiled = ReturnType<typeof Handlebars.compile>;
5
+
6
+ const compileCache = new Map<string, Compiled>();
7
+
8
+ export async function renderTemplate(tplPath: string, data: unknown): Promise<string> {
9
+ let tpl = compileCache.get(tplPath);
10
+ if (tpl == null) {
11
+ const source = await fsx.read(tplPath);
12
+ tpl = Handlebars.compile(source, { noEscape: true });
13
+ compileCache.set(tplPath, tpl);
14
+ }
15
+ return tpl(data);
16
+ }
17
+
18
+ export async function renderToFile(tplPath: string, outPath: string, data: unknown): Promise<void> {
19
+ const rendered = await renderTemplate(tplPath, data);
20
+ await fsx.write(outPath, rendered);
21
+ }
22
+
23
+ export async function copyFixed(sourcePath: string, outPath: string): Promise<void> {
24
+ await fsx.copy(sourcePath, outPath);
25
+ }
@@ -0,0 +1,8 @@
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+
4
+ const here = path.dirname(fileURLToPath(import.meta.url));
5
+ const isProd = here.includes(`${path.sep}dist${path.sep}`);
6
+ const pkgRoot = path.resolve(here, isProd ? "../../.." : "../../..");
7
+
8
+ export const TEMPLATES_ROOT = path.join(pkgRoot, "src", "commands", "init", "templates");
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "./node_modules/@angular/service-worker/config/schema.json",
3
+ "index": "/index.html",
4
+ "assetGroups": [
5
+ {
6
+ "name": "app",
7
+ "installMode": "prefetch",
8
+ "resources": {
9
+ "files": [
10
+ "/*.html",
11
+ "/*.css",
12
+ "/*.js"
13
+ ]
14
+ }
15
+ },
16
+ {
17
+ "name": "assets",
18
+ "installMode": "lazy",
19
+ "updateMode": "prefetch",
20
+ "resources": {
21
+ "files": [
22
+ "/**/*.{png,jpg,svg,ico,woff2,webmanifest}"
23
+ ]
24
+ }
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@{{workspaceName}}/{{client.name}}",
3
+ "version": "1.0.0",
4
+ "description": "{{description}} - {{client.name}}",
5
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "private": true,
8
+ "dependencies": {
9
+ "@angular/common": "^21.2.0",
10
+ "@angular/core": "^21.2.0",
11
+ "@angular/platform-browser": "^21.2.0",
12
+ "@simplysm/angular": "^14.0.0",
13
+ "@simplysm/core-browser": "^14.0.0",
14
+ "@simplysm/core-common": "^14.0.0"{{#if hasClientCommon}},
15
+ "@{{workspaceName}}/client-common": "workspace:*"{{/if}}{{#if hasServer}},
16
+ "@simplysm/service-client": "^14.0.0",
17
+ "@simplysm/service-common": "^14.0.0"{{/if}}{{#if client.hasRouter}},
18
+ "@angular/router": "^21.2.0"{{/if}}{{#if hasDb}},
19
+ "@{{workspaceName}}/common": "workspace:*",
20
+ "@simplysm/orm-common": "^14.0.0"{{/if}}{{#if client.isMobile}},
21
+ "@capacitor/core": "^7.0.0",
22
+ "@capacitor/device": "^7.0.0",
23
+ "@capacitor/haptics": "^7.0.0"{{/if}}
24
+ },
25
+ "devDependencies": {
26
+ "@angular/compiler": "^21.2.0",
27
+ "@angular/platform-browser-dynamic": "^21.2.0"
28
+ }
29
+ }
@@ -0,0 +1,18 @@
1
+ import { ChangeDetectionStrategy, Component, ViewEncapsulation } from "@angular/core";
2
+ {{#if client.hasRouter}}
3
+ import { RouterOutlet } from "@angular/router";
4
+ {{/if}}
5
+
6
+ @Component({
7
+ selector: "app-root",
8
+ changeDetection: ChangeDetectionStrategy.OnPush,
9
+ encapsulation: ViewEncapsulation.None,
10
+ standalone: true,
11
+ {{#if client.hasRouter}}
12
+ imports: [RouterOutlet],
13
+ template: `<router-outlet />`,
14
+ {{else}}
15
+ template: `<div></div>`,
16
+ {{/if}}
17
+ })
18
+ export class AppPage {}
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="ko">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="initial-scale=1, width=device-width, viewport-fit=cover" />
6
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
7
+ <title>{{description}}</title>
8
+ </head>
9
+ <body>
10
+ <app-root></app-root>
11
+ </body>
12
+ </html>
@@ -0,0 +1,28 @@
1
+ import { enableProdMode } from "@angular/core";
2
+ import { bootstrapApplication } from "@angular/platform-browser";
3
+ import { provideHttpClient, withFetch } from "@angular/common/http";
4
+ {{#if client.hasRouter}}
5
+ import { provideRouter, withHashLocation } from "@angular/router";
6
+ {{/if}}
7
+ import { provideSdAngular } from "@simplysm/angular";
8
+ import { AppPage } from "./AppPage";
9
+ {{#if client.hasRouter}}
10
+ import { routes } from "./routes";
11
+ {{/if}}
12
+ import "./styles.scss";
13
+
14
+ if (typeof ngDevMode !== "undefined" && !ngDevMode) {
15
+ enableProdMode();
16
+ }
17
+
18
+ bootstrapApplication(AppPage, {
19
+ providers: [
20
+ provideHttpClient(withFetch()),
21
+ {{#if client.hasRouter}}
22
+ provideRouter(routes, withHashLocation()),
23
+ {{/if}}
24
+ provideSdAngular({ clientName: "{{client.name}}" }),
25
+ ],
26
+ }).catch((err: unknown) => {
27
+ console.error(err);
28
+ });
@@ -0,0 +1,2 @@
1
+ import "@simplysm/core-common";
2
+ import "@simplysm/core-browser";
@@ -0,0 +1,3 @@
1
+ import type { Routes } from "@angular/router";
2
+
3
+ export const routes: Routes = [];
@@ -0,0 +1 @@
1
+ @use "@simplysm/angular/scss/styles";
@@ -0,0 +1,20 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "lib": ["ESNext", "DOM", "DOM.Iterable"],
5
+ "outDir": "./dist",
6
+ "typeRoots": ["./node_modules/@types"],
7
+ "customConditions": ["browser"]
8
+ },
9
+ "angularCompilerOptions": {
10
+ "strictTemplates": true,
11
+ "strictInjectionParameters": true,
12
+ "strictInputAccessModifiers": true,
13
+ "strictStandalone": true,
14
+ "typeCheckHostBindings": true,
15
+ "enableI18nLegacyMessageIdFormat": false,
16
+ "extendedDiagnostics": {
17
+ "defaultCategory": "error"
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@{{workspaceName}}/client-common",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "private": true,
6
+ "dependencies": {
7
+ "@angular/common": "^21.2.0",
8
+ "@angular/core": "^21.2.0",
9
+ "@simplysm/angular": "^14.0.0",
10
+ "@simplysm/core-common": "^14.0.0"{{#if hasServer}},
11
+ "@{{workspaceName}}/common": "workspace:*",
12
+ "@simplysm/service-client": "^14.0.0",
13
+ "@simplysm/service-common": "^14.0.0"{{/if}}{{#if hasDb}},
14
+ "@simplysm/orm-common": "^14.0.0"{{/if}}
15
+ },
16
+ "devDependencies": {
17
+ "@angular/compiler": "^21.2.0",
18
+ "@angular/platform-browser": "^21.2.0"
19
+ }
20
+ }
@@ -0,0 +1,11 @@
1
+ {{#if hasServer}}
2
+ export { AppServiceProvider, APP_MAIN_SERVICE_KEY } from "./providers/AppServiceProvider";
3
+ {{/if}}
4
+ {{#if hasDb}}
5
+ export { AppOrmProvider } from "./providers/AppOrmProvider";
6
+ {{/if}}
7
+ {{#unless hasServer}}
8
+ {{#unless hasDb}}
9
+ export {};
10
+ {{/unless}}
11
+ {{/unless}}