@simplysm/sd-cli 14.0.96 → 14.0.98

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 (72) hide show
  1. package/dist/commands/init/generators/client.d.ts.map +1 -1
  2. package/dist/commands/init/generators/client.js +3 -0
  3. package/dist/commands/init/generators/client.js.map +1 -1
  4. package/dist/commands/init/generators/root.d.ts.map +1 -1
  5. package/dist/commands/init/generators/root.js +0 -1
  6. package/dist/commands/init/generators/root.js.map +1 -1
  7. package/dist/commands/init/init.d.ts.map +1 -1
  8. package/dist/commands/init/init.js +1 -2
  9. package/dist/commands/init/init.js.map +1 -1
  10. package/dist/commands/init/normalize.d.ts.map +1 -1
  11. package/dist/commands/init/normalize.js +1 -0
  12. package/dist/commands/init/normalize.js.map +1 -1
  13. package/dist/commands/init/prompts.d.ts.map +1 -1
  14. package/dist/commands/init/prompts.js +8 -1
  15. package/dist/commands/init/prompts.js.map +1 -1
  16. package/dist/commands/init/types.d.ts +3 -0
  17. package/dist/commands/init/types.d.ts.map +1 -1
  18. package/dist/engines/EsbuildClientEngine.d.ts.map +1 -1
  19. package/dist/engines/EsbuildClientEngine.js +1 -0
  20. package/dist/engines/EsbuildClientEngine.js.map +1 -1
  21. package/dist/esbuild/esbuild-client-config.d.ts.map +1 -1
  22. package/dist/esbuild/esbuild-client-config.js +2 -11
  23. package/dist/esbuild/esbuild-client-config.js.map +1 -1
  24. package/dist/esbuild/esbuild-postcss-plugin.d.ts +4 -0
  25. package/dist/esbuild/esbuild-postcss-plugin.d.ts.map +1 -1
  26. package/dist/esbuild/esbuild-postcss-plugin.js +15 -0
  27. package/dist/esbuild/esbuild-postcss-plugin.js.map +1 -1
  28. package/dist/esbuild/esbuild-ssr-config.d.ts +27 -0
  29. package/dist/esbuild/esbuild-ssr-config.d.ts.map +1 -0
  30. package/dist/esbuild/esbuild-ssr-config.js +113 -0
  31. package/dist/esbuild/esbuild-ssr-config.js.map +1 -0
  32. package/dist/sd-config.types.d.ts +7 -0
  33. package/dist/sd-config.types.d.ts.map +1 -1
  34. package/dist/ssg/prerender.d.ts +19 -0
  35. package/dist/ssg/prerender.d.ts.map +1 -0
  36. package/dist/ssg/prerender.js +43 -0
  37. package/dist/ssg/prerender.js.map +1 -0
  38. package/dist/workers/client.worker.d.ts +2 -0
  39. package/dist/workers/client.worker.d.ts.map +1 -1
  40. package/dist/workers/client.worker.js +21 -0
  41. package/dist/workers/client.worker.js.map +1 -1
  42. package/package.json +6 -6
  43. package/src/commands/init/generators/client.ts +8 -0
  44. package/src/commands/init/generators/root.ts +0 -1
  45. package/src/commands/init/init.ts +63 -64
  46. package/src/commands/init/normalize.ts +1 -0
  47. package/src/commands/init/prompts.ts +9 -1
  48. package/src/commands/init/templates/client/package.json.hbs +2 -1
  49. package/src/commands/init/templates/client/src/main.server.ts.hbs +24 -0
  50. package/src/commands/init/templates/client/src/main.ts.hbs +13 -0
  51. package/src/commands/init/templates/workspace-root/sd.config.ts.hbs +3 -0
  52. package/src/commands/init/types.ts +3 -0
  53. package/src/engines/EsbuildClientEngine.ts +1 -0
  54. package/src/esbuild/esbuild-client-config.ts +2 -12
  55. package/src/esbuild/esbuild-postcss-plugin.ts +18 -0
  56. package/src/esbuild/esbuild-ssr-config.ts +149 -0
  57. package/src/sd-config.types.ts +7 -0
  58. package/src/ssg/prerender.ts +65 -0
  59. package/src/workers/client.worker.ts +26 -0
  60. package/tests/engines/base-engine.spec.ts +1 -26
  61. package/tests/init/__snapshots__/render.spec.ts.snap +38 -20
  62. package/tests/init/render.spec.ts +113 -33
  63. package/tests/utils/hmr-client-script.acc.spec.ts +0 -21
  64. package/src/commands/init/templates/workspace-root/.prettierignore +0 -1
  65. package/tests/angular/vite-angular-plugin.spec.ts +0 -102
  66. package/tests/engines/engine-adapter-isolation.spec.ts +0 -79
  67. package/tests/runtime/signal-handler.spec.ts +0 -21
  68. package/tests/utils/angular-build.spec.ts +0 -109
  69. package/tests/utils/esbuild-client-config.acc.spec.ts +0 -438
  70. package/tests/utils/esbuild-client-config.spec.ts +0 -659
  71. package/tests/utils/hmr-client-script.spec.ts +0 -44
  72. package/tests/utils/tsconfig-angular.spec.ts +0 -9
