@simplysm/sd-cli 14.0.96 → 14.0.97

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 (63) 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/normalize.d.ts.map +1 -1
  5. package/dist/commands/init/normalize.js +1 -0
  6. package/dist/commands/init/normalize.js.map +1 -1
  7. package/dist/commands/init/prompts.d.ts.map +1 -1
  8. package/dist/commands/init/prompts.js +8 -1
  9. package/dist/commands/init/prompts.js.map +1 -1
  10. package/dist/commands/init/types.d.ts +3 -0
  11. package/dist/commands/init/types.d.ts.map +1 -1
  12. package/dist/engines/EsbuildClientEngine.d.ts.map +1 -1
  13. package/dist/engines/EsbuildClientEngine.js +1 -0
  14. package/dist/engines/EsbuildClientEngine.js.map +1 -1
  15. package/dist/esbuild/esbuild-client-config.d.ts.map +1 -1
  16. package/dist/esbuild/esbuild-client-config.js +2 -11
  17. package/dist/esbuild/esbuild-client-config.js.map +1 -1
  18. package/dist/esbuild/esbuild-postcss-plugin.d.ts +4 -0
  19. package/dist/esbuild/esbuild-postcss-plugin.d.ts.map +1 -1
  20. package/dist/esbuild/esbuild-postcss-plugin.js +15 -0
  21. package/dist/esbuild/esbuild-postcss-plugin.js.map +1 -1
  22. package/dist/esbuild/esbuild-ssr-config.d.ts +27 -0
  23. package/dist/esbuild/esbuild-ssr-config.d.ts.map +1 -0
  24. package/dist/esbuild/esbuild-ssr-config.js +113 -0
  25. package/dist/esbuild/esbuild-ssr-config.js.map +1 -0
  26. package/dist/sd-config.types.d.ts +7 -0
  27. package/dist/sd-config.types.d.ts.map +1 -1
  28. package/dist/ssg/prerender.d.ts +19 -0
  29. package/dist/ssg/prerender.d.ts.map +1 -0
  30. package/dist/ssg/prerender.js +43 -0
  31. package/dist/ssg/prerender.js.map +1 -0
  32. package/dist/workers/client.worker.d.ts +2 -0
  33. package/dist/workers/client.worker.d.ts.map +1 -1
  34. package/dist/workers/client.worker.js +21 -0
  35. package/dist/workers/client.worker.js.map +1 -1
  36. package/package.json +6 -6
  37. package/src/commands/init/generators/client.ts +8 -0
  38. package/src/commands/init/normalize.ts +1 -0
  39. package/src/commands/init/prompts.ts +9 -1
  40. package/src/commands/init/templates/client/package.json.hbs +2 -1
  41. package/src/commands/init/templates/client/src/main.server.ts.hbs +24 -0
  42. package/src/commands/init/templates/client/src/main.ts.hbs +13 -0
  43. package/src/commands/init/templates/workspace-root/sd.config.ts.hbs +3 -0
  44. package/src/commands/init/types.ts +3 -0
  45. package/src/engines/EsbuildClientEngine.ts +1 -0
  46. package/src/esbuild/esbuild-client-config.ts +2 -12
  47. package/src/esbuild/esbuild-postcss-plugin.ts +18 -0
  48. package/src/esbuild/esbuild-ssr-config.ts +149 -0
  49. package/src/sd-config.types.ts +7 -0
  50. package/src/ssg/prerender.ts +65 -0
  51. package/src/workers/client.worker.ts +26 -0
  52. package/tests/engines/base-engine.spec.ts +1 -26
  53. package/tests/init/__snapshots__/render.spec.ts.snap +38 -20
  54. package/tests/init/render.spec.ts +113 -33
  55. package/tests/utils/hmr-client-script.acc.spec.ts +0 -21
  56. package/tests/angular/vite-angular-plugin.spec.ts +0 -102
  57. package/tests/engines/engine-adapter-isolation.spec.ts +0 -79
  58. package/tests/runtime/signal-handler.spec.ts +0 -21
  59. package/tests/utils/angular-build.spec.ts +0 -109
  60. package/tests/utils/esbuild-client-config.acc.spec.ts +0 -438
  61. package/tests/utils/esbuild-client-config.spec.ts +0 -659
  62. package/tests/utils/hmr-client-script.spec.ts +0 -44
  63. package/tests/utils/tsconfig-angular.spec.ts +0 -9
