@simplysm/sd-claude 14.0.88 → 14.0.89

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 (122) hide show
  1. package/claude/references/sd-simplysm14/README.md +17 -17
  2. package/claude/references/sd-simplysm14/apis/angular/README.md +27 -53
  3. package/claude/references/sd-simplysm14/apis/angular/controls.md +37 -105
  4. package/claude/references/sd-simplysm14/apis/angular/crud.md +46 -43
  5. package/claude/references/sd-simplysm14/apis/angular/directives.md +22 -32
  6. package/claude/references/sd-simplysm14/apis/angular/features.md +40 -55
  7. package/claude/references/sd-simplysm14/apis/angular/infra.md +40 -40
  8. package/claude/references/sd-simplysm14/apis/angular/layout.md +25 -53
  9. package/claude/references/sd-simplysm14/apis/angular/overlay.md +70 -82
  10. package/claude/references/sd-simplysm14/apis/angular/routing-appstructure.md +44 -39
  11. package/claude/references/sd-simplysm14/apis/angular/selection-managers.md +21 -36
  12. package/claude/references/sd-simplysm14/apis/angular/shared-data.md +52 -65
  13. package/claude/references/sd-simplysm14/apis/angular/sheet.md +65 -70
  14. package/claude/references/sd-simplysm14/apis/capacitor-plugin-auto-update/README.md +33 -35
  15. package/claude/references/sd-simplysm14/apis/capacitor-plugin-file-system/README.md +7 -7
  16. package/claude/references/sd-simplysm14/apis/capacitor-plugin-intent/README.md +29 -29
  17. package/claude/references/sd-simplysm14/apis/capacitor-plugin-usb-storage/README.md +45 -50
  18. package/claude/references/sd-simplysm14/apis/core-browser/README.md +42 -55
  19. package/claude/references/sd-simplysm14/apis/core-browser/dom-element.md +62 -0
  20. package/claude/references/sd-simplysm14/apis/core-browser/indexed-db.md +13 -12
  21. package/claude/references/sd-simplysm14/apis/core-common/README.md +222 -98
  22. package/claude/references/sd-simplysm14/apis/core-common/array-ext.md +102 -53
  23. package/claude/references/sd-simplysm14/apis/core-common/async-runtime.md +128 -0
  24. package/claude/references/sd-simplysm14/apis/core-common/datetime.md +98 -64
  25. package/claude/references/sd-simplysm14/apis/core-common/errors.md +91 -0
  26. package/claude/references/sd-simplysm14/apis/core-common/json-transfer.md +34 -28
  27. package/claude/references/sd-simplysm14/apis/core-common/obj.md +104 -40
  28. package/claude/references/sd-simplysm14/apis/core-node/README.md +11 -8
  29. package/claude/references/sd-simplysm14/apis/core-node/consola.md +23 -31
  30. package/claude/references/sd-simplysm14/apis/core-node/cpx.md +33 -22
  31. package/claude/references/sd-simplysm14/apis/core-node/fs-watcher.md +28 -25
  32. package/claude/references/sd-simplysm14/apis/core-node/fsx.md +39 -53
  33. package/claude/references/sd-simplysm14/apis/core-node/pathx.md +26 -29
  34. package/claude/references/sd-simplysm14/apis/core-node/worker.md +27 -29
  35. package/claude/references/sd-simplysm14/apis/excel/README.md +14 -14
  36. package/claude/references/sd-simplysm14/apis/lint/README.md +27 -21
  37. package/claude/references/sd-simplysm14/apis/lint/rules.md +89 -49
  38. package/claude/references/sd-simplysm14/apis/orm-common/README.md +5 -59
  39. package/claude/references/sd-simplysm14/apis/orm-common/db-context.md +98 -67
  40. package/claude/references/sd-simplysm14/apis/orm-common/expr.md +107 -92
  41. package/claude/references/sd-simplysm14/apis/orm-common/queryable.md +99 -65
  42. package/claude/references/sd-simplysm14/apis/orm-common/schema.md +83 -98
  43. package/claude/references/sd-simplysm14/apis/orm-common/types.md +62 -52
  44. package/claude/references/sd-simplysm14/apis/orm-node/README.md +62 -25
  45. package/claude/references/sd-simplysm14/apis/orm-node/db-conn.md +27 -27
  46. package/claude/references/sd-simplysm14/apis/sd-cli/README.md +12 -15
  47. package/claude/references/sd-simplysm14/apis/sd-cli/SdTsCompiler.md +92 -45
  48. package/claude/references/sd-simplysm14/apis/sd-cli/sd-config-types.md +226 -108
  49. package/claude/references/sd-simplysm14/apis/service-client/README.md +84 -86
  50. package/claude/references/sd-simplysm14/apis/service-client/orm.md +14 -11
  51. package/claude/references/sd-simplysm14/apis/service-client/transport.md +33 -10
  52. package/claude/references/sd-simplysm14/apis/service-common/README.md +37 -23
  53. package/claude/references/sd-simplysm14/apis/service-common/app-structure.md +9 -9
  54. package/claude/references/sd-simplysm14/apis/service-common/protocol.md +13 -13
  55. package/claude/references/sd-simplysm14/apis/service-server/README.md +81 -65
  56. package/claude/references/sd-simplysm14/apis/service-server/service-authoring.md +32 -35
  57. package/claude/references/sd-simplysm14/apis/service-server/transport-internals.md +44 -33
  58. package/claude/references/sd-simplysm14/apis/service-server/v1-legacy.md +34 -45
  59. package/claude/references/sd-simplysm14/apis/storage/README.md +24 -18
  60. package/claude/skills/sd-demo/SKILL.md +6 -0
  61. package/claude/skills/sd-impl/SKILL.md +4 -7
  62. package/claude/skills/sd-spec/SKILL.md +31 -858
  63. package/claude/skills/sd-spec/references/spec-authoring.md +519 -0
  64. package/claude/workflows/sd-docs.js +84 -0
  65. package/package.json +1 -1
  66. package/claude/references/sd-simplysm14/apis/orm-common/query-builder.md +0 -29
  67. package/claude/skills/sd-demo/evals/fixtures/inventory-list/.specs/inventory/spec.md +0 -99
  68. package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/package.json +0 -12
  69. package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/index.ts +0 -3
  70. package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/inbound/inbound.list.ts +0 -150
  71. package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/inventory/inventory-master.list.ts +0 -143
  72. package/claude/skills/sd-demo/evals/fixtures/inventory-list/packages/demo-client/src/screens/outbound/outbound.list.ts +0 -150
  73. package/claude/skills/sd-demo/evals/fixtures/inventory-list/pnpm-workspace.yaml +0 -2
  74. package/claude/skills/sd-demo/evals/fixtures/inventory-list/sd.config.ts +0 -12
  75. package/claude/skills/sd-demo/evals/golden.jsonl +0 -1
  76. package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/package.json +0 -8
  77. package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/src/.gitkeep +0 -0
  78. package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/tests/.gitkeep +0 -0
  79. package/claude/skills/sd-dev/evals/fixtures/minimal-ts-pkg/tsconfig.json +0 -10
  80. package/claude/skills/sd-dev/evals/golden.jsonl +0 -1
  81. package/claude/skills/sd-docs/SKILL.md +0 -46
  82. package/claude/skills/sd-docs/evals/fixtures/new-write/.claude/references/sd-simplysm14/README.md +0 -7
  83. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/package.json +0 -5
  84. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/bar/src/index.ts +0 -3
  85. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/package.json +0 -6
  86. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/baz/src/index.ts +0 -1
  87. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/package.json +0 -5
  88. package/claude/skills/sd-docs/evals/fixtures/new-write/packages/foo/src/index.ts +0 -8
  89. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/README.md +0 -7
  90. package/claude/skills/sd-docs/evals/fixtures/update-mixed/.claude/references/sd-simplysm14/apis/foo/README.md +0 -3
  91. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/package.json +0 -5
  92. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/bar/src/index.ts +0 -3
  93. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/package.json +0 -6
  94. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/baz/src/index.ts +0 -1
  95. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/package.json +0 -5
  96. package/claude/skills/sd-docs/evals/fixtures/update-mixed/packages/foo/src/index.ts +0 -8
  97. package/claude/skills/sd-docs/evals/golden.jsonl +0 -2
  98. package/claude/skills/sd-impl/evals/fixtures/case-a-new-screen/.specs/260513120000_warehouse/spec.md +0 -101
  99. package/claude/skills/sd-impl/evals/fixtures/case-b-update-with-demo/.specs/260513120000_warehouse/spec.md +0 -101
  100. package/claude/skills/sd-impl/evals/fixtures/case-b-update-with-demo/packages/app/src/screens/box-register/box-register.view.ts +0 -46
  101. package/claude/skills/sd-impl/evals/fixtures/case-c-new-cross/.specs/260513120000_warehouse/spec.md +0 -89
  102. package/claude/skills/sd-impl/evals/fixtures/case-d-spec-modify/.specs/260513120000_warehouse/spec.md +0 -101
  103. package/claude/skills/sd-impl/evals/golden.jsonl +0 -4
  104. package/claude/skills/sd-manual/evals/fixtures/new-manual/src/notification.ts +0 -25
  105. package/claude/skills/sd-manual/evals/fixtures/update-manual/.claude/references/sd-simplysm14/manuals/notification.md +0 -14
  106. package/claude/skills/sd-manual/evals/fixtures/update-manual/src/notification.ts +0 -37
  107. package/claude/skills/sd-manual/evals/golden.jsonl +0 -2
  108. package/claude/skills/sd-review/evals/fixtures/code-review/src/foo.ts +0 -7
  109. package/claude/skills/sd-review/evals/fixtures/doc-review/docs/foo.md +0 -4
  110. package/claude/skills/sd-review/evals/golden.jsonl +0 -2
  111. package/claude/skills/sd-skill/evals/fixtures/existing-skill/.claude/skills/todo-format/SKILL.md +0 -14
  112. package/claude/skills/sd-skill/evals/fixtures/new-skill/.gitkeep +0 -0
  113. package/claude/skills/sd-skill/evals/golden.jsonl +0 -2
  114. package/claude/skills/sd-spec/evals/fixtures/case-a-split//355/232/214/354/235/230/353/241/235.md +0 -20
  115. package/claude/skills/sd-spec/evals/fixtures/case-b-detail/.specs/260513120000_warehouse/spec.md +0 -95
  116. package/claude/skills/sd-spec/evals/golden.jsonl +0 -2
  117. package/claude/skills/sd-unpack/evals/fixtures/eml-with-text-attachment/meeting.eml +0 -21
  118. package/claude/skills/sd-unpack/evals/fixtures/simple-eml/meeting.eml +0 -10
  119. package/claude/skills/sd-unpack/evals/golden.jsonl +0 -2
  120. package/claude/skills/sd-use/evals/fixtures/empty/.gitkeep +0 -0
  121. package/claude/skills/sd-use/evals/golden.jsonl +0 -6
  122. /package/claude/{skills/sd-docs/references/doc-rules.md → workflows/sd-docs.rules.md} +0 -0
