@simplysm/sd-claude 14.0.47 → 14.0.49

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 (130) hide show
  1. package/{claude/references/sd-simplysm14/sd-claude/usage.md → README.md} +2 -2
  2. package/claude/rules/sd-claude-rules.md +25 -10
  3. package/claude/rules/sd-options.md +11 -6
  4. package/claude/sd-subagent-start.sh +6 -0
  5. package/claude/settings.json +1 -12
  6. package/claude/skills/sd-check/SKILL.md +43 -12
  7. package/claude/skills/sd-claude-docs/SKILL.md +30 -58
  8. package/claude/skills/sd-claude-docs/references/package-claudemd.md +12 -0
  9. package/claude/skills/sd-claude-docs/references/package-doc-gen.md +26 -13
  10. package/claude/skills/sd-commit/SKILL.md +1 -1
  11. package/claude/skills/sd-debug/SKILL.md +5 -3
  12. package/claude/skills/sd-deliverable/SKILL.md +1 -1
  13. package/claude/skills/sd-dev/SKILL.md +14 -9
  14. package/claude/skills/sd-doc-extract/SKILL.md +8 -10
  15. package/claude/skills/sd-doc-extract/_common.py +8 -1
  16. package/claude/skills/sd-doc-extract/_extract_docx.py +74 -34
  17. package/claude/skills/sd-doc-extract/_extract_pdf.py +12 -1
  18. package/claude/skills/sd-doc-extract/_extract_pptx.py +103 -23
  19. package/claude/skills/sd-doc-extract/_extract_xlsb.py +93 -4
  20. package/claude/skills/sd-doc-extract/_extract_xlsx.py +98 -36
  21. package/claude/skills/sd-doc-extract/extract.py +22 -3
  22. package/claude/skills/sd-inner-clarify/SKILL.md +78 -0
  23. package/claude/skills/sd-inner-debug/SKILL.md +1 -1
  24. package/claude/skills/sd-inner-review/SKILL.md +13 -0
  25. package/claude/skills/sd-issue/SKILL.md +1 -1
  26. package/claude/skills/sd-outlook/SKILL.md +1 -1
  27. package/claude/skills/sd-plan/SKILL.md +50 -17
  28. package/claude/skills/sd-prompt/SKILL.md +180 -178
  29. package/claude/skills/sd-prompt/references/eval-runner.md +5 -30
  30. package/claude/skills/sd-prompt/references/sd-eval-env-template.md +23 -0
  31. package/claude/skills/sd-refactor/SKILL.md +2 -2
  32. package/claude/skills/sd-tdd/SKILL.md +45 -16
  33. package/claude/skills/sd-use/SKILL.md +84 -80
  34. package/claude/skills/sd-wbs/SKILL.md +84 -27
  35. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/assets.md +2 -3
  36. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/hooks.md +7 -6
  37. package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/scripts.md +1 -9
  38. package/package.json +3 -2
  39. package/scripts/sync.mjs +4 -2
  40. package/claude/references/sd-simplysm14/angular/docs/bootstrap.md +0 -48
  41. package/claude/references/sd-simplysm14/angular/docs/directives.md +0 -236
  42. package/claude/references/sd-simplysm14/angular/docs/features.md +0 -379
  43. package/claude/references/sd-simplysm14/angular/docs/pipes.md +0 -32
  44. package/claude/references/sd-simplysm14/angular/docs/plugins.md +0 -37
  45. package/claude/references/sd-simplysm14/angular/docs/provider-types.md +0 -283
  46. package/claude/references/sd-simplysm14/angular/docs/providers.md +0 -379
  47. package/claude/references/sd-simplysm14/angular/docs/styling.md +0 -222
  48. package/claude/references/sd-simplysm14/angular/docs/type-utilities.md +0 -250
  49. package/claude/references/sd-simplysm14/angular/docs/ui-data.md +0 -275
  50. package/claude/references/sd-simplysm14/angular/docs/ui-form.md +0 -490
  51. package/claude/references/sd-simplysm14/angular/docs/ui-layout.md +0 -140
  52. package/claude/references/sd-simplysm14/angular/docs/ui-navigation.md +0 -273
  53. package/claude/references/sd-simplysm14/angular/docs/ui-overlay.md +0 -157
  54. package/claude/references/sd-simplysm14/angular/docs/ui-visual.md +0 -127
  55. package/claude/references/sd-simplysm14/angular/docs/utils.md +0 -295
  56. package/claude/references/sd-simplysm14/angular/usage.md +0 -489
  57. package/claude/references/sd-simplysm14/capacitor-plugin-auto-update/usage.md +0 -182
  58. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/file-operations.md +0 -154
  59. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/permissions.md +0 -84
  60. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/storage-paths.md +0 -107
  61. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/docs/types.md +0 -83
  62. package/claude/references/sd-simplysm14/capacitor-plugin-file-system/usage.md +0 -133
  63. package/claude/references/sd-simplysm14/capacitor-plugin-intent/usage.md +0 -203
  64. package/claude/references/sd-simplysm14/capacitor-plugin-usb-storage/usage.md +0 -258
  65. package/claude/references/sd-simplysm14/core-browser/usage.md +0 -306
  66. package/claude/references/sd-simplysm14/core-common/docs/errors.md +0 -82
  67. package/claude/references/sd-simplysm14/core-common/docs/extensions.md +0 -167
  68. package/claude/references/sd-simplysm14/core-common/docs/features.md +0 -136
  69. package/claude/references/sd-simplysm14/core-common/docs/types.md +0 -245
  70. package/claude/references/sd-simplysm14/core-common/docs/utils.md +0 -591
  71. package/claude/references/sd-simplysm14/core-common/usage.md +0 -255
  72. package/claude/references/sd-simplysm14/core-node/docs/child-process.md +0 -182
  73. package/claude/references/sd-simplysm14/core-node/docs/features.md +0 -214
  74. package/claude/references/sd-simplysm14/core-node/docs/file-system.md +0 -509
  75. package/claude/references/sd-simplysm14/core-node/docs/file-watching.md +0 -139
  76. package/claude/references/sd-simplysm14/core-node/docs/logging.md +0 -180
  77. package/claude/references/sd-simplysm14/core-node/docs/path.md +0 -176
  78. package/claude/references/sd-simplysm14/core-node/docs/utilities-cpx.md +0 -194
  79. package/claude/references/sd-simplysm14/core-node/docs/utilities-fsx.md +0 -469
  80. package/claude/references/sd-simplysm14/core-node/docs/utilities-pathx.md +0 -151
  81. package/claude/references/sd-simplysm14/core-node/docs/worker-threads.md +0 -334
  82. package/claude/references/sd-simplysm14/core-node/docs/worker.md +0 -205
  83. package/claude/references/sd-simplysm14/core-node/usage.md +0 -259
  84. package/claude/references/sd-simplysm14/excel/docs/core-classes.md +0 -453
  85. package/claude/references/sd-simplysm14/excel/docs/types.md +0 -459
  86. package/claude/references/sd-simplysm14/excel/docs/utilities.md +0 -194
  87. package/claude/references/sd-simplysm14/excel/docs/wrapper.md +0 -73
  88. package/claude/references/sd-simplysm14/excel/usage.md +0 -134
  89. package/claude/references/sd-simplysm14/lint/usage.md +0 -130
  90. package/claude/references/sd-simplysm14/orm-common/docs/core.md +0 -188
  91. package/claude/references/sd-simplysm14/orm-common/docs/expression.md +0 -190
  92. package/claude/references/sd-simplysm14/orm-common/docs/models.md +0 -17
  93. package/claude/references/sd-simplysm14/orm-common/docs/query-builder.md +0 -97
  94. package/claude/references/sd-simplysm14/orm-common/docs/queryable-executable.md +0 -250
  95. package/claude/references/sd-simplysm14/orm-common/docs/schema-builders.md +0 -364
  96. package/claude/references/sd-simplysm14/orm-common/docs/types.md +0 -522
  97. package/claude/references/sd-simplysm14/orm-common/usage.md +0 -229
  98. package/claude/references/sd-simplysm14/orm-node/docs/connections.md +0 -137
  99. package/claude/references/sd-simplysm14/orm-node/docs/core.md +0 -131
  100. package/claude/references/sd-simplysm14/orm-node/docs/types.md +0 -173
  101. package/claude/references/sd-simplysm14/orm-node/usage.md +0 -143
  102. package/claude/references/sd-simplysm14/sd-cli/usage.md +0 -782
  103. package/claude/references/sd-simplysm14/service-client/docs/features.md +0 -217
  104. package/claude/references/sd-simplysm14/service-client/docs/main.md +0 -148
  105. package/claude/references/sd-simplysm14/service-client/docs/protocol.md +0 -53
  106. package/claude/references/sd-simplysm14/service-client/docs/transport.md +0 -131
  107. package/claude/references/sd-simplysm14/service-client/docs/types.md +0 -129
  108. package/claude/references/sd-simplysm14/service-client/usage.md +0 -202
  109. package/claude/references/sd-simplysm14/service-common/docs/app-structure.md +0 -175
  110. package/claude/references/sd-simplysm14/service-common/docs/events.md +0 -64
  111. package/claude/references/sd-simplysm14/service-common/docs/protocol.md +0 -331
  112. package/claude/references/sd-simplysm14/service-common/docs/service-types.md +0 -90
  113. package/claude/references/sd-simplysm14/service-common/docs/types.md +0 -19
  114. package/claude/references/sd-simplysm14/service-common/usage.md +0 -154
  115. package/claude/references/sd-simplysm14/service-server/docs/auth.md +0 -64
  116. package/claude/references/sd-simplysm14/service-server/docs/core.md +0 -174
  117. package/claude/references/sd-simplysm14/service-server/docs/legacy.md +0 -25
  118. package/claude/references/sd-simplysm14/service-server/docs/main.md +0 -88
  119. package/claude/references/sd-simplysm14/service-server/docs/protocol.md +0 -33
  120. package/claude/references/sd-simplysm14/service-server/docs/services.md +0 -94
  121. package/claude/references/sd-simplysm14/service-server/docs/transport-http.md +0 -93
  122. package/claude/references/sd-simplysm14/service-server/docs/transport-socket.md +0 -119
  123. package/claude/references/sd-simplysm14/service-server/docs/types.md +0 -36
  124. package/claude/references/sd-simplysm14/service-server/docs/utils.md +0 -22
  125. package/claude/references/sd-simplysm14/service-server/usage.md +0 -171
  126. package/claude/references/sd-simplysm14/storage/usage.md +0 -301
  127. package/claude/references/sd-simplysm14.md +0 -35
  128. package/claude/rules/sd-clarify.md +0 -23
  129. package/claude/sd-session-start.sh +0 -10
  130. /package/{claude/references/sd-simplysm14/sd-claude/docs → docs}/cli.md +0 -0
