pythonlib 1.0.1 → 2.0.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 (150) hide show
  1. package/README.md +3 -1
  2. package/dist/base64-C_am75Sv.d.ts +165 -0
  3. package/dist/base64.d.ts +1 -0
  4. package/dist/base64.js +37 -0
  5. package/dist/chunk-2YTO24B5.js +78 -0
  6. package/dist/chunk-3CLXPGAB.js +237 -0
  7. package/dist/{chunk-H76SKASU.js → chunk-3M3PB4RO.js} +4 -6
  8. package/dist/chunk-5OKGPZBQ.js +1106 -0
  9. package/dist/chunk-5VAHUJNC.js +348 -0
  10. package/dist/chunk-B5AUEOAH.js +193 -0
  11. package/dist/chunk-B5LQJODJ.js +37 -0
  12. package/dist/{chunk-HQ42WNKZ.js → chunk-BCMGGBWG.js} +2 -5
  13. package/dist/chunk-BCVIH2BN.js +175 -0
  14. package/dist/{chunk-EE7SK2GV.js → chunk-D35YI363.js} +15 -12
  15. package/dist/{chunk-7TH4FCVQ.js → chunk-ETBW6XNR.js} +3 -4
  16. package/dist/chunk-FCJ7E4OE.js +250 -0
  17. package/dist/chunk-HSTC277I.js +255 -0
  18. package/dist/chunk-IANXD4D4.js +250 -0
  19. package/dist/{chunk-4KYJT3DR.js → chunk-JAUU3HMH.js} +1 -2
  20. package/dist/chunk-JJKTRIVO.js +262 -0
  21. package/dist/chunk-KKHKTQNN.js +361 -0
  22. package/dist/chunk-KKJHGY4C.js +551 -0
  23. package/dist/chunk-LHPQS75Z.js +192 -0
  24. package/dist/{chunk-LWO6BIAD.js → chunk-LK2L2TFG.js} +5 -6
  25. package/dist/chunk-LLZFLQS6.js +280 -0
  26. package/dist/chunk-LTXTS7RP.js +154 -0
  27. package/dist/{chunk-4QG3772L.js → chunk-LWYBTWBZ.js} +2 -3
  28. package/dist/{chunk-6ZAJ37MR.js → chunk-MFKIEN7N.js} +3 -3
  29. package/dist/{chunk-PZ5AY32C.js → chunk-MLKGABMK.js} +0 -1
  30. package/dist/chunk-OZRS5PC4.js +312 -0
  31. package/dist/chunk-PWA3YQZU.js +346 -0
  32. package/dist/{chunk-6POEDI34.js → chunk-QKJBQKPY.js} +1 -2
  33. package/dist/chunk-RB6BYCIQ.js +141 -0
  34. package/dist/chunk-U4X5DEIP.js +188 -0
  35. package/dist/chunk-UGZ5OY5Z.js +165 -0
  36. package/dist/chunk-WTZSAITC.js +82 -0
  37. package/dist/{collections-CJur5Wg-.d.ts → collections-BthXtkEp.d.ts} +5 -1
  38. package/dist/collections.d.ts +1 -1
  39. package/dist/collections.js +2 -3
  40. package/dist/copy-6ZaZ__ge.d.ts +59 -0
  41. package/dist/copy.d.ts +1 -0
  42. package/dist/copy.js +9 -0
  43. package/dist/{datetime-Bpce8gG2.d.ts → datetime-BM_IjhTq.d.ts} +3 -1
  44. package/dist/datetime.d.ts +1 -1
  45. package/dist/datetime.js +2 -3
  46. package/dist/{functools-NrsZAqJk.d.ts → functools-uIa5g75p.d.ts} +3 -1
  47. package/dist/functools.d.ts +1 -1
  48. package/dist/functools.js +2 -3
  49. package/dist/glob.browser-B6d_YdV5.d.ts +50 -0
  50. package/dist/glob.browser.d.ts +1 -0
  51. package/dist/glob.browser.js +15 -0
  52. package/dist/glob.node-wn5ehtyM.d.ts +80 -0
  53. package/dist/glob.node.d.ts +1 -0
  54. package/dist/glob.node.js +15 -0
  55. package/dist/hashlib-vKP511NY.d.ts +205 -0
  56. package/dist/hashlib.d.ts +1 -0
  57. package/dist/hashlib.js +39 -0
  58. package/dist/index.browser.d.ts +172 -0
  59. package/dist/index.browser.js +304 -0
  60. package/dist/index.d.ts +61 -437
  61. package/dist/index.js +138 -1115
  62. package/dist/{itertools-Sjl1LB_0.d.ts → itertools-T0rwOk2j.d.ts} +2 -4
  63. package/dist/itertools.d.ts +1 -1
  64. package/dist/itertools.js +2 -3
  65. package/dist/{json-DAlvCadU.d.ts → json-DoWhX04T.d.ts} +1 -0
  66. package/dist/json.d.ts +1 -1
  67. package/dist/json.js +2 -3
  68. package/dist/logging.browser-Dux4L5kz.d.ts +185 -0
  69. package/dist/logging.browser.d.ts +1 -0
  70. package/dist/logging.browser.js +63 -0
  71. package/dist/logging.node-CH75bVdE.d.ts +185 -0
  72. package/dist/logging.node.d.ts +1 -0
  73. package/dist/logging.node.js +61 -0
  74. package/dist/{math-DwEGjjQ-.d.ts → math-D2NPMc-x.d.ts} +2 -1
  75. package/dist/math.d.ts +1 -1
  76. package/dist/math.js +2 -3
  77. package/dist/{os-C6Nt7Ijx.d.ts → os.browser-krjSx5kF.d.ts} +32 -54
  78. package/dist/os.browser.d.ts +2 -0
  79. package/dist/{os.js → os.browser.js} +41 -16
  80. package/dist/os.node-CQjch8Ht.d.ts +124 -0
  81. package/dist/os.node.d.ts +2 -0
  82. package/dist/os.node.js +83 -0
  83. package/dist/os.shared-C3x70nhO.d.ts +59 -0
  84. package/dist/pathlib.browser-NC7kKQYe.d.ts +91 -0
  85. package/dist/pathlib.browser.d.ts +1 -0
  86. package/dist/pathlib.browser.js +17 -0
  87. package/dist/pathlib.node-CY3yUFdT.d.ts +331 -0
  88. package/dist/pathlib.node.d.ts +2 -0
  89. package/dist/pathlib.node.js +17 -0
  90. package/dist/{random-BJv_rSpL.d.ts → random-DcS5jtEs.d.ts} +3 -5
  91. package/dist/random.d.ts +1 -1
  92. package/dist/random.js +2 -3
  93. package/dist/{re-B1CHCgyr.d.ts → re-Bo-IOqov.d.ts} +3 -7
  94. package/dist/re.d.ts +1 -1
  95. package/dist/re.js +2 -3
  96. package/dist/set-JQbLAq8B.d.ts +592 -0
  97. package/dist/shutil.browser-Ck5oWhnP.d.ts +113 -0
  98. package/dist/shutil.browser.d.ts +1 -0
  99. package/dist/shutil.browser.js +33 -0
  100. package/dist/shutil.node-C9kwvhAf.d.ts +160 -0
  101. package/dist/shutil.node.d.ts +2 -0
  102. package/dist/shutil.node.js +33 -0
  103. package/dist/string.d.ts +3 -1
  104. package/dist/string.js +2 -3
  105. package/dist/subprocess-CZVYzQ3V.d.ts +214 -0
  106. package/dist/subprocess.d.ts +1 -0
  107. package/dist/subprocess.js +29 -0
  108. package/dist/sys-IL8LgI_W.d.ts +212 -0
  109. package/dist/sys.d.ts +1 -0
  110. package/dist/sys.js +51 -0
  111. package/dist/tempfile.browser-DciOKfNm.d.ts +78 -0
  112. package/dist/tempfile.browser.d.ts +1 -0
  113. package/dist/tempfile.browser.js +19 -0
  114. package/dist/tempfile.node-bVMY60Cu.d.ts +195 -0
  115. package/dist/tempfile.node.d.ts +2 -0
  116. package/dist/tempfile.node.js +23 -0
  117. package/dist/time-CcYhdiSu.d.ts +245 -0
  118. package/dist/time.d.ts +1 -0
  119. package/dist/time.js +49 -0
  120. package/dist/urllib-DJtkj-0f.d.ts +198 -0
  121. package/dist/urllib.d.ts +1 -0
  122. package/dist/urllib.js +37 -0
  123. package/dist/uuid-C0ypmn56.d.ts +160 -0
  124. package/dist/uuid.d.ts +1 -0
  125. package/dist/uuid.js +23 -0
  126. package/package.json +127 -5
  127. package/dist/chunk-4KYJT3DR.js.map +0 -1
  128. package/dist/chunk-4QG3772L.js.map +0 -1
  129. package/dist/chunk-6POEDI34.js.map +0 -1
  130. package/dist/chunk-6ZAJ37MR.js.map +0 -1
  131. package/dist/chunk-7TH4FCVQ.js.map +0 -1
  132. package/dist/chunk-CXKGPD5D.js +0 -313
  133. package/dist/chunk-CXKGPD5D.js.map +0 -1
  134. package/dist/chunk-EE7SK2GV.js.map +0 -1
  135. package/dist/chunk-H76SKASU.js.map +0 -1
  136. package/dist/chunk-HQ42WNKZ.js.map +0 -1
  137. package/dist/chunk-LWO6BIAD.js.map +0 -1
  138. package/dist/chunk-PZ5AY32C.js.map +0 -1
  139. package/dist/collections.js.map +0 -1
  140. package/dist/datetime.js.map +0 -1
  141. package/dist/functools.js.map +0 -1
  142. package/dist/index.js.map +0 -1
  143. package/dist/itertools.js.map +0 -1
  144. package/dist/json.js.map +0 -1
  145. package/dist/math.js.map +0 -1
  146. package/dist/os.d.ts +0 -1
  147. package/dist/os.js.map +0 -1
  148. package/dist/random.js.map +0 -1
  149. package/dist/re.js.map +0 -1
  150. package/dist/string.js.map +0 -1