@@ -1,173 +1,291 @@
1
1
  # @simplysm/sd-cli — sd.config.ts 설정 타입
2
2
 
3
- 프로젝트 루트 `sd.config.ts` 작성에 쓰는 타입 묶음. `sd.config.ts` 는 `SdConfigFn`(=`(params: SdConfigParams) => SdConfig | Promise<SdConfig>`)을 default export 해야 함. 권위 소스는 `packages/sd-cli/src/sd-config.types.ts`.
3
+ 프로젝트 루트 `sd.config.ts` 작성·수정 함께 읽히는 타입 묶음. `sd.config.ts` 는 `SdConfigFn` 을 default export 해야 한다. 권위 소스는 `packages/sd-cli/src/sd-config.types.ts`. 모든 타입은 `import type { ... } from "@simplysm/sd-cli"` 로 가져온다.
4
4
 
5
- ## SdConfigFn / SdConfigParams
6
-
7
- `sd.config.ts` 의 default export 시그니처. `SdConfig` 또는 그 Promise 를 반환.
5
+ ## SdConfigFn / SdConfigParams / SdConfig
8
6
 
9
7
  ```typescript
10
8
  type SdConfigFn = (params: SdConfigParams) => SdConfig | Promise<SdConfig>;
9
+
10
+ interface SdConfigParams {
11
+ cwd: string;
12
+ dev: boolean;
13
+ opt: string[];
14
+ }
15
+
16
+ interface SdConfig {
17
+ packages: Record<string, SdPackageConfig | undefined>;
18
+ replaceDeps?: Record<string, string>;
19
+ postPublish?: SdPostPublishScriptConfig[];
20
+ }
11
21
  ```
