pythonlib 1.0.2 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -49
- package/dist/base64-C_am75Sv.d.ts +165 -0
- package/dist/base64.d.ts +1 -0
- package/dist/base64.js +37 -0
- package/dist/chunk-2QEMKE7U.js +252 -0
- package/dist/chunk-2YTO24B5.js +78 -0
- package/dist/chunk-3HQSBCEC.js +348 -0
- package/dist/{chunk-7BZB2TQF.js → chunk-3M3PB4RO.js} +4 -6
- package/dist/chunk-5OKGPZBQ.js +1106 -0
- package/dist/chunk-B5LQJODJ.js +37 -0
- package/dist/{chunk-CUP6EPDB.js → chunk-BCMGGBWG.js} +2 -5
- package/dist/chunk-BCVIH2BN.js +175 -0
- package/dist/chunk-CANUXHVB.js +349 -0
- package/dist/{chunk-QURVRHY2.js → chunk-D35YI363.js} +15 -12
- package/dist/{chunk-RSBRI27Z.js → chunk-ETBW6XNR.js} +3 -4
- package/dist/chunk-HSTC277I.js +255 -0
- package/dist/chunk-HTCQ4OO5.js +238 -0
- package/dist/chunk-IANXD4D4.js +250 -0
- package/dist/{chunk-G6PUQTVZ.js → chunk-JAUU3HMH.js} +1 -2
- package/dist/chunk-JVTQM7CI.js +195 -0
- package/dist/chunk-KKJHGY4C.js +551 -0
- package/dist/chunk-LHPQS75Z.js +192 -0
- package/dist/{chunk-OSX7QZAW.js → chunk-LK2L2TFG.js} +5 -6
- package/dist/{chunk-CEZSBJJV.js → chunk-LWYBTWBZ.js} +2 -3
- package/dist/chunk-MEEU4SH5.js +362 -0
- package/dist/{chunk-TAYRRHJ3.js → chunk-MFKIEN7N.js} +1 -2
- package/dist/{chunk-PZ5AY32C.js → chunk-MLKGABMK.js} +0 -1
- package/dist/chunk-OZRS5PC4.js +312 -0
- package/dist/chunk-PVK4F3ME.js +194 -0
- package/dist/{chunk-56DGFWIJ.js → chunk-QKJBQKPY.js} +1 -2
- package/dist/chunk-RB6BYCIQ.js +141 -0
- package/dist/chunk-RRSOZXZE.js +155 -0
- package/dist/chunk-THMJVAK6.js +282 -0
- package/dist/chunk-UGZ5OY5Z.js +165 -0
- package/dist/chunk-WTZSAITC.js +82 -0
- package/dist/chunk-YONWJHJU.js +265 -0
- package/dist/collections.js +2 -3
- package/dist/copy-6ZaZ__ge.d.ts +59 -0
- package/dist/copy.d.ts +1 -0
- package/dist/copy.js +9 -0
- package/dist/datetime.js +2 -3
- package/dist/functools.js +2 -3
- package/dist/glob.browser-B6d_YdV5.d.ts +50 -0
- package/dist/glob.browser.d.ts +1 -0
- package/dist/glob.browser.js +15 -0
- package/dist/glob.node-wn5ehtyM.d.ts +80 -0
- package/dist/glob.node.d.ts +1 -0
- package/dist/glob.node.js +15 -0
- package/dist/hashlib-vKP511NY.d.ts +205 -0
- package/dist/hashlib.d.ts +1 -0
- package/dist/hashlib.js +39 -0
- package/dist/index.browser.d.ts +172 -0
- package/dist/index.browser.js +305 -0
- package/dist/index.d.ts +36 -602
- package/dist/index.js +138 -1073
- package/dist/itertools.js +2 -3
- package/dist/json.js +2 -3
- package/dist/logging.browser-Dux4L5kz.d.ts +185 -0
- package/dist/logging.browser.d.ts +1 -0
- package/dist/logging.browser.js +63 -0
- package/dist/logging.node-CH75bVdE.d.ts +185 -0
- package/dist/logging.node.d.ts +1 -0
- package/dist/logging.node.js +61 -0
- package/dist/math.js +2 -3
- package/dist/{os-CqGKe872.d.ts → os.browser-krjSx5kF.d.ts} +32 -55
- package/dist/os.browser.d.ts +2 -0
- package/dist/{os.js → os.browser.js} +41 -16
- package/dist/os.node-CQjch8Ht.d.ts +124 -0
- package/dist/os.node.d.ts +2 -0
- package/dist/os.node.js +83 -0
- package/dist/os.shared-C3x70nhO.d.ts +59 -0
- package/dist/pathlib.browser-NC7kKQYe.d.ts +91 -0
- package/dist/pathlib.browser.d.ts +1 -0
- package/dist/pathlib.browser.js +17 -0
- package/dist/pathlib.node-CY3yUFdT.d.ts +331 -0
- package/dist/pathlib.node.d.ts +2 -0
- package/dist/pathlib.node.js +17 -0
- package/dist/random.js +2 -3
- package/dist/re.js +2 -3
- package/dist/set-JQbLAq8B.d.ts +592 -0
- package/dist/shutil.browser-Ck5oWhnP.d.ts +113 -0
- package/dist/shutil.browser.d.ts +1 -0
- package/dist/shutil.browser.js +33 -0
- package/dist/shutil.node-C9kwvhAf.d.ts +160 -0
- package/dist/shutil.node.d.ts +2 -0
- package/dist/shutil.node.js +33 -0
- package/dist/string.js +2 -3
- package/dist/subprocess-CZVYzQ3V.d.ts +214 -0
- package/dist/subprocess.d.ts +1 -0
- package/dist/subprocess.js +29 -0
- package/dist/sys-IL8LgI_W.d.ts +212 -0
- package/dist/sys.d.ts +1 -0
- package/dist/sys.js +51 -0
- package/dist/tempfile.browser-DciOKfNm.d.ts +78 -0
- package/dist/tempfile.browser.d.ts +1 -0
- package/dist/tempfile.browser.js +19 -0
- package/dist/tempfile.node-bVMY60Cu.d.ts +195 -0
- package/dist/tempfile.node.d.ts +2 -0
- package/dist/tempfile.node.js +23 -0
- package/dist/time-CcYhdiSu.d.ts +245 -0
- package/dist/time.d.ts +1 -0
- package/dist/time.js +49 -0
- package/dist/urllib-DJtkj-0f.d.ts +198 -0
- package/dist/urllib.d.ts +1 -0
- package/dist/urllib.js +37 -0
- package/dist/uuid-C0ypmn56.d.ts +160 -0
- package/dist/uuid.d.ts +1 -0
- package/dist/uuid.js +23 -0
- package/package.json +128 -5
- package/dist/chunk-56DGFWIJ.js.map +0 -1
- package/dist/chunk-5AOJFFYN.js +0 -313
- package/dist/chunk-5AOJFFYN.js.map +0 -1
- package/dist/chunk-7BZB2TQF.js.map +0 -1
- package/dist/chunk-CEZSBJJV.js.map +0 -1
- package/dist/chunk-CUP6EPDB.js.map +0 -1
- package/dist/chunk-G6PUQTVZ.js.map +0 -1
- package/dist/chunk-OSX7QZAW.js.map +0 -1
- package/dist/chunk-PZ5AY32C.js.map +0 -1
- package/dist/chunk-QURVRHY2.js.map +0 -1
- package/dist/chunk-RSBRI27Z.js.map +0 -1
- package/dist/chunk-TAYRRHJ3.js.map +0 -1
- package/dist/collections.js.map +0 -1
- package/dist/datetime.js.map +0 -1
- package/dist/functools.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/itertools.js.map +0 -1
- package/dist/json.js.map +0 -1
- package/dist/math.js.map +0 -1
- package/dist/os.d.ts +0 -1
- package/dist/os.js.map +0 -1
- package/dist/random.js.map +0 -1
- package/dist/re.js.map +0 -1
- package/dist/string.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/itertools.ts"],"sourcesContent":["/**\n * Python itertools module for TypeScript\n *\n * Provides iterator building blocks inspired by Python's itertools module.\n * Includes functions for permutations, combinations, grouping, and chaining iterables.\n *\n * @see {@link https://docs.python.org/3/library/itertools.html | Python itertools documentation}\n * @module\n */\n\n/**\n * Chain multiple iterables together into a single array\n * chain([1, 2], [3, 4]) -> [1, 2, 3, 4]\n */\nexport function chain<T>(...iterables: Iterable<T>[]): T[] {\n return iterables.flatMap((it) => [...it])\n}\n\n/**\n * Return successive r-length combinations of elements\n * combinations([1, 2, 3], 2) -> [[1, 2], [1, 3], [2, 3]]\n */\nexport function combinations<T>(iterable: Iterable<T>, r: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n if (r > n || r < 0) return []\n\n const result: T[][] = []\n const indices: number[] = Array.from({ length: r }, (_, i) => i)\n result.push(indices.map((i) => pool[i] as T))\n\n for (;;) {\n let i = r - 1\n while (i >= 0 && indices[i] === i + n - r) i--\n if (i < 0) break\n ;(indices[i] as number)++\n for (let j = i + 1; j < r; j++) {\n indices[j] = (indices[j - 1] as number) + 1\n }\n result.push(indices.map((idx) => pool[idx] as T))\n }\n\n return result\n}\n\n/**\n * Return successive r-length permutations of elements\n * permutations([1, 2, 3], 2) -> [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]\n */\nexport function permutations<T>(iterable: Iterable<T>, r?: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n const rLen = r === undefined ? n : r\n if (rLen > n || rLen < 0) return []\n\n const result: T[][] = []\n const indices: number[] = Array.from({ length: n }, (_, i) => i)\n const cycles: number[] = Array.from({ length: rLen }, (_, i) => n - i)\n\n result.push(indices.slice(0, rLen).map((i) => pool[i] as T))\n\n outer: for (;;) {\n for (let i = rLen - 1; i >= 0; i--) {\n ;(cycles[i] as number)--\n if (cycles[i] === 0) {\n // Rotate indices[i:] left by one\n const temp = indices[i] as number\n for (let j = i; j < n - 1; j++) {\n indices[j] = indices[j + 1] as number\n }\n indices[n - 1] = temp\n cycles[i] = n - i\n } else {\n const j = n - (cycles[i] as number)\n const swap = indices[j] as number\n indices[j] = indices[i] as number\n indices[i] = swap\n result.push(indices.slice(0, rLen).map((idx) => pool[idx] as T))\n continue outer\n }\n }\n break\n }\n\n return result\n}\n\n/**\n * Cartesian product of input iterables\n * product([1, 2], ['a', 'b']) -> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]\n */\nexport function product<T>(...iterables: Iterable<T>[]): T[][] {\n if (iterables.length === 0) return [[]]\n\n const pools = iterables.map((it) => [...it])\n\n // Check if any pool is empty\n if (pools.some((p) => p.length === 0)) return []\n\n const result: T[][] = []\n const indices: number[] = new Array<number>(pools.length).fill(0)\n result.push(pools.map((p, i) => p[indices[i] as number] as T))\n\n for (;;) {\n let i = pools.length - 1\n while (i >= 0) {\n ;(indices[i] as number)++\n const currentPool = pools[i] as T[]\n if ((indices[i] as number) < currentPool.length) {\n result.push(pools.map((p, j) => p[indices[j] as number] as T))\n break\n }\n indices[i] = 0\n i--\n }\n if (i < 0) break\n }\n\n return result\n}\n\n/**\n * Cycle through an iterable indefinitely (INFINITE - returns Generator)\n * cycle([1, 2, 3]) -> 1, 2, 3, 1, 2, 3, 1, 2, 3, ...\n *\n * WARNING: This is infinite! Use with for...of and break, or islice.\n */\nexport function* cycle<T>(iterable: Iterable<T>): Generator<T> {\n const saved: T[] = []\n for (const element of iterable) {\n yield element\n saved.push(element)\n }\n if (saved.length === 0) return\n for (;;) {\n yield* saved\n }\n}\n\n/**\n * Repeat an object. If times is specified, returns an array. Otherwise returns\n * an infinite generator.\n *\n * repeat('x', 3) -> ['x', 'x', 'x']\n * repeat('x') -> Generator that yields 'x' forever (INFINITE)\n */\nexport function repeat<T>(obj: T, times?: number): T[] | Generator<T> {\n if (times !== undefined) {\n // Finite: return array\n return Array.from({ length: times }, () => obj)\n }\n // Infinite: return generator\n return (function* () {\n for (;;) {\n yield obj\n }\n })()\n}\n\n/**\n * Slice an iterable from start to stop with step\n * islice([1, 2, 3, 4, 5], 1, 4) -> [2, 3, 4]\n * islice([1, 2, 3, 4, 5], 3) -> [1, 2, 3]\n */\nexport function islice<T>(\n iterable: Iterable<T>,\n start: number,\n stop?: number,\n step: number = 1\n): T[] {\n // Handle single argument (stop only): islice(it, 5) means islice(it, 0, 5, 1)\n let actualStart = start\n let actualStop = stop\n if (actualStop === undefined) {\n actualStop = start\n actualStart = 0\n }\n\n if (step < 1) {\n throw new Error(\"step must be >= 1\")\n }\n\n const result: T[] = []\n let index = 0\n let nextIndex = actualStart\n\n for (const element of iterable) {\n if (index >= actualStop) break\n if (index === nextIndex) {\n result.push(element)\n nextIndex += step\n }\n index++\n }\n\n return result\n}\n\n/**\n * Take elements while predicate is true\n * takeWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [1, 4]\n */\nexport function takeWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[] {\n const result: T[] = []\n for (const element of iterable) {\n if (predicate(element)) {\n result.push(element)\n } else {\n break\n }\n }\n return result\n}\n\n/**\n * Skip elements while predicate is true, then return the rest\n * dropWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [6, 4, 1]\n */\nexport function dropWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[] {\n const result: T[] = []\n let dropping = true\n for (const element of iterable) {\n if (dropping && predicate(element)) {\n continue\n }\n dropping = false\n result.push(element)\n }\n return result\n}\n\n/**\n * Zip iterables together, filling missing values with fillvalue\n * zipLongest([1, 2, 3], ['a', 'b'], { fillvalue: '-' }) -> [[1, 'a'], [2, 'b'], [3, '-']]\n */\nexport function zipLongest<T>(\n ...args: [...Iterable<T>[], { fillvalue?: T }] | Iterable<T>[]\n): T[][] {\n let fillvalue: T | undefined\n let iterables: Iterable<T>[]\n\n // Check if last argument is options object\n const lastArg = args[args.length - 1]\n if (\n lastArg &&\n typeof lastArg === \"object\" &&\n !Array.isArray(lastArg) &&\n !(Symbol.iterator in lastArg)\n ) {\n fillvalue = (lastArg as { fillvalue?: T }).fillvalue\n iterables = args.slice(0, -1) as Iterable<T>[]\n } else {\n iterables = args as Iterable<T>[]\n }\n\n if (iterables.length === 0) return []\n\n const arrays = iterables.map((it) => [...it])\n const maxLen = Math.max(...arrays.map((a) => a.length))\n const result: T[][] = []\n\n for (let i = 0; i < maxLen; i++) {\n const tuple: T[] = []\n for (const arr of arrays) {\n tuple.push(i < arr.length ? (arr[i] as T) : (fillvalue as T))\n }\n result.push(tuple)\n }\n\n return result\n}\n\n/**\n * Return elements from iterable where the corresponding selector is true\n * compress([1, 2, 3, 4, 5], [1, 0, 1, 0, 1]) -> [1, 3, 5]\n */\nexport function compress<T>(data: Iterable<T>, selectors: Iterable<unknown>): T[] {\n const result: T[] = []\n const dataArr = [...data]\n const selectorsArr = [...selectors]\n const len = Math.min(dataArr.length, selectorsArr.length)\n\n for (let i = 0; i < len; i++) {\n if (selectorsArr[i]) {\n result.push(dataArr[i] as T)\n }\n }\n return result\n}\n\n/**\n * Return elements for which predicate is false\n * filterFalse(x => x % 2, [1, 2, 3, 4, 5]) -> [2, 4]\n */\nexport function filterFalse<T>(predicate: (x: T) => unknown, iterable: Iterable<T>): T[] {\n const result: T[] = []\n for (const element of iterable) {\n if (!predicate(element)) {\n result.push(element)\n }\n }\n return result\n}\n\n/**\n * Make an iterator that returns accumulated sums or accumulated results\n * accumulate([1, 2, 3, 4, 5]) -> [1, 3, 6, 10, 15]\n * accumulate([1, 2, 3, 4, 5], (x, y) => x * y) -> [1, 2, 6, 24, 120]\n */\nexport function accumulate<T>(\n iterable: Iterable<T>,\n func?: (acc: T, val: T) => T,\n initial?: T\n): T[] {\n const result: T[] = []\n const arr = [...iterable]\n\n if (arr.length === 0) {\n if (initial !== undefined) {\n return [initial]\n }\n return []\n }\n\n const operation = func ?? ((a: T, b: T): T => ((a as number) + (b as number)) as unknown as T)\n\n let acc: T\n let startIdx: number\n\n if (initial !== undefined) {\n acc = initial\n startIdx = 0\n result.push(acc)\n } else {\n acc = arr[0] as T\n startIdx = 1\n result.push(acc)\n }\n\n for (let i = startIdx; i < arr.length; i++) {\n acc = operation(acc, arr[i] as T)\n result.push(acc)\n }\n\n return result\n}\n\n/**\n * Return consecutive keys and groups from the iterable\n * groupby([1, 1, 2, 2, 2, 3, 1, 1]) -> [[1, [1, 1]], [2, [2, 2, 2]], [3, [3]], [1, [1, 1]]]\n */\nexport function groupby<T, K = T>(iterable: Iterable<T>, key?: (x: T) => K): [K, T[]][] {\n const result: [K, T[]][] = []\n const keyFunc = key ?? ((x: T) => x as unknown as K)\n\n let currentKey: K | undefined\n let currentGroup: T[] = []\n let first = true\n\n for (const element of iterable) {\n const k = keyFunc(element)\n if (first) {\n currentKey = k\n currentGroup = [element]\n first = false\n } else if (k === currentKey) {\n currentGroup.push(element)\n } else {\n result.push([currentKey as K, currentGroup])\n currentKey = k\n currentGroup = [element]\n }\n }\n\n if (!first) {\n result.push([currentKey as K, currentGroup])\n }\n\n return result\n}\n\n/**\n * Make an iterator that returns evenly spaced values starting with n\n * count(10, 2) -> 10, 12, 14, 16, 18, ... (INFINITE Generator)\n */\nexport function* count(start: number = 0, step: number = 1): Generator<number> {\n let n = start\n for (;;) {\n yield n\n n += step\n }\n}\n\n/**\n * Return n independent iterators from a single iterable\n * tee([1, 2, 3], 2) -> [[1, 2, 3], [1, 2, 3]]\n */\nexport function tee<T>(iterable: Iterable<T>, n: number = 2): T[][] {\n const arr = [...iterable]\n return Array.from({ length: n }, () => [...arr])\n}\n\n/**\n * Return successive overlapping pairs from the iterable\n * pairwise([1, 2, 3, 4, 5]) -> [[1, 2], [2, 3], [3, 4], [4, 5]]\n */\nexport function pairwise<T>(iterable: Iterable<T>): [T, T][] {\n const arr = [...iterable]\n const result: [T, T][] = []\n for (let i = 0; i < arr.length - 1; i++) {\n result.push([arr[i] as T, arr[i + 1] as T])\n }\n return result\n}\n\n/**\n * Cartesian product with repeat (product(range(3), repeat=2) like nested loops)\n * productRepeat([0, 1], 2) -> [[0, 0], [0, 1], [1, 0], [1, 1]]\n */\nexport function productRepeat<T>(iterable: Iterable<T>, repeat: number = 1): T[][] {\n const pool = [...iterable]\n if (repeat < 1 || pool.length === 0) return repeat === 0 ? [[]] : []\n\n const pools = Array.from({ length: repeat }, () => pool)\n return product(...pools)\n}\n\n/**\n * Return r-length combinations with replacement\n * combinationsWithReplacement([1, 2, 3], 2) -> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]\n */\nexport function combinationsWithReplacement<T>(iterable: Iterable<T>, r: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n if (r < 0 || n === 0) return r === 0 ? [[]] : []\n\n const result: T[][] = []\n const indices: number[] = new Array<number>(r).fill(0)\n result.push(indices.map((i) => pool[i] as T))\n\n for (;;) {\n let i = r - 1\n while (i >= 0 && indices[i] === n - 1) i--\n if (i < 0) break\n const newVal = (indices[i] as number) + 1\n for (let j = i; j < r; j++) {\n indices[j] = newVal\n }\n result.push(indices.map((idx) => pool[idx] as T))\n }\n\n return result\n}\n\n/**\n * Split an iterable into chunks of specified size.\n * @inspired Remeda, Lodash\n *\n * chunk([1, 2, 3, 4, 5], 2) -> [[1, 2], [3, 4], [5]]\n */\nexport function chunk<T>(iterable: Iterable<T>, size: number): T[][] {\n if (size < 1) {\n throw new Error(\"chunk size must be at least 1\")\n }\n const arr = [...iterable]\n const result: T[][] = []\n for (let i = 0; i < arr.length; i += size) {\n result.push(arr.slice(i, i + size))\n }\n return result\n}\n\n/**\n * Partition an iterable into two arrays based on a predicate.\n * @inspired Remeda, Lodash\n *\n * partition([1, 2, 3, 4], x => x % 2 === 0) -> [[2, 4], [1, 3]]\n */\nexport function partition<T>(iterable: Iterable<T>, predicate: (x: T) => boolean): [T[], T[]] {\n const truthy: T[] = []\n const falsy: T[] = []\n for (const item of iterable) {\n if (predicate(item)) {\n truthy.push(item)\n } else {\n falsy.push(item)\n }\n }\n return [truthy, falsy]\n}\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcO,SAAS,SAAY,WAA+B;AACzD,SAAO,UAAU,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1C;AAMO,SAAS,aAAgB,UAAuB,GAAkB;AACvE,QAAM,OAAO,CAAC,GAAG,QAAQ;AACzB,QAAM,IAAI,KAAK;AACf,MAAI,IAAI,KAAK,IAAI,EAAG,QAAO,CAAC;AAE5B,QAAM,SAAgB,CAAC;AACvB,QAAM,UAAoB,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAC/D,SAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,CAAC,CAAM,CAAC;AAE5C,aAAS;AACP,QAAI,IAAI,IAAI;AACZ,WAAO,KAAK,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAG;AAC3C,QAAI,IAAI,EAAG;AACV,IAAC,QAAQ,CAAC;AACX,aAAS,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAC9B,cAAQ,CAAC,IAAK,QAAQ,IAAI,CAAC,IAAe;AAAA,IAC5C;AACA,WAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAM,CAAC;AAAA,EAClD;AAEA,SAAO;AACT;AAMO,SAAS,aAAgB,UAAuB,GAAmB;AACxE,QAAM,OAAO,CAAC,GAAG,QAAQ;AACzB,QAAM,IAAI,KAAK;AACf,QAAM,OAAO,MAAM,SAAY,IAAI;AACnC,MAAI,OAAO,KAAK,OAAO,EAAG,QAAO,CAAC;AAElC,QAAM,SAAgB,CAAC;AACvB,QAAM,UAAoB,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAC/D,QAAM,SAAmB,MAAM,KAAK,EAAE,QAAQ,KAAK,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC;AAErE,SAAO,KAAK,QAAQ,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAM,CAAC;AAE3D,QAAO,YAAS;AACd,aAAS,IAAI,OAAO,GAAG,KAAK,GAAG,KAAK;AAClC;AAAC,MAAC,OAAO,CAAC;AACV,UAAI,OAAO,CAAC,MAAM,GAAG;AAEnB,cAAM,OAAO,QAAQ,CAAC;AACtB,iBAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC9B,kBAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;AAAA,QAC5B;AACA,gBAAQ,IAAI,CAAC,IAAI;AACjB,eAAO,CAAC,IAAI,IAAI;AAAA,MAClB,OAAO;AACL,cAAM,IAAI,IAAK,OAAO,CAAC;AACvB,cAAM,OAAO,QAAQ,CAAC;AACtB,gBAAQ,CAAC,IAAI,QAAQ,CAAC;AACtB,gBAAQ,CAAC,IAAI;AACb,eAAO,KAAK,QAAQ,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAM,CAAC;AAC/D,iBAAS;AAAA,MACX;AAAA,IACF;AACA;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,WAAc,WAAiC;AAC7D,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC,CAAC,CAAC;AAEtC,QAAM,QAAQ,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAG3C,MAAI,MAAM,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,EAAG,QAAO,CAAC;AAE/C,QAAM,SAAgB,CAAC;AACvB,QAAM,UAAoB,IAAI,MAAc,MAAM,MAAM,EAAE,KAAK,CAAC;AAChE,SAAO,KAAK,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAW,CAAM,CAAC;AAE7D,aAAS;AACP,QAAI,IAAI,MAAM,SAAS;AACvB,WAAO,KAAK,GAAG;AACb;AAAC,MAAC,QAAQ,CAAC;AACX,YAAM,cAAc,MAAM,CAAC;AAC3B,UAAK,QAAQ,CAAC,IAAe,YAAY,QAAQ;AAC/C,eAAO,KAAK,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAW,CAAM,CAAC;AAC7D;AAAA,MACF;AACA,cAAQ,CAAC,IAAI;AACb;AAAA,IACF;AACA,QAAI,IAAI,EAAG;AAAA,EACb;AAEA,SAAO;AACT;AAQO,UAAU,MAAS,UAAqC;AAC7D,QAAM,QAAa,CAAC;AACpB,aAAW,WAAW,UAAU;AAC9B,UAAM;AACN,UAAM,KAAK,OAAO;AAAA,EACpB;AACA,MAAI,MAAM,WAAW,EAAG;AACxB,aAAS;AACP,WAAO;AAAA,EACT;AACF;AASO,SAAS,OAAU,KAAQ,OAAoC;AACpE,MAAI,UAAU,QAAW;AAEvB,WAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,MAAM,GAAG;AAAA,EAChD;AAEA,UAAQ,aAAa;AACnB,eAAS;AACP,YAAM;AAAA,IACR;AAAA,EACF,GAAG;AACL;AAOO,SAAS,OACd,UACA,OACA,MACA,OAAe,GACV;AAEL,MAAI,cAAc;AAClB,MAAI,aAAa;AACjB,MAAI,eAAe,QAAW;AAC5B,iBAAa;AACb,kBAAc;AAAA,EAChB;AAEA,MAAI,OAAO,GAAG;AACZ,UAAM,IAAI,MAAM,mBAAmB;AAAA,EACrC;AAEA,QAAM,SAAc,CAAC;AACrB,MAAI,QAAQ;AACZ,MAAI,YAAY;AAEhB,aAAW,WAAW,UAAU;AAC9B,QAAI,SAAS,WAAY;AACzB,QAAI,UAAU,WAAW;AACvB,aAAO,KAAK,OAAO;AACnB,mBAAa;AAAA,IACf;AACA;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,UAAa,WAA8B,UAA4B;AACrF,QAAM,SAAc,CAAC;AACrB,aAAW,WAAW,UAAU;AAC9B,QAAI,UAAU,OAAO,GAAG;AACtB,aAAO,KAAK,OAAO;AAAA,IACrB,OAAO;AACL;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,UAAa,WAA8B,UAA4B;AACrF,QAAM,SAAc,CAAC;AACrB,MAAI,WAAW;AACf,aAAW,WAAW,UAAU;AAC9B,QAAI,YAAY,UAAU,OAAO,GAAG;AAClC;AAAA,IACF;AACA,eAAW;AACX,WAAO,KAAK,OAAO;AAAA,EACrB;AACA,SAAO;AACT;AAMO,SAAS,cACX,MACI;AACP,MAAI;AACJ,MAAI;AAGJ,QAAM,UAAU,KAAK,KAAK,SAAS,CAAC;AACpC,MACE,WACA,OAAO,YAAY,YACnB,CAAC,MAAM,QAAQ,OAAO,KACtB,EAAE,OAAO,YAAY,UACrB;AACA,gBAAa,QAA8B;AAC3C,gBAAY,KAAK,MAAM,GAAG,EAAE;AAAA,EAC9B,OAAO;AACL,gBAAY;AAAA,EACd;AAEA,MAAI,UAAU,WAAW,EAAG,QAAO,CAAC;AAEpC,QAAM,SAAS,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AAC5C,QAAM,SAAS,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACtD,QAAM,SAAgB,CAAC;AAEvB,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,UAAM,QAAa,CAAC;AACpB,eAAW,OAAO,QAAQ;AACxB,YAAM,KAAK,IAAI,IAAI,SAAU,IAAI,CAAC,IAAW,SAAe;AAAA,IAC9D;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO;AACT;AAMO,SAAS,SAAY,MAAmB,WAAmC;AAChF,QAAM,SAAc,CAAC;AACrB,QAAM,UAAU,CAAC,GAAG,IAAI;AACxB,QAAM,eAAe,CAAC,GAAG,SAAS;AAClC,QAAM,MAAM,KAAK,IAAI,QAAQ,QAAQ,aAAa,MAAM;AAExD,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,QAAI,aAAa,CAAC,GAAG;AACnB,aAAO,KAAK,QAAQ,CAAC,CAAM;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,YAAe,WAA8B,UAA4B;AACvF,QAAM,SAAc,CAAC;AACrB,aAAW,WAAW,UAAU;AAC9B,QAAI,CAAC,UAAU,OAAO,GAAG;AACvB,aAAO,KAAK,OAAO;AAAA,IACrB;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,WACd,UACA,MACA,SACK;AACL,QAAM,SAAc,CAAC;AACrB,QAAM,MAAM,CAAC,GAAG,QAAQ;AAExB,MAAI,IAAI,WAAW,GAAG;AACpB,QAAI,YAAY,QAAW;AACzB,aAAO,CAAC,OAAO;AAAA,IACjB;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,YAAY,SAAS,CAAC,GAAM,MAAc,IAAgB;AAEhE,MAAI;AACJ,MAAI;AAEJ,MAAI,YAAY,QAAW;AACzB,UAAM;AACN,eAAW;AACX,WAAO,KAAK,GAAG;AAAA,EACjB,OAAO;AACL,UAAM,IAAI,CAAC;AACX,eAAW;AACX,WAAO,KAAK,GAAG;AAAA,EACjB;AAEA,WAAS,IAAI,UAAU,IAAI,IAAI,QAAQ,KAAK;AAC1C,UAAM,UAAU,KAAK,IAAI,CAAC,CAAM;AAChC,WAAO,KAAK,GAAG;AAAA,EACjB;AAEA,SAAO;AACT;AAMO,SAAS,QAAkB,UAAuB,KAA+B;AACtF,QAAM,SAAqB,CAAC;AAC5B,QAAM,UAAU,QAAQ,CAAC,MAAS;AAElC,MAAI;AACJ,MAAI,eAAoB,CAAC;AACzB,MAAI,QAAQ;AAEZ,aAAW,WAAW,UAAU;AAC9B,UAAM,IAAI,QAAQ,OAAO;AACzB,QAAI,OAAO;AACT,mBAAa;AACb,qBAAe,CAAC,OAAO;AACvB,cAAQ;AAAA,IACV,WAAW,MAAM,YAAY;AAC3B,mBAAa,KAAK,OAAO;AAAA,IAC3B,OAAO;AACL,aAAO,KAAK,CAAC,YAAiB,YAAY,CAAC;AAC3C,mBAAa;AACb,qBAAe,CAAC,OAAO;AAAA,IACzB;AAAA,EACF;AAEA,MAAI,CAAC,OAAO;AACV,WAAO,KAAK,CAAC,YAAiB,YAAY,CAAC;AAAA,EAC7C;AAEA,SAAO;AACT;AAMO,UAAU,MAAM,QAAgB,GAAG,OAAe,GAAsB;AAC7E,MAAI,IAAI;AACR,aAAS;AACP,UAAM;AACN,SAAK;AAAA,EACP;AACF;AAMO,SAAS,IAAO,UAAuB,IAAY,GAAU;AAClE,QAAM,MAAM,CAAC,GAAG,QAAQ;AACxB,SAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;AACjD;AAMO,SAAS,SAAY,UAAiC;AAC3D,QAAM,MAAM,CAAC,GAAG,QAAQ;AACxB,QAAM,SAAmB,CAAC;AAC1B,WAAS,IAAI,GAAG,IAAI,IAAI,SAAS,GAAG,KAAK;AACvC,WAAO,KAAK,CAAC,IAAI,CAAC,GAAQ,IAAI,IAAI,CAAC,CAAM,CAAC;AAAA,EAC5C;AACA,SAAO;AACT;AAMO,SAAS,cAAiB,UAAuBA,UAAiB,GAAU;AACjF,QAAM,OAAO,CAAC,GAAG,QAAQ;AACzB,MAAIA,UAAS,KAAK,KAAK,WAAW,EAAG,QAAOA,YAAW,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAEnE,QAAM,QAAQ,MAAM,KAAK,EAAE,QAAQA,QAAO,GAAG,MAAM,IAAI;AACvD,SAAO,QAAQ,GAAG,KAAK;AACzB;AAMO,SAAS,4BAA+B,UAAuB,GAAkB;AACtF,QAAM,OAAO,CAAC,GAAG,QAAQ;AACzB,QAAM,IAAI,KAAK;AACf,MAAI,IAAI,KAAK,MAAM,EAAG,QAAO,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAE/C,QAAM,SAAgB,CAAC;AACvB,QAAM,UAAoB,IAAI,MAAc,CAAC,EAAE,KAAK,CAAC;AACrD,SAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,CAAC,CAAM,CAAC;AAE5C,aAAS;AACP,QAAI,IAAI,IAAI;AACZ,WAAO,KAAK,KAAK,QAAQ,CAAC,MAAM,IAAI,EAAG;AACvC,QAAI,IAAI,EAAG;AACX,UAAM,SAAU,QAAQ,CAAC,IAAe;AACxC,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAQ,CAAC,IAAI;AAAA,IACf;AACA,WAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAM,CAAC;AAAA,EAClD;AAEA,SAAO;AACT;AAQO,SAAS,MAAS,UAAuB,MAAqB;AACnE,MAAI,OAAO,GAAG;AACZ,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,QAAM,MAAM,CAAC,GAAG,QAAQ;AACxB,QAAM,SAAgB,CAAC;AACvB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,MAAM;AACzC,WAAO,KAAK,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC;AAAA,EACpC;AACA,SAAO;AACT;AAQO,SAAS,UAAa,UAAuB,WAA0C;AAC5F,QAAM,SAAc,CAAC;AACrB,QAAM,QAAa,CAAC;AACpB,aAAW,QAAQ,UAAU;AAC3B,QAAI,UAAU,IAAI,GAAG;AACnB,aAAO,KAAK,IAAI;AAAA,IAClB,OAAO;AACL,YAAM,KAAK,IAAI;AAAA,IACjB;AAAA,EACF;AACA,SAAO,CAAC,QAAQ,KAAK;AACvB;","names":["repeat"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/json.ts"],"sourcesContent":["/**\n * Python json module for TypeScript\n *\n * Provides JSON encoding and decoding functions matching Python's json module.\n * Maps directly to JavaScript's JSON object with Python-compatible options.\n *\n * @see {@link https://docs.python.org/3/library/json.html | Python json documentation}\n * @module\n */\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }\ntype JsonReplacer = (key: string, value: unknown) => unknown\ntype JsonReviver = (key: string, value: unknown) => unknown\n\ninterface DumpsOptions {\n /** If specified, use this many spaces for indentation */\n indent?: number\n /** Separators for items and key-value pairs [item_sep, key_sep] */\n separators?: [string, string]\n /** Sort dictionary keys */\n sortKeys?: boolean\n /** If false, non-ASCII characters are escaped. Default true */\n ensureAscii?: boolean\n /** Custom serialization function */\n default?: (obj: unknown) => JsonValue\n}\n\ninterface LoadsOptions {\n /** Custom deserialization function */\n objectHook?: (obj: Record<string, unknown>) => unknown\n /** Parse floats with this function */\n parseFloatFn?: (s: string) => number\n /** Parse integers with this function */\n parseIntFn?: (s: string) => number\n}\n\n/**\n * Serialize obj to a JSON formatted string.\n *\n * @param obj - The object to serialize\n * @param options - Serialization options\n * @returns JSON string\n */\nexport function dumps(obj: unknown, options?: DumpsOptions): string {\n const indent = options?.indent\n const sortKeys = options?.sortKeys ?? false\n const defaultFn = options?.default\n const ensureAscii = options?.ensureAscii ?? true\n\n const replacer: JsonReplacer | undefined = sortKeys\n ? (_key, value) => {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const sorted: Record<string, unknown> = {}\n for (const k of Object.keys(value as Record<string, unknown>).sort()) {\n sorted[k] = (value as Record<string, unknown>)[k]\n }\n return sorted\n }\n return value\n }\n : undefined\n\n let result: string\n\n try {\n if (defaultFn) {\n // Custom serialization with default function\n result = JSON.stringify(\n obj,\n (key, value: unknown) => {\n const processed: unknown = replacer ? replacer(key, value) : value\n try {\n // Try default serialization first\n JSON.stringify(processed)\n return processed as JsonValue\n } catch {\n // If it fails, use the default function\n return defaultFn(processed)\n }\n },\n indent\n )\n } else {\n result = JSON.stringify(obj, replacer, indent)\n }\n /* v8 ignore start -- error handling for invalid JSON @preserve */\n } catch (e) {\n const error = e as Error\n throw new Error(`Object of type ${typeof obj} is not JSON serializable: ${error.message}`)\n }\n /* v8 ignore stop */\n\n // Handle separators if specified\n if (options?.separators) {\n const [itemSep, keySep] = options.separators\n // This is a simplified implementation - full separator support would require custom serialization\n if (itemSep !== \", \" || keySep !== \": \") {\n result = result.replace(/,\\s*/g, itemSep).replace(/:\\s*/g, keySep)\n }\n }\n\n // Handle ensureAscii\n if (ensureAscii) {\n result = result.replace(/[\\u007f-\\uffff]/g, (char) => {\n return \"\\\\u\" + (\"0000\" + char.charCodeAt(0).toString(16)).slice(-4)\n })\n }\n\n return result\n}\n\n/**\n * Deserialize a JSON string to a Python object.\n *\n * @param s - JSON string to parse\n * @param options - Deserialization options\n * @returns Parsed object\n */\nexport function loads(s: string, options?: LoadsOptions): unknown {\n const objectHook = options?.objectHook\n const parseFloat = options?.parseFloatFn\n const parseInt = options?.parseIntFn\n\n let reviver: JsonReviver | undefined\n\n /* v8 ignore start -- advanced custom parser hooks @preserve */\n if (objectHook || parseFloat || parseInt) {\n reviver = (key, value) => {\n if (typeof value === \"number\") {\n const str = String(value)\n if (str.includes(\".\") || str.includes(\"e\") || str.includes(\"E\")) {\n return parseFloat ? parseFloat(str) : value\n }\n return parseInt ? parseInt(str) : value\n }\n if (objectHook && value && typeof value === \"object\" && !Array.isArray(value) && key === \"\") {\n return objectHook(value as Record<string, unknown>)\n }\n return value\n }\n }\n /* v8 ignore stop */\n\n try {\n return JSON.parse(s, reviver)\n } catch (e) {\n const error = e as Error\n throw new Error(`JSON decode error: ${error.message}`)\n }\n}\n\n/**\n * Serialize obj to a JSON formatted string and write to file.\n * Note: This is a no-op in browser environments.\n *\n * @param obj - The object to serialize\n * @param fp - File-like object with write method\n * @param options - Serialization options\n */\nexport function dump(\n obj: unknown,\n fp: { write: (s: string) => void },\n options?: DumpsOptions\n): void {\n const s = dumps(obj, options)\n fp.write(s)\n}\n\n/**\n * Deserialize a JSON string from file to a Python object.\n * Note: This is a no-op in browser environments.\n *\n * @param fp - File-like object with read method\n * @param options - Deserialization options\n * @returns Parsed object\n */\nexport function load(fp: { read: () => string }, options?: LoadsOptions): unknown {\n const s = fp.read()\n return loads(s, options)\n}\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CO,SAAS,MAAM,KAAc,SAAgC;AAClE,QAAM,SAAS,SAAS;AACxB,QAAM,WAAW,SAAS,YAAY;AACtC,QAAM,YAAY,SAAS;AAC3B,QAAM,cAAc,SAAS,eAAe;AAE5C,QAAM,WAAqC,WACvC,CAAC,MAAM,UAAU;AACf,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,YAAM,SAAkC,CAAC;AACzC,iBAAW,KAAK,OAAO,KAAK,KAAgC,EAAE,KAAK,GAAG;AACpE,eAAO,CAAC,IAAK,MAAkC,CAAC;AAAA,MAClD;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,IACA;AAEJ,MAAI;AAEJ,MAAI;AACF,QAAI,WAAW;AAEb,eAAS,KAAK;AAAA,QACZ;AAAA,QACA,CAAC,KAAK,UAAmB;AACvB,gBAAM,YAAqB,WAAW,SAAS,KAAK,KAAK,IAAI;AAC7D,cAAI;AAEF,iBAAK,UAAU,SAAS;AACxB,mBAAO;AAAA,UACT,QAAQ;AAEN,mBAAO,UAAU,SAAS;AAAA,UAC5B;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF,OAAO;AACL,eAAS,KAAK,UAAU,KAAK,UAAU,MAAM;AAAA,IAC/C;AAAA,EAEF,SAAS,GAAG;AACV,UAAM,QAAQ;AACd,UAAM,IAAI,MAAM,kBAAkB,OAAO,GAAG,8BAA8B,MAAM,OAAO,EAAE;AAAA,EAC3F;AAIA,MAAI,SAAS,YAAY;AACvB,UAAM,CAAC,SAAS,MAAM,IAAI,QAAQ;AAElC,QAAI,YAAY,QAAQ,WAAW,MAAM;AACvC,eAAS,OAAO,QAAQ,SAAS,OAAO,EAAE,QAAQ,SAAS,MAAM;AAAA,IACnE;AAAA,EACF;AAGA,MAAI,aAAa;AACf,aAAS,OAAO,QAAQ,oBAAoB,CAAC,SAAS;AACpD,aAAO,SAAS,SAAS,KAAK,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AAAA,IACpE,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AASO,SAAS,MAAM,GAAW,SAAiC;AAChE,QAAM,aAAa,SAAS;AAC5B,QAAM,aAAa,SAAS;AAC5B,QAAM,WAAW,SAAS;AAE1B,MAAI;AAGJ,MAAI,cAAc,cAAc,UAAU;AACxC,cAAU,CAAC,KAAK,UAAU;AACxB,UAAI,OAAO,UAAU,UAAU;AAC7B,cAAM,MAAM,OAAO,KAAK;AACxB,YAAI,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,GAAG;AAC/D,iBAAO,aAAa,WAAW,GAAG,IAAI;AAAA,QACxC;AACA,eAAO,WAAW,SAAS,GAAG,IAAI;AAAA,MACpC;AACA,UAAI,cAAc,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,KAAK,QAAQ,IAAI;AAC3F,eAAO,WAAW,KAAgC;AAAA,MACpD;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI;AACF,WAAO,KAAK,MAAM,GAAG,OAAO;AAAA,EAC9B,SAAS,GAAG;AACV,UAAM,QAAQ;AACd,UAAM,IAAI,MAAM,sBAAsB,MAAM,OAAO,EAAE;AAAA,EACvD;AACF;AAUO,SAAS,KACd,KACA,IACA,SACM;AACN,QAAM,IAAI,MAAM,KAAK,OAAO;AAC5B,KAAG,MAAM,CAAC;AACZ;AAUO,SAAS,KAAK,IAA4B,SAAiC;AAChF,QAAM,IAAI,GAAG,KAAK;AAClB,SAAO,MAAM,GAAG,OAAO;AACzB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/datetime.ts"],"sourcesContent":["/**\n * Python datetime module for TypeScript\n *\n * Provides date and time handling matching Python's datetime module,\n * including date, time, datetime, and timedelta classes.\n *\n * @see {@link https://docs.python.org/3/library/datetime.html | Python datetime documentation}\n * @module\n */\n\n// ============================================================================\n// timedelta class\n// ============================================================================\n\nexport class timedelta {\n readonly days: number\n readonly seconds: number\n readonly microseconds: number\n\n constructor(options?: {\n days?: number\n seconds?: number\n microseconds?: number\n milliseconds?: number\n minutes?: number\n hours?: number\n weeks?: number\n }) {\n let totalMicroseconds = 0\n\n if (options) {\n totalMicroseconds += (options.weeks ?? 0) * 7 * 24 * 60 * 60 * 1000000\n totalMicroseconds += (options.days ?? 0) * 24 * 60 * 60 * 1000000\n totalMicroseconds += (options.hours ?? 0) * 60 * 60 * 1000000\n totalMicroseconds += (options.minutes ?? 0) * 60 * 1000000\n totalMicroseconds += (options.seconds ?? 0) * 1000000\n totalMicroseconds += (options.milliseconds ?? 0) * 1000\n totalMicroseconds += options.microseconds ?? 0\n }\n\n // Normalize to days, seconds, microseconds\n const sign = totalMicroseconds < 0 ? -1 : 1\n totalMicroseconds = Math.abs(totalMicroseconds)\n\n this.microseconds = sign * (totalMicroseconds % 1000000)\n totalMicroseconds = Math.floor(totalMicroseconds / 1000000)\n\n this.seconds = sign * (totalMicroseconds % (24 * 60 * 60))\n this.days = sign * Math.floor(totalMicroseconds / (24 * 60 * 60))\n\n // Normalize negative values\n if (this.microseconds < 0) {\n ;(this as { microseconds: number }).microseconds += 1000000\n ;(this as { seconds: number }).seconds -= 1\n }\n if (this.seconds < 0) {\n ;(this as { seconds: number }).seconds += 24 * 60 * 60\n ;(this as { days: number }).days -= 1\n }\n }\n\n totalSeconds(): number {\n return this.days * 24 * 60 * 60 + this.seconds + this.microseconds / 1000000\n }\n\n toString(): string {\n const parts: string[] = []\n if (this.days !== 0) {\n parts.push(`${String(this.days)} day${Math.abs(this.days) !== 1 ? \"s\" : \"\"}`)\n }\n const hours = Math.floor(this.seconds / 3600)\n const minutes = Math.floor((this.seconds % 3600) / 60)\n const secs = this.seconds % 60\n const timeStr = `${String(hours)}:${String(minutes).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`\n if (this.microseconds > 0) {\n parts.push(`${timeStr}.${String(this.microseconds).padStart(6, \"0\")}`)\n } else {\n parts.push(timeStr)\n }\n return parts.join(\", \")\n }\n\n add(other: timedelta): timedelta {\n return new timedelta({\n days: this.days + other.days,\n seconds: this.seconds + other.seconds,\n microseconds: this.microseconds + other.microseconds\n })\n }\n\n subtract(other: timedelta): timedelta {\n return new timedelta({\n days: this.days - other.days,\n seconds: this.seconds - other.seconds,\n microseconds: this.microseconds - other.microseconds\n })\n }\n\n multiply(n: number): timedelta {\n return new timedelta({\n microseconds: Math.round(this.totalSeconds() * 1000000 * n)\n })\n }\n\n static min = new timedelta({ days: -999999999 })\n static max = new timedelta({\n days: 999999999,\n hours: 23,\n minutes: 59,\n seconds: 59,\n microseconds: 999999\n })\n static resolution = new timedelta({ microseconds: 1 })\n}\n\n// ============================================================================\n// date class\n// ============================================================================\n\nexport class date {\n readonly year: number\n readonly month: number\n readonly day: number\n\n constructor(year: number, month: number, day: number) {\n if (month < 1 || month > 12) {\n throw new Error(\"month must be in 1..12\")\n }\n const maxDay = new Date(year, month, 0).getDate()\n if (day < 1 || day > maxDay) {\n throw new Error(`day is out of range for month`)\n }\n this.year = year\n this.month = month\n this.day = day\n }\n\n static today(): date {\n const now = new Date()\n return new date(now.getFullYear(), now.getMonth() + 1, now.getDate())\n }\n\n static fromTimestamp(timestamp: number): date {\n const d = new Date(timestamp * 1000)\n return new date(d.getFullYear(), d.getMonth() + 1, d.getDate())\n }\n\n static fromIsoFormat(dateString: string): date {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(dateString)\n if (!match || !match[1] || !match[2] || !match[3]) {\n throw new Error(`Invalid isoFormat string: '${dateString}'`)\n }\n return new date(parseInt(match[1]), parseInt(match[2]), parseInt(match[3]))\n }\n\n static fromOrdinal(ordinal: number): date {\n // Days since year 1\n const d = new Date(Date.UTC(1, 0, ordinal))\n return new date(d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate())\n }\n\n replace(options?: { year?: number; month?: number; day?: number }): date {\n return new date(\n options?.year ?? this.year,\n options?.month ?? this.month,\n options?.day ?? this.day\n )\n }\n\n toOrdinal(): number {\n const d = new Date(Date.UTC(this.year, this.month - 1, this.day))\n const epoch = new Date(Date.UTC(1, 0, 1))\n return Math.floor((d.getTime() - epoch.getTime()) / (24 * 60 * 60 * 1000)) + 1\n }\n\n weekday(): number {\n // Monday is 0, Sunday is 6\n const d = new Date(this.year, this.month - 1, this.day)\n return (d.getDay() + 6) % 7\n }\n\n isoWeekday(): number {\n // Monday is 1, Sunday is 7\n return this.weekday() + 1\n }\n\n isoCalendar(): [number, number, number] {\n const d = new Date(this.year, this.month - 1, this.day)\n const dayOfYear = Math.floor(\n (d.getTime() - new Date(this.year, 0, 0).getTime()) / (24 * 60 * 60 * 1000)\n )\n const jan1 = new Date(this.year, 0, 1)\n const jan1Weekday = (jan1.getDay() + 6) % 7 // Monday = 0\n\n let week = Math.floor((dayOfYear + jan1Weekday - 1) / 7)\n let year = this.year\n\n if (week < 1) {\n year -= 1\n week = 52\n } else if (week > 52) {\n const dec31 = new Date(this.year, 11, 31)\n const dec31Weekday = (dec31.getDay() + 6) % 7\n if (dec31Weekday < 3) {\n week = 1\n year += 1\n }\n }\n\n return [year, week, this.isoWeekday()]\n }\n\n isoFormat(): string {\n return `${String(this.year)}-${String(this.month).padStart(2, \"0\")}-${String(this.day).padStart(2, \"0\")}`\n }\n\n strftime(format: string): string {\n return strftime(format, new datetime(this.year, this.month, this.day, 0, 0, 0, 0))\n }\n\n toString(): string {\n return this.isoFormat()\n }\n\n __add__(delta: timedelta): date {\n const d = new Date(this.year, this.month - 1, this.day + delta.days)\n return new date(d.getFullYear(), d.getMonth() + 1, d.getDate())\n }\n\n __sub__(other: date | timedelta): date | timedelta {\n if (other instanceof timedelta) {\n const d = new Date(this.year, this.month - 1, this.day - other.days)\n return new date(d.getFullYear(), d.getMonth() + 1, d.getDate())\n }\n // other is a date\n const d1 = new Date(this.year, this.month - 1, this.day)\n const d2 = new Date(other.year, other.month - 1, other.day)\n const diffMs = d1.getTime() - d2.getTime()\n return new timedelta({ days: Math.floor(diffMs / (24 * 60 * 60 * 1000)) })\n }\n\n __lt__(other: date): boolean {\n return this.toOrdinal() < other.toOrdinal()\n }\n\n __le__(other: date): boolean {\n return this.toOrdinal() <= other.toOrdinal()\n }\n\n __gt__(other: date): boolean {\n return this.toOrdinal() > other.toOrdinal()\n }\n\n __ge__(other: date): boolean {\n return this.toOrdinal() >= other.toOrdinal()\n }\n\n __eq__(other: date): boolean {\n return this.toOrdinal() === other.toOrdinal()\n }\n\n static min = new date(1, 1, 1)\n static max = new date(9999, 12, 31)\n static resolution = new timedelta({ days: 1 })\n}\n\n// ============================================================================\n// time class\n// ============================================================================\n\nexport class time {\n readonly hour: number\n readonly minute: number\n readonly second: number\n readonly microsecond: number\n readonly tzinfo: null\n\n constructor(hour: number = 0, minute: number = 0, second: number = 0, microsecond: number = 0) {\n if (hour < 0 || hour > 23) throw new Error(\"hour must be in 0..23\")\n if (minute < 0 || minute > 59) throw new Error(\"minute must be in 0..59\")\n if (second < 0 || second > 59) throw new Error(\"second must be in 0..59\")\n if (microsecond < 0 || microsecond > 999999) throw new Error(\"microsecond must be in 0..999999\")\n\n this.hour = hour\n this.minute = minute\n this.second = second\n this.microsecond = microsecond\n this.tzinfo = null\n }\n\n static fromIsoFormat(timeString: string): time {\n const match = /^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?$/.exec(timeString)\n if (!match || !match[1] || !match[2] || !match[3]) {\n throw new Error(`Invalid isoFormat string: '${timeString}'`)\n }\n const microsecond = match[4] ? parseInt(match[4].padEnd(6, \"0\").slice(0, 6)) : 0\n return new time(parseInt(match[1]), parseInt(match[2]), parseInt(match[3]), microsecond)\n }\n\n replace(options?: {\n hour?: number\n minute?: number\n second?: number\n microsecond?: number\n }): time {\n return new time(\n options?.hour ?? this.hour,\n options?.minute ?? this.minute,\n options?.second ?? this.second,\n options?.microsecond ?? this.microsecond\n )\n }\n\n isoFormat(\n timespec: \"auto\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\" | \"microseconds\" = \"auto\"\n ): string {\n const hh = String(this.hour).padStart(2, \"0\")\n const mm = String(this.minute).padStart(2, \"0\")\n const ss = String(this.second).padStart(2, \"0\")\n\n switch (timespec) {\n case \"hours\":\n return hh\n case \"minutes\":\n return `${hh}:${mm}`\n case \"seconds\":\n return `${hh}:${mm}:${ss}`\n case \"milliseconds\":\n return `${hh}:${mm}:${ss}.${String(Math.floor(this.microsecond / 1000)).padStart(3, \"0\")}`\n case \"microseconds\":\n return `${hh}:${mm}:${ss}.${String(this.microsecond).padStart(6, \"0\")}`\n case \"auto\":\n default:\n if (this.microsecond > 0) {\n return `${hh}:${mm}:${ss}.${String(this.microsecond).padStart(6, \"0\")}`\n }\n return `${hh}:${mm}:${ss}`\n }\n }\n\n strftime(format: string): string {\n return strftime(\n format,\n new datetime(1900, 1, 1, this.hour, this.minute, this.second, this.microsecond)\n )\n }\n\n toString(): string {\n return this.isoFormat()\n }\n\n static min = new time(0, 0, 0, 0)\n static max = new time(23, 59, 59, 999999)\n static resolution = new timedelta({ microseconds: 1 })\n}\n\n// ============================================================================\n// datetime class\n// ============================================================================\n\nexport class datetime extends date {\n readonly hour: number\n readonly minute: number\n readonly second: number\n readonly microsecond: number\n readonly tzinfo: null\n\n constructor(\n year: number,\n month: number,\n day: number,\n hour: number = 0,\n minute: number = 0,\n second: number = 0,\n microsecond: number = 0\n ) {\n super(year, month, day)\n if (hour < 0 || hour > 23) throw new Error(\"hour must be in 0..23\")\n if (minute < 0 || minute > 59) throw new Error(\"minute must be in 0..59\")\n if (second < 0 || second > 59) throw new Error(\"second must be in 0..59\")\n if (microsecond < 0 || microsecond > 999999) throw new Error(\"microsecond must be in 0..999999\")\n\n this.hour = hour\n this.minute = minute\n this.second = second\n this.microsecond = microsecond\n this.tzinfo = null\n }\n\n static override today(): datetime {\n return datetime.now()\n }\n\n static now(): datetime {\n const d = new Date()\n return new datetime(\n d.getFullYear(),\n d.getMonth() + 1,\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds(),\n d.getMilliseconds() * 1000\n )\n }\n\n static utcNow(): datetime {\n const d = new Date()\n return new datetime(\n d.getUTCFullYear(),\n d.getUTCMonth() + 1,\n d.getUTCDate(),\n d.getUTCHours(),\n d.getUTCMinutes(),\n d.getUTCSeconds(),\n d.getUTCMilliseconds() * 1000\n )\n }\n\n static override fromTimestamp(timestamp: number): datetime {\n const d = new Date(timestamp * 1000)\n return new datetime(\n d.getFullYear(),\n d.getMonth() + 1,\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds(),\n d.getMilliseconds() * 1000\n )\n }\n\n static utcfromTimestamp(timestamp: number): datetime {\n const d = new Date(timestamp * 1000)\n return new datetime(\n d.getUTCFullYear(),\n d.getUTCMonth() + 1,\n d.getUTCDate(),\n d.getUTCHours(),\n d.getUTCMinutes(),\n d.getUTCSeconds(),\n d.getUTCMilliseconds() * 1000\n )\n }\n\n static override fromIsoFormat(s: string): datetime {\n // Parse ISO format: YYYY-MM-DD[T]HH:MM:SS[.ffffff]\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})[T ](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?$/.exec(s)\n if (!match || !match[1] || !match[2] || !match[3] || !match[4] || !match[5] || !match[6]) {\n // Try date-only format\n const dateMatch = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(s)\n if (dateMatch && dateMatch[1] && dateMatch[2] && dateMatch[3]) {\n return new datetime(parseInt(dateMatch[1]), parseInt(dateMatch[2]), parseInt(dateMatch[3]))\n }\n throw new Error(`Invalid isoFormat string: '${s}'`)\n }\n const microsecond = match[7] ? parseInt(match[7].padEnd(6, \"0\").slice(0, 6)) : 0\n return new datetime(\n parseInt(match[1]),\n parseInt(match[2]),\n parseInt(match[3]),\n parseInt(match[4]),\n parseInt(match[5]),\n parseInt(match[6]),\n microsecond\n )\n }\n\n static combine(d: date, t: time): datetime {\n return new datetime(d.year, d.month, d.day, t.hour, t.minute, t.second, t.microsecond)\n }\n\n static strptime(dateString: string, format: string): datetime {\n return strptime(dateString, format)\n }\n\n override replace(options?: {\n year?: number\n month?: number\n day?: number\n hour?: number\n minute?: number\n second?: number\n microsecond?: number\n }): datetime {\n return new datetime(\n options?.year ?? this.year,\n options?.month ?? this.month,\n options?.day ?? this.day,\n options?.hour ?? this.hour,\n options?.minute ?? this.minute,\n options?.second ?? this.second,\n options?.microsecond ?? this.microsecond\n )\n }\n\n date(): date {\n return new date(this.year, this.month, this.day)\n }\n\n time(): time {\n return new time(this.hour, this.minute, this.second, this.microsecond)\n }\n\n timestamp(): number {\n const d = new Date(\n this.year,\n this.month - 1,\n this.day,\n this.hour,\n this.minute,\n this.second,\n this.microsecond / 1000\n )\n return d.getTime() / 1000\n }\n\n override isoFormat(\n sep: string = \"T\",\n timespec: \"auto\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\" | \"microseconds\" = \"auto\"\n ): string {\n const dateStr = super.isoFormat()\n const t = new time(this.hour, this.minute, this.second, this.microsecond)\n return `${dateStr}${sep}${t.isoFormat(timespec)}`\n }\n\n ctime(): string {\n const days = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\n const months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ]\n const dayName = days[this.weekday()] ?? \"???\"\n const monthName = months[this.month - 1] ?? \"???\"\n return `${dayName} ${monthName} ${String(this.day).padStart(2, \" \")} ${String(this.hour).padStart(2, \"0\")}:${String(this.minute).padStart(2, \"0\")}:${String(this.second).padStart(2, \"0\")} ${String(this.year)}`\n }\n\n override strftime(format: string): string {\n return strftime(format, this)\n }\n\n override toString(): string {\n return this.isoFormat(\" \")\n }\n\n override __add__(delta: timedelta): datetime {\n const totalMicroseconds =\n this.timestamp() * 1000000 + this.microsecond + delta.totalSeconds() * 1000000\n return datetime.fromTimestamp(totalMicroseconds / 1000000)\n }\n\n override __sub__(other: datetime | date | timedelta): datetime | timedelta {\n if (other instanceof timedelta) {\n const totalMicroseconds =\n this.timestamp() * 1000000 + this.microsecond - other.totalSeconds() * 1000000\n return datetime.fromTimestamp(totalMicroseconds / 1000000)\n }\n if (other instanceof datetime) {\n const diff = this.timestamp() - other.timestamp()\n const microDiff = this.microsecond - other.microsecond\n return new timedelta({ seconds: diff, microseconds: microDiff })\n }\n // other is a date\n const d1 = new Date(this.year, this.month - 1, this.day)\n const d2 = new Date(other.year, other.month - 1, other.day)\n const diffMs = d1.getTime() - d2.getTime()\n return new timedelta({ days: Math.floor(diffMs / (24 * 60 * 60 * 1000)) })\n }\n\n static override min = new datetime(1, 1, 1, 0, 0, 0, 0)\n static override max = new datetime(9999, 12, 31, 23, 59, 59, 999999)\n static override resolution = new timedelta({ microseconds: 1 })\n}\n\n// ============================================================================\n// strftime and strptime\n// ============================================================================\n\nconst WEEKDAY_NAMES = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"]\nconst WEEKDAY_ABBR = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\nconst MONTH_NAMES = [\n \"\",\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n]\nconst MONTH_ABBR = [\n \"\",\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n]\n\nexport function strftime(format: string, dt: datetime): string {\n const pad = (n: number, width: number = 2) => String(n).padStart(width, \"0\")\n\n return format.replace(/%([aAbBcdHIjmMpSUwWxXyYzZ%])/g, (_, code: string) => {\n switch (code) {\n case \"a\":\n return WEEKDAY_ABBR[dt.weekday()] ?? \"\"\n case \"A\":\n return WEEKDAY_NAMES[dt.weekday()] ?? \"\"\n case \"b\":\n return MONTH_ABBR[dt.month] ?? \"\"\n case \"B\":\n return MONTH_NAMES[dt.month] ?? \"\"\n case \"c\":\n return dt.ctime()\n case \"d\":\n return pad(dt.day)\n case \"H\":\n return pad(dt.hour)\n case \"I\":\n return pad(dt.hour % 12 || 12)\n case \"j\": {\n const start = new Date(dt.year, 0, 0)\n const diff = new Date(dt.year, dt.month - 1, dt.day).getTime() - start.getTime()\n const dayOfYear = Math.floor(diff / (24 * 60 * 60 * 1000))\n return pad(dayOfYear, 3)\n }\n case \"m\":\n return pad(dt.month)\n case \"M\":\n return pad(dt.minute)\n case \"p\":\n return dt.hour < 12 ? \"AM\" : \"PM\"\n case \"S\":\n return pad(dt.second)\n case \"U\": {\n // Week number (Sunday as first day)\n const start = new Date(dt.year, 0, 1)\n const diff = new Date(dt.year, dt.month - 1, dt.day).getTime() - start.getTime()\n const dayOfYear = Math.floor(diff / (24 * 60 * 60 * 1000))\n const firstSunday = (7 - start.getDay()) % 7\n return pad(Math.floor((dayOfYear - firstSunday + 7) / 7))\n }\n case \"w\":\n return String((dt.weekday() + 1) % 7)\n case \"W\": {\n // Week number (Monday as first day)\n const start = new Date(dt.year, 0, 1)\n const diff = new Date(dt.year, dt.month - 1, dt.day).getTime() - start.getTime()\n const dayOfYear = Math.floor(diff / (24 * 60 * 60 * 1000))\n const firstMonday = (8 - start.getDay()) % 7\n return pad(Math.floor((dayOfYear - firstMonday + 7) / 7))\n }\n case \"x\":\n return `${pad(dt.month)}/${pad(dt.day)}/${pad(dt.year % 100)}`\n case \"X\":\n return `${pad(dt.hour)}:${pad(dt.minute)}:${pad(dt.second)}`\n case \"y\":\n return pad(dt.year % 100)\n case \"Y\":\n return String(dt.year)\n case \"z\":\n return \"\" // No timezone info\n case \"Z\":\n return \"\" // No timezone name\n case \"%\":\n return \"%\"\n default:\n return `%${code}`\n }\n })\n}\n\nexport function strptime(dateString: string, format: string): datetime {\n let year = 1900,\n month = 1,\n day = 1,\n hour = 0,\n minute = 0,\n second = 0,\n microsecond = 0\n\n // Build regex from format\n let pos = 0\n let formatPos = 0\n\n while (formatPos < format.length) {\n if (format[formatPos] === \"%\") {\n formatPos++\n const code = format[formatPos]\n formatPos++\n\n switch (code) {\n case \"Y\": {\n const match = /^\\d{4}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid year\")\n year = parseInt(match[0])\n pos += 4\n break\n }\n case \"y\": {\n const match = /^\\d{2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid year\")\n const y = parseInt(match[0])\n year = y >= 69 ? 1900 + y : 2000 + y\n pos += 2\n break\n }\n case \"m\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid month\")\n month = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"d\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid day\")\n day = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"H\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid hour\")\n hour = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"M\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid minute\")\n minute = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"S\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid second\")\n second = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"f\": {\n const match = /^\\d{1,6}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid microsecond\")\n microsecond = parseInt(match[0].padEnd(6, \"0\"))\n pos += match[0].length\n break\n }\n case \"b\":\n case \"B\": {\n const names = code === \"b\" ? MONTH_ABBR : MONTH_NAMES\n let found = false\n for (let i = 1; i <= 12; i++) {\n const name = names[i]\n if (name && dateString.slice(pos).toLowerCase().startsWith(name.toLowerCase())) {\n month = i\n pos += name.length\n found = true\n break\n }\n }\n if (!found) throw new Error(\"Invalid month name\")\n break\n }\n /* v8 ignore start -- rare edge cases @preserve */\n case \"%\":\n if (dateString[pos] !== \"%\") throw new Error(\"Expected %\")\n pos++\n break\n default:\n // Skip unknown codes\n break\n /* v8 ignore stop */\n }\n } else {\n // Literal character\n const expectedChar = format[formatPos] ?? \"\"\n if (dateString[pos] !== expectedChar) {\n throw new Error(`Expected '${expectedChar}' at position ${String(pos)}`)\n }\n pos++\n formatPos++\n }\n }\n\n return new datetime(year, month, day, hour, minute, second, microsecond)\n}\n\n// ============================================================================\n// Module-level constants\n// ============================================================================\n\nexport const MINYEAR = 1\nexport const MAXYEAR = 9999\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/functools.ts"],"sourcesContent":["/**\n * Python functools module for TypeScript\n *\n * Provides higher-order functions and operations on callable objects,\n * including partial application, function caching (lru_cache), and reduce.\n *\n * @see {@link https://docs.python.org/3/library/functools.html | Python functools documentation}\n * @module\n */\n\n/**\n * Create a partial function application\n * partial(func, arg1, arg2) returns a function that calls func with arg1, arg2 prepended\n *\n * Example:\n * const add = (a: number, b: number) => a + b\n * const add5 = partial(add, 5)\n * add5(3) // returns 8\n */\nexport function partial<T extends (...args: unknown[]) => unknown>(\n func: T,\n ...partialArgs: unknown[]\n): (...args: unknown[]) => ReturnType<T> {\n return (...args: unknown[]): ReturnType<T> => {\n return func(...partialArgs, ...args) as ReturnType<T>\n }\n}\n\n/**\n * Apply a function of two arguments cumulatively to the items of an iterable\n * reduce((x, y) => x + y, [1, 2, 3, 4, 5]) returns 15\n * reduce((x, y) => x + y, [1, 2, 3, 4, 5], 10) returns 25\n */\nexport function reduce<T, U = T>(\n func: (acc: U, val: T) => U,\n iterable: Iterable<T>,\n initializer?: U\n): U {\n const arr = [...iterable]\n\n if (arr.length === 0) {\n if (initializer === undefined) {\n throw new TypeError(\"reduce() of empty sequence with no initial value\")\n }\n return initializer\n }\n\n let acc: U\n let startIdx: number\n\n if (initializer !== undefined) {\n acc = initializer\n startIdx = 0\n } else {\n acc = arr[0] as unknown as U\n startIdx = 1\n }\n\n for (let i = startIdx; i < arr.length; i++) {\n acc = func(acc, arr[i] as T)\n }\n\n return acc\n}\n\n/**\n * Simple LRU cache decorator (returns a memoized version of the function)\n * Note: This is a simplified implementation that caches based on JSON-stringified arguments\n *\n * Example:\n * const fib = lruCache((n: number): number => n <= 1 ? n : fib(n - 1) + fib(n - 2))\n */\nexport function lruCache<T extends (...args: unknown[]) => unknown>(\n func: T,\n maxsize: number = 128\n): T & {\n cacheInfo: () => { hits: number; misses: number; maxsize: number; currsize: number }\n cacheClear: () => void\n} {\n const cache = new Map<string, ReturnType<T>>()\n const order: string[] = []\n let hits = 0\n let misses = 0\n\n const cached = ((...args: unknown[]): ReturnType<T> => {\n const key = JSON.stringify(args)\n\n if (cache.has(key)) {\n hits++\n // Move to end (most recently used)\n const idx = order.indexOf(key)\n if (idx > -1) {\n order.splice(idx, 1)\n order.push(key)\n }\n return cache.get(key) as ReturnType<T>\n }\n\n misses++\n const result = func(...args) as ReturnType<T>\n\n // Evict oldest if at max size\n if (maxsize > 0 && cache.size >= maxsize) {\n const oldest = order.shift()\n if (oldest !== undefined) {\n cache.delete(oldest)\n }\n }\n\n cache.set(key, result)\n order.push(key)\n\n return result\n }) as T & {\n cacheInfo: () => { hits: number; misses: number; maxsize: number; currsize: number }\n cacheClear: () => void\n }\n\n cached.cacheInfo = () => ({\n hits,\n misses,\n maxsize,\n currsize: cache.size\n })\n\n cached.cacheClear = () => {\n cache.clear()\n order.length = 0\n hits = 0\n misses = 0\n }\n\n return cached\n}\n\n/**\n * Cache decorator that caches all calls (no size limit)\n * Equivalent to lru_cache(maxsize=None)\n */\nexport function cache<T extends (...args: unknown[]) => unknown>(func: T): T {\n const cacheMap = new Map<string, ReturnType<T>>()\n\n return ((...args: unknown[]): ReturnType<T> => {\n const key = JSON.stringify(args)\n if (cacheMap.has(key)) {\n return cacheMap.get(key) as ReturnType<T>\n }\n const result = func(...args) as ReturnType<T>\n cacheMap.set(key, result)\n return result\n }) as T\n}\n\n/**\n * Return a new partial object which behaves like func called with keyword arguments\n * In TypeScript, we simulate this with an options object as the last argument\n */\nexport function partialMethod<T extends (...args: unknown[]) => unknown>(\n func: T,\n ...partialArgs: unknown[]\n): (...args: unknown[]) => ReturnType<T> {\n return partial(func, ...partialArgs)\n}\n\n/**\n * Transform a function into a single-dispatch generic function\n * This is a simplified version - full singleDispatch would require runtime type checking\n */\nexport function singleDispatch<T extends (...args: unknown[]) => unknown>(\n func: T\n): T & { register: (type: string, impl: T) => void } {\n const registry = new Map<string, T>()\n registry.set(\"object\", func)\n\n const dispatcher = ((...args: unknown[]): ReturnType<T> => {\n if (args.length === 0) {\n return func(...args) as ReturnType<T>\n }\n\n const firstArg = args[0]\n let typeName: string\n\n if (firstArg === null) {\n typeName = \"null\"\n } else if (Array.isArray(firstArg)) {\n typeName = \"array\"\n } else {\n typeName = typeof firstArg\n }\n\n const impl = registry.get(typeName) ?? func\n return impl(...args) as ReturnType<T>\n }) as T & { register: (type: string, impl: T) => void }\n\n dispatcher.register = (type: string, impl: T) => {\n registry.set(type, impl)\n }\n\n return dispatcher\n}\n\n/**\n * Decorator to update a wrapper function to look like the wrapped function\n * In TypeScript, this just returns the wrapper as-is (metadata is handled differently)\n */\nexport function wraps<T extends (...args: unknown[]) => unknown>(\n wrapped: T\n): (wrapper: (...args: unknown[]) => unknown) => T {\n return (wrapper: (...args: unknown[]) => unknown): T => {\n // Copy function name if possible\n Object.defineProperty(wrapper, \"name\", { value: wrapped.name, writable: false })\n return wrapper as T\n }\n}\n\n/**\n * Return a callable object that fetches attr from its operand\n * attrGetter('name') returns a function that gets the 'name' attribute\n */\nexport function attrGetter<T>(...attrs: string[]): (obj: unknown) => T | T[] {\n if (attrs.length === 1) {\n const attr = attrs[0] as string\n const parts = attr.split(\".\")\n return (obj: unknown): T => {\n let result: unknown = obj\n for (const part of parts) {\n result = (result as Record<string, unknown>)[part]\n }\n return result as T\n }\n }\n\n return (obj: unknown): T[] => {\n return attrs.map((attr) => {\n const parts = attr.split(\".\")\n let result: unknown = obj\n for (const part of parts) {\n result = (result as Record<string, unknown>)[part]\n }\n return result as T\n })\n }\n}\n\n/**\n * Return a callable object that fetches item from its operand\n * itemGetter(1) returns a function that gets index 1\n * itemGetter('key') returns a function that gets the 'key' property\n */\nexport function itemGetter<T>(...items: (string | number)[]): (obj: unknown) => T | T[] {\n if (items.length === 1) {\n const item = items[0] as string | number\n return (obj: unknown): T => {\n if (Array.isArray(obj) && typeof item === \"number\") {\n return obj[item] as T\n }\n return (obj as Record<string | number, T>)[item] as T\n }\n }\n\n return (obj: unknown): T[] => {\n return items.map((item): T => {\n if (Array.isArray(obj) && typeof item === \"number\") {\n return obj[item] as T\n }\n return (obj as Record<string | number, T>)[item] as T\n })\n }\n}\n\n/**\n * Return a callable object that calls the method name on its operand\n * methodCaller('split', ' ') returns a function that calls .split(' ')\n */\nexport function methodCaller(name: string, ...args: unknown[]): (obj: unknown) => unknown {\n return (obj: unknown): unknown => {\n const method = (obj as Record<string, (...a: unknown[]) => unknown>)[name]\n if (typeof method !== \"function\") {\n throw new TypeError(`'${typeof obj}' object has no method '${name}'`)\n }\n return method.apply(obj, args)\n }\n}\n\n/**\n * Return the same object passed in (identity function)\n */\nexport function identity<T>(x: T): T {\n return x\n}\n\n/**\n * Compare two objects for ordering (returns -1, 0, or 1)\n * Used for sorting with a key function\n */\nexport function cmpToKey<T>(\n mycmp: (a: T, b: T) => number\n): (x: T) => { value: T; __lt__: (other: { value: T }) => boolean } {\n return (x: T) => ({\n value: x,\n __lt__(other: { value: T }): boolean {\n return mycmp(x, other.value) < 0\n }\n })\n}\n\n/**\n * Return total ordering for a class that has __lt__, __le__, __gt__, or __ge__\n * This is typically used as a class decorator in Python\n * In TypeScript, we provide helper comparisons\n */\n/* v8 ignore start -- complex utility rarely used directly @preserve */\nexport function totalOrdering<\n T extends {\n __lt__?: (other: T) => boolean\n __le__?: (other: T) => boolean\n __gt__?: (other: T) => boolean\n __ge__?: (other: T) => boolean\n __eq__?: (other: T) => boolean\n }\n>(\n obj: T\n): T & {\n __lt__: (other: T) => boolean\n __le__: (other: T) => boolean\n __gt__: (other: T) => boolean\n __ge__: (other: T) => boolean\n} {\n const lt = obj.__lt__?.bind(obj)\n const le = obj.__le__?.bind(obj)\n const gt = obj.__gt__?.bind(obj)\n const ge = obj.__ge__?.bind(obj)\n const eq = obj.__eq__?.bind(obj) ?? ((other: T) => obj === other)\n\n const result = obj as T & {\n __lt__: (other: T) => boolean\n __le__: (other: T) => boolean\n __gt__: (other: T) => boolean\n __ge__: (other: T) => boolean\n }\n\n if (lt) {\n result.__lt__ = lt\n result.__le__ = (other: T) => lt(other) || eq(other)\n result.__gt__ = (other: T) => !lt(other) && !eq(other)\n result.__ge__ = (other: T) => !lt(other)\n } else if (le) {\n result.__le__ = le\n result.__lt__ = (other: T) => le(other) && !eq(other)\n result.__gt__ = (other: T) => !le(other)\n result.__ge__ = (other: T) => !le(other) || eq(other)\n } else if (gt) {\n result.__gt__ = gt\n result.__ge__ = (other: T) => gt(other) || eq(other)\n result.__lt__ = (other: T) => !gt(other) && !eq(other)\n result.__le__ = (other: T) => !gt(other)\n } else if (ge) {\n result.__ge__ = ge\n result.__gt__ = (other: T) => ge(other) && !eq(other)\n result.__le__ = (other: T) => !ge(other) || eq(other)\n result.__lt__ = (other: T) => !ge(other)\n }\n\n return result\n}\n/* v8 ignore stop */\n\n/**\n * Pipe a value through a series of functions.\n * @inspired Remeda, Ramda\n *\n * Example:\n * pipe(5, x => x * 2, x => x + 1) // returns 11\n */\nexport function pipe<T>(value: T): T\nexport function pipe<T, A>(value: T, fn1: (x: T) => A): A\nexport function pipe<T, A, B>(value: T, fn1: (x: T) => A, fn2: (x: A) => B): B\nexport function pipe<T, A, B, C>(value: T, fn1: (x: T) => A, fn2: (x: A) => B, fn3: (x: B) => C): C\nexport function pipe<T, A, B, C, D>(\n value: T,\n fn1: (x: T) => A,\n fn2: (x: A) => B,\n fn3: (x: B) => C,\n fn4: (x: C) => D\n): D\nexport function pipe<T, A, B, C, D, E>(\n value: T,\n fn1: (x: T) => A,\n fn2: (x: A) => B,\n fn3: (x: B) => C,\n fn4: (x: C) => D,\n fn5: (x: D) => E\n): E\nexport function pipe(value: unknown, ...fns: ((x: unknown) => unknown)[]): unknown {\n return fns.reduce((acc, fn) => fn(acc), value)\n}\n"],"mappings":"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","names":["cache"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/re.ts"],"sourcesContent":["/**\n * Python re module for TypeScript\n *\n * Provides regular expression matching operations matching Python's re module,\n * including match, search, findall, sub, and split functions.\n *\n * @see {@link https://docs.python.org/3/library/re.html | Python re documentation}\n * @module\n */\n\n// ============================================================================\n// Flags\n// ============================================================================\n\n/** Ignore case */\nexport const IGNORECASE = 2\nexport const I = IGNORECASE\n\n/** Multi-line mode */\nexport const MULTILINE = 8\nexport const M = MULTILINE\n\n/** Dot matches all (including newline) */\nexport const DOTALL = 16\nexport const S = DOTALL\n\n/** Unicode matching (always on in JS) */\nexport const UNICODE = 32\nexport const U = UNICODE\n\n/** ASCII-only matching */\nexport const ASCII = 256\nexport const A = ASCII\n\n// ============================================================================\n// Match object\n// ============================================================================\n\nexport class Match {\n private _match: RegExpExecArray\n private _string: string\n private _pattern: Pattern\n private _pos: number\n private _endpos: number\n\n constructor(\n match: RegExpExecArray,\n string: string,\n pattern: Pattern,\n pos: number = 0,\n endpos?: number\n ) {\n this._match = match\n this._string = string\n this._pattern = pattern\n this._pos = pos\n this._endpos = endpos ?? string.length\n }\n\n /** Return the string matched by the RE */\n group(groupNum: number | string = 0): string | undefined {\n if (typeof groupNum === \"number\") {\n return this._match[groupNum]\n }\n // Named group\n return this._match.groups?.[groupNum]\n }\n\n /** Return a tuple containing all subgroups */\n groups(defaultValue?: string): (string | undefined)[] {\n const result: (string | undefined)[] = []\n for (let i = 1; i < this._match.length; i++) {\n result.push(this._match[i] ?? defaultValue)\n }\n return result\n }\n\n /** Return a dictionary of named groups */\n groupDict(defaultValue?: string): Record<string, string | undefined> {\n const groups = this._match.groups ?? {}\n const result: Record<string, string | undefined> = {}\n for (const [key, value] of Object.entries(groups)) {\n // Groups can have undefined values for non-participating groups\n result[key] = (value as string | undefined) ?? defaultValue\n }\n return result\n }\n\n /** Return the start index of the match */\n start(groupNum: number = 0): number {\n if (groupNum === 0) {\n return this._match.index\n }\n // For subgroups, we need to find the position\n const fullMatch = this._match[0]\n const subMatch = this._match[groupNum]\n if (!fullMatch || !subMatch) return -1\n const offset = fullMatch.indexOf(subMatch)\n return offset >= 0 ? this._match.index + offset : -1\n }\n\n /** Return the end index of the match */\n end(groupNum: number = 0): number {\n const s = this.start(groupNum)\n const g = this.group(groupNum)\n if (s < 0 || g === undefined) return -1\n return s + g.length\n }\n\n /** Return a tuple (start, end) */\n span(groupNum: number = 0): [number, number] {\n return [this.start(groupNum), this.end(groupNum)]\n }\n\n /** Return start position of search */\n get pos(): number {\n return this._pos\n }\n\n /** Return end position of search */\n get endpos(): number {\n return this._endpos\n }\n\n /** Return the last matched group index */\n get lastIndex(): number | undefined {\n for (let i = this._match.length - 1; i > 0; i--) {\n if (this._match[i] !== undefined) return i\n }\n return undefined\n }\n\n /** Return the name of the last matched group */\n get lastGroup(): string | undefined {\n if (!this._match.groups) return undefined\n const lastIdx = this.lastIndex\n if (lastIdx === undefined) return undefined\n // Find the name for this index\n let idx = 1\n for (const name of Object.keys(this._match.groups)) {\n if (idx === lastIdx) return name\n idx++\n }\n return undefined\n }\n\n /** Return the pattern object */\n get re(): Pattern {\n return this._pattern\n }\n\n /** Return the input string */\n get string(): string {\n return this._string\n }\n\n /** Expand template with groups */\n expand(template: string): string {\n return template.replace(/\\\\(\\d+)|\\\\g<(\\w+)>/g, (_, num: string | undefined, name: string) => {\n if (num) {\n return this.group(parseInt(num)) ?? \"\"\n }\n return this.group(name) ?? \"\"\n })\n }\n\n /** Return iterator of all groups */\n *[Symbol.iterator](): Generator<string | undefined> {\n for (let i = 0; i < this._match.length; i++) {\n yield this._match[i]\n }\n }\n\n toString(): string {\n return `<re.Match object; span=(${String(this.start())}, ${String(this.end())}), match='${this.group() ?? \"\"}'>`\n }\n}\n\n// ============================================================================\n// Pattern object\n// ============================================================================\n\nexport class Pattern {\n private _regex: RegExp\n private _pattern: string\n private _flags: number\n\n constructor(pattern: string, flags: number = 0) {\n this._pattern = pattern\n this._flags = flags\n this._regex = this._compileRegex(pattern, flags)\n }\n\n private _compileRegex(pattern: string, flags: number): RegExp {\n // Convert Python regex syntax to JavaScript\n const jsPattern = pattern\n // Convert Python named groups (?P<name>...) to JS (?<name>...)\n .replace(/\\(\\?P<(\\w+)>/g, \"(?<$1>\")\n // Convert Python named backreferences (?P=name) to JS \\k<name>\n .replace(/\\(\\?P=(\\w+)\\)/g, \"\\\\k<$1>\")\n\n let jsFlags = \"\"\n if (flags & IGNORECASE) jsFlags += \"i\"\n if (flags & MULTILINE) jsFlags += \"m\"\n if (flags & DOTALL) jsFlags += \"s\"\n jsFlags += \"u\" // Always use unicode\n\n return new RegExp(jsPattern, jsFlags)\n }\n\n /** Search for pattern in string */\n search(string: string, pos: number = 0, endpos?: number): Match | null {\n const searchStr = endpos !== undefined ? string.slice(0, endpos) : string\n const searchFrom = searchStr.slice(pos)\n\n const regex = new RegExp(this._regex.source, this._regex.flags)\n const match = regex.exec(searchFrom)\n\n if (match) {\n match.index += pos\n return new Match(match, string, this, pos, endpos)\n }\n return null\n }\n\n /** Match pattern at start of string */\n match(string: string, pos: number = 0, endpos?: number): Match | null {\n const searchStr = endpos !== undefined ? string.slice(0, endpos) : string\n const searchFrom = searchStr.slice(pos)\n\n // Force match at start\n const regex = new RegExp(\"^(?:\" + this._regex.source + \")\", this._regex.flags)\n const match = regex.exec(searchFrom)\n\n if (match) {\n match.index += pos\n return new Match(match, string, this, pos, endpos)\n }\n return null\n }\n\n /** Match pattern against entire string */\n fullMatch(string: string, pos: number = 0, endpos?: number): Match | null {\n const searchStr = endpos !== undefined ? string.slice(0, endpos) : string\n const searchFrom = searchStr.slice(pos)\n\n // Force match entire string\n const regex = new RegExp(\"^(?:\" + this._regex.source + \")$\", this._regex.flags)\n const match = regex.exec(searchFrom)\n\n if (match) {\n match.index += pos\n return new Match(match, string, this, pos, endpos)\n }\n return null\n }\n\n /** Split string by pattern */\n split(string: string, maxsplit: number = 0): string[] {\n if (maxsplit === 0) {\n return string.split(this._regex)\n }\n\n const result: string[] = []\n let lastIndex = 0\n let count = 0\n const regex = new RegExp(this._regex.source, this._regex.flags + \"g\")\n\n let match: RegExpExecArray | null\n while ((match = regex.exec(string)) !== null && (maxsplit === 0 || count < maxsplit)) {\n result.push(string.slice(lastIndex, match.index))\n // Add captured groups\n for (let i = 1; i < match.length; i++) {\n const group = match[i]\n if (group !== undefined) {\n result.push(group)\n }\n }\n lastIndex = regex.lastIndex\n count++\n }\n result.push(string.slice(lastIndex))\n return result\n }\n\n /** Find all matches */\n findAll(string: string, pos: number = 0, endpos?: number): (string | string[])[] {\n const searchStr = endpos !== undefined ? string.slice(0, endpos) : string\n const searchFrom = searchStr.slice(pos)\n\n const regex = new RegExp(this._regex.source, this._regex.flags + \"g\")\n const results: (string | string[])[] = []\n\n let match: RegExpExecArray | null\n while ((match = regex.exec(searchFrom)) !== null) {\n if (match.length === 1) {\n results.push(match[0])\n } else if (match.length === 2 && match[1] !== undefined) {\n results.push(match[1])\n } else {\n results.push(match.slice(1))\n }\n }\n return results\n }\n\n /** Find all matches as iterator */\n *findIter(string: string, pos: number = 0, endpos?: number): Generator<Match> {\n const searchStr = endpos !== undefined ? string.slice(0, endpos) : string\n const searchFrom = searchStr.slice(pos)\n\n const regex = new RegExp(this._regex.source, this._regex.flags + \"g\")\n\n let match: RegExpExecArray | null\n while ((match = regex.exec(searchFrom)) !== null) {\n match.index += pos\n yield new Match(match, string, this, pos, endpos)\n }\n }\n\n /** Replace pattern in string */\n sub(repl: string | ((match: Match) => string), string: string, count: number = 0): string {\n if (typeof repl === \"function\") {\n let n = 0\n const regex = new RegExp(this._regex.source, this._regex.flags + \"g\")\n return string.replace(regex, (...args) => {\n if (count > 0 && n >= count) {\n return args[0]\n }\n n++\n const match = regex.exec(string)\n if (!match) return args[0]\n return repl(new Match(match, string, this))\n })\n }\n\n // Convert Python replacement syntax\n const jsRepl = repl.replace(/\\\\g<(\\w+)>/g, \"$<$1>\").replace(/\\\\(\\d+)/g, \"$$$1\")\n\n if (count === 0) {\n const regex = new RegExp(this._regex.source, this._regex.flags + \"g\")\n return string.replace(regex, jsRepl)\n }\n\n let result = string\n let n = 0\n const regex = new RegExp(this._regex.source, this._regex.flags)\n while (n < count) {\n const newResult = result.replace(regex, jsRepl)\n if (newResult === result) break\n result = newResult\n n++\n }\n return result\n }\n\n /** Replace pattern and return (newstring, count) */\n subn(\n repl: string | ((match: Match) => string),\n string: string,\n count: number = 0\n ): [string, number] {\n let n = 0\n const result = this.sub(\n typeof repl === \"function\"\n ? (m) => {\n n++\n return repl(m)\n }\n : repl,\n string,\n count\n )\n if (typeof repl === \"string\") {\n // Count replacements\n const regex = new RegExp(this._regex.source, this._regex.flags + \"g\")\n const matches = string.match(regex)\n n = matches ? (count > 0 ? Math.min(matches.length, count) : matches.length) : 0\n }\n return [result, n]\n }\n\n /** Return the pattern string */\n get pattern(): string {\n return this._pattern\n }\n\n /** Return the flags */\n get flags(): number {\n return this._flags\n }\n\n /** Return number of groups */\n get groups(): number {\n // Count groups in pattern\n let count = 0\n for (let i = 0; i < this._pattern.length; i++) {\n if (this._pattern[i] === \"\\\\\") {\n i++\n continue\n }\n if (this._pattern[i] === \"(\") {\n if (this._pattern[i + 1] !== \"?\") {\n count++\n } else if (\n this._pattern.slice(i + 1, i + 4) === \"?P<\" ||\n this._pattern.slice(i + 1, i + 3) === \"?<\"\n ) {\n count++\n }\n }\n }\n return count\n }\n\n /** Return named groups mapping */\n get groupIndex(): Record<string, number> {\n const result: Record<string, number> = {}\n let groupNum = 0\n const regex = /\\(\\?P?<(\\w+)>/g\n let match: RegExpExecArray | null\n while ((match = regex.exec(this._pattern)) !== null) {\n groupNum++\n const name = match[1]\n if (name) {\n result[name] = groupNum\n }\n }\n return result\n }\n\n toString(): string {\n return `re.compile('${this._pattern}')`\n }\n}\n\n// ============================================================================\n// Module functions\n// ============================================================================\n\n/** Compile a regular expression pattern */\nexport function compile(pattern: string, flags: number = 0): Pattern {\n return new Pattern(pattern, flags)\n}\n\n/** Search for pattern in string */\nexport function search(pattern: string | Pattern, string: string, flags: number = 0): Match | null {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.search(string)\n}\n\n/** Match pattern at start of string */\nexport function match(pattern: string | Pattern, string: string, flags: number = 0): Match | null {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.match(string)\n}\n\n/** Match pattern against entire string */\nexport function fullMatch(\n pattern: string | Pattern,\n string: string,\n flags: number = 0\n): Match | null {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.fullMatch(string)\n}\n\n/** Split string by pattern */\nexport function split(\n pattern: string | Pattern,\n string: string,\n maxsplit: number = 0,\n flags: number = 0\n): string[] {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.split(string, maxsplit)\n}\n\n/** Find all matches */\nexport function findAll(\n pattern: string | Pattern,\n string: string,\n flags: number = 0\n): (string | string[])[] {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.findAll(string)\n}\n\n/** Find all matches as iterator */\nexport function findIter(\n pattern: string | Pattern,\n string: string,\n flags: number = 0\n): Generator<Match> {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.findIter(string)\n}\n\n/** Replace pattern in string */\nexport function sub(\n pattern: string | Pattern,\n repl: string | ((match: Match) => string),\n string: string,\n count: number = 0,\n flags: number = 0\n): string {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.sub(repl, string, count)\n}\n\n/** Replace pattern and return (newstring, count) */\nexport function subn(\n pattern: string | Pattern,\n repl: string | ((match: Match) => string),\n string: string,\n count: number = 0,\n flags: number = 0\n): [string, number] {\n const p = pattern instanceof Pattern ? pattern : compile(pattern, flags)\n return p.subn(repl, string, count)\n}\n\n/** Escape special characters in pattern */\nexport function escape(pattern: string): string {\n return pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\n/** Purge the regex cache (no-op in this implementation) */\nexport function purge(): void {\n // No cache to purge\n}\n"],"mappings":"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","names":["match","fullMatch","n","regex"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/collections.ts"],"sourcesContent":["/**\n * Python collections module for TypeScript\n *\n * Provides specialized container datatypes including Counter for counting\n * hashable objects, defaultdict for dictionaries with default values, and\n * deque for double-ended queues.\n *\n * @see {@link https://docs.python.org/3/library/collections.html | Python collections documentation}\n * @module\n */\n\n/**\n * Counter: a dict subclass for counting hashable objects\n *\n * Elements are stored as keys and their counts are stored as values.\n */\nexport class Counter<T> extends Map<T, number> {\n constructor(iterable?: Iterable<T>) {\n super()\n if (iterable) {\n for (const item of iterable) {\n this.increment(item)\n }\n }\n }\n\n /**\n * Increment the count for a key\n */\n increment(key: T, n: number = 1): void {\n this.set(key, (super.get(key) ?? 0) + n)\n }\n\n /**\n * Get the count for a key (returns 0 for missing keys)\n */\n get(key: T): number {\n return super.get(key) ?? 0\n }\n\n /**\n * List the n most common elements and their counts\n * If n is undefined, list all elements from most common to least\n * Uses ES2023 Array.prototype.toSorted() for immutable sorting\n */\n mostCommon(n?: number): [T, number][] {\n const sorted = [...this.entries()].toSorted((a, b) => b[1] - a[1])\n return n !== undefined ? sorted.slice(0, n) : sorted\n }\n\n /**\n * Iterate over elements, repeating each as many times as its count\n */\n *elements(): Generator<T> {\n for (const [key, count] of this) {\n for (let i = 0; i < count; i++) {\n yield key\n }\n }\n }\n\n /**\n * Subtract counts from another iterable or Counter\n */\n subtract(iterable: Iterable<T> | Counter<T>): void {\n if (iterable instanceof Counter) {\n for (const [key, count] of iterable) {\n this.set(key, (super.get(key) ?? 0) - count)\n }\n } else {\n for (const item of iterable) {\n this.set(item, (super.get(item) ?? 0) - 1)\n }\n }\n }\n\n /**\n * Add counts from another iterable or Counter\n */\n update(iterable: Iterable<T> | Counter<T>): void {\n if (iterable instanceof Counter) {\n for (const [key, count] of iterable) {\n this.increment(key, count)\n }\n } else {\n for (const item of iterable) {\n this.increment(item)\n }\n }\n }\n\n /**\n * Return total count of all elements\n */\n total(): number {\n let sum = 0\n for (const count of this.values()) {\n sum += count\n }\n return sum\n }\n}\n\n/**\n * defaultdict: a dict that provides default values for missing keys\n *\n * Uses a Proxy to automatically call the factory function for missing keys.\n */\nexport function defaultdict<K, V>(factory: () => V): Map<K, V> & { get(key: K): V } {\n const map = new Map<K, V>()\n return new Proxy(map, {\n get(target, prop, receiver): unknown {\n if (prop === \"get\") {\n return (key: K): V => {\n if (!target.has(key)) {\n const defaultValue = factory()\n target.set(key, defaultValue)\n return defaultValue\n }\n return target.get(key) as V\n }\n }\n const val: unknown = Reflect.get(target, prop, receiver)\n if (typeof val === \"function\") {\n return (val as (...args: unknown[]) => unknown).bind(target)\n }\n /* v8 ignore next -- getter properties on Map fail with proxy receiver @preserve */\n return val\n }\n }) as Map<K, V> & { get(key: K): V }\n}\n\n/**\n * deque: double-ended queue with O(1) append and pop from both ends\n */\nexport class deque<T> {\n private items: T[]\n private maxlen: number | null\n\n constructor(iterable?: Iterable<T>, maxlen?: number) {\n this.items = iterable ? [...iterable] : []\n this.maxlen = maxlen ?? null\n if (this.maxlen !== null && this.items.length > this.maxlen) {\n this.items = this.items.slice(-this.maxlen)\n }\n }\n\n /**\n * Add element to the right end\n */\n append(x: T): void {\n this.items.push(x)\n if (this.maxlen !== null && this.items.length > this.maxlen) {\n this.items.shift()\n }\n }\n\n /**\n * Add element to the left end\n */\n appendLeft(x: T): void {\n this.items.unshift(x)\n if (this.maxlen !== null && this.items.length > this.maxlen) {\n this.items.pop()\n }\n }\n\n /**\n * Remove and return element from the right end\n */\n pop(): T | undefined {\n return this.items.pop()\n }\n\n /**\n * Remove and return element from the left end\n */\n popLeft(): T | undefined {\n return this.items.shift()\n }\n\n /**\n * Extend the right side with elements from iterable\n */\n extend(iterable: Iterable<T>): void {\n for (const x of iterable) {\n this.append(x)\n }\n }\n\n /**\n * Extend the left side with elements from iterable\n */\n extendLeft(iterable: Iterable<T>): void {\n for (const x of iterable) {\n this.appendLeft(x)\n }\n }\n\n /**\n * Rotate the deque n steps to the right (negative n rotates left)\n */\n rotate(n: number = 1): void {\n const len = this.items.length\n if (len === 0) return\n n = n % len\n if (n > 0) {\n // Move last n elements to the front\n const tail = this.items.splice(-n, n)\n this.items.unshift(...tail)\n } else if (n < 0) {\n // Move first -n elements to the end\n const head = this.items.splice(0, -n)\n this.items.push(...head)\n }\n }\n\n /**\n * Remove all elements\n */\n clear(): void {\n this.items = []\n }\n\n /**\n * Number of elements\n */\n get length(): number {\n return this.items.length\n }\n\n /**\n * Make iterable\n */\n *[Symbol.iterator](): Generator<T> {\n yield* this.items\n }\n\n /**\n * Convert to array\n */\n toArray(): T[] {\n return [...this.items]\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/collections.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/datetime.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/functools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core.ts","../src/builtins.ts","../src/list.ts","../src/dict.ts","../src/set.ts","../src/index.ts"],"sourcesContent":["/**\n * Core Python operations for TypeScript\n * Arithmetic operations with Python semantics, slicing, etc.\n */\n\n// ============================================================\n// Arithmetic Operations (Python semantics)\n// ============================================================\n\n/**\n * Floor division (Python //)\n * Always rounds towards negative infinity, unlike Math.floor for negatives\n */\nexport function floorDiv(a: number, b: number): number {\n return Math.floor(a / b)\n}\n\n/**\n * Power operator (Python **)\n */\nexport function pow(base: number, exp: number): number {\n return Math.pow(base, exp)\n}\n\n/**\n * Modulo (Python %)\n * Python's % always returns a result with the same sign as the divisor\n */\nexport function mod(a: number, b: number): number {\n return ((a % b) + b) % b\n}\n\n/**\n * Python divMod()\n */\nexport function divMod(a: number, b: number): [number, number] {\n return [floorDiv(a, b), mod(a, b)]\n}\n\n// ============================================================\n// String Formatting\n// ============================================================\n\n/**\n * Python %-style string formatting\n * Handles %s, %d, %i, %f, %r, %x, %o, etc.\n */\nexport function sprintf(template: string, args: unknown): string {\n const values = Array.isArray(args) ? args : [args]\n let index = 0\n return template.replace(\n /%([+-]?\\d*\\.?\\d*)([sdifxXorec%])/g,\n (match: string, flags: string, type: string) => {\n if (type === \"%\") return \"%\"\n if (index >= values.length) return match\n const value: unknown = values[index++]\n switch (type) {\n case \"s\":\n return String(value)\n case \"d\":\n case \"i\":\n return String(Math.floor(Number(value)))\n case \"f\":\n if (flags && flags.includes(\".\")) {\n const precision = parseInt(flags.split(\".\")[1] ?? \"6\", 10)\n return Number(value).toFixed(precision)\n }\n return String(Number(value))\n case \"x\":\n return Math.floor(Number(value)).toString(16)\n case \"X\":\n return Math.floor(Number(value)).toString(16).toUpperCase()\n case \"o\":\n return Math.floor(Number(value)).toString(8)\n case \"r\":\n return JSON.stringify(value)\n case \"e\":\n return Number(value).toExponential()\n case \"c\":\n return String.fromCharCode(Number(value))\n /* v8 ignore next 2 -- unreachable: regex only matches handled cases @preserve */\n default:\n return String(value)\n }\n }\n )\n}\n\n/**\n * Python str.format() style string formatting\n * Handles {} positional and {name} named placeholders\n */\nexport function strFormat(template: string, ...args: unknown[]): string {\n let positionalIndex = 0\n const lastArg = args[args.length - 1]\n const namedParams =\n lastArg && typeof lastArg === \"object\" && !Array.isArray(lastArg)\n ? (lastArg as Record<string, unknown>)\n : {}\n\n return template.replace(/\\{([^}]*)\\}/g, (match, key: string) => {\n if (key === \"\") {\n if (positionalIndex < args.length) {\n return String(args[positionalIndex++])\n }\n return match\n }\n\n const numIndex = parseInt(key, 10)\n if (!isNaN(numIndex) && numIndex < args.length) {\n return String(args[numIndex])\n }\n\n if (key in namedParams) {\n return String(namedParams[key])\n }\n\n return match\n })\n}\n\n// ============================================================\n// Slicing\n// ============================================================\n\nfunction normalizeIndex(index: number, length: number, forNegativeStep = false): number {\n if (index < 0) {\n index = length + index\n }\n\n if (forNegativeStep) {\n return Math.max(-1, Math.min(length - 1, index))\n }\n\n return Math.max(0, Math.min(length, index))\n}\n\n/**\n * Python-style slice operation\n * Supports negative indices and step\n */\nexport function slice<T>(\n obj: string | T[],\n start?: number,\n stop?: number,\n step?: number\n): string | T[] {\n const len = obj.length\n const actualStep = step ?? 1\n\n if (actualStep === 0) {\n throw new Error(\"slice step cannot be zero\")\n }\n\n let actualStart: number\n let actualStop: number\n\n if (actualStep > 0) {\n actualStart = start === undefined ? 0 : normalizeIndex(start, len)\n actualStop = stop === undefined ? len : normalizeIndex(stop, len)\n } else {\n actualStart = start === undefined ? len - 1 : normalizeIndex(start, len, true)\n actualStop = stop === undefined ? -1 : normalizeIndex(stop, len, true)\n }\n\n const result: T[] = []\n\n if (actualStep > 0) {\n for (let i = actualStart; i < actualStop; i += actualStep) {\n if (i >= 0 && i < len) {\n result.push((obj as T[])[i] as T)\n }\n }\n } else {\n for (let i = actualStart; i > actualStop; i += actualStep) {\n if (i >= 0 && i < len) {\n result.push((obj as T[])[i] as T)\n }\n }\n }\n\n if (typeof obj === \"string\") {\n return result.join(\"\")\n }\n\n return result\n}\n\n/**\n * Python-style index access with support for negative indices\n */\nexport function at<T>(obj: string | T[], index: number): T | string {\n const len = obj.length\n const normalizedIndex = index < 0 ? len + index : index\n if (normalizedIndex < 0 || normalizedIndex >= len) {\n throw new Error(\"IndexError: list index out of range\")\n }\n return (obj as T[])[normalizedIndex] as T\n}\n\n/**\n * Python-style string/array repetition\n */\nexport function repeat<T>(obj: string | T[], count: number): string | T[] {\n if (count <= 0) {\n return typeof obj === \"string\" ? \"\" : []\n }\n if (typeof obj === \"string\") {\n return obj.repeat(count)\n }\n const result: T[] = []\n for (let i = 0; i < count; i++) {\n result.push(...obj)\n }\n return result\n}\n\n// ============================================================\n// Membership & Identity\n// ============================================================\n\n/**\n * Python 'in' operator\n */\nexport function contains<T>(\n item: T,\n container: Iterable<T> | string | Map<T, unknown> | Set<T>\n): boolean {\n if (typeof container === \"string\") {\n return container.includes(item as unknown as string)\n }\n if (container instanceof Map) {\n return container.has(item)\n }\n if (container instanceof Set) {\n return container.has(item)\n }\n if (Array.isArray(container)) {\n return container.includes(item)\n }\n for (const element of container) {\n if (element === item) {\n return true\n }\n }\n return false\n}\n\n/**\n * Python 'is' operator (identity comparison)\n */\nexport function is(a: unknown, b: unknown): boolean {\n return a === b\n}\n","/**\n * Python built-in functions for TypeScript\n *\n * Provides core Python built-in functions like len, range, enumerate, sorted, min, max, etc.\n *\n * @see {@link https://docs.python.org/3/library/functions.html | Python built-in functions documentation}\n */\n\n// ============================================================\n// Iterables\n// ============================================================\n\n/**\n * Return a sequence of numbers from start to stop (exclusive) by step.\n *\n * @param startOrStop - If only one argument, this is stop (start defaults to 0). Otherwise, this is start.\n * @param stop - The end value (exclusive)\n * @param step - The increment (default: 1)\n * @returns An iterable of numbers\n * @see {@link https://docs.python.org/3/library/functions.html#func-range | Python range()}\n */\nexport function range(startOrStop: number, stop?: number, step?: number): Iterable<number> {\n let start: number\n let end: number\n let stepVal: number\n\n if (stop === undefined) {\n start = 0\n end = startOrStop\n stepVal = 1\n } else {\n start = startOrStop\n end = stop\n stepVal = step ?? 1\n }\n\n if (stepVal === 0) {\n throw new Error(\"range() arg 3 must not be zero\")\n }\n\n return {\n *[Symbol.iterator]() {\n if (stepVal > 0) {\n for (let i = start; i < end; i += stepVal) {\n yield i\n }\n } else {\n for (let i = start; i > end; i += stepVal) {\n yield i\n }\n }\n }\n }\n}\n\n/**\n * Return an iterable of tuples containing (index, value) pairs.\n *\n * @param iterable - The sequence to enumerate\n * @param start - The starting index (default: 0)\n * @returns An iterable of [index, value] tuples\n * @see {@link https://docs.python.org/3/library/functions.html#enumerate | Python enumerate()}\n */\nexport function enumerate<T>(iterable: Iterable<T>, start = 0): Iterable<[number, T]> {\n return {\n *[Symbol.iterator]() {\n let index = start\n for (const item of iterable) {\n yield [index++, item] as [number, T]\n }\n }\n }\n}\n\n/**\n * Iterate over multiple iterables in parallel, yielding tuples.\n *\n * Stops when the shortest iterable is exhausted.\n *\n * @param iterables - The iterables to zip together\n * @returns An iterable of tuples containing elements from each input\n * @see {@link https://docs.python.org/3/library/functions.html#zip | Python zip()}\n */\nexport function zip<T extends unknown[][]>(\n ...iterables: { [K in keyof T]: Iterable<T[K]> }\n): Iterable<T> {\n return {\n *[Symbol.iterator]() {\n const iterators = iterables.map((it) => (it as Iterable<unknown>)[Symbol.iterator]())\n\n for (;;) {\n const results = iterators.map((it) => it.next())\n\n if (results.some((r) => r.done)) {\n break\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n yield results.map((r) => r.value) as T\n }\n }\n }\n}\n\n/**\n * Return an iterator object for the given iterable.\n *\n * For objects without Symbol.iterator, returns the object's keys.\n *\n * @param obj - The object to iterate over\n * @returns An iterable\n * @see {@link https://docs.python.org/3/library/functions.html#iter | Python iter()}\n */\nexport function iter<T>(\n obj: Iterable<T> | Record<string, unknown> | null | undefined\n): Iterable<T> | string[] {\n if (obj === null || obj === undefined) {\n return []\n }\n if (typeof (obj as Iterable<T>)[Symbol.iterator] === \"function\") {\n return obj as Iterable<T>\n }\n if (typeof obj === \"object\") {\n return Object.keys(obj)\n }\n return []\n}\n\n/**\n * Return a reversed iterator over the values of the given sequence.\n *\n * Uses ES2023 Array.prototype.toReversed() for immutable reversal.\n *\n * @param iterable - The sequence to reverse\n * @returns An iterable yielding elements in reverse order\n * @see {@link https://docs.python.org/3/library/functions.html#reversed | Python reversed()}\n */\nexport function reversed<T>(iterable: Iterable<T>): Iterable<T> {\n // toReversed() already returns a new array, so no need to copy first if already an array\n const arr: T[] = Array.isArray(iterable) ? (iterable as T[]) : Array.from(iterable)\n return arr.toReversed()\n}\n\n/**\n * Return a new sorted list from the items in the iterable.\n *\n * Uses ES2023 Array.prototype.toSorted() for immutable sorting.\n *\n * @param iterable - The sequence to sort\n * @param options - Sorting options: key function and/or reverse flag\n * @returns A new sorted array\n * @see {@link https://docs.python.org/3/library/functions.html#sorted | Python sorted()}\n */\nexport function sorted<T>(\n iterable: Iterable<T>,\n options?: { key?: (x: T) => unknown; reverse?: boolean }\n): T[] {\n const key = options?.key ?? ((x: T) => x)\n const reverse = options?.reverse ?? false\n\n // toSorted() already returns a new array, so no need to copy first if already an array\n const arr: T[] = Array.isArray(iterable) ? (iterable as T[]) : Array.from(iterable)\n return arr.toSorted((a, b) => {\n const aKey = key(a)\n const bKey = key(b)\n\n let cmp: number\n if (typeof aKey === \"string\" && typeof bKey === \"string\") {\n cmp = aKey.localeCompare(bKey)\n } else {\n cmp = (aKey as number) - (bKey as number)\n }\n\n return reverse ? -cmp : cmp\n })\n}\n\n// ES2024 Iterator Helpers interface (TypeScript doesn't have built-in types yet)\ninterface IteratorHelpers<T> extends Iterator<T>, Iterable<T> {\n map<U>(fn: (x: T) => U): IteratorHelpers<U>\n filter(fn: (x: T) => boolean): IteratorHelpers<T>\n take(n: number): IteratorHelpers<T>\n drop(n: number): IteratorHelpers<T>\n flatMap<U>(fn: (x: T) => Iterable<U>): IteratorHelpers<U>\n toArray(): T[]\n}\n\n/** Get iterator with ES2024 Iterator Helpers */\nfunction getIterator<T>(iterable: Iterable<T>): IteratorHelpers<T> {\n return iterable[Symbol.iterator]() as IteratorHelpers<T>\n}\n\n/**\n * Apply a function to every item of the iterable and yield the results.\n *\n * Uses ES2024 Iterator.prototype.map() for lazy evaluation.\n *\n * @param fn - The function to apply to each element\n * @param iterable - The input iterable\n * @returns An iterable of transformed values\n * @see {@link https://docs.python.org/3/library/functions.html#map | Python map()}\n */\nexport function map<T, U>(fn: (x: T) => U, iterable: Iterable<T>): Iterable<U> {\n return getIterator(iterable).map(fn)\n}\n\n/**\n * Return an iterable yielding items where the function returns true.\n *\n * If function is null, return items that are truthy.\n * Uses ES2024 Iterator.prototype.filter() for lazy evaluation.\n *\n * @param fn - The predicate function (or null for truthiness check)\n * @param iterable - The input iterable\n * @returns An iterable of filtered values\n * @see {@link https://docs.python.org/3/library/functions.html#filter | Python filter()}\n */\nexport function filter<T>(fn: ((x: T) => boolean) | null, iterable: Iterable<T>): Iterable<T> {\n // Python's filter(None, iterable) filters by truthiness\n const predicate = fn === null ? (x: T) => bool(x) : fn\n return getIterator(iterable).filter(predicate)\n}\n\n// ============================================================\n// Collections Constructors\n// ============================================================\n\n/**\n * Convert an iterable to a list (array).\n *\n * @param iterable - The iterable to convert (optional, defaults to empty list)\n * @returns A new array containing the iterable's elements\n * @see {@link https://docs.python.org/3/library/functions.html#func-list | Python list()}\n */\nexport function list<T>(iterable?: Iterable<T>): T[] {\n if (iterable === undefined) {\n return []\n }\n return Array.from(iterable)\n}\n\n/**\n * Create a new dictionary (Map) from key-value pairs.\n *\n * @param entries - Optional iterable of [key, value] pairs\n * @returns A new Map\n * @see {@link https://docs.python.org/3/library/functions.html#func-dict | Python dict()}\n */\nexport function dict<K, V>(entries?: Iterable<[K, V]>): Map<K, V> {\n return new Map(entries)\n}\n\n/**\n * Create a new set from an iterable.\n *\n * @param iterable - Optional iterable of elements\n * @returns A new Set\n * @see {@link https://docs.python.org/3/library/functions.html#func-set | Python set()}\n */\nexport function set<T>(iterable?: Iterable<T>): Set<T> {\n return new Set(iterable)\n}\n\n/**\n * Create an immutable tuple (frozen array).\n *\n * @param items - The elements to include in the tuple\n * @returns A frozen (readonly) array\n * @see {@link https://docs.python.org/3/library/functions.html#func-tuple | Python tuple()}\n */\nexport function tuple<T extends unknown[]>(...items: T): Readonly<T> {\n return Object.freeze([...items]) as Readonly<T>\n}\n\n// ============================================================\n// Built-in Functions\n// ============================================================\n\n/**\n * Return the number of items in an object.\n *\n * Works with strings, arrays, Maps, Sets, and objects with a length property.\n *\n * @param obj - The object to measure\n * @returns The number of items\n * @see {@link https://docs.python.org/3/library/functions.html#len | Python len()}\n */\nexport function len(\n obj: string | unknown[] | Map<unknown, unknown> | Set<unknown> | { length: number }\n): number {\n if (typeof obj === \"string\" || Array.isArray(obj)) {\n return obj.length\n }\n if (obj instanceof Map || obj instanceof Set) {\n return obj.size\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof obj === \"object\" && obj !== null && \"length\" in obj) {\n return obj.length\n }\n throw new TypeError(\"object has no len()\")\n}\n\n/**\n * Return the absolute value of a number.\n *\n * @param x - The number\n * @returns The absolute value\n * @see {@link https://docs.python.org/3/library/functions.html#abs | Python abs()}\n */\nexport function abs(x: number): number {\n return Math.abs(x)\n}\n\n/**\n * Return the smallest item in an iterable or the smallest of two or more arguments.\n *\n * @param args - An iterable, or multiple values to compare\n * @returns The minimum value\n * @see {@link https://docs.python.org/3/library/functions.html#min | Python min()}\n */\nexport function min<T>(...args: T[] | [Iterable<T>]): T {\n const first = args[0]\n if (\n args.length === 1 &&\n typeof first === \"object\" &&\n first !== null &&\n Symbol.iterator in first\n ) {\n const arr = [...first]\n if (arr.length === 0) {\n throw new Error(\"min() arg is an empty sequence\")\n }\n return arr.reduce((a, b) => (a < b ? a : b))\n }\n\n if (args.length === 0) {\n throw new Error(\"min expected at least 1 argument, got 0\")\n }\n\n return (args as T[]).reduce((a, b) => (a < b ? a : b))\n}\n\n/**\n * Return the largest item in an iterable or the largest of two or more arguments.\n *\n * @param args - An iterable, or multiple values to compare\n * @returns The maximum value\n * @see {@link https://docs.python.org/3/library/functions.html#max | Python max()}\n */\nexport function max<T>(...args: T[] | [Iterable<T>]): T {\n const first = args[0]\n if (\n args.length === 1 &&\n typeof first === \"object\" &&\n first !== null &&\n Symbol.iterator in first\n ) {\n const arr = [...first]\n if (arr.length === 0) {\n throw new Error(\"max() arg is an empty sequence\")\n }\n return arr.reduce((a, b) => (a > b ? a : b))\n }\n\n if (args.length === 0) {\n throw new Error(\"max expected at least 1 argument, got 0\")\n }\n\n return (args as T[]).reduce((a, b) => (a > b ? a : b))\n}\n\n/**\n * Return the sum of all items in the iterable plus an optional start value.\n *\n * @param iterable - The numbers to sum\n * @param start - The initial value (default: 0)\n * @returns The sum\n * @see {@link https://docs.python.org/3/library/functions.html#sum | Python sum()}\n */\nexport function sum(iterable: Iterable<number>, start = 0): number {\n let total = start\n for (const item of iterable) {\n total += item\n }\n return total\n}\n\n/**\n * Return True if all elements of the iterable are truthy (or if empty).\n *\n * @param iterable - The elements to test\n * @returns True if all elements are truthy\n * @see {@link https://docs.python.org/3/library/functions.html#all | Python all()}\n */\nexport function all(iterable: Iterable<unknown>): boolean {\n for (const item of iterable) {\n if (!bool(item)) return false\n }\n return true\n}\n\n/**\n * Return True if any element of the iterable is truthy.\n *\n * @param iterable - The elements to test\n * @returns True if any element is truthy\n * @see {@link https://docs.python.org/3/library/functions.html#any | Python any()}\n */\nexport function any(iterable: Iterable<unknown>): boolean {\n for (const item of iterable) {\n if (bool(item)) return true\n }\n return false\n}\n\n/**\n * Round a number to a given precision in decimal digits.\n *\n * Uses banker's rounding (round half to even) for values exactly halfway.\n *\n * @param number - The number to round\n * @param ndigits - Number of decimal places (default: 0)\n * @returns The rounded number\n * @see {@link https://docs.python.org/3/library/functions.html#round | Python round()}\n */\nexport function round(number: number, ndigits?: number): number {\n if (ndigits === undefined || ndigits === 0) {\n const rounded = Math.round(number)\n if (Math.abs(number % 1) === 0.5) {\n return rounded % 2 === 0 ? rounded : rounded - Math.sign(number)\n }\n return rounded\n }\n\n const factor = Math.pow(10, ndigits)\n return Math.round(number * factor) / factor\n}\n\n/**\n * Return the Unicode code point for a one-character string.\n *\n * @param char - A single character\n * @returns The Unicode code point\n * @see {@link https://docs.python.org/3/library/functions.html#ord | Python ord()}\n */\nexport function ord(char: string): number {\n if (char.length !== 1) {\n throw new Error(\"ord() expected a character\")\n }\n return char.charCodeAt(0)\n}\n\n/**\n * Return the string representing a character at the given Unicode code point.\n *\n * @param code - The Unicode code point\n * @returns A single-character string\n * @see {@link https://docs.python.org/3/library/functions.html#chr | Python chr()}\n */\nexport function chr(code: number): string {\n return String.fromCharCode(code)\n}\n\n/**\n * Convert an integer to a lowercase hexadecimal string prefixed with \"0x\".\n *\n * @param x - The integer to convert\n * @returns Hexadecimal string (e.g., \"0xff\")\n * @see {@link https://docs.python.org/3/library/functions.html#hex | Python hex()}\n */\nexport function hex(x: number): string {\n const prefix = x < 0 ? \"-0x\" : \"0x\"\n return prefix + Math.abs(Math.trunc(x)).toString(16)\n}\n\n/**\n * Convert an integer to an octal string prefixed with \"0o\".\n *\n * @param x - The integer to convert\n * @returns Octal string (e.g., \"0o17\")\n * @see {@link https://docs.python.org/3/library/functions.html#oct | Python oct()}\n */\nexport function oct(x: number): string {\n const prefix = x < 0 ? \"-0o\" : \"0o\"\n return prefix + Math.abs(Math.trunc(x)).toString(8)\n}\n\n/**\n * Convert an integer to a binary string prefixed with \"0b\".\n *\n * @param x - The integer to convert\n * @returns Binary string (e.g., \"0b1010\")\n * @see {@link https://docs.python.org/3/library/functions.html#bin | Python bin()}\n */\nexport function bin(x: number): string {\n const prefix = x < 0 ? \"-0b\" : \"0b\"\n return prefix + Math.abs(Math.trunc(x)).toString(2)\n}\n\n// ============================================================\n// Type Conversions\n// ============================================================\n\n/**\n * Convert a value to an integer.\n *\n * Truncates floats toward zero. Parses strings in the given base.\n *\n * @param x - The value to convert\n * @param base - The base for string conversion (default: 10)\n * @returns The integer value\n * @see {@link https://docs.python.org/3/library/functions.html#int | Python int()}\n */\nexport function int(x: string | number | boolean, base?: number): number {\n if (typeof x === \"boolean\") {\n return x ? 1 : 0\n }\n if (typeof x === \"number\") {\n return Math.trunc(x)\n }\n const parsed = base !== undefined ? parseInt(x, base) : parseInt(x, 10)\n if (isNaN(parsed)) {\n throw new Error(`invalid literal for int(): '${x}'`)\n }\n return parsed\n}\n\n/**\n * Convert a value to a floating-point number.\n *\n * @param x - The value to convert\n * @returns The float value\n * @see {@link https://docs.python.org/3/library/functions.html#float | Python float()}\n */\nexport function float(x: string | number): number {\n if (typeof x === \"number\") {\n return x\n }\n const parsed = parseFloat(x)\n if (isNaN(parsed)) {\n throw new Error(`could not convert string to float: '${x}'`)\n }\n return parsed\n}\n\n/**\n * Convert a value to its string representation.\n *\n * Uses Python-style formatting for booleans (True/False), None, and collections.\n *\n * @param x - The value to convert\n * @returns The string representation\n * @see {@link https://docs.python.org/3/library/functions.html#func-str | Python str()}\n */\nexport function str(x: unknown): string {\n if (x === null) {\n return \"None\"\n }\n if (x === undefined) {\n return \"None\"\n }\n if (typeof x === \"boolean\") {\n return x ? \"True\" : \"False\"\n }\n if (Array.isArray(x)) {\n return \"[\" + x.map((item) => repr(item)).join(\", \") + \"]\"\n }\n if (x instanceof Map) {\n const entries = Array.from(x.entries())\n .map(([k, v]) => `${repr(k)}: ${repr(v)}`)\n .join(\", \")\n return \"{\" + entries + \"}\"\n }\n if (x instanceof Set) {\n if (x.size === 0) {\n return \"set()\"\n }\n return (\n \"{\" +\n Array.from(x)\n .map((item) => repr(item))\n .join(\", \") +\n \"}\"\n )\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return String(x)\n}\n\n/**\n * Return a string containing a printable representation of an object.\n *\n * Strings are quoted, other types use str() representation.\n *\n * @param x - The value to represent\n * @returns A printable representation\n * @see {@link https://docs.python.org/3/library/functions.html#repr | Python repr()}\n */\nexport function repr(x: unknown): string {\n if (typeof x === \"string\") {\n return `'${x}'`\n }\n return str(x)\n}\n\n/**\n * Convert a value to a boolean using Python's truthiness rules.\n *\n * False values: null, undefined, false, 0, empty strings, empty arrays, empty Maps/Sets.\n *\n * @param x - The value to convert\n * @returns The boolean value\n * @see {@link https://docs.python.org/3/library/functions.html#bool | Python bool()}\n */\nexport function bool(x: unknown): boolean {\n if (x === null || x === undefined) {\n return false\n }\n if (typeof x === \"boolean\") {\n return x\n }\n if (typeof x === \"number\") {\n return x !== 0\n }\n if (typeof x === \"string\") {\n return x.length > 0\n }\n if (Array.isArray(x)) {\n return x.length > 0\n }\n if (x instanceof Map || x instanceof Set) {\n return x.size > 0\n }\n return true\n}\n\n/**\n * Return a string containing a printable ASCII representation.\n *\n * Non-ASCII characters are escaped using \\\\xhh, \\\\uhhhh, or \\\\Uhhhhhhhh.\n *\n * @param x - The value to represent\n * @returns ASCII-safe printable representation\n * @see {@link https://docs.python.org/3/library/functions.html#ascii | Python ascii()}\n */\nexport function ascii(x: unknown): string {\n const s = repr(x)\n let result = \"\"\n for (const char of s) {\n const code = char.charCodeAt(0)\n if (code > 127) {\n if (code > 0xffff) {\n result += `\\\\U${code.toString(16).padStart(8, \"0\")}`\n } else {\n result += `\\\\u${code.toString(16).padStart(4, \"0\")}`\n }\n } else {\n result += char\n }\n }\n return result\n}\n\n/**\n * Return True if the object is an instance of the specified class.\n *\n * Supports JavaScript constructors (Number, String, etc.) and Python type names.\n *\n * @param obj - The object to check\n * @param classInfo - The class or type name to check against\n * @returns True if obj is an instance of classInfo\n * @see {@link https://docs.python.org/3/library/functions.html#isinstance | Python isinstance()}\n */\nexport function isinstance(obj: unknown, classInfo: unknown): boolean {\n if (classInfo === Number || classInfo === \"int\" || classInfo === \"float\") {\n return typeof obj === \"number\"\n }\n if (classInfo === String || classInfo === \"str\") {\n return typeof obj === \"string\"\n }\n if (classInfo === Boolean || classInfo === \"bool\") {\n return typeof obj === \"boolean\"\n }\n if (classInfo === Array || classInfo === \"list\") {\n return Array.isArray(obj)\n }\n if (classInfo === Map || classInfo === \"dict\") {\n return obj instanceof Map\n }\n if (classInfo === Set || classInfo === \"set\") {\n return obj instanceof Set\n }\n if (typeof classInfo === \"function\") {\n return obj instanceof classInfo\n }\n return false\n}\n\n/**\n * Return the type name of an object as a string.\n *\n * Returns Python-style type names: 'int', 'float', 'str', 'bool', 'list', 'dict', 'set'.\n *\n * @param obj - The object to check\n * @returns The type name\n * @see {@link https://docs.python.org/3/library/functions.html#type | Python type()}\n */\nexport function type(obj: unknown): string {\n if (obj === null) return \"NoneType\"\n if (typeof obj === \"number\") {\n return Number.isInteger(obj) ? \"int\" : \"float\"\n }\n if (typeof obj === \"string\") return \"str\"\n if (typeof obj === \"boolean\") return \"bool\"\n if (Array.isArray(obj)) return \"list\"\n if (obj instanceof Map) return \"dict\"\n if (obj instanceof Set) return \"set\"\n return typeof obj\n}\n\n/**\n * Read a line of input from the user.\n *\n * Note: This function requires async implementation in JavaScript environments.\n *\n * @param prompt - Optional prompt string to display\n * @returns The input string\n * @see {@link https://docs.python.org/3/library/functions.html#input | Python input()}\n */\nexport function input(prompt?: string): string {\n if (prompt) {\n process.stdout.write(prompt)\n }\n throw new Error(\"input() requires async implementation\")\n}\n\n// ============================================================\n// Format Function\n// ============================================================\n\nfunction formatNumber(\n num: number,\n sign: string | undefined,\n _hash: string | undefined,\n grouping: string | undefined,\n precision?: number,\n isInteger = true\n): string {\n let result: string\n\n if (isInteger) {\n result = Math.trunc(num).toString()\n } else {\n result = num.toFixed(precision ?? 6)\n }\n\n if (grouping) {\n const sep = grouping === \"_\" ? \"_\" : \",\"\n const parts = result.split(\".\")\n const intPart = parts[0] as string\n const signChar = intPart[0] === \"-\" ? \"-\" : \"\"\n const digits = signChar ? intPart.slice(1) : intPart\n const grouped = digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, sep)\n parts[0] = signChar + grouped\n result = parts.join(\".\")\n }\n\n if (num >= 0) {\n if (sign === \"+\") {\n result = \"+\" + result\n } else if (sign === \" \") {\n result = \" \" + result\n }\n }\n\n return result\n}\n\n/**\n * Convert a value to a formatted representation using a format specification.\n *\n * Supports Python format spec mini-language for numbers and strings.\n *\n * @param value - The value to format\n * @param spec - The format specification string\n * @returns The formatted string\n * @see {@link https://docs.python.org/3/library/functions.html#format | Python format()}\n */\nexport function format(value: unknown, spec: string): string {\n if (spec === \"\") {\n return str(value)\n }\n\n const match = spec.match(\n /^(.?[<>=^])?([+\\- ])?([#])?(0)?(\\d+)?([,_])?(?:\\.(\\d+))?([bcdeEfFgGnosxX%])?$/\n )\n\n if (!match) {\n return str(value)\n }\n\n const [, alignPart, sign, hash, zero, widthStr, grouping, precisionStr, typeChar] = match\n\n let fill = \" \"\n let align = \"\"\n if (alignPart) {\n if (alignPart.length === 2) {\n fill = alignPart[0] as string\n align = alignPart[1] as string\n } else {\n align = alignPart\n }\n }\n\n const width = widthStr ? parseInt(widthStr, 10) : 0\n const precision = precisionStr !== undefined ? parseInt(precisionStr, 10) : undefined\n\n if (zero && !alignPart) {\n fill = \"0\"\n align = \"=\"\n }\n\n let result: string\n\n if (typeChar === \"s\" || (!typeChar && typeof value === \"string\")) {\n result = str(value)\n if (precision !== undefined) {\n result = result.slice(0, precision)\n }\n } else if (\n typeChar === \"d\" ||\n (!typeChar && typeof value === \"number\" && Number.isInteger(value))\n ) {\n const num = typeof value === \"number\" ? value : int(value as string | number | boolean)\n result = formatNumber(num, sign, \"\", grouping)\n } else if (typeChar === \"f\" || typeChar === \"F\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = formatNumber(num, sign, \"\", grouping, prec, false)\n if (typeChar === \"F\") result = result.toUpperCase()\n } else if (typeChar === \"e\" || typeChar === \"E\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = num.toExponential(prec)\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n if (typeChar === \"E\") result = result.toUpperCase()\n } else if (typeChar === \"g\" || typeChar === \"G\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = num.toPrecision(prec)\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n if (typeChar === \"G\") result = result.toUpperCase()\n } else if (typeChar === \"x\" || typeChar === \"X\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(16)\n if (hash) result = \"0x\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n if (typeChar === \"X\") result = result.toUpperCase()\n } else if (typeChar === \"o\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(8)\n if (hash) result = \"0o\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n } else if (typeChar === \"b\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(2)\n if (hash) result = \"0b\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n } else if (typeChar === \"c\") {\n const code = typeof value === \"number\" ? value : int(value as string | number | boolean)\n result = String.fromCharCode(code)\n } else if (typeChar === \"%\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = (num * 100).toFixed(prec) + \"%\"\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n } else if (typeChar === \"n\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n result = num.toLocaleString()\n } else {\n /* v8 ignore next -- fallback for unrecognized format types @preserve */\n result = str(value)\n }\n\n if (width > result.length) {\n const padding = fill.repeat(width - result.length)\n if (align === \"<\") {\n result = result + padding\n } else if (align === \">\" || align === \"\") {\n result = padding + result\n } else if (align === \"^\") {\n const leftPad = Math.floor((width - result.length) / 2)\n const rightPad = width - result.length - leftPad\n result = fill.repeat(leftPad) + result + fill.repeat(rightPad)\n } else if (align === \"=\") {\n const signMatch = result.match(/^([+\\- ]|0[xXoObB])?(.*)$/)\n if (signMatch) {\n const signPart = signMatch[1] ?? \"\"\n const numPart = signMatch[2] ?? \"\"\n result = signPart + padding + numPart\n }\n }\n }\n\n return result\n}\n\n// ============================================================\n// Attribute Access\n// ============================================================\n\n/**\n * Python getattr() function - get an attribute from an object\n *\n * @param obj - The object to get the attribute from\n * @param name - The name of the attribute\n * @param defaultValue - Optional default value if attribute doesn't exist\n * @returns The attribute value or default value\n */\nexport function getattr<T>(obj: unknown, name: string, defaultValue?: T): T | undefined {\n if (obj === null || obj === undefined) {\n if (arguments.length >= 3) {\n return defaultValue\n }\n throw new TypeError(\n `'${obj === null ? \"NoneType\" : \"undefined\"}' object has no attribute '${name}'`\n )\n }\n\n const target = obj as Record<string, unknown>\n if (name in target) {\n return target[name] as T\n }\n\n if (arguments.length >= 3) {\n return defaultValue\n }\n\n throw new TypeError(`'${typeof obj}' object has no attribute '${name}'`)\n}\n\n/**\n * Python hasattr() function - check if an object has an attribute\n *\n * @param obj - The object to check\n * @param name - The name of the attribute\n * @returns True if the attribute exists, false otherwise\n */\nexport function hasattr(obj: unknown, name: string): boolean {\n if (obj === null || obj === undefined) {\n return false\n }\n return name in (obj as Record<string, unknown>)\n}\n\n/**\n * Python setattr() function - set an attribute on an object\n *\n * @param obj - The object to set the attribute on\n * @param name - The name of the attribute\n * @param value - The value to set\n */\nexport function setattr(obj: unknown, name: string, value: unknown): void {\n if (obj === null || obj === undefined) {\n throw new TypeError(\n `'${obj === null ? \"NoneType\" : \"undefined\"}' object has no attribute '${name}'`\n )\n }\n ;(obj as Record<string, unknown>)[name] = value\n}\n","/**\n * Python list methods for TypeScript\n * Usage: py.list.remove(), py.list.sort(), etc.\n */\n\nexport const list = {\n /**\n * Python list.append() - modifies array in place\n */\n append<T>(arr: T[], item: T): void {\n arr.push(item)\n },\n\n /**\n * Python list.extend() - modifies array in place\n */\n extend<T>(arr: T[], items: Iterable<T>): void {\n arr.push(...items)\n },\n\n /**\n * Python list.insert() - modifies array in place\n */\n insert<T>(arr: T[], index: number, item: T): void {\n arr.splice(index, 0, item)\n },\n\n /**\n * Python list.remove() - removes first occurrence, modifies in place\n */\n remove<T>(arr: T[], value: T): void {\n const index = arr.indexOf(value)\n if (index === -1) {\n throw new Error(\"list.remove(x): x not in list\")\n }\n arr.splice(index, 1)\n },\n\n /**\n * Python list.pop() - removes and returns item at index\n */\n pop<T>(arr: T[], index?: number): T {\n if (arr.length === 0) {\n throw new Error(\"pop from empty list\")\n }\n const i = index ?? arr.length - 1\n const normalizedIndex = i < 0 ? arr.length + i : i\n if (normalizedIndex < 0 || normalizedIndex >= arr.length) {\n throw new Error(\"pop index out of range\")\n }\n return arr.splice(normalizedIndex, 1)[0] as T\n },\n\n /**\n * Python list.clear() - removes all items\n */\n clear(arr: unknown[]): void {\n arr.length = 0\n },\n\n /**\n * Python list.index() - finds first occurrence\n */\n index<T>(arr: T[], value: T, start?: number, end?: number): number {\n const searchStart = start ?? 0\n const searchEnd = end ?? arr.length\n for (let i = searchStart; i < searchEnd; i++) {\n if (arr[i] === value) {\n return i\n }\n }\n throw new Error(\"x not in list\")\n },\n\n /**\n * Python list.count() - counts occurrences\n */\n count<T>(arr: T[], value: T): number {\n let count = 0\n for (const item of arr) {\n if (item === value) count++\n }\n return count\n },\n\n /**\n * Python list.sort() with key function - modifies in place\n */\n sort<T>(arr: T[], options?: { key?: (x: T) => unknown; reverse?: boolean }): void {\n const key = options?.key ?? ((x: T) => x as unknown)\n const reverse = options?.reverse ?? false\n arr.sort((a, b) => {\n const aKey = key(a) as string | number\n const bKey = key(b) as string | number\n let cmp = 0\n if (aKey < bKey) cmp = -1\n else if (aKey > bKey) cmp = 1\n return reverse ? -cmp : cmp\n })\n },\n\n /**\n * Python list.reverse() - reverses in place\n */\n reverse(arr: unknown[]): void {\n arr.reverse()\n },\n\n /**\n * Python list.copy() - shallow copy\n */\n copy<T>(arr: T[]): T[] {\n return [...arr]\n },\n\n /**\n * Python slice assignment: arr[start:end:step] = values\n * Replaces a slice of the array with new values, modifying in place\n */\n sliceAssign<T>(\n arr: T[],\n start: number | undefined,\n end: number | undefined,\n step: number | undefined,\n values: T[]\n ): void {\n const len = arr.length\n const actualStep = step ?? 1\n\n // Normalize start and end\n let actualStart = start ?? (actualStep > 0 ? 0 : len - 1)\n let actualEnd = end ?? (actualStep > 0 ? len : -len - 1)\n\n // Handle negative indices\n if (actualStart < 0) actualStart = Math.max(0, len + actualStart)\n if (actualEnd < 0) actualEnd = Math.max(0, len + actualEnd)\n\n // Clamp to array bounds\n actualStart = Math.min(actualStart, len)\n actualEnd = Math.min(actualEnd, len)\n\n if (actualStep === 1) {\n // Simple case: contiguous slice\n const deleteCount = Math.max(0, actualEnd - actualStart)\n arr.splice(actualStart, deleteCount, ...values)\n } else {\n // Extended slice with step\n // Collect indices that will be replaced\n const indices: number[] = []\n if (actualStep > 0) {\n for (let i = actualStart; i < actualEnd; i += actualStep) {\n indices.push(i)\n }\n } else {\n for (let i = actualStart; i > actualEnd; i += actualStep) {\n indices.push(i)\n }\n }\n\n // For extended slices, lengths must match\n if (indices.length !== values.length) {\n throw new Error(\n `attempt to assign sequence of size ${String(values.length)} to extended slice of size ${String(indices.length)}`\n )\n }\n\n // Replace values at each index\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i]\n if (idx !== undefined) {\n arr[idx] = values[i] as T\n }\n }\n }\n }\n}\n","/**\n * Python dict methods for TypeScript\n * Usage: py.dict.get(), py.dict.keys(), etc.\n */\n\nexport const dict = {\n /**\n * Python dict.get() - get value with optional default\n */\n get<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n key: K,\n defaultValue?: V\n ): V | undefined {\n return key in obj ? obj[key] : defaultValue\n },\n\n /**\n * Python dict.setDefault() - get value or set default\n */\n setDefault<K extends string | number | symbol, V>(obj: Record<K, V>, key: K, defaultValue: V): V {\n if (!(key in obj)) {\n obj[key] = defaultValue\n }\n return obj[key]\n },\n\n /**\n * Python dict.pop() - remove and return value\n */\n pop<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n key: K,\n defaultValue?: V\n ): V | undefined {\n if (key in obj) {\n const value = obj[key]\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key]\n return value\n }\n if (defaultValue !== undefined) {\n return defaultValue\n }\n throw new Error(\"KeyError\")\n },\n\n /**\n * Python dict.popItem() - remove and return last item\n */\n popItem<K extends string | number | symbol, V>(obj: Record<K, V>): [K, V] {\n const keys = Object.keys(obj) as K[]\n if (keys.length === 0) {\n throw new Error(\"dictionary is empty\")\n }\n const key = keys[keys.length - 1] as K\n const value = obj[key]\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key]\n return [key, value]\n },\n\n /**\n * Python dict.update() - update with another dict\n */\n update<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n other: Record<K, V> | Iterable<[K, V]>\n ): void {\n if (Symbol.iterator in other) {\n for (const [k, v] of other) {\n obj[k] = v\n }\n } else {\n Object.assign(obj, other)\n }\n },\n\n /**\n * Python dict.clear() - remove all items\n */\n clear<K extends string | number | symbol, V>(obj: Record<K, V>): void {\n for (const key of Object.keys(obj)) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key as K]\n }\n },\n\n /**\n * Python dict.copy() - shallow copy\n */\n copy<K extends string | number | symbol, V>(obj: Record<K, V>): Record<K, V> {\n return { ...obj }\n },\n\n /**\n * Python dict.keys() - returns iterable of keys\n */\n keys<K extends string | number | symbol, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[]\n },\n\n /**\n * Python dict.values() - returns iterable of values\n */\n values<K extends string | number | symbol, V>(obj: Record<K, V>): V[] {\n return Object.values(obj)\n },\n\n /**\n * Python dict.items() - returns iterable of [key, value] pairs\n */\n items<K extends string | number | symbol, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][]\n },\n\n /**\n * Python dict.fromKeys() - create dict from keys\n */\n fromKeys<K extends string | number | symbol, V>(keys: K[], value?: V): Record<K, V | undefined> {\n const result = {} as Record<K, V | undefined>\n for (const key of keys) {\n result[key] = value\n }\n return result\n }\n}\n","/**\n * Python set methods for TypeScript\n * Usage: py.set.intersection(), py.set.union(), etc.\n *\n * Uses ES2024 native Set methods where available for optimal performance.\n */\n\nexport const set = {\n /**\n * Python set.add() - add element\n */\n add<T>(s: Set<T>, item: T): void {\n s.add(item)\n },\n\n /**\n * Python set.remove() - remove element, raises error if not found\n */\n remove<T>(s: Set<T>, item: T): void {\n if (!s.has(item)) {\n throw new Error(\"KeyError\")\n }\n s.delete(item)\n },\n\n /**\n * Python set.discard() - remove element if present\n */\n discard<T>(s: Set<T>, item: T): void {\n s.delete(item)\n },\n\n /**\n * Python set.pop() - remove and return arbitrary element\n */\n pop<T>(s: Set<T>): T {\n if (s.size === 0) {\n throw new Error(\"pop from an empty set\")\n }\n const item = s.values().next().value as T\n s.delete(item)\n return item\n },\n\n /**\n * Python set.clear() - remove all elements\n */\n clear<T>(s: Set<T>): void {\n s.clear()\n },\n\n /**\n * Python set.copy() - shallow copy\n */\n copy<T>(s: Set<T>): Set<T> {\n return new Set(s)\n },\n\n /**\n * Python set.update() - add elements from iterable\n */\n update<T>(s: Set<T>, ...iterables: Iterable<T>[]): void {\n for (const iterable of iterables) {\n for (const item of iterable) {\n s.add(item)\n }\n }\n },\n\n /**\n * Python set.union() - returns new set with all elements\n * Uses ES2024 Set.prototype.union()\n */\n union<T>(a: Set<T>, ...others: Iterable<T>[]): Set<T> {\n let result: Set<T> = new Set(a)\n for (const other of others) {\n result = result.union(other instanceof Set ? other : new Set(other)) as Set<T>\n }\n return result\n },\n\n /**\n * Python set.intersection() - returns new set with common elements\n * Uses ES2024 Set.prototype.intersection()\n */\n intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n return a.intersection(b)\n },\n\n /**\n * Python set.intersection_update() - keep only common elements\n */\n intersectionUpdate<T>(a: Set<T>, b: Set<T>): void {\n for (const item of a) {\n if (!b.has(item)) a.delete(item)\n }\n },\n\n /**\n * Python set.difference() - returns new set with elements in a but not in b\n * Uses ES2024 Set.prototype.difference()\n */\n difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n return a.difference(b)\n },\n\n /**\n * Python set.difference_update() - remove elements found in b\n */\n differenceUpdate<T>(a: Set<T>, b: Set<T>): void {\n for (const item of b) {\n a.delete(item)\n }\n },\n\n /**\n * Python set.symmetric_difference() - returns new set with elements in either but not both\n * Uses ES2024 Set.prototype.symmetricDifference()\n */\n symmetricDifference<T>(a: Set<T>, b: Set<T>): Set<T> {\n return a.symmetricDifference(b)\n },\n\n /**\n * Python set.symmetric_difference_update() - update with symmetric difference\n * Uses ES2024 Set.prototype.symmetricDifference()\n */\n symmetricDifferenceUpdate<T>(a: Set<T>, b: Set<T>): void {\n const result = a.symmetricDifference(b)\n a.clear()\n for (const item of result) a.add(item)\n },\n\n /**\n * Python set.isSubset() - test if all elements are in other\n * Uses ES2024 Set.prototype.isSubsetOf()\n */\n isSubset<T>(a: Set<T>, b: Set<T>): boolean {\n return a.isSubsetOf(b)\n },\n\n /**\n * Python set.isSuperset() - test if all other elements are in this set\n * Uses ES2024 Set.prototype.isSupersetOf()\n */\n isSuperset<T>(a: Set<T>, b: Set<T>): boolean {\n return a.isSupersetOf(b)\n },\n\n /**\n * Python set.isDisjoint() - test if no common elements\n * Uses ES2024 Set.prototype.isDisjointFrom()\n */\n isDisjoint<T>(a: Set<T>, b: Set<T>): boolean {\n return a.isDisjointFrom(b)\n }\n}\n","/**\n * Python Built-in Functions for TypeScript\n *\n * This module provides Python's built-in functions that are always available\n * without imports. These are the fundamental operations for working with data\n * in Python, including iteration (range, enumerate, zip), aggregation (len,\n * sum, min, max), type conversion (int, str, bool), and more.\n *\n * @example\n * ```typescript\n * // Direct imports\n * import { len, range, sorted, min, max } from \"pythonlib\"\n *\n * // Module imports (like Python)\n * import { chain, combinations } from \"pythonlib/itertools\"\n * import { Counter, defaultdict } from \"pythonlib/collections\"\n *\n * // Module namespaces\n * import { json, re, itertools } from \"pythonlib\"\n * ```\n *\n * @see {@link https://docs.python.org/3/library/functions.html | Python Built-in Functions}\n * @module\n */\n\n// =============================================================================\n// Module imports (for namespace exports)\n// =============================================================================\n\nimport * as itertoolsModule from \"./itertools.js\"\nimport * as functoolsModule from \"./functools.js\"\nimport * as collectionsModule from \"./collections.js\"\nimport * as mathModule from \"./math.js\"\nimport * as randomModule from \"./random.js\"\nimport * as jsonModule from \"./json.js\"\nimport * as osModule from \"./os.js\"\nimport * as datetimeModule from \"./datetime.js\"\nimport * as reModule from \"./re.js\"\nimport * as stringModule from \"./string.js\"\nimport * as core from \"./core.js\"\nimport * as builtins from \"./builtins.js\"\nimport { list as listMethods } from \"./list.js\"\nimport { dict as dictMethods } from \"./dict.js\"\nimport { set as setMethods } from \"./set.js\"\n\n// =============================================================================\n// Module namespace exports (for: import { itertools } from \"pythonlib\")\n// =============================================================================\n\nexport const itertools = itertoolsModule\nexport const functools = functoolsModule\nexport const collections = collectionsModule\nexport const math = mathModule\nexport const random = randomModule\nexport const json = jsonModule\nexport const os = osModule\nexport const datetime = datetimeModule\nexport const re = reModule\nexport const string = {\n ...stringModule.string,\n asciiLowercase: stringModule.asciiLowercase,\n asciiUppercase: stringModule.asciiUppercase,\n asciiLetters: stringModule.asciiLetters,\n digits: stringModule.digits,\n hexDigits: stringModule.hexDigits,\n octDigits: stringModule.octDigits,\n punctuation: stringModule.punctuation,\n whitespace: stringModule.whitespace,\n printable: stringModule.printable,\n capWords: stringModule.capWords,\n Template: stringModule.Template\n}\n\n// =============================================================================\n// Core built-in types with methods (list, dict, set)\n// =============================================================================\n\ntype ListConstructor = {\n <T>(iterable?: Iterable<T>): T[]\n} & typeof listMethods\n\ntype DictConstructor = {\n <K, V>(entries?: Iterable<[K, V]>): Map<K, V>\n} & typeof dictMethods\n\ntype SetConstructor = {\n <T>(iterable?: Iterable<T>): Set<T>\n} & typeof setMethods\n\nexport const list: ListConstructor = Object.assign(\n <T>(iterable?: Iterable<T>): T[] => builtins.list(iterable),\n listMethods\n)\n\nexport const dict: DictConstructor = Object.assign(\n <K, V>(entries?: Iterable<[K, V]>): Map<K, V> => builtins.dict(entries),\n dictMethods\n)\n\nexport const set: SetConstructor = Object.assign(\n <T>(iterable?: Iterable<T>): Set<T> => builtins.set(iterable),\n setMethods\n)\n\n// =============================================================================\n// Core operations (Python-specific semantics)\n// =============================================================================\n\nexport const floorDiv = core.floorDiv\nexport const mod = core.mod\nexport const divMod = core.divMod\nexport const sprintf = core.sprintf\nexport const strFormat = core.strFormat\nexport const slice = core.slice\nexport const at = core.at\nexport const contains = core.contains\nexport const is = core.is\nexport { repeat as repeatValue } from \"./core.js\"\nexport { pow } from \"./core.js\"\n\n// =============================================================================\n// Built-in functions (Python global scope)\n// =============================================================================\n\n// Iteration\nexport const range = builtins.range\nexport const enumerate = builtins.enumerate\nexport const zip = builtins.zip\nexport const iter = builtins.iter\nexport const reversed = builtins.reversed\nexport const sorted = builtins.sorted\nexport const map = builtins.map\nexport const filter = builtins.filter\n\n// Collection constructors\nexport const tuple = builtins.tuple\n\n// Aggregation\nexport const len = builtins.len\nexport const abs = builtins.abs\nexport const min = builtins.min\nexport const max = builtins.max\nexport const sum = builtins.sum\nexport const all = builtins.all\nexport const any = builtins.any\nexport const round = builtins.round\n\n// Character/number conversion\nexport const ord = builtins.ord\nexport const chr = builtins.chr\nexport const hex = builtins.hex\nexport const oct = builtins.oct\nexport const bin = builtins.bin\n\n// Type conversion\nexport const int = builtins.int\nexport const float = builtins.float\nexport const str = builtins.str\nexport const repr = builtins.repr\nexport const bool = builtins.bool\nexport const ascii = builtins.ascii\n\n// Type checking & misc\nexport const isinstance = builtins.isinstance\nexport const type = builtins.type\nexport const input = builtins.input\nexport const format = builtins.format\n\n// Attribute access\nexport const getattr = builtins.getattr\nexport const hasattr = builtins.hasattr\nexport const setattr = builtins.setattr\n"],"mappings":"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","names":["type","len","digits","list","len","dict","set","string","list","dict","set","floorDiv","mod","divMod","sprintf","strFormat","slice","at","contains","is","range","enumerate","zip","iter","reversed","sorted","map","filter","tuple","len","abs","min","max","sum","all","any","round","ord","chr","hex","oct","bin","int","float","str","repr","bool","ascii","isinstance","type","input","format","getattr","hasattr","setattr"]}
|
package/dist/itertools.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/json.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/math.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/os.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { a as altSep, j as chdir, c as curDir, e as environ, d as extSep, h as getCwd, i as getCwdb, g as getenv, l as lineSep, k as listDir, n as makeDirs, m as mkdir, A as name, b as parDir, f as path, p as pathSep, r as remove, t as removeDirs, v as rename, w as renames, x as replace, q as rmdir, s as sep, z as stat, u as unlink, y as walk } from './os-CqGKe872.js';
|
package/dist/os.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/random.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/re.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/string.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|