@@ -1,334 +0,0 @@
1
- # Worker Threads
2
-
3
- ## `Worker`
4
-
5
- Worker thread 프록시를 생성하는 팩토리 객체.
6
-
7
- ```typescript
8
- export const Worker: {
9
- create<TModule extends WorkerModule>(
10
- workerPath: string,
11
- options?: Omit<WorkerRawOptions, "stdout" | "stderr">,
12
- ): WorkerProxy<TModule>
13
- }
14
- ```
15
-
16
- ### Static Method
17
-
18
- #### `create`
19
-
20
- 워커 파일을 로드하고 타입 안전한 프록시를 생성한다.
21
-
22
- ```typescript
23
- static create<TModule extends WorkerModule>(
24
- workerPath: string,
25
- options?: Omit<WorkerRawOptions, "stdout" | "stderr">,
26
- ): WorkerProxy<TModule>
27
- ```
28
-
29
- | Parameter | Type | Description |
30
- |-----------|------|-------------|
31
- | `workerPath` | string | 워커 파일 경로 (.ts 또는 .js). 개발 환경에서는 .ts를 권장하며, 내부적으로 tsx를 통해 실행된다. |
32
- | `options` | WorkerRawOptions (optional) | Worker thread 옵션. stdout/stderr는 자동으로 메인 프로세스로 파이프된다. |
33
-
34
- **Return**: WorkerProxy<TModule> - 타입 안전한 워커 프록시
35
-
36
- **Development vs Production**:
37
- - **.ts 파일**: `lib/worker-dev-proxy.js`를 통해 tsx로 실행됨
38
- - **.js 파일**: 직접 Worker로 로드됨
39
-
40
- **Example**:
41
- ```typescript
42
- import { Worker } from "@simplysm/core-node";
43
- import type * as MyWorker from "./worker";
44
-
45
- const worker = Worker.create<typeof MyWorker>("./worker.ts");
46
-
47
- // 메서드 호출 (타입 안전)
48
- const result = await worker.add(10, 20);
49
-
50
- // 이벤트 수신 (타입 안전)
51
- worker.on("progress", (value) => {
52
- console.log(`Progress: ${value}%`);
53
- });
54
-
55
- await worker.terminate();
56
- ```
57
-
58
- ---
59
-
60
- ## `createWorker`
61
-
62
- 워커 측에서 호출하여 메서드와 이벤트를 등록하는 팩토리 함수.
63
-
64
- ```typescript
65
- export function createWorker<
66
- TMethods extends Record<string, (...args: any[]) => unknown>,
67
- TEvents extends Record<string, unknown> = Record<string, never>,
68
- >(
69
- methods: TMethods,
70
- ): {
71
- send<TEventName extends keyof TEvents & string>(event: TEventName, data?: TEvents[TEventName]): void;
72
- __methods: TMethods;
73
- __events: TEvents;
74
- }
75
- ```
76
-
77
- | Parameter | Type | Description |
78
- |-----------|------|-------------|
79
- | `methods` | Record<string, function> | 워커가 제공할 메서드 객체 |
80
-
81
- **Type Parameters**:
82
- - `TMethods`: 메서드 타입
83
- - `TEvents`: 이벤트 타입 (기본값: 빈 객체)
84
-
85
- **Return**: sender 객체. `send()` 메서드로 이벤트를 발송하고, export default로 내보낸다.
86
-
87
- **Example**:
88
- ```typescript
89
- // worker.ts
90
- import { createWorker } from "@simplysm/core-node";
91
-
92
- interface MyEvents {
93
- progress: number;
94
- }
95
-
96
- const methods = {
97
- add: (a: number, b: number) => a + b,
98
- multiply: (a: number, b: number) => a * b,
99
- };
100
-
101
- const sender = createWorker<typeof methods, MyEvents>(methods);
102
-
103
- export default sender;
104
- ```
105
-
106
- ---
107
-
108
- ## `WorkerProxy`
109
-
110
- Worker.create()가 반환하는 프록시 타입.
111
-
112
- Promise화된 메서드 + 이벤트 리스너 + 종료 메서드를 제공한다.
113
-
114
- ```typescript
115
- export type WorkerProxy<TModule extends WorkerModule> = PromisifyMethods<
116
- TModule["default"]["__methods"]
117
- > & {
118
- on<TEventName extends keyof TModule["default"]["__events"] & string>(
119
- event: TEventName,
120
- listener: (data: TModule["default"]["__events"][TEventName]) => void,
121
- ): void;
122
-
123
- off<TEventName extends keyof TModule["default"]["__events"] & string>(
124
- event: TEventName,
125
- listener: (data: TModule["default"]["__events"][TEventName]) => void,
126
- ): void;
127
-
128
- terminate(): Promise<void>;
129
- }
130
- ```
131
-
132
- ### Methods
133
-
134
- | Name | Signature | Description |
135
- |------|-----------|-------------|
136
- | `[메서드명]` | `(...args): Promise<R>` | 워커의 메서드. 비동기로 Promise를 반환한다. |
137
- | `on` | `<E extends EventName>(event, listener): void` | 워커 이벤트 리스너를 등록한다. |
138
- | `off` | `<E extends EventName>(event, listener): void` | 워커 이벤트 리스너를 해제한다. |
139
- | `terminate` | `(): Promise<void>` | 워커를 종료한다. |
140
-
141
- **Example**:
142
- ```typescript
143
- const worker = Worker.create<typeof MyWorker>("./worker.ts");
144
-
145
- // 메서드 호출
146
- const sum = await worker.add(10, 20); // 30
147
- const product = await worker.multiply(5, 6); // 30
148
-
149
- // 이벤트 리스너 등록
150
- worker.on("progress", (value) => {
151
- console.log(`Progress: ${value}%`);
152
- });
153
-
154
- // 이벤트 리스너 제거
155
- worker.off("progress", handler);
156
-
157
- // 워커 종료
158
- await worker.terminate();
159
- ```
160
-
161
- ---
162
-
163
- ## `PromisifyMethods`
164
-
165
- 메서드의 반환값을 Promise로 감싸는 매핑 타입.
166
-
167
- ```typescript
168
- export type PromisifyMethods<TMethods> = {
169
- [K in keyof TMethods]: TMethods[K] extends (...args: infer P) => infer R
170
- ? (...args: P) => Promise<Awaited<R>>
171
- : never;
172
- }
173
- ```
174
-
175
- **Note**: 워커 메서드는 postMessage 기반으로 동작하여 항상 비동기이므로, 동기 메서드 타입도 `Promise<Awaited<R>>`로 변환된다.
176
-
177
- **Example**:
178
- ```typescript
179
- // 원본
180
- interface Methods {
181
- add: (a: number, b: number) => number;
182
- process: (data: string) => Promise<Result>;
183
- }
184
-
185
- // PromisifyMethods 적용 후
186
- type ProxiedMethods = {
187
- add: (a: number, b: number) => Promise<number>;
188
- process: (data: string) => Promise<Result>;
189
- }
190
- ```
191
-
192
- ---
193
-
194
- ## `WorkerModule`
195
-
196
- createWorker()가 반환하는 워커 모듈의 타입 구조.
197
-
198
- ```typescript
199
- export interface WorkerModule {
200
- default: {
201
- __methods: Record<string, (...args: any[]) => unknown>;
202
- __events: Record<string, unknown>;
203
- };
204
- }
205
- ```
206
-
207
- **Usage**:
208
- ```typescript
209
- import type * as MyWorker from "./worker";
210
-
211
- const worker = Worker.create<typeof MyWorker>("./worker.ts");
212
- ```
213
-
214
- ---
215
-
216
- ## `WorkerRequest`
217
-
218
- 메인 프로세스에서 워커로 보내는 요청 메시지.
219
-
220
- ```typescript
221
- export interface WorkerRequest {
222
- id: string;
223
- method: string;
224
- params: unknown[];
225
- }
226
- ```
227
-
228
- | Field | Type | Description |
229
- |-------|------|-------------|
230
- | `id` | string | 요청의 고유 ID (응답과 매칭하는 데 사용) |
231
- | `method` | string | 호출할 메서드명 |
232
- | `params` | unknown[] | 메서드 인자 배열 |
233
-
234
- ---
235
-
236
- ## `WorkerResponse`
237
-
238
- 워커에서 메인 프로세스로 보내는 응답 메시지.
239
-
240
- Discriminated union 타입으로, 다음 중 하나의 형태를 가진다:
241
-
242
- ```typescript
243
- export type WorkerResponse =
244
- | {
245
- request: WorkerRequest;
246
- type: "return";
247
- body?: unknown;
248
- }
249
- | {
250
- request: WorkerRequest;
251
- type: "error";
252
- body: Error;
253
- }
254
- | {
255
- type: "event";
256
- event: string;
257
- body?: unknown;
258
- }
259
- | {
260
- type: "log";
261
- body: string;
262
- }
263
- ```
264
-
265
- | Variant | Description |
266
- |---------|-------------|
267
- | `return` | 메서드 실행 성공 결과 |
268
- | `error` | 메서드 실행 중 에러 발생 |
269
- | `event` | 워커에서 발송한 이벤트 (request 없음, event 이름과 body 포함) |
270
- | `log` | 워커의 stdout.write 출력 (string body) |
271
-
272
- ---
273
-
274
- ## Complete Example
275
-
276
- ### worker.ts (워커 파일)
277
-
278
- ```typescript
279
- import { createWorker } from "@simplysm/core-node";
280
-
281
- interface MyEvents {
282
- progress: number;
283
- done: { result: number };
284
- }
285
-
286
- const methods = {
287
- compute: async (n: number) => {
288
- const sender = createWorker<typeof methods, MyEvents>(methods);
289
-
290
- let result = 0;
291
- for (let i = 0; i <= n; i++) {
292
- result += i;
293
- // 진행률 보고
294
- sender.send("progress", (i / n) * 100);
295
- }
296
-
297
- sender.send("done", { result });
298
- return result;
299
- },
300
- };
301
-
302
- const sender = createWorker<typeof methods, MyEvents>(methods);
303
- export default sender;
304
- ```
305
-
306
- ### main.ts (메인 파일)
307
-
308
- ```typescript
309
- import { Worker } from "@simplysm/core-node";
310
- import type * as MyWorker from "./worker";
311
-
312
- async function main() {
313
- const worker = Worker.create<typeof MyWorker>("./worker.ts");
314
-
315
- // 진행률 수신
316
- worker.on("progress", (value) => {
317
- console.log(`Progress: ${value.toFixed(1)}%`);
318
- });
319
-
320
- // 완료 신호 수신
321
- worker.on("done", ({ result }) => {
322
- console.log(`Done! Result: ${result}`);
323
- });
324
-
325
- // 메서드 호출
326
- const result = await worker.compute(100);
327
- console.log(`Final result: ${result}`);
328
-
329
- // 워커 종료
330
- await worker.terminate();
331
- }
332
-
333
- main().catch(console.error);
334
- ```
@@ -1,205 +0,0 @@
1
- # Worker
2
-
3
- 타입 안전한 Worker thread 래퍼. 워커 측(`createWorker`)과 메인 측(`Worker.create`) 한 쌍으로 구성된다.
4
-
5
- 개발 환경(`.ts` 파일)에서는 `lib/worker-dev-proxy.js`를 통해 tsx로 TypeScript 워커를 실행한다. 프로덕션(`.js` 파일)에서는 직접 Worker를 생성한다.
6
-
7
- ---
8
-
9
- ## `WorkerModule`
10
-
11
- `createWorker()`가 반환하는 워커 모듈의 타입 구조. `Worker.create<typeof import("./worker")>()`에서 타입 추론에 사용된다.
12
-
13
- ```typescript
14
- export interface WorkerModule {
15
- default: {
16
- __methods: Record<string, (...args: any[]) => unknown>;
17
- __events: Record<string, unknown>;
18
- };
19
- }
20
- ```
21
-
22
- | Field | Type | Description |
23
- |-------|------|-------------|
24
- | `default.__methods` | `Record<string, (...args: any[]) => unknown>` | 워커가 노출하는 메서드 맵 |
25
- | `default.__events` | `Record<string, unknown>` | 워커가 emit할 수 있는 이벤트와 데이터 타입 맵 |
26
-
27
- ---
28
-
29
- ## `PromisifyMethods`
30
-
31
- 메서드 반환값을 Promise로 감싸는 매핑 타입. 워커 메서드는 postMessage 기반으로 동작하여 항상 비동기이므로, 동기 메서드 타입도 `Promise<Awaited<R>>`로 변환된다.
32
-
33
- ```typescript
34
- export type PromisifyMethods<TMethods> = {
35
- [K in keyof TMethods]: TMethods[K] extends (...args: infer P) => infer R
36
- ? (...args: P) => Promise<Awaited<R>>
37
- : never;
38
- };
39
- ```
40
-
41
- ---
42
-
43
- ## `WorkerProxy`
44
-
45
- `Worker.create()`가 반환하는 프록시 타입. Promise화된 메서드 + `on()` + `off()` + `terminate()`를 제공한다.
46
-
47
- ```typescript
48
- export type WorkerProxy<TModule extends WorkerModule> = PromisifyMethods<
49
- TModule["default"]["__methods"]
50
- > & {
51
- on<TEventName extends keyof TModule["default"]["__events"] & string>(
52
- event: TEventName,
53
- listener: (data: TModule["default"]["__events"][TEventName]) => void,
54
- ): void;
55
-
56
- off<TEventName extends keyof TModule["default"]["__events"] & string>(
57
- event: TEventName,
58
- listener: (data: TModule["default"]["__events"][TEventName]) => void,
59
- ): void;
60
-
61
- terminate(): Promise<void>;
62
- };
63
- ```
64
-
65
- | Member | Description |
66
- |--------|-------------|
67
- | 메서드들 | 워커 메서드를 Promise화한 버전. 타입 안전하게 호출 가능 |
68
- | `on(event, listener)` | 워커 이벤트 리스너를 등록한다 |
69
- | `off(event, listener)` | 워커 이벤트 리스너를 해제한다 |
70
- | `terminate()` | 워커를 종료한다 |
71
-
72
- ---
73
-
74
- ## `WorkerRequest`
75
-
76
- 내부 워커 요청 메시지. 메인 스레드 → 워커 방향.
77
-
78
- ```typescript
79
- export interface WorkerRequest {
80
- id: string;
81
- method: string;
82
- params: unknown[];
83
- }
84
- ```
85
-
86
- | Field | Type | Description |
87
- |-------|------|-------------|
88
- | `id` | `string` | 요청 식별자 (UUID) |
89
- | `method` | `string` | 호출할 메서드 이름 |
90
- | `params` | `unknown[]` | 메서드 인수 |
91
-
92
- ---
93
-
94
- ## `WorkerResponse`
95
-
96
- 내부 워커 응답 메시지. 워커 → 메인 스레드 방향. `type` 필드로 분기되는 discriminated union이다.
97
-
98
- ```typescript
99
- export type WorkerResponse =
100
- | { request: WorkerRequest; type: "return"; body?: unknown }
101
- | { request: WorkerRequest; type: "error"; body: Error }
102
- | { type: "event"; event: string; body?: unknown }
103
- | { type: "log"; body: string };
104
- ```
105
-
106
- | Variant (`type`) | Fields | Description |
107
- |------------------|--------|-------------|
108
- | `"return"` | `request`, `body?` | 메서드 정상 반환 |
109
- | `"error"` | `request`, `body: Error` | 메서드 에러 반환 |
110
- | `"event"` | `event: string`, `body?` | 워커 이벤트 발행 |
111
- | `"log"` | `body: string` | 워커 stdout 로그 전달 |
112
-
113
- ---
114
-
115
- ## `Worker`
116
-
117
- 타입 안전한 Worker Proxy 생성 팩토리 객체.
118
-
119
- ```typescript
120
- export const Worker: {
121
- create<TModule extends WorkerModule>(
122
- filePath: string,
123
- opt?: Omit<WorkerRawOptions, "stdout" | "stderr">,
124
- ): WorkerProxy<TModule>;
125
- };
126
- ```
127
-
128
- ### `Worker.create`
129
-
130
- 타입 안전한 Worker Proxy를 생성한다.
131
-
132
- | Parameter | Type | Description |
133
- |-----------|------|-------------|
134
- | `filePath` | `string` | 워커 파일 경로 (`file://` URL 또는 절대 경로) |
135
- | `opt` | `Omit<WorkerRawOptions, "stdout" \| "stderr">` | 워커 옵션 (`stdout`/`stderr`는 항상 pipe) |
136
-
137
- **반환**: `WorkerProxy<TModule>` — 메서드 직접 호출, `on()`, `off()`, `terminate()` 지원
138
-
139
- ```typescript
140
- import { Worker } from "@simplysm/core-node";
141
- import type * as MyWorker from "./worker";
142
-
143
- const worker = Worker.create<typeof MyWorker>("./worker.ts");
144
-
145
- worker.on("progress", (value) => { /* ... */ });
146
- const result = await worker.add(10, 20); // 30
147
- await worker.terminate();
148
- ```
149
-
150
- ---
151
-
152
- ## `createWorker`
153
-
154
- Worker thread에서 사용하기 위한 워커 팩토리. 메서드와 이벤트를 등록하고, 메인 스레드로 이벤트를 전송하는 `send()` 함수를 포함하는 객체를 반환한다.
155
-
156
- ```typescript
157
- export function createWorker<
158
- TMethods extends Record<string, (...args: any[]) => unknown>,
159
- TEvents extends Record<string, unknown> = Record<string, never>,
160
- >(
161
- methods: TMethods,
162
- ): {
163
- send<TEventName extends keyof TEvents & string>(event: TEventName, data?: TEvents[TEventName]): void;
164
- __methods: TMethods;
165
- __events: TEvents;
166
- }
167
- ```
168
-
169
- | Parameter | Type | Description |
170
- |-----------|------|-------------|
171
- | `methods` | `TMethods` | 메인 스레드에서 호출할 수 있는 메서드 맵 |
172
-
173
- **반환 객체**:
174
-
175
- | Member | Description |
176
- |--------|-------------|
177
- | `send(event, data?)` | 메인 스레드로 이벤트를 전송한다 |
178
- | `__methods` | 등록된 메서드 맵 (타입 추론용) |
179
- | `__events` | 이벤트 타입 맵 (타입 추론용) |
180
-
181
- **Throws**: `parentPort`가 `null`이면 `SdError`를 던진다 (Worker thread 외부에서 호출 시).
182
-
183
- ```typescript
184
- // worker.ts — 이벤트 없는 워커
185
- import { createWorker } from "@simplysm/core-node";
186
-
187
- export default createWorker({
188
- add: (a: number, b: number) => a + b,
189
- });
190
-
191
- // worker.ts — 이벤트가 있는 워커
192
- import { createWorker } from "@simplysm/core-node";
193
-
194
- interface MyEvents { progress: number; }
195
-
196
- const methods = {
197
- calc: (x: number) => {
198
- sender.send("progress", 50);
199
- return x * 2;
200
- },
201
- };
202
-
203
- const sender = createWorker<typeof methods, MyEvents>(methods);
204
- export default sender;
205
- ```