@@ -0,0 +1,19 @@
1
+ export interface PrerenderOptions {
2
+ /** buildSsrBundle로 생성된 server 번들 경로 */
3
+ bundlePath: string;
4
+ /** 프리렌더할 라우트 경로 목록 (예: ["/", "/about"]) */
5
+ routes: string[];
6
+ /** 렌더 기준 문서 (SPA 셸 index.html 내용) */
7
+ documentHtml: string;
8
+ /** base 경로 (예: "/my-client/") — 렌더 URL 구성에 사용 */
9
+ basePath: string;
10
+ /** HTML 출력 디렉토리 (dist/) */
11
+ outdir: string;
12
+ }
13
+ /**
14
+ * server 번들로 라우트별 HTML을 생성해 outdir에 기록한다.
15
+ *
16
+ * 라우트 1건이라도 실패하면 throw (빌드 전체 실패 — 부분 산출 금지).
17
+ */
18
+ export declare function prerenderRoutes(options: PrerenderOptions): Promise<void>;
19
+ //# sourceMappingURL=prerender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prerender.d.ts","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9E"}
@@ -0,0 +1,43 @@
1
+ import fs from "node:fs";
2
+ import path from "path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { createLogger } from "@simplysm/core-common";
5
+ const logger = createLogger("sd:cli:ssg:prerender");
6
+ /**
7
+ * server 번들로 라우트별 HTML을 생성해 outdir에 기록한다.
8
+ *
9
+ * 라우트 1건이라도 실패하면 throw (빌드 전체 실패 — 부분 산출 금지).
10
+ */
11
+ export async function prerenderRoutes(options) {
12
+ const bundleModule = (await import(pathToFileURL(options.bundlePath).href));
13
+ // 1. 전체 라우트 렌더 (전부 성공해야 기록 단계로 진행)
14
+ const rendered = [];
15
+ for (const route of options.routes) {
16
+ const normalizedRoute = normalizeRoute(route);
17
+ const url = path.posix.join(options.basePath, normalizedRoute);
18
+ logger.debug(`프리렌더: ${url}`);
19
+ try {
20
+ const html = await bundleModule.render(url, options.documentHtml);
21
+ rendered.push({ route: normalizedRoute, html });
22
+ }
23
+ catch (err) {
24
+ throw new Error(`프리렌더 실패 (라우트: ${route}): ${err instanceof Error ? err.message : String(err)}`, {
25
+ cause: err,
26
+ });
27
+ }
28
+ }
29
+ // 2. 라우트별 <경로>/index.html 기록 ("/"는 index.html)
30
+ for (const { route, html } of rendered) {
31
+ const htmlPath = path.join(options.outdir, route, "index.html");
32
+ fs.mkdirSync(path.dirname(htmlPath), { recursive: true });
33
+ fs.writeFileSync(htmlPath, html);
34
+ }
35
+ }
36
+ /** 라우트 경로 정규화: 선행 "/" 제거 ("/" → "") */
37
+ function normalizeRoute(route) {
38
+ if (!route.startsWith("/")) {
39
+ throw new Error(`프리렌더 라우트는 "/"로 시작해야 합니다: "${route}"`);
40
+ }
41
+ return route.replace(/^\/+/, "").replace(/\/+$/, "");
42
+ }
43
+ //# sourceMappingURL=prerender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prerender.js","sourceRoot":"","sources":["../../src/ssg/prerender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,MAAM,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAmBpD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAyB;IAC7D,MAAM,YAAY,GAAG,CAAC,MAAM,MAAM,CAChC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CACvC,CAAoB,CAAC;IAEtB,mCAAmC;IACnC,MAAM,QAAQ,GAAsC,EAAE,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC9F,KAAK,EAAE,GAAG;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAChE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,uCAAuC;AACvC,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC"}
@@ -18,6 +18,8 @@ export interface ClientBuildInfo {
18
18
  base?: string;
19
19
  /** 브라우저 지원 설정 (메인 프로세스에서 전달, Worker 내 sd.config.ts 재로드 방지) */
20
20
  browserSupport?: SdBrowserSupportConfig;
21
+ /** SSG(빌드 타임 프리렌더) 라우트 목록. 지정 시 프로덕션 빌드에서만 적용 */
22
+ prerender?: string[];
21
23
  }