@@ -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.97",
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-node": "14.0.97",
49
+ "@simplysm/core-common": "14.0.97",
50
+ "@simplysm/storage": "14.0.97"
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"),
@@ -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",
@@ -0,0 +1,149 @@
1
+ import path from "path";
2
+ import esbuild from "esbuild";
3
+ import { AngularSourceFileCache } from "../angular/angular-compiler.js";
4
+ import { createClientTransformStylesheet } from "../angular/client-transform-stylesheet.js";
5
+ import {
6
+ createAngularCompilerPlugin,
7
+ type AngularCompilerPluginOptions,
8
+ } from "./esbuild-angular-compiler-plugin.js";
9
+ import { MemoryLoadResultCache } from "./load-result-cache.js";
10
+ import { createScssPlugin } from "./esbuild-scss-plugin";
11
+ import { createPostcssPlugin, loadPostcssPlugins } from "./esbuild-postcss-plugin";
12
+
13
+ export interface BuildSsrBundleOptions {
14
+ /** 패키지 디렉토리 경로 */
15
+ pkgDir: string;
16
+ /** 모노레포 루트 (workspaceRoot) */
17
+ cwd: string;
18
+ /** tsconfig 경로 (기본: pkgDir/tsconfig.json) */
19
+ tsconfig?: string;
20
+ /** 빌드 시 치환할 환경변수 */
21
+ env?: Record<string, string>;
22
+ /** PostCSS 플러그인 ([name, options] 튜플 배열) */
23
+ postcssPlugins?: [string, (object | string)?][];
24
+ /** 번들 출력 디렉토리 (기본: pkgDir/.angular/ssg) */
25
+ outdir?: string;
26
+ }
27
+
28
+ export interface SsrBundleResult {
29
+ /** 생성된 server 번들 파일 경로 */
30
+ bundlePath: string;
31
+ }
32
+
33
+ class SsrSourceFileCache extends AngularSourceFileCache {
34
+ readonly typeScriptFileCache = new Map<string, string | Uint8Array>();
35
+ readonly loadResultCache = new MemoryLoadResultCache();
36
+ }
37
+
38
+ /**
39
+ * SSG 프리렌더용 server 번들을 빌드한다.
40
+ *
41
+ * - 진입점: 가상 래퍼 — src/main.server.ts(부트스트랩 default export)를
42
+ * @angular/platform-server의 renderApplication으로 감싸 render(url, document)를 export
43
+ * - platform: node, format: esm (server 패키지 빌드 패턴과 동일)
44
+ */
45
+ export async function buildSsrBundle(options: BuildSsrBundleOptions): Promise<SsrBundleResult> {
46
+ const outdir = options.outdir ?? path.join(options.pkgDir, ".angular", "ssg");
47
+ const bundlePath = path.join(outdir, "sd-ssg-entry.mjs");
48
+
49
+ // SourceFileCache 생성 (일회성 빌드 — 증분 캐시 불필요)
50
+ const sourceFileCache = new SsrSourceFileCache();
51
+
52
+ // SCSS 스타일시트 변환용 공유 상태
53
+ const stylesheetDependencies = new Map<string, Set<string>>();
54
+ const stylesheetErrors: string[] = [];
55
+
56
+ // PostCSS 플러그인 로딩 (튜플 → 인스턴스)
57
+ const loadedPostcssPlugins = loadPostcssPlugins(options.pkgDir, options.postcssPlugins);
58
+
59
+ const cachePath = path.join(options.pkgDir, ".angular", "cache");
60
+ const transformStylesheet = createClientTransformStylesheet({
61
+ loadPaths: [
62
+ path.join(options.pkgDir, "node_modules"),
63
+ path.join(options.cwd, "node_modules"),
64
+ ],
65
+ postcssPlugins: loadedPostcssPlugins,
66
+ scssErrors: stylesheetErrors,
67
+ scssDependencies: stylesheetDependencies,
68
+ cacheDir: path.join(cachePath, "scss"),
69
+ });
70
+
71
+ const pluginOptions: AngularCompilerPluginOptions = {
72
+ tsconfig: options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json"),
73
+ sourcemap: false,
74
+ advancedOptimizations: true,
75
+ thirdPartySourcemaps: false,
76
+ incremental: false,
77
+ sourceFileCache,
78
+ typeScriptFileCache: sourceFileCache.typeScriptFileCache,
79
+ loadResultCache: sourceFileCache.loadResultCache,
80
+ includeTestMetadata: false,
81
+ persistentCachePath: cachePath,
82
+ transformStylesheet,
83
+ stylesheetDependencies,
84
+ stylesheetErrors,
85
+ };
86
+
87
+ const angularPlugin = createAngularCompilerPlugin(pluginOptions);
88
+
89
+ const scssPlugin = createScssPlugin({
90
+ loadPaths: [
91
+ path.join(options.pkgDir, "node_modules"),
92
+ path.join(options.cwd, "node_modules"),
93
+ ],
94
+ });
95
+
96
+ // define 주입 (client 빌드 패턴 + 서버 렌더 플래그)
97
+ const define: Record<string, string> = {
98
+ ngDevMode: "false",
99
+ ngJitMode: "false",
100
+ ngHmrMode: "false",
101
+ ngServerMode: "true",
102
+ };
103
+ if (options.env != null) {
104
+ define["import.meta.env"] = JSON.stringify(options.env);
105
+ }
106
+
107
+ // CJS 패키지 require() 지원 banner (server 패키지 빌드 패턴과 동일)
108
+ const bannerJs =
109
+ "import { createRequire } from 'module'; const require = createRequire(import.meta.url);";
110
+
111
+ await esbuild.build({
112
+ stdin: {
113
+ contents: [
114
+ 'import bootstrap from "./src/main.server";',
115
+ 'import { renderApplication } from "@angular/platform-server";',
116
+ "export function render(url: string, document: string): Promise<string> {",
117
+ " return renderApplication(bootstrap, { document, url });",
118
+ "}",
119
+ ].join("\n"),
120
+ resolveDir: options.pkgDir,
121
+ sourcefile: "sd-ssg-entry.ts",
122
+ loader: "ts",
123
+ },
124
+ target: "node20",
125
+ bundle: true,
126
+ splitting: false,
127
+ format: "esm",
128
+ platform: "node",
129
+ outdir,
130
+ // stdin 진입점의 출력 이름은 "stdin"으로 고정되므로 entryNames로 결정론적 지정
131
+ entryNames: "sd-ssg-entry",
132
+ outExtension: { ".js": ".mjs" },
133
+ write: true,
134
+ sourcemap: false,
135
+ logLevel: "silent",
136
+ tsconfig: options.tsconfig ?? path.join(options.pkgDir, "tsconfig.json"),
137
+ define,
138
+ banner: { js: bannerJs },
139
+ plugins: [
140
+ angularPlugin,
141
+ scssPlugin,
142
+ ...(loadedPostcssPlugins != null
143
+ ? [createPostcssPlugin({ plugins: loadedPostcssPlugins })]
144
+ : []),
145
+ ],
146
+ });
147
+
148
+ return { bundlePath };
149
+ }
@@ -240,6 +240,13 @@ export interface SdClientPackageConfig {
240
240
  browserSupport?: SdBrowserSupportConfig;
241
241
  /** PWA 설정. false이면 비활성화. 미지정 시 기본값으로 활성화 */
242
242
  pwa?: false | SdPwaConfig;
243
+ /**
244
+ * SSG(빌드 타임 프리렌더) 라우트 목록 (예: ["/", "/about"])
245
+ * - 지정 시 프로덕션 빌드에서 src/main.server.ts 진입점으로 라우트별 HTML을 생성
246
+ * - SPA 셸은 index.csr.html로 별도 출력 (비프리렌더 라우트 딥링크 폴백용)
247
+ * - dev/watch 모드에는 적용되지 않음 (기존 SPA dev 서버 그대로)
248
+ */
249
+ prerender?: string[];
243
250
  }
