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.
- package/README.md +41 -138
- package/dist/{chunk-3CSEXTA7.js → chunk-4QG3772L.js} +53 -53
- package/dist/chunk-4QG3772L.js.map +1 -0
- package/dist/{chunk-OMQNGE6T.js → chunk-4SZT4HJI.js} +32 -27
- package/dist/chunk-4SZT4HJI.js.map +1 -0
- package/dist/{chunk-IVYYI2VR.js → chunk-6POEDI34.js} +1 -1
- package/dist/chunk-6POEDI34.js.map +1 -0
- package/dist/{chunk-P3SGIF72.js → chunk-6VQ7ITWO.js} +6 -6
- package/dist/chunk-6VQ7ITWO.js.map +1 -0
- package/dist/{chunk-V63LKSA3.js → chunk-7TH4FCVQ.js} +24 -24
- package/dist/chunk-7TH4FCVQ.js.map +1 -0
- package/dist/{chunk-TJFGYXBJ.js → chunk-BDBX5BG4.js} +63 -61
- package/dist/chunk-BDBX5BG4.js.map +1 -0
- package/dist/{chunk-WAONBJE5.js → chunk-H76SKASU.js} +36 -36
- package/dist/chunk-H76SKASU.js.map +1 -0
- package/dist/{chunk-TOI6IG3T.js → chunk-HQ42WNKZ.js} +43 -16
- package/dist/chunk-HQ42WNKZ.js.map +1 -0
- package/dist/{chunk-HA5Y7PKO.js → chunk-KRRY534Q.js} +36 -35
- package/dist/chunk-KRRY534Q.js.map +1 -0
- package/dist/{chunk-UFMTN4T4.js → chunk-XGT3VOIZ.js} +5 -5
- package/dist/chunk-XGT3VOIZ.js.map +1 -0
- package/dist/{collections-xN9Gi0TA.d.ts → collections-CJur5Wg-.d.ts} +5 -3
- package/dist/collections.d.ts +1 -1
- package/dist/collections.js +1 -1
- package/dist/{datetime-DRwFAiGV.d.ts → datetime-Bpce8gG2.d.ts} +17 -15
- package/dist/datetime.d.ts +1 -1
- package/dist/datetime.js +1 -1
- package/dist/{functools-St5GqpKG.d.ts → functools-NrsZAqJk.d.ts} +42 -26
- package/dist/functools.d.ts +1 -1
- package/dist/functools.js +19 -17
- package/dist/index.d.ts +56 -158
- package/dist/index.js +45 -137
- package/dist/index.js.map +1 -1
- package/dist/{itertools-Bj8XivI6.d.ts → itertools-Sjl1LB_0.d.ts} +35 -17
- package/dist/itertools.d.ts +1 -1
- package/dist/itertools.js +15 -11
- package/dist/{json-Xpk0kwSd.d.ts → json-DAlvCadU.d.ts} +7 -5
- package/dist/json.d.ts +1 -1
- package/dist/json.js +1 -1
- package/dist/{math-BrT4Aw3E.d.ts → math-DwEGjjQ-.d.ts} +2 -0
- package/dist/math.d.ts +1 -1
- package/dist/math.js +1 -1
- package/dist/{os-FRSJbEUH.d.ts → os-C6Nt7Ijx.d.ts} +45 -42
- package/dist/os.d.ts +1 -1
- package/dist/os.js +23 -23
- package/dist/{random-D5S5iSV3.d.ts → random-BJv_rSpL.d.ts} +24 -22
- package/dist/random.d.ts +1 -1
- package/dist/random.js +21 -21
- package/dist/{re-DSxiURqN.d.ts → re-B1CHCgyr.d.ts} +17 -15
- package/dist/re.d.ts +1 -1
- package/dist/re.js +7 -7
- package/dist/string.d.ts +51 -48
- package/dist/string.js +13 -13
- package/package.json +20 -3
- package/dist/chunk-3CSEXTA7.js.map +0 -1
- package/dist/chunk-HA5Y7PKO.js.map +0 -1
- package/dist/chunk-IVYYI2VR.js.map +0 -1
- package/dist/chunk-OMQNGE6T.js.map +0 -1
- package/dist/chunk-P3SGIF72.js.map +0 -1
- package/dist/chunk-TJFGYXBJ.js.map +0 -1
- package/dist/chunk-TOI6IG3T.js.map +0 -1
- package/dist/chunk-UFMTN4T4.js.map +0 -1
- package/dist/chunk-V63LKSA3.js.map +0 -1
- 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"]}
|
|
@@ -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?.
|
|
15
|
+
const sortKeys = options?.sortKeys ?? false;
|
|
16
16
|
const defaultFn = options?.default;
|
|
17
|
-
const ensureAscii = options?.
|
|
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?.
|
|
66
|
-
const parseFloat = options?.
|
|
67
|
-
const parseInt = options?.
|
|
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-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
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
|
|
84
|
+
const fullMatch2 = this._match[0];
|
|
85
85
|
const subMatch = this._match[groupNum];
|
|
86
|
-
if (!
|
|
87
|
-
const offset =
|
|
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
|
|
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
|
|
117
|
+
get lastGroup() {
|
|
118
118
|
if (!this._match.groups) return void 0;
|
|
119
|
-
const lastIdx = this.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
367
|
+
function fullMatch(pattern, string, flags = 0) {
|
|
368
368
|
const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
|
|
369
|
-
return p.
|
|
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
|
|
375
|
+
function findAll(pattern, string, flags = 0) {
|
|
376
376
|
const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
|
|
377
|
-
return p.
|
|
377
|
+
return p.findAll(string);
|
|
378
378
|
}
|
|
379
|
-
function
|
|
379
|
+
function findIter(pattern, string, flags = 0) {
|
|
380
380
|
const p = pattern instanceof Pattern ? pattern : compile(pattern, flags);
|
|
381
|
-
return p.
|
|
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
|
-
|
|
413
|
+
fullMatch,
|
|
414
414
|
split,
|
|
415
|
-
|
|
416
|
-
|
|
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-
|
|
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
|
-
|
|
8
|
+
altSep: () => altSep,
|
|
9
9
|
chdir: () => chdir,
|
|
10
|
-
|
|
10
|
+
curDir: () => curDir,
|
|
11
11
|
environ: () => environ,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
extSep: () => extSep,
|
|
13
|
+
getCwd: () => getCwd,
|
|
14
|
+
getCwdb: () => getCwdb,
|
|
15
15
|
getenv: () => getenv,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
lineSep: () => lineSep,
|
|
17
|
+
listDir: () => listDir,
|
|
18
|
+
makeDirs: () => makeDirs,
|
|
19
19
|
mkdir: () => mkdir,
|
|
20
20
|
name: () => name,
|
|
21
|
-
|
|
21
|
+
parDir: () => parDir,
|
|
22
22
|
path: () => path,
|
|
23
|
-
|
|
23
|
+
pathSep: () => pathSep,
|
|
24
24
|
remove: () => remove,
|
|
25
|
-
|
|
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
|
|
41
|
-
var
|
|
42
|
-
var
|
|
43
|
-
var
|
|
44
|
-
var
|
|
45
|
-
var
|
|
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
|
-
|
|
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
|
-
|
|
100
|
-
return path.
|
|
99
|
+
extName(p) {
|
|
100
|
+
return path.splitExt(p)[1];
|
|
101
101
|
},
|
|
102
102
|
/** Test whether a path is absolute */
|
|
103
|
-
|
|
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
|
-
|
|
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
|
-
|
|
142
|
-
if (path.
|
|
143
|
-
return path.
|
|
141
|
+
absPath(p) {
|
|
142
|
+
if (path.isAbs(p)) {
|
|
143
|
+
return path.normPath(p);
|
|
144
144
|
}
|
|
145
|
-
return path.
|
|
145
|
+
return path.normPath(p);
|
|
146
146
|
},
|
|
147
147
|
/** Return canonical path, eliminating symlinks (stub - just normalizes) */
|
|
148
|
-
|
|
149
|
-
return path.
|
|
148
|
+
realPath(p) {
|
|
149
|
+
return path.absPath(p);
|
|
150
150
|
},
|
|
151
151
|
/** Return relative path from start to path */
|
|
152
|
-
|
|
153
|
-
const pParts = path.
|
|
154
|
-
const startParts = path.
|
|
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
|
-
|
|
169
|
+
commonPath(paths) {
|
|
170
170
|
if (paths.length === 0) {
|
|
171
|
-
throw new Error("
|
|
171
|
+
throw new Error("commonPath() arg is an empty sequence");
|
|
172
172
|
}
|
|
173
|
-
const splitPaths = paths.map((p) => path.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
212
|
+
isFile(_p) {
|
|
212
213
|
return false;
|
|
213
214
|
},
|
|
214
215
|
/** Test if path is a directory (stub - always returns false in browser) */
|
|
215
|
-
|
|
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
|
-
|
|
220
|
+
isLink(_p) {
|
|
220
221
|
return false;
|
|
221
222
|
},
|
|
222
223
|
/** Return size of file (stub - returns 0 in browser) */
|
|
223
|
-
|
|
224
|
+
getSize(_p) {
|
|
224
225
|
return 0;
|
|
225
226
|
},
|
|
226
227
|
/** Return modification time (stub - returns 0 in browser) */
|
|
227
|
-
|
|
228
|
+
getMtime(_p) {
|
|
228
229
|
return 0;
|
|
229
230
|
},
|
|
230
231
|
/** Return access time (stub - returns 0 in browser) */
|
|
231
|
-
|
|
232
|
+
getAtime(_p) {
|
|
232
233
|
return 0;
|
|
233
234
|
},
|
|
234
235
|
/** Return creation time (stub - returns 0 in browser) */
|
|
235
|
-
|
|
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
|
|
242
|
+
function getCwd() {
|
|
241
243
|
if (typeof process !== "undefined") {
|
|
242
244
|
return process.cwd();
|
|
243
245
|
}
|
|
244
246
|
return "/";
|
|
245
247
|
}
|
|
246
|
-
function
|
|
247
|
-
return
|
|
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
|
|
256
|
+
function listDir(_p = ".") {
|
|
255
257
|
return [];
|
|
256
258
|
}
|
|
257
259
|
function mkdir(_p, _mode = 511) {
|
|
258
260
|
}
|
|
259
|
-
function
|
|
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
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
287
|
+
altSep,
|
|
288
|
+
pathSep,
|
|
289
|
+
lineSep,
|
|
290
|
+
curDir,
|
|
291
|
+
parDir,
|
|
292
|
+
extSep,
|
|
291
293
|
path,
|
|
292
|
-
|
|
293
|
-
|
|
294
|
+
getCwd,
|
|
295
|
+
getCwdb,
|
|
294
296
|
chdir,
|
|
295
|
-
|
|
297
|
+
listDir,
|
|
296
298
|
mkdir,
|
|
297
|
-
|
|
299
|
+
makeDirs,
|
|
298
300
|
remove,
|
|
299
301
|
unlink,
|
|
300
302
|
rmdir,
|
|
301
|
-
|
|
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-
|
|
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":[]}
|