12
22
 
13
- `SdConfigParams` (함수에 주입되는 인자):
23
+ `SdConfigParams` (sd-cli 가 설정 함수에 주입):
24
+
25
+ - cwd: string — 현재 작업 디렉토리(워크스페이스 루트). 설정에서 경로를 절대화할 때 쓴다.
26
+ - dev: boolean — 개발 모드 플래그. true 면 dev 실행(watch/dev). env·publish 를 모드별로 분기할 때 쓴다.
27
+ - opt: string[] — CLI 의 `-o` 플래그로 넘어온 추가 옵션 배열. 임의 빌드 변형(예: 특정 환경 타겟)을 분기할 때 쓴다.
14
28
 
15
- - cwd: string — 현재 작업 디렉토리(워크스페이스 루트). 경로 계산 기준.
16
- - dev: boolean — 개발 모드 플래그. true 면 dev 실행, false 면 빌드/배포. env 분기에 사용.
17
- - opt: string[]CLI `-o` 플래그로 전달된 추가 옵션 문자열 배열. 조건부 설정 분기용.
29
+ `SdConfig`:
30
+
31
+ - packages: Record<string, SdPackageConfig | undefined> 키는 `packages/` 하위 디렉토리명(예: `"core-common"`), 값은 해당 패키지 빌드 설정. `undefined` 패키지를 빌드 대상에서 제외. 워크스페이스의 어떤 패키지를 어떤 타겟으로 빌드할지 한 곳에 모은다.
32
+ - replaceDeps?: Record<string, string> — 의존성 교체(심링크). 키는 node_modules 에서 찾을 패키지 glob(예: `"@simplysm/*"`), 값은 로컬 소스 디렉토리 경로로 키의 `*` 캡처가 값의 `*` 에 치환됨(예: `"../simplysm/packages/*"`). 배포된 패키지 대신 로컬 소스를 곧바로 쓰고 싶을 때.
33
+ - postPublish?: SdPostPublishScriptConfig[] — 배포 완료 후 순차 실행할 스크립트 목록. 배포 후 알림·태깅 등 후처리에 쓴다.
34
+
35
+ 사용 예:
18
36
 
19
37
  ```typescript
20
38
  import type { SdConfigFn } from "@simplysm/sd-cli";
39
+
21
40
  const config: SdConfigFn = ({ dev }) => ({
22
41
  packages: {
23
42
  "core-common": { target: "neutral" },
24
- "core-node": { target: "node" },
43
+ "core-node": { target: "node", publish: { type: "npm" } },
44
+ "demo-client": dev ? { target: "client", server: "demo-server" } : undefined,
25
45
  },
26
46
  });
27
47
  export default config;
28
48
  ```
29
49
 
30
- ## SdConfig
50
+ ## SdPackageConfig (빌드 타겟 분기 유니온)
31
51
 
