pythonlib 0.1.0 → 0.2.0

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.
Files changed (64) hide show
  1. package/README.md +41 -138
  2. package/dist/{chunk-3CSEXTA7.js → chunk-4QG3772L.js} +53 -53
  3. package/dist/chunk-4QG3772L.js.map +1 -0
  4. package/dist/{chunk-OMQNGE6T.js → chunk-4SZT4HJI.js} +32 -27
  5. package/dist/chunk-4SZT4HJI.js.map +1 -0
  6. package/dist/{chunk-IVYYI2VR.js → chunk-6POEDI34.js} +1 -1
  7. package/dist/chunk-6POEDI34.js.map +1 -0
  8. package/dist/{chunk-P3SGIF72.js → chunk-6VQ7ITWO.js} +6 -6
  9. package/dist/chunk-6VQ7ITWO.js.map +1 -0
  10. package/dist/{chunk-V63LKSA3.js → chunk-7TH4FCVQ.js} +24 -24
  11. package/dist/chunk-7TH4FCVQ.js.map +1 -0
  12. package/dist/{chunk-TJFGYXBJ.js → chunk-BDBX5BG4.js} +63 -61
  13. package/dist/chunk-BDBX5BG4.js.map +1 -0
  14. package/dist/{chunk-WAONBJE5.js → chunk-H76SKASU.js} +36 -36
  15. package/dist/chunk-H76SKASU.js.map +1 -0
  16. package/dist/{chunk-TOI6IG3T.js → chunk-HQ42WNKZ.js} +43 -16
  17. package/dist/chunk-HQ42WNKZ.js.map +1 -0
  18. package/dist/{chunk-HA5Y7PKO.js → chunk-KRRY534Q.js} +36 -35
  19. package/dist/chunk-KRRY534Q.js.map +1 -0
  20. package/dist/{chunk-UFMTN4T4.js → chunk-XGT3VOIZ.js} +5 -5
  21. package/dist/chunk-XGT3VOIZ.js.map +1 -0
  22. package/dist/{collections-xN9Gi0TA.d.ts → collections-CJur5Wg-.d.ts} +5 -3
  23. package/dist/collections.d.ts +1 -1
  24. package/dist/collections.js +1 -1
  25. package/dist/{datetime-DRwFAiGV.d.ts → datetime-Bpce8gG2.d.ts} +17 -15
  26. package/dist/datetime.d.ts +1 -1
  27. package/dist/datetime.js +1 -1
  28. package/dist/{functools-St5GqpKG.d.ts → functools-NrsZAqJk.d.ts} +42 -26
  29. package/dist/functools.d.ts +1 -1
  30. package/dist/functools.js +19 -17
  31. package/dist/index.d.ts +56 -158
  32. package/dist/index.js +45 -137
  33. package/dist/index.js.map +1 -1
  34. package/dist/{itertools-Bj8XivI6.d.ts → itertools-Sjl1LB_0.d.ts} +35 -17
  35. package/dist/itertools.d.ts +1 -1
  36. package/dist/itertools.js +15 -11
  37. package/dist/{json-Xpk0kwSd.d.ts → json-DAlvCadU.d.ts} +7 -5
  38. package/dist/json.d.ts +1 -1
  39. package/dist/json.js +1 -1
  40. package/dist/{math-BrT4Aw3E.d.ts → math-DwEGjjQ-.d.ts} +2 -0
  41. package/dist/math.d.ts +1 -1
  42. package/dist/math.js +1 -1
  43. package/dist/{os-FRSJbEUH.d.ts → os-C6Nt7Ijx.d.ts} +45 -42
  44. package/dist/os.d.ts +1 -1
  45. package/dist/os.js +23 -23
  46. package/dist/{random-D5S5iSV3.d.ts → random-BJv_rSpL.d.ts} +24 -22
  47. package/dist/random.d.ts +1 -1
  48. package/dist/random.js +21 -21
  49. package/dist/{re-DSxiURqN.d.ts → re-B1CHCgyr.d.ts} +17 -15
  50. package/dist/re.d.ts +1 -1
  51. package/dist/re.js +7 -7
  52. package/dist/string.d.ts +51 -48
  53. package/dist/string.js +13 -13
  54. package/package.json +20 -3
  55. package/dist/chunk-3CSEXTA7.js.map +0 -1
  56. package/dist/chunk-HA5Y7PKO.js.map +0 -1
  57. package/dist/chunk-IVYYI2VR.js.map +0 -1
  58. package/dist/chunk-OMQNGE6T.js.map +0 -1
  59. package/dist/chunk-P3SGIF72.js.map +0 -1
  60. package/dist/chunk-TJFGYXBJ.js.map +0 -1
  61. package/dist/chunk-TOI6IG3T.js.map +0 -1
  62. package/dist/chunk-UFMTN4T4.js.map +0 -1
  63. package/dist/chunk-V63LKSA3.js.map +0 -1
  64. package/dist/chunk-WAONBJE5.js.map +0 -1
