@simplysm/service-client 14.0.44 → 14.0.46
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.
- package/dist/protocol/client-protocol-wrapper.d.ts.map +1 -1
- package/dist/protocol/client-protocol-wrapper.js +14 -4
- package/dist/protocol/client-protocol-wrapper.js.map +1 -1
- package/dist/transport/service-transport.d.ts.map +1 -1
- package/dist/transport/service-transport.js +13 -1
- package/dist/transport/service-transport.js.map +1 -1
- package/dist/types/browser-compat.d.ts +1 -14
- package/dist/types/browser-compat.d.ts.map +1 -1
- package/dist/types/browser-compat.js +1 -8
- package/dist/types/browser-compat.js.map +1 -1
- package/package.json +4 -4
- package/src/protocol/client-protocol-wrapper.ts +19 -7
- package/src/transport/service-transport.ts +13 -1
- package/src/types/browser-compat.ts +1 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-protocol-wrapper.d.ts","sourceRoot":"","sources":["../../src/protocol/client-protocol-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EACd,eAAe,EAChB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"client-protocol-wrapper.d.ts","sourceRoot":"","sources":["../../src/protocol/client-protocol-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EACV,0BAA0B,EAC1B,cAAc,EACd,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,IAAI,CAAC;CACjB;AA8FD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,eAAe,GAAG,qBAAqB,CA4D5F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LazyGcMap, transfer, Uuid } from "@simplysm/core-common";
|
|
2
|
-
import { isWorkerSupported
|
|
2
|
+
import { isWorkerSupported } from "../types/browser-compat.js";
|
|
3
3
|
// 공유 worker 상태 (싱글턴 패턴)
|
|
4
4
|
let worker;
|
|
5
5
|
const workerResolvers = new LazyGcMap({
|
|
@@ -24,9 +24,7 @@ function getWorker() {
|
|
|
24
24
|
if (!worker) {
|
|
25
25
|
// 모던 번들러 (Vite/Esbuild/Webpack)가 이 구문을 사용하여 Worker를 별도 파일로 분리/로드함
|
|
26
26
|
// 참고: import.meta.resolve 대신 상대 경로 사용 (Vite 호환성)
|
|
27
|
-
worker =
|
|
28
|
-
if (worker == null)
|
|
29
|
-
return undefined;
|
|
27
|
+
worker = new Worker(new URL("../workers/client-protocol.worker.js", import.meta.url), { type: "module" });
|
|
30
28
|
worker.onmessage = (event) => {
|
|
31
29
|
const { id, type, result, error } = event.data;
|
|
32
30
|
const resolver = workerResolvers.get(id);
|
|
@@ -42,6 +40,18 @@ function getWorker() {
|
|
|
42
40
|
workerResolvers.delete(id);
|
|
43
41
|
}
|
|
44
42
|
};
|
|
43
|
+
worker.onerror = () => {
|
|
44
|
+
// Worker 로드 실패 또는 초기화 에러 시
|
|
45
|
+
// 대기 중인 모든 요청 즉시 reject
|
|
46
|
+
const workerErr = new Error("Worker 초기화 실패");
|
|
47
|
+
for (const resolver of workerResolvers.values()) {
|
|
48
|
+
resolver.reject(workerErr);
|
|
49
|
+
}
|
|
50
|
+
workerResolvers.clear();
|
|
51
|
+
// 이후 메인 스레드로 fallback
|
|
52
|
+
worker = undefined;
|
|
53
|
+
workerAvailable = false;
|
|
54
|
+
};
|
|
45
55
|
}
|
|
46
56
|
return worker;
|
|
47
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-protocol-wrapper.js","sourceRoot":"","sources":["../../src/protocol/client-protocol-wrapper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"client-protocol-wrapper.js","sourceRoot":"","sources":["../../src/protocol/client-protocol-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-transport.d.ts","sourceRoot":"","sources":["../../src/transport/service-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EAChD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,GAAG,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,gBAAgB,
|
|
1
|
+
{"version":3,"file":"service-transport.d.ts","sourceRoot":"","sources":["../../src/transport/service-transport.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EAChD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,GAAG,CAAC,CAAC,SAAS,MAAM,sBAAsB,GAAG,MAAM,EACjD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI,GAClD,IAAI,CAAC;IACR,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,gBAAgB,CA0JlB"}
|
|
@@ -45,7 +45,19 @@ export function createServiceTransport(socket, protocol) {
|
|
|
45
45
|
return responsePromise;
|
|
46
46
|
}
|
|
47
47
|
async function onMessage(buf) {
|
|
48
|
-
|
|
48
|
+
// 헤더에서 uuid 선추출 (decode 실패 시에도 해당 요청에 에러를 전달하기 위함)
|
|
49
|
+
const uuid = Uuid.fromBytes(buf.subarray(0, 16)).toString();
|
|
50
|
+
let decoded;
|
|
51
|
+
try {
|
|
52
|
+
decoded = await protocol.decode(buf);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const listenerInfo = pendingRequests.get(uuid);
|
|
56
|
+
pendingRequests.delete(uuid);
|
|
57
|
+
responseProgressTotalSize.delete(uuid);
|
|
58
|
+
listenerInfo?.reject(err instanceof Error ? err : new Error(String(err)));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
49
61
|
const listenerInfo = pendingRequests.get(decoded.uuid);
|
|
50
62
|
try {
|
|
51
63
|
if (decoded.type === "progress") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-transport.js","sourceRoot":"","sources":["../../src/transport/service-transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AA0B3D,MAAM,UAAU,sBAAsB,CACpC,MAAsB,EACtB,QAA+B;IAE/B,MAAM,OAAO,GAAG,IAAI,YAAY,EAA0B,CAAC;IAE3D,MAAM,eAAe,GAAG,IAAI,GAAG,EAO5B,CAAC;IAEJ,2CAA2C;IAC3C,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5D,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEhC,4CAA4C;IAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3B,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YACnD,iBAAiB,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,IAAI,CAAC,OAA6B,EAAE,QAA0B;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QAExC,oCAAoC;QACpC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,4DAA4D;QAC5D,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEhC,QAAQ;QACR,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAEnE,eAAe;YACf,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;oBAClB,IAAI;oBACJ,SAAS;oBACT,aAAa,EAAE,CAAC;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,KAAK;YACL,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gBAAgB;YAChB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,WAAW;QACX,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,KAAK,UAAU,SAAS,CAAC,GAAU;QACjC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"service-transport.js","sourceRoot":"","sources":["../../src/transport/service-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-environment compatible types for browser globals.
|
|
3
|
-
* DOM-only 타입(FileList, BlobPart
|
|
3
|
+
* DOM-only 타입(FileList, BlobPart)을 대체하여
|
|
4
4
|
* Node.js / browser 양쪽 환경에서 typecheck가 통과하도록 한다.
|
|
5
5
|
*/
|
|
6
6
|
/** Blob constructor가 허용하는 데이터 타입 (DOM BlobPart 대체) */
|
|
@@ -15,19 +15,6 @@ export interface FileCollection {
|
|
|
15
15
|
[index: number]: File;
|
|
16
16
|
[Symbol.iterator](): IterableIterator<File>;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Web Worker 인터페이스 (DOM Worker 대체).
|
|
20
|
-
* 브라우저 Worker와 구조적으로 호환됨.
|
|
21
|
-
*/
|
|
22
|
-
export interface WorkerLike {
|
|
23
|
-
onmessage: ((ev: MessageEvent) => void) | null;
|
|
24
|
-
postMessage(message: unknown, transfer?: unknown[]): void;
|
|
25
|
-
terminate(): void;
|
|
26
|
-
}
|
|
27
18
|
/** Web Worker API 지원 여부 확인 */
|
|
28
19
|
export declare function isWorkerSupported(): boolean;
|
|
29
|
-
/** Web Worker 생성 (미지원 환경이면 undefined) */
|
|
30
|
-
export declare function createBrowserWorker(url: URL, options: {
|
|
31
|
-
type: string;
|
|
32
|
-
}): WorkerLike | undefined;
|
|
33
20
|
//# sourceMappingURL=browser-compat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-compat.d.ts","sourceRoot":"","sources":["../../src/types/browser-compat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED
|
|
1
|
+
{"version":3,"file":"browser-compat.d.ts","sourceRoot":"","sources":["../../src/types/browser-compat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sDAAsD;AACtD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9E;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,8BAA8B;AAC9B,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-environment compatible types for browser globals.
|
|
3
|
-
* DOM-only 타입(FileList, BlobPart
|
|
3
|
+
* DOM-only 타입(FileList, BlobPart)을 대체하여
|
|
4
4
|
* Node.js / browser 양쪽 환경에서 typecheck가 통과하도록 한다.
|
|
5
5
|
*/
|
|
6
6
|
/** Web Worker API 지원 여부 확인 */
|
|
7
7
|
export function isWorkerSupported() {
|
|
8
8
|
return "Worker" in globalThis;
|
|
9
9
|
}
|
|
10
|
-
/** Web Worker 생성 (미지원 환경이면 undefined) */
|
|
11
|
-
export function createBrowserWorker(url, options) {
|
|
12
|
-
if (!isWorkerSupported())
|
|
13
|
-
return undefined;
|
|
14
|
-
const ctor = globalThis["Worker"];
|
|
15
|
-
return new ctor(url, options);
|
|
16
|
-
}
|
|
17
10
|
//# sourceMappingURL=browser-compat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-compat.js","sourceRoot":"","sources":["../../src/types/browser-compat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"browser-compat.js","sourceRoot":"","sources":["../../src/types/browser-compat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,8BAA8B;AAC9B,MAAM,UAAU,iBAAiB;IAC/B,OAAO,QAAQ,IAAI,UAAU,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/service-client",
|
|
3
|
-
"version": "14.0.
|
|
3
|
+
"version": "14.0.46",
|
|
4
4
|
"description": "심플리즘 패키지 - 서비스 (client)",
|
|
5
5
|
"author": "심플리즘",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"consola": "^3.4.2",
|
|
22
|
-
"@simplysm/core-common": "14.0.
|
|
23
|
-
"@simplysm/orm-common": "14.0.
|
|
24
|
-
"@simplysm/service-common": "14.0.
|
|
22
|
+
"@simplysm/core-common": "14.0.46",
|
|
23
|
+
"@simplysm/orm-common": "14.0.46",
|
|
24
|
+
"@simplysm/service-common": "14.0.46"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/ws": "^8.18.1",
|
|
@@ -5,8 +5,7 @@ import type {
|
|
|
5
5
|
ServiceMessage,
|
|
6
6
|
ServiceProtocol,
|
|
7
7
|
} from "@simplysm/service-common";
|
|
8
|
-
import
|
|
9
|
-
import { isWorkerSupported, createBrowserWorker } from "../types/browser-compat";
|
|
8
|
+
import { isWorkerSupported } from "../types/browser-compat";
|
|
10
9
|
|
|
11
10
|
export interface ClientProtocolWrapper {
|
|
12
11
|
encode(uuid: string, message: ServiceMessage): Promise<{ chunks: Bytes[]; totalSize: number }>;
|
|
@@ -15,7 +14,7 @@ export interface ClientProtocolWrapper {
|
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
// 공유 worker 상태 (싱글턴 패턴)
|
|
18
|
-
let worker:
|
|
17
|
+
let worker: Worker | undefined;
|
|
19
18
|
const workerResolvers = new LazyGcMap<
|
|
20
19
|
string,
|
|
21
20
|
{ resolve: (res: unknown) => void; reject: (err: Error) => void }
|
|
@@ -37,7 +36,7 @@ function isWorkerAvailable(): boolean {
|
|
|
37
36
|
return workerAvailable;
|
|
38
37
|
}
|
|
39
38
|
|
|
40
|
-
function getWorker():
|
|
39
|
+
function getWorker(): Worker | undefined {
|
|
41
40
|
if (!isWorkerAvailable()) {
|
|
42
41
|
return undefined;
|
|
43
42
|
}
|
|
@@ -45,11 +44,10 @@ function getWorker(): WorkerLike | undefined {
|
|
|
45
44
|
if (!worker) {
|
|
46
45
|
// 모던 번들러 (Vite/Esbuild/Webpack)가 이 구문을 사용하여 Worker를 별도 파일로 분리/로드함
|
|
47
46
|
// 참고: import.meta.resolve 대신 상대 경로 사용 (Vite 호환성)
|
|
48
|
-
worker =
|
|
49
|
-
new URL("../workers/client-protocol.worker.
|
|
47
|
+
worker = new Worker(
|
|
48
|
+
new URL("../workers/client-protocol.worker.js", import.meta.url),
|
|
50
49
|
{ type: "module" },
|
|
51
50
|
);
|
|
52
|
-
if (worker == null) return undefined;
|
|
53
51
|
|
|
54
52
|
worker.onmessage = (event: MessageEvent) => {
|
|
55
53
|
const { id, type, result, error } = event.data as {
|
|
@@ -71,6 +69,20 @@ function getWorker(): WorkerLike | undefined {
|
|
|
71
69
|
workerResolvers.delete(id);
|
|
72
70
|
}
|
|
73
71
|
};
|
|
72
|
+
|
|
73
|
+
worker.onerror = () => {
|
|
74
|
+
// Worker 로드 실패 또는 초기화 에러 시
|
|
75
|
+
// 대기 중인 모든 요청 즉시 reject
|
|
76
|
+
const workerErr = new Error("Worker 초기화 실패");
|
|
77
|
+
for (const resolver of workerResolvers.values()) {
|
|
78
|
+
resolver.reject(workerErr);
|
|
79
|
+
}
|
|
80
|
+
workerResolvers.clear();
|
|
81
|
+
|
|
82
|
+
// 이후 메인 스레드로 fallback
|
|
83
|
+
worker = undefined;
|
|
84
|
+
workerAvailable = false;
|
|
85
|
+
};
|
|
74
86
|
}
|
|
75
87
|
return worker;
|
|
76
88
|
}
|
|
@@ -92,7 +92,19 @@ export function createServiceTransport(
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
async function onMessage(buf: Bytes): Promise<void> {
|
|
95
|
-
|
|
95
|
+
// 헤더에서 uuid 선추출 (decode 실패 시에도 해당 요청에 에러를 전달하기 위함)
|
|
96
|
+
const uuid = Uuid.fromBytes(buf.subarray(0, 16)).toString();
|
|
97
|
+
|
|
98
|
+
let decoded;
|
|
99
|
+
try {
|
|
100
|
+
decoded = await protocol.decode(buf);
|
|
101
|
+
} catch (err) {
|
|
102
|
+
const listenerInfo = pendingRequests.get(uuid);
|
|
103
|
+
pendingRequests.delete(uuid);
|
|
104
|
+
responseProgressTotalSize.delete(uuid);
|
|
105
|
+
listenerInfo?.reject(err instanceof Error ? err : new Error(String(err)));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
96
108
|
|
|
97
109
|
const listenerInfo = pendingRequests.get(decoded.uuid);
|
|
98
110
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Cross-environment compatible types for browser globals.
|
|
3
|
-
* DOM-only 타입(FileList, BlobPart
|
|
3
|
+
* DOM-only 타입(FileList, BlobPart)을 대체하여
|
|
4
4
|
* Node.js / browser 양쪽 환경에서 typecheck가 통과하도록 한다.
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -18,30 +18,7 @@ export interface FileCollection {
|
|
|
18
18
|
[Symbol.iterator](): IterableIterator<File>;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
* Web Worker 인터페이스 (DOM Worker 대체).
|
|
23
|
-
* 브라우저 Worker와 구조적으로 호환됨.
|
|
24
|
-
*/
|
|
25
|
-
export interface WorkerLike {
|
|
26
|
-
onmessage: ((ev: MessageEvent) => void) | null;
|
|
27
|
-
postMessage(message: unknown, transfer?: unknown[]): void;
|
|
28
|
-
terminate(): void;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
21
|
/** Web Worker API 지원 여부 확인 */
|
|
32
22
|
export function isWorkerSupported(): boolean {
|
|
33
23
|
return "Worker" in globalThis;
|
|
34
24
|
}
|
|
35
|
-
|
|
36
|
-
/** Web Worker 생성 (미지원 환경이면 undefined) */
|
|
37
|
-
export function createBrowserWorker(
|
|
38
|
-
url: URL,
|
|
39
|
-
options: { type: string },
|
|
40
|
-
): WorkerLike | undefined {
|
|
41
|
-
if (!isWorkerSupported()) return undefined;
|
|
42
|
-
const ctor = (globalThis as Record<string, unknown>)["Worker"] as new (
|
|
43
|
-
url: URL,
|
|
44
|
-
opts: { type: string },
|
|
45
|
-
) => WorkerLike;
|
|
46
|
-
return new ctor(url, options);
|
|
47
|
-
}
|