32
- `sd.config.ts` 최상위 설정 객체.
52
+ ```typescript
53
+ type SdPackageConfig =
54
+ | SdBuildPackageConfig // target: "node" | "browser" | "neutral"
55
+ | SdClientPackageConfig // target: "client"
56
+ | SdServerPackageConfig // target: "server"
57
+ | SdScriptsPackageConfig; // target: "scripts"
58
+ ```
33
59
 
34
- - packages: Record<string, SdPackageConfig | undefined> — 패키지별 설정. key 는 `packages/` 하위 디렉토리명(예: `"core-common"`). 값을 `undefined` 로 두면 해당 패키지 비활성. 빌드 대상·타겟을 패키지마다 지정.
35
- - replaceDeps?: Record<string, string> — 의존성 교체. key 는 node_modules 에서 찾을 패키지 glob(예: `"@simplysm/*"`), value 는 소스 디렉토리 경로이며 key 의 `*` 캡처가 value 의 `*` 에 치환됨. node_modules 패키지를 로컬 소스로 심링크해 빌드 없이 소스 import 할 때.
36
- - postPublish?: SdPostPublishScriptConfig[] — 배포 완료 후 순차 실행할 스크립트 목록. 배포 후 후처리(태깅·알림 등)에 사용.
60
+ 판별자는 `target`. enum literal 의미:
37
61
 
38
- ## SdPackageConfig (타겟별 패키지 설정)
62
+ - "node" / "browser" / "neutral" ( `SdBuildPackageConfig`) — esbuild 라이브러리 패키지. "node" = Node.js 전용, "browser" = 브라우저 전용, "neutral" = 공용. npm 배포 라이브러리에 쓴다.
63
+ - "client" (→ `SdClientPackageConfig`) — Frontend 앱(Angular + Capacitor/Electron/PWA 옵션). esbuild + define 으로 env 주입.
64
+ - "server" (→ `SdServerPackageConfig`) — Fastify 서버 앱. esbuild banner 로 env 주입, PM2 옵션.
65
+ - "scripts" (→ `SdScriptsPackageConfig`) — 유틸 패키지. watch 훅이 없으면 watch/typecheck 대상에서 제외됨.
39
66
 
40
- `SdBuildPackageConfig | SdClientPackageConfig | SdServerPackageConfig | SdScriptsPackageConfig` 의 union. `target` 값으로 분기된다.
67
+ ### SdBuildPackageConfig (node/browser/neutral)
41
68
 
42
- ### SdBuildPackageConfig (라이브러리: node/browser/neutral)
69
+ ```typescript
70
+ interface SdBuildPackageConfig {
71
+ target: BuildTarget; // "node" | "browser" | "neutral"
72
+ publish?: SdPublishConfig;
73
+ copySrc?: string[];
74
+ watch?: SdWatchHookConfig;
75
+ }
76
+ ```
43
77
 
44
- - target: "node" | "browser" | "neutral" — esbuild 라이브러리 빌드 타겟. "node" = Node.js 전용, "browser" = 브라우저 전용, "neutral" = 공용. 패키지 실행 환경에 맞춰 선택.
45
- - publish?: SdPublishConfig — 배포 설정. 미지정 시 배포 제외.
46
- - copySrc?: string[] — `src/` 에서 `dist/` 로 그대로 복사할 파일의 glob 패턴(src/ 기준 상대 경로). 비-TS 리소스 동봉용.
47
- - watch?: SdWatchHookConfig — watch 훅. 지정 watch 모드에서 빌드 엔진과 함께 명령 실행.
78
+ - target: "node"|"browser"|"neutral" — 빌드 런타임 타겟(위 풀이 참조). 라이브러리가 어느 환경에서 돌지에 맞춰 고른다.
79
+ - publish?: SdPublishConfig — 배포 대상 설정. 미지정 시 배포 안 함. npm 배포 라이브러리면 `{ type: "npm" }`.
80
+ - copySrc?: string[] — `src/` 에서 `dist/` 로 그대로 복사할 파일 glob(src 기준 상대). 컴파일 대상 아닌 정적 리소스를 산출물에 포함할 때.
81
+ - watch?: SdWatchHookConfig — watch 모드에서 빌드 엔진과 함께 실행할 훅. 빌드 부수 작업(코드 생성 등)을 watch 에 끼울 때.
48
82
 
49
- ### SdClientPackageConfig (Frontend 앱: target "client")
83
+ ### SdClientPackageConfig (client)
50
84
 
51
- - target: "client" — esbuild 기반 Angular 클라이언트 앱 빌드.
52
- - server: string | number — 연결할 서버. string = 서버 패키지명(예: `"demo-server"`), number = 포트 직접 지정(하위 호환). 개발 프록시/API 대상 결정.
53
- - env?: Record<string, string> — 빌드 시 `process.env` 를 객체로 치환할 환경 변수. 클라이언트 코드의 env 주입.
54
- - publish?: SdPublishConfig — 배포 설정.
55
- - capacitor?: SdCapacitorConfig — Capacitor(모바일) 패키징 설정. 지정 시 앱 패키징.
56
- - electron?: SdElectronConfig — Electron(데스크톱) 패키징 설정. 지정 시 데스크톱 패키징.
57
- - configs?: Record<string, unknown> — 런타임 설정. 빌드 시 `dist/.config.json` 으로 기록되어 런타임에 로드됨.
58
- - exclude?: string[] — Capacitor/Electron package.json 에 추가할 패키지(또는 제외 목록). 패키징 의존성 조정.
59
- - browserSupport?: SdBrowserSupportConfig — 브라우저 지원(browserslist·PostCSS·legacyModule) 설정.
60
- - pwa?: false | SdPwaConfig — PWA 설정. `false` 면 비활성, 미지정 시 기본값으로 활성화. PWA manifest 제어.
85
+ ```typescript
86
+ interface SdClientPackageConfig {
87
+ target: "client";
88
+ server: string | number;
89
+ env?: Record<string, string>;
90
+ publish?: SdPublishConfig;
91
+ capacitor?: SdCapacitorConfig;
92
+ electron?: SdElectronConfig;
93
+ configs?: Record<string, unknown>;
94
+ exclude?: string[];
95
+ browserSupport?: SdBrowserSupportConfig;
96
+ pwa?: false | SdPwaConfig;
97
+ }
98
+ ```
61
99
 
