@simplysm/core-common 13.0.100 → 14.0.4
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/README.md +86 -92
- 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 +8 -1
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +13 -9
- 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/docs/array-extensions.md +430 -0
- package/docs/env.md +52 -0
- package/docs/errors.md +41 -56
- package/docs/features.md +82 -97
- package/docs/type-utilities.md +91 -0
- package/docs/types.md +221 -201
- package/docs/utils.md +319 -435
- package/package.json +7 -5
- package/src/common.types.ts +14 -14
- package/src/env.ts +12 -3
- 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/docs/extensions.md +0 -387
- 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
package/dist/utils/json.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON 변환 유틸리티
|
|
3
|
+
* 커스텀 타입(DateTime, DateOnly, Time, Uuid 등)을 지원하는 JSON 직렬화/역직렬화
|
|
4
|
+
*/
|
|
1
5
|
import { DateTime } from "../types/date-time.js";
|
|
2
6
|
import { DateOnly } from "../types/date-only.js";
|
|
3
7
|
import { Time } from "../types/time.js";
|
|
@@ -6,149 +10,197 @@ import { nullToUndefined } from "./obj.js";
|
|
|
6
10
|
import { SdError } from "../errors/sd-error.js";
|
|
7
11
|
import { toHex, fromHex } from "./bytes.js";
|
|
8
12
|
import { env } from "../env.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (currValue instanceof Error) {
|
|
44
|
-
return {
|
|
45
|
-
__type__: "Error",
|
|
46
|
-
data: {
|
|
47
|
-
name: currValue.name,
|
|
48
|
-
message: currValue.message,
|
|
49
|
-
stack: currValue.stack,
|
|
50
|
-
..."code" in currValue ? { code: currValue.code } : {},
|
|
51
|
-
..."detail" in currValue ? { detail: currValue.detail } : {},
|
|
52
|
-
..."cause" in currValue ? { cause: convertSpecialTypes("cause", currValue.cause) } : {}
|
|
13
|
+
//#region stringify
|
|
14
|
+
/**
|
|
15
|
+
* 객체를 JSON 문자열로 직렬화
|
|
16
|
+
* DateTime, DateOnly, Time, Uuid, Set, Map, Error, Uint8Array 등 커스텀 타입 지원.
|
|
17
|
+
*
|
|
18
|
+
* @param obj 직렬화할 객체
|
|
19
|
+
* @param options 직렬화 옵션
|
|
20
|
+
* @param options.space JSON 들여쓰기 (숫자: 공백 수, 문자열: 들여쓰기 문자열)
|
|
21
|
+
* @param options.replacer 커스텀 replacer 함수. 기본 타입 변환 전에 호출됨
|
|
22
|
+
* @param options.redactBytes true이면 Uint8Array 내용을 "__hidden__"으로 대체 (로깅용). 이 옵션으로 직렬화된 결과는 jsonParse()로 원래 Uint8Array를 복원할 수 없음
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* - 순환 참조가 있는 객체는 TypeError를 발생시킴
|
|
26
|
+
* - 객체에 toJSON 메서드가 있으면 호출하여 결과를 사용 (Date, DateTime 같은 커스텀 타입 제외)
|
|
27
|
+
* - 전역 프로토타입을 수정하지 않으므로 Worker 환경에서 안전
|
|
28
|
+
*/
|
|
29
|
+
export function stringify(obj, options) {
|
|
30
|
+
// 순환 참조 감지용 WeakSet
|
|
31
|
+
const seen = new WeakSet();
|
|
32
|
+
/**
|
|
33
|
+
* 객체를 재귀적으로 순회하며 특수 타입을 __type__ 형식으로 변환
|
|
34
|
+
*
|
|
35
|
+
* JSON.stringify의 replacer는 toJSON 호출 후의 값을 받으므로,
|
|
36
|
+
* Date 같은 타입은 사전에 변환해야 올바르게 처리됨.
|
|
37
|
+
* 전역 프로토타입을 수정하지 않으므로 Worker 환경에서 안전.
|
|
38
|
+
*
|
|
39
|
+
* @param key 현재 값의 key (루트는 undefined)
|
|
40
|
+
* @param value 변환할 값
|
|
41
|
+
*/
|
|
42
|
+
const convertSpecialTypes = (key, value) => {
|
|
43
|
+
// 커스텀 replacer 적용
|
|
44
|
+
const currValue = options?.replacer !== undefined ? options.replacer(key, value) : value;
|
|
45
|
+
if (currValue instanceof Date) {
|
|
46
|
+
return { __type__: "Date", data: currValue.toISOString() };
|
|
53
47
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (currValue instanceof Uint8Array) {
|
|
57
|
-
if ((options == null ? void 0 : options.redactBytes) === true) {
|
|
58
|
-
return { __type__: "Uint8Array", data: "__hidden__" };
|
|
59
|
-
}
|
|
60
|
-
return { __type__: "Uint8Array", data: toHex(currValue) };
|
|
61
|
-
}
|
|
62
|
-
if (Array.isArray(currValue)) {
|
|
63
|
-
if (seen.has(currValue)) {
|
|
64
|
-
throw new TypeError("Converting circular structure to JSON");
|
|
65
|
-
}
|
|
66
|
-
seen.add(currValue);
|
|
67
|
-
const result = currValue.map((item, i) => convertSpecialTypes(String(i), item));
|
|
68
|
-
seen.delete(currValue);
|
|
69
|
-
return result;
|
|
70
|
-
}
|
|
71
|
-
if (currValue !== null && typeof currValue === "object") {
|
|
72
|
-
if (seen.has(currValue)) {
|
|
73
|
-
throw new TypeError("Converting circular structure to JSON");
|
|
74
|
-
}
|
|
75
|
-
seen.add(currValue);
|
|
76
|
-
if ("toJSON" in currValue && typeof currValue.toJSON === "function") {
|
|
77
|
-
const toJsonResult = currValue.toJSON(key);
|
|
78
|
-
seen.delete(currValue);
|
|
79
|
-
return convertSpecialTypes(key, toJsonResult);
|
|
80
|
-
}
|
|
81
|
-
const result = {};
|
|
82
|
-
for (const [k, v] of Object.entries(currValue)) {
|
|
83
|
-
const converted2 = convertSpecialTypes(k, v);
|
|
84
|
-
if (converted2 !== void 0) {
|
|
85
|
-
result[k] = converted2;
|
|
48
|
+
if (currValue instanceof DateTime) {
|
|
49
|
+
return { __type__: "DateTime", data: currValue.toString() };
|
|
86
50
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
51
|
+
if (currValue instanceof DateOnly) {
|
|
52
|
+
return { __type__: "DateOnly", data: currValue.toString() };
|
|
53
|
+
}
|
|
54
|
+
if (currValue instanceof Time) {
|
|
55
|
+
return { __type__: "Time", data: currValue.toString() };
|
|
56
|
+
}
|
|
57
|
+
if (currValue instanceof Uuid) {
|
|
58
|
+
return { __type__: "Uuid", data: currValue.toString() };
|
|
59
|
+
}
|
|
60
|
+
if (currValue instanceof Set) {
|
|
61
|
+
return {
|
|
62
|
+
__type__: "Set",
|
|
63
|
+
data: Array.from(currValue).map((item, i) => convertSpecialTypes(String(i), item)),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (currValue instanceof Map) {
|
|
67
|
+
return {
|
|
68
|
+
__type__: "Map",
|
|
69
|
+
data: Array.from(currValue.entries()).map(([k, v], i) => [
|
|
70
|
+
convertSpecialTypes(String(i), k),
|
|
71
|
+
convertSpecialTypes(String(i), v),
|
|
72
|
+
]),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (currValue instanceof Error) {
|
|
76
|
+
return {
|
|
77
|
+
__type__: "Error",
|
|
78
|
+
data: {
|
|
79
|
+
name: currValue.name,
|
|
80
|
+
message: currValue.message,
|
|
81
|
+
stack: currValue.stack,
|
|
82
|
+
...("code" in currValue ? { code: currValue.code } : {}),
|
|
83
|
+
...("detail" in currValue ? { detail: currValue.detail } : {}),
|
|
84
|
+
...("cause" in currValue ? { cause: convertSpecialTypes("cause", currValue.cause) } : {}),
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (currValue instanceof Uint8Array) {
|
|
89
|
+
if (options?.redactBytes === true) {
|
|
90
|
+
return { __type__: "Uint8Array", data: "__hidden__" };
|
|
114
91
|
}
|
|
115
|
-
|
|
116
|
-
|
|
92
|
+
return { __type__: "Uint8Array", data: toHex(currValue) };
|
|
93
|
+
}
|
|
94
|
+
// Array 처리
|
|
95
|
+
if (Array.isArray(currValue)) {
|
|
96
|
+
// 순환 참조 감지
|
|
97
|
+
if (seen.has(currValue)) {
|
|
98
|
+
throw new TypeError("Converting circular structure to JSON");
|
|
117
99
|
}
|
|
118
|
-
|
|
119
|
-
|
|
100
|
+
seen.add(currValue);
|
|
101
|
+
const result = currValue.map((item, i) => convertSpecialTypes(String(i), item));
|
|
102
|
+
seen.delete(currValue);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
// 일반 객체 처리
|
|
106
|
+
if (currValue !== null && typeof currValue === "object") {
|
|
107
|
+
// 순환 참조 감지
|
|
108
|
+
if (seen.has(currValue)) {
|
|
109
|
+
throw new TypeError("Converting circular structure to JSON");
|
|
120
110
|
}
|
|
121
|
-
|
|
122
|
-
|
|
111
|
+
seen.add(currValue);
|
|
112
|
+
// toJSON 메서드가 있으면 호출 (Date, DateTime 같은 커스텀 타입은 위에서 이미 처리됨)
|
|
113
|
+
if ("toJSON" in currValue &&
|
|
114
|
+
typeof currValue.toJSON === "function") {
|
|
115
|
+
const toJsonResult = currValue.toJSON(key);
|
|
116
|
+
seen.delete(currValue);
|
|
117
|
+
return convertSpecialTypes(key, toJsonResult);
|
|
123
118
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
119
|
+
const result = {};
|
|
120
|
+
for (const [k, v] of Object.entries(currValue)) {
|
|
121
|
+
const converted = convertSpecialTypes(k, v);
|
|
122
|
+
// undefined는 JSON에서 제외됨
|
|
123
|
+
if (converted !== undefined) {
|
|
124
|
+
result[k] = converted;
|
|
125
|
+
}
|
|
129
126
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
127
|
+
seen.delete(currValue);
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
return currValue;
|
|
131
|
+
};
|
|
132
|
+
// 전체 객체를 먼저 변환한 후 JSON.stringify 호출
|
|
133
|
+
// Date.prototype.toJSON을 수정하지 않으므로 동시성 환경에서 안전
|
|
134
|
+
const converted = convertSpecialTypes(undefined, obj);
|
|
135
|
+
return JSON.stringify(converted, null, options?.space);
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region parse
|
|
139
|
+
/**
|
|
140
|
+
* JSON 문자열을 객체로 역직렬화
|
|
141
|
+
* DateTime, DateOnly, Time, Uuid, Set, Map, Error, Uint8Array 등 커스텀 타입 복원.
|
|
142
|
+
*
|
|
143
|
+
* @remarks
|
|
144
|
+
* `__type__`과 `data` key를 가진 객체가 타입 복원에 사용됨.
|
|
145
|
+
* 사용자 데이터에 `{ __type__: "Date" | "DateTime" | "DateOnly" | "Time" | "Uuid" | "Set" | "Map" | "Error" | "Uint8Array", data: ... }`
|
|
146
|
+
* 형식의 객체가 포함되어 있으면 의도치 않게 타입으로 변환될 수 있으므로 주의.
|
|
147
|
+
* 모든 JSON null 값은 undefined로 변환됨.
|
|
148
|
+
* 이는 simplysm 프레임워크의 null-free 규칙을 위한 의도적인 동작.
|
|
149
|
+
*
|
|
150
|
+
* @security 개발 모드(`__DEV__`)에서는 에러 메시지에 전체 JSON 문자열이 포함됨.
|
|
151
|
+
* 운영 모드에서는 JSON 길이만 포함됨.
|
|
152
|
+
*/
|
|
153
|
+
export function parse(json) {
|
|
154
|
+
try {
|
|
155
|
+
return nullToUndefined(JSON.parse(json, (_key, value) => {
|
|
156
|
+
if (value != null && typeof value === "object") {
|
|
157
|
+
// __type__ 마커 기반 타입 복원
|
|
158
|
+
if ("__type__" in value && "data" in value) {
|
|
159
|
+
const typed = value;
|
|
160
|
+
if (typed.__type__ === "Date" && typeof typed.data === "string") {
|
|
161
|
+
return new Date(Date.parse(typed.data));
|
|
162
|
+
}
|
|
163
|
+
if (typed.__type__ === "DateTime" && typeof typed.data === "string") {
|
|
164
|
+
return DateTime.parse(typed.data);
|
|
165
|
+
}
|
|
166
|
+
if (typed.__type__ === "DateOnly" && typeof typed.data === "string") {
|
|
167
|
+
return DateOnly.parse(typed.data);
|
|
168
|
+
}
|
|
169
|
+
if (typed.__type__ === "Time" && typeof typed.data === "string") {
|
|
170
|
+
return Time.parse(typed.data);
|
|
171
|
+
}
|
|
172
|
+
if (typed.__type__ === "Uuid" && typeof typed.data === "string") {
|
|
173
|
+
return new Uuid(typed.data);
|
|
174
|
+
}
|
|
175
|
+
if (typed.__type__ === "Set" && Array.isArray(typed.data)) {
|
|
176
|
+
return new Set(typed.data);
|
|
177
|
+
}
|
|
178
|
+
if (typed.__type__ === "Map" && Array.isArray(typed.data)) {
|
|
179
|
+
return new Map(typed.data);
|
|
180
|
+
}
|
|
181
|
+
if (typed.__type__ === "Error" && typeof typed.data === "object") {
|
|
182
|
+
const errorData = typed.data;
|
|
183
|
+
const error = new Error(errorData["message"]);
|
|
184
|
+
Object.assign(error, errorData);
|
|
185
|
+
return error;
|
|
186
|
+
}
|
|
187
|
+
if (typed.__type__ === "Uint8Array" && typeof typed.data === "string") {
|
|
188
|
+
if (typed.data === "__hidden__") {
|
|
189
|
+
throw new SdError("redactBytes 옵션으로 직렬화된 Uint8Array는 parse로 복원할 수 없습니다");
|
|
190
|
+
}
|
|
191
|
+
return fromHex(typed.data);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
137
194
|
}
|
|
138
|
-
|
|
195
|
+
return value;
|
|
196
|
+
}));
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
if (env.DEV) {
|
|
200
|
+
throw new SdError(err, "JSON 파싱 오류: \n" + json);
|
|
139
201
|
}
|
|
140
|
-
|
|
141
|
-
})
|
|
142
|
-
);
|
|
143
|
-
} catch (err) {
|
|
144
|
-
if (env.DEV) {
|
|
145
|
-
throw new SdError(err, "JSON parsing error: \n" + json);
|
|
202
|
+
throw new SdError(err, `JSON 파싱 오류 (길이: ${json.length})`);
|
|
146
203
|
}
|
|
147
|
-
throw new SdError(err, `JSON parsing error (length: ${json.length})`);
|
|
148
|
-
}
|
|
149
204
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
stringify
|
|
153
|
-
};
|
|
154
|
-
//# sourceMappingURL=json.js.map
|
|
205
|
+
//#endregion
|
|
206
|
+
//# sourceMappingURL=json.js.map
|
package/dist/utils/json.js.map
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/json.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": ["converted"]
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/utils/json.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/num.d.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 숫자 유틸리티 함수
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 문자열을 정수로 파싱
|
|
6
|
+
* 파싱 전 비숫자 문자(0-9, -, . 제외) 제거
|
|
7
7
|
*
|
|
8
|
-
* @note
|
|
9
|
-
*
|
|
10
|
-
* @note
|
|
11
|
-
*
|
|
8
|
+
* @note 소수점이 있는 문자열은 정수 부분만 반환 (예: '12.34' → 12).
|
|
9
|
+
* 반올림이 필요하면 {@link parseRoundedInt} 사용.
|
|
10
|
+
* @note 문자열 중간의 하이픈(-)은 유지되므로 의도치 않은 음수가 될 수 있음.
|
|
11
|
+
* 예: `"A-123B"` → `-123`
|
|
12
12
|
*/
|
|
13
13
|
export declare function parseInt(text: unknown): number | undefined;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 문자열을 float로 파싱한 후 반올림하여 정수 반환
|
|
16
16
|
*/
|
|
17
17
|
export declare function parseRoundedInt(text: unknown): number | undefined;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* 문자열을 float로 파싱
|
|
20
|
+
* 파싱 전 비숫자 문자 제거
|
|
21
21
|
*/
|
|
22
22
|
export declare function parseFloat(text: unknown): number | undefined;
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* undefined, null, 0 검사 (타입 가드)
|
|
25
25
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
26
|
+
* 타입 가드로 동작하여, true를 반환하면 `val`이 `0 | undefined`임을 보장.
|
|
27
|
+
* false를 반환하면 `val`이 유효한 0이 아닌 숫자임을 보장.
|
|
28
28
|
*
|
|
29
|
-
* @param val
|
|
30
|
-
* @returns
|
|
29
|
+
* @param val 검사할 값
|
|
30
|
+
* @returns undefined, null, 또는 0이면 true
|
|
31
31
|
* @example
|
|
32
32
|
* const count: number | undefined = getValue();
|
|
33
33
|
* if (isNullOrEmpty(count)) {
|
|
@@ -40,11 +40,11 @@ export declare function parseFloat(text: unknown): number | undefined;
|
|
|
40
40
|
*/
|
|
41
41
|
export declare function isNullOrEmpty(val: number | undefined): val is 0 | undefined;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
* @param val
|
|
45
|
-
* @param digit
|
|
46
|
-
* @param digit.max
|
|
47
|
-
* @param digit.min
|
|
43
|
+
* 숫자를 천 단위 구분자가 포함된 문자열로 포맷
|
|
44
|
+
* @param val 포맷할 숫자
|
|
45
|
+
* @param digit 소수점 옵션
|
|
46
|
+
* @param digit.max 최대 소수점 자릿수
|
|
47
|
+
* @param digit.min 최소 소수점 자릿수 (부족하면 0으로 채움)
|
|
48
48
|
* @example
|
|
49
49
|
* format(1234.567, { max: 2 }) // "1,234.57"
|
|
50
50
|
* format(1234, { min: 2 }) // "1,234.00"
|
package/dist/utils/num.js
CHANGED
|
@@ -1,39 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 숫자 유틸리티 함수
|
|
3
|
+
*/
|
|
4
|
+
//#region parseInt / parseFloat / parseRoundedInt
|
|
5
|
+
/**
|
|
6
|
+
* 문자열을 정수로 파싱
|
|
7
|
+
* 파싱 전 비숫자 문자(0-9, -, . 제외) 제거
|
|
8
|
+
*
|
|
9
|
+
* @note 소수점이 있는 문자열은 정수 부분만 반환 (예: '12.34' → 12).
|
|
10
|
+
* 반올림이 필요하면 {@link parseRoundedInt} 사용.
|
|
11
|
+
* @note 문자열 중간의 하이픈(-)은 유지되므로 의도치 않은 음수가 될 수 있음.
|
|
12
|
+
* 예: `"A-123B"` → `-123`
|
|
13
|
+
*/
|
|
14
|
+
export function parseInt(text) {
|
|
15
|
+
if (typeof text === "number")
|
|
16
|
+
return Math.trunc(text);
|
|
17
|
+
if (typeof text !== "string")
|
|
18
|
+
return undefined;
|
|
19
|
+
const txt = text.replace(/[^0-9.\-]/g, "").trim();
|
|
20
|
+
if (txt === "")
|
|
21
|
+
return undefined;
|
|
22
|
+
const result = Number.parseInt(txt, 10);
|
|
23
|
+
if (Number.isNaN(result))
|
|
24
|
+
return undefined;
|
|
25
|
+
return result;
|
|
9
26
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
27
|
+
/**
|
|
28
|
+
* 문자열을 float로 파싱한 후 반올림하여 정수 반환
|
|
29
|
+
*/
|
|
30
|
+
export function parseRoundedInt(text) {
|
|
31
|
+
const float = parseFloat(text);
|
|
32
|
+
return float !== undefined ? Math.round(float) : undefined;
|
|
13
33
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
/**
|
|
35
|
+
* 문자열을 float로 파싱
|
|
36
|
+
* 파싱 전 비숫자 문자 제거
|
|
37
|
+
*/
|
|
38
|
+
export function parseFloat(text) {
|
|
39
|
+
if (typeof text === "number")
|
|
40
|
+
return text;
|
|
41
|
+
if (typeof text !== "string")
|
|
42
|
+
return undefined;
|
|
43
|
+
const txt = text.replace(/[^0-9.\-]/g, "").trim();
|
|
44
|
+
if (txt === "")
|
|
45
|
+
return undefined;
|
|
46
|
+
const result = Number.parseFloat(txt);
|
|
47
|
+
if (Number.isNaN(result))
|
|
48
|
+
return undefined;
|
|
49
|
+
return result;
|
|
22
50
|
}
|
|
23
|
-
|
|
24
|
-
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region isNullOrEmpty
|
|
53
|
+
/**
|
|
54
|
+
* undefined, null, 0 검사 (타입 가드)
|
|
55
|
+
*
|
|
56
|
+
* 타입 가드로 동작하여, true를 반환하면 `val`이 `0 | undefined`임을 보장.
|
|
57
|
+
* false를 반환하면 `val`이 유효한 0이 아닌 숫자임을 보장.
|
|
58
|
+
*
|
|
59
|
+
* @param val 검사할 값
|
|
60
|
+
* @returns undefined, null, 또는 0이면 true
|
|
61
|
+
* @example
|
|
62
|
+
* const count: number | undefined = getValue();
|
|
63
|
+
* if (isNullOrEmpty(count)) {
|
|
64
|
+
* // count: 0 | undefined
|
|
65
|
+
* console.log("Empty");
|
|
66
|
+
* } else {
|
|
67
|
+
* // count: number (non-zero value)
|
|
68
|
+
* console.log(`Count: ${count}`);
|
|
69
|
+
* }
|
|
70
|
+
*/
|
|
71
|
+
export function isNullOrEmpty(val) {
|
|
72
|
+
return val == null || val === 0;
|
|
25
73
|
}
|
|
26
|
-
function format(val, digit) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
74
|
+
export function format(val, digit) {
|
|
75
|
+
return val?.toLocaleString(undefined, {
|
|
76
|
+
maximumFractionDigits: digit?.max,
|
|
77
|
+
minimumFractionDigits: digit?.min,
|
|
78
|
+
});
|
|
31
79
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
isNullOrEmpty,
|
|
35
|
-
parseFloat,
|
|
36
|
-
parseInt,
|
|
37
|
-
parseRoundedInt
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=num.js.map
|
|
80
|
+
//#endregion
|
|
81
|
+
//# sourceMappingURL=num.js.map
|
package/dist/utils/num.js.map
CHANGED
|
@@ -1,6 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/num.ts"],
|
|
4
|
-
"mappings": "AAeO,SAAS,SAAS,MAAmC;AAC1D,MAAI,OAAO,SAAS,SAAU,QAAO,KAAK,MAAM,IAAI;AACpD,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,QAAM,MAAM,KAAK,QAAQ,cAAc,EAAE,EAAE,KAAK;AAChD,MAAI,QAAQ,GAAI,QAAO;AACvB,QAAM,SAAS,OAAO,SAAS,KAAK,EAAE;AACtC,MAAI,OAAO,MAAM,MAAM,EAAG,QAAO;AACjC,SAAO;AACT;AAKO,SAAS,gBAAgB,MAAmC;AACjE,QAAM,QAAQ,WAAW,IAAI;AAC7B,SAAO,UAAU,SAAY,KAAK,MAAM,KAAK,IAAI;AACnD;AAMO,SAAS,WAAW,MAAmC;AAC5D,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,QAAM,MAAM,KAAK,QAAQ,cAAc,EAAE,EAAE,KAAK;AAChD,MAAI,QAAQ,GAAI,QAAO;AACvB,QAAM,SAAS,OAAO,WAAW,GAAG;AACpC,MAAI,OAAO,MAAM,MAAM,EAAG,QAAO;AACjC,SAAO;AACT;AAwBO,SAAS,cAAc,KAA+C;AAC3E,SAAO,OAAO,QAAQ,QAAQ;AAChC;AAqBO,SAAS,OACd,KACA,OACoB;AACpB,SAAO,2BAAK,eAAe,QAAW;AAAA,IACpC,uBAAuB,+BAAO;AAAA,IAC9B,uBAAuB,+BAAO;AAAA,EAChC;AACF;",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|
|
1
|
+
{"version":3,"file":"num.js","sourceRoot":"","sources":["../../src/utils/num.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iDAAiD;AAEjD;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,YAAY;AAEZ,uBAAuB;AAEvB;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,GAAuB;IACnD,OAAO,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;AAClC,CAAC;AAqBD,MAAM,UAAU,MAAM,CACpB,GAAuB,EACvB,KAAsC;IAEtC,OAAO,GAAG,EAAE,cAAc,CAAC,SAAS,EAAE;QACpC,qBAAqB,EAAE,KAAK,EAAE,GAAG;QACjC,qBAAqB,EAAE,KAAK,EAAE,GAAG;KAClC,CAAC,CAAC;AACL,CAAC;AAED,YAAY"}
|