@atmaticai/agent-tools-core 1.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 (142) hide show
  1. package/README.md +742 -0
  2. package/dist/archive/index.d.mts +1 -0
  3. package/dist/archive/index.d.ts +1 -0
  4. package/dist/archive/index.js +90 -0
  5. package/dist/archive/index.js.map +1 -0
  6. package/dist/archive/index.mjs +80 -0
  7. package/dist/archive/index.mjs.map +1 -0
  8. package/dist/color/index.d.mts +1 -0
  9. package/dist/color/index.d.ts +1 -0
  10. package/dist/color/index.js +347 -0
  11. package/dist/color/index.js.map +1 -0
  12. package/dist/color/index.mjs +336 -0
  13. package/dist/color/index.mjs.map +1 -0
  14. package/dist/crypto/index.d.mts +1 -0
  15. package/dist/crypto/index.d.ts +1 -0
  16. package/dist/crypto/index.js +116 -0
  17. package/dist/crypto/index.js.map +1 -0
  18. package/dist/crypto/index.mjs +108 -0
  19. package/dist/crypto/index.mjs.map +1 -0
  20. package/dist/csv/index.d.mts +1 -0
  21. package/dist/csv/index.d.ts +1 -0
  22. package/dist/csv/index.js +371 -0
  23. package/dist/csv/index.js.map +1 -0
  24. package/dist/csv/index.mjs +348 -0
  25. package/dist/csv/index.mjs.map +1 -0
  26. package/dist/datetime/index.d.mts +1 -0
  27. package/dist/datetime/index.d.ts +1 -0
  28. package/dist/datetime/index.js +234 -0
  29. package/dist/datetime/index.js.map +1 -0
  30. package/dist/datetime/index.mjs +224 -0
  31. package/dist/datetime/index.mjs.map +1 -0
  32. package/dist/diff/index.d.mts +2 -0
  33. package/dist/diff/index.d.ts +2 -0
  34. package/dist/diff/index.js +84 -0
  35. package/dist/diff/index.js.map +1 -0
  36. package/dist/diff/index.mjs +78 -0
  37. package/dist/diff/index.mjs.map +1 -0
  38. package/dist/excel/index.d.mts +1 -0
  39. package/dist/excel/index.d.ts +1 -0
  40. package/dist/excel/index.js +163 -0
  41. package/dist/excel/index.js.map +1 -0
  42. package/dist/excel/index.mjs +153 -0
  43. package/dist/excel/index.mjs.map +1 -0
  44. package/dist/image/index.d.mts +1 -0
  45. package/dist/image/index.d.ts +1 -0
  46. package/dist/image/index.js +123 -0
  47. package/dist/image/index.js.map +1 -0
  48. package/dist/image/index.mjs +107 -0
  49. package/dist/image/index.mjs.map +1 -0
  50. package/dist/index--vbnYfdE.d.mts +142 -0
  51. package/dist/index--vbnYfdE.d.ts +142 -0
  52. package/dist/index-7FZQloN-.d.mts +62 -0
  53. package/dist/index-7FZQloN-.d.ts +62 -0
  54. package/dist/index-7XgaTVH5.d.mts +93 -0
  55. package/dist/index-7XgaTVH5.d.ts +93 -0
  56. package/dist/index-7bvFmh45.d.mts +87 -0
  57. package/dist/index-7bvFmh45.d.ts +87 -0
  58. package/dist/index-BDZcIVCU.d.mts +53 -0
  59. package/dist/index-BDZcIVCU.d.ts +53 -0
  60. package/dist/index-BN00EnUU.d.mts +55 -0
  61. package/dist/index-BN00EnUU.d.ts +55 -0
  62. package/dist/index-CQ1EukC4.d.mts +59 -0
  63. package/dist/index-CQ1EukC4.d.ts +59 -0
  64. package/dist/index-CgRVnFOt.d.mts +91 -0
  65. package/dist/index-CgRVnFOt.d.ts +91 -0
  66. package/dist/index-DjBDZzuj.d.mts +54 -0
  67. package/dist/index-DjBDZzuj.d.ts +54 -0
  68. package/dist/index-FFrvmr-n.d.mts +50 -0
  69. package/dist/index-FFrvmr-n.d.ts +50 -0
  70. package/dist/index-QWC8yIgW.d.mts +106 -0
  71. package/dist/index-QWC8yIgW.d.ts +106 -0
  72. package/dist/index-RVqNunxE.d.mts +193 -0
  73. package/dist/index-RVqNunxE.d.ts +193 -0
  74. package/dist/index-fJD8SORm.d.mts +61 -0
  75. package/dist/index-fJD8SORm.d.ts +61 -0
  76. package/dist/index-pPy_XDQU.d.mts +56 -0
  77. package/dist/index-pPy_XDQU.d.ts +56 -0
  78. package/dist/index-rwh9hdD9.d.mts +68 -0
  79. package/dist/index-rwh9hdD9.d.ts +68 -0
  80. package/dist/index-uXdkAfea.d.mts +93 -0
  81. package/dist/index-uXdkAfea.d.ts +93 -0
  82. package/dist/index.d.mts +17 -0
  83. package/dist/index.d.ts +17 -0
  84. package/dist/index.js +3744 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/index.mjs +3694 -0
  87. package/dist/index.mjs.map +1 -0
  88. package/dist/json/index.d.mts +1 -0
  89. package/dist/json/index.d.ts +1 -0
  90. package/dist/json/index.js +599 -0
  91. package/dist/json/index.js.map +1 -0
  92. package/dist/json/index.mjs +552 -0
  93. package/dist/json/index.mjs.map +1 -0
  94. package/dist/markdown/index.d.mts +1 -0
  95. package/dist/markdown/index.d.ts +1 -0
  96. package/dist/markdown/index.js +151 -0
  97. package/dist/markdown/index.js.map +1 -0
  98. package/dist/markdown/index.mjs +139 -0
  99. package/dist/markdown/index.mjs.map +1 -0
  100. package/dist/math/index.d.mts +1 -0
  101. package/dist/math/index.d.ts +1 -0
  102. package/dist/math/index.js +247 -0
  103. package/dist/math/index.js.map +1 -0
  104. package/dist/math/index.mjs +240 -0
  105. package/dist/math/index.mjs.map +1 -0
  106. package/dist/pdf/index.d.mts +1 -0
  107. package/dist/pdf/index.d.ts +1 -0
  108. package/dist/pdf/index.js +546 -0
  109. package/dist/pdf/index.js.map +1 -0
  110. package/dist/pdf/index.mjs +518 -0
  111. package/dist/pdf/index.mjs.map +1 -0
  112. package/dist/regex/index.d.mts +1 -0
  113. package/dist/regex/index.d.ts +1 -0
  114. package/dist/regex/index.js +93 -0
  115. package/dist/regex/index.js.map +1 -0
  116. package/dist/regex/index.mjs +88 -0
  117. package/dist/regex/index.mjs.map +1 -0
  118. package/dist/settings/index.d.mts +41 -0
  119. package/dist/settings/index.d.ts +41 -0
  120. package/dist/settings/index.js +146 -0
  121. package/dist/settings/index.js.map +1 -0
  122. package/dist/settings/index.mjs +139 -0
  123. package/dist/settings/index.mjs.map +1 -0
  124. package/dist/sql/index.d.mts +1 -0
  125. package/dist/sql/index.d.ts +1 -0
  126. package/dist/sql/index.js +146 -0
  127. package/dist/sql/index.js.map +1 -0
  128. package/dist/sql/index.mjs +139 -0
  129. package/dist/sql/index.mjs.map +1 -0
  130. package/dist/text/index.d.mts +1 -0
  131. package/dist/text/index.d.ts +1 -0
  132. package/dist/text/index.js +250 -0
  133. package/dist/text/index.js.map +1 -0
  134. package/dist/text/index.mjs +242 -0
  135. package/dist/text/index.mjs.map +1 -0
  136. package/dist/xml/index.d.mts +1 -0
  137. package/dist/xml/index.d.ts +1 -0
  138. package/dist/xml/index.js +188 -0
  139. package/dist/xml/index.js.map +1 -0
  140. package/dist/xml/index.mjs +180 -0
  141. package/dist/xml/index.mjs.map +1 -0
  142. package/package.json +150 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/datetime/parse.ts","../../src/datetime/math.ts","../../src/datetime/timezone.ts","../../src/datetime/cron.ts"],"names":["DateTime","now"],"mappings":"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","file":"index.js","sourcesContent":["import { DateTime } from 'luxon';\nimport type { DateTimeInfo, DateTimeFormatOptions } from './types';\n\nexport function parseDate(\n input: string,\n timezone?: string\n): DateTimeInfo {\n let dt: DateTime;\n\n const unixNum = Number(input);\n if (!isNaN(unixNum) && String(unixNum) === input.trim()) {\n dt = unixNum > 1e12\n ? DateTime.fromMillis(unixNum, { zone: timezone ?? 'utc' })\n : DateTime.fromSeconds(unixNum, { zone: timezone ?? 'utc' });\n } else {\n dt = DateTime.fromISO(input, { zone: timezone ?? 'utc' });\n if (!dt.isValid) {\n dt = DateTime.fromRFC2822(input, { zone: timezone ?? 'utc' });\n }\n if (!dt.isValid) {\n dt = DateTime.fromSQL(input, { zone: timezone ?? 'utc' });\n }\n }\n\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input} (${dt.invalidReason})`);\n }\n\n return {\n iso: dt.toISO()!,\n unix: Math.floor(dt.toSeconds()),\n unixMs: dt.toMillis(),\n year: dt.year,\n month: dt.month,\n day: dt.day,\n hour: dt.hour,\n minute: dt.minute,\n second: dt.second,\n dayOfWeek: dt.weekdayLong!,\n dayOfYear: dt.ordinal,\n weekNumber: dt.weekNumber,\n isLeapYear: dt.isInLeapYear,\n timezone: dt.zoneName!,\n offset: dt.toFormat('ZZ'),\n };\n}\n\nexport function formatDate(\n input: string,\n options: DateTimeFormatOptions = {}\n): string {\n const tz = options.timezone ?? 'utc';\n let dt = DateTime.fromISO(input, { zone: tz });\n if (!dt.isValid) {\n dt = DateTime.fromMillis(Number(input), { zone: tz });\n }\n\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input}`);\n }\n\n if (options.format) {\n return dt.toFormat(options.format);\n }\n\n return dt.toISO()!;\n}\n\nexport function now(timezone?: string): DateTimeInfo {\n const dt = DateTime.now().setZone(timezone ?? 'utc');\n return parseDate(dt.toISO()!, timezone);\n}\n","import { DateTime } from 'luxon';\nimport type { DateTimeAddOptions, DateTimeDiffResult } from './types';\n\nexport function add(\n input: string,\n amount: DateTimeAddOptions,\n timezone?: string\n): string {\n const dt = DateTime.fromISO(input, { zone: timezone ?? 'utc' });\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input}`);\n }\n\n const result = dt.plus(amount);\n return result.toISO()!;\n}\n\nexport function subtract(\n input: string,\n amount: DateTimeAddOptions,\n timezone?: string\n): string {\n const dt = DateTime.fromISO(input, { zone: timezone ?? 'utc' });\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input}`);\n }\n\n const result = dt.minus(amount);\n return result.toISO()!;\n}\n\nexport function diff(\n a: string,\n b: string\n): DateTimeDiffResult {\n const dtA = DateTime.fromISO(a, { zone: 'utc' });\n const dtB = DateTime.fromISO(b, { zone: 'utc' });\n\n if (!dtA.isValid || !dtB.isValid) {\n throw new Error('Unable to parse one or both dates');\n }\n\n const duration = dtB.diff(dtA, [\n 'years',\n 'months',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n ]);\n\n const totalMs = dtB.toMillis() - dtA.toMillis();\n\n return {\n years: Math.floor(duration.years),\n months: Math.floor(duration.months),\n days: Math.floor(duration.days),\n hours: Math.floor(duration.hours),\n minutes: Math.floor(duration.minutes),\n seconds: Math.floor(duration.seconds),\n totalDays: Math.floor(totalMs / 86400000),\n totalHours: Math.floor(totalMs / 3600000),\n totalMinutes: Math.floor(totalMs / 60000),\n totalSeconds: Math.floor(totalMs / 1000),\n totalMilliseconds: totalMs,\n };\n}\n","import { DateTime } from 'luxon';\nimport type { TimezoneConvertResult } from './types';\n\nexport function convertTimezone(\n input: string,\n fromTimezone: string,\n toTimezone: string\n): TimezoneConvertResult {\n const dtFrom = DateTime.fromISO(input, { zone: fromTimezone });\n if (!dtFrom.isValid) {\n throw new Error(`Unable to parse date: ${input} in timezone ${fromTimezone}`);\n }\n\n const dtTo = dtFrom.setZone(toTimezone);\n if (!dtTo.isValid) {\n throw new Error(`Invalid target timezone: ${toTimezone}`);\n }\n\n const offsetFrom = dtFrom.offset;\n const offsetTo = dtTo.offset;\n const diffMinutes = offsetTo - offsetFrom;\n const sign = diffMinutes >= 0 ? '+' : '-';\n const absMinutes = Math.abs(diffMinutes);\n const hours = Math.floor(absMinutes / 60);\n const minutes = absMinutes % 60;\n\n return {\n input: dtFrom.toISO()!,\n inputTimezone: fromTimezone,\n output: dtTo.toISO()!,\n outputTimezone: toTimezone,\n offsetDifference: `${sign}${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`,\n };\n}\n\nexport function listTimezones(): string[] {\n return Intl.supportedValuesOf('timeZone');\n}\n","import type { CronParseResult } from './types';\n\nconst _FIELD_NAMES = ['minute', 'hour', 'day of month', 'month', 'day of week'];\nconst MONTH_NAMES = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst DAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nexport function parseCron(expression: string, count: number = 5): CronParseResult {\n const parts = expression.trim().split(/\\s+/);\n\n if (parts.length !== 5) {\n return {\n valid: false,\n description: '',\n nextRuns: [],\n error: `Expected 5 fields, got ${parts.length}`,\n };\n }\n\n try {\n const description = describeCron(parts);\n const nextRuns = getNextRuns(parts, count);\n\n return {\n valid: true,\n description,\n nextRuns: nextRuns.map((d) => d.toISOString()),\n };\n } catch (e) {\n return {\n valid: false,\n description: '',\n nextRuns: [],\n error: (e as Error).message,\n };\n }\n}\n\nfunction describeCron(parts: string[]): string {\n const [min, hour, dom, month, dow] = parts;\n const segments: string[] = [];\n\n if (min === '*' && hour === '*' && dom === '*' && month === '*' && dow === '*') {\n return 'Every minute';\n }\n\n if (min !== '*') segments.push(`at minute ${min}`);\n if (hour !== '*') segments.push(`at hour ${hour}`);\n if (dom !== '*') segments.push(`on day ${dom} of the month`);\n if (month !== '*') {\n const m = parseInt(month);\n segments.push(`in ${!isNaN(m) && m >= 1 && m <= 12 ? MONTH_NAMES[m] : month}`);\n }\n if (dow !== '*') {\n const d = parseInt(dow);\n segments.push(`on ${!isNaN(d) && d >= 0 && d <= 6 ? DAY_NAMES[d] : dow}`);\n }\n\n return segments.join(', ') || 'Every minute';\n}\n\nfunction getNextRuns(parts: string[], count: number): Date[] {\n const runs: Date[] = [];\n const now = new Date();\n const current = new Date(now);\n current.setSeconds(0, 0);\n current.setMinutes(current.getMinutes() + 1);\n\n const maxIterations = 525600;\n let iterations = 0;\n\n while (runs.length < count && iterations < maxIterations) {\n if (matchesCron(current, parts)) {\n runs.push(new Date(current));\n }\n current.setMinutes(current.getMinutes() + 1);\n iterations++;\n }\n\n return runs;\n}\n\nfunction matchesCron(date: Date, parts: string[]): boolean {\n const [minExpr, hourExpr, domExpr, monthExpr, dowExpr] = parts;\n\n return (\n matchesField(date.getMinutes(), minExpr, 0, 59) &&\n matchesField(date.getHours(), hourExpr, 0, 23) &&\n matchesField(date.getDate(), domExpr, 1, 31) &&\n matchesField(date.getMonth() + 1, monthExpr, 1, 12) &&\n matchesField(date.getDay(), dowExpr, 0, 6)\n );\n}\n\nfunction matchesField(value: number, expr: string, min: number, max: number): boolean {\n if (expr === '*') return true;\n\n for (const part of expr.split(',')) {\n if (part.includes('/')) {\n const [range, stepStr] = part.split('/');\n const step = parseInt(stepStr);\n const start = range === '*' ? min : parseInt(range);\n for (let i = start; i <= max; i += step) {\n if (i === value) return true;\n }\n } else if (part.includes('-')) {\n const [startStr, endStr] = part.split('-');\n const start = parseInt(startStr);\n const end = parseInt(endStr);\n if (value >= start && value <= end) return true;\n } else {\n if (parseInt(part) === value) return true;\n }\n }\n\n return false;\n}\n"]}