62
- ### SdServerPackageConfig (Fastify 서버: target "server")
100
+ - server: string | number — 연결할 dev 서버. string = 서버 패키지명(예: `"demo-server"`), number = 포트 직접 지정(하위 호환). 보통 같은 워크스페이스의 서버 패키지명을 준다.
101
+ - env?: Record<string, string> — 빌드 시 `process.env` 를 객체로 치환할 환경 변수. 프론트 코드에 빌드 타임 상수를 주입할 때.
102
+ - publish?: SdPublishConfig — 산출물 배포 설정.
103
+ - capacitor?: SdCapacitorConfig — Capacitor 모바일 앱 패키징 설정. 지정 시 Android 등으로 패키징.
104
+ - electron?: SdElectronConfig — Electron 데스크톱 앱 패키징 설정.
105
+ - configs?: Record<string, unknown> — 런타임 설정. 빌드 시 `dist/.config.json` 으로 기록되어 앱이 런타임에 읽음. 배포 환경별 가변 값.
106
+ - exclude?: string[] — Capacitor/Electron `package.json` 에 추가(번들 제외)할 패키지 목록.
107
+ - browserSupport?: SdBrowserSupportConfig — 브라우저 호환(browserslist/PostCSS/legacyModule) 설정.
108
+ - pwa?: false | SdPwaConfig — PWA 설정. `false` 면 비활성화, 미지정 시 기본값으로 활성화, 객체면 manifest 커스텀. PWA 가 필요 없으면 `false`.
63
109
 
64
- - target: "server" — esbuild 기반 Fastify 서버 앱 빌드.
65
- - env?: Record<string, string> — 빌드 시 `process.env.KEY` 를 상수로 치환할 환경 변수.
66
- - publish?: SdPublishConfig — 배포 설정.
67
- - configs?: Record<string, unknown> — 런타임 설정. 빌드 시 `dist/.config.json` 으로 기록.
68
- - externals?: string[] — esbuild 번들에 포함하지 않을 외부 모듈. 네이티브 모듈(binding.gyp 자동 감지분에 추가)을 번들 제외할 때.
69
- - pm2?: { name?: string; ignoreWatchPaths?: string[] } — PM2 설정. 지정 시 `dist/pm2.config.cjs` 생성. `name` = 프로세스 이름(미지정 시 package.json name 기반), `ignoreWatchPaths` = PM2 watch 제외 경로.
70
- - packageManager?: "volta" | "mise" — 사용할 패키지 매니저. 생성되는 mise.toml/volta 설정에 영향. 배포 환경의 런타임 관리자 선택.
110
+ ### SdServerPackageConfig (server)
71
111
 
72
- ### SdScriptsPackageConfig (유틸 스크립트: target "scripts")
112
+ ```typescript
113
+ interface SdServerPackageConfig {
114
+ target: "server";
115
+ env?: Record<string, string>;
116
+ publish?: SdPublishConfig;
117
+ configs?: Record<string, unknown>;
118
+ externals?: string[];
119
+ pm2?: { name?: string; ignoreWatchPaths?: string[] };
120
+ packageManager?: "volta" | "mise";
121
+ }
122
+ ```
123
+
124
+ - env?: Record<string, string> — 빌드 시 `process.env.KEY` 를 상수로 치환(esbuild banner). 서버 빌드 타임 상수 주입.
125
+ - configs?: Record<string, unknown> — 런타임 설정. `dist/.config.json` 으로 기록.
126
+ - externals?: string[] — esbuild 번들에 포함하지 않을 외부 모듈. 자동 `binding.gyp` 감지 항목에 더해짐. 네이티브 모듈을 번들에서 뺄 때.
127
+ - pm2?.name?: string — PM2 프로세스 이름. 미지정 시 `package.json` name 에서 생성. 지정 시 `dist/pm2.config.cjs` 생성.
128
+ - pm2?.ignoreWatchPaths?: string[] — PM2 watch 에서 제외할 경로.
129
+ - packageManager?: "volta" | "mise" — 산출물에 생성할 패키지 매니저 설정 종류. "volta" = volta 설정, "mise" = `mise.toml` 생성. 배포 서버의 매니저에 맞춘다.
73
130
 