@@ -1,313 +0,0 @@
1
- import {
2
- __export
3
- } from "./chunk-PZ5AY32C.js";
4
-
5
- // src/os.ts
6
- var os_exports = {};
7
- __export(os_exports, {
8
- altSep: () => altSep,
9
- chdir: () => chdir,
10
- curDir: () => curDir,
11
- environ: () => environ,
12
- extSep: () => extSep,
13
- getCwd: () => getCwd,
14
- getCwdb: () => getCwdb,
15
- getenv: () => getenv,
16
- lineSep: () => lineSep,
17
- listDir: () => listDir,
18
- makeDirs: () => makeDirs,
19
- mkdir: () => mkdir,
20
- name: () => name,
21
- parDir: () => parDir,
22
- path: () => path,
23
- pathSep: () => pathSep,
24
- remove: () => remove,
25
- removeDirs: () => removeDirs,
26
- rename: () => rename,
27
- renames: () => renames,
28
- replace: () => replace,
29
- rmdir: () => rmdir,
30
- sep: () => sep,
31
- stat: () => stat,
32
- unlink: () => unlink,
33
- walk: () => walk
34
- });
35
- var environ = typeof process !== "undefined" ? process.env : {};
36
- function getenv(key, defaultValue) {
37
- return environ[key] ?? defaultValue;
38
- }
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 = ".";
46
- var path = {
47
- /** Join path components intelligently */
48
- join(...paths) {
49
- if (paths.length === 0) return "";
50
- if (paths.length === 1) return paths[0] ?? "";
51
- let result = paths[0] ?? "";
52
- for (let i = 1; i < paths.length; i++) {
53
- const p = paths[i] ?? "";
54
- if (p.startsWith("/") || p.length > 1 && p[1] === ":") {
55
- result = p;
56
- } else if (result === "" || result.endsWith("/") || result.endsWith("\\")) {
57
- result += p;
58
- } else {
59
- result += sep + p;
60
- }
61
- }
62
- return result;
63
- },
64
- /** Return the base name of pathname */
65
- basename(p, suffix) {
66
- let s = p.replace(/[/\\]+$/, "");
67
- const idx = Math.max(s.lastIndexOf("/"), s.lastIndexOf("\\"));
68
- s = idx >= 0 ? s.slice(idx + 1) : s;
69
- if (suffix && s.endsWith(suffix)) {
70
- s = s.slice(0, -suffix.length);
71
- }
72
- return s;
73
- },
74
- /** Return the directory name of pathname */
75
- dirname(p) {
76
- const s = p.replace(/[/\\]+$/, "");
77
- const idx = Math.max(s.lastIndexOf("/"), s.lastIndexOf("\\"));
78
- if (idx < 0) return "";
79
- if (idx === 0) return s[0] ?? "";
80
- return s.slice(0, idx);
81
- },
82
- /** Split pathname into (head, tail) */
83
- split(p) {
84
- return [path.dirname(p), path.basename(p)];
85
- },
86
- /** Split pathname into root and extension */
87
- splitExt(p) {
88
- const base = path.basename(p);
89
- const dotIdx = base.lastIndexOf(".");
90
- if (dotIdx <= 0) {
91
- return [p, ""];
92
- }
93
- const dir = path.dirname(p);
94
- const root = base.slice(0, dotIdx);
95
- const ext = base.slice(dotIdx);
96
- return [dir ? path.join(dir, root) : root, ext];
97
- },
98
- /** Return the extension of pathname */
99
- extName(p) {
100
- return path.splitExt(p)[1];
101
- },
102
- /** Test whether a path is absolute */
103
- isAbs(p) {
104
- if (p.startsWith("/")) return true;
105
- if (p.length >= 3 && p[1] === ":" && (p[2] === "/" || p[2] === "\\")) return true;
106
- if (p.startsWith("\\\\")) return true;
107
- return false;
108
- },
109
- /** Normalize a pathname */
110
- normPath(p) {
111
- if (!p) return ".";
112
- let prefix = "";
113
- if (p.length >= 2 && p[1] === ":") {
114
- prefix = p.slice(0, 2);
115
- p = p.slice(2);
116
- }
117
- const isWin = p.includes("\\");
118
- p = p.replace(/\\/g, "/");
119
- const isAbsolute = p.startsWith("/");
120
- const parts = p.split("/").filter((part) => part && part !== ".");
121
- const result = [];
122
- for (const part of parts) {
123
- if (part === "..") {
124
- if (result.length > 0 && result[result.length - 1] !== "..") {
125
- result.pop();
126
- } else if (!isAbsolute) {
127
- result.push("..");
128
- }
129
- } else {
130
- result.push(part);
131
- }
132
- }
133
- let normalized = result.join(isWin ? "\\" : "/");
134
- if (isAbsolute) {
135
- normalized = (isWin ? "\\" : "/") + normalized;
136
- }
137
- normalized = prefix + normalized;
138
- return normalized || ".";
139
- },
140
- /** Return normalized absolutized version of pathname */
141
- absPath(p) {
142
- if (path.isAbs(p)) {
143
- return path.normPath(p);
144
- }
145
- return path.normPath(p);
146
- },
147
- /** Return canonical path, eliminating symlinks (stub - just normalizes) */
148
- realPath(p) {
149
- return path.absPath(p);
150
- },
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);
155
- let commonLen = 0;
156
- const minLen = Math.min(pParts.length, startParts.length);
157
- for (let i = 0; i < minLen; i++) {
158
- if (pParts[i] === startParts[i]) {
159
- commonLen++;
160
- } else {
161
- break;
162
- }
163
- }
164
- const upCount = startParts.length - commonLen;
165
- const result = [...Array(upCount).fill(".."), ...pParts.slice(commonLen)];
166
- return result.join(sep) || ".";
167
- },
168
- /** Return common path prefix */
169
- commonPath(paths) {
170
- if (paths.length === 0) {
171
- throw new Error("commonPath() arg is an empty sequence");
172
- }
173
- const splitPaths = paths.map((p) => path.normPath(p).split(/[/\\]/));
174
- const first = splitPaths[0];
175
- let commonLen = first.length;
176
- for (let i = 1; i < splitPaths.length; i++) {
177
- const parts = splitPaths[i];
178
- commonLen = Math.min(commonLen, parts.length);
179
- for (let j = 0; j < commonLen; j++) {
180
- if (parts[j] !== first[j]) {
181
- commonLen = j;
182
- break;
183
- }
184
- }
185
- }
186
- return first.slice(0, commonLen).join(sep) || sep;
187
- },
188
- /** Expand ~ and ~user (stub - returns unchanged in browser) */
189
- expandUser(p) {
190
- if (!p.startsWith("~")) return p;
191
- const home = typeof process !== "undefined" ? process.env.HOME ?? process.env.USERPROFILE : void 0;
192
- if (!home) return p;
193
- if (p === "~" || p.startsWith("~/") || p.startsWith("~\\")) {
194
- return home + p.slice(1);
195
- }
196
- return p;
197
- },
198
- /** Expand shell variables (stub - returns unchanged) */
199
- expandVars(p) {
200
- return p.replace(/\$(\w+)|\$\{(\w+)\}/g, (_, v1, v2) => {
201
- const key = v1 || v2;
202
- return environ[key] ?? "";
203
- });
204
- },
205
- /* v8 ignore start -- browser stubs @preserve */
206
- /* eslint-disable @typescript-eslint/no-unused-vars */
207
- /** Test if path exists (stub - always returns false in browser) */
208
- exists(_p) {
209
- return false;
210
- },
211
- /** Test if path is a file (stub - always returns false in browser) */
212
- isFile(_p) {
213
- return false;
214
- },
215
- /** Test if path is a directory (stub - always returns false in browser) */
216
- isDir(_p) {
217
- return false;
218
- },
219
- /** Test if path is a symbolic link (stub - always returns false in browser) */
220
- isLink(_p) {
221
- return false;
222
- },
223
- /** Return size of file (stub - returns 0 in browser) */
224
- getSize(_p) {
225
- return 0;
226
- },
227
- /** Return modification time (stub - returns 0 in browser) */
228
- getMtime(_p) {
229
- return 0;
230
- },
231
- /** Return access time (stub - returns 0 in browser) */
232
- getAtime(_p) {
233
- return 0;
234
- },
235
- /** Return creation time (stub - returns 0 in browser) */
236
- getCtime(_p) {
237
- return 0;
238
- }
239
- /* eslint-enable @typescript-eslint/no-unused-vars */
240
- /* v8 ignore stop */
241
- };
242
- function getCwd() {
243
- if (typeof process !== "undefined") {
244
- return process.cwd();
245
- }
246
- return "/";
247
- }
248
- function getCwdb() {
249
- return getCwd();
250
- }
251
- function chdir(p) {
252
- if (typeof process !== "undefined") {
253
- process.chdir(p);
254
- }
255
- }
256
- function listDir(_p = ".") {
257
- return [];
258
- }
259
- function mkdir(_p, _mode = 511) {
260
- }
261
- function makeDirs(_p, _mode = 511, _existOk = false) {
262
- }
263
- function remove(_p) {
264
- }
265
- var unlink = remove;
266
- function rmdir(_p) {
267
- }
268
- function removeDirs(_p) {
269
- }
270
- function rename(_src, _dst) {
271
- }
272
- function renames(_src, _dst) {
273
- }
274
- function replace(_src, _dst) {
275
- }
276
- function* walk(_top, _options) {
277
- }
278
- function stat(_p) {
279
- return { st_mode: 0, st_size: 0, st_mtime: 0, st_atime: 0, st_ctime: 0 };
280
- }
281
- var name = typeof process !== "undefined" && process.platform === "win32" ? "nt" : "posix";
282
-
283
- export {
284
- environ,
285
- getenv,
286
- sep,
287
- altSep,
288
- pathSep,
289
- lineSep,
290
- curDir,
291
- parDir,
292
- extSep,
293
- path,
294
- getCwd,
295
- getCwdb,
296
- chdir,
297
- listDir,
298
- mkdir,
299
- makeDirs,
300
- remove,
301
- unlink,
302
- rmdir,
303
- removeDirs,
304
- rename,
305
- renames,
306
- replace,
307
- walk,
308
- stat,
309
- name,
310
- os_exports
311
- };
312
- /* v8 ignore start -- browser stubs for filesystem operations @preserve */
313
- //# sourceMappingURL=chunk-CXKGPD5D.js.map
@@ -1 +0,0 @@
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 /* v8 ignore start -- browser stubs @preserve */\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 /* v8 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/* v8 ignore start -- browser stubs for filesystem operations @preserve */\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/* v8 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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/functools.ts"],"sourcesContent":["/**\n * Python functools module for TypeScript\n *\n * Provides higher-order functions and operations on callable objects.\n *\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/* v8 ignore start -- complex utility rarely used directly @preserve */\nexport function totalOrdering<\n T extends {\n __lt__?: (other: T) => boolean\n __le__?: (other: T) => boolean\n __gt__?: (other: T) => boolean\n __ge__?: (other: T) => boolean\n __eq__?: (other: T) => boolean\n }\n>(\n obj: T\n): T & {\n __lt__: (other: T) => boolean\n __le__: (other: T) => boolean\n __gt__: (other: T) => boolean\n __ge__: (other: T) => boolean\n} {\n const lt = obj.__lt__?.bind(obj)\n const le = obj.__le__?.bind(obj)\n const gt = obj.__gt__?.bind(obj)\n const ge = obj.__ge__?.bind(obj)\n const eq = obj.__eq__?.bind(obj) ?? ((other: T) => obj === other)\n\n const result = obj as T & {\n __lt__: (other: T) => boolean\n __le__: (other: T) => boolean\n __gt__: (other: T) => boolean\n __ge__: (other: T) => boolean\n }\n\n if (lt) {\n result.__lt__ = lt\n result.__le__ = (other: T) => lt(other) || eq(other)\n result.__gt__ = (other: T) => !lt(other) && !eq(other)\n result.__ge__ = (other: T) => !lt(other)\n } else if (le) {\n result.__le__ = le\n result.__lt__ = (other: T) => le(other) && !eq(other)\n result.__gt__ = (other: T) => !le(other)\n result.__ge__ = (other: T) => !le(other) || eq(other)\n } else if (gt) {\n result.__gt__ = gt\n result.__ge__ = (other: T) => gt(other) || eq(other)\n result.__lt__ = (other: T) => !gt(other) && !eq(other)\n result.__le__ = (other: T) => !gt(other)\n } else if (ge) {\n result.__ge__ = ge\n result.__gt__ = (other: T) => ge(other) && !eq(other)\n result.__le__ = (other: T) => !ge(other) || eq(other)\n result.__lt__ = (other: T) => !ge(other)\n }\n\n return result\n}\n/* v8 ignore stop */\n\n/**\n * Pipe a value through a series of functions.\n * @inspired Remeda, Ramda\n *\n * Example:\n * pipe(5, x => x * 2, x => x + 1) // returns 11\n */\nexport function pipe<T>(value: T): T\nexport function pipe<T, A>(value: T, fn1: (x: T) => A): A\nexport function pipe<T, A, B>(value: T, fn1: (x: T) => A, fn2: (x: A) => B): B\nexport function pipe<T, A, B, C>(value: T, fn1: (x: T) => A, fn2: (x: A) => B, fn3: (x: B) => C): C\nexport function pipe<T, A, B, C, D>(\n value: T,\n fn1: (x: T) => A,\n fn2: (x: A) => B,\n fn3: (x: B) => C,\n fn4: (x: C) => D\n): D\nexport function pipe<T, A, B, C, D, E>(\n value: T,\n fn1: (x: T) => A,\n fn2: (x: A) => B,\n fn3: (x: B) => C,\n fn4: (x: C) => D,\n fn5: (x: D) => E\n): E\nexport function pipe(value: unknown, ...fns: ((x: unknown) => unknown)[]): unknown {\n return fns.reduce((acc, fn) => fn(acc), value)\n}\n"],"mappings":"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","names":["cache"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/random.ts"],"sourcesContent":["/**\n * Python random module for TypeScript\n *\n * Provides random number generation functions matching Python's random module.\n * Uses JavaScript's Math.random() as the underlying generator.\n *\n * Note: This is NOT cryptographically secure. For security-sensitive\n * applications, use the Web Crypto API instead.\n *\n * @see {@link https://docs.python.org/3/library/random.html | Python random documentation}\n */\n\n// ============================================================================\n// Basic random functions\n// ============================================================================\n\n/** Return a random floating point number in the range [0.0, 1.0) */\nexport function random(): number {\n return Math.random()\n}\n\n/** Return a random floating point number N such that a <= N <= b */\nexport function uniform(a: number, b: number): number {\n return a + Math.random() * (b - a)\n}\n\n/** Return a random integer N such that a <= N <= b (inclusive) */\nexport function randInt(a: number, b: number): number {\n a = Math.floor(a)\n b = Math.floor(b)\n return Math.floor(Math.random() * (b - a + 1)) + a\n}\n\n/** Return a randomly selected element from range(start, stop, step) */\nexport function randRange(start: number, stop?: number, step: number = 1): number {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n if (step === 0) {\n throw new Error(\"step cannot be zero\")\n }\n\n const numSteps = Math.ceil((stop - start) / step)\n if (numSteps <= 0) {\n throw new Error(\"empty range for randRange()\")\n }\n\n const randomStep = Math.floor(Math.random() * numSteps)\n return start + randomStep * step\n}\n\n// ============================================================================\n// Sequence functions\n// ============================================================================\n\n/** Return a random element from the non-empty sequence */\nexport function choice<T>(seq: T[] | string): T | string {\n if (seq.length === 0) {\n throw new Error(\"Cannot choose from an empty sequence\")\n }\n const index = Math.floor(Math.random() * seq.length)\n return seq[index] as T | string\n}\n\n/** Return a k-length list of elements chosen from the population with replacement */\nexport function choices<T>(population: T[], options?: { weights?: number[]; k?: number }): T[] {\n const k = options?.k ?? 1\n const weights = options?.weights\n\n if (population.length === 0) {\n throw new Error(\"Cannot choose from an empty population\")\n }\n\n if (weights) {\n if (weights.length !== population.length) {\n throw new Error(\"weights and population must have the same length\")\n }\n\n // Compute cumulative weights\n const cumWeights: number[] = []\n let total = 0\n for (const w of weights) {\n total += w\n cumWeights.push(total)\n }\n\n const result: T[] = []\n for (let i = 0; i < k; i++) {\n const r = Math.random() * total\n // Binary search for the index\n let lo = 0\n let hi = cumWeights.length\n while (lo < hi) {\n const mid = Math.floor((lo + hi) / 2)\n if (r > (cumWeights[mid] as number)) {\n lo = mid + 1\n } else {\n hi = mid\n }\n }\n result.push(population[lo] as T)\n }\n return result\n }\n\n const result: T[] = []\n for (let i = 0; i < k; i++) {\n result.push(population[Math.floor(Math.random() * population.length)] as T)\n }\n return result\n}\n\n/** Return a k-length list of unique elements chosen from the population (without replacement) */\nexport function sample<T>(population: T[], k: number): T[] {\n if (k > population.length) {\n throw new Error(\"Sample larger than population\")\n }\n if (k < 0) {\n throw new Error(\"Sample size cannot be negative\")\n }\n\n // Fisher-Yates shuffle on a copy, take first k elements\n const pool = [...population]\n for (let i = 0; i < k; i++) {\n const j = i + Math.floor(Math.random() * (pool.length - i))\n const temp = pool[i] as T\n pool[i] = pool[j] as T\n pool[j] = temp\n }\n return pool.slice(0, k)\n}\n\n/** Shuffle the sequence in place */\nexport function shuffle(x: unknown[]): void {\n // Fisher-Yates shuffle\n for (let i = x.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n const temp = x[i]\n x[i] = x[j]\n x[j] = temp\n }\n}\n\n// ============================================================================\n// Real-valued distributions\n// ============================================================================\n\n/** Gaussian distribution with mean mu and standard deviation sigma */\nexport function gauss(mu: number = 0, sigma: number = 1): number {\n // Box-Muller transform\n let u1: number\n let u2: number\n do {\n u1 = Math.random()\n u2 = Math.random()\n } while (u1 === 0)\n\n const z = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2)\n return mu + z * sigma\n}\n\n/** Normal distribution (alias for gauss) */\nexport const normalVariate = gauss\n\n/** Triangular distribution with low, high, and mode */\nexport function triangular(low: number = 0, high: number = 1, mode?: number): number {\n if (mode === undefined) {\n mode = (low + high) / 2\n }\n\n const u = Math.random()\n const c = (mode - low) / (high - low)\n\n if (u < c) {\n return low + Math.sqrt(u * (high - low) * (mode - low))\n }\n return high - Math.sqrt((1 - u) * (high - low) * (high - mode))\n}\n\n/** Beta distribution with alpha and beta parameters */\nexport function betaVariate(alpha: number, beta: number): number {\n // Use the gamma method\n const y = gammaVariate(alpha, 1)\n if (y === 0) return 0\n return y / (y + gammaVariate(beta, 1))\n}\n\n/** Exponential distribution with mean 1/lambd */\nexport function expoVariate(lambd: number): number {\n // lambd is 1.0 divided by the desired mean\n return -Math.log(1 - Math.random()) / lambd\n}\n\n/** Gamma distribution with shape alpha and scale beta */\nexport function gammaVariate(alpha: number, beta: number): number {\n // Marsaglia and Tsang's method\n if (alpha <= 0 || beta <= 0) {\n throw new Error(\"gammaVariate: alpha and beta must be > 0\")\n }\n\n if (alpha > 1) {\n const d = alpha - 1 / 3\n const c = 1 / Math.sqrt(9 * d)\n for (;;) {\n let x: number\n let v: number\n do {\n x = gauss()\n v = 1 + c * x\n } while (v <= 0)\n v = v * v * v\n const u = Math.random()\n if (u < 1 - 0.0331 * (x * x) * (x * x)) {\n return d * v * beta\n }\n if (Math.log(u) < 0.5 * x * x + d * (1 - v + Math.log(v))) {\n return d * v * beta\n }\n }\n } else {\n // alpha <= 1\n const u = Math.random()\n return gammaVariate(1 + alpha, beta) * Math.pow(u, 1 / alpha)\n }\n}\n\n/** Log normal distribution */\nexport function logNormVariate(mu: number, sigma: number): number {\n return Math.exp(gauss(mu, sigma))\n}\n\n/** Von Mises distribution (circular data) */\nexport function vonMisesVariate(mu: number, kappa: number): number {\n if (kappa <= 1e-6) {\n return 2 * Math.PI * Math.random()\n }\n\n const s = 0.5 / kappa\n const r = s + Math.sqrt(1 + s * s)\n\n for (;;) {\n const u1 = Math.random()\n const z = Math.cos(Math.PI * u1)\n const d = z / (r + z)\n const u2 = Math.random()\n if (u2 < 1 - d * d || u2 <= (1 - d) * Math.exp(d)) {\n const q = 1 / r\n const f = (q + z) / (1 + q * z)\n const u3 = Math.random()\n if (u3 > 0.5) {\n return (mu + Math.acos(f)) % (2 * Math.PI)\n }\n return (mu - Math.acos(f)) % (2 * Math.PI)\n }\n }\n}\n\n/** Pareto distribution */\nexport function paretoVariate(alpha: number): number {\n const u = 1 - Math.random()\n return 1 / Math.pow(u, 1 / alpha)\n}\n\n/** Weibull distribution */\nexport function weibullVariate(alpha: number, beta: number): number {\n const u = 1 - Math.random()\n return alpha * Math.pow(-Math.log(u), 1 / beta)\n}\n"],"mappings":"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","names":["result"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/itertools.ts"],"sourcesContent":["/**\n * Python itertools module for TypeScript\n *\n * Provides iterator building blocks inspired by Python's itertools module.\n *\n * @see {@link https://docs.python.org/3/library/itertools.html | Python itertools documentation}\n *\n * Design Decision (ADR-0008):\n * - Most functions return eager arrays for better debugging and familiarity\n * - Only infinite sequences (cycle, repeat without count) use generators\n */\n\n/**\n * Chain multiple iterables together into a single array\n * chain([1, 2], [3, 4]) -> [1, 2, 3, 4]\n */\nexport function chain<T>(...iterables: Iterable<T>[]): T[] {\n return iterables.flatMap((it) => [...it])\n}\n\n/**\n * Return successive r-length combinations of elements\n * combinations([1, 2, 3], 2) -> [[1, 2], [1, 3], [2, 3]]\n */\nexport function combinations<T>(iterable: Iterable<T>, r: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n if (r > n || r < 0) return []\n\n const result: T[][] = []\n const indices: number[] = Array.from({ length: r }, (_, i) => i)\n result.push(indices.map((i) => pool[i] as T))\n\n for (;;) {\n let i = r - 1\n while (i >= 0 && indices[i] === i + n - r) i--\n if (i < 0) break\n ;(indices[i] as number)++\n for (let j = i + 1; j < r; j++) {\n indices[j] = (indices[j - 1] as number) + 1\n }\n result.push(indices.map((idx) => pool[idx] as T))\n }\n\n return result\n}\n\n/**\n * Return successive r-length permutations of elements\n * permutations([1, 2, 3], 2) -> [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]\n */\nexport function permutations<T>(iterable: Iterable<T>, r?: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n const rLen = r === undefined ? n : r\n if (rLen > n || rLen < 0) return []\n\n const result: T[][] = []\n const indices: number[] = Array.from({ length: n }, (_, i) => i)\n const cycles: number[] = Array.from({ length: rLen }, (_, i) => n - i)\n\n result.push(indices.slice(0, rLen).map((i) => pool[i] as T))\n\n outer: for (;;) {\n for (let i = rLen - 1; i >= 0; i--) {\n ;(cycles[i] as number)--\n if (cycles[i] === 0) {\n // Rotate indices[i:] left by one\n const temp = indices[i] as number\n for (let j = i; j < n - 1; j++) {\n indices[j] = indices[j + 1] as number\n }\n indices[n - 1] = temp\n cycles[i] = n - i\n } else {\n const j = n - (cycles[i] as number)\n const swap = indices[j] as number\n indices[j] = indices[i] as number\n indices[i] = swap\n result.push(indices.slice(0, rLen).map((idx) => pool[idx] as T))\n continue outer\n }\n }\n break\n }\n\n return result\n}\n\n/**\n * Cartesian product of input iterables\n * product([1, 2], ['a', 'b']) -> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]\n */\nexport function product<T>(...iterables: Iterable<T>[]): T[][] {\n if (iterables.length === 0) return [[]]\n\n const pools = iterables.map((it) => [...it])\n\n // Check if any pool is empty\n if (pools.some((p) => p.length === 0)) return []\n\n const result: T[][] = []\n const indices: number[] = new Array<number>(pools.length).fill(0)\n result.push(pools.map((p, i) => p[indices[i] as number] as T))\n\n for (;;) {\n let i = pools.length - 1\n while (i >= 0) {\n ;(indices[i] as number)++\n const currentPool = pools[i] as T[]\n if ((indices[i] as number) < currentPool.length) {\n result.push(pools.map((p, j) => p[indices[j] as number] as T))\n break\n }\n indices[i] = 0\n i--\n }\n if (i < 0) break\n }\n\n return result\n}\n\n/**\n * Cycle through an iterable indefinitely (INFINITE - returns Generator)\n * cycle([1, 2, 3]) -> 1, 2, 3, 1, 2, 3, 1, 2, 3, ...\n *\n * WARNING: This is infinite! Use with for...of and break, or islice.\n */\nexport function* cycle<T>(iterable: Iterable<T>): Generator<T> {\n const saved: T[] = []\n for (const element of iterable) {\n yield element\n saved.push(element)\n }\n if (saved.length === 0) return\n for (;;) {\n yield* saved\n }\n}\n\n/**\n * Repeat an object. If times is specified, returns an array. Otherwise returns\n * an infinite generator.\n *\n * repeat('x', 3) -> ['x', 'x', 'x']\n * repeat('x') -> Generator that yields 'x' forever (INFINITE)\n */\nexport function repeat<T>(obj: T, times?: number): T[] | Generator<T> {\n if (times !== undefined) {\n // Finite: return array\n return Array.from({ length: times }, () => obj)\n }\n // Infinite: return generator\n return (function* () {\n for (;;) {\n yield obj\n }\n })()\n}\n\n/**\n * Slice an iterable from start to stop with step\n * islice([1, 2, 3, 4, 5], 1, 4) -> [2, 3, 4]\n * islice([1, 2, 3, 4, 5], 3) -> [1, 2, 3]\n */\nexport function islice<T>(\n iterable: Iterable<T>,\n start: number,\n stop?: number,\n step: number = 1\n): T[] {\n // Handle single argument (stop only): islice(it, 5) means islice(it, 0, 5, 1)\n let actualStart = start\n let actualStop = stop\n if (actualStop === undefined) {\n actualStop = start\n actualStart = 0\n }\n\n if (step < 1) {\n throw new Error(\"step must be >= 1\")\n }\n\n const result: T[] = []\n let index = 0\n let nextIndex = actualStart\n\n for (const element of iterable) {\n if (index >= actualStop) break\n if (index === nextIndex) {\n result.push(element)\n nextIndex += step\n }\n index++\n }\n\n return result\n}\n\n/**\n * Take elements while predicate is true\n * takeWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [1, 4]\n */\nexport function takeWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[] {\n const result: T[] = []\n for (const element of iterable) {\n if (predicate(element)) {\n result.push(element)\n } else {\n break\n }\n }\n return result\n}\n\n/**\n * Skip elements while predicate is true, then return the rest\n * dropWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [6, 4, 1]\n */\nexport function dropWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[] {\n const result: T[] = []\n let dropping = true\n for (const element of iterable) {\n if (dropping && predicate(element)) {\n continue\n }\n dropping = false\n result.push(element)\n }\n return result\n}\n\n/**\n * Zip iterables together, filling missing values with fillvalue\n * zipLongest([1, 2, 3], ['a', 'b'], { fillvalue: '-' }) -> [[1, 'a'], [2, 'b'], [3, '-']]\n */\nexport function zipLongest<T>(\n ...args: [...Iterable<T>[], { fillvalue?: T }] | Iterable<T>[]\n): T[][] {\n let fillvalue: T | undefined\n let iterables: Iterable<T>[]\n\n // Check if last argument is options object\n const lastArg = args[args.length - 1]\n if (\n lastArg &&\n typeof lastArg === \"object\" &&\n !Array.isArray(lastArg) &&\n !(Symbol.iterator in lastArg)\n ) {\n fillvalue = (lastArg as { fillvalue?: T }).fillvalue\n iterables = args.slice(0, -1) as Iterable<T>[]\n } else {\n iterables = args as Iterable<T>[]\n }\n\n if (iterables.length === 0) return []\n\n const arrays = iterables.map((it) => [...it])\n const maxLen = Math.max(...arrays.map((a) => a.length))\n const result: T[][] = []\n\n for (let i = 0; i < maxLen; i++) {\n const tuple: T[] = []\n for (const arr of arrays) {\n tuple.push(i < arr.length ? (arr[i] as T) : (fillvalue as T))\n }\n result.push(tuple)\n }\n\n return result\n}\n\n/**\n * Return elements from iterable where the corresponding selector is true\n * compress([1, 2, 3, 4, 5], [1, 0, 1, 0, 1]) -> [1, 3, 5]\n */\nexport function compress<T>(data: Iterable<T>, selectors: Iterable<unknown>): T[] {\n const result: T[] = []\n const dataArr = [...data]\n const selectorsArr = [...selectors]\n const len = Math.min(dataArr.length, selectorsArr.length)\n\n for (let i = 0; i < len; i++) {\n if (selectorsArr[i]) {\n result.push(dataArr[i] as T)\n }\n }\n return result\n}\n\n/**\n * Return elements for which predicate is false\n * filterFalse(x => x % 2, [1, 2, 3, 4, 5]) -> [2, 4]\n */\nexport function filterFalse<T>(predicate: (x: T) => unknown, iterable: Iterable<T>): T[] {\n const result: T[] = []\n for (const element of iterable) {\n if (!predicate(element)) {\n result.push(element)\n }\n }\n return result\n}\n\n/**\n * Make an iterator that returns accumulated sums or accumulated results\n * accumulate([1, 2, 3, 4, 5]) -> [1, 3, 6, 10, 15]\n * accumulate([1, 2, 3, 4, 5], (x, y) => x * y) -> [1, 2, 6, 24, 120]\n */\nexport function accumulate<T>(\n iterable: Iterable<T>,\n func?: (acc: T, val: T) => T,\n initial?: T\n): T[] {\n const result: T[] = []\n const arr = [...iterable]\n\n if (arr.length === 0) {\n if (initial !== undefined) {\n return [initial]\n }\n return []\n }\n\n const operation = func ?? ((a: T, b: T): T => ((a as number) + (b as number)) as unknown as T)\n\n let acc: T\n let startIdx: number\n\n if (initial !== undefined) {\n acc = initial\n startIdx = 0\n result.push(acc)\n } else {\n acc = arr[0] as T\n startIdx = 1\n result.push(acc)\n }\n\n for (let i = startIdx; i < arr.length; i++) {\n acc = operation(acc, arr[i] as T)\n result.push(acc)\n }\n\n return result\n}\n\n/**\n * Return consecutive keys and groups from the iterable\n * groupby([1, 1, 2, 2, 2, 3, 1, 1]) -> [[1, [1, 1]], [2, [2, 2, 2]], [3, [3]], [1, [1, 1]]]\n */\nexport function groupby<T, K = T>(iterable: Iterable<T>, key?: (x: T) => K): [K, T[]][] {\n const result: [K, T[]][] = []\n const keyFunc = key ?? ((x: T) => x as unknown as K)\n\n let currentKey: K | undefined\n let currentGroup: T[] = []\n let first = true\n\n for (const element of iterable) {\n const k = keyFunc(element)\n if (first) {\n currentKey = k\n currentGroup = [element]\n first = false\n } else if (k === currentKey) {\n currentGroup.push(element)\n } else {\n result.push([currentKey as K, currentGroup])\n currentKey = k\n currentGroup = [element]\n }\n }\n\n if (!first) {\n result.push([currentKey as K, currentGroup])\n }\n\n return result\n}\n\n/**\n * Make an iterator that returns evenly spaced values starting with n\n * count(10, 2) -> 10, 12, 14, 16, 18, ... (INFINITE Generator)\n */\nexport function* count(start: number = 0, step: number = 1): Generator<number> {\n let n = start\n for (;;) {\n yield n\n n += step\n }\n}\n\n/**\n * Return n independent iterators from a single iterable\n * tee([1, 2, 3], 2) -> [[1, 2, 3], [1, 2, 3]]\n */\nexport function tee<T>(iterable: Iterable<T>, n: number = 2): T[][] {\n const arr = [...iterable]\n return Array.from({ length: n }, () => [...arr])\n}\n\n/**\n * Return successive overlapping pairs from the iterable\n * pairwise([1, 2, 3, 4, 5]) -> [[1, 2], [2, 3], [3, 4], [4, 5]]\n */\nexport function pairwise<T>(iterable: Iterable<T>): [T, T][] {\n const arr = [...iterable]\n const result: [T, T][] = []\n for (let i = 0; i < arr.length - 1; i++) {\n result.push([arr[i] as T, arr[i + 1] as T])\n }\n return result\n}\n\n/**\n * Cartesian product with repeat (product(range(3), repeat=2) like nested loops)\n * productRepeat([0, 1], 2) -> [[0, 0], [0, 1], [1, 0], [1, 1]]\n */\nexport function productRepeat<T>(iterable: Iterable<T>, repeat: number = 1): T[][] {\n const pool = [...iterable]\n if (repeat < 1 || pool.length === 0) return repeat === 0 ? [[]] : []\n\n const pools = Array.from({ length: repeat }, () => pool)\n return product(...pools)\n}\n\n/**\n * Return r-length combinations with replacement\n * combinationsWithReplacement([1, 2, 3], 2) -> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]\n */\nexport function combinationsWithReplacement<T>(iterable: Iterable<T>, r: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n if (r < 0 || n === 0) return r === 0 ? [[]] : []\n\n const result: T[][] = []\n const indices: number[] = new Array<number>(r).fill(0)\n result.push(indices.map((i) => pool[i] as T))\n\n for (;;) {\n let i = r - 1\n while (i >= 0 && indices[i] === n - 1) i--\n if (i < 0) break\n const newVal = (indices[i] as number) + 1\n for (let j = i; j < r; j++) {\n indices[j] = newVal\n }\n result.push(indices.map((idx) => pool[idx] as T))\n }\n\n return result\n}\n\n/**\n * Split an iterable into chunks of specified size.\n * @inspired Remeda, Lodash\n *\n * chunk([1, 2, 3, 4, 5], 2) -> [[1, 2], [3, 4], [5]]\n */\nexport function chunk<T>(iterable: Iterable<T>, size: number): T[][] {\n if (size < 1) {\n throw new Error(\"chunk size must be at least 1\")\n }\n const arr = [...iterable]\n const result: T[][] = []\n for (let i = 0; i < arr.length; i += size) {\n result.push(arr.slice(i, i + size))\n }\n return result\n}\n\n/**\n * Partition an iterable into two arrays based on a predicate.\n * @inspired Remeda, Lodash\n *\n * partition([1, 2, 3, 4], x => x % 2 === 0) -> [[2, 4], [1, 3]]\n */\nexport function partition<T>(iterable: Iterable<T>, predicate: (x: T) => boolean): [T[], T[]] {\n const truthy: T[] = []\n const falsy: T[] = []\n for (const item of iterable) {\n if (predicate(item)) {\n truthy.push(item)\n } else {\n falsy.push(item)\n }\n }\n return [truthy, falsy]\n}\n"],"mappings":"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","names":["repeat"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/datetime.ts"],"sourcesContent":["/**\n * Python datetime module for TypeScript\n *\n * Provides date and time handling matching Python's datetime module.\n *\n * @see {@link https://docs.python.org/3/library/datetime.html | Python datetime documentation}\n */\n\n// ============================================================================\n// timedelta class\n// ============================================================================\n\nexport class timedelta {\n readonly days: number\n readonly seconds: number\n readonly microseconds: number\n\n constructor(options?: {\n days?: number\n seconds?: number\n microseconds?: number\n milliseconds?: number\n minutes?: number\n hours?: number\n weeks?: number\n }) {\n let totalMicroseconds = 0\n\n if (options) {\n totalMicroseconds += (options.weeks ?? 0) * 7 * 24 * 60 * 60 * 1000000\n totalMicroseconds += (options.days ?? 0) * 24 * 60 * 60 * 1000000\n totalMicroseconds += (options.hours ?? 0) * 60 * 60 * 1000000\n totalMicroseconds += (options.minutes ?? 0) * 60 * 1000000\n totalMicroseconds += (options.seconds ?? 0) * 1000000\n totalMicroseconds += (options.milliseconds ?? 0) * 1000\n totalMicroseconds += options.microseconds ?? 0\n }\n\n // Normalize to days, seconds, microseconds\n const sign = totalMicroseconds < 0 ? -1 : 1\n totalMicroseconds = Math.abs(totalMicroseconds)\n\n this.microseconds = sign * (totalMicroseconds % 1000000)\n totalMicroseconds = Math.floor(totalMicroseconds / 1000000)\n\n this.seconds = sign * (totalMicroseconds % (24 * 60 * 60))\n this.days = sign * Math.floor(totalMicroseconds / (24 * 60 * 60))\n\n // Normalize negative values\n if (this.microseconds < 0) {\n ;(this as { microseconds: number }).microseconds += 1000000\n ;(this as { seconds: number }).seconds -= 1\n }\n if (this.seconds < 0) {\n ;(this as { seconds: number }).seconds += 24 * 60 * 60\n ;(this as { days: number }).days -= 1\n }\n }\n\n totalSeconds(): number {\n return this.days * 24 * 60 * 60 + this.seconds + this.microseconds / 1000000\n }\n\n toString(): string {\n const parts: string[] = []\n if (this.days !== 0) {\n parts.push(`${String(this.days)} day${Math.abs(this.days) !== 1 ? \"s\" : \"\"}`)\n }\n const hours = Math.floor(this.seconds / 3600)\n const minutes = Math.floor((this.seconds % 3600) / 60)\n const secs = this.seconds % 60\n const timeStr = `${String(hours)}:${String(minutes).padStart(2, \"0\")}:${String(secs).padStart(2, \"0\")}`\n if (this.microseconds > 0) {\n parts.push(`${timeStr}.${String(this.microseconds).padStart(6, \"0\")}`)\n } else {\n parts.push(timeStr)\n }\n return parts.join(\", \")\n }\n\n add(other: timedelta): timedelta {\n return new timedelta({\n days: this.days + other.days,\n seconds: this.seconds + other.seconds,\n microseconds: this.microseconds + other.microseconds\n })\n }\n\n subtract(other: timedelta): timedelta {\n return new timedelta({\n days: this.days - other.days,\n seconds: this.seconds - other.seconds,\n microseconds: this.microseconds - other.microseconds\n })\n }\n\n multiply(n: number): timedelta {\n return new timedelta({\n microseconds: Math.round(this.totalSeconds() * 1000000 * n)\n })\n }\n\n static min = new timedelta({ days: -999999999 })\n static max = new timedelta({\n days: 999999999,\n hours: 23,\n minutes: 59,\n seconds: 59,\n microseconds: 999999\n })\n static resolution = new timedelta({ microseconds: 1 })\n}\n\n// ============================================================================\n// date class\n// ============================================================================\n\nexport class date {\n readonly year: number\n readonly month: number\n readonly day: number\n\n constructor(year: number, month: number, day: number) {\n if (month < 1 || month > 12) {\n throw new Error(\"month must be in 1..12\")\n }\n const maxDay = new Date(year, month, 0).getDate()\n if (day < 1 || day > maxDay) {\n throw new Error(`day is out of range for month`)\n }\n this.year = year\n this.month = month\n this.day = day\n }\n\n static today(): date {\n const now = new Date()\n return new date(now.getFullYear(), now.getMonth() + 1, now.getDate())\n }\n\n static fromTimestamp(timestamp: number): date {\n const d = new Date(timestamp * 1000)\n return new date(d.getFullYear(), d.getMonth() + 1, d.getDate())\n }\n\n static fromIsoFormat(dateString: string): date {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(dateString)\n if (!match || !match[1] || !match[2] || !match[3]) {\n throw new Error(`Invalid isoFormat string: '${dateString}'`)\n }\n return new date(parseInt(match[1]), parseInt(match[2]), parseInt(match[3]))\n }\n\n static fromOrdinal(ordinal: number): date {\n // Days since year 1\n const d = new Date(Date.UTC(1, 0, ordinal))\n return new date(d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate())\n }\n\n replace(options?: { year?: number; month?: number; day?: number }): date {\n return new date(\n options?.year ?? this.year,\n options?.month ?? this.month,\n options?.day ?? this.day\n )\n }\n\n toOrdinal(): number {\n const d = new Date(Date.UTC(this.year, this.month - 1, this.day))\n const epoch = new Date(Date.UTC(1, 0, 1))\n return Math.floor((d.getTime() - epoch.getTime()) / (24 * 60 * 60 * 1000)) + 1\n }\n\n weekday(): number {\n // Monday is 0, Sunday is 6\n const d = new Date(this.year, this.month - 1, this.day)\n return (d.getDay() + 6) % 7\n }\n\n isoWeekday(): number {\n // Monday is 1, Sunday is 7\n return this.weekday() + 1\n }\n\n isoCalendar(): [number, number, number] {\n const d = new Date(this.year, this.month - 1, this.day)\n const dayOfYear = Math.floor(\n (d.getTime() - new Date(this.year, 0, 0).getTime()) / (24 * 60 * 60 * 1000)\n )\n const jan1 = new Date(this.year, 0, 1)\n const jan1Weekday = (jan1.getDay() + 6) % 7 // Monday = 0\n\n let week = Math.floor((dayOfYear + jan1Weekday - 1) / 7)\n let year = this.year\n\n if (week < 1) {\n year -= 1\n week = 52\n } else if (week > 52) {\n const dec31 = new Date(this.year, 11, 31)\n const dec31Weekday = (dec31.getDay() + 6) % 7\n if (dec31Weekday < 3) {\n week = 1\n year += 1\n }\n }\n\n return [year, week, this.isoWeekday()]\n }\n\n isoFormat(): string {\n return `${String(this.year)}-${String(this.month).padStart(2, \"0\")}-${String(this.day).padStart(2, \"0\")}`\n }\n\n strftime(format: string): string {\n return strftime(format, new datetime(this.year, this.month, this.day, 0, 0, 0, 0))\n }\n\n toString(): string {\n return this.isoFormat()\n }\n\n __add__(delta: timedelta): date {\n const d = new Date(this.year, this.month - 1, this.day + delta.days)\n return new date(d.getFullYear(), d.getMonth() + 1, d.getDate())\n }\n\n __sub__(other: date | timedelta): date | timedelta {\n if (other instanceof timedelta) {\n const d = new Date(this.year, this.month - 1, this.day - other.days)\n return new date(d.getFullYear(), d.getMonth() + 1, d.getDate())\n }\n // other is a date\n const d1 = new Date(this.year, this.month - 1, this.day)\n const d2 = new Date(other.year, other.month - 1, other.day)\n const diffMs = d1.getTime() - d2.getTime()\n return new timedelta({ days: Math.floor(diffMs / (24 * 60 * 60 * 1000)) })\n }\n\n __lt__(other: date): boolean {\n return this.toOrdinal() < other.toOrdinal()\n }\n\n __le__(other: date): boolean {\n return this.toOrdinal() <= other.toOrdinal()\n }\n\n __gt__(other: date): boolean {\n return this.toOrdinal() > other.toOrdinal()\n }\n\n __ge__(other: date): boolean {\n return this.toOrdinal() >= other.toOrdinal()\n }\n\n __eq__(other: date): boolean {\n return this.toOrdinal() === other.toOrdinal()\n }\n\n static min = new date(1, 1, 1)\n static max = new date(9999, 12, 31)\n static resolution = new timedelta({ days: 1 })\n}\n\n// ============================================================================\n// time class\n// ============================================================================\n\nexport class time {\n readonly hour: number\n readonly minute: number\n readonly second: number\n readonly microsecond: number\n readonly tzinfo: null\n\n constructor(hour: number = 0, minute: number = 0, second: number = 0, microsecond: number = 0) {\n if (hour < 0 || hour > 23) throw new Error(\"hour must be in 0..23\")\n if (minute < 0 || minute > 59) throw new Error(\"minute must be in 0..59\")\n if (second < 0 || second > 59) throw new Error(\"second must be in 0..59\")\n if (microsecond < 0 || microsecond > 999999) throw new Error(\"microsecond must be in 0..999999\")\n\n this.hour = hour\n this.minute = minute\n this.second = second\n this.microsecond = microsecond\n this.tzinfo = null\n }\n\n static fromIsoFormat(timeString: string): time {\n const match = /^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?$/.exec(timeString)\n if (!match || !match[1] || !match[2] || !match[3]) {\n throw new Error(`Invalid isoFormat string: '${timeString}'`)\n }\n const microsecond = match[4] ? parseInt(match[4].padEnd(6, \"0\").slice(0, 6)) : 0\n return new time(parseInt(match[1]), parseInt(match[2]), parseInt(match[3]), microsecond)\n }\n\n replace(options?: {\n hour?: number\n minute?: number\n second?: number\n microsecond?: number\n }): time {\n return new time(\n options?.hour ?? this.hour,\n options?.minute ?? this.minute,\n options?.second ?? this.second,\n options?.microsecond ?? this.microsecond\n )\n }\n\n isoFormat(\n timespec: \"auto\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\" | \"microseconds\" = \"auto\"\n ): string {\n const hh = String(this.hour).padStart(2, \"0\")\n const mm = String(this.minute).padStart(2, \"0\")\n const ss = String(this.second).padStart(2, \"0\")\n\n switch (timespec) {\n case \"hours\":\n return hh\n case \"minutes\":\n return `${hh}:${mm}`\n case \"seconds\":\n return `${hh}:${mm}:${ss}`\n case \"milliseconds\":\n return `${hh}:${mm}:${ss}.${String(Math.floor(this.microsecond / 1000)).padStart(3, \"0\")}`\n case \"microseconds\":\n return `${hh}:${mm}:${ss}.${String(this.microsecond).padStart(6, \"0\")}`\n case \"auto\":\n default:\n if (this.microsecond > 0) {\n return `${hh}:${mm}:${ss}.${String(this.microsecond).padStart(6, \"0\")}`\n }\n return `${hh}:${mm}:${ss}`\n }\n }\n\n strftime(format: string): string {\n return strftime(\n format,\n new datetime(1900, 1, 1, this.hour, this.minute, this.second, this.microsecond)\n )\n }\n\n toString(): string {\n return this.isoFormat()\n }\n\n static min = new time(0, 0, 0, 0)\n static max = new time(23, 59, 59, 999999)\n static resolution = new timedelta({ microseconds: 1 })\n}\n\n// ============================================================================\n// datetime class\n// ============================================================================\n\nexport class datetime extends date {\n readonly hour: number\n readonly minute: number\n readonly second: number\n readonly microsecond: number\n readonly tzinfo: null\n\n constructor(\n year: number,\n month: number,\n day: number,\n hour: number = 0,\n minute: number = 0,\n second: number = 0,\n microsecond: number = 0\n ) {\n super(year, month, day)\n if (hour < 0 || hour > 23) throw new Error(\"hour must be in 0..23\")\n if (minute < 0 || minute > 59) throw new Error(\"minute must be in 0..59\")\n if (second < 0 || second > 59) throw new Error(\"second must be in 0..59\")\n if (microsecond < 0 || microsecond > 999999) throw new Error(\"microsecond must be in 0..999999\")\n\n this.hour = hour\n this.minute = minute\n this.second = second\n this.microsecond = microsecond\n this.tzinfo = null\n }\n\n static override today(): datetime {\n return datetime.now()\n }\n\n static now(): datetime {\n const d = new Date()\n return new datetime(\n d.getFullYear(),\n d.getMonth() + 1,\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds(),\n d.getMilliseconds() * 1000\n )\n }\n\n static utcNow(): datetime {\n const d = new Date()\n return new datetime(\n d.getUTCFullYear(),\n d.getUTCMonth() + 1,\n d.getUTCDate(),\n d.getUTCHours(),\n d.getUTCMinutes(),\n d.getUTCSeconds(),\n d.getUTCMilliseconds() * 1000\n )\n }\n\n static override fromTimestamp(timestamp: number): datetime {\n const d = new Date(timestamp * 1000)\n return new datetime(\n d.getFullYear(),\n d.getMonth() + 1,\n d.getDate(),\n d.getHours(),\n d.getMinutes(),\n d.getSeconds(),\n d.getMilliseconds() * 1000\n )\n }\n\n static utcfromTimestamp(timestamp: number): datetime {\n const d = new Date(timestamp * 1000)\n return new datetime(\n d.getUTCFullYear(),\n d.getUTCMonth() + 1,\n d.getUTCDate(),\n d.getUTCHours(),\n d.getUTCMinutes(),\n d.getUTCSeconds(),\n d.getUTCMilliseconds() * 1000\n )\n }\n\n static override fromIsoFormat(s: string): datetime {\n // Parse ISO format: YYYY-MM-DD[T]HH:MM:SS[.ffffff]\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})[T ](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?$/.exec(s)\n if (!match || !match[1] || !match[2] || !match[3] || !match[4] || !match[5] || !match[6]) {\n // Try date-only format\n const dateMatch = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(s)\n if (dateMatch && dateMatch[1] && dateMatch[2] && dateMatch[3]) {\n return new datetime(parseInt(dateMatch[1]), parseInt(dateMatch[2]), parseInt(dateMatch[3]))\n }\n throw new Error(`Invalid isoFormat string: '${s}'`)\n }\n const microsecond = match[7] ? parseInt(match[7].padEnd(6, \"0\").slice(0, 6)) : 0\n return new datetime(\n parseInt(match[1]),\n parseInt(match[2]),\n parseInt(match[3]),\n parseInt(match[4]),\n parseInt(match[5]),\n parseInt(match[6]),\n microsecond\n )\n }\n\n static combine(d: date, t: time): datetime {\n return new datetime(d.year, d.month, d.day, t.hour, t.minute, t.second, t.microsecond)\n }\n\n static strptime(dateString: string, format: string): datetime {\n return strptime(dateString, format)\n }\n\n override replace(options?: {\n year?: number\n month?: number\n day?: number\n hour?: number\n minute?: number\n second?: number\n microsecond?: number\n }): datetime {\n return new datetime(\n options?.year ?? this.year,\n options?.month ?? this.month,\n options?.day ?? this.day,\n options?.hour ?? this.hour,\n options?.minute ?? this.minute,\n options?.second ?? this.second,\n options?.microsecond ?? this.microsecond\n )\n }\n\n date(): date {\n return new date(this.year, this.month, this.day)\n }\n\n time(): time {\n return new time(this.hour, this.minute, this.second, this.microsecond)\n }\n\n timestamp(): number {\n const d = new Date(\n this.year,\n this.month - 1,\n this.day,\n this.hour,\n this.minute,\n this.second,\n this.microsecond / 1000\n )\n return d.getTime() / 1000\n }\n\n override isoFormat(\n sep: string = \"T\",\n timespec: \"auto\" | \"hours\" | \"minutes\" | \"seconds\" | \"milliseconds\" | \"microseconds\" = \"auto\"\n ): string {\n const dateStr = super.isoFormat()\n const t = new time(this.hour, this.minute, this.second, this.microsecond)\n return `${dateStr}${sep}${t.isoFormat(timespec)}`\n }\n\n ctime(): string {\n const days = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\n const months = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ]\n const dayName = days[this.weekday()] ?? \"???\"\n const monthName = months[this.month - 1] ?? \"???\"\n return `${dayName} ${monthName} ${String(this.day).padStart(2, \" \")} ${String(this.hour).padStart(2, \"0\")}:${String(this.minute).padStart(2, \"0\")}:${String(this.second).padStart(2, \"0\")} ${String(this.year)}`\n }\n\n override strftime(format: string): string {\n return strftime(format, this)\n }\n\n override toString(): string {\n return this.isoFormat(\" \")\n }\n\n override __add__(delta: timedelta): datetime {\n const totalMicroseconds =\n this.timestamp() * 1000000 + this.microsecond + delta.totalSeconds() * 1000000\n return datetime.fromTimestamp(totalMicroseconds / 1000000)\n }\n\n override __sub__(other: datetime | date | timedelta): datetime | timedelta {\n if (other instanceof timedelta) {\n const totalMicroseconds =\n this.timestamp() * 1000000 + this.microsecond - other.totalSeconds() * 1000000\n return datetime.fromTimestamp(totalMicroseconds / 1000000)\n }\n if (other instanceof datetime) {\n const diff = this.timestamp() - other.timestamp()\n const microDiff = this.microsecond - other.microsecond\n return new timedelta({ seconds: diff, microseconds: microDiff })\n }\n // other is a date\n const d1 = new Date(this.year, this.month - 1, this.day)\n const d2 = new Date(other.year, other.month - 1, other.day)\n const diffMs = d1.getTime() - d2.getTime()\n return new timedelta({ days: Math.floor(diffMs / (24 * 60 * 60 * 1000)) })\n }\n\n static override min = new datetime(1, 1, 1, 0, 0, 0, 0)\n static override max = new datetime(9999, 12, 31, 23, 59, 59, 999999)\n static override resolution = new timedelta({ microseconds: 1 })\n}\n\n// ============================================================================\n// strftime and strptime\n// ============================================================================\n\nconst WEEKDAY_NAMES = [\"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"]\nconst WEEKDAY_ABBR = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\nconst MONTH_NAMES = [\n \"\",\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n]\nconst MONTH_ABBR = [\n \"\",\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n]\n\nexport function strftime(format: string, dt: datetime): string {\n const pad = (n: number, width: number = 2) => String(n).padStart(width, \"0\")\n\n return format.replace(/%([aAbBcdHIjmMpSUwWxXyYzZ%])/g, (_, code: string) => {\n switch (code) {\n case \"a\":\n return WEEKDAY_ABBR[dt.weekday()] ?? \"\"\n case \"A\":\n return WEEKDAY_NAMES[dt.weekday()] ?? \"\"\n case \"b\":\n return MONTH_ABBR[dt.month] ?? \"\"\n case \"B\":\n return MONTH_NAMES[dt.month] ?? \"\"\n case \"c\":\n return dt.ctime()\n case \"d\":\n return pad(dt.day)\n case \"H\":\n return pad(dt.hour)\n case \"I\":\n return pad(dt.hour % 12 || 12)\n case \"j\": {\n const start = new Date(dt.year, 0, 0)\n const diff = new Date(dt.year, dt.month - 1, dt.day).getTime() - start.getTime()\n const dayOfYear = Math.floor(diff / (24 * 60 * 60 * 1000))\n return pad(dayOfYear, 3)\n }\n case \"m\":\n return pad(dt.month)\n case \"M\":\n return pad(dt.minute)\n case \"p\":\n return dt.hour < 12 ? \"AM\" : \"PM\"\n case \"S\":\n return pad(dt.second)\n case \"U\": {\n // Week number (Sunday as first day)\n const start = new Date(dt.year, 0, 1)\n const diff = new Date(dt.year, dt.month - 1, dt.day).getTime() - start.getTime()\n const dayOfYear = Math.floor(diff / (24 * 60 * 60 * 1000))\n const firstSunday = (7 - start.getDay()) % 7\n return pad(Math.floor((dayOfYear - firstSunday + 7) / 7))\n }\n case \"w\":\n return String((dt.weekday() + 1) % 7)\n case \"W\": {\n // Week number (Monday as first day)\n const start = new Date(dt.year, 0, 1)\n const diff = new Date(dt.year, dt.month - 1, dt.day).getTime() - start.getTime()\n const dayOfYear = Math.floor(diff / (24 * 60 * 60 * 1000))\n const firstMonday = (8 - start.getDay()) % 7\n return pad(Math.floor((dayOfYear - firstMonday + 7) / 7))\n }\n case \"x\":\n return `${pad(dt.month)}/${pad(dt.day)}/${pad(dt.year % 100)}`\n case \"X\":\n return `${pad(dt.hour)}:${pad(dt.minute)}:${pad(dt.second)}`\n case \"y\":\n return pad(dt.year % 100)\n case \"Y\":\n return String(dt.year)\n case \"z\":\n return \"\" // No timezone info\n case \"Z\":\n return \"\" // No timezone name\n case \"%\":\n return \"%\"\n default:\n return `%${code}`\n }\n })\n}\n\nexport function strptime(dateString: string, format: string): datetime {\n let year = 1900,\n month = 1,\n day = 1,\n hour = 0,\n minute = 0,\n second = 0,\n microsecond = 0\n\n // Build regex from format\n let pos = 0\n let formatPos = 0\n\n while (formatPos < format.length) {\n if (format[formatPos] === \"%\") {\n formatPos++\n const code = format[formatPos]\n formatPos++\n\n switch (code) {\n case \"Y\": {\n const match = /^\\d{4}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid year\")\n year = parseInt(match[0])\n pos += 4\n break\n }\n case \"y\": {\n const match = /^\\d{2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid year\")\n const y = parseInt(match[0])\n year = y >= 69 ? 1900 + y : 2000 + y\n pos += 2\n break\n }\n case \"m\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid month\")\n month = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"d\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid day\")\n day = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"H\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid hour\")\n hour = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"M\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid minute\")\n minute = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"S\": {\n const match = /^\\d{1,2}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid second\")\n second = parseInt(match[0])\n pos += match[0].length\n break\n }\n case \"f\": {\n const match = /^\\d{1,6}/.exec(dateString.slice(pos))\n if (!match) throw new Error(\"Invalid microsecond\")\n microsecond = parseInt(match[0].padEnd(6, \"0\"))\n pos += match[0].length\n break\n }\n case \"b\":\n case \"B\": {\n const names = code === \"b\" ? MONTH_ABBR : MONTH_NAMES\n let found = false\n for (let i = 1; i <= 12; i++) {\n const name = names[i]\n if (name && dateString.slice(pos).toLowerCase().startsWith(name.toLowerCase())) {\n month = i\n pos += name.length\n found = true\n break\n }\n }\n if (!found) throw new Error(\"Invalid month name\")\n break\n }\n /* v8 ignore start -- rare edge cases @preserve */\n case \"%\":\n if (dateString[pos] !== \"%\") throw new Error(\"Expected %\")\n pos++\n break\n default:\n // Skip unknown codes\n break\n /* v8 ignore stop */\n }\n } else {\n // Literal character\n const expectedChar = format[formatPos] ?? \"\"\n if (dateString[pos] !== expectedChar) {\n throw new Error(`Expected '${expectedChar}' at position ${String(pos)}`)\n }\n pos++\n formatPos++\n }\n }\n\n return new datetime(year, month, day, hour, minute, second, microsecond)\n}\n\n// ============================================================================\n// Module-level constants\n// ============================================================================\n\nexport const MINYEAR = 1\nexport const MAXYEAR = 9999\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}