@simplysm/core-common 13.0.99 → 14.0.1
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/common.types.d.ts +14 -14
- package/dist/common.types.js +2 -1
- package/dist/common.types.js.map +1 -6
- package/dist/env.d.ts +5 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +12 -8
- package/dist/env.js.map +1 -6
- package/dist/errors/argument-error.d.ts +10 -10
- package/dist/errors/argument-error.d.ts.map +1 -1
- package/dist/errors/argument-error.js +31 -14
- package/dist/errors/argument-error.js.map +1 -6
- package/dist/errors/not-implemented-error.d.ts +8 -8
- package/dist/errors/not-implemented-error.js +30 -12
- package/dist/errors/not-implemented-error.js.map +1 -6
- package/dist/errors/sd-error.d.ts +10 -10
- package/dist/errors/sd-error.d.ts.map +1 -1
- package/dist/errors/sd-error.js +45 -24
- package/dist/errors/sd-error.js.map +1 -6
- package/dist/errors/timeout-error.d.ts +10 -10
- package/dist/errors/timeout-error.js +34 -15
- package/dist/errors/timeout-error.js.map +1 -6
- package/dist/extensions/arr-ext.d.ts +2 -2
- package/dist/extensions/arr-ext.helpers.d.ts +10 -10
- package/dist/extensions/arr-ext.helpers.js +112 -89
- package/dist/extensions/arr-ext.helpers.js.map +1 -6
- package/dist/extensions/arr-ext.js +458 -422
- package/dist/extensions/arr-ext.js.map +1 -6
- package/dist/extensions/arr-ext.types.d.ts +57 -57
- package/dist/extensions/arr-ext.types.d.ts.map +1 -1
- package/dist/extensions/arr-ext.types.js +6 -1
- package/dist/extensions/arr-ext.types.js.map +1 -6
- package/dist/extensions/map-ext.d.ts +16 -16
- package/dist/extensions/map-ext.js +27 -22
- package/dist/extensions/map-ext.js.map +1 -6
- package/dist/extensions/set-ext.d.ts +11 -11
- package/dist/extensions/set-ext.js +32 -25
- package/dist/extensions/set-ext.js.map +1 -6
- package/dist/features/debounce-queue.d.ts +17 -17
- package/dist/features/debounce-queue.js +98 -70
- package/dist/features/debounce-queue.js.map +1 -6
- package/dist/features/event-emitter.d.ts +20 -20
- package/dist/features/event-emitter.js +101 -78
- package/dist/features/event-emitter.js.map +1 -6
- package/dist/features/serial-queue.d.ts +11 -11
- package/dist/features/serial-queue.js +78 -57
- package/dist/features/serial-queue.js.map +1 -6
- package/dist/globals.d.ts +4 -4
- package/dist/globals.js +9 -1
- package/dist/globals.js.map +1 -6
- package/dist/index.js +28 -27
- package/dist/index.js.map +1 -6
- package/dist/types/date-only.d.ts +64 -64
- package/dist/types/date-only.d.ts.map +1 -1
- package/dist/types/date-only.js +263 -252
- package/dist/types/date-only.js.map +1 -6
- package/dist/types/date-time.d.ts +36 -36
- package/dist/types/date-time.d.ts.map +1 -1
- package/dist/types/date-time.js +196 -288
- package/dist/types/date-time.js.map +1 -6
- package/dist/types/lazy-gc-map.d.ts +26 -26
- package/dist/types/lazy-gc-map.d.ts.map +1 -1
- package/dist/types/lazy-gc-map.js +202 -159
- package/dist/types/lazy-gc-map.js.map +1 -6
- package/dist/types/time.d.ts +23 -23
- package/dist/types/time.d.ts.map +1 -1
- package/dist/types/time.js +169 -158
- package/dist/types/time.js.map +1 -6
- package/dist/types/uuid.d.ts +11 -11
- package/dist/types/uuid.d.ts.map +1 -1
- package/dist/types/uuid.js +95 -70
- package/dist/types/uuid.js.map +1 -6
- package/dist/utils/bytes.d.ts +17 -17
- package/dist/utils/bytes.js +137 -81
- package/dist/utils/bytes.js.map +1 -6
- package/dist/utils/date-format.d.ts +40 -40
- package/dist/utils/date-format.js +187 -101
- package/dist/utils/date-format.js.map +1 -6
- package/dist/utils/error.d.ts +4 -4
- package/dist/utils/error.js +11 -6
- package/dist/utils/error.js.map +1 -6
- package/dist/utils/json.d.ts +19 -19
- package/dist/utils/json.js +187 -135
- package/dist/utils/json.js.map +1 -6
- package/dist/utils/num.d.ts +20 -20
- package/dist/utils/num.js +76 -34
- package/dist/utils/num.js.map +1 -6
- package/dist/utils/obj.d.ts +111 -111
- package/dist/utils/obj.d.ts.map +1 -1
- package/dist/utils/obj.js +706 -496
- package/dist/utils/obj.js.map +1 -6
- package/dist/utils/path.d.ts +10 -10
- package/dist/utils/path.js +35 -18
- package/dist/utils/path.js.map +1 -6
- package/dist/utils/primitive.d.ts +5 -5
- package/dist/utils/primitive.js +34 -14
- package/dist/utils/primitive.js.map +1 -6
- package/dist/utils/str.d.ts +38 -38
- package/dist/utils/str.js +217 -113
- package/dist/utils/str.js.map +1 -6
- package/dist/utils/template-strings.d.ts +26 -26
- package/dist/utils/template-strings.js +113 -40
- package/dist/utils/template-strings.js.map +1 -6
- package/dist/utils/transferable.d.ts +18 -18
- package/dist/utils/transferable.js +218 -151
- package/dist/utils/transferable.js.map +1 -6
- package/dist/utils/wait.d.ts +9 -9
- package/dist/utils/wait.js +30 -15
- package/dist/utils/wait.js.map +1 -6
- package/dist/utils/xml.d.ts +13 -13
- package/dist/utils/xml.js +84 -46
- package/dist/utils/xml.js.map +1 -6
- package/dist/utils/zip.d.ts +22 -22
- package/dist/utils/zip.js +172 -148
- package/dist/utils/zip.js.map +1 -6
- package/package.json +5 -7
- package/src/common.types.ts +14 -14
- package/src/env.ts +9 -1
- package/src/errors/argument-error.ts +15 -15
- package/src/errors/not-implemented-error.ts +9 -9
- package/src/errors/sd-error.ts +12 -12
- package/src/errors/timeout-error.ts +12 -12
- package/src/extensions/arr-ext.helpers.ts +16 -16
- package/src/extensions/arr-ext.ts +35 -35
- package/src/extensions/arr-ext.types.ts +57 -57
- package/src/extensions/map-ext.ts +16 -16
- package/src/extensions/set-ext.ts +11 -11
- package/src/features/debounce-queue.ts +23 -23
- package/src/features/event-emitter.ts +25 -25
- package/src/features/serial-queue.ts +13 -13
- package/src/globals.ts +4 -4
- package/src/index.ts +5 -5
- package/src/types/date-only.ts +84 -83
- package/src/types/date-time.ts +43 -42
- package/src/types/lazy-gc-map.ts +44 -44
- package/src/types/time.ts +29 -29
- package/src/types/uuid.ts +15 -15
- package/src/utils/bytes.ts +35 -35
- package/src/utils/date-format.ts +59 -59
- package/src/utils/error.ts +4 -4
- package/src/utils/json.ts +41 -41
- package/src/utils/num.ts +20 -20
- package/src/utils/obj.ts +138 -138
- package/src/utils/path.ts +10 -10
- package/src/utils/primitive.ts +6 -6
- package/src/utils/str.ts +48 -48
- package/src/utils/template-strings.ts +29 -29
- package/src/utils/transferable.ts +38 -38
- package/src/utils/wait.ts +10 -10
- package/src/utils/xml.ts +19 -19
- package/src/utils/zip.ts +25 -25
- package/README.md +0 -160
- package/docs/errors.md +0 -119
- package/docs/extensions.md +0 -387
- package/docs/features.md +0 -143
- package/docs/types.md +0 -287
- package/docs/utils.md +0 -757
- package/tests/errors/errors.spec.ts +0 -80
- package/tests/extensions/array-extension.spec.ts +0 -654
- package/tests/extensions/map-extension.spec.ts +0 -117
- package/tests/extensions/set-extension.spec.ts +0 -67
- package/tests/types/date-only.spec.ts +0 -533
- package/tests/types/date-time.spec.ts +0 -246
- package/tests/types/lazy-gc-map.spec.ts +0 -606
- package/tests/types/time.spec.ts +0 -428
- package/tests/types/uuid.spec.ts +0 -74
- package/tests/utils/bytes-utils.spec.ts +0 -197
- package/tests/utils/date-format.spec.ts +0 -350
- package/tests/utils/debounce-queue.spec.ts +0 -226
- package/tests/utils/json.spec.ts +0 -400
- package/tests/utils/number.spec.ts +0 -136
- package/tests/utils/object.spec.ts +0 -810
- package/tests/utils/path.spec.ts +0 -70
- package/tests/utils/primitive.spec.ts +0 -43
- package/tests/utils/sd-event-emitter.spec.ts +0 -189
- package/tests/utils/serial-queue.spec.ts +0 -305
- package/tests/utils/string.spec.ts +0 -265
- package/tests/utils/template-strings.spec.ts +0 -48
- package/tests/utils/transferable.spec.ts +0 -639
- package/tests/utils/wait.spec.ts +0 -123
- package/tests/utils/xml.spec.ts +0 -146
- package/tests/utils/zip.spec.ts +0 -221
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Worker 간 전송 가능한 객체 타입
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 이 코드에서는 ArrayBuffer만 사용됨.
|
|
5
5
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects
|
|
6
6
|
*/
|
|
7
7
|
type Transferable = ArrayBuffer;
|
|
8
8
|
/**
|
|
9
|
-
* Transferable
|
|
9
|
+
* Transferable 변환 유틸리티 함수
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Worker 간 데이터 전송을 위한 직렬화/역직렬화 수행.
|
|
12
|
+
* structuredClone이 지원하지 않는 커스텀 타입을 처리.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
14
|
+
* 지원 타입:
|
|
15
15
|
* - Date, DateTime, DateOnly, Time, Uuid, RegExp
|
|
16
|
-
* - Error (
|
|
17
|
-
* - Uint8Array (
|
|
18
|
-
* - Array, Map, Set,
|
|
16
|
+
* - Error (cause, code, detail 포함)
|
|
17
|
+
* - Uint8Array (다른 TypedArray는 지원하지 않으며 일반 객체로 처리)
|
|
18
|
+
* - Array, Map, Set, 일반 객체
|
|
19
19
|
*
|
|
20
|
-
* @note
|
|
21
|
-
* @note
|
|
20
|
+
* @note 순환 참조 시 transferableEncode에서 TypeError 발생 (경로 정보 포함)
|
|
21
|
+
* @note 같은 객체가 여러 곳에서 참조되면 캐싱된 인코딩 결과를 재사용
|
|
22
22
|
*
|
|
23
23
|
* @example
|
|
24
|
-
* //
|
|
24
|
+
* // Worker로 데이터 전송
|
|
25
25
|
* const { result, transferList } = transferableEncode(data);
|
|
26
26
|
* worker.postMessage(result, transferList);
|
|
27
27
|
*
|
|
28
|
-
* //
|
|
28
|
+
* // Worker에서 데이터 수신
|
|
29
29
|
* const decoded = decode(event.data);
|
|
30
30
|
*/
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
32
|
+
* Simplysm 타입을 사용하는 객체를 일반 객체로 변환
|
|
33
|
+
* Worker로 전송 가능한 형태로 직렬화
|
|
34
34
|
*
|
|
35
|
-
* @throws TypeError
|
|
35
|
+
* @throws TypeError 순환 참조가 감지된 경우
|
|
36
36
|
*/
|
|
37
37
|
export declare function encode(obj: unknown): {
|
|
38
38
|
result: unknown;
|
|
39
39
|
transferList: Transferable[];
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
42
|
+
* 직렬화된 객체를 Simplysm 타입을 사용하는 객체로 변환
|
|
43
|
+
* Worker에서 수신한 데이터 역직렬화
|
|
44
44
|
*/
|
|
45
45
|
export declare function decode(obj: unknown): unknown;
|
|
46
46
|
export {};
|
|
@@ -2,166 +2,233 @@ import { DateTime } from "../types/date-time.js";
|
|
|
2
2
|
import { DateOnly } from "../types/date-only.js";
|
|
3
3
|
import { Time } from "../types/time.js";
|
|
4
4
|
import { Uuid } from "../types/uuid.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Transferable 변환 유틸리티 함수
|
|
7
|
+
*
|
|
8
|
+
* Worker 간 데이터 전송을 위한 직렬화/역직렬화 수행.
|
|
9
|
+
* structuredClone이 지원하지 않는 커스텀 타입을 처리.
|
|
10
|
+
*
|
|
11
|
+
* 지원 타입:
|
|
12
|
+
* - Date, DateTime, DateOnly, Time, Uuid, RegExp
|
|
13
|
+
* - Error (cause, code, detail 포함)
|
|
14
|
+
* - Uint8Array (다른 TypedArray는 지원하지 않으며 일반 객체로 처리)
|
|
15
|
+
* - Array, Map, Set, 일반 객체
|
|
16
|
+
*
|
|
17
|
+
* @note 순환 참조 시 transferableEncode에서 TypeError 발생 (경로 정보 포함)
|
|
18
|
+
* @note 같은 객체가 여러 곳에서 참조되면 캐싱된 인코딩 결과를 재사용
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* // Worker로 데이터 전송
|
|
22
|
+
* const { result, transferList } = transferableEncode(data);
|
|
23
|
+
* worker.postMessage(result, transferList);
|
|
24
|
+
*
|
|
25
|
+
* // Worker에서 데이터 수신
|
|
26
|
+
* const decoded = decode(event.data);
|
|
27
|
+
*/
|
|
28
|
+
//#region encode
|
|
29
|
+
/**
|
|
30
|
+
* Simplysm 타입을 사용하는 객체를 일반 객체로 변환
|
|
31
|
+
* Worker로 전송 가능한 형태로 직렬화
|
|
32
|
+
*
|
|
33
|
+
* @throws TypeError 순환 참조가 감지된 경우
|
|
34
|
+
*/
|
|
35
|
+
export function encode(obj) {
|
|
36
|
+
const transferList = [];
|
|
37
|
+
const ancestors = new Set();
|
|
38
|
+
const cache = new Map();
|
|
39
|
+
const result = encodeImpl(obj, transferList, [], ancestors, cache);
|
|
40
|
+
return { result, transferList };
|
|
11
41
|
}
|
|
12
42
|
function encodeImpl(obj, transferList, path, ancestors, cache) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const currentPath = path.length > 0 ? path.join(".") : "root";
|
|
17
|
-
throw new TypeError(`Circular reference detected: ${currentPath}`);
|
|
18
|
-
}
|
|
19
|
-
const cached = cache.get(obj);
|
|
20
|
-
if (cached !== void 0) return cached;
|
|
21
|
-
ancestors.add(obj);
|
|
22
|
-
}
|
|
23
|
-
let result;
|
|
24
|
-
try {
|
|
25
|
-
if (obj instanceof Uint8Array) {
|
|
26
|
-
const isSharedArrayBuffer = typeof SharedArrayBuffer !== "undefined" && obj.buffer instanceof SharedArrayBuffer;
|
|
27
|
-
const buffer = obj.buffer;
|
|
28
|
-
if (!isSharedArrayBuffer && !transferList.includes(buffer)) {
|
|
29
|
-
transferList.push(buffer);
|
|
30
|
-
}
|
|
31
|
-
result = obj;
|
|
32
|
-
} else if (obj instanceof Date) {
|
|
33
|
-
result = { __type__: "Date", data: obj.getTime() };
|
|
34
|
-
} else if (obj instanceof DateTime) {
|
|
35
|
-
result = { __type__: "DateTime", data: obj.tick };
|
|
36
|
-
} else if (obj instanceof DateOnly) {
|
|
37
|
-
result = { __type__: "DateOnly", data: obj.tick };
|
|
38
|
-
} else if (obj instanceof Time) {
|
|
39
|
-
result = { __type__: "Time", data: obj.tick };
|
|
40
|
-
} else if (obj instanceof Uuid) {
|
|
41
|
-
result = { __type__: "Uuid", data: obj.toString() };
|
|
42
|
-
} else if (obj instanceof RegExp) {
|
|
43
|
-
result = { __type__: "RegExp", data: { source: obj.source, flags: obj.flags } };
|
|
44
|
-
} else if (obj instanceof Error) {
|
|
45
|
-
const errObj = obj;
|
|
46
|
-
result = {
|
|
47
|
-
__type__: "Error",
|
|
48
|
-
data: {
|
|
49
|
-
name: errObj.name,
|
|
50
|
-
message: errObj.message,
|
|
51
|
-
stack: errObj.stack,
|
|
52
|
-
...errObj.code !== void 0 ? { code: errObj.code } : {},
|
|
53
|
-
...errObj.detail !== void 0 ? {
|
|
54
|
-
detail: encodeImpl(
|
|
55
|
-
errObj.detail,
|
|
56
|
-
transferList,
|
|
57
|
-
[...path, "detail"],
|
|
58
|
-
ancestors,
|
|
59
|
-
cache
|
|
60
|
-
)
|
|
61
|
-
} : {},
|
|
62
|
-
...errObj.cause !== void 0 ? {
|
|
63
|
-
cause: encodeImpl(errObj.cause, transferList, [...path, "cause"], ancestors, cache)
|
|
64
|
-
} : {}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
} else if (Array.isArray(obj)) {
|
|
68
|
-
result = obj.map(
|
|
69
|
-
(item, idx) => encodeImpl(item, transferList, [...path, idx], ancestors, cache)
|
|
70
|
-
);
|
|
71
|
-
} else if (obj instanceof Map) {
|
|
72
|
-
let idx = 0;
|
|
73
|
-
result = new Map(
|
|
74
|
-
Array.from(obj.entries()).map(([k, v]) => {
|
|
75
|
-
const keyPath = [...path, `Map[${idx}].key`];
|
|
76
|
-
const valuePath = [...path, `Map[${idx}].value`];
|
|
77
|
-
idx++;
|
|
78
|
-
return [
|
|
79
|
-
encodeImpl(k, transferList, keyPath, ancestors, cache),
|
|
80
|
-
encodeImpl(v, transferList, valuePath, ancestors, cache)
|
|
81
|
-
];
|
|
82
|
-
})
|
|
83
|
-
);
|
|
84
|
-
} else if (obj instanceof Set) {
|
|
85
|
-
let idx = 0;
|
|
86
|
-
result = new Set(
|
|
87
|
-
Array.from(obj).map(
|
|
88
|
-
(v) => encodeImpl(v, transferList, [...path, `Set[${idx++}]`], ancestors, cache)
|
|
89
|
-
)
|
|
90
|
-
);
|
|
91
|
-
} else if (typeof obj === "object") {
|
|
92
|
-
const res = {};
|
|
93
|
-
const record = obj;
|
|
94
|
-
for (const key of Object.keys(record)) {
|
|
95
|
-
res[key] = encodeImpl(record[key], transferList, [...path, key], ancestors, cache);
|
|
96
|
-
}
|
|
97
|
-
result = res;
|
|
98
|
-
} else {
|
|
99
|
-
return obj;
|
|
100
|
-
}
|
|
43
|
+
if (obj == null)
|
|
44
|
+
return obj;
|
|
45
|
+
// 객체 타입 처리: 순환 참조 감지 + 캐시
|
|
101
46
|
if (typeof obj === "object") {
|
|
102
|
-
|
|
47
|
+
// 순환 참조 감지 (현재 재귀 스택에 있는 객체)
|
|
48
|
+
if (ancestors.has(obj)) {
|
|
49
|
+
const currentPath = path.length > 0 ? path.join(".") : "root";
|
|
50
|
+
throw new TypeError(`순환 참조 감지됨: ${currentPath}`);
|
|
51
|
+
}
|
|
52
|
+
// 이미 인코딩된 객체이면 캐싱된 결과 재사용
|
|
53
|
+
const cached = cache.get(obj);
|
|
54
|
+
if (cached !== undefined)
|
|
55
|
+
return cached;
|
|
56
|
+
// 재귀 스택에 추가
|
|
57
|
+
ancestors.add(obj);
|
|
103
58
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
59
|
+
let result;
|
|
60
|
+
try {
|
|
61
|
+
// 1. Uint8Array
|
|
62
|
+
if (obj instanceof Uint8Array) {
|
|
63
|
+
// SharedArrayBuffer는 이미 공유 메모리이므로 transferList에 추가하지 않음
|
|
64
|
+
// zero-copy 전송을 위해 ArrayBuffer만 transferList에 추가
|
|
65
|
+
const isSharedArrayBuffer = typeof SharedArrayBuffer !== "undefined" && obj.buffer instanceof SharedArrayBuffer;
|
|
66
|
+
const buffer = obj.buffer;
|
|
67
|
+
if (!isSharedArrayBuffer && !transferList.includes(buffer)) {
|
|
68
|
+
transferList.push(buffer);
|
|
69
|
+
}
|
|
70
|
+
result = obj;
|
|
71
|
+
}
|
|
72
|
+
// 2. 특수 타입 변환 (JSON.stringify 없이 태그된 객체로 변환)
|
|
73
|
+
else if (obj instanceof Date) {
|
|
74
|
+
result = { __type__: "Date", data: obj.getTime() };
|
|
75
|
+
}
|
|
76
|
+
else if (obj instanceof DateTime) {
|
|
77
|
+
result = { __type__: "DateTime", data: obj.tick };
|
|
78
|
+
}
|
|
79
|
+
else if (obj instanceof DateOnly) {
|
|
80
|
+
result = { __type__: "DateOnly", data: obj.tick };
|
|
81
|
+
}
|
|
82
|
+
else if (obj instanceof Time) {
|
|
83
|
+
result = { __type__: "Time", data: obj.tick };
|
|
84
|
+
}
|
|
85
|
+
else if (obj instanceof Uuid) {
|
|
86
|
+
result = { __type__: "Uuid", data: obj.toString() };
|
|
87
|
+
}
|
|
88
|
+
else if (obj instanceof RegExp) {
|
|
89
|
+
result = { __type__: "RegExp", data: { source: obj.source, flags: obj.flags } };
|
|
90
|
+
}
|
|
91
|
+
else if (obj instanceof Error) {
|
|
92
|
+
const errObj = obj;
|
|
93
|
+
result = {
|
|
94
|
+
__type__: "Error",
|
|
95
|
+
data: {
|
|
96
|
+
name: errObj.name,
|
|
97
|
+
message: errObj.message,
|
|
98
|
+
stack: errObj.stack,
|
|
99
|
+
...(errObj.code !== undefined ? { code: errObj.code } : {}),
|
|
100
|
+
...(errObj.detail !== undefined
|
|
101
|
+
? {
|
|
102
|
+
detail: encodeImpl(errObj.detail, transferList, [...path, "detail"], ancestors, cache),
|
|
103
|
+
}
|
|
104
|
+
: {}),
|
|
105
|
+
...(errObj.cause !== undefined
|
|
106
|
+
? {
|
|
107
|
+
cause: encodeImpl(errObj.cause, transferList, [...path, "cause"], ancestors, cache),
|
|
108
|
+
}
|
|
109
|
+
: {}),
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// 3. Array 재귀
|
|
114
|
+
else if (Array.isArray(obj)) {
|
|
115
|
+
result = obj.map((item, idx) => encodeImpl(item, transferList, [...path, idx], ancestors, cache));
|
|
116
|
+
}
|
|
117
|
+
// 4. Map 재귀
|
|
118
|
+
else if (obj instanceof Map) {
|
|
119
|
+
let idx = 0;
|
|
120
|
+
result = new Map(Array.from(obj.entries()).map(([k, v]) => {
|
|
121
|
+
const keyPath = [...path, `Map[${idx}].key`];
|
|
122
|
+
const valuePath = [...path, `Map[${idx}].value`];
|
|
123
|
+
idx++;
|
|
124
|
+
return [
|
|
125
|
+
encodeImpl(k, transferList, keyPath, ancestors, cache),
|
|
126
|
+
encodeImpl(v, transferList, valuePath, ancestors, cache),
|
|
127
|
+
];
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
// 5. Set 재귀
|
|
131
|
+
else if (obj instanceof Set) {
|
|
132
|
+
let idx = 0;
|
|
133
|
+
result = new Set(Array.from(obj).map((v) => encodeImpl(v, transferList, [...path, `Set[${idx++}]`], ancestors, cache)));
|
|
134
|
+
}
|
|
135
|
+
// 6. 일반 객체 재귀
|
|
136
|
+
else if (typeof obj === "object") {
|
|
137
|
+
const res = {};
|
|
138
|
+
const record = obj;
|
|
139
|
+
for (const key of Object.keys(record)) {
|
|
140
|
+
res[key] = encodeImpl(record[key], transferList, [...path, key], ancestors, cache);
|
|
141
|
+
}
|
|
142
|
+
result = res;
|
|
143
|
+
}
|
|
144
|
+
// 7. 원시 타입
|
|
145
|
+
else {
|
|
146
|
+
return obj;
|
|
147
|
+
}
|
|
148
|
+
// 캐시에 저장 (성공 시에만)
|
|
149
|
+
if (typeof obj === "object") {
|
|
150
|
+
cache.set(obj, result);
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
// 재귀 스택에서 제거 (예외 발생 시에도 반드시 실행)
|
|
156
|
+
if (typeof obj === "object") {
|
|
157
|
+
ancestors.delete(obj);
|
|
158
|
+
}
|
|
108
159
|
}
|
|
109
|
-
}
|
|
110
160
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if (
|
|
122
|
-
|
|
123
|
-
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region decode
|
|
163
|
+
/**
|
|
164
|
+
* 직렬화된 객체를 Simplysm 타입을 사용하는 객체로 변환
|
|
165
|
+
* Worker에서 수신한 데이터 역직렬화
|
|
166
|
+
*/
|
|
167
|
+
export function decode(obj) {
|
|
168
|
+
if (obj == null)
|
|
169
|
+
return obj;
|
|
170
|
+
// 1. 태그된 객체에서 특수 타입 복원
|
|
171
|
+
if (typeof obj === "object" && "__type__" in obj && "data" in obj) {
|
|
172
|
+
const typed = obj;
|
|
173
|
+
const data = typed.data;
|
|
174
|
+
if (typed.__type__ === "Date" && typeof data === "number")
|
|
175
|
+
return new Date(data);
|
|
176
|
+
if (typed.__type__ === "DateTime" && typeof data === "number")
|
|
177
|
+
return new DateTime(data);
|
|
178
|
+
if (typed.__type__ === "DateOnly" && typeof data === "number")
|
|
179
|
+
return new DateOnly(data);
|
|
180
|
+
if (typed.__type__ === "Time" && typeof data === "number")
|
|
181
|
+
return new Time(data);
|
|
182
|
+
if (typed.__type__ === "Uuid" && typeof data === "string")
|
|
183
|
+
return new Uuid(data);
|
|
184
|
+
if (typed.__type__ === "RegExp" && typeof data === "object" && data !== null) {
|
|
185
|
+
const regexData = data;
|
|
186
|
+
return new RegExp(regexData.source, regexData.flags);
|
|
187
|
+
}
|
|
188
|
+
if (typed.__type__ === "Error" && typeof data === "object" && data !== null) {
|
|
189
|
+
const errorData = data;
|
|
190
|
+
const err = new Error(errorData.message);
|
|
191
|
+
err.name = errorData.name;
|
|
192
|
+
err.stack = errorData.stack;
|
|
193
|
+
if (errorData.code !== undefined)
|
|
194
|
+
err.code = errorData.code;
|
|
195
|
+
if (errorData.cause !== undefined)
|
|
196
|
+
err.cause = decode(errorData.cause);
|
|
197
|
+
if (errorData.detail !== undefined)
|
|
198
|
+
err.detail = decode(errorData.detail);
|
|
199
|
+
return err;
|
|
200
|
+
}
|
|
124
201
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
err.name = errorData.name;
|
|
129
|
-
err.stack = errorData.stack;
|
|
130
|
-
if (errorData.code !== void 0) err.code = errorData.code;
|
|
131
|
-
if (errorData.cause !== void 0) err.cause = decode(errorData.cause);
|
|
132
|
-
if (errorData.detail !== void 0) err.detail = decode(errorData.detail);
|
|
133
|
-
return err;
|
|
202
|
+
// 2. Array 재귀
|
|
203
|
+
if (Array.isArray(obj)) {
|
|
204
|
+
return obj.map((item) => decode(item));
|
|
134
205
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
newMap.set(decode(k), decode(v));
|
|
206
|
+
// 3. Map 재귀
|
|
207
|
+
if (obj instanceof Map) {
|
|
208
|
+
const newMap = new Map();
|
|
209
|
+
for (const [k, v] of obj) {
|
|
210
|
+
newMap.set(decode(k), decode(v));
|
|
211
|
+
}
|
|
212
|
+
return newMap;
|
|
143
213
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
214
|
+
// 4. Set 재귀
|
|
215
|
+
if (obj instanceof Set) {
|
|
216
|
+
const newSet = new Set();
|
|
217
|
+
for (const v of obj) {
|
|
218
|
+
newSet.add(decode(v));
|
|
219
|
+
}
|
|
220
|
+
return newSet;
|
|
150
221
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
222
|
+
// 5. 객체 재귀
|
|
223
|
+
if (typeof obj === "object") {
|
|
224
|
+
const record = obj;
|
|
225
|
+
const result = {};
|
|
226
|
+
for (const key of Object.keys(record)) {
|
|
227
|
+
result[key] = decode(record[key]);
|
|
228
|
+
}
|
|
229
|
+
return result;
|
|
158
230
|
}
|
|
159
|
-
return
|
|
160
|
-
}
|
|
161
|
-
return obj;
|
|
231
|
+
return obj;
|
|
162
232
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
encode
|
|
166
|
-
};
|
|
167
|
-
//# sourceMappingURL=transferable.js.map
|
|
233
|
+
//#endregion
|
|
234
|
+
//# sourceMappingURL=transferable.js.map
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/transferable.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"transferable.js","sourceRoot":"","sources":["../../src/utils/transferable.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/wait.d.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param forwarder
|
|
4
|
-
* @param milliseconds
|
|
5
|
-
* @param maxCount
|
|
2
|
+
* 조건이 true가 될 때까지 대기
|
|
3
|
+
* @param forwarder 조건 함수
|
|
4
|
+
* @param milliseconds 확인 간격 (기본값: 100ms)
|
|
5
|
+
* @param maxCount 최대 시도 횟수 (undefined이면 무제한)
|
|
6
6
|
*
|
|
7
|
-
* @note
|
|
7
|
+
* @note 첫 번째 호출에서 조건이 true이면 즉시 반환.
|
|
8
8
|
* @example
|
|
9
|
-
* // maxCount=3:
|
|
9
|
+
* // maxCount=3: 최대 3번 조건 확인, 모두 false이면 TimeoutError 발생
|
|
10
10
|
* await waitUntil(() => someCondition, 100, 3);
|
|
11
|
-
* @throws TimeoutError
|
|
11
|
+
* @throws TimeoutError 최대 시도 횟수를 초과했을 때
|
|
12
12
|
*/
|
|
13
13
|
export declare function until(forwarder: () => boolean | Promise<boolean>, milliseconds?: number, maxCount?: number): Promise<void>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
* @param millisecond
|
|
15
|
+
* 지정된 시간만큼 대기
|
|
16
|
+
* @param millisecond 대기 시간 (ms)
|
|
17
17
|
*/
|
|
18
18
|
export declare function time(millisecond: number): Promise<void>;
|
|
19
19
|
//# sourceMappingURL=wait.d.ts.map
|
package/dist/utils/wait.js
CHANGED
|
@@ -1,19 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 대기 유틸리티 함수
|
|
3
|
+
*/
|
|
1
4
|
import { TimeoutError } from "../errors/timeout-error.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
/**
|
|
6
|
+
* 조건이 true가 될 때까지 대기
|
|
7
|
+
* @param forwarder 조건 함수
|
|
8
|
+
* @param milliseconds 확인 간격 (기본값: 100ms)
|
|
9
|
+
* @param maxCount 최대 시도 횟수 (undefined이면 무제한)
|
|
10
|
+
*
|
|
11
|
+
* @note 첫 번째 호출에서 조건이 true이면 즉시 반환.
|
|
12
|
+
* @example
|
|
13
|
+
* // maxCount=3: 최대 3번 조건 확인, 모두 false이면 TimeoutError 발생
|
|
14
|
+
* await waitUntil(() => someCondition, 100, 3);
|
|
15
|
+
* @throws TimeoutError 최대 시도 횟수를 초과했을 때
|
|
16
|
+
*/
|
|
17
|
+
export async function until(forwarder, milliseconds, maxCount) {
|
|
18
|
+
let count = 0;
|
|
19
|
+
while (!(await forwarder())) {
|
|
20
|
+
count++;
|
|
21
|
+
if (maxCount !== undefined && count >= maxCount) {
|
|
22
|
+
throw new TimeoutError(count);
|
|
23
|
+
}
|
|
24
|
+
await time(milliseconds ?? 100);
|
|
8
25
|
}
|
|
9
|
-
await time(milliseconds ?? 100);
|
|
10
|
-
}
|
|
11
26
|
}
|
|
12
|
-
|
|
13
|
-
|
|
27
|
+
/**
|
|
28
|
+
* 지정된 시간만큼 대기
|
|
29
|
+
* @param millisecond 대기 시간 (ms)
|
|
30
|
+
*/
|
|
31
|
+
export async function time(millisecond) {
|
|
32
|
+
return new Promise((resolve) => setTimeout(resolve, millisecond));
|
|
14
33
|
}
|
|
15
|
-
|
|
16
|
-
time,
|
|
17
|
-
until
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=wait.js.map
|
|
34
|
+
//# sourceMappingURL=wait.js.map
|
package/dist/utils/wait.js.map
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/wait.ts"],
|
|
4
|
-
"mappings": "AAGA,SAAS,oBAAoB;AAc7B,eAAsB,MACpB,WACA,cACA,UACe;AACf,MAAI,QAAQ;AACZ,SAAO,CAAE,MAAM,UAAU,GAAI;AAC3B;AACA,QAAI,aAAa,UAAa,SAAS,UAAU;AAC/C,YAAM,IAAI,aAAa,KAAK;AAAA,IAC9B;AAEA,UAAM,KAAK,gBAAgB,GAAG;AAAA,EAChC;AACF;AAMA,eAAsB,KAAK,aAAoC;AAC7D,SAAO,IAAI,QAAc,CAAC,YAAY,WAAW,SAAS,WAAW,CAAC;AACxE;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/utils/wait.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,SAA2C,EAC3C,YAAqB,EACrB,QAAiB;IAEjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC;QAC5B,KAAK,EAAE,CAAC;QACR,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,WAAmB;IAC5C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
package/dist/utils/xml.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* XML
|
|
2
|
+
* XML 변환 유틸리티
|
|
3
3
|
*/
|
|
4
4
|
import type { XmlBuilderOptions } from "fast-xml-parser";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @param str XML
|
|
8
|
-
* @param options
|
|
9
|
-
* @param options.stripTagPrefix
|
|
10
|
-
* @returns
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
6
|
+
* XML 문자열을 객체로 파싱
|
|
7
|
+
* @param str XML 문자열
|
|
8
|
+
* @param options 옵션
|
|
9
|
+
* @param options.stripTagPrefix 태그 접두사(네임스페이스) 제거 여부
|
|
10
|
+
* @returns 파싱된 객체. 구조:
|
|
11
|
+
* - 속성: `$` 객체에 그룹화
|
|
12
|
+
* - 텍스트 노드: `_` key에 저장
|
|
13
|
+
* - 자식 요소: array로 변환 (루트 요소 제외)
|
|
14
14
|
* @example
|
|
15
15
|
* xmlParse('<root id="1"><item>hello</item></root>');
|
|
16
16
|
* // { root: { $: { id: "1" }, item: [{ _: "hello" }] } }
|
|
@@ -19,10 +19,10 @@ export declare function parse(str: string, options?: {
|
|
|
19
19
|
stripTagPrefix?: boolean;
|
|
20
20
|
}): unknown;
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
* @param obj
|
|
24
|
-
* @param options fast-xml-parser XmlBuilderOptions (
|
|
25
|
-
* @returns XML
|
|
22
|
+
* 객체를 XML 문자열로 직렬화
|
|
23
|
+
* @param obj 직렬화할 객체
|
|
24
|
+
* @param options fast-xml-parser XmlBuilderOptions (선택사항)
|
|
25
|
+
* @returns XML 문자열
|
|
26
26
|
* @example
|
|
27
27
|
* xmlStringify({
|
|
28
28
|
* root: {
|