74
- - target: "scripts" — 빌드 산출 없는 스크립트 전용 패키지. watch 훅 미설정 시 watch/typecheck 에서 제외됨.
75
- - publish?: SdPublishConfig — 배포 설정.
76
- - watch?: SdWatchHookConfig — watch 훅. 지정 시 watch 모드에 패키지 포함.
131
+ ### SdScriptsPackageConfig (scripts)
132
+
133
+ ```typescript
134
+ interface SdScriptsPackageConfig {
135
+ target: "scripts";
136
+ publish?: SdPublishConfig;
137
+ watch?: SdWatchHookConfig;
138
+ }
139
+ ```
140
+
141
+ - watch?: SdWatchHookConfig — watch 훅. 지정해야만 이 패키지가 watch 모드에 포함됨(미지정 시 watch/typecheck 제외). 파일 변경 시 임의 명령 실행에 쓴다.
77
142
 
78
143
  ## SdWatchHookConfig
79
144
 
80
- watch 모드에서 파일 변경 시 임의 명령을 실행하는 훅. `SdBuildPackageConfig.watch` / `SdScriptsPackageConfig.watch` 에 사용.
145
+ ```typescript
146
+ interface SdWatchHookConfig {
147
+ target: string[];
148
+ cmd: string;
149
+ args?: string[];
150
+ }
151
+ ```
81
152
 
82
- - target: string[] — 감시할 glob 패턴(패키지 디렉토리 기준 상대 경로). 어떤 파일 변경을 트리거로 볼지.
83
- - cmd: string — 변경 시 실행할 명령어.
153
+ - target: string[] — 감시할 glob 패턴(패키지 디렉토리 기준 상대). 어떤 파일 변경에 반응할지.
154
+ - cmd: string — 변경 감지 시 실행할 명령어.
84
155
  - args?: string[] — 명령어 인수.
85
156
 
86
- ## 배포 설정 (SdPublishConfig 계열)
157
+ ## 배포 설정 (SdPublishConfig 유니온 + SdPostPublishScriptConfig)
87
158
 
88
- `SdNpmPublishConfig | SdLocalDirectoryPublishConfig | SdStoragePublishConfig` union. `type` 으로 분기.
159
+ ```typescript
160
+ type SdPublishConfig = SdNpmPublishConfig | SdLocalDirectoryPublishConfig | SdStoragePublishConfig;
161
+ ```
89
162
 
90
- - SdNpmPublishConfig — `{ type: "npm" }`. npm 레지스트리 배포.
91
- - SdLocalDirectoryPublishConfig — `{ type: "local-directory"; path: string }`. 로컬 디렉토리 복사 배포. `path` 는 환경 변수 치환(`%VER%`, `%PROJECT%`) 지원.
92
- - SdStoragePublishConfig — FTP/FTPS/SFTP 업로드 배포.
93
- - type: "ftp" | "ftps" | "sftp" — 전송 프로토콜. 보안 필요 시 ftps/sftp.
94
- - host: string — 서버 호스트.
95
- - port?: number — 포트.
96
- - path?: string — 업로드 대상 경로.
97
- - user?: string — 접속 계정.
98
- - password?: string — 접속 비밀번호.
163
+ 판별자는 `type`:
99
164
 
100
- `SdPostPublishScriptConfig` (배포 스크립트):
165
+ - `SdNpmPublishConfig` `{ type: "npm" }`. npm 레지스트리 배포. 공개 라이브러리에 쓴다.
166
+ - `SdLocalDirectoryPublishConfig` — `{ type: "local-directory"; path: string }`. 로컬 디렉토리로 복사. `path` 는 `%VER%`/`%PROJECT%` 치환 지원. 사내 공유 폴더 배포에.
167
+ - `SdStoragePublishConfig` — `{ type: "ftp"|"ftps"|"sftp"; host; port?; path?; user?; password? }`. type 별 프로토콜 차이(ftp = 평문, ftps = TLS, sftp = SSH). 원격 서버 업로드 배포에. host 만 필수, 나머지는 선택.
101
168
 
102
- - type: "script" — 스크립트 실행 항목.
103
- - cmd: string — 실행 명령어.
104
- - args: string[] — 인수. 환경 변수 치환(`%VER%`, `%PROJECT%`) 지원.
169
+ ```typescript
170
+ interface SdPostPublishScriptConfig {
171
+ type: "script";
172
+ cmd: string;
173
+ args: string[]; // %VER%, %PROJECT% 치환 지원
174
+ }
175
+ ```
176
+
177
+ - cmd: string — 배포 후 실행할 명령어.
178
+ - args: string[] — 인수. `%VER%`(버전), `%PROJECT%`(프로젝트명) 치환됨.
105
179
 
106
- ## Capacitor 설정 (SdClientPackageConfig.capacitor)
180
+ ## Capacitor 설정 (client 의 capacitor)
107
181
 
108
- `SdCapacitorConfig`:
182
+ ```typescript
183
+ interface SdCapacitorConfig {
184
+ appId: string;
185
+ appName: string;
186
+ plugins?: Record<string, Record<string, unknown> | true>;
187
+ icon?: string;
188
+ debug?: boolean;
189
+ platform?: { android?: SdCapacitorAndroidConfig };
190
+ }
191
+ ```
109
192
 