@@ -0,0 +1,224 @@
1
+ import { DateTime } from 'luxon';
2
+
3
+ // src/datetime/parse.ts
4
+ function parseDate(input, timezone) {
5
+ let dt;
6
+ const unixNum = Number(input);
7
+ if (!isNaN(unixNum) && String(unixNum) === input.trim()) {
8
+ dt = unixNum > 1e12 ? DateTime.fromMillis(unixNum, { zone: timezone ?? "utc" }) : DateTime.fromSeconds(unixNum, { zone: timezone ?? "utc" });
9
+ } else {
10
+ dt = DateTime.fromISO(input, { zone: timezone ?? "utc" });
11
+ if (!dt.isValid) {
12
+ dt = DateTime.fromRFC2822(input, { zone: timezone ?? "utc" });
13
+ }
14
+ if (!dt.isValid) {
15
+ dt = DateTime.fromSQL(input, { zone: timezone ?? "utc" });
16
+ }
17
+ }
18
+ if (!dt.isValid) {
19
+ throw new Error(`Unable to parse date: ${input} (${dt.invalidReason})`);
20
+ }
21
+ return {
22
+ iso: dt.toISO(),
23
+ unix: Math.floor(dt.toSeconds()),
24
+ unixMs: dt.toMillis(),
25
+ year: dt.year,
26
+ month: dt.month,
27
+ day: dt.day,
28
+ hour: dt.hour,
29
+ minute: dt.minute,
30
+ second: dt.second,
31
+ dayOfWeek: dt.weekdayLong,
32
+ dayOfYear: dt.ordinal,
33
+ weekNumber: dt.weekNumber,
34
+ isLeapYear: dt.isInLeapYear,
35
+ timezone: dt.zoneName,
36
+ offset: dt.toFormat("ZZ")
37
+ };
38
+ }
39
+ function formatDate(input, options = {}) {
40
+ const tz = options.timezone ?? "utc";
41
+ let dt = DateTime.fromISO(input, { zone: tz });
42
+ if (!dt.isValid) {
43
+ dt = DateTime.fromMillis(Number(input), { zone: tz });
44
+ }
45
+ if (!dt.isValid) {
46
+ throw new Error(`Unable to parse date: ${input}`);
47
+ }
48
+ if (options.format) {
49
+ return dt.toFormat(options.format);
50
+ }
51
+ return dt.toISO();
52
+ }
53
+ function now(timezone) {
54
+ const dt = DateTime.now().setZone(timezone ?? "utc");
55
+ return parseDate(dt.toISO(), timezone);
56
+ }
57
+ function add(input, amount, timezone) {
58
+ const dt = DateTime.fromISO(input, { zone: timezone ?? "utc" });
59
+ if (!dt.isValid) {
60
+ throw new Error(`Unable to parse date: ${input}`);
61
+ }
62
+ const result = dt.plus(amount);
63
+ return result.toISO();
64
+ }
65
+ function subtract(input, amount, timezone) {
66
+ const dt = DateTime.fromISO(input, { zone: timezone ?? "utc" });
67
+ if (!dt.isValid) {
68
+ throw new Error(`Unable to parse date: ${input}`);
69
+ }
70
+ const result = dt.minus(amount);
71
+ return result.toISO();
72
+ }
73
+ function diff(a, b) {
74
+ const dtA = DateTime.fromISO(a, { zone: "utc" });
75
+ const dtB = DateTime.fromISO(b, { zone: "utc" });
76
+ if (!dtA.isValid || !dtB.isValid) {
77
+ throw new Error("Unable to parse one or both dates");
78
+ }
79
+ const duration = dtB.diff(dtA, [
80
+ "years",
81
+ "months",
82
+ "days",
83
+ "hours",
84
+ "minutes",
85
+ "seconds"
86
+ ]);
87
+ const totalMs = dtB.toMillis() - dtA.toMillis();
88
+ return {
89
+ years: Math.floor(duration.years),
90
+ months: Math.floor(duration.months),
91
+ days: Math.floor(duration.days),
92
+ hours: Math.floor(duration.hours),
93
+ minutes: Math.floor(duration.minutes),
94
+ seconds: Math.floor(duration.seconds),
95
+ totalDays: Math.floor(totalMs / 864e5),
96
+ totalHours: Math.floor(totalMs / 36e5),
97
+ totalMinutes: Math.floor(totalMs / 6e4),
98
+ totalSeconds: Math.floor(totalMs / 1e3),
99
+ totalMilliseconds: totalMs
100
+ };
101
+ }
102
+ function convertTimezone(input, fromTimezone, toTimezone) {
103
+ const dtFrom = DateTime.fromISO(input, { zone: fromTimezone });
104
+ if (!dtFrom.isValid) {
105
+ throw new Error(`Unable to parse date: ${input} in timezone ${fromTimezone}`);
106
+ }
107
+ const dtTo = dtFrom.setZone(toTimezone);
108
+ if (!dtTo.isValid) {
109
+ throw new Error(`Invalid target timezone: ${toTimezone}`);
110
+ }
111
+ const offsetFrom = dtFrom.offset;
112
+ const offsetTo = dtTo.offset;
113
+ const diffMinutes = offsetTo - offsetFrom;
114
+ const sign = diffMinutes >= 0 ? "+" : "-";
115
+ const absMinutes = Math.abs(diffMinutes);
116
+ const hours = Math.floor(absMinutes / 60);
117
+ const minutes = absMinutes % 60;
118
+ return {
119
+ input: dtFrom.toISO(),
120
+ inputTimezone: fromTimezone,
121
+ output: dtTo.toISO(),
122
+ outputTimezone: toTimezone,
123
+ offsetDifference: `${sign}${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`
124
+ };
125
+ }
126
+ function listTimezones() {
127
+ return Intl.supportedValuesOf("timeZone");
128
+ }
129
+
130
+ // src/datetime/cron.ts
131
+ var MONTH_NAMES = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
132
+ var DAY_NAMES = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
133
+ function parseCron(expression, count = 5) {
134
+ const parts = expression.trim().split(/\s+/);
135
+ if (parts.length !== 5) {
136
+ return {
137
+ valid: false,
138
+ description: "",
139
+ nextRuns: [],
140
+ error: `Expected 5 fields, got ${parts.length}`
141
+ };
142
+ }
143
+ try {
144
+ const description = describeCron(parts);
145
+ const nextRuns = getNextRuns(parts, count);
146
+ return {
147
+ valid: true,
148
+ description,
149
+ nextRuns: nextRuns.map((d) => d.toISOString())
150
+ };
151
+ } catch (e) {
152
+ return {
153
+ valid: false,
154
+ description: "",
155
+ nextRuns: [],
156
+ error: e.message
157
+ };
158
+ }
159
+ }
160
+ function describeCron(parts) {
161
+ const [min, hour, dom, month, dow] = parts;
162
+ const segments = [];
163
+ if (min === "*" && hour === "*" && dom === "*" && month === "*" && dow === "*") {
164
+ return "Every minute";
165
+ }
166
+ if (min !== "*") segments.push(`at minute ${min}`);
167
+ if (hour !== "*") segments.push(`at hour ${hour}`);
168
+ if (dom !== "*") segments.push(`on day ${dom} of the month`);
169
+ if (month !== "*") {
170
+ const m = parseInt(month);
171
+ segments.push(`in ${!isNaN(m) && m >= 1 && m <= 12 ? MONTH_NAMES[m] : month}`);
172
+ }
173
+ if (dow !== "*") {
174
+ const d = parseInt(dow);
175
+ segments.push(`on ${!isNaN(d) && d >= 0 && d <= 6 ? DAY_NAMES[d] : dow}`);
176
+ }
177
+ return segments.join(", ") || "Every minute";
178
+ }
179
+ function getNextRuns(parts, count) {
180
+ const runs = [];
181
+ const now2 = /* @__PURE__ */ new Date();
182
+ const current = new Date(now2);
183
+ current.setSeconds(0, 0);
184
+ current.setMinutes(current.getMinutes() + 1);
185
+ const maxIterations = 525600;
186
+ let iterations = 0;
187
+ while (runs.length < count && iterations < maxIterations) {
188
+ if (matchesCron(current, parts)) {
189
+ runs.push(new Date(current));
190
+ }
191
+ current.setMinutes(current.getMinutes() + 1);
192
+ iterations++;
193
+ }
194
+ return runs;
195
+ }
196
+ function matchesCron(date, parts) {
197
+ const [minExpr, hourExpr, domExpr, monthExpr, dowExpr] = parts;
198
+ return matchesField(date.getMinutes(), minExpr, 0, 59) && matchesField(date.getHours(), hourExpr, 0, 23) && matchesField(date.getDate(), domExpr, 1, 31) && matchesField(date.getMonth() + 1, monthExpr, 1, 12) && matchesField(date.getDay(), dowExpr, 0, 6);
199
+ }
200
+ function matchesField(value, expr, min, max) {
201
+ if (expr === "*") return true;
202
+ for (const part of expr.split(",")) {
203
+ if (part.includes("/")) {
204
+ const [range, stepStr] = part.split("/");
205
+ const step = parseInt(stepStr);
206
+ const start = range === "*" ? min : parseInt(range);
207
+ for (let i = start; i <= max; i += step) {
208
+ if (i === value) return true;
209
+ }
210
+ } else if (part.includes("-")) {
211
+ const [startStr, endStr] = part.split("-");
212
+ const start = parseInt(startStr);
213
+ const end = parseInt(endStr);
214
+ if (value >= start && value <= end) return true;
215
+ } else {
216
+ if (parseInt(part) === value) return true;
217
+ }
218
+ }
219
+ return false;
220
+ }
221
+
222
+ export { add, convertTimezone, diff, formatDate, listTimezones, now, parseCron, parseDate, subtract };
223
+ //# sourceMappingURL=index.mjs.map
224
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/datetime/parse.ts","../../src/datetime/math.ts","../../src/datetime/timezone.ts","../../src/datetime/cron.ts"],"names":["DateTime","now"],"mappings":"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","file":"index.mjs","sourcesContent":["import { DateTime } from 'luxon';\nimport type { DateTimeInfo, DateTimeFormatOptions } from './types';\n\nexport function parseDate(\n input: string,\n timezone?: string\n): DateTimeInfo {\n let dt: DateTime;\n\n const unixNum = Number(input);\n if (!isNaN(unixNum) && String(unixNum) === input.trim()) {\n dt = unixNum > 1e12\n ? DateTime.fromMillis(unixNum, { zone: timezone ?? 'utc' })\n : DateTime.fromSeconds(unixNum, { zone: timezone ?? 'utc' });\n } else {\n dt = DateTime.fromISO(input, { zone: timezone ?? 'utc' });\n if (!dt.isValid) {\n dt = DateTime.fromRFC2822(input, { zone: timezone ?? 'utc' });\n }\n if (!dt.isValid) {\n dt = DateTime.fromSQL(input, { zone: timezone ?? 'utc' });\n }\n }\n\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input} (${dt.invalidReason})`);\n }\n\n return {\n iso: dt.toISO()!,\n unix: Math.floor(dt.toSeconds()),\n unixMs: dt.toMillis(),\n year: dt.year,\n month: dt.month,\n day: dt.day,\n hour: dt.hour,\n minute: dt.minute,\n second: dt.second,\n dayOfWeek: dt.weekdayLong!,\n dayOfYear: dt.ordinal,\n weekNumber: dt.weekNumber,\n isLeapYear: dt.isInLeapYear,\n timezone: dt.zoneName!,\n offset: dt.toFormat('ZZ'),\n };\n}\n\nexport function formatDate(\n input: string,\n options: DateTimeFormatOptions = {}\n): string {\n const tz = options.timezone ?? 'utc';\n let dt = DateTime.fromISO(input, { zone: tz });\n if (!dt.isValid) {\n dt = DateTime.fromMillis(Number(input), { zone: tz });\n }\n\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input}`);\n }\n\n if (options.format) {\n return dt.toFormat(options.format);\n }\n\n return dt.toISO()!;\n}\n\nexport function now(timezone?: string): DateTimeInfo {\n const dt = DateTime.now().setZone(timezone ?? 'utc');\n return parseDate(dt.toISO()!, timezone);\n}\n","import { DateTime } from 'luxon';\nimport type { DateTimeAddOptions, DateTimeDiffResult } from './types';\n\nexport function add(\n input: string,\n amount: DateTimeAddOptions,\n timezone?: string\n): string {\n const dt = DateTime.fromISO(input, { zone: timezone ?? 'utc' });\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input}`);\n }\n\n const result = dt.plus(amount);\n return result.toISO()!;\n}\n\nexport function subtract(\n input: string,\n amount: DateTimeAddOptions,\n timezone?: string\n): string {\n const dt = DateTime.fromISO(input, { zone: timezone ?? 'utc' });\n if (!dt.isValid) {\n throw new Error(`Unable to parse date: ${input}`);\n }\n\n const result = dt.minus(amount);\n return result.toISO()!;\n}\n\nexport function diff(\n a: string,\n b: string\n): DateTimeDiffResult {\n const dtA = DateTime.fromISO(a, { zone: 'utc' });\n const dtB = DateTime.fromISO(b, { zone: 'utc' });\n\n if (!dtA.isValid || !dtB.isValid) {\n throw new Error('Unable to parse one or both dates');\n }\n\n const duration = dtB.diff(dtA, [\n 'years',\n 'months',\n 'days',\n 'hours',\n 'minutes',\n 'seconds',\n ]);\n\n const totalMs = dtB.toMillis() - dtA.toMillis();\n\n return {\n years: Math.floor(duration.years),\n months: Math.floor(duration.months),\n days: Math.floor(duration.days),\n hours: Math.floor(duration.hours),\n minutes: Math.floor(duration.minutes),\n seconds: Math.floor(duration.seconds),\n totalDays: Math.floor(totalMs / 86400000),\n totalHours: Math.floor(totalMs / 3600000),\n totalMinutes: Math.floor(totalMs / 60000),\n totalSeconds: Math.floor(totalMs / 1000),\n totalMilliseconds: totalMs,\n };\n}\n","import { DateTime } from 'luxon';\nimport type { TimezoneConvertResult } from './types';\n\nexport function convertTimezone(\n input: string,\n fromTimezone: string,\n toTimezone: string\n): TimezoneConvertResult {\n const dtFrom = DateTime.fromISO(input, { zone: fromTimezone });\n if (!dtFrom.isValid) {\n throw new Error(`Unable to parse date: ${input} in timezone ${fromTimezone}`);\n }\n\n const dtTo = dtFrom.setZone(toTimezone);\n if (!dtTo.isValid) {\n throw new Error(`Invalid target timezone: ${toTimezone}`);\n }\n\n const offsetFrom = dtFrom.offset;\n const offsetTo = dtTo.offset;\n const diffMinutes = offsetTo - offsetFrom;\n const sign = diffMinutes >= 0 ? '+' : '-';\n const absMinutes = Math.abs(diffMinutes);\n const hours = Math.floor(absMinutes / 60);\n const minutes = absMinutes % 60;\n\n return {\n input: dtFrom.toISO()!,\n inputTimezone: fromTimezone,\n output: dtTo.toISO()!,\n outputTimezone: toTimezone,\n offsetDifference: `${sign}${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`,\n };\n}\n\nexport function listTimezones(): string[] {\n return Intl.supportedValuesOf('timeZone');\n}\n","import type { CronParseResult } from './types';\n\nconst _FIELD_NAMES = ['minute', 'hour', 'day of month', 'month', 'day of week'];\nconst MONTH_NAMES = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst DAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nexport function parseCron(expression: string, count: number = 5): CronParseResult {\n const parts = expression.trim().split(/\\s+/);\n\n if (parts.length !== 5) {\n return {\n valid: false,\n description: '',\n nextRuns: [],\n error: `Expected 5 fields, got ${parts.length}`,\n };\n }\n\n try {\n const description = describeCron(parts);\n const nextRuns = getNextRuns(parts, count);\n\n return {\n valid: true,\n description,\n nextRuns: nextRuns.map((d) => d.toISOString()),\n };\n } catch (e) {\n return {\n valid: false,\n description: '',\n nextRuns: [],\n error: (e as Error).message,\n };\n }\n}\n\nfunction describeCron(parts: string[]): string {\n const [min, hour, dom, month, dow] = parts;\n const segments: string[] = [];\n\n if (min === '*' && hour === '*' && dom === '*' && month === '*' && dow === '*') {\n return 'Every minute';\n }\n\n if (min !== '*') segments.push(`at minute ${min}`);\n if (hour !== '*') segments.push(`at hour ${hour}`);\n if (dom !== '*') segments.push(`on day ${dom} of the month`);\n if (month !== '*') {\n const m = parseInt(month);\n segments.push(`in ${!isNaN(m) && m >= 1 && m <= 12 ? MONTH_NAMES[m] : month}`);\n }\n if (dow !== '*') {\n const d = parseInt(dow);\n segments.push(`on ${!isNaN(d) && d >= 0 && d <= 6 ? DAY_NAMES[d] : dow}`);\n }\n\n return segments.join(', ') || 'Every minute';\n}\n\nfunction getNextRuns(parts: string[], count: number): Date[] {\n const runs: Date[] = [];\n const now = new Date();\n const current = new Date(now);\n current.setSeconds(0, 0);\n current.setMinutes(current.getMinutes() + 1);\n\n const maxIterations = 525600;\n let iterations = 0;\n\n while (runs.length < count && iterations < maxIterations) {\n if (matchesCron(current, parts)) {\n runs.push(new Date(current));\n }\n current.setMinutes(current.getMinutes() + 1);\n iterations++;\n }\n\n return runs;\n}\n\nfunction matchesCron(date: Date, parts: string[]): boolean {\n const [minExpr, hourExpr, domExpr, monthExpr, dowExpr] = parts;\n\n return (\n matchesField(date.getMinutes(), minExpr, 0, 59) &&\n matchesField(date.getHours(), hourExpr, 0, 23) &&\n matchesField(date.getDate(), domExpr, 1, 31) &&\n matchesField(date.getMonth() + 1, monthExpr, 1, 12) &&\n matchesField(date.getDay(), dowExpr, 0, 6)\n );\n}\n\nfunction matchesField(value: number, expr: string, min: number, max: number): boolean {\n if (expr === '*') return true;\n\n for (const part of expr.split(',')) {\n if (part.includes('/')) {\n const [range, stepStr] = part.split('/');\n const step = parseInt(stepStr);\n const start = range === '*' ? min : parseInt(range);\n for (let i = start; i <= max; i += step) {\n if (i === value) return true;\n }\n } else if (part.includes('-')) {\n const [startStr, endStr] = part.split('-');\n const start = parseInt(startStr);\n const end = parseInt(endStr);\n if (value >= start && value <= end) return true;\n } else {\n if (parseInt(part) === value) return true;\n }\n }\n\n return false;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { D as DiffChange, a as DiffOptions, b as DiffResult, c as DiffType, P as PatchOptions, U as UnifiedDiffOptions, d as apply, e as compare, f as createUnifiedPatch, p as parsePatchFile, u as unifiedDiff } from '../index-BN00EnUU.mjs';
2
+ import 'diff';
@@ -0,0 +1,2 @@
1
+ export { D as DiffChange, a as DiffOptions, b as DiffResult, c as DiffType, P as PatchOptions, U as UnifiedDiffOptions, d as apply, e as compare, f as createUnifiedPatch, p as parsePatchFile, u as unifiedDiff } from '../index-BN00EnUU.js';
2
+ import 'diff';
@@ -0,0 +1,84 @@
1
+ 'use strict';
2
+
3
+ var diff = require('diff');
4
+
5
+ // src/diff/compare.ts
6
+ function compare(a, b, options = {}) {
7
+ const type = options.type ?? "line";
8
+ let rawChanges;
9
+ switch (type) {
10
+ case "word":
11
+ rawChanges = diff.diffWords(a, b, {
12
+ ignoreWhitespace: options.ignoreWhitespace
13
+ });
14
+ break;
15
+ case "char":
16
+ rawChanges = diff.diffChars(a, b);
17
+ break;
18
+ case "line":
19
+ default:
20
+ rawChanges = diff.diffLines(a, b, {
21
+ ignoreWhitespace: options.ignoreWhitespace
22
+ });
23
+ break;
24
+ }
25
+ const changes = rawChanges.map((c) => ({
26
+ type: c.added ? "added" : c.removed ? "removed" : "unchanged",
27
+ value: c.value,
28
+ count: c.count ?? 0
29
+ }));
30
+ let additions = 0;
31
+ let deletions = 0;
32
+ let unchanged = 0;
33
+ for (const change of changes) {
34
+ switch (change.type) {
35
+ case "added":
36
+ additions += change.count;
37
+ break;
38
+ case "removed":
39
+ deletions += change.count;
40
+ break;
41
+ case "unchanged":
42
+ unchanged += change.count;
43
+ break;
44
+ }
45
+ }
46
+ return {
47
+ identical: additions === 0 && deletions === 0,
48
+ changes,
49
+ stats: { additions, deletions, unchanged }
50
+ };
51
+ }
52
+ function unifiedDiff(a, b, options = {}) {
53
+ const fromFile = options.fromFile ?? "a";
54
+ const toFile = options.toFile ?? "b";
55
+ const context = options.context ?? 3;
56
+ return diff.createTwoFilesPatch(fromFile, toFile, a, b, void 0, void 0, {
57
+ context
58
+ });
59
+ }
60
+ function createUnifiedPatch(fileName, original, modified, context = 3) {
61
+ return diff.createPatch(fileName, original, modified, void 0, void 0, {
62
+ context
63
+ });
64
+ }
65
+ function apply(input, patch, options = {}) {
66
+ const result = diff.applyPatch(input, patch, {
67
+ fuzzFactor: options.fuzz ?? 0
68
+ });
69
+ if (result === false) {
70
+ throw new Error("Failed to apply patch: patch does not match the input");
71
+ }
72
+ return result;
73
+ }
74
+ function parsePatchFile(patch) {
75
+ return diff.parsePatch(patch);
76
+ }
77
+
78
+ exports.apply = apply;
79
+ exports.compare = compare;
80
+ exports.createUnifiedPatch = createUnifiedPatch;
81
+ exports.parsePatchFile = parsePatchFile;
82
+ exports.unifiedDiff = unifiedDiff;
83
+ //# sourceMappingURL=index.js.map
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/diff/compare.ts","../../src/diff/unified.ts","../../src/diff/patch.ts"],"names":["diffWords","diffChars","diffLines","createTwoFilesPatch","createPatch","applyPatch","parsePatch"],"mappings":"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","file":"index.js","sourcesContent":["import {\n diffLines,\n diffWords,\n diffChars,\n type Change,\n} from 'diff';\nimport type { DiffOptions, DiffResult, DiffChange } from './types';\n\nexport function compare(\n a: string,\n b: string,\n options: DiffOptions = {}\n): DiffResult {\n const type = options.type ?? 'line';\n\n let rawChanges: Change[];\n\n switch (type) {\n case 'word':\n rawChanges = diffWords(a, b, {\n ignoreWhitespace: options.ignoreWhitespace,\n });\n break;\n case 'char':\n rawChanges = diffChars(a, b);\n break;\n case 'line':\n default:\n rawChanges = diffLines(a, b, {\n ignoreWhitespace: options.ignoreWhitespace,\n });\n break;\n }\n\n const changes: DiffChange[] = rawChanges.map((c) => ({\n type: c.added ? 'added' : c.removed ? 'removed' : 'unchanged',\n value: c.value,\n count: c.count ?? 0,\n }));\n\n let additions = 0;\n let deletions = 0;\n let unchanged = 0;\n\n for (const change of changes) {\n switch (change.type) {\n case 'added':\n additions += change.count;\n break;\n case 'removed':\n deletions += change.count;\n break;\n case 'unchanged':\n unchanged += change.count;\n break;\n }\n }\n\n return {\n identical: additions === 0 && deletions === 0,\n changes,\n stats: { additions, deletions, unchanged },\n };\n}\n","import { createTwoFilesPatch, createPatch } from 'diff';\nimport type { UnifiedDiffOptions } from './types';\n\nexport function unifiedDiff(\n a: string,\n b: string,\n options: UnifiedDiffOptions = {}\n): string {\n const fromFile = options.fromFile ?? 'a';\n const toFile = options.toFile ?? 'b';\n const context = options.context ?? 3;\n\n return createTwoFilesPatch(fromFile, toFile, a, b, undefined, undefined, {\n context,\n });\n}\n\nexport function createUnifiedPatch(\n fileName: string,\n original: string,\n modified: string,\n context: number = 3\n): string {\n return createPatch(fileName, original, modified, undefined, undefined, {\n context,\n });\n}\n","import { applyPatch, parsePatch } from 'diff';\nimport type { PatchOptions } from './types';\n\nexport function apply(\n input: string,\n patch: string,\n options: PatchOptions = {}\n): string {\n const result = applyPatch(input, patch, {\n fuzzFactor: options.fuzz ?? 0,\n });\n\n if (result === false) {\n throw new Error('Failed to apply patch: patch does not match the input');\n }\n\n return result;\n}\n\nexport function parsePatchFile(patch: string) {\n return parsePatch(patch);\n}\n"]}
@@ -0,0 +1,78 @@
1
+ import { diffLines, diffChars, diffWords, createTwoFilesPatch, createPatch, applyPatch, parsePatch } from 'diff';
2
+
3
+ // src/diff/compare.ts
4
+ function compare(a, b, options = {}) {
5
+ const type = options.type ?? "line";
6
+ let rawChanges;
7
+ switch (type) {
8
+ case "word":
9
+ rawChanges = diffWords(a, b, {
10
+ ignoreWhitespace: options.ignoreWhitespace
11
+ });
12
+ break;
13
+ case "char":
14
+ rawChanges = diffChars(a, b);
15
+ break;
16
+ case "line":
17
+ default:
18
+ rawChanges = diffLines(a, b, {
19
+ ignoreWhitespace: options.ignoreWhitespace
20
+ });
21
+ break;
22
+ }
23
+ const changes = rawChanges.map((c) => ({
24
+ type: c.added ? "added" : c.removed ? "removed" : "unchanged",
25
+ value: c.value,
26
+ count: c.count ?? 0
27
+ }));
28
+ let additions = 0;
29
+ let deletions = 0;
30
+ let unchanged = 0;
31
+ for (const change of changes) {
32
+ switch (change.type) {
33
+ case "added":
34
+ additions += change.count;
35
+ break;
36
+ case "removed":
37
+ deletions += change.count;
38
+ break;
39
+ case "unchanged":
40
+ unchanged += change.count;
41
+ break;
42
+ }
43
+ }
44
+ return {
45
+ identical: additions === 0 && deletions === 0,
46
+ changes,
47
+ stats: { additions, deletions, unchanged }
48
+ };
49
+ }
50
+ function unifiedDiff(a, b, options = {}) {
51
+ const fromFile = options.fromFile ?? "a";
52
+ const toFile = options.toFile ?? "b";
53
+ const context = options.context ?? 3;
54
+ return createTwoFilesPatch(fromFile, toFile, a, b, void 0, void 0, {
55
+ context
56
+ });
57
+ }
58
+ function createUnifiedPatch(fileName, original, modified, context = 3) {
59
+ return createPatch(fileName, original, modified, void 0, void 0, {
60
+ context
61
+ });
62
+ }
63
+ function apply(input, patch, options = {}) {
64
+ const result = applyPatch(input, patch, {
65
+ fuzzFactor: options.fuzz ?? 0
66
+ });
67
+ if (result === false) {
68
+ throw new Error("Failed to apply patch: patch does not match the input");
69
+ }
70
+ return result;
71
+ }
72
+ function parsePatchFile(patch) {
73
+ return parsePatch(patch);
74
+ }
75
+
76
+ export { apply, compare, createUnifiedPatch, parsePatchFile, unifiedDiff };
77
+ //# sourceMappingURL=index.mjs.map
78
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/diff/compare.ts","../../src/diff/unified.ts","../../src/diff/patch.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n diffLines,\n diffWords,\n diffChars,\n type Change,\n} from 'diff';\nimport type { DiffOptions, DiffResult, DiffChange } from './types';\n\nexport function compare(\n a: string,\n b: string,\n options: DiffOptions = {}\n): DiffResult {\n const type = options.type ?? 'line';\n\n let rawChanges: Change[];\n\n switch (type) {\n case 'word':\n rawChanges = diffWords(a, b, {\n ignoreWhitespace: options.ignoreWhitespace,\n });\n break;\n case 'char':\n rawChanges = diffChars(a, b);\n break;\n case 'line':\n default:\n rawChanges = diffLines(a, b, {\n ignoreWhitespace: options.ignoreWhitespace,\n });\n break;\n }\n\n const changes: DiffChange[] = rawChanges.map((c) => ({\n type: c.added ? 'added' : c.removed ? 'removed' : 'unchanged',\n value: c.value,\n count: c.count ?? 0,\n }));\n\n let additions = 0;\n let deletions = 0;\n let unchanged = 0;\n\n for (const change of changes) {\n switch (change.type) {\n case 'added':\n additions += change.count;\n break;\n case 'removed':\n deletions += change.count;\n break;\n case 'unchanged':\n unchanged += change.count;\n break;\n }\n }\n\n return {\n identical: additions === 0 && deletions === 0,\n changes,\n stats: { additions, deletions, unchanged },\n };\n}\n","import { createTwoFilesPatch, createPatch } from 'diff';\nimport type { UnifiedDiffOptions } from './types';\n\nexport function unifiedDiff(\n a: string,\n b: string,\n options: UnifiedDiffOptions = {}\n): string {\n const fromFile = options.fromFile ?? 'a';\n const toFile = options.toFile ?? 'b';\n const context = options.context ?? 3;\n\n return createTwoFilesPatch(fromFile, toFile, a, b, undefined, undefined, {\n context,\n });\n}\n\nexport function createUnifiedPatch(\n fileName: string,\n original: string,\n modified: string,\n context: number = 3\n): string {\n return createPatch(fileName, original, modified, undefined, undefined, {\n context,\n });\n}\n","import { applyPatch, parsePatch } from 'diff';\nimport type { PatchOptions } from './types';\n\nexport function apply(\n input: string,\n patch: string,\n options: PatchOptions = {}\n): string {\n const result = applyPatch(input, patch, {\n fuzzFactor: options.fuzz ?? 0,\n });\n\n if (result === false) {\n throw new Error('Failed to apply patch: patch does not match the input');\n }\n\n return result;\n}\n\nexport function parsePatchFile(patch: string) {\n return parsePatch(patch);\n}\n"]}
@@ -0,0 +1 @@
1
+ export { E as ExcelConvertFormat, a as ExcelConvertOptions, b as ExcelExportOptions, c as ExcelParseOptions, d as ExcelParseResult, e as ExcelStats, S as SheetInfo, f as convert, g as createExcel, h as getSheets, j as getStats, p as parse } from '../index-CQ1EukC4.mjs';
@@ -0,0 +1 @@
1
+ export { E as ExcelConvertFormat, a as ExcelConvertOptions, b as ExcelExportOptions, c as ExcelParseOptions, d as ExcelParseResult, e as ExcelStats, S as SheetInfo, f as convert, g as createExcel, h as getSheets, j as getStats, p as parse } from '../index-CQ1EukC4.js';