@kdtlabs/utils 0.0.3
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/CHANGELOG.md +39 -0
- package/SKILL.md +251 -0
- package/arrays/accessors.d.ts +11 -0
- package/arrays/accessors.d.ts.map +1 -0
- package/arrays/conversions.d.ts +6 -0
- package/arrays/conversions.d.ts.map +1 -0
- package/arrays/factories.d.ts +5 -0
- package/arrays/factories.d.ts.map +1 -0
- package/arrays/guards.d.ts +5 -0
- package/arrays/guards.d.ts.map +1 -0
- package/arrays/index.d.ts +8 -0
- package/arrays/index.d.ts.map +1 -0
- package/arrays/index.js +4 -0
- package/arrays/index.js.map +9 -0
- package/arrays/operations.d.ts +16 -0
- package/arrays/operations.d.ts.map +1 -0
- package/arrays/set-operations.d.ts +6 -0
- package/arrays/set-operations.d.ts.map +1 -0
- package/arrays/types.d.ts +12 -0
- package/arrays/types.d.ts.map +1 -0
- package/buffers/conversions.d.ts +4 -0
- package/buffers/conversions.d.ts.map +1 -0
- package/buffers/guards.d.ts +7 -0
- package/buffers/guards.d.ts.map +1 -0
- package/buffers/index.d.ts +5 -0
- package/buffers/index.d.ts.map +1 -0
- package/buffers/index.js +4 -0
- package/buffers/index.js.map +9 -0
- package/buffers/operations.d.ts +4 -0
- package/buffers/operations.d.ts.map +1 -0
- package/buffers/types.d.ts +2 -0
- package/buffers/types.d.ts.map +1 -0
- package/chunk-4w1emwv7.js +6 -0
- package/chunk-4w1emwv7.js.map +14 -0
- package/chunk-6kdnnxe0.js +4 -0
- package/chunk-6kdnnxe0.js.map +17 -0
- package/chunk-6whsm14p.js +4 -0
- package/chunk-6whsm14p.js.map +13 -0
- package/chunk-6wkh99v0.js +4 -0
- package/chunk-6wkh99v0.js.map +11 -0
- package/chunk-84hxmrk7.js +4 -0
- package/chunk-84hxmrk7.js.map +12 -0
- package/chunk-bham5jvm.js +5 -0
- package/chunk-bham5jvm.js.map +13 -0
- package/chunk-bjmntg2y.js +4 -0
- package/chunk-bjmntg2y.js.map +18 -0
- package/chunk-bx5gjsp0.js +4 -0
- package/chunk-bx5gjsp0.js.map +17 -0
- package/chunk-c0p3wm8m.js +4 -0
- package/chunk-c0p3wm8m.js.map +15 -0
- package/chunk-c9mm50vv.js +4 -0
- package/chunk-c9mm50vv.js.map +11 -0
- package/chunk-f2rvwnb6.js +4 -0
- package/chunk-f2rvwnb6.js.map +26 -0
- package/chunk-kbzgn0z4.js +4 -0
- package/chunk-kbzgn0z4.js.map +10 -0
- package/chunk-m4svr349.js +4 -0
- package/chunk-m4svr349.js.map +12 -0
- package/chunk-qn6n0ff5.js +4 -0
- package/chunk-qn6n0ff5.js.map +17 -0
- package/chunk-sajy7qk7.js +4 -0
- package/chunk-sajy7qk7.js.map +14 -0
- package/chunk-xp18wdk6.js +4 -0
- package/chunk-xp18wdk6.js.map +12 -0
- package/collections/fifo-map.d.ts +7 -0
- package/collections/fifo-map.d.ts.map +1 -0
- package/collections/fifo-set.d.ts +7 -0
- package/collections/fifo-set.d.ts.map +1 -0
- package/collections/guards.d.ts +7 -0
- package/collections/guards.d.ts.map +1 -0
- package/collections/index.d.ts +10 -0
- package/collections/index.d.ts.map +1 -0
- package/collections/index.js +4 -0
- package/collections/index.js.map +9 -0
- package/collections/linked-base.d.ts +24 -0
- package/collections/linked-base.d.ts.map +1 -0
- package/collections/linked-map.d.ts +25 -0
- package/collections/linked-map.d.ts.map +1 -0
- package/collections/linked-set.d.ts +23 -0
- package/collections/linked-set.d.ts.map +1 -0
- package/collections/lru-map.d.ts +6 -0
- package/collections/lru-map.d.ts.map +1 -0
- package/collections/lru-set.d.ts +5 -0
- package/collections/lru-set.d.ts.map +1 -0
- package/collections/types.d.ts +11 -0
- package/collections/types.d.ts.map +1 -0
- package/common/assertions.d.ts +4 -0
- package/common/assertions.d.ts.map +1 -0
- package/common/guards.d.ts +2 -0
- package/common/guards.d.ts.map +1 -0
- package/common/index.d.ts +3 -0
- package/common/index.d.ts.map +1 -0
- package/common/index.js +4 -0
- package/common/index.js.map +9 -0
- package/core/constants.d.ts +2 -0
- package/core/constants.d.ts.map +1 -0
- package/core/guards.d.ts +24 -0
- package/core/guards.d.ts.map +1 -0
- package/core/index.d.ts +4 -0
- package/core/index.d.ts.map +1 -0
- package/core/index.js +4 -0
- package/core/index.js.map +9 -0
- package/core/types.d.ts +11 -0
- package/core/types.d.ts.map +1 -0
- package/errors/base-error.d.ts +22 -0
- package/errors/base-error.d.ts.map +1 -0
- package/errors/factories.d.ts +12 -0
- package/errors/factories.d.ts.map +1 -0
- package/errors/guards.d.ts +7 -0
- package/errors/guards.d.ts.map +1 -0
- package/errors/index.d.ts +7 -0
- package/errors/index.d.ts.map +1 -0
- package/errors/index.js +4 -0
- package/errors/index.js.map +9 -0
- package/errors/operations.d.ts +3 -0
- package/errors/operations.d.ts.map +1 -0
- package/errors/stringify.d.ts +36 -0
- package/errors/stringify.d.ts.map +1 -0
- package/errors/types.d.ts +10 -0
- package/errors/types.d.ts.map +1 -0
- package/events/emitter.d.ts +16 -0
- package/events/emitter.d.ts.map +1 -0
- package/events/index.d.ts +3 -0
- package/events/index.d.ts.map +1 -0
- package/events/index.js +4 -0
- package/events/index.js.map +9 -0
- package/events/types.d.ts +7 -0
- package/events/types.d.ts.map +1 -0
- package/functions/compositions.d.ts +4 -0
- package/functions/compositions.d.ts.map +1 -0
- package/functions/debounce.d.ts +4 -0
- package/functions/debounce.d.ts.map +1 -0
- package/functions/executions.d.ts +6 -0
- package/functions/executions.d.ts.map +1 -0
- package/functions/guards.d.ts +3 -0
- package/functions/guards.d.ts.map +1 -0
- package/functions/index.d.ts +11 -0
- package/functions/index.d.ts.map +1 -0
- package/functions/index.js +4 -0
- package/functions/index.js.map +9 -0
- package/functions/memoize.d.ts +15 -0
- package/functions/memoize.d.ts.map +1 -0
- package/functions/once.d.ts +6 -0
- package/functions/once.d.ts.map +1 -0
- package/functions/pipe.d.ts +24 -0
- package/functions/pipe.d.ts.map +1 -0
- package/functions/throttle.d.ts +4 -0
- package/functions/throttle.d.ts.map +1 -0
- package/functions/timer-state.d.ts +11 -0
- package/functions/timer-state.d.ts.map +1 -0
- package/functions/types.d.ts +7 -0
- package/functions/types.d.ts.map +1 -0
- package/index.d.ts +17 -0
- package/index.d.ts.map +1 -0
- package/index.js +4 -0
- package/index.js.map +9 -0
- package/json-rpc/constants.d.ts +9 -0
- package/json-rpc/constants.d.ts.map +1 -0
- package/json-rpc/factories.d.ts +7 -0
- package/json-rpc/factories.d.ts.map +1 -0
- package/json-rpc/guards.d.ts +13 -0
- package/json-rpc/guards.d.ts.map +1 -0
- package/json-rpc/index.d.ts +5 -0
- package/json-rpc/index.d.ts.map +1 -0
- package/json-rpc/index.js +4 -0
- package/json-rpc/index.js.map +9 -0
- package/json-rpc/types.d.ts +36 -0
- package/json-rpc/types.d.ts.map +1 -0
- package/meta.json +2944 -0
- package/meta.md +1782 -0
- package/numbers/bigint-math.d.ts +22 -0
- package/numbers/bigint-math.d.ts.map +1 -0
- package/numbers/constants.d.ts +3 -0
- package/numbers/constants.d.ts.map +1 -0
- package/numbers/conversions.d.ts +6 -0
- package/numbers/conversions.d.ts.map +1 -0
- package/numbers/factories.d.ts +2 -0
- package/numbers/factories.d.ts.map +1 -0
- package/numbers/formats.d.ts +9 -0
- package/numbers/formats.d.ts.map +1 -0
- package/numbers/guards.d.ts +6 -0
- package/numbers/guards.d.ts.map +1 -0
- package/numbers/index.d.ts +10 -0
- package/numbers/index.d.ts.map +1 -0
- package/numbers/index.js +4 -0
- package/numbers/index.js.map +9 -0
- package/numbers/maths.d.ts +7 -0
- package/numbers/maths.d.ts.map +1 -0
- package/numbers/ranges.d.ts +3 -0
- package/numbers/ranges.d.ts.map +1 -0
- package/numbers/types.d.ts +7 -0
- package/numbers/types.d.ts.map +1 -0
- package/objects/deep-merge.d.ts +7 -0
- package/objects/deep-merge.d.ts.map +1 -0
- package/objects/guards.d.ts +7 -0
- package/objects/guards.d.ts.map +1 -0
- package/objects/index.d.ts +5 -0
- package/objects/index.d.ts.map +1 -0
- package/objects/index.js +4 -0
- package/objects/index.js.map +9 -0
- package/objects/transformations.d.ts +10 -0
- package/objects/transformations.d.ts.map +1 -0
- package/objects/types.d.ts +28 -0
- package/objects/types.d.ts.map +1 -0
- package/package.json +129 -0
- package/promises/abortable.d.ts +3 -0
- package/promises/abortable.d.ts.map +1 -0
- package/promises/compositions.d.ts +7 -0
- package/promises/compositions.d.ts.map +1 -0
- package/promises/deferred.d.ts +26 -0
- package/promises/deferred.d.ts.map +1 -0
- package/promises/guards.d.ts +3 -0
- package/promises/guards.d.ts.map +1 -0
- package/promises/index.d.ts +10 -0
- package/promises/index.d.ts.map +1 -0
- package/promises/index.js +4 -0
- package/promises/index.js.map +9 -0
- package/promises/pipe.d.ts +24 -0
- package/promises/pipe.d.ts.map +1 -0
- package/promises/poll.d.ts +11 -0
- package/promises/poll.d.ts.map +1 -0
- package/promises/retry.d.ts +29 -0
- package/promises/retry.d.ts.map +1 -0
- package/promises/timers.d.ts +8 -0
- package/promises/timers.d.ts.map +1 -0
- package/promises/types.d.ts +2 -0
- package/promises/types.d.ts.map +1 -0
- package/serializer/constants.d.ts +4 -0
- package/serializer/constants.d.ts.map +1 -0
- package/serializer/context.d.ts +5 -0
- package/serializer/context.d.ts.map +1 -0
- package/serializer/index.d.ts +8 -0
- package/serializer/index.d.ts.map +1 -0
- package/serializer/index.js +4 -0
- package/serializer/index.js.map +9 -0
- package/serializer/serialize.d.ts +6 -0
- package/serializer/serialize.d.ts.map +1 -0
- package/serializer/serializers/array.d.ts +6 -0
- package/serializer/serializers/array.d.ts.map +1 -0
- package/serializer/serializers/binary.d.ts +4 -0
- package/serializer/serializers/binary.d.ts.map +1 -0
- package/serializer/serializers/blob.d.ts +4 -0
- package/serializer/serializers/blob.d.ts.map +1 -0
- package/serializer/serializers/collection.d.ts +4 -0
- package/serializer/serializers/collection.d.ts.map +1 -0
- package/serializer/serializers/compound.d.ts +5 -0
- package/serializer/serializers/compound.d.ts.map +1 -0
- package/serializer/serializers/error.d.ts +7 -0
- package/serializer/serializers/error.d.ts.map +1 -0
- package/serializer/serializers/function.d.ts +4 -0
- package/serializer/serializers/function.d.ts.map +1 -0
- package/serializer/serializers/index.d.ts +13 -0
- package/serializer/serializers/index.d.ts.map +1 -0
- package/serializer/serializers/leaf-object.d.ts +4 -0
- package/serializer/serializers/leaf-object.d.ts.map +1 -0
- package/serializer/serializers/number.d.ts +4 -0
- package/serializer/serializers/number.d.ts.map +1 -0
- package/serializer/serializers/object.d.ts +7 -0
- package/serializer/serializers/object.d.ts.map +1 -0
- package/serializer/serializers/opaque.d.ts +4 -0
- package/serializer/serializers/opaque.d.ts.map +1 -0
- package/serializer/serializers/primitive.d.ts +4 -0
- package/serializer/serializers/primitive.d.ts.map +1 -0
- package/serializer/symbol-registry.d.ts +2 -0
- package/serializer/symbol-registry.d.ts.map +1 -0
- package/serializer/types.d.ts +35 -0
- package/serializer/types.d.ts.map +1 -0
- package/serializer/utils.d.ts +5 -0
- package/serializer/utils.d.ts.map +1 -0
- package/strings/constants.d.ts +2 -0
- package/strings/constants.d.ts.map +1 -0
- package/strings/factories.d.ts +2 -0
- package/strings/factories.d.ts.map +1 -0
- package/strings/guards.d.ts +15 -0
- package/strings/guards.d.ts.map +1 -0
- package/strings/index.d.ts +6 -0
- package/strings/index.d.ts.map +1 -0
- package/strings/index.js +4 -0
- package/strings/index.js.map +9 -0
- package/strings/manipulations.d.ts +17 -0
- package/strings/manipulations.d.ts.map +1 -0
- package/strings/types.d.ts +3 -0
- package/strings/types.d.ts.map +1 -0
- package/system/env.d.ts +8 -0
- package/system/env.d.ts.map +1 -0
- package/system/fetch.d.ts +11 -0
- package/system/fetch.d.ts.map +1 -0
- package/system/graceful-exit.d.ts +5 -0
- package/system/graceful-exit.d.ts.map +1 -0
- package/system/index.d.ts +6 -0
- package/system/index.d.ts.map +1 -0
- package/system/index.js +4 -0
- package/system/index.js.map +9 -0
- package/system/path.d.ts +4 -0
- package/system/path.d.ts.map +1 -0
- package/system/types.d.ts +3 -0
- package/system/types.d.ts.map +1 -0
- package/times/constants.d.ts +7 -0
- package/times/constants.d.ts.map +1 -0
- package/times/conversions.d.ts +9 -0
- package/times/conversions.d.ts.map +1 -0
- package/times/factories.d.ts +2 -0
- package/times/factories.d.ts.map +1 -0
- package/times/guards.d.ts +2 -0
- package/times/guards.d.ts.map +1 -0
- package/times/index.d.ts +6 -0
- package/times/index.d.ts.map +1 -0
- package/times/index.js +4 -0
- package/times/index.js.map +9 -0
- package/times/operations.d.ts +3 -0
- package/times/operations.d.ts.map +1 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/numbers/bigint-math.ts", "../src/numbers/constants.ts", "../src/numbers/maths.ts", "../src/numbers/conversions.ts", "../src/numbers/factories.ts", "../src/numbers/formats.ts", "../src/numbers/guards.ts", "../src/numbers/ranges.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const BigIntMath = {\n isEven(a: bigint) {\n return a % 2n === 0n\n },\n\n isOdd(a: bigint) {\n return a % 2n !== 0n\n },\n\n divMod(a: bigint, b: bigint): [quotient: bigint, remainder: bigint] {\n if (b === 0n) {\n throw new RangeError('Division by zero')\n }\n\n return [a / b, a % b]\n },\n\n abs(a: bigint) {\n return a < 0n ? -a : a\n },\n\n max(a: bigint, b: bigint) {\n return a > b ? a : b\n },\n\n min(a: bigint, b: bigint) {\n return a < b ? a : b\n },\n\n pow(a: bigint, b: bigint) {\n return a ** b\n },\n\n sign(a: bigint) {\n return a === 0n ? 0n : (a < 0n ? -1n : 1n)\n },\n\n mod(a: bigint, b: bigint) {\n return ((a % b) + b) % b\n },\n\n modPow(base: bigint, exponent: bigint, modulus: bigint) {\n if (exponent < 0n) {\n throw new RangeError('Exponent must be non-negative')\n }\n\n if (modulus === 1n) {\n return 0n\n }\n\n let result = 1n\n\n base = BigIntMath.mod(base, modulus)\n\n while (exponent > 0n) {\n if (exponent % 2n === 1n) {\n result = BigIntMath.mod(result * base, modulus)\n }\n\n exponent >>= 1n\n base = BigIntMath.mod(base * base, modulus)\n }\n\n return result\n },\n\n gcd(a: bigint, b: bigint) {\n a = BigIntMath.abs(a)\n b = BigIntMath.abs(b)\n\n while (b !== 0n) {\n [a, b] = [b, a % b]\n }\n\n return a\n },\n\n lcm(a: bigint, b: bigint) {\n return (a / BigIntMath.gcd(a, b)) * b\n },\n\n clamp(value: bigint, min: bigint, max: bigint) {\n return BigIntMath.min(BigIntMath.max(value, min), max)\n },\n\n sqrt(n: bigint) {\n if (n < 0n) {\n throw new RangeError('Square root of negative bigint is undefined')\n }\n\n if (n < 2n) {\n return n\n }\n\n let x = n\n let y = (x + 1n) / 2n\n\n while (y < x) {\n x = y\n y = (x + n / x) / 2n\n }\n\n return x\n },\n\n factorial(n: bigint) {\n if (n < 0n) {\n throw new RangeError('Factorial of negative bigint is undefined')\n }\n\n if (n === 0n) {\n return 1n\n }\n\n let result = 1n\n\n for (let i = 1n; i <= n; i++) {\n result *= i\n }\n\n return result\n },\n\n sum(array: bigint[]) {\n return array.reduce((a, b) => a + b, 0n)\n },\n\n avg(array: bigint[]) {\n if (array.length === 0) {\n return 0n\n }\n\n return BigIntMath.sum(array) / BigInt(array.length)\n },\n\n isPrime(n: bigint) {\n if (n < 2n) {\n return false\n }\n\n if (n < 4n) {\n return true\n }\n\n if (n % 2n === 0n || n % 3n === 0n) {\n return false\n }\n\n const limit = BigIntMath.sqrt(n)\n\n for (let i = 5n; i <= limit; i += 6n) {\n if (n % i === 0n || n % (i + 2n) === 0n) {\n return false\n }\n }\n\n return true\n },\n\n compare(a: bigint, b: bigint) {\n return a === b ? 0 : (a < b ? -1 : 1)\n },\n}\n",
|
|
6
|
+
"export const SPECIAL_NUMBER_STRINGS = new Set(['+Infinity', '-Infinity', 'Infinity', 'NaN'])\n\nexport const SUBSCRIPT_CHARS: Record<string, string> = {\n 0: '\\u2080',\n 1: '\\u2081',\n 2: '\\u2082',\n 3: '\\u2083',\n 4: '\\u2084',\n 5: '\\u2085',\n 6: '\\u2086',\n 7: '\\u2087',\n 8: '\\u2088',\n 9: '\\u2089',\n}\n",
|
|
7
|
+
"import { transform } from '@/functions'\n\nexport const sum = (array: number[]) => array.reduce((a, b) => a + b, 0)\n\nexport const avg = (array: number[]) => (array.length === 0 ? 0 : sum(array) / array.length)\n\nexport const clamp = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max)\n\nexport const roundTo = (value: number, decimals: number) => (\n transform(10 ** decimals, (factor) => Math.round(value * factor) / factor)\n)\n\nexport const lerp = (start: number, end: number, t: number) => start + (end - start) * t\n\nexport function median(array: number[]) {\n if (array.length === 0) {\n return 0\n }\n\n const sorted = [...array].toSorted((a, b) => a - b)\n const mid = Math.floor(sorted.length / 2)\n\n if (sorted.length % 2 === 0) {\n return (sorted[mid - 1]! + sorted[mid]!) / 2\n }\n\n return sorted[mid]!\n}\n",
|
|
8
|
+
"import type { Numberish } from './types'\nimport { SUBSCRIPT_CHARS } from './constants'\nimport { roundTo } from './maths'\n\nexport function toSubscriptDigits(input: Numberish) {\n let result = ''\n\n for (const char of input.toString()) {\n result += SUBSCRIPT_CHARS[char] ?? char\n }\n\n return result\n}\n\nexport function parseExponential(input: Numberish) {\n const str = input.toString().toLowerCase()\n const [mantissa, rawExp] = str.split('e')\n\n if (rawExp === undefined) {\n return str\n }\n\n const [rawInt, fracPart = ''] = mantissa?.split('.') ?? []\n\n if (!rawInt) {\n return str\n }\n\n const sign = rawInt.startsWith('-') ? '-' : ''\n const intPart = sign ? rawInt.slice(1) : rawInt\n const exp = Number(rawExp)\n\n if (exp >= 0) {\n const neededZeros = Math.max(0, exp - fracPart.length)\n const padded = fracPart + '0'.repeat(neededZeros)\n\n if (padded.length > exp) {\n return `${sign}${intPart}${padded.slice(0, exp)}.${padded.slice(exp)}`\n }\n\n return `${sign}${intPart}${padded}`\n }\n\n const absExp = -exp\n const digits = intPart + fracPart\n const totalLeadingZeros = Math.max(0, absExp - intPart.length)\n\n return `${sign}0.${'0'.repeat(totalLeadingZeros)}${digits}`\n}\n\nexport function toOrdinal(n: number) {\n const remainder100 = Math.abs(n) % 100\n const remainder10 = remainder100 % 10\n\n if (remainder100 >= 11 && remainder100 <= 13) {\n return `${n}th`\n }\n\n switch (remainder10) {\n case 1:\n return `${n}st`\n case 2:\n return `${n}nd`\n case 3:\n return `${n}rd`\n default:\n return `${n}th`\n }\n}\n\nexport function toPercent(value: number, total: number, decimals?: number) {\n if (total === 0) {\n return 0\n }\n\n const result = (value / total) * 100\n\n if (decimals === undefined) {\n return result\n }\n\n return roundTo(result, decimals)\n}\n",
|
|
9
|
+
"export function random(min: number, max: number) {\n const lo = Math.min(min, max)\n const hi = Math.max(min, max)\n\n return Math.floor(Math.random() * (hi - lo + 1)) + lo\n}\n",
|
|
10
|
+
"import type { Numberish } from './types'\nimport { parseExponential, toSubscriptDigits } from './conversions'\n\nexport function countLeadingZeros(input: string) {\n let count = 0\n\n for (let i = 0; i < input.length && input[i] === '0'; i++) {\n count++\n }\n\n return count\n}\n\nexport interface FormatNumberOptions extends Intl.NumberFormatOptions {\n formatLeadingZeros?: (count: number) => string\n groupFractionLeadingZeros?: boolean\n locales?: Intl.LocalesArgument\n}\n\nexport function formatNumber(input: Numberish, options_: FormatNumberOptions = {}) {\n const { formatLeadingZeros = (count: number) => `0${toSubscriptDigits(count)}`, groupFractionLeadingZeros = true, locales = 'en-US', maximumFractionDigits = 4, ...options } = options_\n\n const formatInput = (digits: number) => (\n new Intl.NumberFormat(locales, { ...options, maximumFractionDigits: digits }).format(input as Intl.StringNumericLiteral)\n )\n\n if (!groupFractionLeadingZeros) {\n return formatInput(maximumFractionDigits)\n }\n\n const numericStr = parseExponential(input)\n const [, fractionPart = ''] = numericStr.split('.', 2)\n const leadingZerosCount = countLeadingZeros(fractionPart)\n\n if (leadingZerosCount <= 1) {\n return formatInput(maximumFractionDigits)\n }\n\n const replaceFractionZeros = (part: Intl.NumberFormatPart) => {\n if (part.type === 'fraction') {\n return `${formatLeadingZeros(leadingZerosCount)}${part.value.slice(leadingZerosCount)}`\n }\n\n return part.value\n }\n\n const parts = new Intl.NumberFormat(locales, {\n ...options, maximumFractionDigits: maximumFractionDigits + leadingZerosCount,\n })\n\n return parts.formatToParts(input as Intl.StringNumericLiteral).map(replaceFractionZeros).join('')\n}\n",
|
|
11
|
+
"import type { Numberish, NumberString, Percentage } from './types'\nimport { isBigInt, isNumber, isString } from '@/core'\nimport { SPECIAL_NUMBER_STRINGS } from './constants'\n\n// eslint-disable-next-line security/detect-unsafe-regex -- anchored regex with no backtracking risk on bounded input\nconst NUMERIC_PATTERN = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/iu\n\nexport const isSpecialNumberString = (value: string) => SPECIAL_NUMBER_STRINGS.has(value)\n\nexport function isNumberString<TStrict extends boolean = true>(value: string): value is NumberString<TStrict> {\n if (isSpecialNumberString(value)) {\n return true\n }\n\n return NUMERIC_PATTERN.test(value)\n}\n\nexport const isNumberish = <TStrict extends boolean = true>(input: unknown): input is Numberish<TStrict> => (\n isNumber(input) || isBigInt(input) || (isString(input) && isNumberString(input))\n)\n\nexport const isPercentage = (value: number): value is Percentage => value >= 0 && value <= 100\n",
|
|
12
|
+
"import { notNullish } from '@/core'\n\nexport function isValidRange<T extends bigint | number>(start: T, end: T, inclusive = true, min?: T, max?: T) {\n if (notNullish(min) && start < min) {\n return false\n }\n\n if (notNullish(max) && end > max) {\n return false\n }\n\n return inclusive ? start <= end : start < end\n}\n\nexport const isInRange = <T extends bigint | number>(value: T, min: T, max: T, inclusive = true) => (\n inclusive ? value >= min && value <= max : value > min && value < max\n)\n"
|
|
13
|
+
],
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "372A1B62607032A564756E2164756E21",
|
|
16
|
+
"names": []
|
|
17
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var o=(e)=>e==="development",u=()=>o("development")||o("dev"),L=u,d=()=>o("production")||o("prod"),R=d,g=()=>o("staging")||o("stage"),w=g;import{combineSignals as h,createAbortController as b}from"@/errors";import{resolveOptions as y}from"@/objects";import{withRetry as P}from"@/promises";async function _(e,{retry:t=!0,signal:r,timeout:p=1e4,...a}={}){let n={enabled:!0,...y(t,{})||{enabled:!1}},i=async(f)=>{let c=b(p),x=h(c.signal,r,f);return globalThis.fetch(e,{...a,signal:x}).finally(()=>c.abort())};return n.enabled?await P(i,{...n,signal:r}):await i()}var s=new Map;function U(e,t=3000){return s.set(e,t),()=>{s.delete(e)}}var m=!1,l,q=()=>{return m};function F(e=0,t=3000){if(l)return l;if(m=!0,s.size===0)process.exit(e);let r=[];for(let[n,i]of s)r.push(Promise.resolve().then(()=>n(e))),t=Math.max(t,i);let p=setTimeout(()=>process.exit(e),t);function a(){clearTimeout(p),process.exit(e)}return l=Promise.allSettled(r).then(a)}import{dirname as v,join as I}from"node:path";import{fileURLToPath as S}from"node:url";import{bufferToString as E,isBufferLike as O}from"@/buffers";var k=(e)=>O(e)?E(e):e.toString(),V=(e,...t)=>I(v(S(e.url)),...t.map(k));export{o as rc,u as sc,L as tc,d as uc,R as vc,g as wc,w as xc,_ as yc,U as zc,q as Ac,F as Bc,k as Cc,V as Dc};
|
|
2
|
+
|
|
3
|
+
//# debugId=FD588180F86F34A964756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-6whsm14p.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/system/env.ts", "../src/system/fetch.ts", "../src/system/graceful-exit.ts", "../src/system/path.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const isInMode = (key: string) => process.env.NODE_ENV === key\n\nexport const isInDevelopment = () => isInMode('development') || isInMode('dev')\nexport const isInDev = isInDevelopment\n\nexport const isInProduction = () => isInMode('production') || isInMode('prod')\nexport const isInProd = isInProduction\n\nexport const isInStaging = () => isInMode('staging') || isInMode('stage')\nexport const isInStage = isInStaging\n",
|
|
6
|
+
"import type { UrlLike } from '@/strings'\nimport { combineSignals, createAbortController } from '@/errors'\nimport { resolveOptions } from '@/objects'\nimport { withRetry, type WithRetryOptions } from '@/promises'\n\nexport interface FetchOptions extends Omit<RequestInit, 'signal'> {\n retry?: Omit<WithRetryOptions<Response>, 'signal'> & { enabled?: boolean } | boolean\n signal?: AbortSignal\n timeout?: number\n}\n\nexport async function fetch(request: RequestInfo | UrlLike, { retry = true, signal, timeout = 10_000, ...options }: FetchOptions = {}) {\n const retryOptions = { enabled: true, ...(resolveOptions(retry, {}) || { enabled: false }) }\n\n const execute = async (retrySignal?: AbortSignal) => {\n const controller = createAbortController(timeout)\n const fetchSignal = combineSignals(controller.signal, signal, retrySignal)\n\n return globalThis.fetch(request, { ...options, signal: fetchSignal }).finally(() => controller.abort())\n }\n\n return retryOptions.enabled ? await withRetry(execute, { ...retryOptions, signal }) : await execute()\n}\n",
|
|
7
|
+
"export type ExitHandler = (exitCode?: number) => Promise<void>\n\nconst exitTasks = new Map<ExitHandler, number>()\n\nexport function addExitHandler(handler: ExitHandler, maxWaitTime = 3000) {\n exitTasks.set(handler, maxWaitTime)\n\n return () => {\n exitTasks.delete(handler)\n }\n}\n\nlet _isExiting = false\nlet _exitPromise: Promise<never> | undefined\n\nexport const isExiting = () => {\n return _isExiting\n}\n\nexport function gracefulExit(exitCode = 0, maxWaitTime = 3000): Promise<never> {\n if (_exitPromise) {\n return _exitPromise\n }\n\n _isExiting = true\n\n if (exitTasks.size === 0) {\n process.exit(exitCode)\n }\n\n const promises: Array<Promise<void>> = []\n\n for (const [handler, wait] of exitTasks) {\n promises.push(Promise.resolve().then(() => handler(exitCode)))\n maxWaitTime = Math.max(maxWaitTime, wait)\n }\n\n const timer = setTimeout(() => process.exit(exitCode), maxWaitTime)\n\n function finish(): never {\n clearTimeout(timer)\n process.exit(exitCode)\n }\n\n return _exitPromise = Promise.allSettled(promises).then(finish)\n}\n",
|
|
8
|
+
"import type { PathLike } from './types'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { bufferToString, isBufferLike } from '@/buffers'\n\nexport const pathToString = (path: PathLike) => (\n isBufferLike(path) ? bufferToString(path) : path.toString()\n)\n\nexport const pwd = (importMeta: ImportMeta, ...path: PathLike[]) => (\n join(dirname(fileURLToPath(importMeta.url)), ...path.map(pathToString))\n)\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "AAAO,IAAM,EAAW,CAAC,IAAyC,IAAzB,cAE5B,EAAkB,IAAM,EAAS,aAAa,GAAK,EAAS,KAAK,EACjE,EAAU,EAEV,EAAiB,IAAM,EAAS,YAAY,GAAK,EAAS,MAAM,EAChE,EAAW,EAEX,EAAc,IAAM,EAAS,SAAS,GAAK,EAAS,OAAO,EAC3D,EAAY,ECRzB,yBAAS,2BAAgB,iBACzB,yBAAS,kBACT,oBAAS,mBAQT,eAAsB,CAAK,CAAC,GAAkC,QAAQ,GAAM,SAAQ,UAAU,OAAW,GAA0B,CAAC,EAAG,CACnI,IAAM,EAAe,CAAE,QAAS,MAAU,EAAe,EAAO,CAAC,CAAC,GAAK,CAAE,QAAS,EAAM,CAAG,EAErF,EAAU,MAAO,IAA8B,CACjD,IAAM,EAAa,EAAsB,CAAO,EAC1C,EAAc,EAAe,EAAW,OAAQ,EAAQ,CAAW,EAEzE,OAAO,WAAW,MAAM,EAAS,IAAK,EAAS,OAAQ,CAAY,CAAC,EAAE,QAAQ,IAAM,EAAW,MAAM,CAAC,GAG1G,OAAO,EAAa,QAAU,MAAM,EAAU,EAAS,IAAK,EAAc,QAAO,CAAC,EAAI,MAAM,EAAQ,ECnBxG,IAAM,EAAY,IAAI,IAEf,SAAS,CAAc,CAAC,EAAsB,EAAc,KAAM,CAGrE,OAFA,EAAU,IAAI,EAAS,CAAW,EAE3B,IAAM,CACT,EAAU,OAAO,CAAO,GAIhC,IAAI,EAAa,GACb,EAES,EAAY,IAAM,CAC3B,OAAO,GAGJ,SAAS,CAAY,CAAC,EAAW,EAAG,EAAc,KAAsB,CAC3E,GAAI,EACA,OAAO,EAKX,GAFA,EAAa,GAET,EAAU,OAAS,EACnB,QAAQ,KAAK,CAAQ,EAGzB,IAAM,EAAiC,CAAC,EAExC,QAAY,EAAS,KAAS,EAC1B,EAAS,KAAK,QAAQ,QAAQ,EAAE,KAAK,IAAM,EAAQ,CAAQ,CAAC,CAAC,EAC7D,EAAc,KAAK,IAAI,EAAa,CAAI,EAG5C,IAAM,EAAQ,WAAW,IAAM,QAAQ,KAAK,CAAQ,EAAG,CAAW,EAElE,SAAS,CAAM,EAAU,CACrB,aAAa,CAAK,EAClB,QAAQ,KAAK,CAAQ,EAGzB,OAAO,EAAe,QAAQ,WAAW,CAAQ,EAAE,KAAK,CAAM,EC3ClE,kBAAS,UAAS,kBAClB,wBAAS,iBACT,yBAAS,kBAAgB,kBAElB,IAAM,EAAe,CAAC,IACzB,EAAa,CAAI,EAAI,EAAe,CAAI,EAAI,EAAK,SAAS,EAGjD,EAAM,CAAC,KAA2B,IAC3C,EAAK,EAAQ,EAAc,EAAW,GAAG,CAAC,EAAG,GAAG,EAAK,IAAI,CAAY,CAAC",
|
|
11
|
+
"debugId": "FD588180F86F34A964756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{ensureError as i}from"@/errors";function n(r,t,o){if(!r)throw i(t,o)}function b(r,t,o){n(r,t,o??TypeError)}import{isArray as e,isEmptyArray as s}from"@/arrays";import{isCollectionLike as f,isEmptyCollection as m}from"@/collections";import{isNullish as p,isPrimitive as E,isString as c}from"@/core";import{isEmptyObject as y,isPlainObject as u}from"@/objects";function h(r){if(p(r))return!0;if(e(r))return s(r);if(E(r)){if(c(r))return r.length===0;return!1}if(u(r))return y(r);if(f(r))return m(r);return!1}export{n as oc,b as pc,h as qc};
|
|
2
|
+
|
|
3
|
+
//# debugId=F7CD4A2B34BF4C7064756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-6wkh99v0.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/common/assertions.ts", "../src/common/guards.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { ensureError, type Errorable, type ErrorCtor } from '@/errors'\n\nexport function assert(condition: unknown, message: Errorable, ctor?: ErrorCtor): asserts condition {\n if (!condition) {\n throw ensureError(message, ctor)\n }\n}\n\nexport function assertParam(condition: unknown, message: Errorable, ctor?: ErrorCtor): asserts condition {\n assert(condition, message, ctor ?? TypeError)\n}\n",
|
|
6
|
+
"import { isArray, isEmptyArray } from '@/arrays'\nimport { isCollectionLike, isEmptyCollection } from '@/collections'\nimport { isNullish, isPrimitive, isString } from '@/core'\nimport { isEmptyObject, isPlainObject } from '@/objects'\n\nexport function isEmpty(value: unknown) {\n if (isNullish(value)) {\n return true\n }\n\n if (isArray(value)) {\n return isEmptyArray(value)\n }\n\n if (isPrimitive(value)) {\n if (isString(value)) {\n return value.length === 0\n }\n\n return false\n }\n\n if (isPlainObject(value)) {\n return isEmptyObject(value)\n }\n\n if (isCollectionLike(value)) {\n return isEmptyCollection(value)\n }\n\n return false\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAA,sBAAS,iBAEF,SAAS,CAAM,CAAC,EAAoB,EAAoB,EAAqC,CAChG,GAAI,CAAC,EACD,MAAM,EAAY,EAAS,CAAI,EAIhC,SAAS,CAAW,CAAC,EAAoB,EAAoB,EAAqC,CACrG,EAAO,EAAW,EAAS,GAAQ,SAAS,ECThD,kBAAS,kBAAS,iBAClB,2BAAS,uBAAkB,sBAC3B,oBAAS,iBAAW,cAAa,eACjC,wBAAS,mBAAe,kBAEjB,SAAS,CAAO,CAAC,EAAgB,CACpC,GAAI,EAAU,CAAK,EACf,MAAO,GAGX,GAAI,EAAQ,CAAK,EACb,OAAO,EAAa,CAAK,EAG7B,GAAI,EAAY,CAAK,EAAG,CACpB,GAAI,EAAS,CAAK,EACd,OAAO,EAAM,SAAW,EAG5B,MAAO,GAGX,GAAI,EAAc,CAAK,EACnB,OAAO,EAAc,CAAK,EAG9B,GAAI,EAAiB,CAAK,EACtB,OAAO,EAAkB,CAAK,EAGlC,MAAO",
|
|
9
|
+
"debugId": "F7CD4A2B34BF4C7064756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{Ib as R}from"./chunk-c0p3wm8m.js";import{pd as p,td as n}from"./chunk-m4svr349.js";import{Fd as c,Jd as t,Kd as i,Od as J,Pd as a}from"./chunk-c9mm50vv.js";var g;((o)=>{o[o.ParseError=-32700]="ParseError";o[o.InternalError=-32603]="InternalError";o[o.InvalidParams=-32602]="InvalidParams";o[o.MethodNotFound=-32601]="MethodNotFound";o[o.InvalidRequest=-32600]="InvalidRequest"})(g||={});var d={[-32603]:"Internal error",[-32602]:"Invalid params",[-32600]:"Invalid request",[-32601]:"Method not found",[-32700]:"Parse error"};var x=(s,e)=>({jsonrpc:"2.0",method:s,...t(e)?{params:e}:{}}),P=(s,e,r)=>({id:s,jsonrpc:"2.0",method:e,...t(r)?{params:r}:{}}),h=(s,e)=>({id:s,jsonrpc:"2.0",result:e}),D=(s,e,r)=>({code:s,message:e,...t(r)?{data:r}:{}}),I=(s,e)=>({error:e,id:s,jsonrpc:"2.0"});var u=(s)=>p(s)&&s.jsonrpc==="2.0",T=(s)=>a(s)||J(s)||c(s),M=(s)=>n(s,"id","method")&&T(s.id)&&a(s.method),l=(s)=>n(s,"method")&&a(s.method)&&!n(s,"id"),m=(s)=>n(s,"id")&&T(s.id)&&!n(s,"method"),y=(s)=>p(s)&&n(s,"code","message"),S=(s)=>n(s,"error")&&y(s.error),O=(s)=>n(s,"result")&&!n(s,"error"),_=(s)=>i(s.id),v=(s)=>R(s)&&s.length>0&&s.every((e)=>{if(!u(e))return!1;return M(e)||l(e)}),B=(s)=>R(s)&&s.length>0&&s.every((e)=>{if(!u(e))return!1;return m(e)});export{g as a,d as b,x as c,P as d,h as e,D as f,I as g,u as h,T as i,M as j,l as k,m as l,y as m,S as n,O as o,_ as p,v as q,B as r};
|
|
2
|
+
|
|
3
|
+
//# debugId=C483577D8E59C51164756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-84hxmrk7.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/json-rpc/constants.ts", "../src/json-rpc/factories.ts", "../src/json-rpc/guards.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export enum JsonRpcErrorCode {\n ParseError = -32_700,\n InternalError = -32_603,\n InvalidParams = -32_602,\n MethodNotFound = -32_601,\n InvalidRequest = -32_600,\n}\n\nexport const JSON_RPC_ERROR_MESSAGES: Record<JsonRpcErrorCode, string> = {\n [JsonRpcErrorCode.InternalError]: 'Internal error',\n [JsonRpcErrorCode.InvalidParams]: 'Invalid params',\n [JsonRpcErrorCode.InvalidRequest]: 'Invalid request',\n [JsonRpcErrorCode.MethodNotFound]: 'Method not found',\n [JsonRpcErrorCode.ParseError]: 'Parse error',\n}\n",
|
|
6
|
+
"import type { JsonRpcErrorObject, JsonRpcErrorResponseMessage, JsonRpcNotifyMessage, JsonRpcRequestMessage, JsonRpcResponseId, JsonRpcSuccessResponseMessage } from './types'\nimport { notUndefined } from '../core'\n\nexport const createJsonRpcNotifyMessage = <TParams>(method: string, params?: TParams): JsonRpcNotifyMessage<TParams> => ({\n jsonrpc: '2.0', method, ...(notUndefined(params) ? { params } : {}),\n})\n\nexport const createJsonRpcRequestMessage = <TParams>(id: number | string, method: string, params?: TParams): JsonRpcRequestMessage<TParams> => ({\n id, jsonrpc: '2.0', method, ...(notUndefined(params) ? { params } : {}),\n})\n\nexport const createJsonRpcSuccessResponseMessage = <TResult = any>(id: JsonRpcResponseId, result: TResult): JsonRpcSuccessResponseMessage<TResult> => ({\n id, jsonrpc: '2.0', result,\n})\n\nexport const createJsonRpcErrorObject = <TData>(code: number, message: string, data?: TData): JsonRpcErrorObject<TData> => ({\n code, message, ...(notUndefined(data) ? { data } : {}),\n})\n\nexport const createJsonRpcErrorResponseMessage = <TData>(id: JsonRpcResponseId, error: JsonRpcErrorObject<TData>): JsonRpcErrorResponseMessage<TData> => ({\n error, id, jsonrpc: '2.0',\n})\n",
|
|
7
|
+
"import type { JsonRpcBatchRequest, JsonRpcBatchResponse, JsonRpcErrorObject, JsonRpcErrorResponseMessage, JsonRpcMessage, JsonRpcNotifyMessage, JsonRpcRequestMessage, JsonRpcResponseId, JsonRpcResponseMessage, JsonRpcResponseMessageWithNonNullId, JsonRpcSuccessResponseMessage } from './types'\nimport { isArray } from '../arrays'\nimport { isNull, isNumber, isString, notNullish } from '../core'\nimport { isKeysOf, isObject } from '../objects'\n\nexport const isJsonRpcMessage = <TParams = any, TResult = any, TErrorData = any>(message: unknown): message is JsonRpcMessage<TParams, TResult, TErrorData> => (\n isObject(message) && message.jsonrpc === '2.0'\n)\n\nexport const isValidJsonRpcId = (id: unknown): id is JsonRpcResponseId => isString(id) || isNumber(id) || isNull(id)\n\nexport const isJsonRpcRequestMessage = <TParams = any>(message: JsonRpcMessage): message is JsonRpcRequestMessage<TParams> => (\n isKeysOf(message, 'id', 'method') && isValidJsonRpcId(message.id) && isString(message.method)\n)\n\nexport const isJsonRpcNotifyMessage = <TParams = any>(message: JsonRpcMessage): message is JsonRpcNotifyMessage<TParams> => (\n isKeysOf(message, 'method') && isString(message.method) && !isKeysOf(message, 'id')\n)\n\nexport const isJsonRpcResponseMessage = <TResult = any, TErrorData = any>(message: JsonRpcMessage): message is JsonRpcResponseMessage<TResult, TErrorData> => (\n isKeysOf(message, 'id') && isValidJsonRpcId(message.id) && !isKeysOf(message, 'method')\n)\n\nexport const isJsonRpcError = <TData = any>(message: unknown): message is JsonRpcErrorObject<TData> => (\n isObject(message) && isKeysOf(message, 'code', 'message')\n)\n\nexport const isJsonRpcErrorResponseMessage = <TData = any>(message: JsonRpcMessage): message is JsonRpcErrorResponseMessage<TData> => (\n isKeysOf(message, 'error') && isJsonRpcError(message.error)\n)\n\nexport const isJsonRpcSuccessResponseMessage = <TResult = any>(message: JsonRpcMessage): message is JsonRpcSuccessResponseMessage<TResult> => (\n isKeysOf(message, 'result') && !isKeysOf(message, 'error')\n)\n\nexport const isJsonRpcResponseHasNonNullableId = <TResult = any, TErrorData = any>(response: JsonRpcResponseMessage): response is JsonRpcResponseMessageWithNonNullId<TResult, TErrorData> => (\n notNullish(response.id)\n)\n\nexport const isJsonRpcBatchRequest = <TParams = any>(value: unknown): value is JsonRpcBatchRequest<TParams> => (\n isArray(value) && value.length > 0 && value.every((item) => {\n if (!isJsonRpcMessage(item)) {\n return false\n }\n\n return isJsonRpcRequestMessage(item) || isJsonRpcNotifyMessage(item)\n })\n)\n\nexport const isJsonRpcBatchResponse = <TResult = any, TErrorData = any>(value: unknown): value is JsonRpcBatchResponse<TResult, TErrorData> => (\n isArray(value) && value.length > 0 && value.every((item) => {\n if (!isJsonRpcMessage(item)) {\n return false\n }\n\n return isJsonRpcResponseMessage(item)\n })\n)\n"
|
|
8
|
+
],
|
|
9
|
+
"mappings": "+KAAO,FAAK,HAAL,CAAK,IAAL,CACH,eAAa,QAAb,aACA,kBAAgB,QAAhB,gBACA,kBAAgB,QAAhB,gBACA,mBAAiB,QAAjB,iBACA,mBAAiB,QAAjB,mBALQ,QAQL,IAAM,EAA4D,EACpE,QAAiC,kBACjC,QAAiC,kBACjC,QAAkC,mBAClC,QAAkC,oBAClC,QAA8B,aACnC,ECXO,IAAM,EAA6B,CAAU,EAAgB,KAAqD,CACrH,QAAS,MAAO,YAAY,EAAa,CAAM,EAAI,CAAE,QAAO,EAAI,CAAC,CACrE,GAEa,EAA8B,CAAU,EAAqB,EAAgB,KAAsD,CAC5I,KAAI,QAAS,MAAO,YAAY,EAAa,CAAM,EAAI,CAAE,QAAO,EAAI,CAAC,CACzE,GAEa,EAAsC,CAAgB,EAAuB,KAA6D,CACnJ,KAAI,QAAS,MAAO,QACxB,GAEa,EAA2B,CAAQ,EAAc,EAAiB,KAA6C,CACxH,OAAM,aAAa,EAAa,CAAI,EAAI,CAAE,MAAK,EAAI,CAAC,CACxD,GAEa,EAAoC,CAAQ,EAAuB,KAA0E,CACtJ,QAAO,KAAI,QAAS,KACxB,GChBO,IAAM,EAAmB,CAAiD,IAC7E,EAAS,CAAO,GAAK,EAAQ,UAAY,MAGhC,EAAmB,CAAC,IAAyC,EAAS,CAAE,GAAK,EAAS,CAAE,GAAK,EAAO,CAAE,EAEtG,EAA0B,CAAgB,IACnD,EAAS,EAAS,KAAM,QAAQ,GAAK,EAAiB,EAAQ,EAAE,GAAK,EAAS,EAAQ,MAAM,EAGnF,EAAyB,CAAgB,IAClD,EAAS,EAAS,QAAQ,GAAK,EAAS,EAAQ,MAAM,GAAK,CAAC,EAAS,EAAS,IAAI,EAGzE,EAA2B,CAAkC,IACtE,EAAS,EAAS,IAAI,GAAK,EAAiB,EAAQ,EAAE,GAAK,CAAC,EAAS,EAAS,QAAQ,EAG7E,EAAiB,CAAc,IACxC,EAAS,CAAO,GAAK,EAAS,EAAS,OAAQ,SAAS,EAG/C,EAAgC,CAAc,IACvD,EAAS,EAAS,OAAO,GAAK,EAAe,EAAQ,KAAK,EAGjD,EAAkC,CAAgB,IAC3D,EAAS,EAAS,QAAQ,GAAK,CAAC,EAAS,EAAS,OAAO,EAGhD,EAAoC,CAAkC,IAC/E,EAAW,EAAS,EAAE,EAGb,EAAwB,CAAgB,IACjD,EAAQ,CAAK,GAAK,EAAM,OAAS,GAAK,EAAM,MAAM,CAAC,IAAS,CACxD,GAAI,CAAC,EAAiB,CAAI,EACtB,MAAO,GAGX,OAAO,EAAwB,CAAI,GAAK,EAAuB,CAAI,EACtE,EAGQ,EAAyB,CAAkC,IACpE,EAAQ,CAAK,GAAK,EAAM,OAAS,GAAK,EAAM,MAAM,CAAC,IAAS,CACxD,GAAI,CAAC,EAAiB,CAAI,EACtB,MAAO,GAGX,OAAO,EAAyB,CAAI,EACvC",
|
|
10
|
+
"debugId": "C483577D8E59C51164756E2164756E21",
|
|
11
|
+
"names": []
|
|
12
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{sb as l,tb as g}from"./chunk-bjmntg2y.js";import{Lb as o}from"./chunk-c0p3wm8m.js";var i=new Set([" ",`
|
|
2
|
+
`,"\r","\t","\v","\f"]);function w(t=16,e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"){let r="";for(let n=0;n<t;n++)r+=e.charAt(Math.floor(Math.random()*e.length));return r}var E=(t)=>t.length===0;function s({protocol:t},e){if(!e?.length)return!0;return e.some((r)=>`${r.toLowerCase()}:`===t)}function p(t,e){if(t instanceof URL)return s(t,e);return g(()=>s(new URL(t),e),!1)}var C=(t,e=["ws","wss"])=>p(t,e),R=(t,e=["http","https"])=>p(t,e),U=(t,...e)=>e.length>0&&e.every((r)=>t===r),H=(t,...e)=>e.length>0&&l(t.toLowerCase(),(r)=>e.every((n)=>r===n.toLowerCase())),c=(t,e)=>e.every((r)=>t.includes(r)),f=(t,e)=>e.some((r)=>t.includes(r)),W=(t,e,r="all")=>r==="all"?c(t,o(e)):f(t,o(e));function x(t,e){let r=e?`{${e*2}}`:"+";return new RegExp(`^(?:0x)?[0-9a-f]${r}$`,"iu").test(t)}var k=(t,e)=>t.startsWith("0x")&&x(t,e);var v=(t,e)=>t.startsWith(e)?t:e+t,N=(t,e)=>t.endsWith(e)?t:t+e,P=(t,e)=>t.startsWith(e)?t.slice(e.length):t,M=(t,e)=>e.length>0&&t.endsWith(e)?t.slice(0,-e.length):t,T=(t)=>t.charAt(0).toUpperCase()+t.slice(1),S=(t)=>t.replaceAll(/[$()*+.?[\\\]^{|}]/gu,String.raw`\$&`).replaceAll("-",String.raw`\x2d`);function*L(t,e){if(e<=0)throw RangeError(`chunk size must be a positive number, got ${e}`);let r=t.length;for(let n=0;n<r;n+=e)yield t.slice(n,n+e)}var a=(t,e,r=" ")=>t.padStart(e,r),q=(t,e)=>a(t.toString(),e,"0");function V(t,e,r="..."){if(t.length<=e)return t;if(r.length>=e)return r.slice(0,e);return t.slice(0,e-r.length)+r}function Z(t,e,r="..."){if(t.length<=e)return t;if(r.length>=e)return r.slice(0,e);let n=Math.floor((e-r.length)/2),u=e-r.length-n;return t.slice(0,n)+r+t.slice(-u)}function h(t,e=i){if(typeof e==="string")e=new Set(e);let r=t.length,n=0;while(n<r&&e.has(t[n]))n++;return n>0?t.slice(n,r):t}function m(t,e=i){if(typeof e==="string")e=new Set(e);let r=t.length;while(r>0&&e.has(t[r-1]))r--;return r<t.length?t.slice(0,r):t}var _=(t,e=i)=>h(m(t,e),e),j=(t,e)=>t.replaceAll(new RegExp(`(?:${S(e)}){2,}`,"g"),e);export{i as Fa,w as Ga,E as Ha,s as Ia,p as Ja,C as Ka,R as La,U as Ma,H as Na,c as Oa,f as Pa,W as Qa,x as Ra,k as Sa,v as Ta,N as Ua,P as Va,M as Wa,T as Xa,S as Ya,L as Za,a as _a,q as $a,V as ab,Z as bb,h as cb,m as db,_ as eb,j as fb};
|
|
3
|
+
|
|
4
|
+
//# debugId=58CDDE4C8783DB1A64756E2164756E21
|
|
5
|
+
//# sourceMappingURL=chunk-bham5jvm.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/strings/constants.ts", "../src/strings/factories.ts", "../src/strings/guards.ts", "../src/strings/manipulations.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const WHITESPACE_CHARACTERS = new Set([' ', '\\n', '\\r', '\\t', '\\v', '\\f'])\n",
|
|
6
|
+
"export function randomStr(length = 16, characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {\n let result = ''\n\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length))\n }\n\n return result\n}\n",
|
|
7
|
+
"import type { Nullish } from '../core'\nimport type { HexString, UrlLike } from './types'\nimport { wrap } from '../arrays'\nimport { transform, tryCatch } from '../functions'\n\nexport const isEmptyString = (value: string) => value.length === 0\n\nexport function isValidProtocol({ protocol }: URL, protocols?: Nullish<string[]>) {\n if (!protocols?.length) {\n return true\n }\n\n return protocols.some((x) => `${x.toLowerCase()}:` === protocol)\n}\n\nexport function isValidUrl(url: UrlLike, protocols?: Nullish<string[]>) {\n if (url instanceof URL) {\n return isValidProtocol(url, protocols)\n }\n\n return tryCatch(() => isValidProtocol(new URL(url), protocols), false)\n}\n\nexport const isWebSocketUrl = (url: UrlLike, wsProtocols = ['ws', 'wss']) => isValidUrl(url, wsProtocols)\n\nexport const isHttpUrl = (url: UrlLike, httpProtocols = ['http', 'https']) => isValidUrl(url, httpProtocols)\n\nexport const isStringEquals = (str: string, ...others: string[]) => others.length > 0 && others.every((other) => str === other)\n\nexport const isStringEqualsIgnoreCase = (str: string, ...others: string[]) => (\n others.length > 0 && transform(str.toLowerCase(), (x) => others.every((other) => x === other.toLowerCase()))\n)\n\nexport const isIncludesAll = (str: string, search: string[]) => search.every((s) => str.includes(s))\n\nexport const isIncludesAny = (str: string, search: string[]) => search.some((s) => str.includes(s))\n\nexport const isIncludes = (str: string, search: string[] | string, type: 'all' | 'any' = 'all') => (\n type === 'all' ? isIncludesAll(str, wrap(search)) : isIncludesAny(str, wrap(search))\n)\n\nexport function isHexString(value: string, length?: number) {\n const len = length ? `{${length * 2}}` : '+'\n const regex = new RegExp(`^(?:0x)?[0-9a-f]${len}$`, 'iu')\n\n return regex.test(value)\n}\n\nexport const isStrictHexString = (value: string, length?: number): value is HexString => (\n value.startsWith('0x') && isHexString(value, length)\n)\n",
|
|
8
|
+
"import type { Numberish } from '../numbers'\nimport { WHITESPACE_CHARACTERS } from './constants'\n\nexport const ensurePrefix = (str: string, prefix: string) => (str.startsWith(prefix) ? str : prefix + str)\n\nexport const ensureSuffix = (str: string, suffix: string) => (str.endsWith(suffix) ? str : str + suffix)\n\nexport const stripPrefix = (str: string, prefix: string) => (str.startsWith(prefix) ? str.slice(prefix.length) : str)\n\nexport const stripSuffix = (str: string, suffix: string) => (suffix.length > 0 && str.endsWith(suffix) ? str.slice(0, -suffix.length) : str)\n\nexport const capitalize = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)\n\nexport const escapeRegExp = (input: string) => (\n input.replaceAll(/[$()*+.?[\\\\\\]^{|}]/gu, String.raw`\\$&`).replaceAll('-', String.raw`\\x2d`)\n)\n\nexport function * chunkStr(str: string, size: number) {\n if (size <= 0) {\n throw new RangeError(`chunk size must be a positive number, got ${size}`)\n }\n\n const len = str.length\n\n for (let i = 0; i < len; i += size) {\n yield str.slice(i, i + size)\n }\n}\n\nexport const padStart = (str: string, targetLength: number, padString = ' ') => (\n str.padStart(targetLength, padString)\n)\n\nexport const padZeroStart = (num: Numberish | string, targetLength: number) => padStart(num.toString(), targetLength, '0')\n\nexport function truncate(str: string, maxLength: number, omission = '...') {\n if (str.length <= maxLength) {\n return str\n }\n\n if (omission.length >= maxLength) {\n return omission.slice(0, maxLength)\n }\n\n return str.slice(0, maxLength - omission.length) + omission\n}\n\nexport function truncateMiddle(str: string, maxLength: number, omission = '...') {\n if (str.length <= maxLength) {\n return str\n }\n\n if (omission.length >= maxLength) {\n return omission.slice(0, maxLength)\n }\n\n const left = Math.floor((maxLength - omission.length) / 2)\n const right = maxLength - omission.length - left\n\n return str.slice(0, left) + omission + str.slice(-right)\n}\n\nexport function ltrim(str: string, characters: Set<string> | string = WHITESPACE_CHARACTERS) {\n if (typeof characters === 'string') {\n characters = new Set(characters)\n }\n\n const end = str.length\n\n let start = 0\n\n while (start < end && characters.has(str[start]!)) {\n start++\n }\n\n return start > 0 ? str.slice(start, end) : str\n}\n\nexport function rtrim(str: string, characters: Set<string> | string = WHITESPACE_CHARACTERS) {\n if (typeof characters === 'string') {\n characters = new Set(characters)\n }\n\n let end = str.length\n\n while (end > 0 && characters.has(str[end - 1]!)) {\n end--\n }\n\n return end < str.length ? str.slice(0, end) : str\n}\n\nexport const trim = (str: string, characters: Set<string> | string = WHITESPACE_CHARACTERS) => (\n ltrim(rtrim(str, characters), characters)\n)\n\nexport const trimRepeated = (input: string, target: string) => (\n input.replaceAll(new RegExp(`(?:${escapeRegExp(target)}){2,}`, 'g'), target)\n)\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "58CDDE4C8783DB1A64756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var s=(n)=>typeof n==="function";function x(n,r){return r(n),n}var y=(n,r)=>r(n);function h(n,r){try{return n()}catch(T){return s(r)?r(T):r}}var a=()=>({lastArgs:void 0,lastResult:void 0,lastThis:void 0,timeoutId:void 0});function g(n,r){let{lastArgs:T,lastThis:e}=n;n.timeoutId=void 0,n.lastArgs=void 0,n.lastResult=r.apply(e,T)}function i(n,r){if(n.timeoutId!==void 0)clearTimeout(n.timeoutId),r();return n.lastResult}function w(n,r){let T=a(),e=()=>g(T,n),t=function(...f){if(T.lastArgs=f,T.lastThis=this,T.timeoutId!==void 0)clearTimeout(T.timeoutId);T.timeoutId=setTimeout(e,r)};return t.cancel=()=>{if(T.timeoutId!==void 0)clearTimeout(T.timeoutId),T.timeoutId=void 0,T.lastArgs=void 0},t.flush=()=>{return i(T,e)},t}var v=()=>{return},R=(n)=>n();function b(n){for(let r of n)r?.()}function z(n,{cache:r=new Map,resolver:T}={}){let e=function(...t){let f=T?T(...t):t[0];if(r.has(f))return r.get(f);let o=n.apply(this,t);return r.set(f,o),o};return e.cache=r,e}import{normalizeError as d}from"@/errors";function D(n){let r=!1,T,e,t=(...f)=>{if(r){if(e)throw d(e);return T}r=!0;try{return T=n(...f)}catch(o){throw e=d(o)}};return t.reset=()=>{r=!1,e=void 0},t}import{isNonEmptyArray as m}from"@/arrays";function E(...n){if(!m(n))return;let r=n[0]();for(let T=1;T<n.length;T++)r=n[T](r);return r}function j(n,r){let T=a(),e,t=()=>{e=Date.now(),g(T,n)},f=function(...o){let p=Date.now();if(T.lastArgs=o,T.lastThis=this,e===void 0){e=p,T.lastResult=n.apply(this,o);return}let u=r-(p-e);if(u<=0){if(T.timeoutId!==void 0)clearTimeout(T.timeoutId),T.timeoutId=void 0;e=p,T.lastResult=n.apply(this,o)}else T.timeoutId??=setTimeout(t,u)};return f.cancel=()=>{if(T.timeoutId!==void 0)clearTimeout(T.timeoutId),T.timeoutId=void 0;T.lastArgs=void 0,e=void 0},f.flush=()=>{return i(T,t)},f}export{s as qb,x as rb,y as sb,h as tb,a as ub,g as vb,i as wb,w as xb,v as yb,R as zb,b as Ab,z as Bb,D as Cb,E as Db,j as Eb};
|
|
2
|
+
|
|
3
|
+
//# debugId=084D58C2497EAF6F64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-bjmntg2y.js.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/functions/guards.ts", "../src/functions/compositions.ts", "../src/functions/timer-state.ts", "../src/functions/debounce.ts", "../src/functions/executions.ts", "../src/functions/memoize.ts", "../src/functions/once.ts", "../src/functions/pipe.ts", "../src/functions/throttle.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { Fn } from './types'\n\nexport const isFunction = <T extends Fn>(value: unknown): value is T => (\n typeof value === 'function'\n)\n",
|
|
6
|
+
"import { isFunction } from './guards'\n\nexport function tap<T>(value: T, callback: (value: T) => void) {\n callback(value)\n\n return value\n}\n\nexport const transform = <T, R>(value: T, callback: (value: T) => R) => callback(value)\n\nexport function tryCatch<T>(fn: () => T, fallback: T | ((error: unknown) => T)) {\n try {\n return fn()\n } catch (error) {\n return isFunction(fallback) ? fallback(error) : fallback\n }\n}\n",
|
|
7
|
+
"import type { Args, Fn } from './types'\n\nexport interface TimerState<T extends Fn> {\n lastArgs: Args<T> | undefined\n lastResult: ReturnType<T> | undefined\n lastThis: unknown\n timeoutId: ReturnType<typeof setTimeout> | undefined\n}\n\nexport const createTimerState = <T extends Fn>(): TimerState<T> => ({\n lastArgs: undefined,\n lastResult: undefined,\n lastThis: undefined,\n timeoutId: undefined,\n})\n\nexport function invokeTimer<T extends Fn>(state: TimerState<T>, fn: T) {\n const args = state.lastArgs!\n const thisArg = state.lastThis\n\n state.timeoutId = undefined\n state.lastArgs = undefined\n state.lastResult = fn.apply(thisArg, args)\n}\n\nexport function flushTimer<T extends Fn>(state: TimerState<T>, invoke: () => void) {\n if (state.timeoutId !== undefined) {\n clearTimeout(state.timeoutId)\n invoke()\n }\n\n return state.lastResult\n}\n",
|
|
8
|
+
"import type { Args, Fn, TimingControlled } from './types'\nimport { createTimerState, flushTimer, invokeTimer } from './timer-state'\n\nexport type Debounced<T extends Fn> = TimingControlled<T>\n\nexport function debounce<T extends Fn>(fn: T, wait: number): Debounced<T> {\n const state = createTimerState<T>()\n const invoke = () => invokeTimer(state, fn)\n\n const debounced: Debounced<T> = function (this: unknown, ...args: Args<T>) {\n state.lastArgs = args\n state.lastThis = this\n\n if (state.timeoutId !== undefined) {\n clearTimeout(state.timeoutId)\n }\n\n state.timeoutId = setTimeout(invoke, wait)\n }\n\n debounced.cancel = () => {\n if (state.timeoutId !== undefined) {\n clearTimeout(state.timeoutId)\n state.timeoutId = undefined\n state.lastArgs = undefined\n }\n }\n\n debounced.flush = () => {\n return flushTimer(state, invoke)\n }\n\n return debounced\n}\n",
|
|
9
|
+
"import type { Fn } from './types'\nimport type { Nullish } from '@/core'\n\nexport const noop = () => void 0\n\nexport const invoke = <T>(fn: () => T) => fn()\n\nexport function invokes(functions: Array<Nullish<Fn>>) {\n for (const fn of functions) {\n fn?.()\n }\n}\n",
|
|
10
|
+
"import type { Args, Fn } from './types'\n\nexport interface MemoizeCache<V = unknown> {\n delete(key: unknown): boolean\n get(key: unknown): V | undefined\n has(key: unknown): boolean\n set(key: unknown, value: V): void\n}\n\nexport interface MemoizeOptions<T extends Fn> {\n cache?: MemoizeCache<ReturnType<T>>\n resolver?: (...args: Args<T>) => unknown\n}\n\nexport function memoize<T extends Fn>(fn: T, { cache = new Map(), resolver }: MemoizeOptions<T> = {}) {\n const memoized = function (this: unknown, ...args: Args<T>) {\n const key = resolver ? resolver(...args) : args[0]\n\n if (cache.has(key)) {\n return cache.get(key)\n }\n\n const result = fn.apply(this, args)\n\n cache.set(key, result)\n\n return result\n } as T & { cache: MemoizeCache<ReturnType<T>> }\n\n memoized.cache = cache\n\n return memoized\n}\n",
|
|
11
|
+
"import type { Args, Fn } from './types'\nimport { normalizeError } from '@/errors'\n\nexport function once<T extends Fn>(fn: T) {\n let called = false\n let result: ReturnType<T>\n let error: unknown\n\n const cb = (...args: Args<T>): ReturnType<T> => {\n if (called) {\n if (error) {\n throw normalizeError(error)\n }\n\n return result\n }\n\n called = true\n\n try {\n return (result = fn(...args))\n } catch (error_) {\n throw error = normalizeError(error_)\n }\n }\n\n cb.reset = () => {\n called = false\n error = undefined\n }\n\n return cb\n}\n",
|
|
12
|
+
"import type { Fn } from './types'\nimport { isNonEmptyArray } from '@/arrays'\n\nexport function pipe(): void\nexport function pipe<T>(fn: () => T): T\nexport function pipe<T1, T2>(fn1: () => T1, fn2: (arg: T1) => T2): T2\nexport function pipe<T1, T2, T3>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3): T3\nexport function pipe<T1, T2, T3, T4>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4): T4\nexport function pipe<T1, T2, T3, T4, T5>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5): T5\nexport function pipe<T1, T2, T3, T4, T5, T6>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6): T6\nexport function pipe<T1, T2, T3, T4, T5, T6, T7>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7): T7\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8): T8\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9): T9\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10): T10\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11): T11\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12): T12\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13): T13\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14): T14\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15): T15\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16): T16\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17): T17\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17, fn18: (arg: T17) => T18): T18\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17, fn18: (arg: T17) => T18, fn19: (arg: T18) => T19): T19\nexport function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17, fn18: (arg: T17) => T18, fn19: (arg: T18) => T19, fn20: (arg: T19) => T20): T20\nexport function pipe(...fns: Fn[]): unknown\n\nexport function pipe(...fns: Fn[]) {\n if (!isNonEmptyArray(fns)) {\n return\n }\n\n let result = fns[0]()\n\n for (let i = 1; i < fns.length; i++) {\n result = fns[i]!(result)\n }\n\n return result\n}\n",
|
|
13
|
+
"import type { Args, Fn, TimingControlled } from './types'\nimport { createTimerState, flushTimer, invokeTimer } from './timer-state'\n\nexport type Throttled<T extends Fn> = TimingControlled<T>\n\nexport function throttle<T extends Fn>(fn: T, wait: number): Throttled<T> {\n const state = createTimerState<T>()\n\n let lastCallTime: number | undefined\n\n const invoke = () => {\n lastCallTime = Date.now()\n invokeTimer(state, fn)\n }\n\n const throttled: Throttled<T> = function (this: unknown, ...args: Args<T>) {\n const now = Date.now()\n\n state.lastArgs = args\n state.lastThis = this\n\n if (lastCallTime === undefined) {\n lastCallTime = now\n state.lastResult = fn.apply(this, args)\n\n return\n }\n\n const remaining = wait - (now - lastCallTime)\n\n if (remaining <= 0) {\n if (state.timeoutId !== undefined) {\n clearTimeout(state.timeoutId)\n state.timeoutId = undefined\n }\n\n lastCallTime = now\n state.lastResult = fn.apply(this, args)\n } else {\n state.timeoutId ??= setTimeout(invoke, remaining)\n }\n }\n\n throttled.cancel = () => {\n if (state.timeoutId !== undefined) {\n clearTimeout(state.timeoutId)\n state.timeoutId = undefined\n }\n\n state.lastArgs = undefined\n lastCallTime = undefined\n }\n\n throttled.flush = () => {\n return flushTimer(state, invoke)\n }\n\n return throttled\n}\n"
|
|
14
|
+
],
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "084D58C2497EAF6F64756E2164756E21",
|
|
17
|
+
"names": []
|
|
18
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{cd as d,fd as P}from"./chunk-4w1emwv7.js";function p(e,a,t){if(!a)return e;let r=()=>t?P(t):a.reason??d();if(a.aborted)return Promise.reject(r());return new Promise((T,n)=>{let b=!1,o,f=(i)=>{if(!b)b=!0,a.removeEventListener("abort",o),i?.()};o=()=>{f(()=>n(r()))},a.addEventListener("abort",o),e.then((i)=>f(()=>T(i)),(i)=>f(()=>n(i)))})}var O=(e)=>async(a)=>{return Promise.resolve(e(a)).then(()=>a)};O.catch=(e)=>async(a)=>{throw await e(a),a};async function V(e,a){try{return await e()}catch(t){return await a(t)}}import{combineSignals as W,createAbortController as C,createAbortError as j}from"@/errors";function D(e,a){if(a)e?.removeEventListener("abort",a)}function F(e,a){let t=()=>a();if(e?.aborted)a();else e?.addEventListener("abort",t);return t}function L(e,a,t,r){let T=()=>{try{e()}catch(n){t?.(n)}try{a?.()}catch(n){t?.(n)}};if(r)T();else queueMicrotask(T)}function G({onCallbackError:e,onReject:a,onResolve:t,onSettle:r,signal:T,synchronousCallbacks:n=!1}={}){let b,o,f,i=!1,A=!1,s=!1,l=new Promise((w,y)=>{b=w,o=y}),g=(w)=>{D(T,f),L(w,r,e,n)};return Object.defineProperty(l,"isSettled",{enumerable:!0,get:()=>i}),Object.defineProperty(l,"isPending",{enumerable:!0,get:()=>!i}),Object.defineProperty(l,"isResolved",{enumerable:!0,get:()=>A}),Object.defineProperty(l,"isRejected",{enumerable:!0,get:()=>s}),l.resolve=(w)=>{if(i)return;i=!0,A=!0,b(w),g(()=>t?.(w))},l.reject=(w)=>{if(i)return;i=!0,s=!0,o(w),g(()=>a?.(w))},f=F(T,()=>{l.reject(T?.reason??j())}),l}var Z=(e,{error:a,signal:t,...r}={})=>{let T=C(e,a);return G({...r,onSettle(){T.abort(),r.onSettle?.()},signal:W(t,T.signal)})};import{isFunction as c}from"@/functions";import{isObject as x}from"@/objects";var te=(e)=>x(e)&&c(e.then),re=(e)=>x(e)&&c(e.then)&&c(e.catch)&&c(e.finally);import{isNonEmptyArray as N}from"@/arrays";async function ie(...e){if(!N(e))return;let a=await e[0]();for(let t=1;t<e.length;t++)a=await e[t](a);return a}import{assertParam as h}from"@/common";import{createAbortController as B,isAbortError as H}from"@/errors";import{isFunction as v}from"@/functions";import{isPlainObject as R}from"@/objects";import{combineSignals as I,createAbortController as M}from"@/errors";import{transform as q}from"@/functions";var u=async(e,{error:a,signal:t}={})=>p(new Promise((r)=>setTimeout(r,e)),t,a),we=(e,a,{error:t,signal:r}={})=>q(M(a,t),(T)=>p(e,I(r,T.signal)).finally(()=>T.abort()));function ye(e,a={}){let t,r;if(v(e)&&R(a))t=e,r=a;else h(R(e),"options must be an object"),h(v(a),"fn must be a function"),t=a,r=e;let{delay:T=0,immediately:n=!0,onError:b,stopOnError:o=!0}=r,f=B(),i=!0,A,s=()=>{return i=!1,f.abort(),A??Promise.resolve()},l,g=async()=>{if(!i)return;try{if(await p(Promise.resolve(t(f.signal)),f.signal),i)await u(T,{signal:f.signal})}catch(w){if(H(w)&&!i)return;if(b?.(w),o){s();return}}setTimeout(l,0)};if(l=()=>{A=g().finally(()=>{A=void 0})},n)Promise.resolve().then(l);else setTimeout(l,T);return s}import{isAbortError as E}from"@/errors";import{clamp as k}from"@/numbers";function _(e,{backoff:a=2,delay:t=1000,jitter:r=0.01,maxDelay:T=1e4}={}){let n=t*a**(e-1),b=k(n,0,T);if(r<=0)return b;let o=b*r,f=(Math.random()-0.5)*2*o;return k(b+f,0,T)}function m(e){if(e.length===1)return e[0];return AggregateError(e,"All retry attempts failed")}function z(e){if(!E(e))throw e}async function S(e,a,t,r,T){let n=_(e,a);await t?.(n,T),await u(n,{signal:r}).catch(z)}async function J(e,a,t,r,T,n){if(E(e))throw e;if(a.push(e),t<=0)throw m(a);if(r&&!await r(e,n))throw m(a);await T?.(e,n)}async function K(e,a,t,r,T,n){if(!r||!await r(e,n))return!0;if(t<=0)throw m(a);return await T?.(e,n),!1}async function Re(e,{maxAttempts:a=3,onBeforeWaitForNextAttempt:t,onFailedAttempt:r,onSuccessAttempt:T,shouldRetry:n,shouldRetryOnSuccess:b,signal:o,...f}={}){if(a<1)throw RangeError("maxAttempts must be at least 1");if(o)o.throwIfAborted();let i=0,A,s=[];while(i<a){let l=a-(i+++1),g={attempts:i,retriesLeft:l,signal:o};try{if(o)o.throwIfAborted();A=await p(Promise.resolve(e(o)),o)}catch(y){await J(y,s,l,n,r,g),await S(i,f,t,o,g);continue}if(await K(A,s,l,b,T,g))return A;await S(i,f,t,o,g)}throw m(s)}export{p as Ec,O as Fc,V as Gc,D as Hc,F as Ic,L as Jc,G as Kc,Z as Lc,te as Mc,re as Nc,ie as Oc,u as Pc,we as Qc,ye as Rc,_ as Sc,m as Tc,z as Uc,S as Vc,J as Wc,K as Xc,Re as Yc};
|
|
2
|
+
|
|
3
|
+
//# debugId=809A21B282D5914A64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-bx5gjsp0.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/promises/abortable.ts", "../src/promises/compositions.ts", "../src/promises/deferred.ts", "../src/promises/guards.ts", "../src/promises/pipe.ts", "../src/promises/poll.ts", "../src/promises/timers.ts", "../src/promises/retry.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { createAbortError, ensureError, type Errorable } from '../errors'\n\nexport function abortable<T>(promise: Promise<T>, signal?: AbortSignal, error?: Errorable): Promise<T> {\n if (!signal) {\n return promise\n }\n\n const createError = () => (error ? ensureError(error) : (signal.reason ?? createAbortError()))\n\n if (signal.aborted) {\n return Promise.reject(createError())\n }\n\n return new Promise<T>((resolve, reject) => {\n let isSettled = false\n let onAbort: () => void\n\n const cleanup = (afterCleanup?: () => void) => {\n if (!isSettled) {\n isSettled = true\n signal.removeEventListener('abort', onAbort)\n afterCleanup?.()\n }\n }\n\n onAbort = () => {\n cleanup(() => reject(createError()))\n }\n\n signal.addEventListener('abort', onAbort)\n\n promise.then(\n (value) => cleanup(() => resolve(value)),\n (error_) => cleanup(() => reject(error_)),\n )\n })\n}\n",
|
|
6
|
+
"import type { Awaitable } from './types'\n\nexport const pTap = <T>(fn: (value: T) => Awaitable<unknown>) => async (value: T): Promise<T> => {\n return Promise.resolve(fn(value)).then(() => value)\n}\n\npTap.catch = (fn: (error: unknown) => Awaitable<unknown>) => async (error: unknown): Promise<never> => {\n await fn(error)\n throw error\n}\n\nexport async function tryCatchAsync<T>(fn: () => Awaitable<T>, fallback: (error: unknown) => Awaitable<T>) {\n try {\n return await fn()\n } catch (error) {\n return await fallback(error)\n }\n}\n",
|
|
7
|
+
"import { combineSignals, createAbortController, createAbortError, type Errorable } from '@/errors'\n\nexport interface DeferredPromiseOptions<T> {\n onCallbackError?: (error: unknown) => void\n onReject?: (reason: unknown) => void\n onResolve?: (value: PromiseLike<T> | T) => void\n onSettle?: () => void\n signal?: AbortSignal\n synchronousCallbacks?: boolean\n}\n\nexport interface DeferredPromise<T> extends Promise<T> {\n isPending: boolean\n isRejected: boolean\n isResolved: boolean\n isSettled: boolean\n reject: (reason?: unknown) => void\n resolve: (value: PromiseLike<T> | T) => void\n}\n\nexport function cleanupAbortSignal(signal: AbortSignal | undefined, abortHandler: (() => void) | undefined) {\n if (abortHandler) {\n signal?.removeEventListener('abort', abortHandler)\n }\n}\n\nexport function setupAbortSignal(signal: AbortSignal | undefined, onAbort: () => void) {\n const abortHandler = () => onAbort()\n\n if (signal?.aborted) {\n onAbort()\n } else {\n signal?.addEventListener('abort', abortHandler)\n }\n\n return abortHandler\n}\n\nexport function invokeSettleCallback(cb: () => void, onSettle: (() => void) | undefined, onCallbackError: ((error: unknown) => void) | undefined, synchronousCallbacks: boolean) {\n const callback = () => {\n try {\n cb()\n } catch (error) {\n onCallbackError?.(error)\n }\n\n try {\n onSettle?.()\n } catch (error) {\n onCallbackError?.(error)\n }\n }\n\n if (synchronousCallbacks) {\n callback()\n } else {\n queueMicrotask(callback)\n }\n}\n\nexport function createDeferred<T>({ onCallbackError, onReject, onResolve, onSettle, signal, synchronousCallbacks = false }: DeferredPromiseOptions<T> = {}): DeferredPromise<T> {\n let resolveFn: (value: PromiseLike<T> | T) => void\n let rejectFn: (reason?: unknown) => void\n let abortHandler: (() => void) | undefined\n\n let isSettled = false\n let isResolved = false\n let isRejected = false\n\n const promise = <DeferredPromise<T>> new Promise<T>((resolve, reject) => {\n resolveFn = resolve\n rejectFn = reject\n })\n\n const afterSettle = (cb: () => void) => {\n cleanupAbortSignal(signal, abortHandler)\n invokeSettleCallback(cb, onSettle, onCallbackError, synchronousCallbacks)\n }\n\n Object.defineProperty(promise, 'isSettled', { enumerable: true, get: () => isSettled })\n Object.defineProperty(promise, 'isPending', { enumerable: true, get: () => !isSettled })\n Object.defineProperty(promise, 'isResolved', { enumerable: true, get: () => isResolved })\n Object.defineProperty(promise, 'isRejected', { enumerable: true, get: () => isRejected })\n\n promise.resolve = (value: PromiseLike<T> | T) => {\n if (isSettled) {\n return\n }\n\n isSettled = true\n isResolved = true\n\n resolveFn(value)\n afterSettle(() => onResolve?.(value))\n }\n\n promise.reject = (reason?: unknown) => {\n if (isSettled) {\n return\n }\n\n isSettled = true\n isRejected = true\n\n rejectFn(reason)\n afterSettle(() => onReject?.(reason))\n }\n\n abortHandler = setupAbortSignal(signal, () => {\n promise.reject(signal?.reason ?? createAbortError())\n })\n\n return promise\n}\n\nexport interface DeferredPromiseWithTimeoutOptions<T> extends DeferredPromiseOptions<T> {\n error?: Errorable\n}\n\nexport const createDeferredWithTimeout = <T>(ms: number, { error, signal, ...options }: DeferredPromiseWithTimeoutOptions<T> = {}) => {\n const timeoutController = createAbortController(ms, error)\n\n return createDeferred<T>({\n ...options,\n onSettle() {\n timeoutController.abort()\n options.onSettle?.()\n },\n signal: combineSignals(signal, timeoutController.signal),\n })\n}\n",
|
|
8
|
+
"import { isFunction } from '@/functions'\nimport { isObject } from '@/objects'\n\nexport const isPromiseLike = <T>(value: unknown): value is PromiseLike<T> => isObject(value) && isFunction(value.then)\n\nexport const isPromise = <T>(value: unknown): value is Promise<T> => (\n isObject(value) && isFunction(value.then) && isFunction(value.catch) && isFunction(value.finally)\n)\n",
|
|
9
|
+
"import type { Awaitable } from './types'\nimport { isNonEmptyArray } from '@/arrays'\n\nexport async function pPipe(): Promise<void>\nexport async function pPipe<T>(fn: () => Awaitable<T>): Promise<T>\nexport async function pPipe<T1, T2>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>): Promise<T2>\nexport async function pPipe<T1, T2, T3>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>): Promise<T3>\nexport async function pPipe<T1, T2, T3, T4>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>): Promise<T4>\nexport async function pPipe<T1, T2, T3, T4, T5>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>): Promise<T5>\nexport async function pPipe<T1, T2, T3, T4, T5, T6>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>): Promise<T6>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>): Promise<T7>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>): Promise<T8>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>): Promise<T9>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>): Promise<T10>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>): Promise<T11>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>): Promise<T12>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>): Promise<T13>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>): Promise<T14>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>, fn15: (arg: T14) => Awaitable<T15>): Promise<T15>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>, fn15: (arg: T14) => Awaitable<T15>, fn16: (arg: T15) => Awaitable<T16>): Promise<T16>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>, fn15: (arg: T14) => Awaitable<T15>, fn16: (arg: T15) => Awaitable<T16>, fn17: (arg: T16) => Awaitable<T17>): Promise<T17>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>, fn15: (arg: T14) => Awaitable<T15>, fn16: (arg: T15) => Awaitable<T16>, fn17: (arg: T16) => Awaitable<T17>, fn18: (arg: T17) => Awaitable<T18>): Promise<T18>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>, fn15: (arg: T14) => Awaitable<T15>, fn16: (arg: T15) => Awaitable<T16>, fn17: (arg: T16) => Awaitable<T17>, fn18: (arg: T17) => Awaitable<T18>, fn19: (arg: T18) => Awaitable<T19>): Promise<T19>\nexport async function pPipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(fn1: () => Awaitable<T1>, fn2: (arg: T1) => Awaitable<T2>, fn3: (arg: T2) => Awaitable<T3>, fn4: (arg: T3) => Awaitable<T4>, fn5: (arg: T4) => Awaitable<T5>, fn6: (arg: T5) => Awaitable<T6>, fn7: (arg: T6) => Awaitable<T7>, fn8: (arg: T7) => Awaitable<T8>, fn9: (arg: T8) => Awaitable<T9>, fn10: (arg: T9) => Awaitable<T10>, fn11: (arg: T10) => Awaitable<T11>, fn12: (arg: T11) => Awaitable<T12>, fn13: (arg: T12) => Awaitable<T13>, fn14: (arg: T13) => Awaitable<T14>, fn15: (arg: T14) => Awaitable<T15>, fn16: (arg: T15) => Awaitable<T16>, fn17: (arg: T16) => Awaitable<T17>, fn18: (arg: T17) => Awaitable<T18>, fn19: (arg: T18) => Awaitable<T19>, fn20: (arg: T19) => Awaitable<T20>): Promise<T20>\nexport async function pPipe(...fns: CallableFunction[]): Promise<unknown>\n\nexport async function pPipe(...fns: CallableFunction[]) {\n if (!isNonEmptyArray(fns)) {\n return\n }\n\n let result = await fns[0]()\n\n for (let i = 1; i < fns.length; i++) {\n result = await fns[i]!(result)\n }\n\n return result\n}\n",
|
|
10
|
+
"import type { Awaitable } from './types'\nimport { assertParam } from '@/common'\nimport { createAbortController, isAbortError } from '@/errors'\nimport { isFunction } from '@/functions'\nimport { isPlainObject } from '@/objects'\nimport { abortable } from './abortable'\nimport { sleep } from './timers'\n\nexport interface PollOptions {\n delay?: number\n immediately?: boolean\n onError?: (error: unknown) => void\n stopOnError?: boolean\n}\n\nexport type PollFn = (signal: AbortSignal) => Awaitable<void>\n\nexport function poll(fn: PollFn, options?: PollOptions): () => Promise<void>\nexport function poll(options: PollOptions, fn: PollFn): () => Promise<void>\n\nexport function poll(fnOrOptions: PollFn | PollOptions, optionsOrFn: PollFn | PollOptions = {}) {\n let fn: PollFn\n let options: PollOptions\n\n if (isFunction(fnOrOptions) && isPlainObject(optionsOrFn)) {\n fn = fnOrOptions\n options = optionsOrFn\n } else {\n assertParam(isPlainObject(fnOrOptions), 'options must be an object')\n assertParam(isFunction(optionsOrFn), 'fn must be a function')\n\n fn = optionsOrFn\n options = fnOrOptions\n }\n\n const { delay = 0, immediately = true, onError, stopOnError = true } = options\n const abortController = createAbortController()\n\n let isActive = true\n let currentTask: Promise<void> | undefined\n\n const stop = () => {\n isActive = false\n abortController.abort()\n\n return currentTask ?? Promise.resolve()\n }\n\n let startRun: () => void\n\n const run = async () => {\n if (!isActive) {\n return\n }\n\n try {\n await abortable(Promise.resolve(fn(abortController.signal)), abortController.signal)\n\n if (isActive) {\n await sleep(delay, { signal: abortController.signal })\n }\n } catch (error) {\n if (isAbortError(error) && !isActive) {\n return\n }\n\n onError?.(error)\n\n if (stopOnError) {\n stop()\n\n return\n }\n }\n\n setTimeout(startRun, 0)\n }\n\n startRun = () => {\n currentTask = run().finally(() => {\n currentTask = undefined\n })\n }\n\n if (immediately) {\n Promise.resolve().then(startRun)\n } else {\n setTimeout(startRun, delay)\n }\n\n return stop\n}\n",
|
|
11
|
+
"import { combineSignals, createAbortController, type Errorable } from '@/errors'\nimport { transform } from '@/functions'\nimport { abortable } from './abortable'\n\nexport interface TimerOptions {\n error?: Errorable\n signal?: AbortSignal\n}\n\nexport const sleep = async (ms: number, { error, signal }: TimerOptions = {}) => (\n abortable(new Promise<void>((resolve) => setTimeout(resolve, ms)), signal, error)\n)\n\nexport const withTimeout = <T>(promise: Promise<T>, ms: number, { error, signal }: TimerOptions = {}) => (\n transform(createAbortController(ms, error), (controller) => abortable(promise, combineSignals(signal, controller.signal)).finally(() => controller.abort()))\n)\n",
|
|
12
|
+
"import type { Awaitable } from './types'\nimport { isAbortError } from '@/errors'\nimport { clamp } from '@/numbers'\nimport { abortable } from './abortable'\nimport { sleep } from './timers'\n\nexport interface GetRetryDelayOptions {\n backoff?: number\n delay?: number\n jitter?: number\n maxDelay?: number\n}\n\nexport function getRetryDelay(attempts: number, { backoff = 2, delay = 1000, jitter = 0.01, maxDelay = 10_000 }: GetRetryDelayOptions = {}) {\n const exponentialDelay = delay * backoff ** (attempts - 1)\n const clampedDelay = clamp(exponentialDelay, 0, maxDelay)\n\n if (jitter <= 0) {\n return clampedDelay\n }\n\n const jitterRange = clampedDelay * jitter\n const jitterOffset = (Math.random() - 0.5) * 2 * jitterRange\n\n return clamp(clampedDelay + jitterOffset, 0, maxDelay)\n}\n\nexport interface WithRetryContext {\n attempts: number\n retriesLeft: number\n signal?: AbortSignal\n}\n\nexport interface WithRetryOptions<T> extends GetRetryDelayOptions {\n maxAttempts?: number\n onBeforeWaitForNextAttempt?: (delay: number, context: WithRetryContext) => Awaitable<void>\n onFailedAttempt?: (error: unknown, context: WithRetryContext) => Awaitable<void>\n onSuccessAttempt?: (response: T, context: WithRetryContext) => Awaitable<void>\n shouldRetry?: (error: unknown, context: WithRetryContext) => Awaitable<boolean>\n shouldRetryOnSuccess?: (result: T, context: WithRetryContext) => Awaitable<boolean>\n signal?: AbortSignal\n}\n\nexport function createRetryError(errors: unknown[]) {\n if (errors.length === 1) {\n return errors[0]\n }\n\n return new AggregateError(errors, 'All retry attempts failed')\n}\n\nexport function rethrowNonAbortError(error: unknown) {\n if (!isAbortError(error)) {\n throw error\n }\n}\n\nexport async function waitForNextRetryAttempt(attempts: number, delayOptions: GetRetryDelayOptions, onBeforeWaitForNextAttempt: WithRetryOptions<unknown>['onBeforeWaitForNextAttempt'], signal: AbortSignal | undefined, context: WithRetryContext) {\n const delay = getRetryDelay(attempts, delayOptions)\n\n await onBeforeWaitForNextAttempt?.(delay, context)\n await sleep(delay, { signal }).catch(rethrowNonAbortError)\n}\n\nexport async function handleRetryFailure<T>(error: unknown, errors: unknown[], retriesLeft: number, shouldRetry: WithRetryOptions<T>['shouldRetry'], onFailedAttempt: WithRetryOptions<T>['onFailedAttempt'], context: WithRetryContext) {\n if (isAbortError(error)) {\n throw error\n }\n\n errors.push(error)\n\n if (retriesLeft <= 0) {\n throw createRetryError(errors)\n }\n\n if (shouldRetry && !(await shouldRetry(error, context))) {\n throw createRetryError(errors)\n }\n\n await onFailedAttempt?.(error, context)\n}\n\nexport async function handleRetrySuccess<T>(result: T, errors: unknown[], retriesLeft: number, shouldRetryOnSuccess: WithRetryOptions<T>['shouldRetryOnSuccess'], onSuccessAttempt: WithRetryOptions<T>['onSuccessAttempt'], context: WithRetryContext): Promise<boolean> {\n if (!shouldRetryOnSuccess || !(await shouldRetryOnSuccess(result, context))) {\n return true\n }\n\n if (retriesLeft <= 0) {\n throw createRetryError(errors)\n }\n\n await onSuccessAttempt?.(result, context)\n\n return false\n}\n\nexport async function withRetry<T>(fn: (signal?: AbortSignal) => Awaitable<T>, { maxAttempts = 3, onBeforeWaitForNextAttempt, onFailedAttempt, onSuccessAttempt, shouldRetry, shouldRetryOnSuccess, signal, ...delayOptions }: WithRetryOptions<T> = {}): Promise<T> {\n if (maxAttempts < 1) {\n throw new RangeError('maxAttempts must be at least 1')\n }\n\n if (signal) {\n signal.throwIfAborted()\n }\n\n let attempts = 0\n let result: T\n\n const errors: unknown[] = []\n\n while (attempts < maxAttempts) {\n const retriesLeft = maxAttempts - ((attempts++) + 1)\n const context = { attempts, retriesLeft, signal }\n\n try {\n if (signal) {\n signal.throwIfAborted()\n }\n\n result = await abortable(Promise.resolve(fn(signal)), signal)\n } catch (error) {\n await handleRetryFailure(error, errors, retriesLeft, shouldRetry, onFailedAttempt, context)\n await waitForNextRetryAttempt(attempts, delayOptions, onBeforeWaitForNextAttempt, signal, context)\n\n continue\n }\n\n const shouldReturn = await handleRetrySuccess(result, errors, retriesLeft, shouldRetryOnSuccess, onSuccessAttempt, context)\n\n if (shouldReturn) {\n return result\n }\n\n await waitForNextRetryAttempt(attempts, delayOptions, onBeforeWaitForNextAttempt, signal, context)\n }\n\n throw createRetryError(errors)\n}\n"
|
|
13
|
+
],
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "809A21B282D5914A64756E2164756E21",
|
|
16
|
+
"names": []
|
|
17
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{hc as f}from"./chunk-qn6n0ff5.js";import{Kd as c}from"./chunk-c9mm50vv.js";function y(r,t){return r.at(t)}function d(r){return y(r,0)}function A(r){return y(r,-1)}var u=(r)=>Array.isArray(r),l=(r)=>r.length===0,h=(r)=>!l(r);var x=(r)=>u(r)?r:[r];function a(r){if(f(r))return[...r];return x(r??[])}var M=(r)=>r.filter(c);var w=(r,t)=>Array.from({length:r},(e,o)=>t(o)),R=(r,t,e=1)=>Array.from({length:Math.floor((t-r)/e)+1},(o,n)=>r+n*e),v=(r,t=1)=>Array.from({length:t},()=>r[Math.floor(Math.random()*r.length)]);var D=(...r)=>r.flatMap((t)=>a(t)),L=(r)=>a(r).flat();function q(r){let t=[...r];for(let e=t.length-1;e>0;e--){let o=Math.floor(Math.random()*(e+1)),n=t[e];t[e]=t[o],t[o]=n}return t}function P(r,t){let e={};for(let o of r){let n=t(o),T=e[n];if(T)T.push(o);else e[n]=[o]}return e}function _(r,t){let e={};for(let o of r)e[t(o)]=o;return e}function j(r,t){if(t<=0||!Number.isFinite(t))throw RangeError(`chunk size must be a positive finite number, got ${t}`);let e=Math.floor(t),o=[];for(let n=0;n<r.length;n+=e)o.push(r.slice(n,n+e));return o}function F(r,...t){let e=t.map((o)=>typeof o==="function"?{fn:o,order:"asc"}:o);return r.toSorted((o,n)=>{for(let{fn:T,order:i}of e){let p=T(o),s=T(n);if(p<s)return i==="asc"?-1:1;if(p>s)return i==="asc"?1:-1}return 0})}function I(r,t){let e=[],o=[];for(let n of r)if(t(n))e.push(n);else o.push(n);return[e,o]}var C=(r)=>[...new Set(r)],G=(r,t)=>r.reduce((e,o)=>e.some((n)=>t(n,o))?e:[...e,o],[]),H=(r,t)=>r.filter((e)=>t.includes(e)),m=(r,t)=>r.filter((e)=>!t.includes(e)),J=(r,t)=>[...m(r,t),...m(t,r)];export{y as Fb,d as Gb,A as Hb,u as Ib,l as Jb,h as Kb,x as Lb,a as Mb,M as Nb,w as Ob,R as Pb,v as Qb,D as Rb,L as Sb,q as Tb,P as Ub,_ as Vb,j as Wb,F as Xb,I as Yb,C as Zb,G as _b,H as $b,m as ac,J as bc};
|
|
2
|
+
|
|
3
|
+
//# debugId=3D719A84FF1B95DD64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-c0p3wm8m.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/arrays/accessors.ts", "../src/arrays/guards.ts", "../src/arrays/conversions.ts", "../src/arrays/factories.ts", "../src/arrays/operations.ts", "../src/arrays/set-operations.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { EmptyArray, NonEmptyArray } from './types'\n\nexport function nth(array: EmptyArray, index: number): undefined\nexport function nth<T>(array: NonEmptyArray<T>, index: number): T\nexport function nth<T>(array: T[], index: number): T | undefined\n\nexport function nth<T>(array: T[], index: number): T | undefined {\n return array.at(index)\n}\n\nexport function first(array: EmptyArray): undefined\nexport function first<T>(array: NonEmptyArray<T>): T\nexport function first<T>(array: T[]): T | undefined\n\nexport function first<T>(array: T[]): T | undefined {\n return nth(array, 0)\n}\n\nexport function last(array: EmptyArray): undefined\nexport function last<T>(array: NonEmptyArray<T>): T\nexport function last<T>(array: T[]): T | undefined\n\nexport function last<T>(array: T[]): T | undefined {\n return nth(array, -1)\n}\n",
|
|
6
|
+
"import type { EmptyArray, NonEmptyArray } from './types'\n\nexport const isArray = <T = any>(value: unknown): value is T[] => Array.isArray(value)\n\nexport const isEmptyArray = <T = any, TStrict extends boolean = true>(value: T[]): value is (TStrict extends true ? EmptyArray : T[]) => value.length === 0\n\nexport const isNonEmptyArray = <T = any, TStrict extends boolean = true>(value: T[]): value is (TStrict extends true ? NonEmptyArray<T> : T[]) => !isEmptyArray(value)\n",
|
|
7
|
+
"import type { MaybeArray } from './types'\nimport { isIterable } from '../collections'\nimport { notNullish, type Nullable } from '../core'\nimport { isArray } from './guards'\n\nexport const wrap = <T>(array: T | T[]) => (isArray(array) ? array : [array])\n\nexport function toArray<T>(value?: Nullable<MaybeArray<T>>) {\n if (isIterable(value)) {\n return [...value]\n }\n\n return wrap(value ?? [])\n}\n\nexport const compact = <T>(array: Array<Nullable<T>>): T[] => array.filter(notNullish)\n",
|
|
8
|
+
"import type { EmptyArray, NonEmptyArray } from './types'\n\nexport const createArray = <T, TStrict extends boolean = true, TLength extends number = number>(length: TLength, value: (index: number) => T) => (\n Array.from({ length }, (_, i) => value(i)) as TStrict extends false ? T[] : (TLength extends 0 ? EmptyArray : NonEmptyArray<T>)\n)\n\nexport const range = (from: number, to: number, step = 1) => (\n Array.from({ length: Math.floor((to - from) / step) + 1 }, (_, i) => from + (i * step))\n)\n\nexport const sample = <T>(array: T[], quantity = 1) => (\n Array.from({ length: quantity }, () => array[Math.floor(Math.random() * array.length)])\n)\n",
|
|
9
|
+
"import type { Nullable } from '../core'\nimport type { MaybeArray } from './types'\nimport { toArray } from './conversions'\n\nexport const merge = <T>(...arrays: Array<Nullable<MaybeArray<T>>>) => arrays.flatMap((array) => toArray(array))\n\nexport const flatten = <T>(array?: Nullable<MaybeArray<T | T[]>>) => toArray(array).flat() as T[]\n\nexport function shuffle<T>(array: T[]): T[] {\n const result = [...array]\n\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n const temp = result[i]\n\n result[i] = result[j]!\n result[j] = temp!\n }\n\n return result\n}\n\nexport function groupBy<T, K extends PropertyKey>(array: T[], keyFn: (item: T) => K): Record<K, T[]> {\n const result = {} as Record<K, T[]>\n\n for (const item of array) {\n const key = keyFn(item)\n const group = result[key]\n\n if (group) {\n group.push(item)\n } else {\n result[key] = [item]\n }\n }\n\n return result\n}\n\nexport function keyBy<T, K extends PropertyKey>(array: T[], keyFn: (item: T) => K): Record<K, T> {\n const result = {} as Record<K, T>\n\n for (const item of array) {\n result[keyFn(item)] = item\n }\n\n return result\n}\n\nexport function chunk<T>(array: T[], size: number): T[][] {\n if (size <= 0 || !Number.isFinite(size)) {\n throw new RangeError(`chunk size must be a positive finite number, got ${size}`)\n }\n\n const step = Math.floor(size)\n const result: T[][] = []\n\n for (let i = 0; i < array.length; i += step) {\n result.push(array.slice(i, i + step))\n }\n\n return result\n}\n\nexport type SortDirection = 'asc' | 'desc'\n\nexport type SortKey<T> = ((item: T) => number | string) | { fn: (item: T) => number | string, order: SortDirection }\n\nexport function sortBy<T>(array: T[], ...keys: Array<SortKey<T>>): T[] {\n const normalizedKeys = keys.map((key) => (typeof key === 'function' ? { fn: key, order: 'asc' as const } : key))\n\n return array.toSorted((a, b) => {\n for (const { fn, order } of normalizedKeys) {\n const va = fn(a)\n const vb = fn(b)\n\n if (va < vb) {\n return order === 'asc' ? -1 : 1\n }\n\n if (va > vb) {\n return order === 'asc' ? 1 : -1\n }\n }\n\n return 0\n })\n}\n\nexport function partition<T>(array: T[], predicate: (item: T) => boolean): [T[], T[]] {\n const pass: T[] = []\n const fail: T[] = []\n\n for (const item of array) {\n if (predicate(item)) {\n pass.push(item)\n } else {\n fail.push(item)\n }\n }\n\n return [pass, fail]\n}\n",
|
|
10
|
+
"export const unique = <T>(array: T[]) => [...new Set(array)]\n\nexport const uniqueBy = <T>(array: T[], equalFn: (a: T, b: T) => boolean) => (\n array.reduce<T[]>((r, c) => (r.some((v) => equalFn(v, c)) ? r : [...r, c]), [])\n)\n\nexport const intersection = <T>(a: T[], b: T[]) => a.filter((v) => b.includes(v))\n\nexport const diff = <T>(a: T[], b: T[]) => a.filter((v) => !b.includes(v))\n\nexport const symmetricDiff = <T>(a: T[], b: T[]) => [...diff(a, b), ...diff(b, a)]\n"
|
|
11
|
+
],
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "3D719A84FF1B95DD64756E2164756E21",
|
|
14
|
+
"names": []
|
|
15
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var e=new Set(["1","on","true","yes"]);var c=(n)=>Object.prototype.toString.call(n);function m(n){if(n===null)return"null";return typeof n==="object"||typeof n==="function"?c(n).slice(8,-1).toLowerCase():typeof n}var o=(n)=>n===null,i=(n)=>n===void 0,l=(n)=>o(n)||i(n),k=(n)=>!o(n),w=(n)=>!i(n),T=(n)=>!l(n),r=(n)=>typeof n==="boolean",a=(n)=>typeof n==="symbol",y=(n)=>typeof n==="bigint",s=(n)=>typeof n==="number",u=(n)=>typeof n==="string",d=(n)=>n instanceof Date,N=(n)=>n===null||typeof n!=="object"&&typeof n!=="function",S=(n)=>o(n)||u(n)||r(n)||s(n)&&Number.isFinite(n);function g(n,p={}){let{anyNonZeroNumber:t=!1,trueStrings:f=e}=p;if(r(n))return n;if(u(n))return f.has(n.toLowerCase());if(s(n))return t?n!==0&&Number.isFinite(n):n===1;if(y(n))return t?n!==0n:n===1n;return!1}var P=(n)=>typeof n==="object"&&n!==null&&typeof n.next==="function"&&typeof n[Symbol.iterator]==="function";export{e as Cd,c as Dd,m as Ed,o as Fd,i as Gd,l as Hd,k as Id,w as Jd,T as Kd,r as Ld,a as Md,y as Nd,s as Od,u as Pd,d as Qd,N as Rd,S as Sd,g as Td,P as Ud};
|
|
2
|
+
|
|
3
|
+
//# debugId=7EA1FFDE5B787E1864756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-c9mm50vv.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/core/constants.ts", "../src/core/guards.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const DEFAULT_TRUE_STRINGS = new Set(['1', 'on', 'true', 'yes'])\n",
|
|
6
|
+
"import type { JsonablePrimitive, Primitive } from './types'\nimport { DEFAULT_TRUE_STRINGS } from './constants'\n\nexport const toString = (value: unknown) => Object.prototype.toString.call(value)\n\nexport function typeOf(value: unknown): string {\n if (value === null) {\n return 'null'\n }\n\n return typeof value === 'object' || typeof value === 'function' ? toString(value).slice(8, -1).toLowerCase() : typeof value\n}\n\nexport const isNull = (value: unknown): value is null => value === null\nexport const isUndefined = (value: unknown): value is undefined => value === undefined\nexport const isNullish = (value: unknown): value is null | undefined => isNull(value) || isUndefined(value)\n\nexport const notNull = <T>(value: T): value is Exclude<T, null> => !isNull(value)\nexport const notUndefined = <T>(value: T): value is Exclude<T, undefined> => !isUndefined(value)\nexport const notNullish = <T>(value: T): value is NonNullable<T> => !isNullish(value)\n\nexport const isBoolean = (value: unknown): value is boolean => typeof value === 'boolean'\nexport const isSymbol = (value: unknown): value is symbol => typeof value === 'symbol'\nexport const isBigInt = (value: unknown): value is bigint => typeof value === 'bigint'\nexport const isNumber = (value: unknown): value is number => typeof value === 'number'\nexport const isString = (value: unknown): value is string => typeof value === 'string'\nexport const isDate = (value: unknown): value is Date => value instanceof Date\n\nexport const isPrimitive = (value: unknown): value is Primitive => value === null || (typeof value !== 'object' && typeof value !== 'function')\n\nexport const isJsonablePrimitive = (value: unknown): value is JsonablePrimitive => (\n isNull(value) || isString(value) || isBoolean(value) || (isNumber(value) && Number.isFinite(value))\n)\n\nexport interface IsTrueLikeOptions {\n anyNonZeroNumber?: boolean\n trueStrings?: Set<string>\n}\n\nexport function isTrueLike(value: unknown, options: IsTrueLikeOptions = {}) {\n const { anyNonZeroNumber = false, trueStrings = DEFAULT_TRUE_STRINGS } = options\n\n if (isBoolean(value)) {\n return value\n }\n\n if (isString(value)) {\n return trueStrings.has(value.toLowerCase())\n }\n\n if (isNumber(value)) {\n return anyNonZeroNumber ? value !== 0 && Number.isFinite(value) : value === 1\n }\n\n if (isBigInt(value)) {\n return anyNonZeroNumber ? value !== 0n : value === 1n\n }\n\n return false\n}\n\nexport const isGenerator = (value: unknown): boolean => (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as Record<PropertyKey, unknown>).next === 'function' &&\n typeof (value as Record<PropertyKey, unknown>)[Symbol.iterator] === 'function'\n)\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "AAAO,IAAM,EAAuB,IAAI,IAAI,CAAC,IAAK,KAAM,OAAQ,KAAK,CAAC,ECG/D,IAAM,EAAW,CAAC,IAAmB,OAAO,UAAU,SAAS,KAAK,CAAK,EAEzE,SAAS,CAAM,CAAC,EAAwB,CAC3C,GAAI,IAAU,KACV,MAAO,OAGX,OAAO,OAAO,IAAU,UAAY,OAAO,IAAU,WAAa,EAAS,CAAK,EAAE,MAAM,EAAG,EAAE,EAAE,YAAY,EAAI,OAAO,EAGnH,IAAM,EAAS,CAAC,IAAkC,IAAU,KACtD,EAAc,CAAC,IAAuC,IAAU,OAChE,EAAY,CAAC,IAA8C,EAAO,CAAK,GAAK,EAAY,CAAK,EAE7F,EAAU,CAAI,IAAwC,CAAC,EAAO,CAAK,EACnE,EAAe,CAAI,IAA6C,CAAC,EAAY,CAAK,EAClF,EAAa,CAAI,IAAsC,CAAC,EAAU,CAAK,EAEvE,EAAY,CAAC,IAAqC,OAAO,IAAU,UACnE,EAAW,CAAC,IAAoC,OAAO,IAAU,SACjE,EAAW,CAAC,IAAoC,OAAO,IAAU,SACjE,EAAW,CAAC,IAAoC,OAAO,IAAU,SACjE,EAAW,CAAC,IAAoC,OAAO,IAAU,SACjE,EAAS,CAAC,IAAkC,aAAiB,KAE7D,EAAc,CAAC,IAAuC,IAAU,MAAS,OAAO,IAAU,UAAY,OAAO,IAAU,WAEvH,EAAsB,CAAC,IAChC,EAAO,CAAK,GAAK,EAAS,CAAK,GAAK,EAAU,CAAK,GAAM,EAAS,CAAK,GAAK,OAAO,SAAS,CAAK,EAQ9F,SAAS,CAAU,CAAC,EAAgB,EAA6B,CAAC,EAAG,CACxE,IAAQ,mBAAmB,GAAO,cAAc,GAAyB,EAEzE,GAAI,EAAU,CAAK,EACf,OAAO,EAGX,GAAI,EAAS,CAAK,EACd,OAAO,EAAY,IAAI,EAAM,YAAY,CAAC,EAG9C,GAAI,EAAS,CAAK,EACd,OAAO,EAAmB,IAAU,GAAK,OAAO,SAAS,CAAK,EAAI,IAAU,EAGhF,GAAI,EAAS,CAAK,EACd,OAAO,EAAmB,IAAU,GAAK,IAAU,GAGvD,MAAO,GAGJ,IAAM,EAAc,CAAC,IACxB,OAAO,IAAU,UACjB,IAAU,MACV,OAAQ,EAAuC,OAAS,YACxD,OAAQ,EAAuC,OAAO,YAAc",
|
|
9
|
+
"debugId": "7EA1FFDE5B787E1864756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var d=Symbol.for("serialize.custom"),S=/\bfunction\s*\*|^async\s+function\s*\*|\*\s*\[|^\*\s/u,p=Symbol("omit");function z(){let e=new Map,r=new Set,t=0;return(n)=>{let o=e.get(n);if(o!==void 0)return o;let i=n.description,a=i?.length?i:`@@${++t}`,s=`[Symbol(${a})]`;while(r.has(s))s=`[Symbol(${a}@@${++t})]`;return r.add(s),e.set(n,s),s}}var F=(e)=>({...e,__serialized__:!0});function E(e={}){let{maxDepth:r=Number.POSITIVE_INFINITY,onUnserializable:t=!1,replacer:n=F}=e,o="placeholder",i="placeholder",a="placeholder";if(typeof e.onError==="string")o=e.onError,i=e.onError,a=e.onError;else if(typeof e.onError==="object"&&e.onError!=null)o=e.onError.circularRef??"placeholder",i=e.onError.maxDepth??"placeholder",a=e.onError.propertyAccess??"placeholder";return{depth:0,maxDepth:r,onCircularRef:o,onMaxDepth:i,onPropertyAccess:a,onUnserializable:t,replacer:n,symbolRegistry:z(),visited:new Set}}import{isArray as W}from"@/arrays/guards";import{isIterable as U}from"@/collections/guards";import{typeOf as T}from"@/core/guards";import{isPlainObject as $}from"@/objects/guards";function g(e,r,t){let n=t(e,r);return n===p?null:n}var C=(e,r,t)=>e.map((n)=>g(n,r,t)),m=(e,r,t)=>Array.from(e,(n)=>g(n,r,t));function h(e,r){if(ArrayBuffer.isView(e)&&!(e instanceof DataView)){let t=e;return r.replacer({metadata:{byteLength:t.byteLength,byteOffset:t.byteOffset},type:t[Symbol.toStringTag]?.toLowerCase()??"typedarray",value:Array.from({length:t.length},(n,o)=>e[o])})}if(e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer)return r.replacer({metadata:{byteLength:e.byteLength},type:"arraybuffer",value:[...new Uint8Array(e)]});if(e instanceof DataView)return r.replacer({metadata:{byteLength:e.byteLength,byteOffset:e.byteOffset},type:"dataview",value:null});return}function J(e,r){if(typeof Blob>"u"||!(e instanceof Blob))return;let t={size:e.size,type:e.type};if(typeof File<"u"&&e instanceof File)return t.name=e.name,r.replacer({metadata:t,type:"file",value:null});return r.replacer({metadata:t,type:"blob",value:null})}import{isCollectionLike as M,isMapLike as V,isSetLike as j}from"@/collections/guards";function k(e,r,t){if(M(e)){let n=e.constructor?.name,o={size:e.size};if(n)o.name=n;if(V(e))return r.replacer({metadata:o,type:"map",value:m(e.entries(),r,t)});if(j(e))return r.replacer({metadata:o,type:"set",value:m(e,r,t)})}return}function c(e,r,t,n){if(r==="throw")throw e;if(r==="omit")return p;return n.replacer({type:"property-access-error",value:`[Property Access Error: ${String(t)}]`})}function w(e,r,t,n){try{return e[r]}catch(o){return c(o,t,r,n)}}function O(e,r,t){let n={},{onPropertyAccess:o,symbolRegistry:i}=r;for(let a of Object.keys(e)){let s=w(e,a,o,r);if(s===p)continue;let f=t(s,r);if(f===p)continue;n[a]=f}for(let a of Object.getOwnPropertySymbols(e)){let s=w(e,a,o,r);if(s===p)continue;let f=t(s,r);if(f===p)continue;n[i(a)]=f}return n}var y=(e)=>e!==void 0&&e!==p;function l(e,r,t,n){try{let o=e[r];if(o===void 0)return;return n(o,t)}catch(o){return c(o,t.onPropertyAccess,r,t)}}function B(e,r,t){let n={name:e.name},o=l(e,"message",r,t),i=l(e,"stack",r,t),a=l(e,"cause",r,t);if(typeof o==="string"&&o.length>0)n.message=o;if(typeof i==="string"&&i.length>0)n.stack=i;if(y(a))n.cause=a;if(e instanceof AggregateError){let s=l(e,"errors",r,t);if(y(s))n.errors=s}return n}function N(e,r,t){let n=B(e,r,t);for(let o of Object.keys(e))if(!(o in n)){let i=l(e,o,r,t);if(y(i))n[o]=i}for(let o of Object.getOwnPropertySymbols(e)){let i=l(e,o,r,t);if(y(i))n[r.symbolRegistry(o)]=i}return n}import{isGenerator as D}from"@/core/guards";function I(e,r){let t={},n=e.toString();return t.async=n.startsWith("async"),t.generator=S.test(n),r.replacer({metadata:t,type:"function",value:{length:e.length,name:e.name||"anonymous"}})}function R(e,r){if(typeof e==="function")return I(e,r);if(e instanceof Promise)return r.replacer({type:"promise",value:"[Promise]"});if(e instanceof WeakMap)return r.replacer({type:"weakmap",value:"[WeakMap]"});if(e instanceof WeakSet)return r.replacer({type:"weakset",value:"[WeakSet]"});if(typeof WeakRef<"u"&&e instanceof WeakRef)return r.replacer({type:"weakref",value:"[WeakRef]"});if(typeof ReadableStream<"u"&&e instanceof ReadableStream)return r.replacer({type:"readablestream",value:"[ReadableStream]"});if(D(e))return r.replacer({type:"generator",value:"[Generator]"});return}function A(e,r,t){let n=e[d];if(typeof n==="function")return t(n(),r);if(W(e))return C(e,r,t);let o=k(e,r,t);if(o!==void 0)return o;let i=h(e,r);if(i!==void 0)return i;let a=J(e,r);if(a!==void 0)return a;if(e instanceof Error)return r.replacer({type:"error",value:N(e,r,t)});if($(e))return O(e,r,t);let s=R(e,r);if(s!==void 0)return s;if(typeof e.toJSON==="function")return t(e.toJSON(),r);if(U(e)){let f=e.constructor?.name,b={};if(f)b.name=f;return r.replacer({metadata:b,type:"iterable",value:m(e,r,t)})}if(r.onUnserializable)return r.onUnserializable(e);return r.replacer({type:T(e),value:`[${e.constructor?.name??T(e)}]`})}function L(e,r){if(e instanceof Date)return r.replacer({type:"date",value:e.toISOString()});if(e instanceof RegExp)return r.replacer({type:"regexp",value:e.toString()});if(e instanceof URL)return r.replacer({type:"url",value:e.href});return}import{isBigInt as G,isJsonablePrimitive as K,isNumber as q,isSymbol as Z}from"@/core/guards";function x(e,r){if(Number.isNaN(e))return r.replacer({type:"number",value:"NaN"});if(!Number.isFinite(e))return r.replacer({type:"number",value:e>0?"Infinity":"-Infinity"});return e}function P(e,r){if(e===null)return null;if(e===void 0)return r.replacer({type:"undefined",value:null});if(q(e))return x(e,r);if(K(e))return e;if(G(e))return r.replacer({type:"bigint",value:e.toString()});if(Z(e))return r.replacer({type:"symbol",value:r.symbolRegistry(e)});return}function u(e,r,t,n){if(e==="throw")throw Error(t);if(e==="omit")return p;return n.replacer({type:r,value:t})}function We(e,r){let t=E(r),n=_(e,t);if(n===p)return null;return n}function _(e,r){let t=P(e,r);if(t!==void 0)return t;let n=L(e,r);if(n!==void 0)return n;if(r.visited.has(e))return u(r.onCircularRef,"circular-ref","[Circular]",r);if(r.depth>=r.maxDepth)return u(r.onMaxDepth,"max-depth","[Max Depth]",r);r.visited.add(e),r.depth++;try{return A(e,r,_)}finally{r.depth--,r.visited.delete(e)}}export{d as da,S as ea,p as fa,z as ga,F as ha,E as ia,g as ja,C as ka,m as la,h as ma,J as na,k as oa,c as pa,w as qa,O as ra,y as sa,l as ta,B as ua,N as va,I as wa,R as xa,A as ya,L as za,x as Aa,P as Ba,u as Ca,We as Da,_ as Ea};
|
|
2
|
+
|
|
3
|
+
//# debugId=A8B199917D5D11B764756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-f2rvwnb6.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/serializer/constants.ts", "../src/serializer/symbol-registry.ts", "../src/serializer/context.ts", "../src/serializer/serializers/compound.ts", "../src/serializer/serializers/array.ts", "../src/serializer/serializers/binary.ts", "../src/serializer/serializers/blob.ts", "../src/serializer/serializers/collection.ts", "../src/serializer/serializers/object.ts", "../src/serializer/serializers/error.ts", "../src/serializer/serializers/opaque.ts", "../src/serializer/serializers/function.ts", "../src/serializer/serializers/leaf-object.ts", "../src/serializer/serializers/primitive.ts", "../src/serializer/serializers/number.ts", "../src/serializer/utils.ts", "../src/serializer/serialize.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const SERIALIZE = Symbol.for('serialize.custom')\n\nexport const GENERATOR_PATTERNS = /\\bfunction\\s*\\*|^async\\s+function\\s*\\*|\\*\\s*\\[|^\\*\\s/u\n\nexport const OMIT_SENTINEL = Symbol('omit')\n",
|
|
6
|
+
"export function createSymbolKeySerializer() {\n const cache = new Map<symbol, string>()\n const usedKeys = new Set<string>()\n\n let counter = 0\n\n return (symbol: symbol): string => {\n const cached = cache.get(symbol)\n\n if (cached !== undefined) {\n return cached\n }\n\n const desc = symbol.description\n const base = desc?.length ? desc : `@@${++counter}`\n\n let key = `[Symbol(${base})]`\n\n while (usedKeys.has(key)) {\n key = `[Symbol(${base}@@${++counter})]`\n }\n\n usedKeys.add(key)\n cache.set(symbol, key)\n\n return key\n }\n}\n",
|
|
7
|
+
"import type { SerializeContext, SerializedValue, SerializeErrorStrategy, SerializeOptions } from './types'\nimport type { Jsonable } from '@/core/types'\nimport { createSymbolKeySerializer } from './symbol-registry'\n\nexport const DEFAULT_REPLACER = (value: Omit<SerializedValue, '__serialized__'>): Jsonable => ({ ...value, __serialized__: true }) as Jsonable\n\nexport function createContext(options: SerializeOptions = {}): SerializeContext {\n const { maxDepth = Number.POSITIVE_INFINITY, onUnserializable = false, replacer = DEFAULT_REPLACER } = options\n let onCircularRef: SerializeErrorStrategy = 'placeholder'\n let onMaxDepth: SerializeErrorStrategy = 'placeholder'\n let onPropertyAccess: SerializeErrorStrategy = 'placeholder'\n\n if (typeof options.onError === 'string') {\n onCircularRef = options.onError\n onMaxDepth = options.onError\n onPropertyAccess = options.onError\n } else if (typeof options.onError === 'object' && options.onError != null) {\n onCircularRef = options.onError.circularRef ?? 'placeholder'\n onMaxDepth = options.onError.maxDepth ?? 'placeholder'\n onPropertyAccess = options.onError.propertyAccess ?? 'placeholder'\n }\n\n return { depth: 0, maxDepth, onCircularRef, onMaxDepth, onPropertyAccess, onUnserializable, replacer, symbolRegistry: createSymbolKeySerializer(), visited: new Set() }\n}\n",
|
|
8
|
+
"import type { SerializeContext, SerializeValueFn } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { isArray } from '@/arrays/guards'\nimport { isIterable } from '@/collections/guards'\nimport { typeOf } from '@/core/guards'\nimport { isPlainObject } from '@/objects/guards'\nimport { type OMIT_SENTINEL, SERIALIZE } from '../constants'\nimport { serializeArray, serializeIterableEntries } from './array'\nimport { serializeBinary } from './binary'\nimport { serializeBlob } from './blob'\nimport { serializeCollection } from './collection'\nimport { serializeError } from './error'\nimport { serializeObject } from './object'\nimport { serializeOpaque } from './opaque'\n\nexport function serializeCompound(value: object, ctx: SerializeContext, serializeValue: SerializeValueFn): Jsonable | typeof OMIT_SENTINEL {\n const customSerialize = (value as Record<PropertyKey, unknown>)[SERIALIZE]\n\n if (typeof customSerialize === 'function') {\n return serializeValue((customSerialize as () => unknown)(), ctx)\n }\n\n if (isArray(value)) {\n return serializeArray(value, ctx, serializeValue)\n }\n\n const collection = serializeCollection(value, ctx, serializeValue)\n\n if (collection !== undefined) {\n return collection\n }\n\n const binary = serializeBinary(value, ctx)\n\n if (binary !== undefined) {\n return binary\n }\n\n const blob = serializeBlob(value, ctx)\n\n if (blob !== undefined) {\n return blob\n }\n\n if (value instanceof Error) {\n return ctx.replacer({ type: 'error', value: serializeError(value, ctx, serializeValue) })\n }\n\n if (isPlainObject(value)) {\n return serializeObject(value, ctx, serializeValue)\n }\n\n const opaque = serializeOpaque(value, ctx)\n\n if (opaque !== undefined) {\n return opaque\n }\n\n if (typeof (value as Record<string, unknown>).toJSON === 'function') {\n return serializeValue((value as { toJSON: () => unknown }).toJSON(), ctx)\n }\n\n if (isIterable(value)) {\n const name = value.constructor?.name\n const metadata: Record<string, Jsonable> = {}\n\n if (name) {\n metadata.name = name\n }\n\n return ctx.replacer({ metadata, type: 'iterable', value: serializeIterableEntries(value, ctx, serializeValue) })\n }\n\n if (ctx.onUnserializable) {\n return ctx.onUnserializable(value)\n }\n\n return ctx.replacer({ type: typeOf(value), value: `[${value.constructor?.name ?? typeOf(value)}]` })\n}\n",
|
|
9
|
+
"import type { SerializeContext, SerializeValueFn } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { OMIT_SENTINEL } from '../constants'\n\nexport function serializeArrayEntry(entry: unknown, ctx: SerializeContext, serializeValue: SerializeValueFn): Jsonable {\n const serializedValue = serializeValue(entry, ctx)\n\n return serializedValue === OMIT_SENTINEL ? null : serializedValue\n}\n\nexport const serializeArray = (value: unknown[], ctx: SerializeContext, serializeValue: SerializeValueFn): Jsonable[] => (\n value.map((entry) => serializeArrayEntry(entry, ctx, serializeValue))\n)\n\nexport const serializeIterableEntries = (value: Iterable<unknown>, ctx: SerializeContext, serializeValue: SerializeValueFn): Jsonable[] => (\n Array.from(value, (entry) => serializeArrayEntry(entry, ctx, serializeValue))\n)\n",
|
|
10
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\n\nexport function serializeBinary(value: object, ctx: SerializeContext): Jsonable | undefined {\n if (ArrayBuffer.isView(value) && !(value instanceof DataView)) {\n const typed = value as unknown as { [Symbol.toStringTag]: string, byteLength: number, byteOffset: number, length: number }\n\n return ctx.replacer({\n metadata: { byteLength: typed.byteLength, byteOffset: typed.byteOffset },\n type: typed[Symbol.toStringTag]?.toLowerCase() ?? 'typedarray',\n value: Array.from({ length: typed.length }, (_, index) => (value as unknown as ArrayLike<number>)[index]!),\n })\n }\n\n if (value instanceof ArrayBuffer || (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer)) {\n return ctx.replacer({ metadata: { byteLength: value.byteLength }, type: 'arraybuffer', value: [...new Uint8Array(value)] })\n }\n\n if (value instanceof DataView) {\n return ctx.replacer({ metadata: { byteLength: value.byteLength, byteOffset: value.byteOffset }, type: 'dataview', value: null })\n }\n\n return undefined\n}\n",
|
|
11
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\n\nexport function serializeBlob(value: object, ctx: SerializeContext): Jsonable | undefined {\n if (typeof Blob === 'undefined' || !(value instanceof Blob)) {\n return undefined\n }\n\n const metadata: Record<string, Jsonable> = { size: value.size, type: value.type }\n\n if (typeof File !== 'undefined' && value instanceof File) {\n metadata.name = value.name\n\n return ctx.replacer({ metadata, type: 'file', value: null })\n }\n\n return ctx.replacer({ metadata, type: 'blob', value: null })\n}\n",
|
|
12
|
+
"import type { SerializeContext, SerializeValueFn } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { isCollectionLike, isMapLike, isSetLike } from '@/collections/guards'\nimport { serializeIterableEntries } from './array'\n\nexport function serializeCollection(value: object, ctx: SerializeContext, serializeValue: SerializeValueFn): Jsonable | undefined {\n if (isCollectionLike(value)) {\n const name = value.constructor?.name\n const metadata: Record<string, Jsonable> = { size: value.size }\n\n if (name) {\n metadata.name = name\n }\n\n if (isMapLike(value)) {\n return ctx.replacer({ metadata, type: 'map', value: serializeIterableEntries(value.entries(), ctx, serializeValue) })\n }\n\n if (isSetLike(value)) {\n return ctx.replacer({ metadata, type: 'set', value: serializeIterableEntries(value, ctx, serializeValue) })\n }\n }\n\n return undefined\n}\n",
|
|
13
|
+
"import type { SerializeContext, SerializeValueFn } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { OMIT_SENTINEL } from '../constants'\n\nexport function handlePropertyAccessError(error: unknown, strategy: SerializeContext['onPropertyAccess'], key: string | symbol, ctx: SerializeContext): Jsonable | typeof OMIT_SENTINEL {\n if (strategy === 'throw') {\n throw error\n }\n\n if (strategy === 'omit') {\n return OMIT_SENTINEL\n }\n\n return ctx.replacer({ type: 'property-access-error', value: `[Property Access Error: ${String(key)}]` })\n}\n\nexport function safeAccess(obj: object, key: string | symbol, strategy: SerializeContext['onPropertyAccess'], ctx: SerializeContext): unknown {\n try {\n return (obj as Record<string | symbol, unknown>)[key]\n } catch (error) {\n return handlePropertyAccessError(error, strategy, key, ctx)\n }\n}\n\nexport function serializeObject(obj: object, ctx: SerializeContext, serializeValue: SerializeValueFn): Record<string, Jsonable> {\n const result: Record<string, Jsonable> = {}\n const { onPropertyAccess, symbolRegistry } = ctx\n\n for (const key of Object.keys(obj)) {\n const value = safeAccess(obj, key, onPropertyAccess, ctx)\n\n if (value === OMIT_SENTINEL) {\n continue\n }\n\n const serializedValue = serializeValue(value, ctx)\n\n if (serializedValue === OMIT_SENTINEL) {\n continue\n }\n\n result[key] = serializedValue\n }\n\n for (const sym of Object.getOwnPropertySymbols(obj)) {\n const value = safeAccess(obj, sym, onPropertyAccess, ctx)\n\n if (value === OMIT_SENTINEL) {\n continue\n }\n\n const serializedValue = serializeValue(value, ctx)\n\n if (serializedValue === OMIT_SENTINEL) {\n continue\n }\n\n result[symbolRegistry(sym)] = serializedValue\n }\n\n return result\n}\n",
|
|
14
|
+
"import type { ErrorPropertyValue, SerializeContext, SerializeValueFn } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { OMIT_SENTINEL } from '../constants'\nimport { handlePropertyAccessError } from './object'\n\nexport const isUsableValue = (value: ErrorPropertyValue): value is Jsonable => (\n value !== undefined && value !== OMIT_SENTINEL\n)\n\nexport function readProperty(error: Error, key: string | symbol, ctx: SerializeContext, serializeValue: SerializeValueFn): ErrorPropertyValue {\n try {\n const value = (error as unknown as Record<string | symbol, unknown>)[key]\n\n if (value === undefined) {\n return undefined\n }\n\n return serializeValue(value, ctx)\n } catch (error_) {\n return handlePropertyAccessError(error_, ctx.onPropertyAccess, key, ctx)\n }\n}\n\nexport function serializeErrorCoreFields(error: Error, ctx: SerializeContext, serializeValue: SerializeValueFn): Record<string, Jsonable> {\n const result: Record<string, Jsonable> = { name: error.name }\n const serializedMessage = readProperty(error, 'message', ctx, serializeValue)\n const serializedStack = readProperty(error, 'stack', ctx, serializeValue)\n const serializedCause = readProperty(error, 'cause', ctx, serializeValue)\n\n if (typeof serializedMessage === 'string' && serializedMessage.length > 0) {\n result.message = serializedMessage\n }\n\n if (typeof serializedStack === 'string' && serializedStack.length > 0) {\n result.stack = serializedStack\n }\n\n if (isUsableValue(serializedCause)) {\n result.cause = serializedCause\n }\n\n if (error instanceof AggregateError) {\n const serializedErrors = readProperty(error, 'errors', ctx, serializeValue)\n\n if (isUsableValue(serializedErrors)) {\n result.errors = serializedErrors\n }\n }\n\n return result\n}\n\nexport function serializeError(error: Error, ctx: SerializeContext, serializeValue: SerializeValueFn): Record<string, Jsonable> {\n const result = serializeErrorCoreFields(error, ctx, serializeValue)\n\n for (const key of Object.keys(error)) {\n if (!(key in result)) {\n const serializedValue = readProperty(error, key, ctx, serializeValue)\n\n if (isUsableValue(serializedValue)) {\n result[key] = serializedValue\n }\n }\n }\n\n for (const sym of Object.getOwnPropertySymbols(error)) {\n const serializedValue = readProperty(error, sym, ctx, serializeValue)\n\n if (isUsableValue(serializedValue)) {\n result[ctx.symbolRegistry(sym)] = serializedValue\n }\n }\n\n return result\n}\n",
|
|
15
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { isGenerator } from '@/core/guards'\nimport { serializeFunction } from './function'\n\nexport function serializeOpaque(value: unknown, ctx: SerializeContext): Jsonable | undefined {\n if (typeof value === 'function') {\n return serializeFunction(value as (...args: unknown[]) => unknown, ctx)\n }\n\n if (value instanceof Promise) {\n return ctx.replacer({ type: 'promise', value: '[Promise]' })\n }\n\n if (value instanceof WeakMap) {\n return ctx.replacer({ type: 'weakmap', value: '[WeakMap]' })\n }\n\n if (value instanceof WeakSet) {\n return ctx.replacer({ type: 'weakset', value: '[WeakSet]' })\n }\n\n if (typeof WeakRef !== 'undefined' && value instanceof WeakRef) {\n return ctx.replacer({ type: 'weakref', value: '[WeakRef]' })\n }\n\n if (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream) {\n return ctx.replacer({ type: 'readablestream', value: '[ReadableStream]' })\n }\n\n if (isGenerator(value)) {\n return ctx.replacer({ type: 'generator', value: '[Generator]' })\n }\n\n return undefined\n}\n",
|
|
16
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { GENERATOR_PATTERNS } from '../constants'\n\nexport function serializeFunction(fn: (...args: unknown[]) => unknown, ctx: SerializeContext): Jsonable {\n const metadata: Record<string, Jsonable> = {}\n const str = fn.toString()\n\n metadata.async = str.startsWith('async')\n metadata.generator = GENERATOR_PATTERNS.test(str)\n\n return ctx.replacer({ metadata, type: 'function', value: { length: fn.length, name: fn.name || 'anonymous' } })\n}\n",
|
|
17
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\n\nexport function serializeLeafObject(value: unknown, ctx: SerializeContext): Jsonable | undefined {\n if (value instanceof Date) {\n return ctx.replacer({ type: 'date', value: value.toISOString() })\n }\n\n if (value instanceof RegExp) {\n return ctx.replacer({ type: 'regexp', value: value.toString() })\n }\n\n if (value instanceof URL) {\n return ctx.replacer({ type: 'url', value: value.href })\n }\n\n return undefined\n}\n",
|
|
18
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\nimport { isBigInt, isJsonablePrimitive, isNumber, isSymbol } from '@/core/guards'\nimport { serializeNumber } from './number'\n\nexport function serializePrimitive(value: unknown, ctx: SerializeContext): Jsonable | undefined {\n if (value === null) {\n return null\n }\n\n if (value === undefined) {\n return ctx.replacer({ type: 'undefined', value: null })\n }\n\n if (isNumber(value)) {\n return serializeNumber(value, ctx)\n }\n\n if (isJsonablePrimitive(value)) {\n return value\n }\n\n if (isBigInt(value)) {\n return ctx.replacer({ type: 'bigint', value: value.toString() })\n }\n\n if (isSymbol(value)) {\n return ctx.replacer({ type: 'symbol', value: ctx.symbolRegistry(value) })\n }\n\n return undefined\n}\n",
|
|
19
|
+
"import type { SerializeContext } from '../types'\nimport type { Jsonable } from '@/core/types'\n\nexport function serializeNumber(value: number, ctx: SerializeContext): Jsonable {\n if (Number.isNaN(value)) {\n return ctx.replacer({ type: 'number', value: 'NaN' })\n }\n\n if (!Number.isFinite(value)) {\n return ctx.replacer({ type: 'number', value: value > 0 ? 'Infinity' : '-Infinity' })\n }\n\n return value\n}\n",
|
|
20
|
+
"import type { SerializeContext, SerializeErrorStrategy } from './types'\nimport type { Jsonable } from '@/core/types'\nimport { OMIT_SENTINEL } from './constants'\n\nexport function handleError(strategy: SerializeErrorStrategy, type: string, placeholder: string, ctx: SerializeContext): Jsonable | typeof OMIT_SENTINEL {\n if (strategy === 'throw') {\n throw new Error(placeholder)\n }\n\n if (strategy === 'omit') {\n return OMIT_SENTINEL\n }\n\n return ctx.replacer({ type, value: placeholder })\n}\n",
|
|
21
|
+
"import type { SerializeContext, SerializeOptions } from './types'\nimport type { Jsonable } from '@/core/types'\nimport { OMIT_SENTINEL } from './constants'\nimport { createContext } from './context'\nimport { serializeCompound } from './serializers/compound'\nimport { serializeLeafObject } from './serializers/leaf-object'\nimport { serializePrimitive } from './serializers/primitive'\nimport { handleError } from './utils'\n\nexport function serialize(value: unknown, options?: SerializeOptions): Jsonable {\n const ctx = createContext(options)\n const serializedValue = serializeValue(value, ctx)\n\n if (serializedValue === OMIT_SENTINEL) {\n return null\n }\n\n return serializedValue\n}\n\nexport function serializeValue(value: unknown, ctx: SerializeContext): Jsonable | typeof OMIT_SENTINEL {\n const primitive = serializePrimitive(value, ctx)\n\n if (primitive !== undefined) {\n return primitive\n }\n\n const leaf = serializeLeafObject(value, ctx)\n\n if (leaf !== undefined) {\n return leaf\n }\n\n if (ctx.visited.has(value as object)) {\n return handleError(ctx.onCircularRef, 'circular-ref', '[Circular]', ctx)\n }\n\n if (ctx.depth >= ctx.maxDepth) {\n return handleError(ctx.onMaxDepth, 'max-depth', '[Max Depth]', ctx)\n }\n\n ctx.visited.add(value as object)\n ctx.depth++\n\n try {\n return serializeCompound(value as object, ctx, serializeValue)\n } finally {\n ctx.depth--\n ctx.visited.delete(value as object)\n }\n}\n"
|
|
22
|
+
],
|
|
23
|
+
"mappings": "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",
|
|
24
|
+
"debugId": "A8B199917D5D11B764756E2164756E21",
|
|
25
|
+
"names": []
|
|
26
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
class v{eventListeners;onceListeners;constructor(){this.eventListeners=new Map,this.onceListeners=new Map}listeners(e){let t=this.eventListeners.get(e)??[],n=this.onceListeners.get(e)??[];return[...t,...n]}listenersCount(e){let t=this.eventListeners.get(e),n=this.onceListeners.get(e);return(t?.size??0)+(n?.size??0)}eventNames(){return[...new Set([...this.eventListeners.keys(),...this.onceListeners.keys()])]}on(e,t){return this.#e(this.eventListeners,e,t),this}once(e,t){return this.#e(this.onceListeners,e,t),this}off(e,t){return this.#t(this.eventListeners,e,t),this.#t(this.onceListeners,e,t),this}emit(e,...t){let n=this.#n(this.eventListeners.get(e)),s=this.#n(this.onceListeners.get(e));this.onceListeners.delete(e);let r=this.#s(n,t),i=this.#s(s,t);return r||i}removeAllListeners(e){if(e===void 0)this.eventListeners.clear(),this.onceListeners.clear();else this.eventListeners.delete(e),this.onceListeners.delete(e);return this}#e(e,t,n){let s=e.get(t);if(!s)s=new Set,e.set(t,s);s.add(n)}#t(e,t,n){let s=e.get(t);if(!s)return;if(s.delete(n),s.size===0)e.delete(t)}#n(e){if(!e||e.size===0)return[];return[...e]}#s(e,t){if(e.length===0)return!1;for(let n of e)n(...t);return!0}}export{v as pb};
|
|
2
|
+
|
|
3
|
+
//# debugId=AE28312005004D2D64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-kbzgn0z4.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/events/emitter.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { EventArgs, EventListener, EventListenerMap, EventMap, EventNames } from './types'\n\nexport class Emitter<TEventMap = EventMap, TStrict extends boolean = false> {\n protected readonly eventListeners: EventListenerMap\n protected readonly onceListeners: EventListenerMap\n\n public constructor() {\n this.eventListeners = new Map()\n this.onceListeners = new Map()\n }\n\n public listeners<TEventName extends EventNames<TEventMap, TStrict>>(eventName: TEventName): Array<EventListener<EventArgs<TEventMap, TEventName, TStrict>>> {\n const listeners = this.eventListeners.get(eventName) ?? []\n const onceListeners = this.onceListeners.get(eventName) ?? []\n\n return [...listeners, ...onceListeners]\n }\n\n public listenersCount<TEventName extends EventNames<TEventMap, TStrict>>(eventName: TEventName) {\n const listeners = this.eventListeners.get(eventName)\n const onceListeners = this.onceListeners.get(eventName)\n\n return (listeners?.size ?? 0) + (onceListeners?.size ?? 0)\n }\n\n public eventNames(): Array<PropertyKey | keyof TEventMap> {\n return [...new Set([...this.eventListeners.keys(), ...this.onceListeners.keys()])]\n }\n\n public on<TEventName extends EventNames<TEventMap, TStrict>>(eventName: TEventName, listener: EventListener<EventArgs<TEventMap, TEventName, TStrict>>): this {\n this.#addTo(this.eventListeners, eventName, listener)\n\n return this\n }\n\n public once<TEventName extends EventNames<TEventMap, TStrict>>(eventName: TEventName, listener: EventListener<EventArgs<TEventMap, TEventName, TStrict>>): this {\n this.#addTo(this.onceListeners, eventName, listener)\n\n return this\n }\n\n public off<TEventName extends EventNames<TEventMap, TStrict>>(eventName: TEventName, listener: EventListener<EventArgs<TEventMap, TEventName, TStrict>>): this {\n this.#removeFrom(this.eventListeners, eventName, listener)\n this.#removeFrom(this.onceListeners, eventName, listener)\n\n return this\n }\n\n public emit<TEventName extends EventNames<TEventMap, TStrict>>(eventName: TEventName, ...args: EventArgs<TEventMap, TEventName, TStrict>): boolean {\n const regularSnapshot = this.#takeSnapshot(this.eventListeners.get(eventName))\n const onceSnapshot = this.#takeSnapshot(this.onceListeners.get(eventName))\n\n this.onceListeners.delete(eventName)\n\n const fromRegular = this.#emitSnapshot(regularSnapshot, args)\n const fromOnce = this.#emitSnapshot(onceSnapshot, args)\n\n return fromRegular || fromOnce\n }\n\n public removeAllListeners<TEventName extends EventNames<TEventMap, TStrict>>(eventName?: TEventName): this {\n if (eventName === undefined) {\n this.eventListeners.clear()\n this.onceListeners.clear()\n } else {\n this.eventListeners.delete(eventName)\n this.onceListeners.delete(eventName)\n }\n\n return this\n }\n\n #addTo(map: EventListenerMap, eventName: PropertyKey, listener: EventListener) {\n let set = map.get(eventName)\n\n if (!set) {\n set = new Set()\n map.set(eventName, set)\n }\n\n set.add(listener)\n }\n\n #removeFrom(map: EventListenerMap, eventName: PropertyKey, listener: EventListener) {\n const set = map.get(eventName)\n\n if (!set) {\n return\n }\n\n set.delete(listener)\n\n if (set.size === 0) {\n map.delete(eventName)\n }\n }\n\n #takeSnapshot(set: Set<EventListener> | undefined) {\n if (!set || set.size === 0) {\n return []\n }\n\n return [...set]\n }\n\n #emitSnapshot(snapshot: EventListener[], args: any[]) {\n if (snapshot.length === 0) {\n return false\n }\n\n for (const listener of snapshot) {\n listener(...args)\n }\n\n return true\n }\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "AAEO,MAAM,CAA+D,CACrD,eACA,cAEZ,WAAW,EAAG,CACjB,KAAK,eAAiB,IAAI,IAC1B,KAAK,cAAgB,IAAI,IAGtB,SAA4D,CAAC,EAAwF,CACxJ,IAAM,EAAY,KAAK,eAAe,IAAI,CAAS,GAAK,CAAC,EACnD,EAAgB,KAAK,cAAc,IAAI,CAAS,GAAK,CAAC,EAE5D,MAAO,CAAC,GAAG,EAAW,GAAG,CAAa,EAGnC,cAAiE,CAAC,EAAuB,CAC5F,IAAM,EAAY,KAAK,eAAe,IAAI,CAAS,EAC7C,EAAgB,KAAK,cAAc,IAAI,CAAS,EAEtD,OAAQ,GAAW,MAAQ,IAAM,GAAe,MAAQ,GAGrD,UAAU,EAAyC,CACtD,MAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,eAAe,KAAK,EAAG,GAAG,KAAK,cAAc,KAAK,CAAC,CAAC,CAAC,EAG9E,EAAqD,CAAC,EAAuB,EAA0E,CAG1J,OAFA,KAAK,GAAO,KAAK,eAAgB,EAAW,CAAQ,EAE7C,KAGJ,IAAuD,CAAC,EAAuB,EAA0E,CAG5J,OAFA,KAAK,GAAO,KAAK,cAAe,EAAW,CAAQ,EAE5C,KAGJ,GAAsD,CAAC,EAAuB,EAA0E,CAI3J,OAHA,KAAK,GAAY,KAAK,eAAgB,EAAW,CAAQ,EACzD,KAAK,GAAY,KAAK,cAAe,EAAW,CAAQ,EAEjD,KAGJ,IAAuD,CAAC,KAA0B,EAA0D,CAC/I,IAAM,EAAkB,KAAK,GAAc,KAAK,eAAe,IAAI,CAAS,CAAC,EACvE,EAAe,KAAK,GAAc,KAAK,cAAc,IAAI,CAAS,CAAC,EAEzE,KAAK,cAAc,OAAO,CAAS,EAEnC,IAAM,EAAc,KAAK,GAAc,EAAiB,CAAI,EACtD,EAAW,KAAK,GAAc,EAAc,CAAI,EAEtD,OAAO,GAAe,EAGnB,kBAAqE,CAAC,EAA8B,CACvG,GAAI,IAAc,OACd,KAAK,eAAe,MAAM,EAC1B,KAAK,cAAc,MAAM,EAEzB,UAAK,eAAe,OAAO,CAAS,EACpC,KAAK,cAAc,OAAO,CAAS,EAGvC,OAAO,KAGX,EAAM,CAAC,EAAuB,EAAwB,EAAyB,CAC3E,IAAI,EAAM,EAAI,IAAI,CAAS,EAE3B,GAAI,CAAC,EACD,EAAM,IAAI,IACV,EAAI,IAAI,EAAW,CAAG,EAG1B,EAAI,IAAI,CAAQ,EAGpB,EAAW,CAAC,EAAuB,EAAwB,EAAyB,CAChF,IAAM,EAAM,EAAI,IAAI,CAAS,EAE7B,GAAI,CAAC,EACD,OAKJ,GAFA,EAAI,OAAO,CAAQ,EAEf,EAAI,OAAS,EACb,EAAI,OAAO,CAAS,EAI5B,EAAa,CAAC,EAAqC,CAC/C,GAAI,CAAC,GAAO,EAAI,OAAS,EACrB,MAAO,CAAC,EAGZ,MAAO,CAAC,GAAG,CAAG,EAGlB,EAAa,CAAC,EAA2B,EAAa,CAClD,GAAI,EAAS,SAAW,EACpB,MAAO,GAGX,QAAW,KAAY,EACnB,EAAS,GAAG,CAAI,EAGpB,MAAO,GAEf",
|
|
8
|
+
"debugId": "AE28312005004D2D64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|