@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,336 @@
1
+ // src/color/parse.ts
2
+ function hexToRgb(hex) {
3
+ let h = hex.replace(/^#/, "");
4
+ if (h.length === 3) {
5
+ h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
6
+ }
7
+ if (h.length !== 6) {
8
+ throw new Error(`Invalid hex color: ${hex}`);
9
+ }
10
+ const num = parseInt(h, 16);
11
+ if (isNaN(num)) {
12
+ throw new Error(`Invalid hex color: ${hex}`);
13
+ }
14
+ return {
15
+ r: num >> 16 & 255,
16
+ g: num >> 8 & 255,
17
+ b: num & 255
18
+ };
19
+ }
20
+ function hslToRgb(h, s, l) {
21
+ const sNorm = s / 100;
22
+ const lNorm = l / 100;
23
+ const c = (1 - Math.abs(2 * lNorm - 1)) * sNorm;
24
+ const hPrime = h / 60;
25
+ const x = c * (1 - Math.abs(hPrime % 2 - 1));
26
+ const m = lNorm - c / 2;
27
+ let r1 = 0;
28
+ let g1 = 0;
29
+ let b1 = 0;
30
+ if (hPrime >= 0 && hPrime < 1) {
31
+ r1 = c;
32
+ g1 = x;
33
+ b1 = 0;
34
+ } else if (hPrime >= 1 && hPrime < 2) {
35
+ r1 = x;
36
+ g1 = c;
37
+ b1 = 0;
38
+ } else if (hPrime >= 2 && hPrime < 3) {
39
+ r1 = 0;
40
+ g1 = c;
41
+ b1 = x;
42
+ } else if (hPrime >= 3 && hPrime < 4) {
43
+ r1 = 0;
44
+ g1 = x;
45
+ b1 = c;
46
+ } else if (hPrime >= 4 && hPrime < 5) {
47
+ r1 = x;
48
+ g1 = 0;
49
+ b1 = c;
50
+ } else if (hPrime >= 5 && hPrime < 6) {
51
+ r1 = c;
52
+ g1 = 0;
53
+ b1 = x;
54
+ }
55
+ return {
56
+ r: Math.round((r1 + m) * 255),
57
+ g: Math.round((g1 + m) * 255),
58
+ b: Math.round((b1 + m) * 255)
59
+ };
60
+ }
61
+ function rgbToHsl(r, g, b) {
62
+ const rNorm = r / 255;
63
+ const gNorm = g / 255;
64
+ const bNorm = b / 255;
65
+ const max = Math.max(rNorm, gNorm, bNorm);
66
+ const min = Math.min(rNorm, gNorm, bNorm);
67
+ const delta = max - min;
68
+ let h = 0;
69
+ let s = 0;
70
+ const l = (max + min) / 2;
71
+ if (delta !== 0) {
72
+ s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
73
+ if (max === rNorm) {
74
+ h = ((gNorm - bNorm) / delta + (gNorm < bNorm ? 6 : 0)) * 60;
75
+ } else if (max === gNorm) {
76
+ h = ((bNorm - rNorm) / delta + 2) * 60;
77
+ } else {
78
+ h = ((rNorm - gNorm) / delta + 4) * 60;
79
+ }
80
+ }
81
+ return {
82
+ h: Math.round(h),
83
+ s: Math.round(s * 100),
84
+ l: Math.round(l * 100)
85
+ };
86
+ }
87
+ function rgbToHex(r, g, b) {
88
+ const toHex = (c) => {
89
+ const hex = Math.max(0, Math.min(255, c)).toString(16);
90
+ return hex.length === 1 ? "0" + hex : hex;
91
+ };
92
+ return "#" + toHex(r) + toHex(g) + toHex(b);
93
+ }
94
+ function parseColor(input) {
95
+ const trimmed = input.trim().toLowerCase();
96
+ let rgb;
97
+ const hexMatch = trimmed.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/);
98
+ if (hexMatch) {
99
+ rgb = hexToRgb(trimmed);
100
+ } else {
101
+ const rgbMatch = trimmed.match(/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/);
102
+ if (rgbMatch) {
103
+ rgb = {
104
+ r: Math.min(255, parseInt(rgbMatch[1], 10)),
105
+ g: Math.min(255, parseInt(rgbMatch[2], 10)),
106
+ b: Math.min(255, parseInt(rgbMatch[3], 10))
107
+ };
108
+ } else {
109
+ const hslMatch = trimmed.match(/^hsl\(\s*(\d{1,3})\s*,\s*(\d{1,3})%\s*,\s*(\d{1,3})%\s*\)$/);
110
+ if (hslMatch) {
111
+ const h = Math.min(360, parseInt(hslMatch[1], 10));
112
+ const s = Math.min(100, parseInt(hslMatch[2], 10));
113
+ const l = Math.min(100, parseInt(hslMatch[3], 10));
114
+ rgb = hslToRgb(h, s, l);
115
+ } else {
116
+ throw new Error(`Unsupported color format: ${input}`);
117
+ }
118
+ }
119
+ }
120
+ const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);
121
+ const hex = rgbToHex(rgb.r, rgb.g, rgb.b);
122
+ return {
123
+ hex,
124
+ rgb: `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`,
125
+ hsl: `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`,
126
+ values: {
127
+ rgb,
128
+ hsl
129
+ }
130
+ };
131
+ }
132
+
133
+ // src/color/convert.ts
134
+ function convertColor(input, to) {
135
+ const result = parseColor(input);
136
+ switch (to) {
137
+ case "hex":
138
+ return result.hex;
139
+ case "rgb":
140
+ return result.rgb;
141
+ case "hsl":
142
+ return result.hsl;
143
+ default:
144
+ throw new Error(`Unsupported target format: ${to}`);
145
+ }
146
+ }
147
+
148
+ // src/color/contrast.ts
149
+ function srgbChannel(c) {
150
+ const normalized = c / 255;
151
+ return normalized <= 0.03928 ? normalized / 12.92 : Math.pow((normalized + 0.055) / 1.055, 2.4);
152
+ }
153
+ function relativeLuminance(r, g, b) {
154
+ return 0.2126 * srgbChannel(r) + 0.7152 * srgbChannel(g) + 0.0722 * srgbChannel(b);
155
+ }
156
+ function contrastRatio(color1, color2) {
157
+ const c1 = parseColor(color1);
158
+ const c2 = parseColor(color2);
159
+ const l1 = relativeLuminance(c1.values.rgb.r, c1.values.rgb.g, c1.values.rgb.b);
160
+ const l2 = relativeLuminance(c2.values.rgb.r, c2.values.rgb.g, c2.values.rgb.b);
161
+ const lighter = Math.max(l1, l2);
162
+ const darker = Math.min(l1, l2);
163
+ const ratio = (lighter + 0.05) / (darker + 0.05);
164
+ const roundedRatio = Math.round(ratio * 100) / 100;
165
+ return {
166
+ ratio: roundedRatio,
167
+ formatted: `${roundedRatio.toFixed(2)}:1`,
168
+ aa: {
169
+ normal: roundedRatio >= 4.5,
170
+ large: roundedRatio >= 3
171
+ },
172
+ aaa: {
173
+ normal: roundedRatio >= 7,
174
+ large: roundedRatio >= 4.5
175
+ }
176
+ };
177
+ }
178
+
179
+ // src/color/palette.ts
180
+ function hslToConversionResult(h, s, l) {
181
+ const normalizedH = (h % 360 + 360) % 360;
182
+ const rgb = hslToRgb(normalizedH, s, l);
183
+ const hex = rgbToHex(rgb.r, rgb.g, rgb.b);
184
+ const hslRecalc = rgbToHsl(rgb.r, rgb.g, rgb.b);
185
+ return {
186
+ hex,
187
+ rgb: `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`,
188
+ hsl: `hsl(${hslRecalc.h}, ${hslRecalc.s}%, ${hslRecalc.l}%)`,
189
+ values: {
190
+ rgb,
191
+ hsl: hslRecalc
192
+ }
193
+ };
194
+ }
195
+ function generatePalette(base, options) {
196
+ const parsed = parseColor(base);
197
+ const { h, s, l } = parsed.values.hsl;
198
+ const count = options.count ?? 5;
199
+ switch (options.type) {
200
+ case "complementary": {
201
+ return [
202
+ hslToConversionResult(h, s, l),
203
+ hslToConversionResult(h + 180, s, l)
204
+ ];
205
+ }
206
+ case "analogous": {
207
+ const results = [];
208
+ const spread = 30;
209
+ const step = spread * 2 / (count - 1);
210
+ for (let i = 0; i < count; i++) {
211
+ const hue = h - spread + step * i;
212
+ results.push(hslToConversionResult(hue, s, l));
213
+ }
214
+ return results;
215
+ }
216
+ case "triadic": {
217
+ return [
218
+ hslToConversionResult(h, s, l),
219
+ hslToConversionResult(h + 120, s, l),
220
+ hslToConversionResult(h + 240, s, l)
221
+ ];
222
+ }
223
+ case "shades": {
224
+ const results = [];
225
+ const minL = 10;
226
+ const step = (l - minL) / (count - 1);
227
+ for (let i = 0; i < count; i++) {
228
+ const lightness = Math.round(l - step * i);
229
+ results.push(hslToConversionResult(h, s, lightness));
230
+ }
231
+ return results;
232
+ }
233
+ case "tints": {
234
+ const results = [];
235
+ const maxL = 95;
236
+ const step = (maxL - l) / (count - 1);
237
+ for (let i = 0; i < count; i++) {
238
+ const lightness = Math.round(l + step * i);
239
+ results.push(hslToConversionResult(h, s, lightness));
240
+ }
241
+ return results;
242
+ }
243
+ default:
244
+ throw new Error(`Unsupported palette type: ${options.type}`);
245
+ }
246
+ }
247
+
248
+ // src/color/blend.ts
249
+ function blendColors(color1, color2, ratio = 0.5) {
250
+ if (ratio < 0 || ratio > 1) {
251
+ throw new Error(`Ratio must be between 0 and 1, got: ${ratio}`);
252
+ }
253
+ const c1 = parseColor(color1);
254
+ const c2 = parseColor(color2);
255
+ const r = Math.round(c1.values.rgb.r * (1 - ratio) + c2.values.rgb.r * ratio);
256
+ const g = Math.round(c1.values.rgb.g * (1 - ratio) + c2.values.rgb.g * ratio);
257
+ const b = Math.round(c1.values.rgb.b * (1 - ratio) + c2.values.rgb.b * ratio);
258
+ const hex = rgbToHex(r, g, b);
259
+ const hsl = rgbToHsl(r, g, b);
260
+ return {
261
+ color: {
262
+ hex,
263
+ rgb: `rgb(${r}, ${g}, ${b})`,
264
+ hsl: `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`,
265
+ values: {
266
+ rgb: { r, g, b },
267
+ hsl
268
+ }
269
+ },
270
+ ratio
271
+ };
272
+ }
273
+
274
+ // src/color/name.ts
275
+ var NAMED_COLORS = {
276
+ black: "#000000",
277
+ white: "#FFFFFF",
278
+ red: "#FF0000",
279
+ green: "#008000",
280
+ blue: "#0000FF",
281
+ yellow: "#FFFF00",
282
+ cyan: "#00FFFF",
283
+ magenta: "#FF00FF",
284
+ orange: "#FFA500",
285
+ purple: "#800080",
286
+ pink: "#FFC0CB",
287
+ brown: "#A52A2A",
288
+ gray: "#808080",
289
+ silver: "#C0C0C0",
290
+ maroon: "#800000",
291
+ navy: "#000080",
292
+ teal: "#008080",
293
+ olive: "#808000",
294
+ lime: "#00FF00",
295
+ aqua: "#00FFFF",
296
+ coral: "#FF7F50",
297
+ salmon: "#FA8072",
298
+ gold: "#FFD700",
299
+ khaki: "#F0E68C",
300
+ plum: "#DDA0DD",
301
+ violet: "#EE82EE",
302
+ indigo: "#4B0082",
303
+ beige: "#F5F5DC",
304
+ ivory: "#FFFFF0",
305
+ lavender: "#E6E6FA"
306
+ };
307
+ function euclideanDistance(r1, g1, b1, r2, g2, b2) {
308
+ return Math.sqrt(
309
+ Math.pow(r1 - r2, 2) + Math.pow(g1 - g2, 2) + Math.pow(b1 - b2, 2)
310
+ );
311
+ }
312
+ function colorName(input) {
313
+ const parsed = parseColor(input);
314
+ const { r, g, b } = parsed.values.rgb;
315
+ let closestName = "";
316
+ let closestHex = "";
317
+ let closestDistance = Infinity;
318
+ for (const [name, hex] of Object.entries(NAMED_COLORS)) {
319
+ const namedRgb = hexToRgb(hex);
320
+ const distance = euclideanDistance(r, g, b, namedRgb.r, namedRgb.g, namedRgb.b);
321
+ if (distance < closestDistance) {
322
+ closestDistance = distance;
323
+ closestName = name;
324
+ closestHex = hex.toLowerCase();
325
+ }
326
+ }
327
+ return {
328
+ name: closestName,
329
+ exact: closestDistance === 0,
330
+ hex: closestHex
331
+ };
332
+ }
333
+
334
+ export { blendColors, colorName, contrastRatio, convertColor, generatePalette, hexToRgb, hslToRgb, parseColor, rgbToHex, rgbToHsl };
335
+ //# sourceMappingURL=index.mjs.map
336
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/color/parse.ts","../../src/color/convert.ts","../../src/color/contrast.ts","../../src/color/palette.ts","../../src/color/blend.ts","../../src/color/name.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { RGB, HSL, ColorConversionResult } from './types';\n\nexport function hexToRgb(hex: string): RGB {\n let h = hex.replace(/^#/, '');\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];\n }\n if (h.length !== 6) {\n throw new Error(`Invalid hex color: ${hex}`);\n }\n const num = parseInt(h, 16);\n if (isNaN(num)) {\n throw new Error(`Invalid hex color: ${hex}`);\n }\n return {\n r: (num >> 16) & 255,\n g: (num >> 8) & 255,\n b: num & 255,\n };\n}\n\nexport function hslToRgb(h: number, s: number, l: number): RGB {\n const sNorm = s / 100;\n const lNorm = l / 100;\n\n const c = (1 - Math.abs(2 * lNorm - 1)) * sNorm;\n const hPrime = h / 60;\n const x = c * (1 - Math.abs((hPrime % 2) - 1));\n const m = lNorm - c / 2;\n\n let r1 = 0;\n let g1 = 0;\n let b1 = 0;\n\n if (hPrime >= 0 && hPrime < 1) {\n r1 = c; g1 = x; b1 = 0;\n } else if (hPrime >= 1 && hPrime < 2) {\n r1 = x; g1 = c; b1 = 0;\n } else if (hPrime >= 2 && hPrime < 3) {\n r1 = 0; g1 = c; b1 = x;\n } else if (hPrime >= 3 && hPrime < 4) {\n r1 = 0; g1 = x; b1 = c;\n } else if (hPrime >= 4 && hPrime < 5) {\n r1 = x; g1 = 0; b1 = c;\n } else if (hPrime >= 5 && hPrime < 6) {\n r1 = c; g1 = 0; b1 = x;\n }\n\n return {\n r: Math.round((r1 + m) * 255),\n g: Math.round((g1 + m) * 255),\n b: Math.round((b1 + m) * 255),\n };\n}\n\nexport function rgbToHsl(r: number, g: number, b: number): HSL {\n const rNorm = r / 255;\n const gNorm = g / 255;\n const bNorm = b / 255;\n\n const max = Math.max(rNorm, gNorm, bNorm);\n const min = Math.min(rNorm, gNorm, bNorm);\n const delta = max - min;\n\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (delta !== 0) {\n s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n if (max === rNorm) {\n h = ((gNorm - bNorm) / delta + (gNorm < bNorm ? 6 : 0)) * 60;\n } else if (max === gNorm) {\n h = ((bNorm - rNorm) / delta + 2) * 60;\n } else {\n h = ((rNorm - gNorm) / delta + 4) * 60;\n }\n }\n\n return {\n h: Math.round(h),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (c: number): string => {\n const hex = Math.max(0, Math.min(255, c)).toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n };\n return '#' + toHex(r) + toHex(g) + toHex(b);\n}\n\nexport function parseColor(input: string): ColorConversionResult {\n const trimmed = input.trim().toLowerCase();\n\n let rgb: RGB;\n\n // Try hex format\n const hexMatch = trimmed.match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/);\n if (hexMatch) {\n rgb = hexToRgb(trimmed);\n }\n // Try rgb() format\n else {\n const rgbMatch = trimmed.match(/^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/);\n if (rgbMatch) {\n rgb = {\n r: Math.min(255, parseInt(rgbMatch[1], 10)),\n g: Math.min(255, parseInt(rgbMatch[2], 10)),\n b: Math.min(255, parseInt(rgbMatch[3], 10)),\n };\n }\n // Try hsl() format\n else {\n const hslMatch = trimmed.match(/^hsl\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*\\)$/);\n if (hslMatch) {\n const h = Math.min(360, parseInt(hslMatch[1], 10));\n const s = Math.min(100, parseInt(hslMatch[2], 10));\n const l = Math.min(100, parseInt(hslMatch[3], 10));\n rgb = hslToRgb(h, s, l);\n } else {\n throw new Error(`Unsupported color format: ${input}`);\n }\n }\n }\n\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n const hex = rgbToHex(rgb.r, rgb.g, rgb.b);\n\n return {\n hex,\n rgb: `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`,\n hsl: `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`,\n values: {\n rgb,\n hsl,\n },\n };\n}\n","import type { ColorFormat } from './types';\nimport { parseColor } from './parse';\n\nexport function convertColor(input: string, to: ColorFormat): string {\n const result = parseColor(input);\n\n switch (to) {\n case 'hex':\n return result.hex;\n case 'rgb':\n return result.rgb;\n case 'hsl':\n return result.hsl;\n default:\n throw new Error(`Unsupported target format: ${to}`);\n }\n}\n","import type { ContrastResult } from './types';\nimport { parseColor } from './parse';\n\nfunction srgbChannel(c: number): number {\n const normalized = c / 255;\n return normalized <= 0.03928\n ? normalized / 12.92\n : Math.pow((normalized + 0.055) / 1.055, 2.4);\n}\n\nfunction relativeLuminance(r: number, g: number, b: number): number {\n return 0.2126 * srgbChannel(r) + 0.7152 * srgbChannel(g) + 0.0722 * srgbChannel(b);\n}\n\nexport function contrastRatio(color1: string, color2: string): ContrastResult {\n const c1 = parseColor(color1);\n const c2 = parseColor(color2);\n\n const l1 = relativeLuminance(c1.values.rgb.r, c1.values.rgb.g, c1.values.rgb.b);\n const l2 = relativeLuminance(c2.values.rgb.r, c2.values.rgb.g, c2.values.rgb.b);\n\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n\n const ratio = (lighter + 0.05) / (darker + 0.05);\n const roundedRatio = Math.round(ratio * 100) / 100;\n\n return {\n ratio: roundedRatio,\n formatted: `${roundedRatio.toFixed(2)}:1`,\n aa: {\n normal: roundedRatio >= 4.5,\n large: roundedRatio >= 3,\n },\n aaa: {\n normal: roundedRatio >= 7,\n large: roundedRatio >= 4.5,\n },\n };\n}\n","import type { PaletteOptions, ColorConversionResult } from './types';\nimport { parseColor, hslToRgb, rgbToHsl, rgbToHex } from './parse';\n\nfunction hslToConversionResult(h: number, s: number, l: number): ColorConversionResult {\n const normalizedH = ((h % 360) + 360) % 360;\n const rgb = hslToRgb(normalizedH, s, l);\n const hex = rgbToHex(rgb.r, rgb.g, rgb.b);\n const hslRecalc = rgbToHsl(rgb.r, rgb.g, rgb.b);\n\n return {\n hex,\n rgb: `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`,\n hsl: `hsl(${hslRecalc.h}, ${hslRecalc.s}%, ${hslRecalc.l}%)`,\n values: {\n rgb,\n hsl: hslRecalc,\n },\n };\n}\n\nexport function generatePalette(base: string, options: PaletteOptions): ColorConversionResult[] {\n const parsed = parseColor(base);\n const { h, s, l } = parsed.values.hsl;\n const count = options.count ?? 5;\n\n switch (options.type) {\n case 'complementary': {\n return [\n hslToConversionResult(h, s, l),\n hslToConversionResult(h + 180, s, l),\n ];\n }\n\n case 'analogous': {\n const results: ColorConversionResult[] = [];\n const spread = 30;\n const step = (spread * 2) / (count - 1);\n for (let i = 0; i < count; i++) {\n const hue = h - spread + step * i;\n results.push(hslToConversionResult(hue, s, l));\n }\n return results;\n }\n\n case 'triadic': {\n return [\n hslToConversionResult(h, s, l),\n hslToConversionResult(h + 120, s, l),\n hslToConversionResult(h + 240, s, l),\n ];\n }\n\n case 'shades': {\n const results: ColorConversionResult[] = [];\n const minL = 10;\n const step = (l - minL) / (count - 1);\n for (let i = 0; i < count; i++) {\n const lightness = Math.round(l - step * i);\n results.push(hslToConversionResult(h, s, lightness));\n }\n return results;\n }\n\n case 'tints': {\n const results: ColorConversionResult[] = [];\n const maxL = 95;\n const step = (maxL - l) / (count - 1);\n for (let i = 0; i < count; i++) {\n const lightness = Math.round(l + step * i);\n results.push(hslToConversionResult(h, s, lightness));\n }\n return results;\n }\n\n default:\n throw new Error(`Unsupported palette type: ${options.type}`);\n }\n}\n","import type { BlendResult } from './types';\nimport { parseColor, rgbToHex, rgbToHsl } from './parse';\n\nexport function blendColors(color1: string, color2: string, ratio: number = 0.5): BlendResult {\n if (ratio < 0 || ratio > 1) {\n throw new Error(`Ratio must be between 0 and 1, got: ${ratio}`);\n }\n\n const c1 = parseColor(color1);\n const c2 = parseColor(color2);\n\n const r = Math.round(c1.values.rgb.r * (1 - ratio) + c2.values.rgb.r * ratio);\n const g = Math.round(c1.values.rgb.g * (1 - ratio) + c2.values.rgb.g * ratio);\n const b = Math.round(c1.values.rgb.b * (1 - ratio) + c2.values.rgb.b * ratio);\n\n const hex = rgbToHex(r, g, b);\n const hsl = rgbToHsl(r, g, b);\n\n return {\n color: {\n hex,\n rgb: `rgb(${r}, ${g}, ${b})`,\n hsl: `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`,\n values: {\n rgb: { r, g, b },\n hsl,\n },\n },\n ratio,\n };\n}\n","import type { ColorNameResult } from './types';\nimport { parseColor, hexToRgb } from './parse';\n\nconst NAMED_COLORS: Record<string, string> = {\n black: '#000000',\n white: '#FFFFFF',\n red: '#FF0000',\n green: '#008000',\n blue: '#0000FF',\n yellow: '#FFFF00',\n cyan: '#00FFFF',\n magenta: '#FF00FF',\n orange: '#FFA500',\n purple: '#800080',\n pink: '#FFC0CB',\n brown: '#A52A2A',\n gray: '#808080',\n silver: '#C0C0C0',\n maroon: '#800000',\n navy: '#000080',\n teal: '#008080',\n olive: '#808000',\n lime: '#00FF00',\n aqua: '#00FFFF',\n coral: '#FF7F50',\n salmon: '#FA8072',\n gold: '#FFD700',\n khaki: '#F0E68C',\n plum: '#DDA0DD',\n violet: '#EE82EE',\n indigo: '#4B0082',\n beige: '#F5F5DC',\n ivory: '#FFFFF0',\n lavender: '#E6E6FA',\n};\n\nfunction euclideanDistance(r1: number, g1: number, b1: number, r2: number, g2: number, b2: number): number {\n return Math.sqrt(\n Math.pow(r1 - r2, 2) +\n Math.pow(g1 - g2, 2) +\n Math.pow(b1 - b2, 2)\n );\n}\n\nexport function colorName(input: string): ColorNameResult {\n const parsed = parseColor(input);\n const { r, g, b } = parsed.values.rgb;\n\n let closestName = '';\n let closestHex = '';\n let closestDistance = Infinity;\n\n for (const [name, hex] of Object.entries(NAMED_COLORS)) {\n const namedRgb = hexToRgb(hex);\n const distance = euclideanDistance(r, g, b, namedRgb.r, namedRgb.g, namedRgb.b);\n\n if (distance < closestDistance) {\n closestDistance = distance;\n closestName = name;\n closestHex = hex.toLowerCase();\n }\n }\n\n return {\n name: closestName,\n exact: closestDistance === 0,\n hex: closestHex,\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ export { C as ChecksumResult, E as EncodingFormat, H as HashAlgorithm, a as HashResult, b as HmacOptions, c as HmacResult, J as JwtPayload, U as UuidResult, d as checksum, e as decode, f as decodeJwt, g as encode, h as generateUuid, j as hash, k as hmac } from '../index-fJD8SORm.mjs';
@@ -0,0 +1 @@
1
+ export { C as ChecksumResult, E as EncodingFormat, H as HashAlgorithm, a as HashResult, b as HmacOptions, c as HmacResult, J as JwtPayload, U as UuidResult, d as checksum, e as decode, f as decodeJwt, g as encode, h as generateUuid, j as hash, k as hmac } from '../index-fJD8SORm.js';
@@ -0,0 +1,116 @@
1
+ 'use strict';
2
+
3
+ var crypto = require('crypto');
4
+
5
+ // src/crypto/hash.ts
6
+ function hash(input, algorithm = "sha256") {
7
+ const h = crypto.createHash(algorithm).update(input).digest("hex");
8
+ return {
9
+ algorithm,
10
+ hash: h,
11
+ inputLength: input.length
12
+ };
13
+ }
14
+ function hmac(input, key, options = {}) {
15
+ const algorithm = options.algorithm ?? "sha256";
16
+ const h = crypto.createHmac(algorithm, key).update(input).digest("hex");
17
+ return {
18
+ algorithm,
19
+ hmac: h
20
+ };
21
+ }
22
+ function checksum(data, algorithm = "sha256") {
23
+ const buffer = typeof data === "string" ? Buffer.from(data) : Buffer.from(data);
24
+ const h = crypto.createHash(algorithm).update(buffer).digest("hex");
25
+ return {
26
+ algorithm,
27
+ checksum: h,
28
+ sizeBytes: buffer.length
29
+ };
30
+ }
31
+ function generateUuid() {
32
+ let uuid;
33
+ if (typeof globalThis.crypto?.randomUUID === "function") {
34
+ uuid = globalThis.crypto.randomUUID();
35
+ } else {
36
+ uuid = crypto.randomUUID();
37
+ }
38
+ return {
39
+ uuid,
40
+ version: 4
41
+ };
42
+ }
43
+
44
+ // src/crypto/encode.ts
45
+ function encode(input, format) {
46
+ switch (format) {
47
+ case "base64":
48
+ return Buffer.from(input).toString("base64");
49
+ case "hex":
50
+ return Buffer.from(input).toString("hex");
51
+ case "url":
52
+ return encodeURIComponent(input);
53
+ case "html":
54
+ return input.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
55
+ default:
56
+ throw new Error(`Unsupported encoding format: ${format}`);
57
+ }
58
+ }
59
+ function decode(input, format) {
60
+ switch (format) {
61
+ case "base64":
62
+ return Buffer.from(input, "base64").toString("utf8");
63
+ case "hex":
64
+ return Buffer.from(input, "hex").toString("utf8");
65
+ case "url":
66
+ return decodeURIComponent(input);
67
+ case "html":
68
+ return input.replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&amp;/g, "&");
69
+ default:
70
+ throw new Error(`Unsupported encoding format: ${format}`);
71
+ }
72
+ }
73
+
74
+ // src/crypto/jwt.ts
75
+ function base64UrlDecode(str) {
76
+ let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
77
+ const padding = base64.length % 4;
78
+ if (padding) {
79
+ base64 += "=".repeat(4 - padding);
80
+ }
81
+ if (typeof atob === "function") {
82
+ return decodeURIComponent(
83
+ atob(base64).split("").map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join("")
84
+ );
85
+ }
86
+ return Buffer.from(base64, "base64").toString("utf8");
87
+ }
88
+ function decodeJwt(token) {
89
+ const parts = token.split(".");
90
+ if (parts.length !== 3) {
91
+ throw new Error("Invalid JWT: must have 3 parts separated by dots");
92
+ }
93
+ const header = JSON.parse(base64UrlDecode(parts[0]));
94
+ const payload = JSON.parse(base64UrlDecode(parts[1]));
95
+ const result = {
96
+ header,
97
+ payload,
98
+ signature: parts[2]
99
+ };
100
+ if (typeof payload.exp === "number") {
101
+ const expDate = new Date(payload.exp * 1e3);
102
+ result.expired = expDate < /* @__PURE__ */ new Date();
103
+ result.expiresAt = expDate.toISOString();
104
+ }
105
+ return result;
106
+ }
107
+
108
+ exports.checksum = checksum;
109
+ exports.decode = decode;
110
+ exports.decodeJwt = decodeJwt;
111
+ exports.encode = encode;
112
+ exports.generateUuid = generateUuid;
113
+ exports.hash = hash;
114
+ exports.hmac = hmac;
115
+ //# sourceMappingURL=index.js.map
116
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/hash.ts","../../src/crypto/encode.ts","../../src/crypto/jwt.ts"],"names":["createHash","createHmac","randomUUID"],"mappings":"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","file":"index.js","sourcesContent":["import { createHash, createHmac, randomUUID } from 'crypto';\nimport type { HashAlgorithm, HashResult, HmacOptions, HmacResult, ChecksumResult, UuidResult } from './types';\n\nexport function hash(\n input: string,\n algorithm: HashAlgorithm = 'sha256'\n): HashResult {\n const h = createHash(algorithm).update(input).digest('hex');\n return {\n algorithm,\n hash: h,\n inputLength: input.length,\n };\n}\n\nexport function hmac(\n input: string,\n key: string,\n options: HmacOptions = {}\n): HmacResult {\n const algorithm = options.algorithm ?? 'sha256';\n const h = createHmac(algorithm, key).update(input).digest('hex');\n return {\n algorithm,\n hmac: h,\n };\n}\n\nexport function checksum(\n data: Buffer | Uint8Array | string,\n algorithm: HashAlgorithm = 'sha256'\n): ChecksumResult {\n const buffer = typeof data === 'string' ? Buffer.from(data) : Buffer.from(data);\n const h = createHash(algorithm).update(buffer).digest('hex');\n return {\n algorithm,\n checksum: h,\n sizeBytes: buffer.length,\n };\n}\n\nexport function generateUuid(): UuidResult {\n // Use Web Crypto API in browser, Node.js crypto otherwise\n let uuid: string;\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n uuid = globalThis.crypto.randomUUID();\n } else {\n uuid = randomUUID();\n }\n return {\n uuid,\n version: 4,\n };\n}\n","import type { EncodingFormat } from './types';\n\nexport function encode(input: string, format: EncodingFormat): string {\n switch (format) {\n case 'base64':\n return Buffer.from(input).toString('base64');\n case 'hex':\n return Buffer.from(input).toString('hex');\n case 'url':\n return encodeURIComponent(input);\n case 'html':\n return input\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n default:\n throw new Error(`Unsupported encoding format: ${format}`);\n }\n}\n\nexport function decode(input: string, format: EncodingFormat): string {\n switch (format) {\n case 'base64':\n return Buffer.from(input, 'base64').toString('utf8');\n case 'hex':\n return Buffer.from(input, 'hex').toString('utf8');\n case 'url':\n return decodeURIComponent(input);\n case 'html':\n return input\n .replace(/&#39;/g, \"'\")\n .replace(/&quot;/g, '\"')\n .replace(/&gt;/g, '>')\n .replace(/&lt;/g, '<')\n .replace(/&amp;/g, '&');\n default:\n throw new Error(`Unsupported encoding format: ${format}`);\n }\n}\n","import type { JwtPayload } from './types';\n\nfunction base64UrlDecode(str: string): string {\n // Replace base64url characters with standard base64\n let base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n // Add padding if needed\n const padding = base64.length % 4;\n if (padding) {\n base64 += '='.repeat(4 - padding);\n }\n // Use atob for browser, Buffer for Node.js\n if (typeof atob === 'function') {\n return decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n }\n return Buffer.from(base64, 'base64').toString('utf8');\n}\n\nexport function decodeJwt(token: string): JwtPayload {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid JWT: must have 3 parts separated by dots');\n }\n\n const header = JSON.parse(base64UrlDecode(parts[0])) as Record<string, unknown>;\n\n const payload = JSON.parse(base64UrlDecode(parts[1])) as Record<string, unknown>;\n\n const result: JwtPayload = {\n header,\n payload,\n signature: parts[2],\n };\n\n if (typeof payload.exp === 'number') {\n const expDate = new Date(payload.exp * 1000);\n result.expired = expDate < new Date();\n result.expiresAt = expDate.toISOString();\n }\n\n return result;\n}\n"]}
@@ -0,0 +1,108 @@
1
+ import { createHash, createHmac, randomUUID } from 'crypto';
2
+
3
+ // src/crypto/hash.ts
4
+ function hash(input, algorithm = "sha256") {
5
+ const h = createHash(algorithm).update(input).digest("hex");
6
+ return {
7
+ algorithm,
8
+ hash: h,
9
+ inputLength: input.length
10
+ };
11
+ }
12
+ function hmac(input, key, options = {}) {
13
+ const algorithm = options.algorithm ?? "sha256";
14
+ const h = createHmac(algorithm, key).update(input).digest("hex");
15
+ return {
16
+ algorithm,
17
+ hmac: h
18
+ };
19
+ }
20
+ function checksum(data, algorithm = "sha256") {
21
+ const buffer = typeof data === "string" ? Buffer.from(data) : Buffer.from(data);
22
+ const h = createHash(algorithm).update(buffer).digest("hex");
23
+ return {
24
+ algorithm,
25
+ checksum: h,
26
+ sizeBytes: buffer.length
27
+ };
28
+ }
29
+ function generateUuid() {
30
+ let uuid;
31
+ if (typeof globalThis.crypto?.randomUUID === "function") {
32
+ uuid = globalThis.crypto.randomUUID();
33
+ } else {
34
+ uuid = randomUUID();
35
+ }
36
+ return {
37
+ uuid,
38
+ version: 4
39
+ };
40
+ }
41
+
42
+ // src/crypto/encode.ts
43
+ function encode(input, format) {
44
+ switch (format) {
45
+ case "base64":
46
+ return Buffer.from(input).toString("base64");
47
+ case "hex":
48
+ return Buffer.from(input).toString("hex");
49
+ case "url":
50
+ return encodeURIComponent(input);
51
+ case "html":
52
+ return input.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
53
+ default:
54
+ throw new Error(`Unsupported encoding format: ${format}`);
55
+ }
56
+ }
57
+ function decode(input, format) {
58
+ switch (format) {
59
+ case "base64":
60
+ return Buffer.from(input, "base64").toString("utf8");
61
+ case "hex":
62
+ return Buffer.from(input, "hex").toString("utf8");
63
+ case "url":
64
+ return decodeURIComponent(input);
65
+ case "html":
66
+ return input.replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&amp;/g, "&");
67
+ default:
68
+ throw new Error(`Unsupported encoding format: ${format}`);
69
+ }
70
+ }
71
+
72
+ // src/crypto/jwt.ts
73
+ function base64UrlDecode(str) {
74
+ let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
75
+ const padding = base64.length % 4;
76
+ if (padding) {
77
+ base64 += "=".repeat(4 - padding);
78
+ }
79
+ if (typeof atob === "function") {
80
+ return decodeURIComponent(
81
+ atob(base64).split("").map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join("")
82
+ );
83
+ }
84
+ return Buffer.from(base64, "base64").toString("utf8");
85
+ }
86
+ function decodeJwt(token) {
87
+ const parts = token.split(".");
88
+ if (parts.length !== 3) {
89
+ throw new Error("Invalid JWT: must have 3 parts separated by dots");
90
+ }
91
+ const header = JSON.parse(base64UrlDecode(parts[0]));
92
+ const payload = JSON.parse(base64UrlDecode(parts[1]));
93
+ const result = {
94
+ header,
95
+ payload,
96
+ signature: parts[2]
97
+ };
98
+ if (typeof payload.exp === "number") {
99
+ const expDate = new Date(payload.exp * 1e3);
100
+ result.expired = expDate < /* @__PURE__ */ new Date();
101
+ result.expiresAt = expDate.toISOString();
102
+ }
103
+ return result;
104
+ }
105
+
106
+ export { checksum, decode, decodeJwt, encode, generateUuid, hash, hmac };
107
+ //# sourceMappingURL=index.mjs.map
108
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/crypto/hash.ts","../../src/crypto/encode.ts","../../src/crypto/jwt.ts"],"names":[],"mappings":";;;AAGO,SAAS,IAAA,CACd,KAAA,EACA,SAAA,GAA2B,QAAA,EACf;AACZ,EAAA,MAAM,CAAA,GAAI,WAAW,SAAS,CAAA,CAAE,OAAO,KAAK,CAAA,CAAE,OAAO,KAAK,CAAA;AAC1D,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,IAAA,EAAM,CAAA;AAAA,IACN,aAAa,KAAA,CAAM;AAAA,GACrB;AACF;AAEO,SAAS,IAAA,CACd,KAAA,EACA,GAAA,EACA,OAAA,GAAuB,EAAC,EACZ;AACZ,EAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,QAAA;AACvC,EAAA,MAAM,CAAA,GAAI,WAAW,SAAA,EAAW,GAAG,EAAE,MAAA,CAAO,KAAK,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAC/D,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACF;AAEO,SAAS,QAAA,CACd,IAAA,EACA,SAAA,GAA2B,QAAA,EACX;AAChB,EAAA,MAAM,MAAA,GAAS,OAAO,IAAA,KAAS,QAAA,GAAW,MAAA,CAAO,KAAK,IAAI,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAA,GAAI,WAAW,SAAS,CAAA,CAAE,OAAO,MAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAC3D,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,QAAA,EAAU,CAAA;AAAA,IACV,WAAW,MAAA,CAAO;AAAA,GACpB;AACF;AAEO,SAAS,YAAA,GAA2B;AAEzC,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAO,UAAA,CAAW,MAAA,EAAQ,UAAA,KAAe,UAAA,EAAY;AACvD,IAAA,IAAA,GAAO,UAAA,CAAW,OAAO,UAAA,EAAW;AAAA,EACtC,CAAA,MAAO;AACL,IAAA,IAAA,GAAO,UAAA,EAAW;AAAA,EACpB;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF;;;ACnDO,SAAS,MAAA,CAAO,OAAe,MAAA,EAAgC;AACpE,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,QAAA;AACH,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,IAC7C,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,KAAK,CAAA;AAAA,IAC1C,KAAK,KAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,MAAA;AACH,MAAA,OAAO,MACJ,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,MAAM,MAAM,CAAA,CACpB,QAAQ,IAAA,EAAM,MAAM,EACpB,OAAA,CAAQ,IAAA,EAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,IAC1B;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA;AAE9D;AAEO,SAAS,MAAA,CAAO,OAAe,MAAA,EAAgC;AACpE,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA,CAAE,SAAS,MAAM,CAAA;AAAA,IACrD,KAAK,KAAA;AACH,MAAA,OAAO,OAAO,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA,CAAE,SAAS,MAAM,CAAA;AAAA,IAClD,KAAK,KAAA;AACH,MAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,IACjC,KAAK,MAAA;AACH,MAAA,OAAO,MACJ,OAAA,CAAQ,QAAA,EAAU,GAAG,CAAA,CACrB,OAAA,CAAQ,WAAW,GAAG,CAAA,CACtB,QAAQ,OAAA,EAAS,GAAG,EACpB,OAAA,CAAQ,OAAA,EAAS,GAAG,CAAA,CACpB,OAAA,CAAQ,UAAU,GAAG,CAAA;AAAA,IAC1B;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAE,CAAA;AAAA;AAE9D;;;ACtCA,SAAS,gBAAgB,GAAA,EAAqB;AAE5C,EAAA,IAAI,MAAA,GAAS,IAAI,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAErD,EAAA,MAAM,OAAA,GAAU,OAAO,MAAA,GAAS,CAAA;AAChC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAA,IAAU,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,OAAO,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,IAAA,OAAO,kBAAA;AAAA,MACL,IAAA,CAAK,MAAM,CAAA,CACR,KAAA,CAAM,EAAE,CAAA,CACR,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,GAAA,CAAO,IAAA,GAAO,EAAE,UAAA,CAAW,CAAC,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,EAAG,MAAM,EAAE,CAAC,CAAA,CAChE,IAAA,CAAK,EAAE;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,CAAE,SAAS,MAAM,CAAA;AACtD;AAEO,SAAS,UAAU,KAAA,EAA2B;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,gBAAgB,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAEnD,EAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,gBAAgB,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAEpD,EAAA,MAAM,MAAA,GAAqB;AAAA,IACzB,MAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA,EAAW,MAAM,CAAC;AAAA,GACpB;AAEA,EAAA,IAAI,OAAO,OAAA,CAAQ,GAAA,KAAQ,QAAA,EAAU;AACnC,IAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAI,CAAA;AAC3C,IAAA,MAAA,CAAO,OAAA,GAAU,OAAA,mBAAU,IAAI,IAAA,EAAK;AACpC,IAAA,MAAA,CAAO,SAAA,GAAY,QAAQ,WAAA,EAAY;AAAA,EACzC;AAEA,EAAA,OAAO,MAAA;AACT","file":"index.mjs","sourcesContent":["import { createHash, createHmac, randomUUID } from 'crypto';\nimport type { HashAlgorithm, HashResult, HmacOptions, HmacResult, ChecksumResult, UuidResult } from './types';\n\nexport function hash(\n input: string,\n algorithm: HashAlgorithm = 'sha256'\n): HashResult {\n const h = createHash(algorithm).update(input).digest('hex');\n return {\n algorithm,\n hash: h,\n inputLength: input.length,\n };\n}\n\nexport function hmac(\n input: string,\n key: string,\n options: HmacOptions = {}\n): HmacResult {\n const algorithm = options.algorithm ?? 'sha256';\n const h = createHmac(algorithm, key).update(input).digest('hex');\n return {\n algorithm,\n hmac: h,\n };\n}\n\nexport function checksum(\n data: Buffer | Uint8Array | string,\n algorithm: HashAlgorithm = 'sha256'\n): ChecksumResult {\n const buffer = typeof data === 'string' ? Buffer.from(data) : Buffer.from(data);\n const h = createHash(algorithm).update(buffer).digest('hex');\n return {\n algorithm,\n checksum: h,\n sizeBytes: buffer.length,\n };\n}\n\nexport function generateUuid(): UuidResult {\n // Use Web Crypto API in browser, Node.js crypto otherwise\n let uuid: string;\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n uuid = globalThis.crypto.randomUUID();\n } else {\n uuid = randomUUID();\n }\n return {\n uuid,\n version: 4,\n };\n}\n","import type { EncodingFormat } from './types';\n\nexport function encode(input: string, format: EncodingFormat): string {\n switch (format) {\n case 'base64':\n return Buffer.from(input).toString('base64');\n case 'hex':\n return Buffer.from(input).toString('hex');\n case 'url':\n return encodeURIComponent(input);\n case 'html':\n return input\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n default:\n throw new Error(`Unsupported encoding format: ${format}`);\n }\n}\n\nexport function decode(input: string, format: EncodingFormat): string {\n switch (format) {\n case 'base64':\n return Buffer.from(input, 'base64').toString('utf8');\n case 'hex':\n return Buffer.from(input, 'hex').toString('utf8');\n case 'url':\n return decodeURIComponent(input);\n case 'html':\n return input\n .replace(/&#39;/g, \"'\")\n .replace(/&quot;/g, '\"')\n .replace(/&gt;/g, '>')\n .replace(/&lt;/g, '<')\n .replace(/&amp;/g, '&');\n default:\n throw new Error(`Unsupported encoding format: ${format}`);\n }\n}\n","import type { JwtPayload } from './types';\n\nfunction base64UrlDecode(str: string): string {\n // Replace base64url characters with standard base64\n let base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n // Add padding if needed\n const padding = base64.length % 4;\n if (padding) {\n base64 += '='.repeat(4 - padding);\n }\n // Use atob for browser, Buffer for Node.js\n if (typeof atob === 'function') {\n return decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n }\n return Buffer.from(base64, 'base64').toString('utf8');\n}\n\nexport function decodeJwt(token: string): JwtPayload {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid JWT: must have 3 parts separated by dots');\n }\n\n const header = JSON.parse(base64UrlDecode(parts[0])) as Record<string, unknown>;\n\n const payload = JSON.parse(base64UrlDecode(parts[1])) as Record<string, unknown>;\n\n const result: JwtPayload = {\n header,\n payload,\n signature: parts[2],\n };\n\n if (typeof payload.exp === 'number') {\n const expDate = new Date(payload.exp * 1000);\n result.expired = expDate < new Date();\n result.expiresAt = expDate.toISOString();\n }\n\n return result;\n}\n"]}
@@ -0,0 +1 @@
1
+ export { C as ColumnStats, E as ExportFormat, a as ExportOptions, F as Filter, b as FilterOperator, P as ParseError, c as ParseOptions, d as ParseResult, T as TransformOptions, e as detectDelimiter, f as exportData, g as exportFromData, h as filter, j as filterByColumn, k as filterData, l as getColumnStats, m as getHeaders, n as getStats, o as getStatsFromData, p as parse, q as parseToArray, s as sortData, t as toArray, r as toJson, u as toJsonLines, v as transform, w as transformData } from '../index-QWC8yIgW.mjs';
@@ -0,0 +1 @@
1
+ export { C as ColumnStats, E as ExportFormat, a as ExportOptions, F as Filter, b as FilterOperator, P as ParseError, c as ParseOptions, d as ParseResult, T as TransformOptions, e as detectDelimiter, f as exportData, g as exportFromData, h as filter, j as filterByColumn, k as filterData, l as getColumnStats, m as getHeaders, n as getStats, o as getStatsFromData, p as parse, q as parseToArray, s as sortData, t as toArray, r as toJson, u as toJsonLines, v as transform, w as transformData } from '../index-QWC8yIgW.js';