110
- - appId: string — 앱 ID(예: `"com.example.app"`).
111
- - appName: string — 앱 이름.
112
- - plugins?: Record<string, Record<string, unknown> | true> — Capacitor 플러그인 설정. key = 패키지명, value = `true`(옵션 없음) 또는 플러그인 옵션 객체.
113
- - icon?: string — 앱 아이콘 경로(패키지 디렉토리 기준 상대).
193
+ - appId: string — 앱 ID(역도메인, 예: `"com.example.app"`). 스토어 식별자.
194
+ - appName: string — 앱 표시 이름.
195
+ - plugins?: Record<string, Record<string, unknown> | true> — Capacitor 플러그인. = 패키지명, = `true`(옵션 없이 활성) 또는 옵션 객체. 옵션이 필요 없으면 `true`.
196
+ - icon?: string — 앱 아이콘 경로(패키지 기준 상대).
114
197
  - debug?: boolean — 디버그 빌드 플래그.
115
- - platform?: { android?: SdCapacitorAndroidConfig } — 플랫폼별 설정(현재 android).
198
+ - platform?.android?: SdCapacitorAndroidConfig — Android 플랫폼별 설정.
116
199
 
117
- `SdCapacitorAndroidConfig`:
200
+ ```typescript
201
+ interface SdCapacitorAndroidConfig {
202
+ config?: Record<string, string>;
203
+ bundle?: boolean;
204
+ intentFilters?: SdCapacitorIntentFilter[];
205
+ sign?: SdCapacitorSignConfig;
206
+ sdkVersion?: number;
207
+ permissions?: SdCapacitorPermission[];
208
+ }
209
+ ```
118
210
 
119
- - config?: Record<string, string> — AndroidManifest.xml `application` 태그 속성(예: `{ requestLegacyExternalStorage: "true" }`).
120
- - bundle?: boolean — true AAB 번들, false APK 빌드.
121
- - intentFilters?: SdCapacitorIntentFilter[] — Intent Filter 목록.
122
- - sign?: SdCapacitorSignConfig — APK/AAB 서명 설정.
211
+ - config?: Record<string, string> — `AndroidManifest.xml` 의 `<application>` 태그 속성(예: `{ requestLegacyExternalStorage: "true" }`).
212
+ - bundle?: boolean — true = AAB 번들, false = APK. 스토어 배포면 true.
213
+ - intentFilters?: SdCapacitorIntentFilter[] — 딥링크 등 Intent Filter 목록.
214
+ - sign?: SdCapacitorSignConfig — APK/AAB 서명 설정. 릴리스 빌드에 필요.
123
215
  - sdkVersion?: number — Android SDK 버전(minSdk·targetSdk 공통).
124
216
  - permissions?: SdCapacitorPermission[] — 추가 권한 목록.
125
217
 
126
- `SdCapacitorIntentFilter`:
127
-
128
- - action?: string intent 액션(예: `"android.intent.action.VIEW"`).
129
- - category?: string intent 카테고리(예: `"android.intent.category.DEFAULT"`).
130
-
131
- `SdCapacitorSignConfig`:
132
-
133
- - keystore: string — keystore 파일 경로(패키지 디렉토리 기준 상대).
134
- - storePassword: string — keystore 비밀번호.
135
- - alias: string — 키 별칭.
136
- - password: string — 키 비밀번호.
137
- - keystoreType?: string — keystore 타입(기본 `"jks"`).
218
+ ```typescript
219
+ interface SdCapacitorSignConfig { keystore: string; storePassword: string; alias: string; password: string; keystoreType?: string; }
220
+ interface SdCapacitorPermission { name: string; maxSdkVersion?: number; ignore?: string; }
221
+ interface SdCapacitorIntentFilter { action?: string; category?: string; }
222
+ ```
138
223
 
139
- `SdCapacitorPermission`:
224
+ - SdCapacitorSignConfig.keystore — keystore 파일 경로(패키지 기준 상대). storePassword/alias/password = 서명 자격. keystoreType?: string — keystore 타입(기본값 `"jks"`).
225
+ - SdCapacitorPermission.name — 권한 이름(예: `"CAMERA"`). maxSdkVersion?: number — 권한 적용 최대 SDK. ignore?: string — `tools:ignore` 속성 값.
226
+ - SdCapacitorIntentFilter.action — intent 액션(예: `"android.intent.action.VIEW"`). category — intent 카테고리(예: `"android.intent.category.DEFAULT"`).
140
227
 
141
- - name: string — 권한 이름(예: `"CAMERA"`, `"WRITE_EXTERNAL_STORAGE"`).
142
- - maxSdkVersion?: number — 권한 적용 최대 SDK 버전.
143
- - ignore?: string — `tools:ignore` 속성 값.
228
+ ## Electron 설정 (client electron)
144
229
 
145
- ## Electron 설정 (SdElectronConfig)
230
+ ```typescript
231
+ interface SdElectronConfig {
232
+ appId: string;
233
+ portable?: boolean;
234
+ installerIcon?: string;
235
+ reinstallDependencies?: string[];
236
+ postInstallScript?: string;
237
+ nsisOptions?: Record<string, unknown>;
238
+ env?: Record<string, string>;
239
+ }
240
+ ```
146
241
 
