@simplysm/core-common 13.0.0-beta.45 → 13.0.0-beta.47
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.js.map +0 -1
- package/dist/env.js.map +0 -1
- package/dist/errors/argument-error.js.map +0 -1
- package/dist/errors/not-implemented-error.js.map +0 -1
- package/dist/errors/sd-error.js.map +0 -1
- package/dist/errors/timeout-error.js.map +0 -1
- package/dist/extensions/arr-ext.helpers.js.map +0 -1
- package/dist/extensions/arr-ext.js.map +0 -1
- package/dist/extensions/arr-ext.types.js.map +0 -1
- package/dist/extensions/map-ext.js.map +0 -1
- package/dist/extensions/set-ext.js.map +0 -1
- package/dist/features/debounce-queue.js.map +0 -1
- package/dist/features/event-emitter.js.map +0 -1
- package/dist/features/serial-queue.js.map +0 -1
- package/dist/globals.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types/date-only.js.map +0 -1
- package/dist/types/date-time.js.map +0 -1
- package/dist/types/lazy-gc-map.js.map +0 -1
- package/dist/types/time.js.map +0 -1
- package/dist/types/uuid.js.map +0 -1
- package/dist/utils/bytes.js.map +0 -1
- package/dist/utils/date-format.js.map +0 -1
- package/dist/utils/json.js.map +0 -1
- package/dist/utils/num.js.map +0 -1
- package/dist/utils/obj.js.map +0 -1
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/primitive.js.map +0 -1
- package/dist/utils/str.js.map +0 -1
- package/dist/utils/template-strings.js.map +0 -1
- package/dist/utils/transferable.js.map +0 -1
- package/dist/utils/wait.js.map +0 -1
- package/dist/utils/xml.js.map +0 -1
- package/dist/zip/sd-zip.js.map +0 -1
- package/package.json +2 -1
- package/src/common.types.ts +91 -0
- package/src/env.ts +11 -0
- package/src/errors/argument-error.ts +40 -0
- package/src/errors/not-implemented-error.ts +32 -0
- package/src/errors/sd-error.ts +53 -0
- package/src/errors/timeout-error.ts +36 -0
- package/src/extensions/arr-ext.helpers.ts +53 -0
- package/src/extensions/arr-ext.ts +777 -0
- package/src/extensions/arr-ext.types.ts +258 -0
- package/src/extensions/map-ext.ts +86 -0
- package/src/extensions/set-ext.ts +68 -0
- package/src/features/debounce-queue.ts +116 -0
- package/src/features/event-emitter.ts +112 -0
- package/src/features/serial-queue.ts +94 -0
- package/src/globals.ts +12 -0
- package/src/index.ts +55 -0
- package/src/types/date-only.ts +329 -0
- package/src/types/date-time.ts +294 -0
- package/src/types/lazy-gc-map.ts +244 -0
- package/src/types/time.ts +210 -0
- package/src/types/uuid.ts +113 -0
- package/src/utils/bytes.ts +160 -0
- package/src/utils/date-format.ts +239 -0
- package/src/utils/json.ts +230 -0
- package/src/utils/num.ts +97 -0
- package/src/utils/obj.ts +956 -0
- package/src/utils/path.ts +40 -0
- package/src/utils/primitive.ts +33 -0
- package/src/utils/str.ts +252 -0
- package/src/utils/template-strings.ts +132 -0
- package/src/utils/transferable.ts +269 -0
- package/src/utils/wait.ts +40 -0
- package/src/utils/xml.ts +105 -0
- package/src/zip/sd-zip.ts +218 -0
package/dist/common.types.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/common.types.ts"],
|
|
4
|
-
"sourcesContent": ["import { DateTime } from \"./types/date-time\";\nimport { DateOnly } from \"./types/date-only\";\nimport { Time } from \"./types/time\";\nimport { Uuid } from \"./types/uuid\";\n\n//#region Bytes \uD0C0\uC785\n\n/**\n * Buffer \uB300\uC2E0 \uC0AC\uC6A9\uD558\uB294 \uBC14\uC774\uB108\uB9AC \uD0C0\uC785\n */\nexport type Bytes = Uint8Array;\n\n//#endregion\n\n//#region Primitive \uD0C0\uC785\n\n/**\n * Primitive \uD0C0\uC785 \uB9E4\uD551\n * orm-common\uACFC \uACF5\uC720\n */\nexport type PrimitiveTypeMap = {\n string: string;\n number: number;\n boolean: boolean;\n DateTime: DateTime;\n DateOnly: DateOnly;\n Time: Time;\n Uuid: Uuid;\n Bytes: Bytes;\n};\n\n/**\n * Primitive \uD0C0\uC785 \uBB38\uC790\uC5F4 \uD0A4\n */\nexport type PrimitiveTypeStr = keyof PrimitiveTypeMap;\n\n/**\n * Primitive \uD0C0\uC785 \uC720\uB2C8\uC628\n */\nexport type PrimitiveType = PrimitiveTypeMap[PrimitiveTypeStr] | undefined;\n\n//#endregion\n\n//#region \uC720\uD2F8\uB9AC\uD2F0 \uD0C0\uC785\n\n/**\n * \uAE4A\uC740 Partial \uD0C0\uC785\n *\n * \uAC1D\uCCB4\uC758 \uBAA8\uB4E0 \uC18D\uC131\uC744 \uC7AC\uADC0\uC801\uC73C\uB85C \uC120\uD0DD\uC801(optional)\uC73C\uB85C \uB9CC\uB4ED\uB2C8\uB2E4.\n * Primitive \uD0C0\uC785(string, number, boolean \uB4F1)\uC740 \uADF8\uB300\uB85C \uC720\uC9C0\uD558\uACE0,\n * \uAC1D\uCCB4/\uBC30\uC5F4 \uD0C0\uC785\uB9CC \uC7AC\uADC0\uC801\uC73C\uB85C Partial\uC744 \uC801\uC6A9\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```typescript\n * interface User {\n * name: string;\n * profile: {\n * age: number;\n * address: { city: string };\n * };\n * }\n *\n * // \uBAA8\uB4E0 \uAE4A\uC774\uC758 \uC18D\uC131\uC774 \uC120\uD0DD\uC801\uC774 \uB428\n * const partial: DeepPartial<User> = {\n * profile: { address: {} }\n * };\n * ```\n */\nexport type DeepPartial<T> = Partial<{\n [K in keyof T]: T[K] extends PrimitiveType ? T[K] : DeepPartial<T[K]>;\n}>;\n\n/**\n * \uC0DD\uC131\uC790 \uD0C0\uC785\n *\n * \uD074\uB798\uC2A4 \uC0DD\uC131\uC790\uB97C \uD0C0\uC785\uC73C\uB85C \uD45C\uD604\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n * \uC8FC\uB85C \uC758\uC874\uC131 \uC8FC\uC785, \uD329\uD1A0\uB9AC \uD328\uD134, instanceof \uCCB4\uD06C \uB4F1\uC5D0\uC11C \uD65C\uC6A9\uB429\uB2C8\uB2E4.\n *\n * @example\n * function create<T>(ctor: Type<T>): T {\n * return new ctor();\n * }\n *\n * class MyClass { name = \"test\"; }\n * const instance = create(MyClass); // MyClass \uC778\uC2A4\uD134\uC2A4\n */\nexport interface Type<T> extends Function {\n new (...args: unknown[]): T;\n}\n\n//#endregion\n"],
|
|
5
4
|
"mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,YAAY;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/dist/env.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/env.ts"],
|
|
4
|
-
"sourcesContent": ["declare const process: { env: { DEV?: string; VER?: string; [key: string]: string | undefined } };\n\nexport const env: {\n DEV: boolean;\n VER?: string;\n [key: string]: unknown;\n} = {\n ...process.env,\n DEV: JSON.parse(process.env.DEV != null && process.env.DEV !== \"\" ? process.env.DEV : \"false\"),\n VER: process.env.VER,\n};\n"],
|
|
5
4
|
"mappings": "AAEO,MAAM,MAIT;AAAA,EACF,GAAG,QAAQ;AAAA,EACX,KAAK,KAAK,MAAM,QAAQ,IAAI,OAAO,QAAQ,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,MAAM,OAAO;AAAA,EAC7F,KAAK,QAAQ,IAAI;AACnB;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/argument-error.ts"],
|
|
4
|
-
"sourcesContent": ["// yaml \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uC0AC\uC6A9\uD558\uB294 \uC774\uC720:\n// \uC911\uCCA9\uB41C \uAC1D\uCCB4 \uAD6C\uC870\uB97C \uAC00\uB3C5\uC131 \uC88B\uAC8C \uD45C\uD604\uD558\uAE30 \uC704\uD568.\n// JSON.stringify\uBCF4\uB2E4 \uD2B8\uB9AC \uAD6C\uC870\uAC00 \uB354 \uBA85\uD655\uD558\uAC8C \uBCF4\uC784.\nimport YAML from \"yaml\";\nimport { SdError } from \"./sd-error\";\n\n/**\n * \uC778\uC218 \uC624\uB958\n *\n * \uC798\uBABB\uB41C \uC778\uC218\uB97C \uBC1B\uC558\uC744 \uB54C \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uC5D0\uB7EC\uC774\uB2E4.\n * \uC778\uC218 \uAC1D\uCCB4\uB97C YAML \uD615\uC2DD\uC73C\uB85C \uBA54\uC2DC\uC9C0\uC5D0 \uD3EC\uD568\uD558\uC5EC \uB514\uBC84\uAE45\uC744 \uC6A9\uC774\uD558\uAC8C \uD55C\uB2E4.\n *\n * @example\n * // \uC778\uC218 \uAC1D\uCCB4\uB9CC \uC804\uB2EC\n * throw new ArgumentError({ userId: 123, name: null });\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\\n\\nuserId: 123\\nname: null\"\n *\n * @example\n * // \uCEE4\uC2A4\uD140 \uBA54\uC2DC\uC9C0\uC640 \uC778\uC218 \uAC1D\uCCB4 \uC804\uB2EC\n * throw new ArgumentError(\"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\", { userId: 123 });\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\\n\\nuserId: 123\"\n */\nexport class ArgumentError extends SdError {\n /** \uAE30\uBCF8 \uBA54\uC2DC\uC9C0(\"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\")\uC640 \uD568\uAED8 \uC778\uC218 \uAC1D\uCCB4\uB97C YAML \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825 */\n constructor(argObj: Record<string, unknown>);\n /** \uCEE4\uC2A4\uD140 \uBA54\uC2DC\uC9C0\uC640 \uD568\uAED8 \uC778\uC218 \uAC1D\uCCB4\uB97C YAML \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825 */\n constructor(message: string, argObj: Record<string, unknown>);\n constructor(arg1: Record<string, unknown> | string, arg2?: Record<string, unknown>);\n constructor(arg1: Record<string, unknown> | string, arg2?: Record<string, unknown>) {\n const message = typeof arg1 === \"string\" ? arg1 : undefined;\n const argObj = typeof arg1 === \"string\" ? arg2 : arg1;\n\n if (argObj != null) {\n super((message ?? \"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\") + \"\\n\\n\" + YAML.stringify(argObj));\n } else {\n super(message ?? \"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\");\n }\n this.name = \"ArgumentError\";\n }\n}\n"],
|
|
5
4
|
"mappings": "AAGA,OAAO,UAAU;AACjB,SAAS,eAAe;AAkBjB,MAAM,sBAAsB,QAAQ;AAAA,EAMzC,YAAY,MAAwC,MAAgC;AAClF,UAAM,UAAU,OAAO,SAAS,WAAW,OAAO;AAClD,UAAM,SAAS,OAAO,SAAS,WAAW,OAAO;AAEjD,QAAI,UAAU,MAAM;AAClB,aAAO,WAAW,oEAAkB,SAAS,KAAK,UAAU,MAAM,CAAC;AAAA,IACrE,OAAO;AACL,YAAM,WAAW,gEAAc;AAAA,IACjC;AACA,SAAK,OAAO;AAAA,EACd;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/not-implemented-error.ts"],
|
|
4
|
-
"sourcesContent": ["import { SdError } from \"./sd-error\";\n\n/**\n * \uBBF8\uAD6C\uD604 \uC624\uB958\n *\n * \uC544\uC9C1 \uAD6C\uD604\uB418\uC9C0 \uC54A\uC740 \uAE30\uB2A5\uC744 \uD638\uCD9C\uD588\uC744 \uB54C \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uC5D0\uB7EC\uC774\uB2E4.\n * \uCD94\uC0C1 \uBA54\uC11C\uB4DC \uC2A4\uD141, \uD5A5\uD6C4 \uAD6C\uD604 \uC608\uC815\uC778 \uBD84\uAE30 \uB4F1\uC5D0 \uC0AC\uC6A9\uD55C\uB2E4.\n *\n * @example\n * // \uCD94\uC0C1 \uBA54\uC11C\uB4DC \uAD6C\uD604 \uC804\n * class BaseService {\n * process(): void {\n * throw new NotImplementedError(\"\uC11C\uBE0C\uD074\uB798\uC2A4\uC5D0\uC11C \uAD6C\uD604 \uD544\uC694\");\n * }\n * }\n *\n * @example\n * // \uD5A5\uD6C4 \uAD6C\uD604 \uC608\uC815 \uBD84\uAE30\n * switch (type) {\n * case \"A\": return handleA();\n * case \"B\": throw new NotImplementedError(`\uD0C0\uC785 ${type} \uCC98\uB9AC`);\n * }\n */\nexport class NotImplementedError extends SdError {\n /**\n * @param message \uCD94\uAC00 \uC124\uBA85 \uBA54\uC2DC\uC9C0\n */\n constructor(message?: string) {\n super(\"\uAD6C\uD604\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4\" + (message != null ? \": \" + message : \"\"));\n this.name = \"NotImplementedError\";\n }\n}\n"],
|
|
5
4
|
"mappings": "AAAA,SAAS,eAAe;AAuBjB,MAAM,4BAA4B,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/C,YAAY,SAAkB;AAC5B,UAAM,oEAAkB,WAAW,OAAO,OAAO,UAAU,GAAG;AAC9D,SAAK,OAAO;AAAA,EACd;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/sd-error.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * \uC624\uB958\uC758 Tree \uAD6C\uC870 \uAD6C\uC131\uC774 \uAC00\uB2A5\uD55C \uC624\uB958 \uD074\uB798\uC2A4\n * ES2024 cause \uC18D\uC131 \uD65C\uC6A9\n *\n * @example\n * // \uC6D0\uC778 \uC5D0\uB7EC\uB97C \uAC10\uC2F8\uC11C \uC0DD\uC131\n * try {\n * await fetch(url);\n * } catch (err) {\n * throw new SdError(err, \"API \uD638\uCD9C \uC2E4\uD328\", \"\uC0AC\uC6A9\uC790 \uB85C\uB4DC \uC2E4\uD328\");\n * }\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uC0AC\uC6A9\uC790 \uB85C\uB4DC \uC2E4\uD328 => API \uD638\uCD9C \uC2E4\uD328 => \uC6D0\uBCF8 \uC5D0\uB7EC \uBA54\uC2DC\uC9C0\"\n *\n * @example\n * // \uBA54\uC2DC\uC9C0\uB9CC\uC73C\uB85C \uC0DD\uC131\n * throw new SdError(\"\uC798\uBABB\uB41C \uC0C1\uD0DC\", \"\uCC98\uB9AC \uBD88\uAC00\");\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uCC98\uB9AC \uBD88\uAC00 => \uC798\uBABB\uB41C \uC0C1\uD0DC\"\n */\nexport class SdError extends Error {\n override cause?: Error;\n\n /** \uC6D0\uC778 \uC5D0\uB7EC\uB97C \uAC10\uC2F8\uC11C \uC0DD\uC131. \uBA54\uC2DC\uC9C0\uB294 \uC5ED\uC21C\uC73C\uB85C \uC5F0\uACB0\uB428 (\uC0C1\uC704 \uBA54\uC2DC\uC9C0 => \uD558\uC704 \uBA54\uC2DC\uC9C0 => \uC6D0\uC778 \uBA54\uC2DC\uC9C0) */\n constructor(cause: Error, ...messages: string[]);\n /** \uBA54\uC2DC\uC9C0\uB9CC\uC73C\uB85C \uC0DD\uC131. \uBA54\uC2DC\uC9C0\uB294 \uC5ED\uC21C\uC73C\uB85C \uC5F0\uACB0\uB428 (\uC0C1\uC704 \uBA54\uC2DC\uC9C0 => \uD558\uC704 \uBA54\uC2DC\uC9C0) */\n constructor(...messages: string[]);\n constructor(arg1?: unknown, ...messages: string[]);\n constructor(arg1?: unknown, ...messages: string[]) {\n const arg1Message =\n arg1 instanceof Error ? arg1.message : typeof arg1 === \"string\" ? arg1 : arg1 != null ? String(arg1) : undefined;\n\n const fullMessage = [arg1Message, ...messages]\n .filter((m) => m != null)\n .reverse()\n .join(\" => \");\n\n const cause = arg1 instanceof Error ? arg1 : undefined;\n\n super(fullMessage, { cause });\n\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = \"SdError\";\n\n // V8 \uC5D4\uC9C4(Node.js, Chrome)\uC5D0\uC11C\uB9CC \uC0AC\uC6A9 \uAC00\uB2A5\uD55C captureStackTrace\n if (\"captureStackTrace\" in Error) {\n (Error.captureStackTrace as (targetObject: object, constructorOpt?: Function) => void)(this, new.target);\n }\n\n // cause \uCCB4\uC778\uC758 stack\uC744 \uD604\uC7AC stack\uC5D0 \uCD94\uAC00\n if (cause?.stack != null) {\n this.stack += `\\n---- cause stack ----\\n${cause.stack}`;\n }\n }\n}\n"],
|
|
5
4
|
"mappings": "AAkBO,MAAM,gBAAgB,MAAM;AAAA,EACxB;AAAA,EAOT,YAAY,SAAmB,UAAoB;AACjD,UAAM,cACJ,gBAAgB,QAAQ,KAAK,UAAU,OAAO,SAAS,WAAW,OAAO,QAAQ,OAAO,OAAO,IAAI,IAAI;AAEzG,UAAM,cAAc,CAAC,aAAa,GAAG,QAAQ,EAC1C,OAAO,CAAC,MAAM,KAAK,IAAI,EACvB,QAAQ,EACR,KAAK,MAAM;AAEd,UAAM,QAAQ,gBAAgB,QAAQ,OAAO;AAE7C,UAAM,aAAa,EAAE,MAAM,CAAC;AAE5B,WAAO,eAAe,MAAM,WAAW,SAAS;AAChD,SAAK,OAAO;AAGZ,QAAI,uBAAuB,OAAO;AAChC,MAAC,MAAM,kBAAgF,MAAM,UAAU;AAAA,IACzG;AAGA,SAAI,+BAAO,UAAS,MAAM;AACxB,WAAK,SAAS;AAAA;AAAA,EAA4B,MAAM,KAAK;AAAA,IACvD;AAAA,EACF;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/errors/timeout-error.ts"],
|
|
4
|
-
"sourcesContent": ["import { SdError } from \"./sd-error\";\n\n/**\n * \uD0C0\uC784\uC544\uC6C3 \uC624\uB958\n *\n * \uB300\uAE30 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC744 \uB54C \uBC1C\uC0DD\uD558\uB294 \uC5D0\uB7EC\uC774\uB2E4.\n * Wait.until() \uB4F1\uC758 \uBE44\uB3D9\uAE30 \uB300\uAE30 \uD568\uC218\uC5D0\uC11C \uCD5C\uB300 \uC2DC\uB3C4 \uD69F\uC218\uB97C \uCD08\uACFC\uD558\uBA74 \uC790\uB3D9\uC73C\uB85C \uBC1C\uC0DD\uD55C\uB2E4.\n *\n * @example\n * // Wait.until\uC5D0\uC11C \uC790\uB3D9 \uBC1C\uC0DD\n * try {\n * await Wait.until(() => isReady, 100, 50); // 100ms \uAC04\uACA9, \uCD5C\uB300 50\uD68C\n * } catch (err) {\n * if (err instanceof TimeoutError) {\n * console.log(\"\uC2DC\uAC04 \uCD08\uACFC\");\n * }\n * }\n *\n * @example\n * // \uC9C1\uC811 \uBC1C\uC0DD\n * if (elapsed > maxTime) {\n * throw new TimeoutError(undefined, \"API \uC751\uB2F5 \uB300\uAE30 \uCD08\uACFC\");\n * }\n */\nexport class TimeoutError extends SdError {\n /**\n * @param count \uC2DC\uB3C4 \uD69F\uC218\n * @param message \uCD94\uAC00 \uBA54\uC2DC\uC9C0\n */\n constructor(count?: number, message?: string) {\n super(\n \"\uB300\uAE30 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4\" + (count != null ? `(${count}\uD68C)` : \"\") + (message != null ? `: ${message}` : \"\"),\n );\n this.name = \"TimeoutError\";\n }\n}\n"],
|
|
5
4
|
"mappings": "AAAA,SAAS,eAAe;AAwBjB,MAAM,qBAAqB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxC,YAAY,OAAgB,SAAkB;AAC5C;AAAA,MACE,gFAAoB,SAAS,OAAO,IAAI,KAAK,YAAO,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK;AAAA,IAChG;AACA,SAAK,OAAO;AAAA,EACd;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extensions/arr-ext.helpers.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Array \uD655\uC7A5 \uD5EC\uD37C \uD568\uC218\n */\n\nimport { DateTime } from \"../types/date-time\";\nimport { DateOnly } from \"../types/date-only\";\nimport { Time } from \"../types/time\";\nimport { ArgumentError } from \"../errors/argument-error\";\nimport type { ComparableType } from \"./arr-ext.types\";\n\n/**\n * DateTime, DateOnly, Time\uC744 \uBE44\uAD50 \uAC00\uB2A5\uD55C primitive \uAC12\uC73C\uB85C \uBCC0\uD658\n */\nexport function toComparable(value: ComparableType): string | number | boolean | undefined {\n if (value instanceof DateOnly || value instanceof DateTime || value instanceof Time) {\n return value.tick;\n }\n return value;\n}\n\n/**\n * \uC815\uB82C\uC744 \uC704\uD55C \uBE44\uAD50 \uD568\uC218\n *\n * @param pp \uBE44\uAD50 \uB300\uC0C1 1\n * @param pn \uBE44\uAD50 \uB300\uC0C1 2\n * @param desc true: \uB0B4\uB9BC\uCC28\uC21C, false: \uC624\uB984\uCC28\uC21C\n * @returns \uC74C\uC218: pp\uAC00 \uC55E, 0: \uAC19\uC74C, \uC591\uC218: pn\uC774 \uC55E\n * @note null/undefined \uAC12\uC740 \uC624\uB984\uCC28\uC21C \uC2DC \uC55E\uC73C\uB85C, \uB0B4\uB9BC\uCC28\uC21C \uC2DC \uB4A4\uB85C \uC815\uB82C\uB428\n */\nexport function compareForOrder(pp: ComparableType, pn: ComparableType, desc: boolean): number {\n const cpp = toComparable(pp);\n const cpn = toComparable(pn);\n\n if (cpn === cpp) return 0;\n if (cpp == null) return desc ? 1 : -1;\n if (cpn == null) return desc ? -1 : 1;\n\n if (typeof cpn === \"string\" && typeof cpp === \"string\") {\n return desc ? cpn.localeCompare(cpp) : cpp.localeCompare(cpn);\n }\n if (typeof cpn === \"number\" && typeof cpp === \"number\") {\n if (desc) {\n return cpp > cpn ? -1 : cpp < cpn ? 1 : 0;\n }\n return cpp < cpn ? -1 : cpp > cpn ? 1 : 0;\n }\n if (typeof cpn === \"boolean\" && typeof cpp === \"boolean\") {\n // true > false: \uC624\uB984\uCC28\uC21C \uC2DC true\uAC00 \uB4A4, \uB0B4\uB9BC\uCC28\uC21C \uC2DC true\uAC00 \uC55E\n return cpn ? (desc ? 1 : -1) : desc ? -1 : 1;\n }\n\n throw new ArgumentError(\"orderBy\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uB294 \uD0C0\uC785\uC785\uB2C8\uB2E4.\", { type1: typeof cpp, type2: typeof cpn });\n}\n"],
|
|
5
4
|
"mappings": "AAIA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAMvB,SAAS,aAAa,OAA8D;AACzF,MAAI,iBAAiB,YAAY,iBAAiB,YAAY,iBAAiB,MAAM;AACnF,WAAO,MAAM;AAAA,EACf;AACA,SAAO;AACT;AAWO,SAAS,gBAAgB,IAAoB,IAAoB,MAAuB;AAC7F,QAAM,MAAM,aAAa,EAAE;AAC3B,QAAM,MAAM,aAAa,EAAE;AAE3B,MAAI,QAAQ,IAAK,QAAO;AACxB,MAAI,OAAO,KAAM,QAAO,OAAO,IAAI;AACnC,MAAI,OAAO,KAAM,QAAO,OAAO,KAAK;AAEpC,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,WAAO,OAAO,IAAI,cAAc,GAAG,IAAI,IAAI,cAAc,GAAG;AAAA,EAC9D;AACA,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,QAAI,MAAM;AACR,aAAO,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,IAC1C;AACA,WAAO,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,EAC1C;AACA,MAAI,OAAO,QAAQ,aAAa,OAAO,QAAQ,WAAW;AAExD,WAAO,MAAO,OAAO,IAAI,KAAM,OAAO,KAAK;AAAA,EAC7C;AAEA,QAAM,IAAI,cAAc,wFAA4B,EAAE,OAAO,OAAO,KAAK,OAAO,OAAO,IAAI,CAAC;AAC9F;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extensions/arr-ext.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Array \uD655\uC7A5 \uBA54\uC11C\uB4DC\n *\n * @remarks \uAC01 \uBA54\uC11C\uB4DC\uC758 TSDoc\uC740 \uD0C0\uC785 \uC815\uC758 \uD30C\uC77C(arr-ext.types.ts) \uCC38\uC870\n */\n\nimport \"./map-ext\";\nimport { objClone, objEqual, objMerge } from \"../utils/obj\";\nimport type { PrimitiveTypeStr, Type } from \"../common.types\";\nimport { DateTime } from \"../types/date-time\";\nimport { DateOnly } from \"../types/date-only\";\nimport { Time } from \"../types/time\";\nimport { Uuid } from \"../types/uuid\";\nimport { ArgumentError } from \"../errors/argument-error\";\nimport { SdError } from \"../errors/sd-error\";\nimport { compareForOrder } from \"./arr-ext.helpers\";\nimport type {\n ReadonlyArrayExt,\n MutableArrayExt,\n ArrayDiffsResult,\n ArrayDiffs2Result,\n TreeArray,\n} from \"./arr-ext.types\";\n\n//#region \uAD6C\uD604\n\nconst arrayReadonlyExtensions: ReadonlyArrayExt<any> & ThisType<any[]> = {\n single<T>(predicate?: (item: T, index: number) => boolean): T | undefined {\n const arr = predicate !== undefined ? this.filter(predicate) : this;\n if (arr.length > 1) {\n throw new ArgumentError(\"\uBCF5\uC218\uC758 \uACB0\uACFC\uBB3C\uC774 \uC788\uC2B5\uB2C8\uB2E4.\", { count: arr.length });\n }\n return arr[0];\n },\n\n first<T>(predicate?: (item: T, index: number) => boolean): T | undefined {\n return predicate !== undefined ? this.find(predicate) : this[0];\n },\n\n async filterAsync<T>(predicate: (item: T, index: number) => Promise<boolean>): Promise<T[]> {\n const arr: T[] = [];\n for (let i = 0; i < this.length; i++) {\n if (await predicate(this[i], i)) {\n arr.push(this[i]);\n }\n }\n return arr;\n },\n\n last<T>(predicate?: (item: T, index: number) => boolean): T | undefined {\n if (predicate !== undefined) {\n for (let i = this.length - 1; i >= 0; i--) {\n if (predicate(this[i], i)) {\n return this[i];\n }\n }\n\n return undefined;\n } else {\n return this[this.length - 1];\n }\n },\n\n filterExists<T>(): NonNullable<T>[] {\n return this.filter((item) => item != null);\n },\n\n ofType<T, N extends T>(type: PrimitiveTypeStr | Type<N>): N[] {\n // PrimitiveTypeStr\uC778 \uACBD\uC6B0\n if (typeof type === \"string\") {\n return this.filter((item) => {\n switch (type) {\n case \"string\":\n return typeof item === \"string\";\n case \"number\":\n return typeof item === \"number\";\n case \"boolean\":\n return typeof item === \"boolean\";\n case \"DateTime\":\n return item instanceof DateTime;\n case \"DateOnly\":\n return item instanceof DateOnly;\n case \"Time\":\n return item instanceof Time;\n case \"Uuid\":\n return item instanceof Uuid;\n case \"Bytes\":\n return item instanceof Uint8Array;\n default: {\n // exhaustive check: PrimitiveTypeStr\uC5D0 \uC0C8 \uD0C0\uC785 \uCD94\uAC00 \uC2DC \uCEF4\uD30C\uC77C \uC5D0\uB7EC \uBC1C\uC0DD\n const _exhaustive: never = type;\n throw new ArgumentError(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD0C0\uC785: ${_exhaustive}`);\n }\n }\n }) as N[];\n }\n\n // Type<N> (\uC0DD\uC131\uC790)\uC778 \uACBD\uC6B0\n return this.filter((item) => item instanceof type || item?.constructor === type) as N[];\n },\n\n async mapAsync<T, R>(selector: (item: T, index: number) => Promise<R>): Promise<R[]> {\n const result: R[] = [];\n for (let i = 0; i < this.length; i++) {\n result.push(await selector(this[i], i));\n }\n return result;\n },\n\n mapMany<T, R>(selector?: (item: T, index: number) => R[]): T | R[] {\n const arr = selector ? this.map(selector) : this;\n return arr.flat().filterExists();\n },\n\n async mapManyAsync<T, R>(selector?: (item: T, index: number) => Promise<R[]>): Promise<T | R[]> {\n const arr = selector !== undefined ? await this.mapAsync(selector) : this;\n return arr.mapMany();\n },\n\n parallelAsync<T, R>(fn: (item: T, index: number) => Promise<R>): Promise<R[]> {\n return Promise.all(this.map(fn));\n },\n\n // \uBC30\uC5F4\uC744 \uD0A4\uBCC4\uB85C \uADF8\uB8F9\uD654\n // \uC131\uB2A5 \uACE0\uB824\uC0AC\uD56D:\n // - primitive \uD0A4 (string, number \uB4F1): O(n) - Map \uAE30\uBC18\n // - \uAC1D\uCCB4 \uD0A4: O(n\u00B2) - objEqual \uBE44\uAD50\n groupBy<T, K, V>(\n keySelector: (item: T, index: number) => K,\n valueSelector?: (item: T, index: number) => V,\n ): {\n key: K;\n values: (V | T)[];\n }[] {\n const result: { key: K; values: (V | T)[] }[] = [];\n\n // primitive \uD0A4 \uCD5C\uC801\uD654\uB97C \uC704\uD55C Map (\uD0A4 \uBB38\uC790\uC5F4 -> result \uC778\uB371\uC2A4)\n const primitiveKeyIndex = new Map<string, number>();\n\n for (let i = 0; i < this.length; i++) {\n const keyObj = keySelector(this[i], i);\n const valueObj = valueSelector !== undefined ? valueSelector(this[i], i) : this[i];\n\n // primitive \uD0A4\uB294 Map\uC73C\uB85C O(n) \uCC98\uB9AC\n if (keyObj == null || typeof keyObj !== \"object\") {\n const keyStr = typeof keyObj + \":\" + String(keyObj);\n const existingIndex = primitiveKeyIndex.get(keyStr);\n if (existingIndex !== undefined) {\n result[existingIndex].values.push(valueObj);\n } else {\n primitiveKeyIndex.set(keyStr, result.length);\n result.push({ key: keyObj, values: [valueObj] });\n }\n continue;\n }\n\n // \uAC1D\uCCB4 \uD0A4\uB294 \uAE30\uC874 \uBC29\uC2DD O(n\u00B2)\n const existsRecord = result.find((item) => objEqual(item.key, keyObj));\n if (existsRecord !== undefined) {\n existsRecord.values.push(valueObj);\n } else {\n result.push({ key: keyObj, values: [valueObj] });\n }\n }\n\n return result;\n },\n\n toMap<T, K, V>(\n keySelector: (item: T, index: number) => K,\n valueSelector?: (item: T, index: number) => V,\n ): Map<K, V | T> {\n const result = new Map<K, V | T>();\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n const keyObj = keySelector(item, i);\n const valueObj = valueSelector !== undefined ? valueSelector(item, i) : item;\n\n if (result.has(keyObj)) {\n throw new ArgumentError(\"\uD0A4\uAC00 \uC911\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\", { duplicatedKey: keyObj });\n }\n result.set(keyObj, valueObj);\n }\n\n return result;\n },\n\n async toMapAsync<T, K, V>(\n keySelector: (item: T, index: number) => Promise<K> | K,\n valueSelector?: (item: T, index: number) => Promise<V> | V,\n ): Promise<Map<K, V | T>> {\n const result = new Map<K, V | T>();\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n const keyObj = await keySelector(item, i);\n const valueObj = valueSelector !== undefined ? await valueSelector(item, i) : item;\n\n if (result.has(keyObj)) {\n throw new ArgumentError(\"\uD0A4\uAC00 \uC911\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\", { duplicatedKey: keyObj });\n }\n result.set(keyObj, valueObj);\n }\n\n return result;\n },\n\n toArrayMap<T, K, V>(\n keySelector: (item: T, index: number) => K,\n valueSelector?: (item: T, index: number) => V,\n ): Map<K, (V | T)[]> {\n const result = new Map<K, (V | T)[]>();\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n const keyObj = keySelector(item, i);\n const valueObj = valueSelector !== undefined ? valueSelector(item, i) : item;\n\n const arr = result.getOrCreate(keyObj, []);\n arr.push(valueObj);\n }\n\n return result;\n },\n\n toSetMap<T, K, V>(\n keySelector: (item: T, index: number) => K,\n valueSelector?: (item: T, index: number) => V,\n ): Map<K, Set<V | T>> {\n const result = new Map<K, Set<V | T>>();\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n const keyObj = keySelector(item, i);\n const valueObj = valueSelector !== undefined ? valueSelector(item, i) : item;\n\n const set = result.getOrCreate(keyObj, new Set<V | T>());\n set.add(valueObj);\n }\n\n return result;\n },\n\n toMapValues<T, K, V>(keySelector: (item: T, index: number) => K, valueSelector: (items: T[]) => V): Map<K, V | T> {\n const itemsMap = new Map<K, T[]>();\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n const keyObj = keySelector(item, i);\n\n const arr = itemsMap.getOrCreate(keyObj, []);\n arr.push(item);\n }\n\n const result = new Map<K, V | T>();\n\n for (const key of itemsMap.keys()) {\n result.set(key, valueSelector(itemsMap.get(key)!));\n }\n\n return result;\n },\n\n toObject<T, V>(\n keySelector: (item: T, index: number) => string,\n valueSelector?: (item: T, index: number) => V,\n ): Record<string, V | T> {\n const result: Record<string, V | T> = {};\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n const key = keySelector(item, i);\n const valueObj = valueSelector !== undefined ? valueSelector(item, i) : item;\n\n // undefined \uAC12\uC740 \"\uC5C6\uC74C\"\uC73C\uB85C \uCDE8\uAE09\uD558\uC5EC \uB36E\uC5B4\uC4F0\uAE30 \uD5C8\uC6A9\n if (result[key] !== undefined) {\n throw new ArgumentError(\"\uD0A4\uAC00 \uC911\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\", { duplicatedKey: key });\n }\n result[key] = valueObj;\n }\n\n return result;\n },\n\n toTree<T, K extends keyof T, P extends keyof T>(key: K, parentKey: P): TreeArray<T>[] {\n // O(n) \uCD5C\uC801\uD654: \uB9F5 \uAE30\uBC18 \uC778\uB371\uC2F1\n const childrenMap = this.toArrayMap((item) => item[parentKey]);\n\n const fn = (items: T[]): TreeArray<T>[] => {\n return items.map((item) => ({\n ...objClone(item),\n children: fn(childrenMap.get(item[key]) ?? []),\n }));\n };\n\n const rootItems = this.filter((item1) => item1[parentKey] == null);\n return fn(rootItems);\n },\n\n distinct<T>(options?: boolean | { matchAddress?: boolean; keyFn?: (item: T) => string | number }): T[] {\n // \uC635\uC158 \uC815\uADDC\uD654\n const opts = typeof options === \"boolean\" ? { matchAddress: options } : (options ?? {});\n\n // matchAddress: Set \uAE30\uBC18 O(n)\n if (opts.matchAddress === true) return [...new Set(this)];\n\n // keyFn \uC81C\uACF5 \uC2DC: \uCEE4\uC2A4\uD140 \uD0A4 \uAE30\uBC18 O(n)\n if (opts.keyFn) {\n const seen = new Set<string | number>();\n const result: T[] = [];\n for (const item of this) {\n const key = opts.keyFn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n return result;\n }\n\n // \uAE30\uBCF8: \uD0C0\uC785\uBCC4 \uCC98\uB9AC\n const seen = new Map<string, T>();\n const seenRefs = new Set<symbol | ((...args: unknown[]) => unknown)>(); // symbol/function\uC6A9 O(n) \uCC98\uB9AC\n const result: T[] = [];\n\n for (const item of this) {\n // primitive \uD0C0\uC785\uC740 \uBE60\uB978 \uACBD\uB85C\n if (item === null || typeof item !== \"object\") {\n const type = typeof item;\n\n // symbol, function\uC740 Set\uC73C\uB85C identity \uBE44\uAD50 (O(n))\n if (type === \"symbol\" || type === \"function\") {\n if (!seenRefs.has(item)) {\n seenRefs.add(item);\n result.push(item);\n }\n continue;\n }\n\n // \uB098\uBA38\uC9C0 primitive\uB294 \uD0C0\uC785 prefix + \uD2B9\uC218 \uCF00\uC774\uC2A4 \uCC98\uB9AC\n let key = type + \":\";\n if (Object.is(item, -0)) {\n key += \"-0\";\n } else {\n key += String(item);\n }\n\n if (!seen.has(key)) {\n seen.set(key, item);\n result.push(item);\n }\n continue;\n }\n\n if (!result.some((item1) => objEqual(item1, item))) {\n result.push(item);\n }\n }\n\n return result;\n },\n\n orderBy<T>(selector?: (item: T) => string | number | DateTime | DateOnly | Time | undefined): T[] {\n return [...this].sort((p, n) => {\n const pp = selector == null ? p : selector(p);\n const pn = selector == null ? n : selector(n);\n return compareForOrder(pp, pn, false);\n });\n },\n\n orderByDesc<T>(selector?: (item: T) => string | number | DateTime | DateOnly | Time | undefined): T[] {\n return [...this].sort((p, n) => {\n const pp = selector == null ? p : selector(p);\n const pn = selector == null ? n : selector(n);\n return compareForOrder(pp, pn, true);\n });\n },\n\n diffs<T, P>(\n target: P[],\n options?: {\n keys?: string[];\n excludes?: string[];\n },\n ): ArrayDiffsResult<T, P>[] {\n const result: ArrayDiffsResult<T, P>[] = [];\n\n const uncheckedTarget = [...target];\n const uncheckedTargetSet = new Set(uncheckedTarget);\n const hasKeys = options?.keys !== undefined && options.keys.length > 0;\n const excludeOpts = { topLevelExcludes: options?.excludes };\n\n // keys \uC635\uC158\uC774 \uC788\uB294 \uACBD\uC6B0 target\uC744 keys \uAE30\uC900\uC73C\uB85C Map\uC5D0 \uBBF8\uB9AC \uC778\uB371\uC2F1\uD558\uC5EC O(n\u00D7m) \u2192 O(n+m) \uAC1C\uC120\n // \uD0A4 \uAC12\uC774 \uAC19\uC740 target\uC774 \uC5EC\uB7EC \uAC1C \uC788\uC744 \uC218 \uC788\uC73C\uBBC0\uB85C \uBC30\uC5F4\uB85C \uC800\uC7A5\n const keyIndexedTarget = hasKeys ? new Map<string, P[]>() : undefined;\n\n if (keyIndexedTarget) {\n for (const targetItem of uncheckedTarget) {\n const keyStr = JSON.stringify(options!.keys!.map((k) => (targetItem as Record<string, unknown>)[k]));\n const arr = keyIndexedTarget.get(keyStr);\n if (arr) {\n arr.push(targetItem);\n } else {\n keyIndexedTarget.set(keyStr, [targetItem]);\n }\n }\n }\n\n for (const sourceItem of this) {\n // \uC804\uCCB4 \uC77C\uCE58(sameTarget) \uC6B0\uC120, \uC5C6\uC73C\uBA74 \uD0A4 \uC77C\uCE58(sameKeyTarget) \uAC80\uC0C9\n let sameTarget: P | undefined;\n let sameKeyTarget: P | undefined;\n\n // Set \uAE30\uBC18 \uAC74\uB108\uB6F0\uAE30\uB85C \uC774\uBBF8 \uB9E4\uCE6D\uB41C \uD56D\uBAA9 \uC2A4\uD0B5 (splice O(n) \uC81C\uAC70)\n for (const targetItem of uncheckedTarget) {\n if (!uncheckedTargetSet.has(targetItem)) continue;\n if (objEqual(targetItem, sourceItem, excludeOpts)) {\n sameTarget = targetItem;\n break;\n }\n }\n\n // \uC804\uCCB4 \uC77C\uCE58\uAC00 \uC5C6\uACE0 keys \uC635\uC158\uC774 \uC788\uC73C\uBA74 Map\uC5D0\uC11C O(1) \uC870\uD68C\n if (sameTarget === undefined && keyIndexedTarget) {\n const sourceKeyStr = JSON.stringify(options!.keys!.map((k) => (sourceItem as Record<string, unknown>)[k]));\n const candidates = keyIndexedTarget.get(sourceKeyStr);\n if (candidates && candidates.length > 0) {\n // uncheckedTargetSet\uC5D0\uC11C O(1) \uC870\uD68C\uB85C \uC544\uC9C1 \uB0A8\uC544\uC788\uB294 \uCCAB \uBC88\uC9F8 \uD56D\uBAA9 \uC120\uD0DD\n sameKeyTarget = candidates.find((c) => uncheckedTargetSet.has(c));\n }\n }\n\n if (sameTarget !== undefined) {\n uncheckedTargetSet.delete(sameTarget);\n } else if (sameKeyTarget !== undefined) {\n result.push({ source: sourceItem, target: sameKeyTarget });\n uncheckedTargetSet.delete(sameKeyTarget);\n } else {\n result.push({ source: sourceItem, target: undefined });\n }\n }\n\n for (const uncheckedTargetItem of uncheckedTargetSet) {\n result.push({ source: undefined, target: uncheckedTargetItem });\n }\n\n return result;\n },\n\n oneWayDiffs<T extends Record<string, unknown>, K extends keyof T>(\n orgItems: T[] | Map<T[K], T>,\n keyPropNameOrFn: K | ((item: T) => K),\n options?: {\n includeSame?: boolean;\n excludes?: string[];\n includes?: string[];\n },\n ): ArrayDiffs2Result<T>[] {\n const orgItemMap =\n orgItems instanceof Map\n ? orgItems\n : orgItems.toMap((orgItem) =>\n typeof keyPropNameOrFn === \"function\" ? keyPropNameOrFn(orgItem) : orgItem[keyPropNameOrFn],\n );\n const includeSame = options?.includeSame ?? false;\n\n const diffs: ArrayDiffs2Result<T>[] = [];\n for (const item of this) {\n const keyValue = typeof keyPropNameOrFn === \"function\" ? keyPropNameOrFn(item) : item[keyPropNameOrFn];\n if (keyValue == null) {\n diffs.push({ type: \"create\", item, orgItem: undefined });\n continue;\n }\n\n const orgItem = orgItemMap.get(keyValue);\n if (!orgItem) {\n diffs.push({ type: \"create\", item, orgItem: undefined });\n continue;\n }\n\n if (\n objEqual(orgItem, item, {\n topLevelExcludes: options?.excludes,\n topLevelIncludes: options?.includes,\n })\n ) {\n if (includeSame) {\n diffs.push({ type: \"same\", item, orgItem });\n }\n continue;\n }\n\n diffs.push({ type: \"update\", item, orgItem });\n }\n return diffs;\n },\n\n merge<T, P>(\n target: P[],\n options?: {\n keys?: string[];\n excludes?: string[];\n },\n ): (T | P | (T & P))[] {\n const diffs = this.diffs(target, options);\n\n const result: (T | P | (T & P))[] = objClone(this);\n\n // source \uD56D\uBAA9\uC758 \uC6D0\uBCF8 \uC778\uB371\uC2A4\uB97C \uBBF8\uB9AC \uACC4\uC0B0\uD558\uC5EC O(n) \uAC80\uC0C9\uC744 O(1)\uB85C \uAC1C\uC120\n const sourceIndexMap = new Map<T, number>();\n for (let i = 0; i < this.length; i++) {\n sourceIndexMap.set(this[i], i);\n }\n\n for (const diff of diffs) {\n // \uBCC0\uACBD\uC2DC\n if (diff.source !== undefined && diff.target !== undefined) {\n const sourceIndex = sourceIndexMap.get(diff.source);\n if (sourceIndex === undefined) {\n throw new SdError(\"\uC608\uC0C1\uCE58 \uBABB\uD55C \uC624\uB958: merge\uC5D0\uC11C source \uD56D\uBAA9\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\");\n }\n result[sourceIndex] = objMerge(diff.source, diff.target);\n }\n // \uCD94\uAC00\uC2DC\n else if (diff.target !== undefined) {\n result.push(diff.target);\n }\n }\n\n return result;\n },\n\n sum<T>(selector?: (item: T, index: number) => number): number {\n let result = 0;\n for (let i = 0; i < this.length; i++) {\n const item = selector !== undefined ? selector(this[i], i) : this[i];\n if (typeof item !== \"number\") {\n throw new ArgumentError(\"sum \uC740 number \uC5D0 \uB300\uD574\uC11C\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\", { type: typeof item });\n }\n result += item;\n }\n\n return result;\n },\n\n min<T>(selector?: (item: T, index: number) => string | number): string | number | undefined {\n let result: string | number | undefined;\n for (let i = 0; i < this.length; i++) {\n const item = selector !== undefined ? selector(this[i], i) : this[i];\n if (typeof item !== \"number\" && typeof item !== \"string\") {\n throw new ArgumentError(\"min \uC740 number/string \uC5D0 \uB300\uD574\uC11C\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\", { type: typeof item });\n }\n if (result === undefined || result > item) {\n result = item;\n }\n }\n\n return result;\n },\n\n max<T>(selector?: (item: T, index: number) => string | number): string | number | undefined {\n let result: string | number | undefined;\n for (let i = 0; i < this.length; i++) {\n const item = selector !== undefined ? selector(this[i], i) : this[i];\n if (typeof item !== \"number\" && typeof item !== \"string\") {\n throw new ArgumentError(\"max \uC740 number/string \uC5D0 \uB300\uD574\uC11C\uB9CC \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\", { type: typeof item });\n }\n if (result === undefined || result < item) {\n result = item;\n }\n }\n\n return result;\n },\n\n shuffle<T>(): T[] {\n if (this.length <= 1) {\n return [...this];\n }\n\n const result = [...this];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [result[i], result[j]] = [result[j], result[i]];\n }\n return result;\n },\n};\n\nconst arrayMutableExtensions: MutableArrayExt<any> & ThisType<any[]> = {\n distinctThis<T>(options?: boolean | { matchAddress?: boolean; keyFn?: (item: T) => string | number }): T[] {\n // \uC635\uC158 \uC815\uADDC\uD654\n const opts = typeof options === \"boolean\" ? { matchAddress: options } : (options ?? {});\n\n // matchAddress: Set \uAE30\uBC18 O(n)\n // \uCCAB \uBC88\uC9F8 \uB4F1\uC7A5\uD55C \uC694\uC18C\uB97C \uC720\uC9C0\uD558\uAE30 \uC704\uD574 \uC815\uBC29\uD5A5 \uC21C\uD68C \uD6C4 \uC81C\uAC70\uD560 \uC778\uB371\uC2A4 \uC218\uC9D1\n if (opts.matchAddress === true) {\n const seen = new Set<T>();\n const toRemove: number[] = [];\n for (let i = 0; i < this.length; i++) {\n if (seen.has(this[i])) {\n toRemove.push(i);\n } else {\n seen.add(this[i]);\n }\n }\n // \uC5ED\uC21C\uC73C\uB85C \uC81C\uAC70 (\uC778\uB371\uC2A4 \uBCC0\uD654 \uBC29\uC9C0)\n for (let i = toRemove.length - 1; i >= 0; i--) {\n this.splice(toRemove[i], 1);\n }\n return this;\n }\n\n // keyFn \uC81C\uACF5 \uC2DC: \uCEE4\uC2A4\uD140 \uD0A4 \uAE30\uBC18 O(n)\n // \uCCAB \uBC88\uC9F8 \uB4F1\uC7A5\uD55C \uC694\uC18C\uB97C \uC720\uC9C0\uD558\uAE30 \uC704\uD574 \uC815\uBC29\uD5A5 \uC21C\uD68C \uD6C4 \uC81C\uAC70\uD560 \uC778\uB371\uC2A4 \uC218\uC9D1\n if (opts.keyFn) {\n const seen = new Set<string | number>();\n const toRemove: number[] = [];\n for (let i = 0; i < this.length; i++) {\n const key = opts.keyFn(this[i]);\n if (seen.has(key)) {\n toRemove.push(i);\n } else {\n seen.add(key);\n }\n }\n // \uC5ED\uC21C\uC73C\uB85C \uC81C\uAC70 (\uC778\uB371\uC2A4 \uBCC0\uD654 \uBC29\uC9C0)\n for (let i = toRemove.length - 1; i >= 0; i--) {\n this.splice(toRemove[i], 1);\n }\n return this;\n }\n\n // \uAE30\uBCF8: \uD0C0\uC785\uBCC4 \uCC98\uB9AC (primitive \uCD5C\uC801\uD654)\n const seen = new Map<string, T>();\n const seenRefs = new Set<symbol | ((...args: unknown[]) => unknown)>();\n const toRemoveSet = new Set<number>();\n\n for (let i = 0; i < this.length; i++) {\n const item = this[i];\n\n // primitive \uD0C0\uC785\uC740 \uBE60\uB978 \uACBD\uB85C O(n)\n if (item === null || typeof item !== \"object\") {\n const type = typeof item;\n\n // symbol, function\uC740 Set\uC73C\uB85C identity \uBE44\uAD50\n if (type === \"symbol\" || type === \"function\") {\n if (seenRefs.has(item)) {\n toRemoveSet.add(i);\n } else {\n seenRefs.add(item);\n }\n continue;\n }\n\n // \uB098\uBA38\uC9C0 primitive\uB294 \uD0C0\uC785 prefix + \uD2B9\uC218 \uCF00\uC774\uC2A4 \uCC98\uB9AC\n let key = type + \":\";\n if (Object.is(item, -0)) {\n key += \"-0\";\n } else {\n key += String(item);\n }\n\n if (seen.has(key)) {\n toRemoveSet.add(i);\n } else {\n seen.set(key, item);\n }\n continue;\n }\n\n // \uAC1D\uCCB4\uB294 \uAE4A\uC740 \uBE44\uAD50 O(n\u00B2) - \uC81C\uAC70\uB418\uC9C0 \uC54A\uC740 \uC774\uC804 \uD56D\uBAA9\uB4E4\uACFC \uBE44\uAD50\n let hasDuplicateBefore = false;\n for (let j = 0; j < i; j++) {\n // toRemoveSet\uC5D0 \uC788\uB294 \uC778\uB371\uC2A4\uB294 \uAC74\uB108\uB700 (O(1) \uC870\uD68C)\n if (toRemoveSet.has(j)) continue;\n if (objEqual(this[j], item)) {\n hasDuplicateBefore = true;\n break;\n }\n }\n if (hasDuplicateBefore) {\n toRemoveSet.add(i);\n }\n }\n\n // \uC5ED\uC21C\uC73C\uB85C \uC81C\uAC70 (\uC778\uB371\uC2A4 \uBCC0\uD654 \uBC29\uC9C0)\n const toRemoveArr = Array.from(toRemoveSet).sort((a, b) => b - a);\n for (const idx of toRemoveArr) {\n this.splice(idx, 1);\n }\n\n return this;\n },\n\n orderByThis<T>(selector?: (item: T) => string | number | DateTime | DateOnly | Time | undefined): T[] {\n return this.sort((p, n) => {\n const pp = selector?.(p) ?? p;\n const pn = selector?.(n) ?? n;\n return compareForOrder(pp, pn, false);\n });\n },\n\n orderByDescThis<T>(selector?: (item: T) => string | number | DateTime | DateOnly | Time | undefined): T[] {\n return this.sort((p, n) => {\n const pp = selector?.(p) ?? p;\n const pn = selector?.(n) ?? n;\n return compareForOrder(pp, pn, true);\n });\n },\n\n insert<T>(index: number, ...items: T[]): T[] {\n this.splice(index, 0, ...items);\n return this;\n },\n\n remove<T>(itemOrSelector: T | ((item: T, index: number) => boolean)): T[] {\n const shouldRemove =\n typeof itemOrSelector === \"function\"\n ? (itemOrSelector as (item: T, index: number) => boolean)\n : (item: T) => item === itemOrSelector;\n\n // \uC5ED\uBC29\uD5A5 \uC21C\uD68C\uB85C \uC778\uB371\uC2A4 \uBCC0\uACBD \uBB38\uC81C \uBC29\uC9C0 (O(n) \uC131\uB2A5)\n for (let i = this.length - 1; i >= 0; i--) {\n if (shouldRemove(this[i], i)) {\n this.splice(i, 1);\n }\n }\n\n return this;\n },\n\n toggle<T>(this: T[], item: T): T[] {\n if (this.includes(item)) {\n this.remove(item);\n } else {\n this.push(item);\n }\n return this;\n },\n\n clear<T>(this: T[]): T[] {\n return this.remove(() => true);\n },\n};\n\nfor (const [name, fn] of Object.entries({\n ...arrayReadonlyExtensions,\n ...arrayMutableExtensions,\n})) {\n Object.defineProperty(Array.prototype, name, {\n value: fn,\n enumerable: false,\n writable: true,\n configurable: true,\n });\n}\n\n//#endregion\n\n//#region \uD0C0\uC785 \uC120\uC5B8\n\ndeclare global {\n interface ReadonlyArray<T> extends ReadonlyArrayExt<T> {}\n interface Array<T> extends ReadonlyArrayExt<T>, MutableArrayExt<T> {}\n}\n\n//#endregion\n\nexport type { ArrayDiffsResult, ArrayDiffs2Result, TreeArray, ComparableType } from \"./arr-ext.types\";\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": ["seen", "result"]
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extensions/map-ext.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Map \uD655\uC7A5 \uBA54\uC11C\uB4DC\n */\n\ndeclare global {\n interface Map<K, V> {\n /**\n * \uD0A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uAC12\uC774 \uC5C6\uC73C\uBA74 \uC0C8 \uAC12\uC744 \uC124\uC815\uD558\uACE0 \uBC18\uD658\n *\n * @remarks\n * **\uC8FC\uC758**: V \uD0C0\uC785\uC774 \uD568\uC218\uC778 \uACBD\uC6B0(\uC608: `Map<string, () => void>`),\n * \uB450 \uBC88\uC9F8 \uC778\uC790\uB85C \uD568\uC218\uB97C \uC9C1\uC811 \uC804\uB2EC\uD558\uBA74 \uD329\uD1A0\uB9AC\uB85C \uC778\uC2DD\uB418\uC5B4 \uD638\uCD9C\uB429\uB2C8\uB2E4.\n * \uD568\uC218 \uC790\uCCB4\uB97C \uAC12\uC73C\uB85C \uC800\uC7A5\uD558\uB824\uBA74 \uD329\uD1A0\uB9AC\uB85C \uAC10\uC2F8\uC138\uC694.\n *\n * @example\n * ```typescript\n * // \uC77C\uBC18 \uAC12\n * map.getOrCreate(\"key\", 0);\n * map.getOrCreate(\"key\", []);\n *\n * // \uD329\uD1A0\uB9AC \uD568\uC218 (\uACC4\uC0B0 \uBE44\uC6A9\uC774 \uD070 \uACBD\uC6B0)\n * map.getOrCreate(\"key\", () => expensiveComputation());\n *\n * // \uD568\uC218\uB97C \uAC12\uC73C\uB85C \uC800\uC7A5\uD558\uB294 \uACBD\uC6B0\n * const fnMap = new Map<string, () => void>();\n * const myFn = () => console.log(\"hello\");\n * fnMap.getOrCreate(\"key\", () => myFn); // \uD329\uD1A0\uB9AC\uB85C \uAC10\uC2F8\uAE30\n * ```\n */\n getOrCreate(key: K, newValue: V): V;\n getOrCreate(key: K, newValueFn: () => V): V;\n\n /**\n * \uD0A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uAC12\uC744 \uD568\uC218\uB85C \uC5C5\uB370\uC774\uD2B8\uD55C\uB2E4\n *\n * @param key \uC5C5\uB370\uC774\uD2B8\uD560 \uD0A4\n * @param updateFn \uD604\uC7AC \uAC12\uC744 \uBC1B\uC544 \uC0C8 \uAC12\uC744 \uBC18\uD658\uD558\uB294 \uD568\uC218 (\uD0A4\uAC00 \uC5C6\uC73C\uBA74 undefined \uC804\uB2EC)\n *\n * @remarks\n * \uD0A4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC544\uB3C4 updateFn\uC774 \uD638\uCD9C\uB418\uC5B4 \uC0C8 \uAC12\uC774 \uC124\uC815\uB41C\uB2E4.\n * \uAE30\uC874 \uAC12 \uAE30\uBC18 \uACC4\uC0B0\uC774 \uD544\uC694\uD55C \uACBD\uC6B0 (\uCE74\uC6B4\uD130 \uC99D\uAC00, \uBC30\uC5F4\uC5D0 \uCD94\uAC00 \uB4F1) \uC720\uC6A9\uD558\uB2E4.\n *\n * @example\n * ```typescript\n * const countMap = new Map<string, number>();\n *\n * // \uCE74\uC6B4\uD130 \uC99D\uAC00\n * countMap.update(\"key\", (v) => (v ?? 0) + 1);\n *\n * // \uBC30\uC5F4\uC5D0 \uD56D\uBAA9 \uCD94\uAC00\n * const arrayMap = new Map<string, string[]>();\n * arrayMap.update(\"key\", (v) => [...(v ?? []), \"item\"]);\n * ```\n */\n update(key: K, updateFn: (v: V | undefined) => V): void;\n }\n}\n\nObject.defineProperty(Map.prototype, \"getOrCreate\", {\n value: function <K, V>(this: Map<K, V>, key: K, newValue: V | (() => V)): V {\n if (!this.has(key)) {\n if (typeof newValue === \"function\") {\n this.set(key, (newValue as () => V)());\n } else {\n this.set(key, newValue);\n }\n }\n return this.get(key)!;\n },\n enumerable: false,\n writable: true,\n configurable: true,\n});\n\nObject.defineProperty(Map.prototype, \"update\", {\n value: function <K, V>(this: Map<K, V>, key: K, updateFn: (v: V | undefined) => V): void {\n const val = this.get(key);\n const res = updateFn(val);\n this.set(key, res);\n },\n enumerable: false,\n writable: true,\n configurable: true,\n});\n\nexport {};\n"],
|
|
5
4
|
"mappings": "AA0DA,OAAO,eAAe,IAAI,WAAW,eAAe;AAAA,EAClD,OAAO,SAAiC,KAAQ,UAA4B;AAC1E,QAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,UAAI,OAAO,aAAa,YAAY;AAClC,aAAK,IAAI,KAAM,SAAqB,CAAC;AAAA,MACvC,OAAO;AACL,aAAK,IAAI,KAAK,QAAQ;AAAA,MACxB;AAAA,IACF;AACA,WAAO,KAAK,IAAI,GAAG;AAAA,EACrB;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAChB,CAAC;AAED,OAAO,eAAe,IAAI,WAAW,UAAU;AAAA,EAC7C,OAAO,SAAiC,KAAQ,UAAyC;AACvF,UAAM,MAAM,KAAK,IAAI,GAAG;AACxB,UAAM,MAAM,SAAS,GAAG;AACxB,SAAK,IAAI,KAAK,GAAG;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAChB,CAAC;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/extensions/set-ext.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Set \uD655\uC7A5 \uBA54\uC11C\uB4DC\n */\n\ndeclare global {\n interface Set<T> {\n /**\n * \uC5EC\uB7EC \uAC12\uC744 \uD55C \uBC88\uC5D0 \uCD94\uAC00\n */\n adds(...values: T[]): this;\n\n /**\n * \uAC12\uC744 \uD1A0\uAE00\uD55C\uB2E4 (\uC788\uC73C\uBA74 \uC81C\uAC70, \uC5C6\uC73C\uBA74 \uCD94\uAC00)\n *\n * @param value \uD1A0\uAE00\uD560 \uAC12\n * @param addOrDel \uAC15\uC81C\uB85C \uCD94\uAC00(\"add\") \uB610\uB294 \uC81C\uAC70(\"del\") \uC9C0\uC815 (\uC0DD\uB7B5 \uC2DC \uC790\uB3D9 \uD1A0\uAE00)\n * @returns this (\uBA54\uC11C\uB4DC \uCCB4\uC774\uB2DD \uAC00\uB2A5)\n *\n * @remarks\n * addOrDel \uD30C\uB77C\uBBF8\uD130\uB85C \uC870\uAC74\uBD80 \uCD94\uAC00/\uC81C\uAC70\uB97C \uAC04\uACB0\uD558\uAC8C \uD45C\uD604\uD560 \uC218 \uC788\uB2E4.\n *\n * @example\n * ```typescript\n * const set = new Set<number>([1, 2, 3]);\n *\n * set.toggle(2); // 2\uAC00 \uC788\uC73C\uBBC0\uB85C \uC81C\uAC70 \u2192 {1, 3}\n * set.toggle(4); // 4\uAC00 \uC5C6\uC73C\uBBC0\uB85C \uCD94\uAC00 \u2192 {1, 3, 4}\n *\n * // \uC870\uAC74\uBD80 \uD1A0\uAE00\n * const isAdmin = true;\n * set.toggle(5, isAdmin ? \"add\" : \"del\"); // \uAC15\uC81C \uCD94\uAC00\n * ```\n */\n toggle(value: T, addOrDel?: \"add\" | \"del\"): this;\n }\n}\n\nObject.defineProperty(Set.prototype, \"adds\", {\n value: function <T>(this: Set<T>, ...values: T[]): Set<T> {\n for (const val of values) {\n this.add(val);\n }\n return this;\n },\n enumerable: false,\n writable: true,\n configurable: true,\n});\n\nObject.defineProperty(Set.prototype, \"toggle\", {\n value: function <T>(this: Set<T>, value: T, addOrDel?: \"add\" | \"del\"): Set<T> {\n if (addOrDel === \"add\") {\n this.add(value);\n } else if (addOrDel === \"del\") {\n this.delete(value);\n } else if (this.has(value)) {\n this.delete(value);\n } else {\n this.add(value);\n }\n return this;\n },\n enumerable: false,\n writable: true,\n configurable: true,\n});\n\nexport {};\n"],
|
|
5
4
|
"mappings": "AAqCA,OAAO,eAAe,IAAI,WAAW,QAAQ;AAAA,EAC3C,OAAO,YAA8B,QAAqB;AACxD,eAAW,OAAO,QAAQ;AACxB,WAAK,IAAI,GAAG;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAChB,CAAC;AAED,OAAO,eAAe,IAAI,WAAW,UAAU;AAAA,EAC7C,OAAO,SAA2B,OAAU,UAAkC;AAC5E,QAAI,aAAa,OAAO;AACtB,WAAK,IAAI,KAAK;AAAA,IAChB,WAAW,aAAa,OAAO;AAC7B,WAAK,OAAO,KAAK;AAAA,IACnB,WAAW,KAAK,IAAI,KAAK,GAAG;AAC1B,WAAK,OAAO,KAAK;AAAA,IACnB,OAAO;AACL,WAAK,IAAI,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAChB,CAAC;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/features/debounce-queue.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * \uBE44\uB3D9\uAE30 \uD568\uC218 \uB514\uBC14\uC6B4\uC2A4 \uD050\n *\n * \uC9E7\uC740 \uC2DC\uAC04 \uB0B4\uC5D0 \uC5EC\uB7EC \uBC88 \uD638\uCD9C\uB418\uBA74 \uB9C8\uC9C0\uB9C9 \uC694\uCCAD\uB9CC \uC2E4\uD589\uD558\uACE0 \uC774\uC804 \uC694\uCCAD\uC740 \uBB34\uC2DC\uD569\uB2C8\uB2E4.\n * \uC785\uB825 \uD544\uB4DC \uC790\uB3D9\uC644\uC131, \uC5F0\uC18D\uC801\uC778 \uC0C1\uD0DC \uBCC0\uACBD \uBC30\uCE58 \uCC98\uB9AC \uB4F1\uC5D0 \uC720\uC6A9\uD569\uB2C8\uB2E4.\n *\n * @remarks\n * \uC2E4\uD589 \uC911\uC5D0 \uCD94\uAC00\uB41C \uC694\uCCAD\uC740 \uB514\uBC14\uC6B4\uC2A4 \uC9C0\uC5F0 \uC5C6\uC774 \uD604\uC7AC \uC2E4\uD589\uC774 \uC644\uB8CC\uB41C \uC9C1\uD6C4 \uCC98\uB9AC\uB429\uB2C8\uB2E4.\n * \uC774\uB294 \uC2E4\uD589 \uC644\uB8CC \uC804\uC5D0 \uB4E4\uC5B4\uC628 \uC694\uCCAD\uC774 \uB204\uB77D\uB418\uC9C0 \uC54A\uB3C4\uB85D \uD558\uAE30 \uC704\uD55C \uC758\uB3C4\uC801 \uC124\uACC4\uC785\uB2C8\uB2E4.\n *\n * @example\n * const queue = new DebounceQueue(300); // 300ms \uB51C\uB808\uC774\n * queue.run(() => console.log(\"1\")); // \uBB34\uC2DC\uB428\n * queue.run(() => console.log(\"2\")); // \uBB34\uC2DC\uB428\n * queue.run(() => console.log(\"3\")); // 300ms \uD6C4 \uC2E4\uD589\uB428\n *\n * @example\n * // \uC5D0\uB7EC \uCC98\uB9AC\n * queue.on(\"error\", (err) => console.error(err));\n */\nimport { SdError } from \"../errors/sd-error\";\nimport { EventEmitter } from \"./event-emitter\";\nimport consola from \"consola\";\n\ninterface DebounceQueueEvents {\n error: SdError;\n}\n\nexport class DebounceQueue extends EventEmitter<DebounceQueueEvents> {\n private static readonly _logger = consola.withTag(\"DebounceQueue\");\n\n private _pendingFn: (() => void | Promise<void>) | undefined;\n private _isRunning = false;\n private _isDisposed = false;\n private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @param _delay \uB514\uBC14\uC6B4\uC2A4 \uC9C0\uC5F0 \uC2DC\uAC04 (\uBC00\uB9AC\uCD08). \uC0DD\uB7B5 \uC2DC \uC989\uC2DC \uC2E4\uD589 (\uB2E4\uC74C \uC774\uBCA4\uD2B8 \uB8E8\uD504)\n */\n constructor(private readonly _delay?: number) {\n super();\n }\n\n /**\n * \uB300\uAE30 \uC911\uC778 \uC791\uC5C5\uACFC \uD0C0\uC774\uBA38 \uC815\uB9AC\n */\n override dispose(): void {\n this._isDisposed = true;\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = undefined;\n }\n this._pendingFn = undefined;\n super.dispose();\n }\n\n /**\n * using \uBB38 \uC9C0\uC6D0\n */\n override [Symbol.dispose](): void {\n this.dispose();\n }\n\n /**\n * \uD568\uC218\uB97C \uD050\uC5D0 \uCD94\uAC00\n * \uC774\uC804\uC5D0 \uCD94\uAC00\uB41C \uD568\uC218\uAC00 \uC788\uC73C\uBA74 \uB300\uCCB4\uB428\n */\n run(fn: () => void | Promise<void>): void {\n if (this._isDisposed) return;\n\n this._pendingFn = fn;\n\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = undefined;\n }\n\n if (!this._isRunning) {\n this._timer = setTimeout(() => {\n void this._processLast();\n }, this._delay);\n }\n }\n\n private async _processLast(): Promise<void> {\n if (this._isDisposed || this._isRunning || !this._pendingFn) return;\n\n this._isRunning = true;\n this._timer = undefined;\n\n try {\n // \uC2E4\uD589 \uC911\uC5D0 \uC0C8 \uC694\uCCAD\uC774 \uB4E4\uC5B4\uC624\uBA74 \uB514\uBC14\uC6B4\uC2A4 \uC9C0\uC5F0 \uC5C6\uC774 \uC989\uC2DC \uCC98\uB9AC\n // \uC774\uB294 \"\uC2E4\uD589 \uC644\uB8CC \uC804\uC5D0 \uB4E4\uC5B4\uC628 \uC694\uCCAD\uC740 \uC2E4\uD589 \uC9C1\uD6C4 \uBC14\uB85C \uCC98\uB9AC\"\uD558\uB294 \uC758\uB3C4\uC801 \uC124\uACC4\n while (this._pendingFn) {\n const currentFn = this._pendingFn;\n this._pendingFn = undefined;\n\n try {\n await currentFn();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n const sdError = new SdError(error, \"\uC791\uC5C5 \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD\");\n\n // \uB9AC\uC2A4\uB108\uAC00 \uC788\uC73C\uBA74 \uC774\uBCA4\uD2B8\uB85C \uC804\uB2EC, \uC5C6\uC73C\uBA74 \uB85C\uAE45\n if (this.listenerCount(\"error\") > 0) {\n this.emit(\"error\", sdError);\n } else {\n DebounceQueue._logger.error(sdError);\n }\n }\n }\n } finally {\n this._isRunning = false;\n }\n }\n}\n"],
|
|
5
4
|
"mappings": "AAoBA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,aAAa;AAMb,MAAM,sBAAsB,aAAkC;AAAA;AAAA;AAAA;AAAA,EAWnE,YAA6B,QAAiB;AAC5C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAZA,OAAwB,UAAU,QAAQ,QAAQ,eAAe;AAAA,EAEzD;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAYC,UAAgB;AACvB,SAAK,cAAc;AACnB,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK,MAAM;AACxB,WAAK,SAAS;AAAA,IAChB;AACA,SAAK,aAAa;AAClB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAU,OAAO,OAAO,IAAU;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,IAAsC;AACxC,QAAI,KAAK,YAAa;AAEtB,SAAK,aAAa;AAElB,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK,MAAM;AACxB,WAAK,SAAS;AAAA,IAChB;AAEA,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,SAAS,WAAW,MAAM;AAC7B,aAAK,KAAK,aAAa;AAAA,MACzB,GAAG,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAc,eAA8B;AAC1C,QAAI,KAAK,eAAe,KAAK,cAAc,CAAC,KAAK,WAAY;AAE7D,SAAK,aAAa;AAClB,SAAK,SAAS;AAEd,QAAI;AAGF,aAAO,KAAK,YAAY;AACtB,cAAM,YAAY,KAAK;AACvB,aAAK,aAAa;AAElB,YAAI;AACF,gBAAM,UAAU;AAAA,QAClB,SAAS,KAAK;AACZ,gBAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAM,UAAU,IAAI,QAAQ,OAAO,4DAAe;AAGlD,cAAI,KAAK,cAAc,OAAO,IAAI,GAAG;AACnC,iBAAK,KAAK,SAAS,OAAO;AAAA,UAC5B,OAAO;AACL,0BAAc,QAAQ,MAAM,OAAO;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/features/event-emitter.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * EventTarget \uB798\uD37C - EventEmitter\uC640 \uC720\uC0AC\uD55C API \uC81C\uACF5\n *\n * \uBE0C\uB77C\uC6B0\uC800\uC640 Node.js \uBAA8\uB450\uC5D0\uC11C \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uD0C0\uC785 \uC548\uC804\uD55C \uC774\uBCA4\uD2B8 \uC5D0\uBBF8\uD130\uC774\uB2E4.\n * \uB0B4\uBD80\uC801\uC73C\uB85C EventTarget\uC744 \uC0AC\uC6A9\uD558\uC5EC \uAD6C\uD604\uB418\uC5B4 \uC788\uB2E4.\n *\n * @typeParam T \uC774\uBCA4\uD2B8 \uD0C0\uC785 \uB9F5. \uD0A4\uB294 \uC774\uBCA4\uD2B8 \uC774\uB984, \uAC12\uC740 \uC774\uBCA4\uD2B8 \uB370\uC774\uD130 \uD0C0\uC785\n *\n * @example\n * interface MyEvents {\n * data: string;\n * error: Error;\n * done: void;\n * }\n *\n * class MyEmitter extends EventEmitter<MyEvents> {}\n *\n * const emitter = new MyEmitter();\n * emitter.on(\"data\", (data) => console.log(data)); // data: string\n * emitter.emit(\"data\", \"hello\");\n * emitter.emit(\"done\"); // void \uD0C0\uC785\uC740 \uC778\uC790 \uC5C6\uC774 \uD638\uCD9C\n */\nexport class EventEmitter<T extends { [K in keyof T]: unknown } = Record<string, unknown>> {\n private readonly _target = new EventTarget();\n // \uC774\uBCA4\uD2B8 \uD0C0\uC785\uBCC4\uB85C \uB9AC\uC2A4\uB108 \uB9F5 \uAD00\uB9AC (\uAC19\uC740 \uB9AC\uC2A4\uB108\uB97C \uB2E4\uB978 \uC774\uBCA4\uD2B8\uC5D0 \uB4F1\uB85D \uAC00\uB2A5)\n // \uB2E4\uD615\uC801 \uB9AC\uC2A4\uB108 \uAD00\uB9AC\uB97C \uC704\uD574 Function \uD0C0\uC785 \uC0AC\uC6A9\n private readonly _listenerMap = new Map<string, Map<Function, (e: Event) => void>>();\n\n /**\n * \uC774\uBCA4\uD2B8 \uB9AC\uC2A4\uB108 \uB4F1\uB85D\n *\n * @param type \uC774\uBCA4\uD2B8 \uD0C0\uC785\n * @param listener \uC774\uBCA4\uD2B8 \uD578\uB4E4\uB7EC\n * @note \uAC19\uC740 \uB9AC\uC2A4\uB108\uB97C \uAC19\uC740 \uC774\uBCA4\uD2B8\uC5D0 \uC911\uBCF5 \uB4F1\uB85D\uD558\uBA74 \uBB34\uC2DC\uB428\n */\n on<K extends keyof T & string>(type: K, listener: (data: T[K]) => void): void {\n // \uC774\uBCA4\uD2B8 \uD0C0\uC785\uBCC4 \uB9F5 \uAC00\uC838\uC624\uAC70\uB098 \uC0DD\uC131\n let typeMap = this._listenerMap.get(type);\n if (!typeMap) {\n typeMap = new Map();\n this._listenerMap.set(type, typeMap);\n }\n\n // \uC774\uBBF8 \uD574\uB2F9 \uC774\uBCA4\uD2B8\uC5D0 \uB4F1\uB85D\uB41C \uB9AC\uC2A4\uB108\uBA74 \uBB34\uC2DC (\uC911\uBCF5 \uB4F1\uB85D \uBC29\uC9C0)\n if (typeMap.has(listener)) return;\n\n const wrappedListener = (e: Event) => listener((e as CustomEvent).detail);\n typeMap.set(listener, wrappedListener);\n this._target.addEventListener(type, wrappedListener);\n }\n\n /**\n * \uC774\uBCA4\uD2B8 \uB9AC\uC2A4\uB108 \uC81C\uAC70\n *\n * @param type \uC774\uBCA4\uD2B8 \uD0C0\uC785\n * @param listener \uC81C\uAC70\uD560 \uC774\uBCA4\uD2B8 \uD578\uB4E4\uB7EC\n */\n off<K extends keyof T & string>(type: K, listener: (data: T[K]) => void): void {\n const typeMap = this._listenerMap.get(type);\n if (!typeMap) return;\n\n const wrappedListener = typeMap.get(listener);\n if (wrappedListener) {\n this._target.removeEventListener(type, wrappedListener);\n typeMap.delete(listener);\n\n // \uBE48 \uB9F5 \uC815\uB9AC\n if (typeMap.size === 0) {\n this._listenerMap.delete(type);\n }\n }\n }\n\n /**\n * \uC774\uBCA4\uD2B8 \uBC1C\uC0DD\n *\n * @param type \uC774\uBCA4\uD2B8 \uD0C0\uC785\n * @param args \uC774\uBCA4\uD2B8 \uB370\uC774\uD130 (void \uD0C0\uC785\uC774\uBA74 \uC0DD\uB7B5)\n */\n emit<K extends keyof T & string>(type: K, ...args: T[K] extends void ? [] : [data: T[K]]): void {\n this._target.dispatchEvent(new CustomEvent(type, { detail: args[0] }));\n }\n\n /**\n * \uD2B9\uC815 \uC774\uBCA4\uD2B8\uC758 \uB9AC\uC2A4\uB108 \uC218 \uBC18\uD658\n *\n * @param type \uC774\uBCA4\uD2B8 \uD0C0\uC785\n * @returns \uB4F1\uB85D\uB41C \uB9AC\uC2A4\uB108 \uC218\n */\n listenerCount<K extends keyof T & string>(type: K): number {\n return this._listenerMap.get(type)?.size ?? 0;\n }\n\n /**\n * \uBAA8\uB4E0 \uC774\uBCA4\uD2B8 \uB9AC\uC2A4\uB108\uB97C \uC81C\uAC70\uD55C\uB2E4.\n */\n dispose(): void {\n for (const [type, typeMap] of this._listenerMap) {\n for (const wrappedListener of typeMap.values()) {\n this._target.removeEventListener(type, wrappedListener);\n }\n }\n this._listenerMap.clear();\n }\n\n /**\n * using \uBB38 \uC9C0\uC6D0\n */\n [Symbol.dispose](): void {\n this.dispose();\n }\n}\n"],
|
|
5
4
|
"mappings": "AAsBO,MAAM,aAA8E;AAAA,EACxE,UAAU,IAAI,YAAY;AAAA;AAAA;AAAA,EAG1B,eAAe,oBAAI,IAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnF,GAA+B,MAAS,UAAsC;AAE5E,QAAI,UAAU,KAAK,aAAa,IAAI,IAAI;AACxC,QAAI,CAAC,SAAS;AACZ,gBAAU,oBAAI,IAAI;AAClB,WAAK,aAAa,IAAI,MAAM,OAAO;AAAA,IACrC;AAGA,QAAI,QAAQ,IAAI,QAAQ,EAAG;AAE3B,UAAM,kBAAkB,CAAC,MAAa,SAAU,EAAkB,MAAM;AACxE,YAAQ,IAAI,UAAU,eAAe;AACrC,SAAK,QAAQ,iBAAiB,MAAM,eAAe;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAgC,MAAS,UAAsC;AAC7E,UAAM,UAAU,KAAK,aAAa,IAAI,IAAI;AAC1C,QAAI,CAAC,QAAS;AAEd,UAAM,kBAAkB,QAAQ,IAAI,QAAQ;AAC5C,QAAI,iBAAiB;AACnB,WAAK,QAAQ,oBAAoB,MAAM,eAAe;AACtD,cAAQ,OAAO,QAAQ;AAGvB,UAAI,QAAQ,SAAS,GAAG;AACtB,aAAK,aAAa,OAAO,IAAI;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAiC,SAAY,MAAmD;AAC9F,SAAK,QAAQ,cAAc,IAAI,YAAY,MAAM,EAAE,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,cAA0C,MAAiB;AAzF7D;AA0FI,aAAO,UAAK,aAAa,IAAI,IAAI,MAA1B,mBAA6B,SAAQ;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,eAAW,CAAC,MAAM,OAAO,KAAK,KAAK,cAAc;AAC/C,iBAAW,mBAAmB,QAAQ,OAAO,GAAG;AAC9C,aAAK,QAAQ,oBAAoB,MAAM,eAAe;AAAA,MACxD;AAAA,IACF;AACA,SAAK,aAAa,MAAM;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,OAAO,OAAO,IAAU;AACvB,SAAK,QAAQ;AAAA,EACf;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/features/serial-queue.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * \uBE44\uB3D9\uAE30 \uD568\uC218 \uC9C1\uB82C \uD050\n *\n * \uD050\uC5D0 \uCD94\uAC00\uB41C \uD568\uC218\uB4E4\uC744 \uC21C\uC11C\uB300\uB85C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n * \uD55C \uC791\uC5C5\uC774 \uC644\uB8CC\uB418\uC5B4\uC57C \uB2E4\uC74C \uC791\uC5C5\uC774 \uC2DC\uC791\uB429\uB2C8\uB2E4.\n * \uC5D0\uB7EC\uAC00 \uBC1C\uC0DD\uD574\uB3C4 \uD6C4\uC18D \uC791\uC5C5\uC740 \uACC4\uC18D \uC2E4\uD589\uB429\uB2C8\uB2E4.\n *\n * @example\n * const queue = new SerialQueue();\n * queue.run(async () => { await fetch(\"/api/1\"); });\n * queue.run(async () => { await fetch(\"/api/2\"); }); // 1\uBC88 \uC644\uB8CC \uD6C4 \uC2E4\uD589\n * queue.run(async () => { await fetch(\"/api/3\"); }); // 2\uBC88 \uC644\uB8CC \uD6C4 \uC2E4\uD589\n *\n * @example\n * // \uC5D0\uB7EC \uCC98\uB9AC\n * queue.on(\"error\", (err) => console.error(err));\n */\nimport { SdError } from \"../errors/sd-error\";\nimport { EventEmitter } from \"./event-emitter\";\nimport consola from \"consola\";\nimport { waitTime } from \"../utils/wait\";\n\ninterface SerialQueueEvents {\n error: SdError;\n}\n\nexport class SerialQueue extends EventEmitter<SerialQueueEvents> {\n private static readonly _logger = consola.withTag(\"SerialQueue\");\n\n private readonly _queue: (() => void | Promise<void>)[] = [];\n private _isQueueRunning = false;\n\n /**\n * @param _gap \uAC01 \uC791\uC5C5 \uC0AC\uC774\uC758 \uAC04\uACA9 (ms)\n */\n constructor(private readonly _gap: number = 0) {\n super();\n }\n\n /**\n * \uB300\uAE30 \uC911\uC778 \uD050 \uBE44\uC6B0\uAE30 (\uD604\uC7AC \uC2E4\uD589 \uC911\uC778 \uC791\uC5C5\uC740 \uC644\uB8CC\uB428)\n */\n override dispose(): void {\n this._queue.length = 0;\n super.dispose();\n }\n\n /**\n * using \uBB38 \uC9C0\uC6D0\n */\n override [Symbol.dispose](): void {\n this.dispose();\n }\n\n /**\n * \uD568\uC218\uB97C \uD050\uC5D0 \uCD94\uAC00\uD558\uACE0 \uC2E4\uD589\n */\n run(fn: () => void | Promise<void>): void {\n this._queue.push(fn);\n void this._process();\n }\n\n private async _process(): Promise<void> {\n if (this._isQueueRunning) return;\n this._isQueueRunning = true;\n\n try {\n while (this._queue.length > 0) {\n const fn = this._queue.shift();\n if (!fn) break;\n\n try {\n await fn();\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n const sdError = new SdError(error, \"\uD050 \uC791\uC5C5 \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD\");\n\n // \uB9AC\uC2A4\uB108\uAC00 \uC788\uC73C\uBA74 \uC774\uBCA4\uD2B8\uB85C \uC804\uB2EC, \uC5C6\uC73C\uBA74 \uB85C\uAE45\n if (this.listenerCount(\"error\") > 0) {\n this.emit(\"error\", sdError);\n } else {\n SerialQueue._logger.error(sdError);\n }\n }\n\n if (this._gap > 0 && this._queue.length > 0) {\n await waitTime(this._gap);\n }\n }\n } finally {\n this._isQueueRunning = false;\n }\n }\n}\n"],
|
|
5
4
|
"mappings": "AAiBA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,aAAa;AACpB,SAAS,gBAAgB;AAMlB,MAAM,oBAAoB,aAAgC;AAAA;AAAA;AAAA;AAAA,EAS/D,YAA6B,OAAe,GAAG;AAC7C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAVA,OAAwB,UAAU,QAAQ,QAAQ,aAAa;AAAA,EAE9C,SAAyC,CAAC;AAAA,EACnD,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAYjB,UAAgB;AACvB,SAAK,OAAO,SAAS;AACrB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAU,OAAO,OAAO,IAAU;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAsC;AACxC,SAAK,OAAO,KAAK,EAAE;AACnB,SAAK,KAAK,SAAS;AAAA,EACrB;AAAA,EAEA,MAAc,WAA0B;AACtC,QAAI,KAAK,gBAAiB;AAC1B,SAAK,kBAAkB;AAEvB,QAAI;AACF,aAAO,KAAK,OAAO,SAAS,GAAG;AAC7B,cAAM,KAAK,KAAK,OAAO,MAAM;AAC7B,YAAI,CAAC,GAAI;AAET,YAAI;AACF,gBAAM,GAAG;AAAA,QACX,SAAS,KAAK;AACZ,gBAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAM,UAAU,IAAI,QAAQ,OAAO,mEAAiB;AAGpD,cAAI,KAAK,cAAc,OAAO,IAAI,GAAG;AACnC,iBAAK,KAAK,SAAS,OAAO;AAAA,UAC5B,OAAO;AACL,wBAAY,QAAQ,MAAM,OAAO;AAAA,UACnC;AAAA,QACF;AAEA,YAAI,KAAK,OAAO,KAAK,KAAK,OAAO,SAAS,GAAG;AAC3C,gBAAM,SAAS,KAAK,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AACF;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/dist/globals.js.map
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["// @simplysm/core-common\n// \uACF5\uD1B5 \uC720\uD2F8\uB9AC\uD2F0 \uD328\uD0A4\uC9C0\n\nimport \"./extensions/arr-ext\";\nimport \"./extensions/set-ext\";\nimport \"./extensions/map-ext\";\n\nexport * from \"./env\";\n\n// arr-extension\uC5D0\uC11C \uD0C0\uC785\uB9CC re-export\nexport type { ArrayDiffsResult, ArrayDiffs2Result, TreeArray } from \"./extensions/arr-ext\";\n\n//#region errors\nexport * from \"./errors/sd-error\";\nexport * from \"./errors/argument-error\";\nexport * from \"./errors/not-implemented-error\";\nexport * from \"./errors/timeout-error\";\n//#endregion\n\n//#region types\nexport * from \"./types/uuid\";\nexport * from \"./types/lazy-gc-map\";\nexport * from \"./types/date-time\";\nexport * from \"./types/date-only\";\nexport * from \"./types/time\";\n//#endregion\n\n//#region features\nexport * from \"./features/debounce-queue\";\nexport * from \"./features/serial-queue\";\nexport * from \"./features/event-emitter\";\n//#endregion\n\n//#region utils\nexport * from \"./utils/date-format\";\nexport * from \"./utils/bytes\";\nexport * from \"./utils/json\";\nexport * from \"./utils/num\";\nexport * from \"./utils/obj\";\nexport * from \"./utils/primitive\";\nexport * from \"./utils/str\";\nexport * from \"./utils/template-strings\";\nexport * from \"./utils/transferable\";\nexport * from \"./utils/wait\";\nexport * from \"./utils/xml\";\nexport * from \"./utils/path\";\n//#endregion\n\n//#region zip\nexport * from \"./zip/sd-zip\";\n//#endregion\n\n//#region type utilities\nexport * from \"./common.types\";\n//#endregion\n"],
|
|
5
4
|
"mappings": "AAGA,OAAO;AACP,OAAO;AACP,OAAO;AAEP,cAAc;AAMd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAId,cAAc;AAId,cAAc;",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/date-only.ts"],
|
|
4
|
-
"sourcesContent": ["import { ArgumentError } from \"../errors/argument-error\";\nimport { formatDate, normalizeMonth } from \"../utils/date-format\";\n\n/**\n * \uB0A0\uC9DC \uD074\uB798\uC2A4 (\uC2DC\uAC04\uC81C\uC678: yyyy-MM-dd, \uBD88\uBCC0)\n *\n * \uC2DC\uAC04 \uC815\uBCF4 \uC5C6\uC774 \uB0A0\uC9DC\uB9CC \uC800\uC7A5\uD558\uB294 \uBD88\uBCC0 \uD074\uB798\uC2A4\uC774\uB2E4.\n * \uB85C\uCEEC \uD0C0\uC784\uC874\uC744 \uAE30\uC900\uC73C\uB85C \uB3D9\uC791\uD55C\uB2E4.\n *\n * @example\n * const today = new DateOnly();\n * const specific = new DateOnly(2025, 1, 15);\n * const parsed = DateOnly.parse(\"2025-01-15\");\n */\nexport class DateOnly {\n private static readonly MS_PER_DAY = 24 * 60 * 60 * 1000;\n\n readonly date: Date;\n\n /** \uD604\uC7AC\uC2DC\uAC04 */\n constructor();\n /** \uC5F0\uC6D4\uC77C\uB85C \uCD08\uAE30\uD654 */\n constructor(year: number, month: number, day: number);\n /** tick (millisecond)\uC73C\uB85C \uC0DD\uC131 */\n constructor(tick: number);\n /** Date \uD0C0\uC785\uC73C\uB85C \uC0DD\uC131 */\n constructor(date: Date);\n constructor(arg1?: number | Date, arg2?: number, arg3?: number) {\n if (arg1 === undefined) {\n const tick = Date.now();\n const date = new Date(tick);\n this.date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n } else if (arg2 !== undefined && arg3 !== undefined) {\n this.date = new Date(arg1 as number, arg2 - 1, arg3);\n } else if (arg1 instanceof Date) {\n const date = arg1;\n this.date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n } else {\n const date = new Date(arg1);\n this.date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n }\n }\n\n /**\n * \uBB38\uC790\uC5F4\uC744 DateOnly\uB85C \uD30C\uC2F1\n * @param str \uB0A0\uC9DC \uBB38\uC790\uC5F4\n * @returns DateOnly \uC778\uC2A4\uD134\uC2A4\n *\n * \uC9C0\uC6D0 \uD615\uC2DD:\n * - `yyyy-MM-dd` (\uC608: '2024-01-15') - \uBB38\uC790\uC5F4\uC5D0\uC11C \uC9C1\uC811 \uCD94\uCD9C, \uD0C0\uC784\uC874 \uC601\uD5A5 \uC5C6\uC74C\n * - `yyyyMMdd` (\uC608: '20240115') - \uBB38\uC790\uC5F4\uC5D0\uC11C \uC9C1\uC811 \uCD94\uCD9C, \uD0C0\uC784\uC874 \uC601\uD5A5 \uC5C6\uC74C\n * - ISO 8601 (\uC608: '2024-01-15T00:00:00Z') - UTC\uB85C \uD574\uC11D \uD6C4 \uB85C\uCEEC \uD0C0\uC784\uC874 \uBCC0\uD658\n *\n * @note \uC11C\uBC84/\uD074\uB77C\uC774\uC5B8\uD2B8 \uD0C0\uC784\uC874\uC774 \uB2E4\uB978 \uACBD\uC6B0 `yyyy-MM-dd` \uD615\uC2DD \uC0AC\uC6A9 \uAD8C\uC7A5\n * @note DST(\uC77C\uAD11\uC808\uC57D\uC2DC\uAC04) \uC9C0\uC5ED\uC5D0\uC11C ISO 8601 \uD615\uC2DD \uD30C\uC2F1 \uC2DC, \uD30C\uC2F1 \uB300\uC0C1 \uB0A0\uC9DC\uC758 \uC624\uD504\uC14B\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n */\n static parse(str: string): DateOnly {\n // yyyy-MM-dd \uD615\uC2DD (\uD0C0\uC784\uC874 \uC601\uD5A5 \uC5C6\uC74C)\n const matchYMD = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(str);\n if (matchYMD != null) {\n return new DateOnly(Number(matchYMD[1]), Number(matchYMD[2]), Number(matchYMD[3]));\n }\n\n // yyyyMMdd \uD615\uC2DD (\uD0C0\uC784\uC874 \uC601\uD5A5 \uC5C6\uC74C)\n const matchCompact = /^(\\d{4})(\\d{2})(\\d{2})$/.exec(str);\n if (matchCompact != null) {\n return new DateOnly(Number(matchCompact[1]), Number(matchCompact[2]), Number(matchCompact[3]));\n }\n\n // ISO 8601 \uB4F1 \uAE30\uD0C0 \uD615\uC2DD (Date.parse \uC0AC\uC6A9, \uD0C0\uC784\uC874 \uBCC0\uD658 \uC801\uC6A9)\n // Date.parse()\uB294 'Z' \uC811\uBBF8\uC0AC\uAC00 \uC788\uB294 ISO 8601\uC744 UTC tick\uC73C\uB85C \uBC18\uD658\n // getTimezoneOffset()\uC740 \"\uB85C\uCEEC\uC5D0\uC11C UTC\uB85C \uBCC0\uD658\uD560 \uB54C \uB354\uD560 \uBD84\"\uC744 \uBC18\uD658 (KST\uB294 -540\uBD84 = UTC+9)\n // \uC5EC\uAE30\uC11C\uB294 \"UTC \u2192 \uB85C\uCEEC\" \uBCC0\uD658\uC774\uBBC0\uB85C \uBD80\uD638\uB97C \uBC18\uB300\uB85C \uC801\uC6A9 (\uBE84\uC148)\n // \uD30C\uC2F1 \uB300\uC0C1 \uB0A0\uC9DC\uC758 \uC624\uD504\uC14B\uC744 \uC0AC\uC6A9\uD558\uC5EC DST \uC9C0\uC5ED\uC5D0\uC11C\uB3C4 \uC815\uD655\uD55C \uBCC0\uD658\n const utcTick = Date.parse(str);\n if (!Number.isNaN(utcTick)) {\n const tempDate = new Date(utcTick);\n const offsetMinutes = tempDate.getTimezoneOffset();\n const localTick = utcTick - offsetMinutes * 60 * 1000;\n return new DateOnly(localTick);\n }\n\n throw new ArgumentError(`\uB0A0\uC9DC \uD615\uC2DD\uC744 \uD30C\uC2F1\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC9C0\uC6D0 \uD615\uC2DD: 'yyyy-MM-dd', 'yyyyMMdd', ISO 8601 \uB0A0\uC9DC`, {\n input: str,\n });\n }\n\n //#region \uC8FC\uCC28 \uACC4\uC0B0\n\n /**\n * \uAE30\uC900 \uC5F0\uB3C4\uC640 \uC6D4\uC744 \uC8FC\uCC28 \uC815\uBCF4\uB97C \uAE30\uBC18\uC73C\uB85C \uBC18\uD658\n * @param weekStartDay \uC8FC\uC758 \uC2DC\uC791 \uC694\uC77C (0=\uC77C\uC694\uC77C, 1=\uC6D4\uC694\uC77C, ..., 6=\uD1A0\uC694\uC77C). \uAE30\uBCF8\uAC12: 1(\uC6D4\uC694\uC77C)\n * @param minDaysInFirstWeek \uCCAB \uC8FC\uB85C \uAC04\uC8FC\uD560 \uCD5C\uC18C \uC77C\uC218 (1~7). \uAE30\uBCF8\uAC12: 4 (ISO 8601 \uD45C\uC900)\n * @returns \uD574\uB2F9 \uB0A0\uC9DC\uAC00 \uC18D\uD55C \uC8FC\uCC28\uC758 \uAE30\uC900 \uC5F0\uB3C4\uC640 \uC6D4\n *\n * @example\n * // ISO 8601 \uD45C\uC900 (\uC6D4\uC694\uC77C \uC2DC\uC791, \uCCAB \uC8FC \uCD5C\uC18C 4\uC77C)\n * new DateOnly(2024, 1, 1).getBaseYearMonthSeqForWeekSeq(1, 4)\n * // \uBBF8\uAD6D\uC2DD (\uC77C\uC694\uC77C \uC2DC\uC791, \uCCAB \uC8FC \uCD5C\uC18C 1\uC77C)\n * new DateOnly(2024, 1, 1).getBaseYearMonthSeqForWeekSeq(0, 1)\n */\n getBaseYearMonthSeqForWeekSeq(weekStartDay: number = 1, minDaysInFirstWeek: number = 4) {\n // \uC8FC\uC758 \uC2DC\uC791 \uC694\uC77C \uAE30\uC900\uC73C\uB85C \uD604\uC7AC \uB0A0\uC9DC\uC758 \uC694\uC77C \uC778\uB371\uC2A4 \uACC4\uC0B0 (0 = \uC8FC \uC2DC\uC791\uC77C)\n const dayOfWeek = (this.dayOfWeek + 7 - weekStartDay) % 7;\n // \uD604\uC7AC \uC8FC\uC758 \uB0A8\uC740 \uC77C\uC218 (\uD604\uC7AC \uB0A0\uC9DC \uD3EC\uD568)\n const daysInWeek = 7 - dayOfWeek;\n\n // \uD604\uC7AC \uC8FC\uC758 \uB0A8\uC740 \uC77C\uC218\uAC00 \uCCAB \uC8FC \uCD5C\uC18C \uC77C\uC218 \uBBF8\uB9CC\uC774\uBA74 \uC774\uC804 \uC8FC\uB85C \uAC04\uC8FC\n if (daysInWeek < minDaysInFirstWeek) {\n const prevWeek = this.addDays(-7);\n return { year: prevWeek.year, monthSeq: prevWeek.month };\n } else {\n // \uC6D4 \uACBD\uACC4\uB97C \uACE0\uB824\uD55C \uC2E4\uC81C \uC8FC\uC758 \uB0A8\uC740 \uC77C\uC218 \uACC4\uC0B0\n const nextMonthDate = this.addMonths(1).setDay(1);\n const remainedDays = (nextMonthDate.tick - this.tick) / DateOnly.MS_PER_DAY;\n\n // \uC6D4 \uACBD\uACC4\uAE4C\uC9C0\uC758 \uC2E4\uC81C \uC77C\uC218\uC640 \uC8FC\uC758 \uB0A8\uC740 \uC77C\uC218 \uC911 \uC791\uC740 \uAC12\n const realDaysInWeek = Math.min(daysInWeek, remainedDays);\n // \uC6D4 \uACBD\uACC4 \uACE0\uB824 \uC2DC\uC5D0\uB3C4 \uCCAB \uC8FC \uCD5C\uC18C \uC77C\uC218 \uBBF8\uB9CC\uC774\uBA74 \uB2E4\uC74C \uC8FC\uB85C \uAC04\uC8FC\n if (realDaysInWeek < minDaysInFirstWeek) {\n const nextWeek = this.addDays(7);\n return { year: nextWeek.year, monthSeq: nextWeek.month };\n } else {\n return { year: this.year, monthSeq: this.month };\n }\n }\n }\n\n /**\n * \uC8FC\uCC28 \uC815\uBCF4\uB97C \uAE30\uBC18\uC73C\uB85C \uD574\uB2F9 \uC8FC\uC758 \uC2DC\uC791 \uB0A0\uC9DC \uACC4\uC0B0\n * @param weekStartDay \uC8FC\uC758 \uC2DC\uC791 \uC694\uC77C (0=\uC77C\uC694\uC77C, 1=\uC6D4\uC694\uC77C, ..., 6=\uD1A0\uC694\uC77C). \uAE30\uBCF8\uAC12: 1(\uC6D4\uC694\uC77C)\n * @param minDaysInFirstWeek \uCCAB \uC8FC\uB85C \uAC04\uC8FC\uD560 \uCD5C\uC18C \uC77C\uC218 (1~7). \uAE30\uBCF8\uAC12: 4 (ISO 8601 \uD45C\uC900)\n * @returns \uD574\uB2F9 \uB0A0\uC9DC\uAC00 \uC18D\uD55C \uC8FC\uC758 \uC2DC\uC791 \uB0A0\uC9DC\n */\n getWeekSeqStartDate(weekStartDay: number = 1, minDaysInFirstWeek: number = 4) {\n const dayOfWeek = (this.dayOfWeek + 7 - weekStartDay) % 7;\n const daysInFirstWeek = 7 - dayOfWeek;\n\n if (daysInFirstWeek < minDaysInFirstWeek) {\n return this.addDays(-dayOfWeek + 7);\n } else {\n return this.addDays(-dayOfWeek);\n }\n }\n\n /**\n * \uC5F0\uB3C4 \uBC0F \uC8FC\uCC28 \uC21C\uC11C \uC815\uBCF4\uB97C \uBC18\uD658\n * @param weekStartDay \uC8FC\uC758 \uC2DC\uC791 \uC694\uC77C (0=\uC77C\uC694\uC77C, 1=\uC6D4\uC694\uC77C, ..., 6=\uD1A0\uC694\uC77C). \uAE30\uBCF8\uAC12: 1(\uC6D4\uC694\uC77C)\n * @param minDaysInFirstWeek \uCCAB \uC8FC\uB85C \uAC04\uC8FC\uD560 \uCD5C\uC18C \uC77C\uC218 (1~7). \uAE30\uBCF8\uAC12: 4 (ISO 8601 \uD45C\uC900)\n * @returns \uC5F0\uB3C4\uC640 \uD574\uB2F9 \uC5F0\uB3C4 \uAE30\uC900 \uC8FC\uCC28 \uBC88\uD638\n *\n * @example\n * // ISO 8601 \uD45C\uC900 (\uC6D4\uC694\uC77C \uC2DC\uC791, \uCCAB \uC8FC 4\uC77C \uC774\uC0C1)\n * new DateOnly(2025, 1, 6).getWeekSeqOfYear(); // { year: 2025, weekSeq: 2 }\n *\n * // \uBBF8\uAD6D\uC2DD (\uC77C\uC694\uC77C \uC2DC\uC791, \uCCAB \uC8FC 1\uC77C \uC774\uC0C1)\n * new DateOnly(2025, 1, 1).getWeekSeqOfYear(0, 1); // { year: 2025, weekSeq: 1 }\n */\n getWeekSeqOfYear(weekStartDay: number = 1, minDaysInFirstWeek: number = 4): { year: number; weekSeq: number } {\n const base = this.getBaseYearMonthSeqForWeekSeq(weekStartDay, minDaysInFirstWeek);\n\n const firstWeekStart = new DateOnly(base.year, 1, 1).getWeekSeqStartDate(weekStartDay, minDaysInFirstWeek);\n\n const diffDays = (this.tick - firstWeekStart.tick) / DateOnly.MS_PER_DAY;\n return {\n year: base.year,\n weekSeq: Math.floor(diffDays / 7) + 1,\n };\n }\n\n /**\n * \uD574\uB2F9 \uB0A0\uC9DC\uC758 \uC5F0\uB3C4, \uC6D4 \uBC0F \uC8FC\uCC28(weekSeq) \uC815\uBCF4\uB97C \uBC18\uD658\n * @param weekStartDay \uC8FC\uC758 \uC2DC\uC791 \uC694\uC77C (0=\uC77C\uC694\uC77C, 1=\uC6D4\uC694\uC77C, ..., 6=\uD1A0\uC694\uC77C). \uAE30\uBCF8\uAC12: 1(\uC6D4\uC694\uC77C)\n * @param minDaysInFirstWeek \uCCAB \uC8FC\uB85C \uAC04\uC8FC\uD560 \uCD5C\uC18C \uC77C\uC218 (1~7). \uAE30\uBCF8\uAC12: 4 (ISO 8601 \uD45C\uC900)\n * @returns \uC5F0\uB3C4, \uC6D4 \uBC0F \uD574\uB2F9 \uC6D4 \uAE30\uC900 \uC8FC\uCC28 \uBC88\uD638\n *\n * @example\n * // ISO 8601 \uD45C\uC900 (\uC6D4\uC694\uC77C \uC2DC\uC791, \uCCAB \uC8FC 4\uC77C \uC774\uC0C1)\n * new DateOnly(2025, 1, 15).getWeekSeqOfMonth(); // { year: 2025, monthSeq: 1, weekSeq: 3 }\n *\n * // \uBBF8\uAD6D\uC2DD (\uC77C\uC694\uC77C \uC2DC\uC791, \uCCAB \uC8FC 1\uC77C \uC774\uC0C1)\n * new DateOnly(2025, 1, 15).getWeekSeqOfMonth(0, 1); // { year: 2025, monthSeq: 1, weekSeq: 3 }\n */\n getWeekSeqOfMonth(\n weekStartDay: number = 1,\n minDaysInFirstWeek: number = 4,\n ): { year: number; monthSeq: number; weekSeq: number } {\n const base = this.getBaseYearMonthSeqForWeekSeq(weekStartDay, minDaysInFirstWeek);\n\n const firstWeekStart = new DateOnly(base.year, base.monthSeq, 1).getWeekSeqStartDate(\n weekStartDay,\n minDaysInFirstWeek,\n );\n\n const diffDays = (this.tick - firstWeekStart.tick) / DateOnly.MS_PER_DAY;\n return {\n year: base.year,\n monthSeq: base.monthSeq,\n weekSeq: Math.floor(diffDays / 7) + 1,\n };\n }\n\n /**\n * \uC8FC\uCC28 \uC815\uBCF4\uB97C \uAE30\uBC18\uC73C\uB85C \uD574\uB2F9 \uC8FC\uC758 \uC2DC\uC791 \uB0A0\uC9DC \uAC00\uC838\uC624\uAE30\n * @param arg \uC5F0\uB3C4, \uC120\uD0DD\uC801 \uC6D4, \uC8FC\uCC28 \uBC88\uD638\n * @param weekStartDay \uC8FC\uC758 \uC2DC\uC791 \uC694\uC77C (0=\uC77C\uC694\uC77C, 1=\uC6D4\uC694\uC77C, ..., 6=\uD1A0\uC694\uC77C). \uAE30\uBCF8\uAC12: 1(\uC6D4\uC694\uC77C)\n * @param minDaysInFirstWeek \uCCAB \uC8FC\uB85C \uAC04\uC8FC\uD560 \uCD5C\uC18C \uC77C\uC218 (1~7). \uAE30\uBCF8\uAC12: 4 (ISO 8601 \uD45C\uC900)\n * @returns \uD574\uB2F9 \uC8FC\uCC28\uC758 \uC2DC\uC791 \uB0A0\uC9DC\n *\n * @example\n * // 2025\uB144 2\uC8FC\uCC28\uC758 \uC2DC\uC791\uC77C (ISO 8601 \uD45C\uC900)\n * DateOnly.getDateByYearWeekSeq({ year: 2025, weekSeq: 2 }); // 2025-01-06 (\uC6D4\uC694\uC77C)\n *\n * // 2025\uB144 1\uC6D4 3\uC8FC\uCC28\uC758 \uC2DC\uC791\uC77C\n * DateOnly.getDateByYearWeekSeq({ year: 2025, month: 1, weekSeq: 3 }); // 2025-01-13 (\uC6D4\uC694\uC77C)\n */\n static getDateByYearWeekSeq(\n arg: { year: number; month?: number; weekSeq: number },\n weekStartDay: number = 1,\n minDaysInFirstWeek: number = 4,\n ) {\n return new DateOnly(arg.year, arg.month ?? 1, (arg.weekSeq - 1) * 7 + 1).getWeekSeqStartDate(\n weekStartDay,\n minDaysInFirstWeek,\n );\n }\n\n //#endregion\n\n //#region Getters (\uC77D\uAE30 \uC804\uC6A9)\n\n /** \uB0A0\uC9DC \uC138\uD305\uC774 \uC81C\uB300\uB85C \uB418\uC5C8\uB294\uC9C0 \uC5EC\uBD80 */\n get isValid(): boolean {\n return this.date instanceof Date && !Number.isNaN(this.date.getTime());\n }\n\n get year(): number {\n return this.date.getFullYear();\n }\n\n get month(): number {\n return this.date.getMonth() + 1;\n }\n\n get day(): number {\n return this.date.getDate();\n }\n\n get tick(): number {\n return this.date.getTime();\n }\n\n /** \uC694\uC77C (\uC77C~\uD1A0: 0~6) */\n get dayOfWeek(): number {\n return this.date.getDay();\n }\n\n //#endregion\n\n //#region \uBD88\uBCC0 \uBCC0\uD658 \uBA54\uC11C\uB4DC (\uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658)\n\n /** \uC9C0\uC815\uB41C \uC5F0\uB3C4\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setYear(year: number): DateOnly {\n return new DateOnly(year, this.month, this.day);\n }\n\n /**\n * \uC9C0\uC815\uB41C \uC6D4\uB85C \uC0C8 DateOnly \uC778\uC2A4\uD134\uC2A4\uB97C \uBC18\uD658\n * @param month \uC124\uC815\uD560 \uC6D4 (1-12, \uBC94\uC704 \uC678 \uAC12\uC740 \uC5F0\uB3C4 \uC870\uC815)\n * @note \uB300\uC0C1 \uC6D4\uC758 \uC77C\uC218\uBCF4\uB2E4 \uD604\uC7AC \uC77C\uC790\uAC00 \uD06C\uBA74 \uD574\uB2F9 \uC6D4\uC758 \uB9C8\uC9C0\uB9C9 \uB0A0\uB85C \uC870\uC815\uB428\n * (\uC608: 1\uC6D4 31\uC77C\uC5D0\uC11C setMonth(2) \u2192 2\uC6D4 28\uC77C \uB610\uB294 29\uC77C)\n */\n setMonth(month: number): DateOnly {\n const normalized = normalizeMonth(this.year, month, this.day);\n return new DateOnly(normalized.year, normalized.month, normalized.day);\n }\n\n /**\n * \uC9C0\uC815\uB41C \uC77C\uC790\uB85C \uC0C8 DateOnly \uC778\uC2A4\uD134\uC2A4\uB97C \uBC18\uD658\n * @param day \uC124\uC815\uD560 \uC77C\uC790\n * @note \uD574\uB2F9 \uC6D4\uC758 \uC720\uD6A8 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uB294 \uC77C\uC790\uB294 JavaScript Date \uAE30\uBCF8 \uB3D9\uC791\uC5D0 \uB530\uB77C\n * \uC790\uB3D9\uC73C\uB85C \uB2E4\uC74C/\uC774\uC804 \uB2EC\uB85C \uC870\uC815\uB428 (\uC608: 1\uC6D4\uC5D0 day=32 \u2192 2\uC6D4 1\uC77C)\n */\n setDay(day: number): DateOnly {\n return new DateOnly(this.year, this.month, day);\n }\n\n //#endregion\n\n //#region \uC0B0\uC220 \uBA54\uC11C\uB4DC (\uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658)\n\n /** \uC9C0\uC815\uB41C \uC5F0\uC218\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addYears(years: number): DateOnly {\n return this.setYear(this.year + years);\n }\n\n /** \uC9C0\uC815\uB41C \uC6D4\uC218\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addMonths(months: number): DateOnly {\n return this.setMonth(this.month + months);\n }\n\n /** \uC9C0\uC815\uB41C \uC77C\uC218\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addDays(days: number): DateOnly {\n return new DateOnly(this.tick + days * DateOnly.MS_PER_DAY);\n }\n\n //#endregion\n\n //#region \uD3EC\uB9F7\uD305\n\n /**\n * \uC9C0\uC815\uB41C \uD3EC\uB9F7\uC73C\uB85C \uBB38\uC790\uC5F4 \uBCC0\uD658\n * @param format \uD3EC\uB9F7 \uBB38\uC790\uC5F4\n * @see dtFormat \uC9C0\uC6D0 \uD3EC\uB9F7 \uBB38\uC790\uC5F4 \uCC38\uC870\n */\n toFormatString(formatStr: string): string {\n return formatDate(formatStr, {\n year: this.year,\n month: this.month,\n day: this.day,\n });\n }\n\n toString(): string {\n return this.toFormatString(\"yyyy-MM-dd\");\n }\n\n //#endregion\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/date-time.ts"],
|
|
4
|
-
"sourcesContent": ["import { ArgumentError } from \"../errors/argument-error\";\nimport { convert12To24, formatDate, normalizeMonth } from \"../utils/date-format\";\n\n/**\n * \uB0A0\uC9DC\uC2DC\uAC04 \uD074\uB798\uC2A4 (\uBD88\uBCC0)\n *\n * JavaScript Date \uAC1D\uCCB4\uB97C \uB798\uD551\uD558\uC5EC \uBD88\uBCC0\uC131\uACFC \uD3B8\uB9AC\uD55C API\uB97C \uC81C\uACF5\uD55C\uB2E4.\n * \uBC00\uB9AC\uCD08 \uB2E8\uC704\uAE4C\uC9C0 \uC9C0\uC6D0\uD558\uBA70, \uB85C\uCEEC \uD0C0\uC784\uC874\uC744 \uAE30\uC900\uC73C\uB85C \uB3D9\uC791\uD55C\uB2E4.\n *\n * @example\n * const now = new DateTime();\n * const specific = new DateTime(2025, 1, 15, 10, 30, 0);\n * const parsed = DateTime.parse(\"2025-01-15 10:30:00\");\n */\nexport class DateTime {\n readonly date: Date;\n\n /** \uD604\uC7AC \uC2DC\uAC04\uC73C\uB85C \uC0DD\uC131 */\n constructor();\n /** \uC5F0\uC6D4\uC77C\uC2DC\uBD84\uCD08\uBC00\uB9AC\uCD08\uB85C \uC0DD\uC131 */\n constructor(\n year: number,\n month: number,\n day: number,\n hour?: number,\n minute?: number,\n second?: number,\n millisecond?: number,\n );\n /** tick (\uBC00\uB9AC\uCD08)\uC73C\uB85C \uC0DD\uC131 */\n constructor(tick: number);\n /** Date \uAC1D\uCCB4\uB85C \uC0DD\uC131 */\n constructor(date: Date);\n constructor(\n arg1?: number | Date,\n arg2?: number,\n arg3?: number,\n arg4?: number,\n arg5?: number,\n arg6?: number,\n arg7?: number,\n ) {\n if (arg1 === undefined) {\n this.date = new Date();\n } else if (arg2 !== undefined && arg3 !== undefined) {\n this.date = new Date(arg1 as number, arg2 - 1, arg3, arg4 ?? 0, arg5 ?? 0, arg6 ?? 0, arg7 ?? 0);\n } else if (arg1 instanceof Date) {\n this.date = new Date(arg1.getTime());\n } else {\n this.date = new Date(arg1);\n }\n }\n\n /**\n * \uBB38\uC790\uC5F4\uC744 \uD30C\uC2F1\uD558\uC5EC DateTime \uC778\uC2A4\uD134\uC2A4\uB97C \uC0DD\uC131\n *\n * @param str \uB0A0\uC9DC\uC2DC\uAC04 \uBB38\uC790\uC5F4\n * @returns \uD30C\uC2F1\uB41C DateTime \uC778\uC2A4\uD134\uC2A4\n * @throws ArgumentError \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD615\uC2DD\uC778 \uACBD\uC6B0\n *\n * @example\n * DateTime.parse(\"2025-01-15 10:30:00\") // yyyy-MM-dd HH:mm:ss\n * DateTime.parse(\"2025-01-15 10:30:00.123\") // yyyy-MM-dd HH:mm:ss.fff\n * DateTime.parse(\"20250115103000\") // yyyyMMddHHmmss\n * DateTime.parse(\"2025-01-15 \uC624\uC804 10:30:00\") // yyyy-MM-dd \uC624\uC804/\uC624\uD6C4 HH:mm:ss\n * DateTime.parse(\"2025-01-15T10:30:00Z\") // ISO 8601\n */\n static parse(str: string): DateTime {\n const parsedTick = Date.parse(str);\n if (!Number.isNaN(parsedTick)) {\n return new DateTime(parsedTick);\n }\n\n const match1 =\n /^([0-9]{4})-([0-9]{2})-([0-9]{2}) (\uC624\uC804|\uC624\uD6C4) ([0-9]{1,2}):([0-9]{2}):([0-9]{2})(\\.([0-9]{1,3}))?$/.exec(str);\n if (match1 != null) {\n const rawHour = Number(match1[5]);\n const isPM = match1[4] === \"\uC624\uD6C4\";\n const hour = convert12To24(rawHour, isPM);\n return new DateTime(\n Number(match1[1]),\n Number(match1[2]),\n Number(match1[3]),\n hour,\n Number(match1[6]),\n Number(match1[7]),\n match1[9] ? Number(match1[9].padEnd(3, \"0\")) : undefined,\n );\n }\n\n const match2 = /^[0-9]{14}$/.exec(str);\n if (match2 != null) {\n return new DateTime(\n Number(str.substring(0, 4)),\n Number(str.substring(4, 6)),\n Number(str.substring(6, 8)),\n Number(str.substring(8, 10)),\n Number(str.substring(10, 12)),\n Number(str.substring(12, 14)),\n );\n }\n\n const match3 = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})(\\.([0-9]{1,3}))?$/.exec(str);\n if (match3 != null) {\n return new DateTime(\n Number(match3[1]),\n Number(match3[2]),\n Number(match3[3]),\n Number(match3[4]),\n Number(match3[5]),\n Number(match3[6]),\n match3[8] ? Number(match3[8].padEnd(3, \"0\")) : undefined,\n );\n }\n\n throw new ArgumentError(\n `\uB0A0\uC9DC\uC2DC\uAC04 \uD615\uC2DD\uC744 \uD30C\uC2F1\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC9C0\uC6D0 \uD615\uC2DD: 'yyyy-MM-dd HH:mm:ss', 'yyyyMMddHHmmss', 'yyyy-MM-dd \uC624\uC804/\uC624\uD6C4 HH:mm:ss', ISO 8601`,\n { input: str },\n );\n }\n\n //#region Getters (\uC77D\uAE30 \uC804\uC6A9)\n\n get year(): number {\n return this.date.getFullYear();\n }\n\n get month(): number {\n return this.date.getMonth() + 1;\n }\n\n get day(): number {\n return this.date.getDate();\n }\n\n get hour(): number {\n return this.date.getHours();\n }\n\n get minute(): number {\n return this.date.getMinutes();\n }\n\n get second(): number {\n return this.date.getSeconds();\n }\n\n get millisecond(): number {\n return this.date.getMilliseconds();\n }\n\n get tick(): number {\n return this.date.getTime();\n }\n\n /** \uC694\uC77C (\uC77C~\uD1A0: 0~6) */\n get dayOfWeek(): number {\n return this.date.getDay();\n }\n\n get timezoneOffsetMinutes(): number {\n return -this.date.getTimezoneOffset();\n }\n\n /** \uB0A0\uC9DC\uC2DC\uAC04 \uC138\uD305\uC774 \uC81C\uB300\uB85C \uB418\uC5C8\uB294\uC9C0 \uC5EC\uBD80 */\n get isValid(): boolean {\n return this.date instanceof Date && !Number.isNaN(this.date.getTime());\n }\n\n //#endregion\n\n //#region \uBD88\uBCC0 \uBCC0\uD658 \uBA54\uC11C\uB4DC (\uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658)\n\n /** \uC9C0\uC815\uB41C \uC5F0\uB3C4\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setYear(year: number): DateTime {\n return new DateTime(year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\n }\n\n /**\n * \uC9C0\uC815\uB41C \uC6D4\uB85C \uC0C8 DateTime \uC778\uC2A4\uD134\uC2A4\uB97C \uBC18\uD658\n * @param month \uC124\uC815\uD560 \uC6D4 (1-12, \uBC94\uC704 \uC678 \uAC12\uC740 \uC5F0\uB3C4 \uC870\uC815)\n * @note \uB300\uC0C1 \uC6D4\uC758 \uC77C\uC218\uBCF4\uB2E4 \uD604\uC7AC \uC77C\uC790\uAC00 \uD06C\uBA74 \uD574\uB2F9 \uC6D4\uC758 \uB9C8\uC9C0\uB9C9 \uB0A0\uB85C \uC870\uC815\uB428\n * (\uC608: 1\uC6D4 31\uC77C\uC5D0\uC11C setMonth(2) \u2192 2\uC6D4 28\uC77C \uB610\uB294 29\uC77C)\n */\n setMonth(month: number): DateTime {\n const normalized = normalizeMonth(this.year, month, this.day);\n return new DateTime(\n normalized.year,\n normalized.month,\n normalized.day,\n this.hour,\n this.minute,\n this.second,\n this.millisecond,\n );\n }\n\n /**\n * \uC9C0\uC815\uB41C \uC77C\uC790\uB85C \uC0C8 DateTime \uC778\uC2A4\uD134\uC2A4\uB97C \uBC18\uD658\n * @param day \uC124\uC815\uD560 \uC77C\uC790\n * @note \uD574\uB2F9 \uC6D4\uC758 \uC720\uD6A8 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uB294 \uC77C\uC790\uB294 JavaScript Date \uAE30\uBCF8 \uB3D9\uC791\uC5D0 \uB530\uB77C\n * \uC790\uB3D9\uC73C\uB85C \uB2E4\uC74C/\uC774\uC804 \uB2EC\uB85C \uC870\uC815\uB428 (\uC608: 1\uC6D4\uC5D0 day=32 \u2192 2\uC6D4 1\uC77C)\n */\n setDay(day: number): DateTime {\n return new DateTime(this.year, this.month, day, this.hour, this.minute, this.second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uC2DC\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setHour(hour: number): DateTime {\n return new DateTime(this.year, this.month, this.day, hour, this.minute, this.second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uBD84\uC73C\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setMinute(minute: number): DateTime {\n return new DateTime(this.year, this.month, this.day, this.hour, minute, this.second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uCD08\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setSecond(second: number): DateTime {\n return new DateTime(this.year, this.month, this.day, this.hour, this.minute, second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uBC00\uB9AC\uCD08\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setMillisecond(millisecond: number): DateTime {\n return new DateTime(this.year, this.month, this.day, this.hour, this.minute, this.second, millisecond);\n }\n\n //#endregion\n\n //#region \uC0B0\uC220 \uBA54\uC11C\uB4DC (\uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658)\n\n /** \uC9C0\uC815\uB41C \uC5F0\uC218\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addYears(years: number): DateTime {\n return this.setYear(this.year + years);\n }\n\n /** \uC9C0\uC815\uB41C \uC6D4\uC218\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addMonths(months: number): DateTime {\n return this.setMonth(this.month + months);\n }\n\n /** \uC9C0\uC815\uB41C \uC77C\uC218\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addDays(days: number): DateTime {\n return new DateTime(this.tick + days * 24 * 60 * 60 * 1000);\n }\n\n /** \uC9C0\uC815\uB41C \uC2DC\uAC04\uC744 \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addHours(hours: number): DateTime {\n return new DateTime(this.tick + hours * 60 * 60 * 1000);\n }\n\n /** \uC9C0\uC815\uB41C \uBD84\uC744 \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addMinutes(minutes: number): DateTime {\n return new DateTime(this.tick + minutes * 60 * 1000);\n }\n\n /** \uC9C0\uC815\uB41C \uCD08\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addSeconds(seconds: number): DateTime {\n return new DateTime(this.tick + seconds * 1000);\n }\n\n /** \uC9C0\uC815\uB41C \uBC00\uB9AC\uCD08\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n addMilliseconds(milliseconds: number): DateTime {\n return new DateTime(this.tick + milliseconds);\n }\n\n //#endregion\n\n //#region \uD3EC\uB9F7\uD305\n\n /**\n * \uC9C0\uC815\uB41C \uD3EC\uB9F7\uC73C\uB85C \uBB38\uC790\uC5F4 \uBCC0\uD658\n * @param format \uD3EC\uB9F7 \uBB38\uC790\uC5F4\n * @see dtFormat \uC9C0\uC6D0 \uD3EC\uB9F7 \uBB38\uC790\uC5F4 \uCC38\uC870\n */\n toFormatString(formatStr: string): string {\n return formatDate(formatStr, {\n year: this.year,\n month: this.month,\n day: this.day,\n hour: this.hour,\n minute: this.minute,\n second: this.second,\n millisecond: this.millisecond,\n timezoneOffsetMinutes: this.timezoneOffsetMinutes,\n });\n }\n\n toString(): string {\n return this.toFormatString(\"yyyy-MM-ddTHH:mm:ss.fffzzz\");\n }\n\n //#endregion\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/lazy-gc-map.ts"],
|
|
4
|
-
"sourcesContent": ["import consola from \"consola\";\n\n/**\n * \uC790\uB3D9 \uB9CC\uB8CC \uAE30\uB2A5\uC774 \uC788\uB294 Map\n * LRU \uBC29\uC2DD\uC73C\uB85C \uC811\uADFC \uC2DC\uAC04 \uAC31\uC2E0, \uC77C\uC815 \uC2DC\uAC04 \uBBF8\uC811\uADFC \uC2DC \uC790\uB3D9 \uC0AD\uC81C\n *\n * @note \uC778\uC2A4\uD134\uC2A4 \uC0AC\uC6A9 \uD6C4 \uBC18\uB4DC\uC2DC dispose()\uB97C \uD638\uCD9C\uD558\uAC70\uB098 using \uBB38\uC744 \uC0AC\uC6A9\uD574\uC57C \uD568.\n * \uADF8\uB807\uC9C0 \uC54A\uC73C\uBA74 GC \uD0C0\uC774\uBA38\uAC00 \uACC4\uC18D \uB3D9\uC791\uD558\uC5EC \uBA54\uBAA8\uB9AC \uB204\uC218 \uBC1C\uC0DD.\n *\n * @example\n * // using \uBB38 \uC0AC\uC6A9 (\uAD8C\uC7A5)\n * using map = new LazyGcMap({ gcInterval: 10000, expireTime: 60000 });\n *\n * // \uB610\uB294 \uBA85\uC2DC\uC801 dispose() \uD638\uCD9C\n * const map = new LazyGcMap({ gcInterval: 10000, expireTime: 60000 });\n * try {\n * // ... \uC0AC\uC6A9\n * } finally {\n * map.dispose();\n * }\n */\nexport class LazyGcMap<K, V> {\n private static readonly _logger = consola.withTag(\"LazyGcMap\");\n\n /**\n * dispose() \uBBF8\uD638\uCD9C \uAC10\uC9C0\uC6A9 registry\n * @note FinalizationRegistry\uB294 Chrome 84+, Node 14.6+ \uC9C0\uC6D0\n * \uBBF8\uC9C0\uC6D0 \uD658\uACBD\uC5D0\uC11C\uB294 \uACBD\uACE0 \uC5C6\uC774 \uB3D9\uC791\uD558\uC9C0\uB9CC, dispose() \uBBF8\uD638\uCD9C \uC2DC \uBA54\uBAA8\uB9AC \uB204\uC218 \uAC00\uB2A5\n */\n private static readonly _registry =\n typeof FinalizationRegistry !== \"undefined\"\n ? new FinalizationRegistry<string>((id) => {\n LazyGcMap._logger.warn(`LazyGcMap(${id})\uC774 dispose() \uC5C6\uC774 \uAC00\uBE44\uC9C0 \uC218\uC9D1\uB428. \uBA54\uBAA8\uB9AC \uB204\uC218 \uAC00\uB2A5\uC131 \uC788\uC74C.`);\n })\n : undefined;\n\n // \uC2E4\uC81C \uB370\uC774\uD130\uC640 \uB9C8\uC9C0\uB9C9 \uC811\uADFC \uC2DC\uAC04\uC744 \uD568\uAED8 \uC800\uC7A5\n private readonly _map = new Map<K, { value: V; lastAccess: number }>();\n\n // GC \uD0C0\uC774\uBA38\n private _gcTimer?: ReturnType<typeof setInterval>;\n // GC \uC2E4\uD589 \uC911 \uD50C\uB798\uADF8 (\uC911\uBCF5 \uC2E4\uD589 \uBC29\uC9C0)\n private _isGcRunning = false;\n // destroy \uD638\uCD9C \uC5EC\uBD80\n private _isDestroyed = false;\n // \uC778\uC2A4\uD134\uC2A4 \uC2DD\uBCC4\uC790 (\uACBD\uACE0 \uBA54\uC2DC\uC9C0\uC6A9)\n private readonly _instanceId = Math.random().toString(36).slice(2);\n\n /**\n * @param _options \uC124\uC815 \uC635\uC158\n * @param _options.gcInterval GC \uC8FC\uAE30 (\uBC00\uB9AC\uCD08). \uAE30\uBCF8\uAC12: expireTime\uC758 1/10 (\uCD5C\uC18C 1000ms)\n * @param _options.expireTime \uB9CC\uB8CC \uC2DC\uAC04 (\uBC00\uB9AC\uCD08). \uB9C8\uC9C0\uB9C9 \uC811\uADFC \uD6C4 \uC774 \uC2DC\uAC04\uC774 \uC9C0\uB098\uBA74 \uC0AD\uC81C\uB428. \uC608: 60000 (60\uCD08)\n * @param _options.onExpire \uB9CC\uB8CC \uC2DC \uD638\uCD9C\uB418\uB294 \uCF5C\uBC31. \uBE44\uB3D9\uAE30 \uD568\uC218\uB3C4 \uAC00\uB2A5\uD558\uBA70, \uC5D0\uB7EC \uBC1C\uC0DD \uC2DC \uB85C\uAE45 \uD6C4 \uACC4\uC18D \uC9C4\uD589\uB428\n */\n constructor(\n private readonly _options: {\n gcInterval?: number;\n expireTime: number;\n onExpire?: (key: K, value: V) => void | Promise<void>;\n },\n ) {\n LazyGcMap._registry?.register(this, this._instanceId);\n }\n\n /** \uC800\uC7A5\uB41C \uD56D\uBAA9 \uC218 */\n get size(): number {\n return this._map.size;\n }\n\n /** \uD0A4 \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778 (\uC811\uADFC \uC2DC\uAC04 \uAC31\uC2E0 \uC548\uD568) */\n has(key: K): boolean {\n if (this._isDestroyed) return false;\n return this._map.has(key);\n }\n\n /** \uAC12 \uC870\uD68C (\uC811\uADFC \uC2DC\uAC04 \uAC31\uC2E0\uB428) */\n get(key: K): V | undefined {\n if (this._isDestroyed) return undefined;\n const item = this._map.get(key);\n if (item == null) return undefined;\n\n // \uC811\uADFC \uC2DC \uC2DC\uAC04 \uAC31\uC2E0 (LRU)\n item.lastAccess = Date.now();\n return item.value;\n }\n\n /** \uAC12 \uC800\uC7A5 (\uC811\uADFC \uC2DC\uAC04 \uC124\uC815 \uBC0F GC \uD0C0\uC774\uBA38 \uC2DC\uC791) */\n set(key: K, value: V): void {\n if (this._isDestroyed) return;\n this._map.set(key, { value, lastAccess: Date.now() });\n // \uB370\uC774\uD130\uAC00 \uB4E4\uC5B4\uC654\uC73C\uBBC0\uB85C GC \uD0C0\uC774\uBA38 \uAC00\uB3D9\n this._startGc();\n }\n\n /** \uD56D\uBAA9 \uC0AD\uC81C (\uBE44\uC5C8\uC73C\uBA74 GC \uD0C0\uC774\uBA38 \uC911\uC9C0) */\n delete(key: K): boolean {\n if (this._isDestroyed) return false;\n const result = this._map.delete(key);\n // \uBE44\uC5C8\uC73C\uBA74 \uD0C0\uC774\uBA38 \uC911\uC9C0\n if (this._map.size === 0) {\n this._stopGc();\n }\n return result;\n }\n\n /** \uC778\uC2A4\uD134\uC2A4 \uC815\uB9AC (GC \uD0C0\uC774\uBA38 \uC911\uC9C0 \uBC0F \uB370\uC774\uD130 \uC0AD\uC81C) */\n dispose(): void {\n if (this._isDestroyed) return;\n this._isDestroyed = true;\n LazyGcMap._registry?.unregister(this);\n\n this._map.clear();\n this._stopGc();\n }\n\n /** using \uBB38 \uC9C0\uC6D0 */\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n /**\n * \uBAA8\uB4E0 \uD56D\uBAA9 \uC0AD\uC81C (\uC778\uC2A4\uD134\uC2A4\uB294 \uACC4\uC18D \uC0AC\uC6A9 \uAC00\uB2A5)\n */\n clear(): void {\n if (this._isDestroyed) return;\n this._map.clear();\n this._stopGc();\n }\n\n /**\n * \uD0A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uAC12\uC744 \uBC18\uD658\uD558\uACE0, \uC5C6\uC73C\uBA74 factory\uB85C \uC0DD\uC131 \uD6C4 \uC800\uC7A5\uD558\uC5EC \uBC18\uD658\n * @param key \uC870\uD68C\uD560 \uD0A4\n * @param factory \uD0A4\uAC00 \uC5C6\uC744 \uB54C \uAC12\uC744 \uC0DD\uC131\uD558\uB294 \uD568\uC218\n * @returns \uAE30\uC874 \uAC12 \uB610\uB294 \uC0C8\uB85C \uC0DD\uC131\uB41C \uAC12\n */\n getOrCreate(key: K, factory: () => V): V {\n if (this._isDestroyed) {\n throw new Error(\"LazyGcMap\uC774 \uC774\uBBF8 dispose\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\");\n }\n const item = this._map.get(key);\n if (item == null) {\n const value = factory();\n this.set(key, value);\n return value;\n }\n\n item.lastAccess = Date.now();\n return item.value;\n }\n\n /** \uAC12\uB4E4\uB9CC \uC21C\uD68C (Iterator) */\n *values(): IterableIterator<V> {\n if (this._isDestroyed) return;\n for (const item of this._map.values()) {\n yield item.value;\n }\n }\n\n /** \uD0A4\uB4E4\uB9CC \uC21C\uD68C (Iterator) */\n *keys(): IterableIterator<K> {\n if (this._isDestroyed) return;\n yield* this._map.keys();\n }\n\n /** \uC5D4\uD2B8\uB9AC \uC21C\uD68C (Iterator) */\n *entries(): IterableIterator<[K, V]> {\n if (this._isDestroyed) return;\n for (const [key, item] of this._map.entries()) {\n yield [key, item.value];\n }\n }\n\n //#region GC \uB85C\uC9C1\n\n private _startGc(): void {\n if (this._isDestroyed) return;\n if (this._gcTimer != null) return;\n\n const interval = this._options.gcInterval ?? Math.max(this._options.expireTime / 10, 1000);\n this._gcTimer = setInterval(() => {\n void this._runGc();\n }, interval);\n }\n\n private async _runGc(): Promise<void> {\n // \uC774\uBBF8 \uC2E4\uD589 \uC911\uC774\uBA74 \uC2A4\uD0B5 (onExpire \uCF5C\uBC31\uC774 \uC624\uB798 \uAC78\uB9AC\uB294 \uACBD\uC6B0 \uC911\uBCF5 \uC2E4\uD589 \uBC29\uC9C0)\n if (this._isGcRunning) return;\n this._isGcRunning = true;\n\n try {\n const now = Date.now();\n\n // 1. \uB9CC\uB8CC\uB41C \uD56D\uBAA9 \uC218\uC9D1 (\uC0AD\uC81C \uC804)\n const expiredEntries: { key: K; item: { value: V; lastAccess: number } }[] = [];\n for (const [key, item] of this._map) {\n if (now - item.lastAccess > this._options.expireTime) {\n expiredEntries.push({ key, item });\n }\n }\n\n // 2. \uAC01 \uD56D\uBAA9\uC5D0 \uB300\uD574 \uCF5C\uBC31 \uC2E4\uD589 \uD6C4 \uC0AD\uC81C\n for (const { key, item } of expiredEntries) {\n // \uCF5C\uBC31 \uC2E4\uD589 \uC804 \uD604\uC7AC \uC0C1\uD0DC \uD655\uC778 (\uC774\uBBF8 \uB2E4\uB978 \uAC12\uC73C\uB85C \uAD50\uCCB4\uB418\uC5C8\uAC70\uB098 \uC0AD\uC81C\uB418\uC5C8\uC73C\uBA74 \uC2A4\uD0B5)\n const currentItem = this._map.get(key);\n if (currentItem !== item) {\n continue;\n }\n\n // \uB9CC\uB8CC \uCF5C\uBC31 \uC2E4\uD589\n if (this._options.onExpire != null) {\n try {\n await this._options.onExpire(key, item.value);\n } catch (err) {\n LazyGcMap._logger.error(\"onExpire \uCF5C\uBC31 \uC5D0\uB7EC\", err);\n }\n }\n\n // \uCF5C\uBC31 \uD6C4 \uC7AC\uB4F1\uB85D \uC5EC\uBD80 \uD655\uC778\n // \uC2DC\uB098\uB9AC\uC624: onExpire \uCF5C\uBC31\uC5D0\uC11C \uB3D9\uC77C \uD0A4\uB85C \uC0C8 \uAC12\uC744 set()\uD55C \uACBD\uC6B0,\n // \uC0C8\uB85C \uB4F1\uB85D\uB41C \uD56D\uBAA9\uC744 \uC0AD\uC81C\uD558\uBA74 \uC548 \uB428. item \uCC38\uC870\uAC00 \uAC19\uC73C\uBA74 \uC7AC\uB4F1\uB85D\uB418\uC9C0 \uC54A\uC740 \uAC83\uC774\uBBC0\uB85C \uC0AD\uC81C \uC9C4\uD589.\n const afterItem = this._map.get(key);\n if (afterItem === item) {\n this._map.delete(key);\n }\n }\n\n // GC \uD6C4 \uBE44\uC5C8\uC73C\uBA74 \uB044\uAE30\n if (this._map.size === 0) {\n this._stopGc();\n }\n } finally {\n this._isGcRunning = false;\n }\n }\n\n private _stopGc(): void {\n if (this._gcTimer != null) {\n clearInterval(this._gcTimer);\n this._gcTimer = undefined;\n }\n }\n\n //#endregion\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/dist/types/time.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/time.ts"],
|
|
4
|
-
"sourcesContent": ["import { ArgumentError } from \"../errors/argument-error\";\nimport { convert12To24, formatDate } from \"../utils/date-format\";\n\n/**\n * \uC2DC\uAC04 \uD074\uB798\uC2A4 (\uB0A0\uC9DC\uC81C\uC678: HH:mm:ss.fff, \uBD88\uBCC0)\n *\n * \uB0A0\uC9DC \uC815\uBCF4 \uC5C6\uC774 \uC2DC\uAC04\uB9CC \uC800\uC7A5\uD558\uB294 \uBD88\uBCC0 \uD074\uB798\uC2A4\uC774\uB2E4.\n * 24\uC2DC\uAC04\uC744 \uCD08\uACFC\uD558\uAC70\uB098 \uC74C\uC218\uC778 \uACBD\uC6B0 \uC790\uB3D9\uC73C\uB85C \uC815\uADDC\uD654\uB41C\uB2E4.\n *\n * @example\n * const now = new Time();\n * const specific = new Time(10, 30, 0);\n * const parsed = Time.parse(\"10:30:00\");\n */\nexport class Time {\n private static readonly MS_PER_DAY = 24 * 60 * 60 * 1000;\n\n private readonly _tick: number;\n\n /** \uD604\uC7AC \uC2DC\uAC04\uC73C\uB85C \uC0DD\uC131 */\n constructor();\n /** \uC2DC\uBD84\uCD08\uBC00\uB9AC\uCD08\uB85C \uC0DD\uC131 */\n constructor(hour: number, minute: number, second?: number, millisecond?: number);\n /** tick (\uBC00\uB9AC\uCD08)\uC73C\uB85C \uC0DD\uC131 */\n constructor(tick: number);\n /** Date \uAC1D\uCCB4\uC5D0\uC11C \uC2DC\uAC04 \uBD80\uBD84\uB9CC \uCD94\uCD9C\uD558\uC5EC \uC0DD\uC131 */\n constructor(date: Date);\n constructor(arg1?: number | Date, arg2?: number, arg3?: number, arg4?: number) {\n if (arg1 === undefined) {\n const now = new Date();\n this._tick =\n (now.getMilliseconds() +\n now.getSeconds() * 1000 +\n now.getMinutes() * 60 * 1000 +\n now.getHours() * 60 * 60 * 1000) %\n Time.MS_PER_DAY;\n } else if (arg2 !== undefined) {\n let tick =\n ((arg4 ?? 0) + (arg3 ?? 0) * 1000 + arg2 * 60 * 1000 + (arg1 as number) * 60 * 60 * 1000) % Time.MS_PER_DAY;\n if (tick < 0) tick += Time.MS_PER_DAY;\n this._tick = tick;\n } else if (arg1 instanceof Date) {\n this._tick =\n (arg1.getMilliseconds() +\n arg1.getSeconds() * 1000 +\n arg1.getMinutes() * 60 * 1000 +\n arg1.getHours() * 60 * 60 * 1000) %\n Time.MS_PER_DAY;\n } else {\n let tick = arg1 % Time.MS_PER_DAY;\n if (tick < 0) tick += Time.MS_PER_DAY;\n this._tick = tick;\n }\n }\n\n /**\n * \uBB38\uC790\uC5F4\uC744 \uD30C\uC2F1\uD558\uC5EC Time \uC778\uC2A4\uD134\uC2A4\uB97C \uC0DD\uC131\n *\n * @param str \uC2DC\uAC04 \uBB38\uC790\uC5F4\n * @returns \uD30C\uC2F1\uB41C Time \uC778\uC2A4\uD134\uC2A4\n * @throws ArgumentError \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD615\uC2DD\uC778 \uACBD\uC6B0\n *\n * @example\n * Time.parse(\"10:30:00\") // HH:mm:ss\n * Time.parse(\"10:30:00.123\") // HH:mm:ss.fff\n * Time.parse(\"\uC624\uC804 10:30:00\") // \uC624\uC804/\uC624\uD6C4 HH:mm:ss\n * Time.parse(\"2025-01-15T10:30:00\") // ISO 8601 (\uC2DC\uAC04 \uBD80\uBD84\uB9CC \uCD94\uCD9C)\n */\n static parse(str: string): Time {\n const match1 = /(\uC624\uC804|\uC624\uD6C4) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(\\.([0-9]{1,3}))?$/.exec(str);\n if (match1 != null) {\n const rawHour = Number(match1[2]);\n const isPM = match1[1] === \"\uC624\uD6C4\";\n const hour = convert12To24(rawHour, isPM);\n return new Time(hour, Number(match1[3]), Number(match1[4]), Number(match1[6] ? match1[6].padEnd(3, \"0\") : \"0\"));\n }\n\n const match2 = /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(\\.([0-9]{1,3}))?$/.exec(str);\n if (match2 != null) {\n return new Time(\n Number(match2[1]),\n Number(match2[2]),\n Number(match2[3]),\n Number(match2[5] ? match2[5].padEnd(3, \"0\") : \"0\"),\n );\n }\n\n // ISO 8601 \uD615\uC2DD (\uC608: 2025-01-15T10:30:00.123Z, 2025-01-15T10:30:00+09:00)\n // Date \uAC1D\uCCB4\uB97C \uC0AC\uC6A9\uD558\uC5EC \uD0C0\uC784\uC874 \uBCC0\uD658 \uCC98\uB9AC\n const isoMatch = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.exec(str);\n if (isoMatch != null) {\n const date = new Date(str);\n if (!Number.isNaN(date.getTime())) {\n return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n }\n\n throw new ArgumentError(\n `\uC2DC\uAC04 \uD615\uC2DD\uC744 \uD30C\uC2F1\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC9C0\uC6D0 \uD615\uC2DD: 'HH:mm:ss', 'HH:mm:ss.fff', '\uC624\uC804/\uC624\uD6C4 HH:mm:ss', ISO 8601`,\n { input: str },\n );\n }\n\n //#region Getters (\uC77D\uAE30 \uC804\uC6A9)\n\n get hour(): number {\n return Math.floor(this._tick / (60 * 60 * 1000));\n }\n\n get minute(): number {\n return Math.floor(this._tick / (60 * 1000)) % 60;\n }\n\n get second(): number {\n return Math.floor(this._tick / 1000) % 60;\n }\n\n get millisecond(): number {\n return this._tick % 1000;\n }\n\n get tick(): number {\n return this._tick;\n }\n\n /** \uC2DC\uAC04 \uC138\uD305\uC774 \uC81C\uB300\uB85C \uB418\uC5C8\uB294\uC9C0 \uC5EC\uBD80 */\n get isValid(): boolean {\n return !Number.isNaN(this._tick);\n }\n\n //#endregion\n\n //#region \uBD88\uBCC0 \uBCC0\uD658 \uBA54\uC11C\uB4DC (\uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658)\n\n /** \uC9C0\uC815\uB41C \uC2DC\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setHour(hour: number): Time {\n return new Time(hour, this.minute, this.second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uBD84\uC73C\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setMinute(minute: number): Time {\n return new Time(this.hour, minute, this.second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uCD08\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setSecond(second: number): Time {\n return new Time(this.hour, this.minute, second, this.millisecond);\n }\n\n /** \uC9C0\uC815\uB41C \uBC00\uB9AC\uCD08\uB85C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 */\n setMillisecond(millisecond: number): Time {\n return new Time(this.hour, this.minute, this.second, millisecond);\n }\n\n //#endregion\n\n //#region \uC0B0\uC220 \uBA54\uC11C\uB4DC (\uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658)\n\n /** \uC9C0\uC815\uB41C \uC2DC\uAC04\uC744 \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 (24\uC2DC\uAC04 \uC21C\uD658) */\n addHours(hours: number): Time {\n let newTick = (this._tick + hours * 60 * 60 * 1000) % Time.MS_PER_DAY;\n if (newTick < 0) newTick += Time.MS_PER_DAY;\n return new Time(newTick);\n }\n\n /** \uC9C0\uC815\uB41C \uBD84\uC744 \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 (24\uC2DC\uAC04 \uC21C\uD658) */\n addMinutes(minutes: number): Time {\n let newTick = (this._tick + minutes * 60 * 1000) % Time.MS_PER_DAY;\n if (newTick < 0) newTick += Time.MS_PER_DAY;\n return new Time(newTick);\n }\n\n /** \uC9C0\uC815\uB41C \uCD08\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 (24\uC2DC\uAC04 \uC21C\uD658) */\n addSeconds(seconds: number): Time {\n let newTick = (this._tick + seconds * 1000) % Time.MS_PER_DAY;\n if (newTick < 0) newTick += Time.MS_PER_DAY;\n return new Time(newTick);\n }\n\n /** \uC9C0\uC815\uB41C \uBC00\uB9AC\uCD08\uB97C \uB354\uD55C \uC0C8 \uC778\uC2A4\uD134\uC2A4 \uBC18\uD658 (24\uC2DC\uAC04 \uC21C\uD658) */\n addMilliseconds(milliseconds: number): Time {\n let newTick = (this._tick + milliseconds) % Time.MS_PER_DAY;\n if (newTick < 0) newTick += Time.MS_PER_DAY;\n return new Time(newTick);\n }\n\n //#endregion\n\n //#region \uD3EC\uB9F7\uD305\n\n /**\n * \uC9C0\uC815\uB41C \uD3EC\uB9F7\uC73C\uB85C \uBB38\uC790\uC5F4 \uBCC0\uD658\n * @param format \uD3EC\uB9F7 \uBB38\uC790\uC5F4\n * @see dtFormat \uC9C0\uC6D0 \uD3EC\uB9F7 \uBB38\uC790\uC5F4 \uCC38\uC870\n */\n toFormatString(formatStr: string): string {\n return formatDate(formatStr, {\n hour: this.hour,\n minute: this.minute,\n second: this.second,\n millisecond: this.millisecond,\n });\n }\n\n toString(): string {\n return this.toFormatString(\"HH:mm:ss.fff\");\n }\n\n //#endregion\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/dist/types/uuid.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/uuid.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Bytes } from \"../common.types\";\nimport { ArgumentError } from \"../errors/argument-error\";\n\n/**\n * UUID v4 \uD074\uB798\uC2A4\n *\n * crypto.getRandomValues \uAE30\uBC18\uC73C\uB85C \uC554\uD638\uD559\uC801\uC73C\uB85C \uC548\uC804\uD55C UUID\uB97C \uC0DD\uC131\uD55C\uB2E4. (Chrome 79+, Node.js \uACF5\uC6A9)\n *\n * @example\n * const id = Uuid.new();\n * const fromStr = new Uuid(\"550e8400-e29b-41d4-a716-446655440000\");\n */\nexport class Uuid {\n // 0x00 ~ 0xFF\uC5D0 \uB300\uD55C hex \uBB38\uC790\uC5F4 \uBBF8\uB9AC \uACC4\uC0B0 (256\uAC1C)\n private static readonly _hexTable: string[] = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\n private static readonly _uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n\n /** 16\uBC14\uC774\uD2B8 \uBC30\uC5F4\uC744 UUID \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658 */\n private static _bytesToUuidStr(bytes: Uint8Array): string {\n const h = Uuid._hexTable;\n return (\n h[bytes[0]] +\n h[bytes[1]] +\n h[bytes[2]] +\n h[bytes[3]] +\n \"-\" +\n h[bytes[4]] +\n h[bytes[5]] +\n \"-\" +\n h[bytes[6]] +\n h[bytes[7]] +\n \"-\" +\n h[bytes[8]] +\n h[bytes[9]] +\n \"-\" +\n h[bytes[10]] +\n h[bytes[11]] +\n h[bytes[12]] +\n h[bytes[13]] +\n h[bytes[14]] +\n h[bytes[15]]\n );\n }\n\n /** \uC0C8 UUID v4 \uC778\uC2A4\uD134\uC2A4 \uC0DD\uC131 */\n static new(): Uuid {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n\n // UUID v4 \uC124\uC815\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n return new Uuid(Uuid._bytesToUuidStr(bytes));\n }\n\n /**\n * 16\uBC14\uC774\uD2B8 Uint8Array\uC5D0\uC11C UUID \uC0DD\uC131\n * @param bytes 16\uBC14\uC774\uD2B8 \uBC30\uC5F4\n * @throws {ArgumentError} \uBC14\uC774\uD2B8 \uD06C\uAE30\uAC00 16\uC774 \uC544\uB2CC \uACBD\uC6B0\n */\n static fromBytes(bytes: Bytes): Uuid {\n if (bytes.length !== 16) {\n throw new ArgumentError(\"UUID \uBC14\uC774\uD2B8 \uD06C\uAE30\uB294 16\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.\", { length: bytes.length });\n }\n\n return new Uuid(Uuid._bytesToUuidStr(bytes));\n }\n\n private readonly _uuid: string;\n\n /**\n * @param uuid UUID \uBB38\uC790\uC5F4 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \uD615\uC2DD)\n * @throws {ArgumentError} \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uACBD\uC6B0\n */\n constructor(uuid: string) {\n if (!Uuid._uuidRegex.test(uuid)) {\n throw new ArgumentError(\"UUID \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\", { uuid });\n }\n this._uuid = uuid;\n }\n\n /** UUID\uB97C \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658 */\n toString(): string {\n return this._uuid;\n }\n\n /** UUID\uB97C 16\uBC14\uC774\uD2B8 Uint8Array\uB85C \uBCC0\uD658 */\n toBytes(): Bytes {\n const u = this._uuid;\n // UUID \uD615\uC2DD: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)\n // \uD558\uC774\uD508 \uC704\uCE58: 8, 13, 18, 23\n return new Uint8Array([\n Number.parseInt(u.substring(0, 2), 16),\n Number.parseInt(u.substring(2, 4), 16),\n Number.parseInt(u.substring(4, 6), 16),\n Number.parseInt(u.substring(6, 8), 16),\n Number.parseInt(u.substring(9, 11), 16),\n Number.parseInt(u.substring(11, 13), 16),\n Number.parseInt(u.substring(14, 16), 16),\n Number.parseInt(u.substring(16, 18), 16),\n Number.parseInt(u.substring(19, 21), 16),\n Number.parseInt(u.substring(21, 23), 16),\n Number.parseInt(u.substring(24, 26), 16),\n Number.parseInt(u.substring(26, 28), 16),\n Number.parseInt(u.substring(28, 30), 16),\n Number.parseInt(u.substring(30, 32), 16),\n Number.parseInt(u.substring(32, 34), 16),\n Number.parseInt(u.substring(34, 36), 16),\n ]);\n }\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
package/dist/utils/bytes.js.map
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/bytes.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Bytes } from \"../common.types\";\nimport { ArgumentError } from \"../errors/argument-error\";\n\n/**\n * Uint8Array \uC720\uD2F8\uB9AC\uD2F0 \uD568\uC218 (\uBCF5\uC7A1\uD55C \uC5F0\uC0B0\uB9CC)\n *\n * \uAE30\uB2A5:\n * - bytesConcat: \uC5EC\uB7EC Uint8Array \uC5F0\uACB0\n * - bytesToHex: Uint8Array\uB97C hex \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658\n * - bytesFromHex: hex \uBB38\uC790\uC5F4\uC744 Uint8Array\uB85C \uBCC0\uD658\n * - bytesToBase64: Uint8Array\uB97C base64 \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658\n * - bytesFromBase64: base64 \uBB38\uC790\uC5F4\uC744 Uint8Array\uB85C \uBCC0\uD658\n */\n\n/** hex \uBCC0\uD658\uC6A9 \uB8E9\uC5C5 \uD14C\uC774\uBE14 (\uC131\uB2A5 \uCD5C\uC801\uD654) */\nconst hexTable: string[] = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\n/** base64 \uC778\uCF54\uB529 \uD14C\uC774\uBE14 */\nconst BASE64_CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n/** base64 \uB514\uCF54\uB529 \uB8E9\uC5C5 \uD14C\uC774\uBE14 (O(1) \uC870\uD68C, \uBAA8\uB4E0 \uBC14\uC774\uD2B8 \uAC12 \uCEE4\uBC84) */\nconst BASE64_LOOKUP: number[] = Array.from({ length: 256 }, (_, i) => {\n const idx = BASE64_CHARS.indexOf(String.fromCharCode(i));\n return idx === -1 ? 0 : idx;\n});\n\n/**\n * \uC5EC\uB7EC Uint8Array \uC5F0\uACB0\n * @param arrays \uC5F0\uACB0\uD560 Uint8Array \uBC30\uC5F4\n * @returns \uC5F0\uACB0\uB41C \uC0C8 Uint8Array\n * @example\n * const a = new Uint8Array([1, 2]);\n * const b = new Uint8Array([3, 4]);\n * bytesConcat([a, b]);\n * // Uint8Array([1, 2, 3, 4])\n */\nexport function bytesConcat(arrays: Bytes[]): Bytes {\n const total = arrays.reduce((sum, arr) => sum + arr.length, 0);\n const result = new Uint8Array(total);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n\n/**\n * hex \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658\n * @param bytes \uBCC0\uD658\uD560 Uint8Array\n * @returns \uC18C\uBB38\uC790 hex \uBB38\uC790\uC5F4\n * @example\n * bytesToHex(new Uint8Array([255, 0, 127]));\n * // \"ff007f\"\n */\nexport function bytesToHex(bytes: Bytes): string {\n const h = hexTable;\n let result = \"\";\n for (let i = 0; i < bytes.length; i++) {\n result += h[bytes[i]];\n }\n return result;\n}\n\n/**\n * hex \uBB38\uC790\uC5F4\uC5D0\uC11C Uint8Array\uB85C \uBCC0\uD658\n * @param hex \uBCC0\uD658\uD560 hex \uBB38\uC790\uC5F4 (\uC18C\uBB38\uC790/\uB300\uBB38\uC790 \uBAA8\uB450 \uD5C8\uC6A9)\n * @returns \uBCC0\uD658\uB41C Uint8Array\n * @throws {ArgumentError} \uD640\uC218 \uAE38\uC774 \uB610\uB294 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 hex \uBB38\uC790\uAC00 \uD3EC\uD568\uB41C \uACBD\uC6B0\n * @example\n * bytesFromHex(\"ff007f\");\n * // Uint8Array([255, 0, 127])\n */\nexport function bytesFromHex(hex: string): Bytes {\n if (hex.length % 2 !== 0) {\n throw new ArgumentError(\"hex \uBB38\uC790\uC5F4\uC740 \uC9DD\uC218 \uAE38\uC774\uC5EC\uC57C \uD569\uB2C8\uB2E4\", { hex });\n }\n if (hex.length > 0 && !/^[0-9a-fA-F]+$/.test(hex)) {\n throw new ArgumentError(\"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 hex \uBB38\uC790\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4\", { hex });\n }\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = Number.parseInt(hex.substring(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n\n/**\n * Bytes\uB97C base64 \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658\n * @param bytes \uBCC0\uD658\uD560 Uint8Array\n * @returns base64 \uC778\uCF54\uB529\uB41C \uBB38\uC790\uC5F4\n * @example\n * bytesToBase64(new Uint8Array([72, 101, 108, 108, 111]));\n * // \"SGVsbG8=\"\n */\nexport function bytesToBase64(bytes: Bytes): string {\n if (bytes.length === 0) {\n return \"\";\n }\n\n let result = \"\";\n const len = bytes.length;\n for (let i = 0; i < len; i += 3) {\n const b1 = bytes[i];\n const b2 = i + 1 < len ? bytes[i + 1] : 0;\n const b3 = i + 2 < len ? bytes[i + 2] : 0;\n result += BASE64_CHARS[b1 >> 2];\n result += BASE64_CHARS[((b1 & 3) << 4) | (b2 >> 4)];\n result += i + 1 < len ? BASE64_CHARS[((b2 & 15) << 2) | (b3 >> 6)] : \"=\";\n result += i + 2 < len ? BASE64_CHARS[b3 & 63] : \"=\";\n }\n return result;\n}\n\n/**\n * base64 \uBB38\uC790\uC5F4\uC744 Bytes\uB85C \uBCC0\uD658\n * @param base64 \uBCC0\uD658\uD560 base64 \uBB38\uC790\uC5F4\n * @returns \uB514\uCF54\uB529\uB41C Uint8Array\n * @throws {ArgumentError} \uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 base64 \uBB38\uC790\uAC00 \uD3EC\uD568\uB41C \uACBD\uC6B0\n * @example\n * bytesFromBase64(\"SGVsbG8=\");\n * // Uint8Array([72, 101, 108, 108, 111])\n */\nexport function bytesFromBase64(base64: string): Bytes {\n // \uACF5\uBC31 \uC81C\uAC70 \uBC0F \uD328\uB529 \uC815\uADDC\uD654\n const cleanBase64 = base64.replace(/\\s/g, \"\").replace(/=+$/, \"\");\n\n // \uBE48 \uBB38\uC790\uC5F4 \uCC98\uB9AC\n if (cleanBase64.length === 0) {\n return new Uint8Array(0);\n }\n\n // \uC720\uD6A8\uC131 \uAC80\uC0AC: \uBB38\uC790\n if (!/^[A-Za-z0-9+/]+$/.test(cleanBase64)) {\n throw new ArgumentError(\"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 base64 \uBB38\uC790\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4\", { base64: base64.substring(0, 20) });\n }\n\n // \uC720\uD6A8\uC131 \uAC80\uC0AC: \uAE38\uC774 (\uD328\uB529 \uC81C\uAC70 \uD6C4 \uB098\uBA38\uC9C0\uAC00 1\uC774\uBA74 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC74C)\n if (cleanBase64.length % 4 === 1) {\n throw new ArgumentError(\"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 base64 \uAE38\uC774\uC785\uB2C8\uB2E4\", { length: cleanBase64.length });\n }\n\n const len = cleanBase64.length;\n const byteLen = Math.floor((len * 3) / 4);\n const bytes = new Uint8Array(byteLen);\n\n let byteIdx = 0;\n for (let i = 0; i < len; i += 4) {\n const c1 = BASE64_LOOKUP[cleanBase64.charCodeAt(i)];\n const c2 = i + 1 < len ? BASE64_LOOKUP[cleanBase64.charCodeAt(i + 1)] : 0;\n const c3 = i + 2 < len ? BASE64_LOOKUP[cleanBase64.charCodeAt(i + 2)] : 0;\n const c4 = i + 3 < len ? BASE64_LOOKUP[cleanBase64.charCodeAt(i + 3)] : 0;\n\n bytes[byteIdx++] = (c1 << 2) | (c2 >> 4);\n if (byteIdx < byteLen) bytes[byteIdx++] = ((c2 & 15) << 4) | (c3 >> 2);\n if (byteIdx < byteLen) bytes[byteIdx++] = ((c3 & 3) << 6) | c4;\n }\n\n return bytes;\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/date-format.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * \uC6D4 \uC124\uC815 \uC2DC \uC5F0\uB3C4/\uC6D4/\uC77C \uC815\uADDC\uD654 \uACB0\uACFC\n */\nexport interface DtNormalizedMonth {\n year: number;\n month: number;\n day: number;\n}\n\n/**\n * \uC6D4 \uC124\uC815 \uC2DC \uC5F0\uB3C4/\uC6D4/\uC77C\uC744 \uC815\uADDC\uD654\n * - \uC6D4\uC774 1-12 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uBA74 \uC5F0\uB3C4\uB97C \uC870\uC815\n * - \uB300\uC0C1 \uC6D4\uC758 \uC77C\uC218\uBCF4\uB2E4 \uD604\uC7AC \uC77C\uC790\uAC00 \uD06C\uBA74 \uD574\uB2F9 \uC6D4\uC758 \uB9C8\uC9C0\uB9C9 \uB0A0\uB85C \uC870\uC815\n *\n * @param year \uAE30\uC900 \uC5F0\uB3C4\n * @param month \uC124\uC815\uD560 \uC6D4 (1-12 \uBC94\uC704 \uC678\uC758 \uAC12\uB3C4 \uD5C8\uC6A9)\n * @param day \uAE30\uC900 \uC77C\uC790\n * @returns \uC815\uADDC\uD654\uB41C \uC5F0\uB3C4, \uC6D4, \uC77C\n *\n * @example\n * normalizeMonth(2025, 13, 15) // { year: 2026, month: 1, day: 15 }\n * normalizeMonth(2025, 2, 31) // { year: 2025, month: 2, day: 28 }\n */\nexport function normalizeMonth(year: number, month: number, day: number): DtNormalizedMonth {\n // \uC6D4 \uC624\uBC84\uD50C\uB85C\uC6B0/\uC5B8\uB354\uD50C\uB85C\uC6B0 \uC815\uADDC\uD654\n // month\uAC00 1-12 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uBA74 \uC5F0\uB3C4\uB97C \uC870\uC815\n const normalizedYear = year + Math.floor((month - 1) / 12);\n // JavaScript % \uC5F0\uC0B0\uC790\uB294 \uC74C\uC218\uC5D0\uC11C \uC74C\uC218\uB97C \uBC18\uD658\uD558\uBBC0\uB85C (% 12 + 12) % 12 \uD328\uD134\uC73C\uB85C 0-11 \uBC94\uC704\uB97C \uBCF4\uC7A5 \uD6C4 1-12\uB85C \uBCC0\uD658\n const normalizedMonth = ((((month - 1) % 12) + 12) % 12) + 1;\n\n // \uB300\uC0C1 \uC6D4\uC758 \uB9C8\uC9C0\uB9C9 \uB0A0 \uAD6C\uD558\uAE30\n const lastDay = new Date(normalizedYear, normalizedMonth, 0).getDate();\n const normalizedDay = Math.min(day, lastDay);\n\n return { year: normalizedYear, month: normalizedMonth, day: normalizedDay };\n}\n\n/**\n * 12\uC2DC\uAC04\uC81C\uB97C 24\uC2DC\uAC04\uC81C\uB85C \uBCC0\uD658\n * - \uC624\uC804 12\uC2DC = 0\uC2DC, \uC624\uD6C4 12\uC2DC = 12\uC2DC\n * - \uC624\uC804 1-11\uC2DC = 1-11\uC2DC, \uC624\uD6C4 1-11\uC2DC = 13-23\uC2DC\n *\n * @param rawHour 12\uC2DC\uAC04\uC81C \uC2DC (1-12)\n * @param isPM \uC624\uD6C4 \uC5EC\uBD80\n * @returns 24\uC2DC\uAC04\uC81C \uC2DC (0-23)\n */\nexport function convert12To24(rawHour: number, isPM: boolean): number {\n if (rawHour === 12) {\n return isPM ? 12 : 0;\n }\n return isPM ? rawHour + 12 : rawHour;\n}\n\n//#region \uC815\uADDC\uC2DD \uCE90\uC2F1 (\uBAA8\uB4C8 \uB85C\uB4DC \uC2DC 1\uD68C\uB9CC \uC0DD\uC131)\n\n/**\n * \uD3EC\uB9F7 \uD328\uD134 \uC815\uADDC\uC2DD\n *\n * \uC21C\uC11C \uC911\uC694:\n * dtFormat() \uD568\uC218\uC5D0\uC11C \uAE34 \uD328\uD134(yyyy, MM, dd \uB4F1)\uC744 \uBA3C\uC800 \uCC98\uB9AC\uD574\uC57C\n * \uC9E7\uC740 \uD328\uD134(y, M, d \uB4F1)\uC774 \uBD80\uBD84 \uB9E4\uCE6D\uB418\uB294 \uAC83\uC744 \uBC29\uC9C0\uD569\uB2C8\uB2E4.\n * \uC608: \"yyyy\"\uB97C \uBA3C\uC800 \uCC98\uB9AC\uD558\uC9C0 \uC54A\uC73C\uBA74 \"yy\"\uAC00 \uB450 \uBC88 \uB9E4\uCE6D\uB420 \uC218 \uC788\uC74C\n */\nconst patterns = {\n yyyy: /yyyy/g,\n yy: /yy/g,\n MM: /MM/g,\n M: /M/g,\n ddd: /ddd/g,\n dd: /dd/g,\n d: /d/g,\n tt: /tt/g,\n hh: /hh/g,\n h: /h/g,\n HH: /HH/g,\n H: /H/g,\n mm: /mm/g,\n m: /m/g,\n ss: /ss/g,\n s: /s/g,\n fff: /fff/g,\n ff: /ff/g,\n f: /f/g,\n zzz: /zzz/g,\n zz: /zz/g,\n z: /z/g,\n};\n\nconst weekStrings = [\"\uC77C\", \"\uC6D4\", \"\uD654\", \"\uC218\", \"\uBAA9\", \"\uAE08\", \"\uD1A0\"];\n\n//#endregion\n\n/**\n * \uD3EC\uB9F7 \uBB38\uC790\uC5F4\uC5D0 \uB530\uB77C \uB0A0\uC9DC/\uC2DC\uAC04\uC744 \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658\uD55C\uB2E4\n *\n * @param formatString \uD3EC\uB9F7 \uBB38\uC790\uC5F4\n * @param args \uB0A0\uC9DC/\uC2DC\uAC04 \uAD6C\uC131 \uC694\uC18C\n *\n * @remarks\n * C#\uACFC \uB3D9\uC77C\uD55C \uD3EC\uB9F7 \uBB38\uC790\uC5F4\uC744 \uC9C0\uC6D0\uD55C\uB2E4:\n *\n * | \uD3EC\uB9F7 | \uC124\uBA85 | \uC608\uC2DC |\n * |------|------|------|\n * | yyyy | 4\uC790\uB9AC \uC5F0\uB3C4 | 2024 |\n * | yy | 2\uC790\uB9AC \uC5F0\uB3C4 | 24 |\n * | MM | 0\uC73C\uB85C \uD328\uB529\uB41C \uC6D4 | 01~12 |\n * | M | \uC6D4 | 1~12 |\n * | ddd | \uC694\uC77C (\uD55C\uAE00) | \uC77C, \uC6D4, \uD654, \uC218, \uBAA9, \uAE08, \uD1A0 |\n * | dd | 0\uC73C\uB85C \uD328\uB529\uB41C \uC77C | 01~31 |\n * | d | \uC77C | 1~31 |\n * | tt | \uC624\uC804/\uC624\uD6C4 | \uC624\uC804, \uC624\uD6C4 |\n * | hh | 0\uC73C\uB85C \uD328\uB529\uB41C 12\uC2DC\uAC04 | 01~12 |\n * | h | 12\uC2DC\uAC04 | 1~12 |\n * | HH | 0\uC73C\uB85C \uD328\uB529\uB41C 24\uC2DC\uAC04 | 00~23 |\n * | H | 24\uC2DC\uAC04 | 0~23 |\n * | mm | 0\uC73C\uB85C \uD328\uB529\uB41C \uBD84 | 00~59 |\n * | m | \uBD84 | 0~59 |\n * | ss | 0\uC73C\uB85C \uD328\uB529\uB41C \uCD08 | 00~59 |\n * | s | \uCD08 | 0~59 |\n * | fff | \uBC00\uB9AC\uCD08 (3\uC790\uB9AC) | 000~999 |\n * | ff | \uBC00\uB9AC\uCD08 (2\uC790\uB9AC) | 00~99 |\n * | f | \uBC00\uB9AC\uCD08 (1\uC790\uB9AC) | 0~9 |\n * | zzz | \uD0C0\uC784\uC874 \uC624\uD504\uC14B (\u00B1HH:mm) | +09:00 |\n * | zz | \uD0C0\uC784\uC874 \uC624\uD504\uC14B (\u00B1HH) | +09 |\n * | z | \uD0C0\uC784\uC874 \uC624\uD504\uC14B (\u00B1H) | +9 |\n *\n * @example\n * ```typescript\n * formatDate(\"yyyy-MM-dd\", { year: 2024, month: 3, day: 15 });\n * // \"2024-03-15\"\n *\n * formatDate(\"yyyy\uB144 M\uC6D4 d\uC77C (ddd)\", { year: 2024, month: 3, day: 15 });\n * // \"2024\uB144 3\uC6D4 15\uC77C (\uAE08)\"\n *\n * formatDate(\"tt h:mm:ss\", { hour: 14, minute: 30, second: 45 });\n * // \"\uC624\uD6C4 2:30:45\"\n * ```\n */\nexport function formatDate(\n formatString: string,\n args: {\n year?: number;\n month?: number;\n day?: number;\n hour?: number;\n minute?: number;\n second?: number;\n millisecond?: number;\n timezoneOffsetMinutes?: number;\n },\n): string {\n const { year, month, day, hour, minute, second, millisecond, timezoneOffsetMinutes } = args;\n\n const absOffsetMinutes = timezoneOffsetMinutes !== undefined ? Math.abs(timezoneOffsetMinutes) : undefined;\n const offsetHour = absOffsetMinutes !== undefined ? Math.floor(absOffsetMinutes / 60) : undefined;\n const offsetMinute = absOffsetMinutes !== undefined ? absOffsetMinutes % 60 : undefined;\n const offsetSign = timezoneOffsetMinutes !== undefined ? (timezoneOffsetMinutes >= 0 ? \"+\" : \"-\") : undefined;\n\n const week =\n year !== undefined && month !== undefined && day !== undefined\n ? new Date(year, month - 1, day).getDay()\n : undefined;\n\n let result = formatString;\n\n // \uC5F0\uB3C4\n if (year !== undefined) {\n const yearStr = year.toString();\n result = result.replace(patterns.yyyy, yearStr);\n result = result.replace(patterns.yy, yearStr.substring(2, 4));\n }\n\n // \uC6D4\n if (month !== undefined) {\n const monthStr = month.toString();\n result = result.replace(patterns.MM, monthStr.padStart(2, \"0\"));\n result = result.replace(patterns.M, monthStr);\n }\n\n // \uC694\uC77C\n if (week !== undefined) {\n result = result.replace(patterns.ddd, weekStrings[week]);\n }\n\n // \uC77C\n if (day !== undefined) {\n const dayStr = day.toString();\n result = result.replace(patterns.dd, dayStr.padStart(2, \"0\"));\n result = result.replace(patterns.d, dayStr);\n }\n\n // \uC2DC\uAC04\n if (hour !== undefined) {\n result = result.replace(patterns.tt, hour < 12 ? \"\uC624\uC804\" : \"\uC624\uD6C4\");\n\n const hour12 = hour % 12 || 12;\n const hour12Str = hour12.toString();\n result = result.replace(patterns.hh, hour12Str.padStart(2, \"0\"));\n result = result.replace(patterns.h, hour12Str);\n\n const hourStr = hour.toString();\n result = result.replace(patterns.HH, hourStr.padStart(2, \"0\"));\n result = result.replace(patterns.H, hourStr);\n }\n\n // \uBD84\n if (minute !== undefined) {\n const minuteStr = minute.toString();\n result = result.replace(patterns.mm, minuteStr.padStart(2, \"0\"));\n result = result.replace(patterns.m, minuteStr);\n }\n\n // \uCD08\n if (second !== undefined) {\n const secondStr = second.toString();\n result = result.replace(patterns.ss, secondStr.padStart(2, \"0\"));\n result = result.replace(patterns.s, secondStr);\n }\n\n // \uBC00\uB9AC\uCD08\n if (millisecond !== undefined) {\n const msStr = millisecond.toString().padStart(3, \"0\");\n result = result.replace(patterns.fff, msStr);\n result = result.replace(patterns.ff, msStr.substring(0, 2));\n result = result.replace(patterns.f, msStr.substring(0, 1));\n }\n\n // \uD0C0\uC784\uC874\n if (offsetSign !== undefined && offsetHour !== undefined && offsetMinute !== undefined) {\n result = result.replace(\n patterns.zzz,\n `${offsetSign}${offsetHour.toString().padStart(2, \"0\")}:${offsetMinute.toString().padStart(2, \"0\")}`,\n );\n result = result.replace(patterns.zz, `${offsetSign}${offsetHour.toString().padStart(2, \"0\")}`);\n result = result.replace(patterns.z, `${offsetSign}${offsetHour}`);\n }\n\n return result;\n}\n"],
|
|
5
4
|
"mappings": "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",
|
|
6
5
|
"names": []
|
|
7
6
|
}
|