unacy 0.1.0 → 0.1.2

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 (51) hide show
  1. package/dist/__tests__/converters.test.d.ts +2 -0
  2. package/dist/__tests__/converters.test.d.ts.map +1 -0
  3. package/dist/__tests__/converters.test.js +128 -0
  4. package/dist/__tests__/converters.test.js.map +1 -0
  5. package/dist/__tests__/errors.test.d.ts +2 -0
  6. package/dist/__tests__/errors.test.d.ts.map +1 -0
  7. package/dist/__tests__/errors.test.js +93 -0
  8. package/dist/__tests__/errors.test.js.map +1 -0
  9. package/dist/__tests__/formatters.test.d.ts +2 -0
  10. package/dist/__tests__/formatters.test.d.ts.map +1 -0
  11. package/dist/__tests__/formatters.test.js +244 -0
  12. package/dist/__tests__/formatters.test.js.map +1 -0
  13. package/dist/__tests__/registry.test.d.ts +2 -0
  14. package/dist/__tests__/registry.test.d.ts.map +1 -0
  15. package/dist/__tests__/registry.test.js +250 -0
  16. package/dist/__tests__/registry.test.js.map +1 -0
  17. package/dist/__tests__/types.test.d.ts +2 -0
  18. package/dist/__tests__/types.test.js.map +1 -1
  19. package/dist/converters.d.ts +53 -0
  20. package/dist/converters.d.ts.map +1 -0
  21. package/dist/converters.js +6 -0
  22. package/dist/converters.js.map +1 -0
  23. package/dist/errors.d.ts +40 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +70 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/formatters.d.ts +82 -0
  28. package/dist/formatters.d.ts.map +1 -0
  29. package/dist/formatters.js +6 -0
  30. package/dist/formatters.js.map +1 -0
  31. package/dist/index.d.ts +12 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +10 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/registry.d.ts +141 -0
  36. package/dist/registry.d.ts.map +1 -0
  37. package/dist/registry.js +212 -0
  38. package/dist/registry.js.map +1 -0
  39. package/dist/types.d.ts +36 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +6 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/utils/graph.d.ts +26 -0
  44. package/dist/utils/graph.d.ts.map +1 -0
  45. package/dist/utils/graph.js +91 -0
  46. package/dist/utils/graph.js.map +1 -0
  47. package/dist/utils/validation.d.ts +26 -0
  48. package/dist/utils/validation.d.ts.map +1 -0
  49. package/dist/utils/validation.js +35 -0
  50. package/dist/utils/validation.js.map +1 -0
  51. package/package.json +7 -7
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=converters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/converters.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,128 @@
1
+ import { describe, it, expect, expectTypeOf } from 'vitest';
2
+ describe('Converter Type', () => {
3
+ it('unidirectional converter returns correct type', () => {
4
+ const celsiusToFahrenheit = (c) => ((c * 9) / 5 + 32);
5
+ const celsius = 25;
6
+ const fahrenheit = celsiusToFahrenheit(celsius);
7
+ expectTypeOf(fahrenheit).toEqualTypeOf();
8
+ expect(fahrenheit).toBe(77);
9
+ });
10
+ it('converter function is deterministic (same input → same output)', () => {
11
+ const celsiusToFahrenheit = (c) => ((c * 9) / 5 + 32);
12
+ const celsius = 100;
13
+ // Call multiple times with same input
14
+ const result1 = celsiusToFahrenheit(celsius);
15
+ const result2 = celsiusToFahrenheit(celsius);
16
+ const result3 = celsiusToFahrenheit(celsius);
17
+ expect(result1).toBe(result2);
18
+ expect(result2).toBe(result3);
19
+ expect(result1).toBe(212); // 100°C = 212°F
20
+ });
21
+ it('compile-time: wrong unit type to converter causes compile error', () => {
22
+ const celsiusToFahrenheit = (c) => ((c * 9) / 5 + 32);
23
+ const meters = 100;
24
+ // @ts-expect-error - Cannot pass Meters to a Celsius→Fahrenheit converter
25
+ const result = celsiusToFahrenheit(meters);
26
+ expect(result).toBeDefined(); // Runtime still works but types don't match
27
+ });
28
+ it('maintains type safety through variables', () => {
29
+ const metersToFeet = (m) => (m * 3.28084);
30
+ const distance = 10;
31
+ const converted = metersToFeet(distance);
32
+ expectTypeOf(converted).toEqualTypeOf();
33
+ expect(converted).toBeCloseTo(32.8084, 4);
34
+ });
35
+ it('works with different conversion formulas', () => {
36
+ const celsiusToKelvin = (c) => (c + 273.15);
37
+ const celsius = 0;
38
+ const kelvin = celsiusToKelvin(celsius);
39
+ expect(kelvin).toBe(273.15);
40
+ expectTypeOf(kelvin).toEqualTypeOf();
41
+ });
42
+ });
43
+ describe('BidirectionalConverter Type', () => {
44
+ it('bidirectional converter round-trip preserves value within tolerance', () => {
45
+ const metersFeet = {
46
+ to: (m) => (m * 3.28084),
47
+ from: (f) => (f / 3.28084)
48
+ };
49
+ const original = 10;
50
+ const feet = metersFeet.to(original);
51
+ const backToMeters = metersFeet.from(feet);
52
+ expect(backToMeters).toBeCloseTo(original, 10);
53
+ expectTypeOf(backToMeters).toEqualTypeOf();
54
+ });
55
+ it('forward and reverse converters have correct types', () => {
56
+ const celsiusFahrenheit = {
57
+ to: (c) => ((c * 9) / 5 + 32),
58
+ from: (f) => (((f - 32) * 5) / 9)
59
+ };
60
+ const celsius = 20;
61
+ const fahrenheit = celsiusFahrenheit.to(celsius);
62
+ expectTypeOf(fahrenheit).toEqualTypeOf();
63
+ expectTypeOf(celsiusFahrenheit.to).toEqualTypeOf();
64
+ expectTypeOf(celsiusFahrenheit.from).toEqualTypeOf();
65
+ });
66
+ it('round-trip multiple conversions', () => {
67
+ const celsiusFahrenheit = {
68
+ to: (c) => ((c * 9) / 5 + 32),
69
+ from: (f) => (((f - 32) * 5) / 9)
70
+ };
71
+ const testValues = [-40, -20, 0, 25, 37, 100].map((v) => v);
72
+ testValues.forEach((original) => {
73
+ const fahrenheit = celsiusFahrenheit.to(original);
74
+ const backToCelsius = celsiusFahrenheit.from(fahrenheit);
75
+ expect(backToCelsius).toBeCloseTo(original, 10);
76
+ });
77
+ });
78
+ it('handles edge cases in conversion', () => {
79
+ const celsiusFahrenheit = {
80
+ to: (c) => ((c * 9) / 5 + 32),
81
+ from: (f) => (((f - 32) * 5) / 9)
82
+ };
83
+ // Absolute zero point where C and F scales intersect
84
+ const absoluteZero = -273.15;
85
+ const fahrenheit = celsiusFahrenheit.to(absoluteZero);
86
+ const backToCelsius = celsiusFahrenheit.from(fahrenheit);
87
+ expect(backToCelsius).toBeCloseTo(absoluteZero, 10);
88
+ });
89
+ it('both directions maintain type safety', () => {
90
+ const celsiusKelvin = {
91
+ to: (c) => (c + 273.15),
92
+ from: (k) => (k - 273.15)
93
+ };
94
+ const celsius = 100;
95
+ const kelvin = celsiusKelvin.to(celsius);
96
+ expectTypeOf(kelvin).toEqualTypeOf();
97
+ // @ts-expect-error - Cannot pass Fahrenheit to Kelvin→Celsius converter
98
+ const invalid = celsiusKelvin.from(77);
99
+ expect(invalid).toBeDefined();
100
+ });
101
+ it('precision loss is acceptable for approximate conversions', () => {
102
+ const metersFeet = {
103
+ to: (m) => (m * 3.28084),
104
+ from: (f) => (f / 3.28084)
105
+ };
106
+ // Test with value that may have floating point precision issues
107
+ const original = 1.23456789;
108
+ const feet = metersFeet.to(original);
109
+ const backToMeters = metersFeet.from(feet);
110
+ // Allow small precision loss
111
+ expect(Math.abs(backToMeters - original)).toBeLessThan(0.0000001);
112
+ });
113
+ });
114
+ describe('Converter Examples', () => {
115
+ it('temperature conversions match expected values', () => {
116
+ const celsiusToFahrenheit = (c) => ((c * 9) / 5 + 32);
117
+ expect(celsiusToFahrenheit(0)).toBe(32); // Freezing point
118
+ expect(celsiusToFahrenheit(100)).toBe(212); // Boiling point
119
+ expect(celsiusToFahrenheit(37)).toBeCloseTo(98.6, 1); // Body temp
120
+ });
121
+ it('distance conversions match expected values', () => {
122
+ const metersToFeet = (m) => (m * 3.28084);
123
+ expect(metersToFeet(1)).toBeCloseTo(3.28084, 4);
124
+ expect(metersToFeet(10)).toBeCloseTo(32.8084, 4);
125
+ expect(metersToFeet(100)).toBeCloseTo(328.084, 3);
126
+ });
127
+ });
128
+ //# sourceMappingURL=converters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converters.test.js","sourceRoot":"","sources":["../../src/__tests__/converters.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=errors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,93 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { UnacyError, CycleError, MaxDepthError, ConversionError, ParseError } from '../errors';
3
+ describe('UnacyError', () => {
4
+ it('creates error with message', () => {
5
+ const error = new UnacyError('Test error message');
6
+ expect(error).toBeInstanceOf(Error);
7
+ expect(error).toBeInstanceOf(UnacyError);
8
+ expect(error.message).toBe('Test error message');
9
+ expect(error.name).toBe('UnacyError');
10
+ });
11
+ it('includes stack trace', () => {
12
+ const error = new UnacyError('Test error');
13
+ expect(error.stack).toBeDefined();
14
+ });
15
+ });
16
+ describe('CycleError', () => {
17
+ it('creates error with cycle path', () => {
18
+ const path = ['A', 'B', 'C', 'A'];
19
+ const error = new CycleError(path);
20
+ expect(error).toBeInstanceOf(UnacyError);
21
+ expect(error.message).toContain('Cycle detected');
22
+ expect(error.message).toContain('A → B → C → A');
23
+ expect(error.name).toBe('CycleError');
24
+ expect(error.path).toEqual(path);
25
+ });
26
+ it('formats path with different unit types', () => {
27
+ const path = ['meters', 'kilometers', 'miles', 'meters'];
28
+ const error = new CycleError(path);
29
+ expect(error.message).toContain('meters → kilometers → miles → meters');
30
+ });
31
+ });
32
+ describe('MaxDepthError', () => {
33
+ it('creates error with from, to, and max depth', () => {
34
+ const error = new MaxDepthError('meters', 'parsecs', 5);
35
+ expect(error).toBeInstanceOf(UnacyError);
36
+ expect(error.message).toContain('Maximum conversion depth');
37
+ expect(error.message).toContain('meters');
38
+ expect(error.message).toContain('parsecs');
39
+ expect(error.message).toContain('5');
40
+ expect(error.name).toBe('MaxDepthError');
41
+ expect(error.from).toBe('meters');
42
+ expect(error.to).toBe('parsecs');
43
+ expect(error.maxDepth).toBe(5);
44
+ });
45
+ it('provides helpful message', () => {
46
+ const error = new MaxDepthError('A', 'Z', 3);
47
+ expect(error.message).toContain('exceeded');
48
+ expect(error.message).toContain('A');
49
+ expect(error.message).toContain('Z');
50
+ });
51
+ });
52
+ describe('ConversionError', () => {
53
+ it('creates error with from and to units', () => {
54
+ const error = new ConversionError('Celsius', 'Kelvin');
55
+ expect(error).toBeInstanceOf(UnacyError);
56
+ expect(error.message).toContain('Cannot convert');
57
+ expect(error.message).toContain('Celsius');
58
+ expect(error.message).toContain('Kelvin');
59
+ expect(error.name).toBe('ConversionError');
60
+ expect(error.from).toBe('Celsius');
61
+ expect(error.to).toBe('Kelvin');
62
+ });
63
+ it('accepts optional reason', () => {
64
+ const error = new ConversionError('A', 'B', 'No path exists');
65
+ expect(error.message).toContain('Cannot convert');
66
+ expect(error.message).toContain('No path exists');
67
+ });
68
+ });
69
+ describe('ParseError', () => {
70
+ it('creates error with format, input, and reason', () => {
71
+ const error = new ParseError('ISO8601', 'invalid-date', 'Invalid format');
72
+ expect(error).toBeInstanceOf(UnacyError);
73
+ expect(error.message).toContain('Cannot parse');
74
+ expect(error.message).toContain('ISO8601');
75
+ expect(error.message).toContain('invalid-date');
76
+ expect(error.message).toContain('Invalid format');
77
+ expect(error.name).toBe('ParseError');
78
+ expect(error.format).toBe('ISO8601');
79
+ expect(error.input).toBe('invalid-date');
80
+ expect(error.reason).toBe('Invalid format');
81
+ });
82
+ it('truncates long input values', () => {
83
+ const longInput = 'a'.repeat(100);
84
+ const error = new ParseError('HexColor', longInput, 'Too long');
85
+ expect(error.message.length).toBeLessThan(200);
86
+ expect(error.message).toContain('...');
87
+ });
88
+ it('handles empty input', () => {
89
+ const error = new ParseError('Number', '', 'Empty string');
90
+ expect(error.message).toContain('""');
91
+ });
92
+ });
93
+ //# sourceMappingURL=errors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/formatters.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,244 @@
1
+ import { describe, it, expect, expectTypeOf } from 'vitest';
2
+ import { ParseError } from '../errors';
3
+ import { z } from 'zod';
4
+ describe('Formatter Type', () => {
5
+ it('formatter converts tagged value to string', () => {
6
+ const formatISO = (date) => date.toISOString();
7
+ const now = new Date('2026-01-06T12:00:00.000Z');
8
+ const str = formatISO(now);
9
+ expect(typeof str).toBe('string');
10
+ expect(str).toBe('2026-01-06T12:00:00.000Z');
11
+ });
12
+ it('formatter maintains format identity through transformation', () => {
13
+ const formatHex = (color) => color.toUpperCase();
14
+ const color = '#ff5733';
15
+ const formatted = formatHex(color);
16
+ expect(formatted).toBe('#FF5733');
17
+ expectTypeOf(formatted).toEqualTypeOf();
18
+ });
19
+ it('formatter works with different base types', () => {
20
+ const formatTimestamp = (ts) => String(ts);
21
+ const timestamp = Date.now();
22
+ const str = formatTimestamp(timestamp);
23
+ expect(typeof str).toBe('string');
24
+ expect(str).toMatch(/^\d+$/);
25
+ });
26
+ });
27
+ describe('Parser Type', () => {
28
+ it('parser converts string to tagged value with Zod validation', () => {
29
+ const parseISO = (input) => {
30
+ const schema = z.string().datetime();
31
+ const validated = schema.parse(input);
32
+ return new Date(validated);
33
+ };
34
+ const str = '2026-01-06T12:00:00.000Z';
35
+ const date = parseISO(str);
36
+ expectTypeOf(date).toEqualTypeOf();
37
+ expect(date).toBeInstanceOf(Date);
38
+ expect(date.toISOString()).toBe(str);
39
+ });
40
+ it('invalid string input throws ParseError with context', () => {
41
+ const parseHex = (input) => {
42
+ const schema = z.string().regex(/^#[0-9A-Fa-f]{6}$/);
43
+ try {
44
+ return schema.parse(input);
45
+ }
46
+ catch {
47
+ throw new ParseError('HexColor', input, 'Expected #RRGGBB format');
48
+ }
49
+ };
50
+ expect(() => {
51
+ parseHex('not-a-color');
52
+ }).toThrow(ParseError);
53
+ try {
54
+ parseHex('invalid');
55
+ }
56
+ catch (err) {
57
+ expect(err).toBeInstanceOf(ParseError);
58
+ if (err instanceof ParseError) {
59
+ expect(err.format).toBe('HexColor');
60
+ expect(err.input).toBe('invalid');
61
+ expect(err.reason).toBe('Expected #RRGGBB format');
62
+ }
63
+ }
64
+ });
65
+ it('parser rejects input before tagging (no invalid tagged values)', () => {
66
+ const parsePositive = (input) => {
67
+ const schema = z
68
+ .string()
69
+ .transform((s) => parseFloat(s))
70
+ .refine((n) => n > 0);
71
+ try {
72
+ return schema.parse(input);
73
+ }
74
+ catch {
75
+ throw new ParseError('Positive', input, 'Must be a positive number');
76
+ }
77
+ };
78
+ expect(() => {
79
+ parsePositive('-5');
80
+ }).toThrow(ParseError);
81
+ expect(() => {
82
+ parsePositive('not-a-number');
83
+ }).toThrow(ParseError);
84
+ // Valid input should work
85
+ const result = parsePositive('10');
86
+ expect(result).toBe(10);
87
+ });
88
+ it('handles empty input', () => {
89
+ const parseNonEmpty = (input) => {
90
+ if (input === '') {
91
+ throw new ParseError('NonEmpty', input, 'Cannot be empty');
92
+ }
93
+ return input;
94
+ };
95
+ expect(() => {
96
+ parseNonEmpty('');
97
+ }).toThrow(ParseError);
98
+ try {
99
+ parseNonEmpty('');
100
+ }
101
+ catch (err) {
102
+ if (err instanceof ParseError) {
103
+ expect(err.message).toContain('""');
104
+ }
105
+ }
106
+ });
107
+ it('compile-time: wrong format type to parser causes error', () => {
108
+ const parseISO = (input) => {
109
+ return new Date(input);
110
+ };
111
+ const str = '2026-01-06T12:00:00.000Z';
112
+ const date = parseISO(str);
113
+ // @ts-expect-error - Cannot assign ISO8601 to HexColor
114
+ const color = date;
115
+ expect(color).toBeDefined();
116
+ });
117
+ });
118
+ describe('FormatterParser Type', () => {
119
+ it('round-trip (format then parse) produces equivalent value', () => {
120
+ const iso8601 = {
121
+ format: (date) => date.toISOString(),
122
+ parse: (input) => {
123
+ const schema = z.string().datetime();
124
+ const validated = schema.parse(input);
125
+ return new Date(validated);
126
+ }
127
+ };
128
+ const original = new Date('2026-01-06T12:00:00.000Z');
129
+ const formatted = iso8601.format(original);
130
+ const parsed = iso8601.parse(formatted);
131
+ expect(parsed.getTime()).toBe(original.getTime());
132
+ });
133
+ it('integration test: full formatter/parser pair for ISO8601 dates', () => {
134
+ const iso8601 = {
135
+ format: (date) => date.toISOString(),
136
+ parse: (input) => {
137
+ const schema = z.string().datetime();
138
+ try {
139
+ const validated = schema.parse(input);
140
+ return new Date(validated);
141
+ }
142
+ catch {
143
+ throw new ParseError('ISO8601', input, 'Invalid ISO8601 date format');
144
+ }
145
+ }
146
+ };
147
+ // Test formatting
148
+ const date = new Date('2026-01-06T12:34:56.789Z');
149
+ const str = iso8601.format(date);
150
+ expect(str).toBe('2026-01-06T12:34:56.789Z');
151
+ // Test parsing
152
+ const parsed = iso8601.parse('2026-12-31T23:59:59.999Z');
153
+ expect(parsed).toBeInstanceOf(Date);
154
+ expect(parsed.toISOString()).toBe('2026-12-31T23:59:59.999Z');
155
+ // Test round-trip
156
+ const roundTrip = iso8601.parse(iso8601.format(date));
157
+ expect(roundTrip.getTime()).toBe(date.getTime());
158
+ // Test error handling
159
+ expect(() => {
160
+ iso8601.parse('invalid-date');
161
+ }).toThrow(ParseError);
162
+ });
163
+ it('works with different format types', () => {
164
+ const hexColor = {
165
+ format: (color) => color.toLowerCase(),
166
+ parse: (input) => {
167
+ const schema = z.string().regex(/^#[0-9a-fA-F]{6}$/);
168
+ try {
169
+ return schema.parse(input);
170
+ }
171
+ catch {
172
+ throw new ParseError('HexColor', input, 'Expected #RRGGBB format');
173
+ }
174
+ }
175
+ };
176
+ const color = '#FF5733';
177
+ const formatted = hexColor.format(color);
178
+ expect(formatted).toBe('#ff5733');
179
+ const parsed = hexColor.parse('#00FF00');
180
+ expectTypeOf(parsed).toEqualTypeOf();
181
+ expect(parsed).toBe('#00FF00');
182
+ // Round-trip with case normalization
183
+ const original = '#ABCDEF';
184
+ const roundTrip = hexColor.parse(hexColor.format(original));
185
+ expect(roundTrip.toLowerCase()).toBe(original.toLowerCase());
186
+ });
187
+ it('timestamp formatter/parser preserves value', () => {
188
+ const unixTimestamp = {
189
+ format: (ts) => String(ts),
190
+ parse: (input) => {
191
+ const schema = z
192
+ .string()
193
+ .regex(/^\d+$/)
194
+ .transform((s) => parseInt(s, 10));
195
+ try {
196
+ return schema.parse(input);
197
+ }
198
+ catch {
199
+ throw new ParseError('UnixTimestamp', input, 'Expected Unix timestamp');
200
+ }
201
+ }
202
+ };
203
+ const timestamp = Date.now();
204
+ const str = unixTimestamp.format(timestamp);
205
+ const parsed = unixTimestamp.parse(str);
206
+ expect(parsed).toBe(timestamp);
207
+ });
208
+ });
209
+ describe('Formatter/Parser Examples', () => {
210
+ it('YYYY-MM-DD format with validation', () => {
211
+ const yyyymmdd = {
212
+ format: (dateStr) => dateStr,
213
+ parse: (input) => {
214
+ const schema = z.string().regex(/^\d{4}-\d{2}-\d{2}$/);
215
+ try {
216
+ const validated = schema.parse(input);
217
+ // Additional validation: check if it's a valid date
218
+ const parts = validated.split('-');
219
+ const year = parseInt(parts[0], 10);
220
+ const month = parseInt(parts[1], 10);
221
+ const day = parseInt(parts[2], 10);
222
+ const date = new Date(year, month - 1, day);
223
+ if (date.getFullYear() !== year ||
224
+ date.getMonth() !== month - 1 ||
225
+ date.getDate() !== day) {
226
+ throw new Error('Invalid date');
227
+ }
228
+ return validated;
229
+ }
230
+ catch {
231
+ throw new ParseError('YYYY-MM-DD', input, 'Invalid date format');
232
+ }
233
+ }
234
+ };
235
+ // Valid dates
236
+ expect(yyyymmdd.parse('2026-01-06')).toBe('2026-01-06');
237
+ expect(yyyymmdd.parse('2026-12-31')).toBe('2026-12-31');
238
+ // Invalid dates
239
+ expect(() => yyyymmdd.parse('2026-13-01')).toThrow(ParseError); // Invalid month
240
+ expect(() => yyyymmdd.parse('2026-02-30')).toThrow(ParseError); // Invalid day
241
+ expect(() => yyyymmdd.parse('not-a-date')).toThrow(ParseError);
242
+ });
243
+ });
244
+ //# sourceMappingURL=formatters.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.test.js","sourceRoot":"","sources":["../../src/__tests__/formatters.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/registry.test.ts"],"names":[],"mappings":""}