244
251
 
245
252
  /**
@@ -0,0 +1,65 @@
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
+
6
+ const logger = createLogger("sd:cli:ssg:prerender");
7
+
8
+ export interface PrerenderOptions {
9
+ /** buildSsrBundle로 생성된 server 번들 경로 */
10
+ bundlePath: string;
11
+ /** 프리렌더할 라우트 경로 목록 (예: ["/", "/about"]) */
12
+ routes: string[];
13
+ /** 렌더 기준 문서 (SPA 셸 index.html 내용) */
14
+ documentHtml: string;
15
+ /** base 경로 (예: "/my-client/") — 렌더 URL 구성에 사용 */
16
+ basePath: string;
17
+ /** HTML 출력 디렉토리 (dist/) */
18
+ outdir: string;
19
+ }
20
+
21
+ interface SsrBundleModule {
22
+ render(url: string, document: string): Promise<string>;
23
+ }
24
+
25
+ /**
26
+ * server 번들로 라우트별 HTML을 생성해 outdir에 기록한다.
27
+ *
28
+ * 라우트 1건이라도 실패하면 throw (빌드 전체 실패 — 부분 산출 금지).
29
+ */
30
+ export async function prerenderRoutes(options: PrerenderOptions): Promise<void> {
31
+ const bundleModule = (await import(
32
+ pathToFileURL(options.bundlePath).href
33
+ )) as SsrBundleModule;
34
+
35
+ // 1. 전체 라우트 렌더 (전부 성공해야 기록 단계로 진행)
36
+ const rendered: { route: string; html: string }[] = [];
37
+ for (const route of options.routes) {
38
+ const normalizedRoute = normalizeRoute(route);
39
+ const url = path.posix.join(options.basePath, normalizedRoute);
40
+ logger.debug(`프리렌더: ${url}`);
41
+ try {
42
+ const html = await bundleModule.render(url, options.documentHtml);
43
+ rendered.push({ route: normalizedRoute, html });
44
+ } catch (err) {
45
+ throw new Error(`프리렌더 실패 (라우트: ${route}): ${err instanceof Error ? err.message : String(err)}`, {
46
+ cause: err,
47
+ });
48
+ }
49
+ }
50
+
51
+ // 2. 라우트별 <경로>/index.html 기록 ("/"는 index.html)
52
+ for (const { route, html } of rendered) {
53
+ const htmlPath = path.join(options.outdir, route, "index.html");
54
+ fs.mkdirSync(path.dirname(htmlPath), { recursive: true });
55
+ fs.writeFileSync(htmlPath, html);
56
+ }
57
+ }
58
+
59
+ /** 라우트 경로 정규화: 선행 "/" 제거 ("/" → "") */
60
+ function normalizeRoute(route: string): string {
61
+ if (!route.startsWith("/")) {
62
+ throw new Error(`프리렌더 라우트는 "/"로 시작해야 합니다: "${route}"`);
63
+ }
64
+ return route.replace(/^\/+/, "").replace(/\/+$/, "");
65
+ }
@@ -14,6 +14,8 @@ import { createDevHttpServer, type DevHttpServer } from "../dev-server/dev-http-
14
14
  import { createHmrService, type HmrService } from "../dev-server/hmr-service";