22
24
  /** Client 빌드 결과 */
23
25
  export interface ClientBuildResult {
@@ -1 +1 @@
1
- {"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAO9E,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oBAAoB;AACpB,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAqCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2FtE;AAyHD;;GAEG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2G3E;AAED;;GAEG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCxC;AAcD,QAAA,MAAM,MAAM;;;eAED,OAAO,KAAK;oBACP,OAAO,UAAU;mBAClB,OAAO,SAAS;;;CAGI,CAAC;AAEpC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAO9E,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC1B,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oBAAoB;AACpB,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAqCD;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiHtE;AAyHD;;GAEG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA2G3E;AAED;;GAEG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCxC;AAcD,QAAA,MAAM,MAAM;;;eAED,OAAO,KAAK;oBACP,OAAO,UAAU;mBAClB,OAAO,SAAS;;;CAGI,CAAC;AAEpC,eAAe,MAAM,CAAC"}
@@ -11,6 +11,8 @@ import { createDevHttpServer } from "../dev-server/dev-http-server.js";
11
11
  import { createHmrService } from "../dev-server/hmr-service.js";
12
12
  import { createHmrPostTransform } from "../dev-server/hmr-client-script.js";
13
13
  import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public.js";
14
+ import { buildSsrBundle } from "../esbuild/esbuild-ssr-config.js";
15
+ import { prerenderRoutes } from "../ssg/prerender.js";
14
16
  import { IncrementalMtimeTracker } from "./incremental-mtime-tracker.js";
15
17
  //#endregion
16
18
  //#region Worker
@@ -80,6 +82,25 @@ async function build(info) {
80
82
  postTransform: pwaHtmlTransform,
81
83
  });
82
84
  fs.writeFileSync(path.join(outdir, "index.html"), indexResult.content);
85
+ // 5.5. SSG 프리렌더 (opt-in — prerender 설정이 있을 때만)
86
+ if (info.prerender != null && info.prerender.length > 0 && indexResult.errors.length === 0) {
87
+ // SPA 셸 별도 보존 (비프리렌더 라우트 딥링크 폴백용 — 서버 정적 핸들러가 사용)
88
+ fs.writeFileSync(path.join(outdir, "index.csr.html"), indexResult.content);
89
+ const { bundlePath } = await buildSsrBundle({
90
+ pkgDir: info.pkgDir,
91
+ cwd: info.cwd,
92
+ env: info.env,
93
+ postcssPlugins: info.browserSupport?.postCss?.plugins,
94
+ });
95
+ // 라우트별 HTML 생성 ("/"는 index.html을 프리렌더 결과로 대체)
96
+ await prerenderRoutes({
97
+ bundlePath,
98
+ routes: info.prerender,
99
+ documentHtml: indexResult.content,
100
+ basePath,
101
+ outdir,
102
+ });
103
+ }
83
104
  // 6. PWA 적용