@@ -0,0 +1 @@
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 *\n * @see {@link https://docs.python.org/3/library/functools.html | Python functools documentation}\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/* c8 ignore start - complex utility rarely used directly */\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/* c8 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"]}
@@ -258,4 +258,4 @@ export {
258
258
  prod,
259
259
  math_exports
260
260
  };
261
- //# sourceMappingURL=chunk-IVYYI2VR.js.map
261
+ //# sourceMappingURL=chunk-6POEDI34.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/math.ts"],"sourcesContent":["/**\n * Python math module for TypeScript\n *\n * Provides mathematical functions and constants matching Python's math module.\n * Most functions map directly to JavaScript's Math object.\n *\n * @see {@link https://docs.python.org/3/library/math.html | Python math documentation}\n */\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Mathematical constant π = 3.141592... */\nexport const pi = Math.PI\n\n/** Mathematical constant e = 2.718281... */\nexport const e = Math.E\n\n/** Mathematical constant τ = 2π = 6.283185... */\nexport const tau = 2 * Math.PI\n\n/** Positive infinity */\nexport const inf = Infinity\n\n/** Not a Number (NaN) */\nexport const nan = NaN\n\n// ============================================================================\n// Number-theoretic and representation functions\n// ============================================================================\n\n/** Return the ceiling of x, the smallest integer greater than or equal to x */\nexport function ceil(x: number): number {\n return Math.ceil(x)\n}\n\n/** Return the floor of x, the largest integer less than or equal to x */\nexport function floor(x: number): number {\n return Math.floor(x)\n}\n\n/** Return the truncated integer part of x (rounds toward zero) */\nexport function trunc(x: number): number {\n return Math.trunc(x)\n}\n\n/** Return the absolute value of x */\nexport function fabs(x: number): number {\n return Math.abs(x)\n}\n\n/** Return x with the sign of y */\nexport function copysign(x: number, y: number): number {\n const sign = y < 0 || (y === 0 && 1 / y < 0) ? -1 : 1\n return sign * Math.abs(x)\n}\n\n/** Return the fractional and integer parts of x */\nexport function modf(x: number): [number, number] {\n const intPart = Math.trunc(x)\n const fracPart = x - intPart\n return [fracPart, intPart]\n}\n\n/** Return the greatest common divisor of a and b */\nexport function gcd(a: number, b: number): number {\n a = Math.abs(Math.floor(a))\n b = Math.abs(Math.floor(b))\n while (b) {\n const t = b\n b = a % b\n a = t\n }\n return a\n}\n\n/** Return the least common multiple of a and b */\nexport function lcm(a: number, b: number): number {\n if (a === 0 || b === 0) return 0\n return Math.abs(Math.floor(a) * Math.floor(b)) / gcd(a, b)\n}\n\n/** Return True if x is neither infinity nor NaN */\nexport function isfinite(x: number): boolean {\n return Number.isFinite(x)\n}\n\n/** Return True if x is positive or negative infinity */\nexport function isinf(x: number): boolean {\n return !Number.isFinite(x) && !Number.isNaN(x)\n}\n\n/** Return True if x is NaN */\nexport function isnan(x: number): boolean {\n return Number.isNaN(x)\n}\n\n/** Return True if the values a and b are close to each other */\nexport function isclose(\n a: number,\n b: number,\n rel_tol: number = 1e-9,\n abs_tol: number = 0.0\n): boolean {\n return Math.abs(a - b) <= Math.max(rel_tol * Math.max(Math.abs(a), Math.abs(b)), abs_tol)\n}\n\n// ============================================================================\n// Power and logarithmic functions\n// ============================================================================\n\n/** Return e raised to the power x */\nexport function exp(x: number): number {\n return Math.exp(x)\n}\n\n/** Return e raised to the power x, minus 1 (more accurate for small x) */\nexport function expm1(x: number): number {\n return Math.expm1(x)\n}\n\n/** Return the natural logarithm of x */\nexport function log(x: number, base?: number): number {\n if (base === undefined) {\n return Math.log(x)\n }\n return Math.log(x) / Math.log(base)\n}\n\n/** Return the natural logarithm of 1+x (more accurate for small x) */\nexport function log1p(x: number): number {\n return Math.log1p(x)\n}\n\n/** Return the base-2 logarithm of x */\nexport function log2(x: number): number {\n return Math.log2(x)\n}\n\n/** Return the base-10 logarithm of x */\nexport function log10(x: number): number {\n return Math.log10(x)\n}\n\n/** Return x raised to the power y */\nexport function pow(x: number, y: number): number {\n return Math.pow(x, y)\n}\n\n/** Return the square root of x */\nexport function sqrt(x: number): number {\n return Math.sqrt(x)\n}\n\n/** Return the cube root of x */\nexport function cbrt(x: number): number {\n return Math.cbrt(x)\n}\n\n/** Return the Euclidean norm, sqrt(sum(x**2 for x in args)) */\nexport function hypot(...args: number[]): number {\n return Math.hypot(...args)\n}\n\n// ============================================================================\n// Trigonometric functions\n// ============================================================================\n\n/** Return the sine of x (x in radians) */\nexport function sin(x: number): number {\n return Math.sin(x)\n}\n\n/** Return the cosine of x (x in radians) */\nexport function cos(x: number): number {\n return Math.cos(x)\n}\n\n/** Return the tangent of x (x in radians) */\nexport function tan(x: number): number {\n return Math.tan(x)\n}\n\n/** Return the arc sine of x, in radians */\nexport function asin(x: number): number {\n return Math.asin(x)\n}\n\n/** Return the arc cosine of x, in radians */\nexport function acos(x: number): number {\n return Math.acos(x)\n}\n\n/** Return the arc tangent of x, in radians */\nexport function atan(x: number): number {\n return Math.atan(x)\n}\n\n/** Return atan(y / x), in radians. The result is between -π and π */\nexport function atan2(y: number, x: number): number {\n return Math.atan2(y, x)\n}\n\n// ============================================================================\n// Hyperbolic functions\n// ============================================================================\n\n/** Return the hyperbolic sine of x */\nexport function sinh(x: number): number {\n return Math.sinh(x)\n}\n\n/** Return the hyperbolic cosine of x */\nexport function cosh(x: number): number {\n return Math.cosh(x)\n}\n\n/** Return the hyperbolic tangent of x */\nexport function tanh(x: number): number {\n return Math.tanh(x)\n}\n\n/** Return the inverse hyperbolic sine of x */\nexport function asinh(x: number): number {\n return Math.asinh(x)\n}\n\n/** Return the inverse hyperbolic cosine of x */\nexport function acosh(x: number): number {\n return Math.acosh(x)\n}\n\n/** Return the inverse hyperbolic tangent of x */\nexport function atanh(x: number): number {\n return Math.atanh(x)\n}\n\n// ============================================================================\n// Angular conversion\n// ============================================================================\n\n/** Convert angle x from radians to degrees */\nexport function degrees(x: number): number {\n return (x * 180) / Math.PI\n}\n\n/** Convert angle x from degrees to radians */\nexport function radians(x: number): number {\n return (x * Math.PI) / 180\n}\n\n// ============================================================================\n// Special functions\n// ============================================================================\n\n/** Return the factorial of n as an integer */\nexport function factorial(n: number): number {\n n = Math.floor(n)\n if (n < 0) throw new Error(\"factorial() not defined for negative values\")\n if (n === 0 || n === 1) return 1\n let result = 1\n for (let i = 2; i <= n; i++) {\n result *= i\n }\n return result\n}\n\n/** Return the sum of products of values from iterables (dot product) */\nexport function fsum(iterable: Iterable<number>): number {\n // Use Kahan summation for better precision\n let sum = 0\n let c = 0\n for (const x of iterable) {\n const y = x - c\n const t = sum + y\n c = t - sum - y\n sum = t\n }\n return sum\n}\n\n/** Return the product of all elements in the iterable */\nexport function prod(iterable: Iterable<number>, start: number = 1): number {\n let result = start\n for (const x of iterable) {\n result *= x\n }\n return result\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;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,IAAM,KAAK,KAAK;AAGhB,IAAM,IAAI,KAAK;AAGf,IAAM,MAAM,IAAI,KAAK;AAGrB,IAAM,MAAM;AAGZ,IAAM,MAAM;AAOZ,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,IAAI,CAAC;AACnB;AAGO,SAAS,SAAS,GAAW,GAAmB;AACrD,QAAM,OAAO,IAAI,KAAM,MAAM,KAAK,IAAI,IAAI,IAAK,KAAK;AACpD,SAAO,OAAO,KAAK,IAAI,CAAC;AAC1B;AAGO,SAAS,KAAK,GAA6B;AAChD,QAAM,UAAU,KAAK,MAAM,CAAC;AAC5B,QAAM,WAAW,IAAI;AACrB,SAAO,CAAC,UAAU,OAAO;AAC3B;AAGO,SAAS,IAAI,GAAW,GAAmB;AAChD,MAAI,KAAK,IAAI,KAAK,MAAM,CAAC,CAAC;AAC1B,MAAI,KAAK,IAAI,KAAK,MAAM,CAAC,CAAC;AAC1B,SAAO,GAAG;AACR,UAAM,IAAI;AACV,QAAI,IAAI;AACR,QAAI;AAAA,EACN;AACA,SAAO;AACT;AAGO,SAAS,IAAI,GAAW,GAAmB;AAChD,MAAI,MAAM,KAAK,MAAM,EAAG,QAAO;AAC/B,SAAO,KAAK,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;AAC3D;AAGO,SAAS,SAAS,GAAoB;AAC3C,SAAO,OAAO,SAAS,CAAC;AAC1B;AAGO,SAAS,MAAM,GAAoB;AACxC,SAAO,CAAC,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC;AAC/C;AAGO,SAAS,MAAM,GAAoB;AACxC,SAAO,OAAO,MAAM,CAAC;AACvB;AAGO,SAAS,QACd,GACA,GACA,UAAkB,MAClB,UAAkB,GACT;AACT,SAAO,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,GAAG,OAAO;AAC1F;AAOO,SAAS,IAAI,GAAmB;AACrC,SAAO,KAAK,IAAI,CAAC;AACnB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,IAAI,GAAW,MAAuB;AACpD,MAAI,SAAS,QAAW;AACtB,WAAO,KAAK,IAAI,CAAC;AAAA,EACnB;AACA,SAAO,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI;AACpC;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,IAAI,GAAW,GAAmB;AAChD,SAAO,KAAK,IAAI,GAAG,CAAC;AACtB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,SAAS,MAAwB;AAC/C,SAAO,KAAK,MAAM,GAAG,IAAI;AAC3B;AAOO,SAAS,IAAI,GAAmB;AACrC,SAAO,KAAK,IAAI,CAAC;AACnB;AAGO,SAAS,IAAI,GAAmB;AACrC,SAAO,KAAK,IAAI,CAAC;AACnB;AAGO,SAAS,IAAI,GAAmB;AACrC,SAAO,KAAK,IAAI,CAAC;AACnB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,MAAM,GAAW,GAAmB;AAClD,SAAO,KAAK,MAAM,GAAG,CAAC;AACxB;AAOO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,KAAK,GAAmB;AACtC,SAAO,KAAK,KAAK,CAAC;AACpB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAGO,SAAS,MAAM,GAAmB;AACvC,SAAO,KAAK,MAAM,CAAC;AACrB;AAOO,SAAS,QAAQ,GAAmB;AACzC,SAAQ,IAAI,MAAO,KAAK;AAC1B;AAGO,SAAS,QAAQ,GAAmB;AACzC,SAAQ,IAAI,KAAK,KAAM;AACzB;AAOO,SAAS,UAAU,GAAmB;AAC3C,MAAI,KAAK,MAAM,CAAC;AAChB,MAAI,IAAI,EAAG,OAAM,IAAI,MAAM,6CAA6C;AACxE,MAAI,MAAM,KAAK,MAAM,EAAG,QAAO;AAC/B,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,cAAU;AAAA,EACZ;AACA,SAAO;AACT;AAGO,SAAS,KAAK,UAAoC;AAEvD,MAAI,MAAM;AACV,MAAI,IAAI;AACR,aAAW,KAAK,UAAU;AACxB,UAAM,IAAI,IAAI;AACd,UAAM,IAAI,MAAM;AAChB,QAAI,IAAI,MAAM;AACd,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAGO,SAAS,KAAK,UAA4B,QAAgB,GAAW;AAC1E,MAAI,SAAS;AACb,aAAW,KAAK,UAAU;AACxB,cAAU;AAAA,EACZ;AACA,SAAO;AACT;","names":[]}
@@ -12,9 +12,9 @@ __export(json_exports, {
12
12
  });
13
13
  function dumps(obj, options) {
14
14
  const indent = options?.indent;
15
- const sortKeys = options?.sort_keys ?? false;
15
+ const sortKeys = options?.sortKeys ?? false;
16
16
  const defaultFn = options?.default;
17
- const ensureAscii = options?.ensure_ascii ?? true;
17
+ const ensureAscii = options?.ensureAscii ?? true;
18
18
  const replacer = sortKeys ? (_key, value) => {
19
19
  if (value && typeof value === "object" && !Array.isArray(value)) {
20
20
  const sorted = {};
@@ -62,9 +62,9 @@ function dumps(obj, options) {
62
62
  return result;
63
63
  }
64
64
  function loads(s, options) {
65
- const objectHook = options?.object_hook;
66
- const parseFloat = options?.parse_float;
67
- const parseInt = options?.parse_int;
65
+ const objectHook = options?.objectHook;
66
+ const parseFloat = options?.parseFloatFn;
67
+ const parseInt = options?.parseIntFn;
68
68
  let reviver;
69
69
  if (objectHook || parseFloat || parseInt) {
70
70
  reviver = (key, value) => {
@@ -104,4 +104,4 @@ export {
104
104
  load,
105
105
  json_exports
106
106
  };
107
- //# sourceMappingURL=chunk-P3SGIF72.js.map
107
+ //# sourceMappingURL=chunk-6VQ7ITWO.js.map
@@ -0,0 +1 @@
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 */\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 /* c8 ignore start - error handling for invalid JSON */\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 /* c8 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 /* c8 ignore start - advanced custom parser hooks */\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 /* c8 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;AA0CO,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":[]}
@@ -19,9 +19,9 @@ __export(re_exports, {
19
19
  UNICODE: () => UNICODE,
20
20
  compile: () => compile,
21
21
  escape: () => escape,
22
- findall: () => findall,
23
- finditer: () => finditer,
24
- fullmatch: () => fullmatch,
22
+ findAll: () => findAll,
23
+ findIter: () => findIter,
24
+ fullMatch: () => fullMatch,
25
25
  match: () => match,
26
26
  purge: () => purge,
27
27
  search: () => search,
@@ -68,7 +68,7 @@ var Match = class {
68
68
  return result;
69
69
  }
70
70
  /** Return a dictionary of named groups */
71
- groupdict(defaultValue) {
71
+ groupDict(defaultValue) {
72
72
  const groups = this._match.groups ?? {};
73
73
  const result = {};
74
74
  for (const [key, value] of Object.entries(groups)) {
@@ -81,10 +81,10 @@ var Match = class {
81
81
  if (groupNum === 0) {
82
82
  return this._match.index;
83
83
  }
84
- const fullMatch = this._match[0];
84
+ const fullMatch2 = this._match[0];
85
85
  const subMatch = this._match[groupNum];
86
- if (!fullMatch || !subMatch) return -1;
87
- const offset = fullMatch.indexOf(subMatch);
86
+ if (!fullMatch2 || !subMatch) return -1;
87
+ const offset = fullMatch2.indexOf(subMatch);
88
88
  return offset >= 0 ? this._match.index + offset : -1;
89
89
  }
90
90
  /** Return the end index of the match */
@@ -107,16 +107,16 @@ var Match = class {
107
107
  return this._endpos;
108
108
  }
109
109
  /** Return the last matched group index */
110
- get lastindex() {
110
+ get lastIndex() {
111
111
  for (let i = this._match.length - 1; i > 0; i--) {
112
112
  if (this._match[i] !== void 0) return i;
113
113
  }
114
114
  return void 0;
115
115
  }
116
116
  /** Return the name of the last matched group */
117
- get lastgroup() {
117
+ get lastGroup() {
118
118
  if (!this._match.groups) return void 0;
119
- const lastIdx = this.lastindex;
119
+ const lastIdx = this.lastIndex;
120
120
  if (lastIdx === void 0) return void 0;
121
121
  let idx = 1;
122
122
  for (const name of Object.keys(this._match.groups)) {
@@ -195,7 +195,7 @@ var Pattern = class {
195
195
  return null;
196
196
  }
197
197
  /** Match pattern against entire string */
198
- fullmatch(string, pos = 0, endpos) {
198
+ fullMatch(string, pos = 0, endpos) {
199
199
  const searchStr = endpos !== void 0 ? string.slice(0, endpos) : string;
200
200
  const searchFrom = searchStr.slice(pos);
201
201
  const regex = new RegExp("^(?:" + this._regex.source + ")$", this._regex.flags);
@@ -231,7 +231,7 @@ var Pattern = class {
231
231
  return result;
232
232
  }
233
233
  /** Find all matches */
234
- findall(string, pos = 0, endpos) {
234
+ findAll(string, pos = 0, endpos) {
235
235
  const searchStr = endpos !== void 0 ? string.slice(0, endpos) : string;
236
236
  const searchFrom = searchStr.slice(pos);
237
237
  const regex = new RegExp(this._regex.source, this._regex.flags + "g");
@@ -249,7 +249,7 @@ var Pattern = class {
249
249
  return results;
250
250
  }
251
251
  /** Find all matches as iterator */
252
- *finditer(string, pos = 0, endpos) {
252
+ *findIter(string, pos = 0, endpos) {
253
253
  const searchStr = endpos !== void 0 ? string.slice(0, endpos) : string;
254
254
  const searchFrom = searchStr.slice(pos);
255
255
  const regex = new RegExp(this._regex.source, this._regex.flags + "g");
@@ -335,7 +335,7 @@ var Pattern = class {
335
335
  return count;
336
336
  }
337
337
  /** Return named groups mapping */
338
- get groupindex() {
338
+ get groupIndex() {
339
339
  const result = {};
340
340
  let groupNum = 0;
341
341
  const regex = /\(\?P?<(\w+)>/g;
@@ -364,21 +364,21 @@ function match(pattern, string, flags = 0) {
364
364
  const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
365
365
  return p.match(string);
366
366
  }
367
- function fullmatch(pattern, string, flags = 0) {
367
+ function fullMatch(pattern, string, flags = 0) {
368
368
  const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
369
- return p.fullmatch(string);
369
+ return p.fullMatch(string);
370
370
  }
371
371
  function split(pattern, string, maxsplit = 0, flags = 0) {
372
372
  const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
373
373
  return p.split(string, maxsplit);
374
374
  }
375
- function findall(pattern, string, flags = 0) {
375
+ function findAll(pattern, string, flags = 0) {
376
376
  const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
377
- return p.findall(string);
377
+ return p.findAll(string);
378
378
  }
379
- function finditer(pattern, string, flags = 0) {
379
+ function findIter(pattern, string, flags = 0) {
380
380
  const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
381
- return p.finditer(string);
381
+ return p.findIter(string);
382
382
  }
383
383
  function sub(pattern, repl, string, count = 0, flags = 0) {
384
384
  const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
@@ -410,14 +410,14 @@ export {
410
410
  compile,
411
411
  search,
412
412
  match,
413
- fullmatch,
413
+ fullMatch,
414
414
  split,
415
- findall,
416
- finditer,
415
+ findAll,
416
+ findIter,
417
417
  sub,
418
418
  subn,
419
419
  escape,
420
420
  purge,
421
421
  re_exports
422
422
  };
423
- //# sourceMappingURL=chunk-V63LKSA3.js.map
423
+ //# sourceMappingURL=chunk-7TH4FCVQ.js.map
@@ -0,0 +1 @@
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 * Uses JavaScript's RegExp as the underlying engine.\n *\n * Note: Some Python regex features are not supported in JavaScript:\n * - Lookbehind assertions (limited support in modern JS)\n * - Named groups use different syntax (?P<name>...) vs (?<name>...)\n * - Verbose mode (x flag) is not supported\n *\n * @see {@link https://docs.python.org/3/library/re.html | Python re documentation}\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"]}
@@ -5,24 +5,24 @@ import {
5
5
  // src/os.ts
6
6
  var os_exports = {};
7
7
  __export(os_exports, {
8
- altsep: () => altsep,
8
+ altSep: () => altSep,
9
9
  chdir: () => chdir,
10
- curdir: () => curdir,
10
+ curDir: () => curDir,
11
11
  environ: () => environ,
12
- extsep: () => extsep,
13
- getcwd: () => getcwd,
14
- getcwdb: () => getcwdb,
12
+ extSep: () => extSep,
13
+ getCwd: () => getCwd,
14
+ getCwdb: () => getCwdb,
15
15
  getenv: () => getenv,
16
- linesep: () => linesep,
17
- listdir: () => listdir,
18
- makedirs: () => makedirs,
16
+ lineSep: () => lineSep,
17
+ listDir: () => listDir,
18
+ makeDirs: () => makeDirs,
19
19
  mkdir: () => mkdir,
20
20
  name: () => name,
21
- pardir: () => pardir,
21
+ parDir: () => parDir,
22
22
  path: () => path,
23
- pathsep: () => pathsep,
23
+ pathSep: () => pathSep,
24
24
  remove: () => remove,
25
- removedirs: () => removedirs,
25
+ removeDirs: () => removeDirs,
26
26
  rename: () => rename,
27
27
  renames: () => renames,
28
28
  replace: () => replace,
@@ -37,12 +37,12 @@ function getenv(key, defaultValue) {
37
37
  return environ[key] ?? defaultValue;
38
38
  }
39
39
  var sep = typeof process !== "undefined" && process.platform === "win32" ? "\\" : "/";
40
- var altsep = typeof process !== "undefined" && process.platform === "win32" ? "/" : null;
41
- var pathsep = typeof process !== "undefined" && process.platform === "win32" ? ";" : ":";
42
- var linesep = typeof process !== "undefined" && process.platform === "win32" ? "\r\n" : "\n";
43
- var curdir = ".";
44
- var pardir = "..";
45
- var extsep = ".";
40
+ var altSep = typeof process !== "undefined" && process.platform === "win32" ? "/" : null;
41
+ var pathSep = typeof process !== "undefined" && process.platform === "win32" ? ";" : ":";
42
+ var lineSep = typeof process !== "undefined" && process.platform === "win32" ? "\r\n" : "\n";
43
+ var curDir = ".";
44
+ var parDir = "..";
45
+ var extSep = ".";
46
46
  var path = {
47
47
  /** Join path components intelligently */
48
48
  join(...paths) {
@@ -84,7 +84,7 @@ var path = {
84
84
  return [path.dirname(p), path.basename(p)];
85
85
  },
86
86
  /** Split pathname into root and extension */
87
- splitext(p) {
87
+ splitExt(p) {
88
88
  const base = path.basename(p);
89
89
  const dotIdx = base.lastIndexOf(".");
90
90
  if (dotIdx <= 0) {
@@ -96,18 +96,18 @@ var path = {
96
96
  return [dir ? path.join(dir, root) : root, ext];
97
97
  },
98
98
  /** Return the extension of pathname */
99
- extname(p) {
100
- return path.splitext(p)[1];
99
+ extName(p) {
100
+ return path.splitExt(p)[1];
101
101
  },
102
102
  /** Test whether a path is absolute */
103
- isabs(p) {
103
+ isAbs(p) {
104
104
  if (p.startsWith("/")) return true;
105
105
  if (p.length >= 3 && p[1] === ":" && (p[2] === "/" || p[2] === "\\")) return true;
106
106
  if (p.startsWith("\\\\")) return true;
107
107
  return false;
108
108
  },
109
109
  /** Normalize a pathname */
110
- normpath(p) {
110
+ normPath(p) {
111
111
  if (!p) return ".";
112
112
  let prefix = "";
113
113
  if (p.length >= 2 && p[1] === ":") {
@@ -138,20 +138,20 @@ var path = {
138
138
  return normalized || ".";
139
139
  },
140
140
  /** Return normalized absolutized version of pathname */
141
- abspath(p) {
142
- if (path.isabs(p)) {
143
- return path.normpath(p);
141
+ absPath(p) {
142
+ if (path.isAbs(p)) {
143
+ return path.normPath(p);
144
144
  }
145
- return path.normpath(p);
145
+ return path.normPath(p);
146
146
  },
147
147
  /** Return canonical path, eliminating symlinks (stub - just normalizes) */
148
- realpath(p) {
149
- return path.abspath(p);
148
+ realPath(p) {
149
+ return path.absPath(p);
150
150
  },
151
151
  /** Return relative path from start to path */
152
- relpath(p, start = ".") {
153
- const pParts = path.normpath(p).split(/[/\\]/).filter(Boolean);
154
- const startParts = path.normpath(start).split(/[/\\]/).filter(Boolean);
152
+ relPath(p, start = ".") {
153
+ const pParts = path.normPath(p).split(/[/\\]/).filter(Boolean);
154
+ const startParts = path.normPath(start).split(/[/\\]/).filter(Boolean);
155
155
  let commonLen = 0;
156
156
  const minLen = Math.min(pParts.length, startParts.length);
157
157
  for (let i = 0; i < minLen; i++) {
@@ -166,11 +166,11 @@ var path = {
166
166
  return result.join(sep) || ".";
167
167
  },
168
168
  /** Return common path prefix */
169
- commonpath(paths) {
169
+ commonPath(paths) {
170
170
  if (paths.length === 0) {
171
- throw new Error("commonpath() arg is an empty sequence");
171
+ throw new Error("commonPath() arg is an empty sequence");
172
172
  }
173
- const splitPaths = paths.map((p) => path.normpath(p).split(/[/\\]/));
173
+ const splitPaths = paths.map((p) => path.normPath(p).split(/[/\\]/));
174
174
  const first = splitPaths[0];
175
175
  let commonLen = first.length;
176
176
  for (let i = 1; i < splitPaths.length; i++) {
@@ -186,7 +186,7 @@ var path = {
186
186
  return first.slice(0, commonLen).join(sep) || sep;
187
187
  },
188
188
  /** Expand ~ and ~user (stub - returns unchanged in browser) */
189
- expanduser(p) {
189
+ expandUser(p) {
190
190
  if (!p.startsWith("~")) return p;
191
191
  const home = typeof process !== "undefined" ? process.env.HOME ?? process.env.USERPROFILE : void 0;
192
192
  if (!home) return p;
@@ -196,74 +196,76 @@ var path = {
196
196
  return p;
197
197
  },
198
198
  /** Expand shell variables (stub - returns unchanged) */
199
- expandvars(p) {
199
+ expandVars(p) {
200
200
  return p.replace(/\$(\w+)|\$\{(\w+)\}/g, (_, v1, v2) => {
201
201
  const key = v1 || v2;
202
202
  return environ[key] ?? "";
203
203
  });
204
204
  },
205
+ /* c8 ignore start - browser stubs */
205
206
  /* eslint-disable @typescript-eslint/no-unused-vars */
206
207
  /** Test if path exists (stub - always returns false in browser) */
207
208
  exists(_p) {
208
209
  return false;
209
210
  },
210
211
  /** Test if path is a file (stub - always returns false in browser) */
211
- isfile(_p) {
212
+ isFile(_p) {
212
213
  return false;
213
214
  },
214
215
  /** Test if path is a directory (stub - always returns false in browser) */
215
- isdir(_p) {
216
+ isDir(_p) {
216
217
  return false;
217
218
  },
218
219
  /** Test if path is a symbolic link (stub - always returns false in browser) */
219
- islink(_p) {
220
+ isLink(_p) {
220
221
  return false;
221
222
  },
222
223
  /** Return size of file (stub - returns 0 in browser) */
223
- getsize(_p) {
224
+ getSize(_p) {
224
225
  return 0;
225
226
  },
226
227
  /** Return modification time (stub - returns 0 in browser) */
227
- getmtime(_p) {
228
+ getMtime(_p) {
228
229
  return 0;
229
230
  },
230
231
  /** Return access time (stub - returns 0 in browser) */
231
- getatime(_p) {
232
+ getAtime(_p) {
232
233
  return 0;
233
234
  },
234
235
  /** Return creation time (stub - returns 0 in browser) */
235
- getctime(_p) {
236
+ getCtime(_p) {
236
237
  return 0;
237
238
  }
238
239
  /* eslint-enable @typescript-eslint/no-unused-vars */
240
+ /* c8 ignore stop */
239
241
  };
240
- function getcwd() {
242
+ function getCwd() {
241
243
  if (typeof process !== "undefined") {
242
244
  return process.cwd();
243
245
  }
244
246
  return "/";
245
247
  }
246
- function getcwdb() {
247
- return getcwd();
248
+ function getCwdb() {
249
+ return getCwd();
248
250
  }
249
251
  function chdir(p) {
250
252
  if (typeof process !== "undefined") {
251
253
  process.chdir(p);
252
254
  }
253
255
  }
254
- function listdir(_p = ".") {
256
+ function listDir(_p = ".") {
255
257
  return [];
256
258
  }
257
259
  function mkdir(_p, _mode = 511) {
258
260
  }
259
- function makedirs(_p, _mode = 511, _existOk = false) {
261
+ function makeDirs(_p, _mode = 511, _existOk = false) {
260
262
  }
261
263
  function remove(_p) {
262
264
  }
263
265
  var unlink = remove;
264
266
  function rmdir(_p) {
265
267
  }
266
- function removedirs(_p) {
268
+ function removeDirs(_p) {
267
269
  }
268
270
  function rename(_src, _dst) {
269
271
  }
@@ -282,23 +284,23 @@ export {
282
284
  environ,
283
285
  getenv,
284
286
  sep,
285
- altsep,
286
- pathsep,
287
- linesep,
288
- curdir,
289
- pardir,
290
- extsep,
287
+ altSep,
288
+ pathSep,
289
+ lineSep,
290
+ curDir,
291
+ parDir,
292
+ extSep,
291
293
  path,
292
- getcwd,
293
- getcwdb,
294
+ getCwd,
295
+ getCwdb,
294
296
  chdir,
295
- listdir,
297
+ listDir,
296
298
  mkdir,
297
- makedirs,
299
+ makeDirs,
298
300
  remove,
299
301
  unlink,
300
302
  rmdir,
301
- removedirs,
303
+ removeDirs,
302
304
  rename,
303
305
  renames,
304
306
  replace,
@@ -307,4 +309,4 @@ export {
307
309
  name,
308
310
  os_exports
309
311
  };
310
- //# sourceMappingURL=chunk-TJFGYXBJ.js.map
312
+ //# sourceMappingURL=chunk-BDBX5BG4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/os.ts"],"sourcesContent":["/**\n * Python os module for TypeScript\n *\n * Provides operating system interface functions matching Python's os module.\n * Note: This is a browser-compatible subset. Some functions are stubs.\n *\n * @see {@link https://docs.python.org/3/library/os.html | Python os documentation}\n * @see {@link https://docs.python.org/3/library/os.path.html | Python os.path documentation}\n */\n\n// ============================================================================\n// Environment variables\n// ============================================================================\n\n/** Environment variables (browser-safe empty object or Node's process.env) */\nexport const environ: Record<string, string | undefined> =\n typeof process !== \"undefined\" ? process.env : {}\n\n/** Get an environment variable */\nexport function getenv(key: string, defaultValue?: string): string | undefined {\n return environ[key] ?? defaultValue\n}\n\n// ============================================================================\n// Path separator constants\n// ============================================================================\n\n/** Path separator for the current platform */\nexport const sep = typeof process !== \"undefined\" && process.platform === \"win32\" ? \"\\\\\" : \"/\"\n\n/** Alternative path separator (Windows has both / and \\) */\nexport const altSep = typeof process !== \"undefined\" && process.platform === \"win32\" ? \"/\" : null\n\n/** Path list separator (: on Unix, ; on Windows) */\nexport const pathSep = typeof process !== \"undefined\" && process.platform === \"win32\" ? \";\" : \":\"\n\n/** Line separator */\nexport const lineSep =\n typeof process !== \"undefined\" && process.platform === \"win32\" ? \"\\r\\n\" : \"\\n\"\n\n/** Current directory string */\nexport const curDir = \".\"\n\n/** Parent directory string */\nexport const parDir = \"..\"\n\n/** Extension separator */\nexport const extSep = \".\"\n\n// ============================================================================\n// os.path module\n// ============================================================================\n\nexport const path = {\n /** Join path components intelligently */\n join(...paths: string[]): string {\n if (paths.length === 0) return \"\"\n if (paths.length === 1) return paths[0] ?? \"\"\n\n let result = paths[0] ?? \"\"\n for (let i = 1; i < paths.length; i++) {\n const p = paths[i] ?? \"\"\n if (p.startsWith(\"/\") || (p.length > 1 && p[1] === \":\")) {\n // Absolute path - start fresh\n result = p\n } else if (result === \"\" || result.endsWith(\"/\") || result.endsWith(\"\\\\\")) {\n result += p\n } else {\n result += sep + p\n }\n }\n return result\n },\n\n /** Return the base name of pathname */\n basename(p: string, suffix?: string): string {\n // Remove trailing slashes\n let s = p.replace(/[/\\\\]+$/, \"\")\n // Get last component\n const idx = Math.max(s.lastIndexOf(\"/\"), s.lastIndexOf(\"\\\\\"))\n s = idx >= 0 ? s.slice(idx + 1) : s\n // Remove suffix if provided\n if (suffix && s.endsWith(suffix)) {\n s = s.slice(0, -suffix.length)\n }\n return s\n },\n\n /** Return the directory name of pathname */\n dirname(p: string): string {\n // Remove trailing slashes\n const s = p.replace(/[/\\\\]+$/, \"\")\n const idx = Math.max(s.lastIndexOf(\"/\"), s.lastIndexOf(\"\\\\\"))\n if (idx < 0) return \"\"\n if (idx === 0) return s[0] ?? \"\"\n return s.slice(0, idx)\n },\n\n /** Split pathname into (head, tail) */\n split(p: string): [string, string] {\n return [path.dirname(p), path.basename(p)]\n },\n\n /** Split pathname into root and extension */\n splitExt(p: string): [string, string] {\n const base = path.basename(p)\n const dotIdx = base.lastIndexOf(\".\")\n if (dotIdx <= 0) {\n return [p, \"\"]\n }\n const dir = path.dirname(p)\n const root = base.slice(0, dotIdx)\n const ext = base.slice(dotIdx)\n return [dir ? path.join(dir, root) : root, ext]\n },\n\n /** Return the extension of pathname */\n extName(p: string): string {\n return path.splitExt(p)[1]\n },\n\n /** Test whether a path is absolute */\n isAbs(p: string): boolean {\n if (p.startsWith(\"/\")) return true\n // Windows: C:\\ or C:/\n if (p.length >= 3 && p[1] === \":\" && (p[2] === \"/\" || p[2] === \"\\\\\")) return true\n // Windows UNC: \\\\server\\share\n if (p.startsWith(\"\\\\\\\\\")) return true\n return false\n },\n\n /** Normalize a pathname */\n normPath(p: string): string {\n if (!p) return \".\"\n\n // Handle Windows drive letter\n let prefix = \"\"\n if (p.length >= 2 && p[1] === \":\") {\n prefix = p.slice(0, 2)\n p = p.slice(2)\n }\n\n // Replace backslashes with forward slashes for processing\n const isWin = p.includes(\"\\\\\")\n p = p.replace(/\\\\/g, \"/\")\n\n // Split and process\n const isAbsolute = p.startsWith(\"/\")\n const parts = p.split(\"/\").filter((part) => part && part !== \".\")\n const result: string[] = []\n\n for (const part of parts) {\n if (part === \"..\") {\n if (result.length > 0 && result[result.length - 1] !== \"..\") {\n result.pop()\n } else if (!isAbsolute) {\n result.push(\"..\")\n }\n } else {\n result.push(part)\n }\n }\n\n let normalized = result.join(isWin ? \"\\\\\" : \"/\")\n if (isAbsolute) {\n normalized = (isWin ? \"\\\\\" : \"/\") + normalized\n }\n normalized = prefix + normalized\n\n return normalized || \".\"\n },\n\n /** Return normalized absolutized version of pathname */\n absPath(p: string): string {\n if (path.isAbs(p)) {\n return path.normPath(p)\n }\n // In browser, we can't get cwd, so just normalize\n return path.normPath(p)\n },\n\n /** Return canonical path, eliminating symlinks (stub - just normalizes) */\n realPath(p: string): string {\n return path.absPath(p)\n },\n\n /** Return relative path from start to path */\n relPath(p: string, start: string = \".\"): string {\n const pParts = path.normPath(p).split(/[/\\\\]/).filter(Boolean)\n const startParts = path.normPath(start).split(/[/\\\\]/).filter(Boolean)\n\n // Find common prefix length\n let commonLen = 0\n const minLen = Math.min(pParts.length, startParts.length)\n for (let i = 0; i < minLen; i++) {\n if (pParts[i] === startParts[i]) {\n commonLen++\n } else {\n break\n }\n }\n\n // Build relative path\n const upCount = startParts.length - commonLen\n const result = [...Array<string>(upCount).fill(\"..\"), ...pParts.slice(commonLen)]\n return result.join(sep) || \".\"\n },\n\n /** Return common path prefix */\n commonPath(paths: string[]): string {\n if (paths.length === 0) {\n throw new Error(\"commonPath() arg is an empty sequence\")\n }\n\n const splitPaths = paths.map((p) => path.normPath(p).split(/[/\\\\]/))\n const first = splitPaths[0] as string[]\n let commonLen = first.length\n\n for (let i = 1; i < splitPaths.length; i++) {\n const parts = splitPaths[i] as string[]\n commonLen = Math.min(commonLen, parts.length)\n for (let j = 0; j < commonLen; j++) {\n if (parts[j] !== first[j]) {\n commonLen = j\n break\n }\n }\n }\n\n return first.slice(0, commonLen).join(sep) || sep\n },\n\n /** Expand ~ and ~user (stub - returns unchanged in browser) */\n expandUser(p: string): string {\n if (!p.startsWith(\"~\")) return p\n const home =\n typeof process !== \"undefined\" ? (process.env.HOME ?? process.env.USERPROFILE) : undefined\n if (!home) return p\n if (p === \"~\" || p.startsWith(\"~/\") || p.startsWith(\"~\\\\\")) {\n return home + p.slice(1)\n }\n return p\n },\n\n /** Expand shell variables (stub - returns unchanged) */\n expandVars(p: string): string {\n // Simple $VAR and ${VAR} expansion\n return p.replace(/\\$(\\w+)|\\$\\{(\\w+)\\}/g, (_, v1: string, v2: string) => {\n const key = v1 || v2\n return environ[key] ?? \"\"\n })\n },\n\n /* c8 ignore start - browser stubs */\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /** Test if path exists (stub - always returns false in browser) */\n exists(_p: string): boolean {\n return false\n },\n\n /** Test if path is a file (stub - always returns false in browser) */\n isFile(_p: string): boolean {\n return false\n },\n\n /** Test if path is a directory (stub - always returns false in browser) */\n isDir(_p: string): boolean {\n return false\n },\n\n /** Test if path is a symbolic link (stub - always returns false in browser) */\n isLink(_p: string): boolean {\n return false\n },\n\n /** Return size of file (stub - returns 0 in browser) */\n getSize(_p: string): number {\n return 0\n },\n\n /** Return modification time (stub - returns 0 in browser) */\n getMtime(_p: string): number {\n return 0\n },\n\n /** Return access time (stub - returns 0 in browser) */\n getAtime(_p: string): number {\n return 0\n },\n\n /** Return creation time (stub - returns 0 in browser) */\n getCtime(_p: string): number {\n return 0\n }\n /* eslint-enable @typescript-eslint/no-unused-vars */\n /* c8 ignore stop */\n}\n\n// ============================================================================\n// Process functions (stubs for browser compatibility)\n// ============================================================================\n\n/** Get current working directory */\nexport function getCwd(): string {\n if (typeof process !== \"undefined\") {\n return process.cwd()\n }\n return \"/\"\n}\n\n/** Get current working directory as bytes (same as getCwd in TS) */\nexport function getCwdb(): string {\n return getCwd()\n}\n\n/** Change current working directory (stub in browser) */\nexport function chdir(p: string): void {\n if (typeof process !== \"undefined\") {\n process.chdir(p)\n }\n}\n\n/* c8 ignore start - browser stubs for filesystem operations */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/** List directory contents (stub - returns empty array in browser) */\nexport function listDir(_p: string = \".\"): string[] {\n return []\n}\n\n/** Create a directory (stub in browser) */\nexport function mkdir(_p: string, _mode: number = 0o777): void {\n // No-op in browser\n}\n\n/** Create a directory and parents (stub in browser) */\nexport function makeDirs(_p: string, _mode: number = 0o777, _existOk: boolean = false): void {\n // No-op in browser\n}\n\n/** Remove a file (stub in browser) */\nexport function remove(_p: string): void {\n // No-op in browser\n}\n\n/** Remove a file (alias for remove) */\nexport const unlink = remove\n\n/** Remove a directory (stub in browser) */\nexport function rmdir(_p: string): void {\n // No-op in browser\n}\n\n/** Remove directory tree (stub in browser) */\nexport function removeDirs(_p: string): void {\n // No-op in browser\n}\n\n/** Rename a file or directory (stub in browser) */\nexport function rename(_src: string, _dst: string): void {\n // No-op in browser\n}\n\n/** Rename with automatic directory creation (stub in browser) */\nexport function renames(_src: string, _dst: string): void {\n // No-op in browser\n}\n\n/** Replace file (stub in browser) */\nexport function replace(_src: string, _dst: string): void {\n // No-op in browser\n}\n\n/** Walk directory tree (stub - yields nothing in browser) */\nexport function* walk(\n _top: string,\n _options?: { topdown?: boolean; followlinks?: boolean }\n): Generator<[string, string[], string[]]> {\n // No-op in browser\n}\n\n/** Get file stat (stub in browser) */\nexport function stat(_p: string): {\n st_mode: number\n st_size: number\n st_mtime: number\n st_atime: number\n st_ctime: number\n} {\n return { st_mode: 0, st_size: 0, st_mtime: 0, st_atime: 0, st_ctime: 0 }\n}\n/* eslint-enable @typescript-eslint/no-unused-vars */\n/* c8 ignore stop */\n\n// ============================================================================\n// Name and platform info\n// ============================================================================\n\n/** Operating system name */\nexport const name: string =\n typeof process !== \"undefined\" && process.platform === \"win32\" ? \"nt\" : \"posix\"\n"],"mappings":"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","names":[]}