15
15
  import { createHmrPostTransform } from "../dev-server/hmr-client-script";
16
16
  import { copyPublicFiles, watchPublicFiles } from "../utils/copy-public";
17
+ import { buildSsrBundle } from "../esbuild/esbuild-ssr-config";
18
+ import { prerenderRoutes } from "../ssg/prerender";
17
19
  import type { SdBrowserSupportConfig, SdPwaConfig } from "../sd-config.types";
18
20
  import type esbuild from "esbuild";
19
21
  import type { PartialMessage } from "esbuild";
@@ -40,6 +42,8 @@ export interface ClientBuildInfo {
40
42
  base?: string;
41
43
  /** 브라우저 지원 설정 (메인 프로세스에서 전달, Worker 내 sd.config.ts 재로드 방지) */
42
44
  browserSupport?: SdBrowserSupportConfig;
45
+ /** SSG(빌드 타임 프리렌더) 라우트 목록. 지정 시 프로덕션 빌드에서만 적용 */
46
+ prerender?: string[];
43
47
  }
44
48
 
45
49
  /** Client 빌드 결과 */
@@ -150,6 +154,28 @@ async function build(info: ClientBuildInfo): Promise<ClientBuildResult> {
150
154
 
151
155
  fs.writeFileSync(path.join(outdir, "index.html"), indexResult.content);
152
156
 
157
+ // 5.5. SSG 프리렌더 (opt-in — prerender 설정이 있을 때만)
158
+ if (info.prerender != null && info.prerender.length > 0 && indexResult.errors.length === 0) {
159
+ // SPA 셸 별도 보존 (비프리렌더 라우트 딥링크 폴백용 — 서버 정적 핸들러가 사용)
160
+ fs.writeFileSync(path.join(outdir, "index.csr.html"), indexResult.content);
161
+
162
+ const { bundlePath } = await buildSsrBundle({
163
+ pkgDir: info.pkgDir,
164
+ cwd: info.cwd,
165
+ env: info.env,
166
+ postcssPlugins: info.browserSupport?.postCss?.plugins,
167
+ });
168
+
169
+ // 라우트별 HTML 생성 ("/"는 index.html을 프리렌더 결과로 대체)
170
+ await prerenderRoutes({
171
+ bundlePath,
172
+ routes: info.prerender,
173
+ documentHtml: indexResult.content,
174
+ basePath,
175
+ outdir,
176
+ });
177
+ }
178
+
153
179
  // 6. PWA 적용
154
180
  await applyPwa({
155
181
  pkgDir: info.pkgDir,