84
105
  await applyPwa({
85
106
  pkgDir: info.pkgDir,
@@ -1 +1 @@
1
- {"version":3,"file":"client.worker.js","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.worker.js","sourceRoot":"","sources":["../../src/workers/client.worker.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.96",
3
+ "version": "14.0.98",
4
4
  "description": "Simplysm package - CLI tool",
5
5
  "author": "simplysm",
6
6
  "license": "Apache-2.0",
@@ -20,7 +20,7 @@
20
20
  "sideEffects": false,
21
21
  "dependencies": {
22
22
  "@angular/build": "^21.2.14",
23
- "@angular/compiler-cli": "^21.2.16",
23
+ "@angular/compiler-cli": "^21.2.17",
24
24
  "@fastify/http-proxy": "^11.5.0",
25
25
  "@inquirer/prompts": "^8.5.2",
26
26
  "acorn": "^8.16.0",
@@ -37,7 +37,7 @@
37
37
  "mime": "^4.1.0",
38
38
  "postcss": "^8.5.15",
39
39
  "sass": "^1.100.0",
40
- "semver": "^7.8.3",
40
+ "semver": "^7.8.4",
41
41
  "sharp": "^0.34.5",
42
42
  "smol-toml": "^1.6.1",
43
43
  "ssh2": "^1.17.0",
@@ -45,9 +45,9 @@
45
45
  "ws": "^8.21.0",
46
46
  "yaml": "^2.9.0",
47
47
  "yargs": "^18.0.0",
48
- "@simplysm/core-common": "14.0.96",
49
- "@simplysm/core-node": "14.0.96",
50
- "@simplysm/storage": "14.0.96"
48
+ "@simplysm/core-common": "14.0.98",
49
+ "@simplysm/storage": "14.0.98",
50
+ "@simplysm/core-node": "14.0.98"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/semver": "^7.7.1",
@@ -39,6 +39,14 @@ export async function generateClient(
39
39
  await renderToFile(path.join(TPL, "src/routes.ts.hbs"), path.join(out, "src/routes.ts"), data);
40
40
  }
41
41
 
42
+ if (client.useSsg) {
43
+ await renderToFile(
44
+ path.join(TPL, "src/main.server.ts.hbs"),
45
+ path.join(out, "src/main.server.ts"),
46
+ data,
47
+ );
48
+ }
49
+
42
50
  if (data.hasAuth && client.hasRouter) {
43
51
  await renderToFile(
44
52
  path.join(TPL, "src/app/login/login.view.ts.hbs"),
@@ -12,7 +12,6 @@ const FIXED: (string | [string, string])[] = [
12
12
  ".editorconfig",
13
13
  ["gitignore", ".gitignore"],
14
14
  ["npmrc", ".npmrc"],
15
- ".prettierignore",
16
15
  ".prettierrc.yaml",
17
16
  "eslint.config.ts",
18
17
  "pnpm-workspace.yaml",
@@ -1,64 +1,63 @@
1
- import crypto from "crypto";
2
- import path from "path";
3
- import { createLogger } from "@simplysm/core-common";
4
- import { generateClient } from "./generators/client";
5
- import { generateClientCommon } from "./generators/client-common";
6
- import { generateCommon } from "./generators/common";
7
- import { generateRoot } from "./generators/root";
8
- import { generateServer } from "./generators/server";
9
- import { normalize } from "./normalize";
10
- import { promptInit } from "./prompts";
11
- import type { RenderData } from "./types";
12
- import { validateBeforePrompt, validateInput } from "./validate";
13
- import { shellSpawn } from "../../utils/shell-spawn";
14
-
15
- const logger = createLogger("sd:cli:init");
16
-
17
- export interface InitOptions {
18
- cwd: string;
19
- }
20
-
21
- export async function runInit(opts: InitOptions): Promise<void> {
22
- await validateBeforePrompt(opts.cwd);
23
-
24
- const input = await promptInit(path.basename(opts.cwd));
25
- validateInput(input);
26
-
27
- const normalized = normalize(input);
28
- const data: RenderData = {
29
- ...normalized,
30
- jwtSecret: crypto.randomBytes(32).toString("hex"),
31
- };
32
-
33
- logger.info(`워크스페이스 부트스트랩 시작: ${opts.cwd}`);
34
-
35
- await generateRoot(opts.cwd, data);
36
- if (data.hasServer) await generateServer(opts.cwd, data);
37
- if (data.hasCommon) await generateCommon(opts.cwd, data);
38
- if (data.hasClientCommon) await generateClientCommon(opts.cwd, data);
39
- for (const client of data.clients) {
40
- await generateClient(opts.cwd, data, client);
41
- }
42
-
43
- logger.info("워크스페이스 부트스트랩 완료.");
44
-
45
- logger.info("의존성 설치 및 도구 준비 중...");
46
- await shellSpawn("mise", ["trust"], { cwd: opts.cwd, stdio: "inherit" });
47
- await shellSpawn("mise", ["install"], { cwd: opts.cwd, stdio: "inherit" });
48
- await shellSpawn("pnpm", ["install"], { cwd: opts.cwd, stdio: "inherit" });
49
- await shellSpawn("pnpm", ["approve-builds", "--all"], { cwd: opts.cwd, stdio: "inherit" });
50
- await shellSpawn("pnpm", ["up", "-r"], { cwd: opts.cwd, stdio: "inherit" });
51
- logger.info("의존성 설치 및 도구 준비 완료.");
52
-
53
- const steps: string[] = [];
54
- if (data.hasDb) {
55
- steps.push("sd.config.ts 의 configs.orm.MAIN 접속 정보 (host/port/user/password/database) 를 실제 값으로 수정");
56
- }
57
- if (data.hasMobile) {
58
- steps.push(`(prod 빌드 필요 시) capacitor 키스토어를 packages/${data.firstMobileClientName!}/res/ 에 배치 후 sd.config.ts 의 capacitor.platform.android.sign 블록 수동 추가`);
59
- }
60
- steps.push("CLAUDE.md 가 필요하면 Claude Code 내장 /init 으로 작성");
61
-
62
- logger.info("다음 단계:");
63
- steps.forEach((s, i) => logger.info(` ${i + 1}. ${s}`));
64
- }
1
+ import crypto from "crypto";
2
+ import path from "path";
3
+ import { createLogger } from "@simplysm/core-common";
4
+ import { generateClient } from "./generators/client";
5
+ import { generateClientCommon } from "./generators/client-common";
6
+ import { generateCommon } from "./generators/common";
7
+ import { generateRoot } from "./generators/root";
8
+ import { generateServer } from "./generators/server";
9
+ import { normalize } from "./normalize";
10
+ import { promptInit } from "./prompts";
11
+ import type { RenderData } from "./types";
12
+ import { validateBeforePrompt, validateInput } from "./validate";
13
+ import { shellSpawn } from "../../utils/shell-spawn";
14
+
15
+ const logger = createLogger("sd:cli:init");
16
+
17
+ export interface InitOptions {
18
+ cwd: string;
19
+ }
20
+
21
+ export async function runInit(opts: InitOptions): Promise<void> {
22
+ await validateBeforePrompt(opts.cwd);
23
+
24
+ const input = await promptInit(path.basename(opts.cwd));
25
+ validateInput(input);
26
+
27
+ const normalized = normalize(input);
28
+ const data: RenderData = {
29
+ ...normalized,
30
+ jwtSecret: crypto.randomBytes(32).toString("hex"),
31
+ };
32
+
33
+ logger.info(`워크스페이스 부트스트랩 시작: ${opts.cwd}`);
34
+
35
+ await generateRoot(opts.cwd, data);
36
+ if (data.hasServer) await generateServer(opts.cwd, data);
37
+ if (data.hasCommon) await generateCommon(opts.cwd, data);
38
+ if (data.hasClientCommon) await generateClientCommon(opts.cwd, data);
39
+ for (const client of data.clients) {
40
+ await generateClient(opts.cwd, data, client);
41
+ }
42
+
43
+ logger.info("워크스페이스 부트스트랩 완료.");
44
+
45
+ logger.info("의존성 설치 및 도구 준비 중...");
46
+ await shellSpawn("mise", ["trust"], { cwd: opts.cwd, stdio: "inherit" });
47
+ await shellSpawn("mise", ["install"], { cwd: opts.cwd, stdio: "inherit" });
48
+ await shellSpawn("pnpm", ["install", "--config.dangerously-allow-all-builds=true"], { cwd: opts.cwd, stdio: "inherit" });
49
+ await shellSpawn("pnpm", ["up", "-r"], { cwd: opts.cwd, stdio: "inherit" });
50
+ logger.info("의존성 설치 도구 준비 완료.");
51
+
52
+ const steps: string[] = [];
53
+ if (data.hasDb) {
54
+ steps.push("sd.config.ts 의 configs.orm.MAIN 접속 정보 (host/port/user/password/database) 를 실제 값으로 수정");
55
+ }
56
+ if (data.hasMobile) {
57
+ steps.push(`(prod 빌드 필요 시) capacitor 키스토어를 packages/${data.firstMobileClientName!}/res/ 에 배치 후 sd.config.ts 의 capacitor.platform.android.sign 블록 수동 추가`);
58
+ }
59
+ steps.push("CLAUDE.md 가 필요하면 Claude Code 내장 /init 으로 작성");
60
+
61
+ logger.info("다음 단계:");
62
+ steps.forEach((s, i) => logger.info(` ${i + 1}. ${s}`));
63
+ }
@@ -57,6 +57,7 @@ export function normalize(input: InitInput): NormalizedInput {
57
57
  isMobile,
58
58
  appStructureName: `${str.toCamelCase(baseName)}AppStructureItems`,
59
59
  needsNgIcons: (hasRouter && hasAuth) || hasDb,
60
+ useSsg: hasRouter && !isMobile && (c.useSsg ?? false),
60
61
  };
61
62
  });
62
63
 
@@ -112,7 +112,15 @@ export async function promptInit(workspaceNameDefault: string): Promise<InitInpu
112
112
  });
113
113
  }
114
114
 
115
- clients.push({ name: clientName, type: clientType, hasRouter });
115
+ let useSsg = false;
116
+ if (clientType === "web" && hasRouter) {
117
+ useSsg = await confirm({
118
+ message: `${clientName}: SSG (SEO 용 빌드 타임 프리렌더) 를 쓸까요?`,
119
+ default: false,
120
+ });
121
+ }
122
+
123
+ clients.push({ name: clientName, type: clientType, hasRouter, useSsg });
116
124
  }
117
125
 
118
126
  let mobileAppId: string | undefined;
@@ -15,7 +15,8 @@
15
15
  "@{{workspaceName}}/client-common": "workspace:*"{{/if}}{{#if hasServer}},
16
16
  "@simplysm/service-client": "^14.0.0",
17
17
  "@simplysm/service-common": "^14.0.0"{{/if}}{{#if client.hasRouter}},
18
- "@angular/router": "^21.2.0"{{/if}}{{#if client.needsNgIcons}},
18
+ "@angular/router": "^21.2.0"{{/if}}{{#if client.useSsg}},
19
+ "@angular/platform-server": "^21.2.0"{{/if}}{{#if client.needsNgIcons}},
19
20
  "@ng-icons/core": "^33.2.3",
20
21
  "@ng-icons/tabler-icons": "^33.2.3"{{/if}}{{#if hasDb}},
21
22
  "@{{workspaceName}}/common": "workspace:*",
@@ -0,0 +1,24 @@
1
+ import { bootstrapApplication, type BootstrapContext } from "@angular/platform-browser";
2
+ import { provideServerRendering } from "@angular/platform-server";
3
+ import { provideHttpClient, withFetch } from "@angular/common/http";
4
+ import { provideRouter } from "@angular/router";
5
+ import { provideSdAngular } from "@simplysm/angular";
6
+ import { AppRoot } from "./app.root";
7
+ import { routes } from "./routes";
8
+
9
+ // 프리렌더(빌드 시점) 전용 부트스트랩 — 서버 연결·로그 배선 등 브라우저 전용 초기화는 제외
10
+ const bootstrap = (context: BootstrapContext) =>
11
+ bootstrapApplication(
12
+ AppRoot,
13
+ {
14
+ providers: [
15
+ provideHttpClient(withFetch()),
16
+ provideRouter(routes),
17
+ provideSdAngular({ clientName: "{{client.name}}" }),
18
+ provideServerRendering(),
19
+ ],
20
+ },
21
+ context,
22
+ );
23
+
24
+ export default bootstrap;
@@ -3,11 +3,19 @@ import { enableProdMode, inject, provideAppInitializer } from "@angular/core";
3
3
  {{else}}
4
4
  import { enableProdMode } from "@angular/core";
5
5
  {{/if}}
6
+ {{#if client.useSsg}}
7
+ import { bootstrapApplication, provideClientHydration } from "@angular/platform-browser";
8
+ {{else}}
6
9
  import { bootstrapApplication } from "@angular/platform-browser";
10
+ {{/if}}
7
11
  import { provideHttpClient, withFetch } from "@angular/common/http";
8
12
  {{#if client.hasRouter}}
13
+ {{#if client.useSsg}}
14
+ import { provideRouter } from "@angular/router";
15
+ {{else}}
9
16
  import { provideRouter, withHashLocation } from "@angular/router";
10
17
  {{/if}}
18
+ {{/if}}
11
19
  import {
12
20
  provideSdAngular,
13
21
  {{#if hasAuth}}
@@ -68,7 +76,12 @@ bootstrapApplication(AppRoot, {
68
76
  providers: [
69
77
  provideHttpClient(withFetch()),
70
78
  {{#if client.hasRouter}}
79
+ {{#if client.useSsg}}
80
+ provideRouter(routes),
81
+ provideClientHydration(),
82
+ {{else}}
71
83
  provideRouter(routes, withHashLocation()),
84
+ {{/if}}
72
85
  {{/if}}
73
86
  provideSdAngular({ clientName: CLIENT_NAME }),
74
87
  {{#if hasDb}}
@@ -44,6 +44,9 @@ const config: SdConfigFn = () => ({
44
44
  {{#if ../hasServer}}
45
45
  server: "server",
46
46
  {{/if}}
47
+ {{#if useSsg}}
48
+ prerender: ["/"],
49
+ {{/if}}
47
50
  {{#if isMobile}}
48
51
  pwa: false,
49
52
  capacitor: {
@@ -5,6 +5,8 @@ export interface ClientInputSpec {
5
5
  name: string;
6
6
  type: ClientType;
7
7
  hasRouter: boolean;
8
+ /** SSG(빌드 타임 프리렌더) 사용 여부 (web + 라우팅 클라이언트만) */
9
+ useSsg?: boolean;
8
10
  }
9
11
 
10
12
  export interface InitInput {
@@ -29,6 +31,7 @@ export interface ClientSpec {
29
31
  isMobile: boolean;
30
32
  appStructureName: string;
31
33
  needsNgIcons: boolean;
34
+ useSsg: boolean;
32
35
  }
33
36
 
34
37
  export interface NormalizedInput {
@@ -72,6 +72,7 @@ export class EsbuildClientEngine implements BuildEngine {
72
72
  outDir: this._outDir,
73
73
  base: this._base,
74
74
  browserSupport: this._pkg.config.browserSupport,
75
+ prerender: this._pkg.config.prerender,
75
76
  });
76
77
 
77
78
  logger.debug(`[${this._pkg.name}] EsbuildClientEngine.run 완료 (success: ${result.success})`);
@@ -1,9 +1,7 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
- import { createRequire } from "module";
4
3
  import esbuild from "esbuild";
5
4
  import browserslistToEsbuild from "browserslist-to-esbuild";
6
- import type { AcceptedPlugin } from "postcss";
7
5
  import { AngularSourceFileCache } from "../angular/angular-compiler.js";
8
6
  import { createClientTransformStylesheet } from "../angular/client-transform-stylesheet.js";
9
7
  import {
@@ -12,7 +10,7 @@ import {
12
10
  } from "./esbuild-angular-compiler-plugin.js";
13
11
  import { MemoryLoadResultCache } from "./load-result-cache.js";
14
12
  import { createScssPlugin } from "./esbuild-scss-plugin";
15
- import { createPostcssPlugin } from "./esbuild-postcss-plugin";
13
+ import { createPostcssPlugin, loadPostcssPlugins } from "./esbuild-postcss-plugin";
16
14
 
17
15
  export interface CreateClientEsbuildOptions {
18
16
  /** 패키지 디렉토리 경로 */
@@ -82,15 +80,7 @@ export async function createClientEsbuildContext(
82
80
  const stylesheetErrors: string[] = [];
83
81
 
84
82
  // PostCSS 플러그인 로딩 (튜플 → 인스턴스) — transformStylesheet와 createPostcssPlugin 양쪽에 사용
85
- let loadedPostcssPlugins: AcceptedPlugin[] | undefined;
86
- if (options.postcssPlugins != null && options.postcssPlugins.length > 0) {
87
- const req = createRequire(path.join(options.pkgDir, "package.json"));
88
- loadedPostcssPlugins = options.postcssPlugins.map(([name, pluginOpts]) => {
89
- const pluginFn = req(name);
90
- const fn = pluginFn.default ?? pluginFn;
91
- return pluginOpts != null ? fn(pluginOpts) : fn;
92
- });
93
- }
83
+ const loadedPostcssPlugins = loadPostcssPlugins(options.pkgDir, options.postcssPlugins);
94
84
 
95
85
  // transformStylesheet 콜백 생성
96
86
  const cachePath = path.join(options.pkgDir, ".angular", "cache");
@@ -2,6 +2,8 @@ import type esbuild from "esbuild";
2
2
  import type { AcceptedPlugin } from "postcss";
3
3
  import postcss from "postcss";
4
4
  import fs from "fs";
5
+ import path from "path";
6
+ import { createRequire } from "module";
5
7
  import * as acorn from "acorn";
6
8
  import * as walk from "acorn-walk";
7
9
 
@@ -10,6 +12,22 @@ export interface CreatePostcssPluginOptions {
10
12
  plugins: AcceptedPlugin[];
11
13
  }
12
14
 
15
+ /**
16
+ * PostCSS 플러그인 설정 튜플([name, options])을 패키지 기준으로 로딩해 인스턴스 배열로 변환한다.
17
+ */
18
+ export function loadPostcssPlugins(
19
+ pkgDir: string,
20
+ postcssPlugins: [string, (object | string)?][] | undefined,
21
+ ): AcceptedPlugin[] | undefined {
22
+ if (postcssPlugins == null || postcssPlugins.length === 0) return undefined;
23
+ const req = createRequire(path.join(pkgDir, "package.json"));
24
+ return postcssPlugins.map(([pluginName, pluginOpts]) => {
25
+ const pluginFn = req(pluginName);
26
+ const fn = pluginFn.default ?? pluginFn;
27
+ return pluginOpts != null ? fn(pluginOpts) : fn;
28
+ });
29
+ }
30
+
13
31
  export function createPostcssPlugin(options: CreatePostcssPluginOptions): esbuild.Plugin {
14
32
  return {
15
33
  name: "sd-postcss",