147
- - appId: string — Electron 앱 ID(예: `"com.example.myapp"`).
148
- - portable?: boolean — true 포터블 `.exe`, false/미지정 NSIS 설치 프로그램.
149
- - installerIcon?: string — 설치 프로그램 아이콘 경로(`.ico`, 패키지 기준 상대).
150
- - reinstallDependencies?: string[] — Electron 에 포함할 npm 패키지(네이티브 모듈 등).
242
+ - appId: string — Electron 앱 ID(역도메인, 예: `"com.example.myapp"`).
243
+ - portable?: boolean — true = 포터블 `.exe`, false/미지정 = NSIS 설치 프로그램. 설치 없이 실행 배포면 true.
244
+ - installerIcon?: string — 설치 프로그램 아이콘(`.ico`, 패키지 기준 상대).
245
+ - reinstallDependencies?: string[] — Electron 에 포함할 npm 패키지(네이티브 모듈 등) 목록.
151
246
  - postInstallScript?: string — npm postinstall 스크립트.
152
247
  - nsisOptions?: Record<string, unknown> — NSIS 옵션(`portable` 이 false 일 때 적용).
153
- - env?: Record<string, string> — 환경 변수. `electron-main.ts` 에서 `process.env` 로 접근.
248
+ - env?: Record<string, string> — 환경 변수. `electron-main.ts` 에서 `process.env` 로 접근 가능.
154
249
 
155
- ## PWA 설정 (SdPwaConfig)
250
+ ## PWA 설정 (client 의 pwa)
156
251
 
157
- `SdPwaConfig`:
252
+ ```typescript
253
+ interface SdPwaConfig { manifest?: SdPwaManifestConfig; }
254
+ interface SdPwaManifestConfig {
255
+ name?: string;
256
+ short_name?: string;
257
+ display?: "standalone" | "fullscreen" | "minimal-ui" | "browser";
258
+ theme_color?: string;
259
+ background_color?: string;
260
+ icons?: Array<{ src: string; sizes: string; type?: string }>;
261
+ }
262
+ ```
158
263
 
159
- - manifest?: SdPwaManifestConfig — PWA manifest 설정.
264
+ - manifest?: SdPwaManifestConfig — PWA manifest 커스터마이징. 미지정 시 기본 manifest.
265
+ - display?: "standalone"|"fullscreen"|"minimal-ui"|"browser" — 앱 표시 모드. "standalone" = 브라우저 UI 없는 앱 창, "fullscreen" = 전체 화면, "minimal-ui" = 최소 브라우저 UI, "browser" = 일반 탭. 네이티브 느낌이면 "standalone".
266
+ - name/short_name/theme_color/background_color — manifest 표준 필드(앱 이름·축약명·테마색·배경색).
267
+ - icons?: Array<{ src; sizes; type? }> — manifest 아이콘 목록(경로·크기·MIME).
160
268
 
161
- `SdPwaManifestConfig` (모두 선택):
269
+ ## SdBrowserSupportConfig (client 의 browserSupport)
162
270
 
163
- - name?: string — 앱 전체 이름.
164
- - short_name?: string — 짧은 이름(홈 화면 등).
165
- - display?: "standalone" | "fullscreen" | "minimal-ui" | "browser" — 표시 모드. "standalone" = 단독 앱처럼, "fullscreen" = 전체 화면, "minimal-ui" = 최소 브라우저 UI, "browser" = 일반 탭. 앱 체감 수준 선택.
166
- - theme_color?: string 테마 색상.
167
- - background_color?: string — 스플래시 배경 색상.
168
- - icons?: Array<{ src: string; sizes: string; type?: string }> — 아이콘 목록. `src` = 경로, `sizes` = 크기 문자열(예: `"512x512"`), `type` = MIME 타입.
271
+ ```typescript
272
+ interface SdBrowserSupportConfig {
273
+ browserslist?: string | string[];
274
+ postCss?: { plugins: [string, (object | string)?][] };
275
+ legacyModule?: boolean;
276
+ }
277
+ ```
278
+
279
+ - browserslist?: string | string[] — browserslist 쿼리(예: `"last 2 Chrome versions"` 또는 `["ie 11", "last 2 versions"]`). 트랜스파일·prefix 대상 브라우저 범위.
280
+ - postCss?.plugins: [string, (object|string)?][] — PostCSS 플러그인 `[이름, 옵션?]` 튜플 배열.
281
+ - legacyModule?: boolean — 레거시 모듈 지원. true 면 코드 분할 비활성화 + `import.meta` 치환. 구형 환경 대응이 필요할 때.
169
282
 
170
283
  ## 보조 타입
171
284
 
172
- - BuildTarget — `"node" | "browser" | "neutral"`. `SdBuildPackageConfig.target` 값 집합.
173
- - NpmConfig npm `package.json` 구조 타입(`name`, `version`, `description?`, `dependencies?`, `devDependencies?`, `peerDependencies?`, `volta?`). 설정 코드에서 package.json 을 타입 있게 다룰 때.
285
+ ```typescript
286
+ type BuildTarget = "node" | "browser" | "neutral";
287
+ interface NpmConfig { name; version; description?; dependencies?; devDependencies?; peerDependencies?; volta?; }
288
+ ```
289
+
290
+ - BuildTarget — esbuild 라이브러리 빌드 런타임 타겟 enum(위 `SdPackageConfig` 풀이 참조).
291
+ - NpmConfig — `package.json` 구조 타입. name/version 필수, 나머지 선택. package.json 을 타입 안전하게 다룰 때.