unacy 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +89 -12
- package/dist/converters.d.ts +25 -1
- package/dist/converters.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +20 -18
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +18 -4
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +132 -24
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/validation.d.ts +106 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +317 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +16 -8
package/README.md
CHANGED
|
@@ -12,6 +12,7 @@ Type-safe unit and format conversion library with automatic multi-hop compositio
|
|
|
12
12
|
- 📦 **Tree-shakeable** - Only bundle converters you use
|
|
13
13
|
- ✨ **Fluent API** - Clean, readable conversion syntax
|
|
14
14
|
- 🎯 **Typed Metadata** - Native support for `number`, `string`, `boolean`, and `bigint` units
|
|
15
|
+
- 🧩 **Non-Primitive Types** - First-class support for enums, classes, records, and tuples
|
|
15
16
|
|
|
16
17
|
## Installation
|
|
17
18
|
|
|
@@ -57,9 +58,6 @@ const fahrenheit2 = tempRegistry.Celsius.to.Fahrenheit(tempRegistry.Celsius(30))
|
|
|
57
58
|
|
|
58
59
|
console.log(fahrenheit1); // 77
|
|
59
60
|
console.log(fahrenheit2); // 86
|
|
60
|
-
|
|
61
|
-
// Old way still works (manual casting)
|
|
62
|
-
const tempOld: Celsius = 25 as Celsius;
|
|
63
61
|
```
|
|
64
62
|
|
|
65
63
|
## Usage Examples
|
|
@@ -76,9 +74,6 @@ const distance = registry.meters(100); // Returns WithTypedUnits<typeof Meter
|
|
|
76
74
|
// Fluent workflow
|
|
77
75
|
const fahrenheit = registry.Celsius.to.Fahrenheit(registry.Celsius(20));
|
|
78
76
|
|
|
79
|
-
// Compare with old way (still works)
|
|
80
|
-
const tempOld: Celsius = 25 as Celsius;
|
|
81
|
-
|
|
82
77
|
// Benefits:
|
|
83
78
|
// - Cleaner syntax
|
|
84
79
|
// - Less verbose than manual casting
|
|
@@ -111,7 +106,7 @@ const FlagMetadata = {
|
|
|
111
106
|
|
|
112
107
|
```typescript
|
|
113
108
|
// Same registry as above
|
|
114
|
-
const distance
|
|
109
|
+
const distance = distanceRegistry.meters(10);
|
|
115
110
|
|
|
116
111
|
// Access units directly via property syntax
|
|
117
112
|
const feet = distanceRegistry.meters.to.feet(distance);
|
|
@@ -121,7 +116,7 @@ console.log(feet); // 32.8084
|
|
|
121
116
|
const feet2 = distanceRegistry.meters.to.feet(distanceRegistry.meters(10));
|
|
122
117
|
|
|
123
118
|
// Works in both directions
|
|
124
|
-
const meters = distanceRegistry.feet.to.meters(32.8084
|
|
119
|
+
const meters = distanceRegistry.feet.to.meters(distanceRegistry.feet(32.8084));
|
|
125
120
|
console.log(meters); // 10
|
|
126
121
|
```
|
|
127
122
|
|
|
@@ -151,8 +146,8 @@ const registry = createRegistry()
|
|
|
151
146
|
});
|
|
152
147
|
|
|
153
148
|
// Both directions work automatically
|
|
154
|
-
const km = registry.convert(5000
|
|
155
|
-
const m = registry.convert(5
|
|
149
|
+
const km = registry.convert(registry.meters(5000), 'meters').to('kilometers'); // 5
|
|
150
|
+
const m = registry.convert(registry.kilometers(5), 'kilometers').to('meters'); // 5000
|
|
156
151
|
```
|
|
157
152
|
|
|
158
153
|
### Multi-Hop Auto-Composition
|
|
@@ -180,8 +175,7 @@ const registry = createRegistry()
|
|
|
180
175
|
|
|
181
176
|
// No direct meters→miles converter registered!
|
|
182
177
|
// Registry auto-composes: meters → kilometers → miles
|
|
183
|
-
const
|
|
184
|
-
const miles = registry.convert(meters, 'meters').to('miles');
|
|
178
|
+
const miles = registry.convert(registry.meters(5000), 'meters').to('miles');
|
|
185
179
|
console.log(miles); // 3.106855
|
|
186
180
|
```
|
|
187
181
|
|
|
@@ -213,6 +207,81 @@ const str = iso8601.format(now); // "2026-01-06T12:00:00.000Z"
|
|
|
213
207
|
const date = iso8601.parse('2026-01-06T12:00:00.000Z');
|
|
214
208
|
```
|
|
215
209
|
|
|
210
|
+
### Non-Primitive Types
|
|
211
|
+
|
|
212
|
+
Beyond primitives, the registry supports enums, classes, records, and tuples
|
|
213
|
+
as unit types. The `type` field in metadata IS the runtime value itself.
|
|
214
|
+
|
|
215
|
+
#### Enum Units
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
import { createRegistry } from '@unacy/core';
|
|
219
|
+
import type { WithTypedUnits, TypedMetadata } from '@unacy/core';
|
|
220
|
+
|
|
221
|
+
enum LogLevel { DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3 }
|
|
222
|
+
|
|
223
|
+
const LogLevelMeta = { name: 'LogLevel', type: LogLevel } as const;
|
|
224
|
+
type LogLevelUnit = WithTypedUnits<typeof LogLevelMeta>;
|
|
225
|
+
|
|
226
|
+
const registry = createRegistry()
|
|
227
|
+
.register(LogLevelMeta, /* ... */);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### Class Units
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
class Temperature {
|
|
234
|
+
constructor(public value: number, public scale: string) {}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const TempMeta = { name: 'Temperature', type: Temperature } as const;
|
|
238
|
+
type TempUnit = WithTypedUnits<typeof TempMeta>;
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
#### Record Units
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
const PointSchema = { x: 'number', y: 'number' } as const;
|
|
245
|
+
const PointMeta = { name: 'Point', type: PointSchema } as const;
|
|
246
|
+
type PointUnit = WithTypedUnits<typeof PointMeta>;
|
|
247
|
+
|
|
248
|
+
// Nested schemas
|
|
249
|
+
const LineMeta = {
|
|
250
|
+
name: 'Line',
|
|
251
|
+
type: { start: { x: 'number', y: 'number' }, end: { x: 'number', y: 'number' } }
|
|
252
|
+
} as const;
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
#### Tuple Units
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
const RGBSchema = ['number', 'number', 'number'] as const;
|
|
259
|
+
const RGBMeta = { name: 'RGB', type: RGBSchema } as const;
|
|
260
|
+
type RGBUnit = WithTypedUnits<typeof RGBMeta>;
|
|
261
|
+
|
|
262
|
+
// Optional and rest elements
|
|
263
|
+
const HeaderSchema = ['string', 'number?', '...string'] as const;
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
#### Runtime Type Guards
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
import {
|
|
270
|
+
isEnumMetadata, isClassMetadata,
|
|
271
|
+
isRecordMetadata, isTupleMetadata,
|
|
272
|
+
detectMetadataKind
|
|
273
|
+
} from '@unacy/core';
|
|
274
|
+
|
|
275
|
+
detectMetadataKind(LogLevelMeta); // 'enum'
|
|
276
|
+
detectMetadataKind(TempMeta); // 'class'
|
|
277
|
+
detectMetadataKind(PointMeta); // 'record'
|
|
278
|
+
detectMetadataKind(RGBMeta); // 'tuple'
|
|
279
|
+
|
|
280
|
+
if (isEnumMetadata(meta)) {
|
|
281
|
+
// meta.type is narrowed to EnumType
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
216
285
|
## API Reference
|
|
217
286
|
|
|
218
287
|
### Types
|
|
@@ -243,8 +312,16 @@ type NumericMetadata = TypedMetadata<number>;
|
|
|
243
312
|
|
|
244
313
|
type StringMetadata = TypedMetadata<string>;
|
|
245
314
|
// { name: string; type: 'string' }
|
|
315
|
+
|
|
316
|
+
// Non-primitive: type IS the value itself
|
|
317
|
+
type EnumMetadata = TypedMetadata<typeof LogLevel>;
|
|
318
|
+
// { name: string; type: typeof LogLevel }
|
|
246
319
|
```
|
|
247
320
|
|
|
321
|
+
#### `SupportedType`
|
|
322
|
+
Union of all types that can be used as a unit base:
|
|
323
|
+
`number | string | boolean | bigint | EnumType | ClassType | RecordSchema | TupleSchema`
|
|
324
|
+
|
|
248
325
|
#### `WithFormat<T, F>`
|
|
249
326
|
Brand a value with a format identifier for serialization safety.
|
|
250
327
|
|
package/dist/converters.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Type-safe converter function signatures
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
|
-
import type { PrimitiveType, Relax as BaseRelax } from './types.js';
|
|
5
|
+
import type { PrimitiveType, Relax as BaseRelax, Unwrap } from './types.js';
|
|
6
6
|
/**
|
|
7
7
|
* Unidirectional converter from one unit to another.
|
|
8
8
|
*
|
|
@@ -59,4 +59,28 @@ export type RelaxBidirectionalConverter<ConverterType> = ConverterType extends B
|
|
|
59
59
|
to: (input: PrimitiveType) => PrimitiveType;
|
|
60
60
|
from: (input: PrimitiveType) => PrimitiveType;
|
|
61
61
|
};
|
|
62
|
+
/**
|
|
63
|
+
* A converter that accepts the branded input type but returns
|
|
64
|
+
* unwrapped output. This eliminates the need to cast return values
|
|
65
|
+
* to branded types inside converter functions, while preserving
|
|
66
|
+
* full autocompletion on the input parameter.
|
|
67
|
+
*
|
|
68
|
+
* Since `Tagged<T, ...> extends T`, strict converters returning branded
|
|
69
|
+
* types are also assignable to this type.
|
|
70
|
+
*
|
|
71
|
+
* @template TInput - Source unit-tagged type
|
|
72
|
+
* @template TOutput - Destination unit-tagged type
|
|
73
|
+
*/
|
|
74
|
+
export type RelaxedConverter<TInput, TOutput> = (input: TInput) => Unwrap<TOutput>;
|
|
75
|
+
/**
|
|
76
|
+
* A bidirectional converter with relaxed (unwrapped) output types.
|
|
77
|
+
* Input remains branded for full autocompletion.
|
|
78
|
+
*
|
|
79
|
+
* @template TInput - First unit-tagged type
|
|
80
|
+
* @template TOutput - Second unit-tagged type
|
|
81
|
+
*/
|
|
82
|
+
export type RelaxedBidirectionalConverter<TInput, TOutput> = {
|
|
83
|
+
to: RelaxedConverter<TInput, TOutput>;
|
|
84
|
+
from: RelaxedConverter<TOutput, TInput>;
|
|
85
|
+
};
|
|
62
86
|
//# sourceMappingURL=converters.d.ts.map
|
package/dist/converters.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEpE,MAAM,MAAM,cAAc,CAAC,aAAa,IACtC,aAAa,SAAS,SAAS,CAAC,MAAM,CAAC,SAAS,aAAa,EAAE,MAAM,CAAC,SAAS,aAAa,CAAC,GACzF,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,GACrC,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,CAAC;AAE9C,MAAM,MAAM,KAAK,CACf,CAAC,SAAS,aAAa,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,IAC9E,CAAC,SAAS,aAAa,GACvB,SAAS,CAAC,CAAC,CAAC,GACZ,CAAC,SAAS,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GACnC,cAAc,CAAC,CAAC,CAAC,GACjB,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,IAAI;IACpD,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,2BAA2B,CAAC,aAAa,IACnD,aAAa,SAAS,sBAAsB,CAC1C,MAAM,CAAC,SAAS,aAAa,EAC7B,MAAM,CAAC,SAAS,aAAa,CAC9B,GACG;IACE,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;CAClC,GACD;IACE,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,CAAC;IAC5C,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,aAAa,CAAC;CAC/C,CAAC;AAER;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnF;;;;;;GAMG;AACH,MAAM,MAAM,6BAA6B,CAAC,MAAM,EAAE,OAAO,IAAI;IAC3D,EAAE,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CACzC,CAAC"}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe,EAAE;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QAEzB,wDAAwD;QACxD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAAA,CACnD;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxB,IAAI,CAAgB;IAEpC,YAAY,IAAmB,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe,EAAE;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QAEzB,wDAAwD;QACxD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAAA,CACnD;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxB,IAAI,CAAgB;IAEpC,YAAY,IAAmB,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,KAAK,CAAC,sCAAsC,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAAA,CAClB;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3B,IAAI,CAAc;IAClB,EAAE,CAAc;IAChB,QAAQ,CAAS;IAEjC,YAAY,IAAiB,EAAE,EAAe,EAAE,QAAgB,EAAE;QAChE,KAAK,CACH,+BAA+B,QAAQ,kCAAkC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,CACzG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAAA,CAC1B;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7B,IAAI,CAAc;IAClB,EAAE,CAAc;IAEhC,YAAY,IAAiB,EAAE,EAAe,EAAE,MAAe,EAAE;QAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IAAA,CACd;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxB,MAAM,CAAS;IACf,KAAK,CAAS;IACd,MAAM,CAAS;IAE/B,YAAY,MAAc,EAAE,KAAa,EAAE,MAAc,EAAE;QACzD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,MAAM,YAAY,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;QAE1D,KAAK,CAAC,iBAAiB,YAAY,QAAQ,MAAM,KAAK,MAAM,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IAAA,CACtB;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* Unacy Core - Type-safe unit and format conversion library
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
|
-
export type { WithUnits, WithTypedUnits, WithFormat, BaseMetadata, TypedMetadata, UnitMetadata, Relax, PrimitiveType,
|
|
6
|
-
export type { Converter, BidirectionalConverter } from './converters.js';
|
|
5
|
+
export type { WithUnits, WithTypedUnits, WithFormat, BaseMetadata, TypedMetadata, UnitMetadata, Relax, PrimitiveType, SupportedType, EnumType, ClassType, RecordSchema, TupleSchema, ToPrimitiveTypeName } from './types.js';
|
|
6
|
+
export type { Converter, BidirectionalConverter, RelaxedConverter, RelaxedBidirectionalConverter } from './converters.js';
|
|
7
7
|
export type { Formatter, Parser, FormatterParser } from './formatters.js';
|
|
8
8
|
export type { UnitRegistry, UnitMap, UnitAccessor } from './registry.js';
|
|
9
9
|
export { createRegistry } from './registry.js';
|
|
10
10
|
export { UnacyError, CycleError, MaxDepthError, ConversionError, ParseError } from './errors.js';
|
|
11
|
-
export { createParserWithSchema } from './utils/validation.js';
|
|
11
|
+
export { createParserWithSchema, validateEnum, validateClass, validateRecordSchema, validateTupleSchema, isEnumMetadata, isClassMetadata, isRecordMetadata, isTupleMetadata, detectMetadataKind } from './utils/validation.js';
|
|
12
|
+
export type { PrimitiveTypeFromName, InferFromRecordSchema, InferFromTupleSchema } from './types.js';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,EACL,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,EACL,aAAa,EACb,aAAa,EACb,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,SAAS,EACT,sBAAsB,EACtB,gBAAgB,EAChB,6BAA6B,EAC9B,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAG1E,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGjG,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,5 +6,5 @@ export { createRegistry } from './registry.js';
|
|
|
6
6
|
// Errors
|
|
7
7
|
export { UnacyError, CycleError, MaxDepthError, ConversionError, ParseError } from './errors.js';
|
|
8
8
|
// Utilities
|
|
9
|
-
export { createParserWithSchema } from './utils/validation.js';
|
|
9
|
+
export { createParserWithSchema, validateEnum, validateClass, validateRecordSchema, validateTupleSchema, isEnumMetadata, isClassMetadata, isRecordMetadata, isTupleMetadata, detectMetadataKind } from './utils/validation.js';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjG,YAAY;AACZ,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EACnB,MAAM,uBAAuB,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Converter registry with auto-composition via BFS
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
|
-
import type { Converter,
|
|
6
|
-
import type { UnitsFor, WithUnits, TypedMetadata, NameFor, WithTypedUnits, UnitsOf, BaseMetadata,
|
|
5
|
+
import type { Converter, RelaxedConverter, RelaxedBidirectionalConverter } from './converters.js';
|
|
6
|
+
import type { UnitsFor, WithUnits, TypedMetadata, NameFor, WithTypedUnits, UnitsOf, BaseMetadata, SupportedType, InferCallableArgs, Relax as RelaxUnits } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Represents a conversion edge from one unit to another
|
|
9
9
|
* Edges store the unit names as strings, but the type system ensures
|
|
10
10
|
* they correspond to valid WithUnits types
|
|
11
11
|
*/
|
|
12
|
-
type Edge<From extends WithTypedUnits<any> = WithTypedUnits<TypedMetadata<
|
|
12
|
+
type Edge<From extends WithTypedUnits<any> = WithTypedUnits<TypedMetadata<SupportedType>>, To extends WithTypedUnits<any> = WithTypedUnits<TypedMetadata<SupportedType>>> = readonly [From, To];
|
|
13
13
|
/**
|
|
14
14
|
* Extract all unique 'from' units from a list of edges
|
|
15
15
|
*/
|
|
@@ -25,13 +25,15 @@ type ToUnitsFor<Edges extends readonly Edge[], FromUnit extends WithTypedUnits<a
|
|
|
25
25
|
* Type for unit accessor with metadata and conversion methods
|
|
26
26
|
* Can be called as a function to create branded unit values
|
|
27
27
|
*/
|
|
28
|
-
export type UnitAccessor<From extends WithTypedUnits<TypedMetadata
|
|
28
|
+
export type UnitAccessor<From extends WithTypedUnits<TypedMetadata<SupportedType>>, Edges extends readonly Edge[]> = {
|
|
29
29
|
/**
|
|
30
|
-
* Create a branded value with this unit
|
|
31
|
-
*
|
|
30
|
+
* Create a branded value with this unit.
|
|
31
|
+
* For tuples, pass members as individual arguments.
|
|
32
|
+
* For classes, pass constructor parameters directly.
|
|
33
|
+
* @param args - The value(s) to brand
|
|
32
34
|
* @returns The value branded with this unit type
|
|
33
35
|
*/
|
|
34
|
-
(
|
|
36
|
+
(...args: InferCallableArgs<From>): From;
|
|
35
37
|
to: {
|
|
36
38
|
[To in ToUnitsFor<Edges, From> as UnitsFor<To>]: (value: RelaxUnits<From>) => To;
|
|
37
39
|
};
|
|
@@ -42,8 +44,8 @@ export type UnitAccessor<From extends WithTypedUnits<TypedMetadata>, Edges exten
|
|
|
42
44
|
/**
|
|
43
45
|
* Register a converter from this unit to another unit
|
|
44
46
|
*/
|
|
45
|
-
register<To extends WithTypedUnits<ToMeta>, ToMeta extends TypedMetadata<
|
|
46
|
-
register<To extends WithTypedUnits<ToMeta>, ToMeta extends TypedMetadata<
|
|
47
|
+
register<To extends WithTypedUnits<ToMeta>, ToMeta extends TypedMetadata<SupportedType>>(to: UnitsFor<To> | ToMeta, converter: RelaxedConverter<From, To>): UnitRegistry<[...Edges, Edge<From, To>]> & UnitMap<[...Edges, Edge<From, To>]>;
|
|
48
|
+
register<To extends WithTypedUnits<ToMeta>, ToMeta extends TypedMetadata<SupportedType>>(to: UnitsFor<To> | ToMeta, converter: RelaxedBidirectionalConverter<From, To>): UnitRegistry<[...Edges, Edge<From, To>, Edge<To, From>]> & UnitMap<[...Edges, Edge<From, To>, Edge<To, From>]>;
|
|
47
49
|
} & UnitsOf<From>;
|
|
48
50
|
/**
|
|
49
51
|
* Type for unit-based conversion accessors
|
|
@@ -57,7 +59,7 @@ export type UnitMap<Edges extends readonly Edge[]> = {
|
|
|
57
59
|
* Registry for managing and composing unit converters
|
|
58
60
|
*/
|
|
59
61
|
export interface UnitRegistry<Edges extends Edge[] = []> {
|
|
60
|
-
register<From extends WithTypedUnits<FromMeta>, FromMeta extends TypedMetadata<
|
|
62
|
+
register<From extends WithTypedUnits<FromMeta>, FromMeta extends TypedMetadata<SupportedType>>(unit: FromMeta): this & {
|
|
61
63
|
[K in NameFor<From>]: UnitAccessor<From, Edges>;
|
|
62
64
|
};
|
|
63
65
|
/**
|
|
@@ -65,19 +67,19 @@ export interface UnitRegistry<Edges extends Edge[] = []> {
|
|
|
65
67
|
*
|
|
66
68
|
* @param from - Source unit (string name or metadata object)
|
|
67
69
|
* @param to - Destination unit (string name or metadata object)
|
|
68
|
-
* @param converter - Converter function
|
|
70
|
+
* @param converter - Converter function (input is branded, output can be plain or branded)
|
|
69
71
|
* @returns New registry instance with the converter registered
|
|
70
72
|
*/
|
|
71
|
-
register<From extends WithTypedUnits<FromMeta>, To extends WithTypedUnits<ToMeta>, FromMeta extends TypedMetadata<
|
|
73
|
+
register<From extends WithTypedUnits<FromMeta>, To extends WithTypedUnits<ToMeta>, FromMeta extends TypedMetadata<SupportedType>, ToMeta extends TypedMetadata<SupportedType>>(from: UnitsFor<From> | FromMeta, to: UnitsFor<To> | ToMeta, converter: RelaxedConverter<From, To>): UnitRegistry<[...Edges, Edge<From, To>]> & UnitMap<[...Edges, Edge<From, To>]>;
|
|
72
74
|
/**
|
|
73
75
|
* Register a bidirectional converter (both directions)
|
|
74
76
|
*
|
|
75
77
|
* @param from - First unit (string name or metadata object)
|
|
76
78
|
* @param to - Second unit (string name or metadata object)
|
|
77
|
-
* @param converter - Bidirectional converter object
|
|
79
|
+
* @param converter - Bidirectional converter object (input branded, output can be plain or branded)
|
|
78
80
|
* @returns New registry instance with both converters registered
|
|
79
81
|
*/
|
|
80
|
-
register<From extends WithTypedUnits<FromMeta>, To extends WithTypedUnits<ToMeta>, FromMeta extends TypedMetadata<
|
|
82
|
+
register<From extends WithTypedUnits<FromMeta>, To extends WithTypedUnits<ToMeta>, FromMeta extends TypedMetadata<SupportedType>, ToMeta extends TypedMetadata<SupportedType>>(from: UnitsFor<From> | FromMeta, to: UnitsFor<To> | ToMeta, converter: RelaxedBidirectionalConverter<From, To>): UnitRegistry<[...Edges, Edge<From, To>, Edge<To, From>]> & UnitMap<[...Edges, Edge<From, To>, Edge<To, From>]>;
|
|
81
83
|
/**
|
|
82
84
|
* Explicitly allow a conversion path in the type system (for multi-hop conversions)
|
|
83
85
|
*
|
|
@@ -100,7 +102,7 @@ export interface UnitRegistry<Edges extends Edge[] = []> {
|
|
|
100
102
|
* const f = registry.Celsius.to.Fahrenheit(temp);
|
|
101
103
|
* ```
|
|
102
104
|
*/
|
|
103
|
-
allow<From extends WithTypedUnits<FromMeta>, To extends WithTypedUnits<ToMeta>, FromMeta extends TypedMetadata<
|
|
105
|
+
allow<From extends WithTypedUnits<FromMeta>, To extends WithTypedUnits<ToMeta>, FromMeta extends TypedMetadata<SupportedType>, ToMeta extends TypedMetadata<SupportedType>>(from: UnitsFor<From> | FromMeta, to: UnitsFor<To> | ToMeta): UnitRegistry<[...Edges, Edge<From, To>]> & UnitMap<[...Edges, Edge<From, To>]>;
|
|
104
106
|
/**
|
|
105
107
|
* Get a converter (direct or composed via BFS)
|
|
106
108
|
*
|
|
@@ -108,7 +110,7 @@ export interface UnitRegistry<Edges extends Edge[] = []> {
|
|
|
108
110
|
* @param to - Destination unit
|
|
109
111
|
* @returns Converter function, or undefined if no path exists
|
|
110
112
|
*/
|
|
111
|
-
getConverter<From extends WithUnits<
|
|
113
|
+
getConverter<From extends WithUnits<SupportedType, BaseMetadata>, To extends WithUnits<SupportedType, BaseMetadata>>(from: UnitsFor<From>, to: UnitsFor<To>): Converter<From, To> | undefined;
|
|
112
114
|
/**
|
|
113
115
|
* Convert a value using fluent API
|
|
114
116
|
*
|
|
@@ -116,8 +118,8 @@ export interface UnitRegistry<Edges extends Edge[] = []> {
|
|
|
116
118
|
* @param fromUnit - Source unit
|
|
117
119
|
* @returns Object with to() method for conversion
|
|
118
120
|
*/
|
|
119
|
-
convert<From extends WithUnits<
|
|
120
|
-
to<To extends WithUnits<
|
|
121
|
+
convert<From extends WithUnits<SupportedType, BaseMetadata>>(value: From, fromUnit: UnitsFor<From>): {
|
|
122
|
+
to<To extends WithUnits<SupportedType, BaseMetadata>>(unit: UnitsFor<To>): To;
|
|
121
123
|
};
|
|
122
124
|
}
|
|
123
125
|
/**
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.js
CHANGED
|
@@ -76,8 +76,15 @@ class ConverterRegistryImpl {
|
|
|
76
76
|
});
|
|
77
77
|
// Get metadata for this unit
|
|
78
78
|
const unitMetadata = this.metadata.get(fromUnit) || {};
|
|
79
|
-
// Create a callable function that brands a value with the unit
|
|
80
|
-
|
|
79
|
+
// Create a callable function that brands a value with the unit.
|
|
80
|
+
// For tuples, collect spread args into an array.
|
|
81
|
+
// For classes, construct an instance from the spread args.
|
|
82
|
+
const metaType = unitMetadata?.type;
|
|
83
|
+
const brandFunction = metaType && typeof metaType === 'function' && /^[A-Z]/.test(metaType.name ?? '')
|
|
84
|
+
? (...args) => new metaType(...args)
|
|
85
|
+
: metaType && Array.isArray(metaType)
|
|
86
|
+
? (...args) => args
|
|
87
|
+
: (value) => value;
|
|
81
88
|
// Create unit accessor object with to, addMetadata, register, and metadata properties
|
|
82
89
|
const unitAccessor = Object.assign(brandFunction, {
|
|
83
90
|
to: toProxy,
|
|
@@ -294,8 +301,15 @@ function createRegistryFromGraph(graph, pathCache, metadata) {
|
|
|
294
301
|
});
|
|
295
302
|
// Get metadata for this unit (may be empty)
|
|
296
303
|
const unitMetadata = target.metadata.get(prop) || {};
|
|
297
|
-
// Create a callable function that brands a value with the unit
|
|
298
|
-
|
|
304
|
+
// Create a callable function that brands a value with the unit.
|
|
305
|
+
// For tuples, collect spread args into an array.
|
|
306
|
+
// For classes, construct an instance from the spread args.
|
|
307
|
+
const metaType = unitMetadata?.type;
|
|
308
|
+
const brandFunction = metaType && typeof metaType === 'function' && /^[A-Z]/.test(metaType.name ?? '')
|
|
309
|
+
? (...args) => new metaType(...args)
|
|
310
|
+
: metaType && Array.isArray(metaType)
|
|
311
|
+
? (...args) => args
|
|
312
|
+
: (value) => value;
|
|
299
313
|
// Create unit accessor with all methods
|
|
300
314
|
const dynamicAccessor = Object.assign(brandFunction, {
|
|
301
315
|
to: toProxy,
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,17 +3,49 @@
|
|
|
3
3
|
* @packageDocumentation
|
|
4
4
|
*/
|
|
5
5
|
import type { GetTagMetadata, Simplify, Tagged, UnwrapTagged } from 'type-fest';
|
|
6
|
+
/**
|
|
7
|
+
* Constraint type for any tagged unit value.
|
|
8
|
+
* `Tagged<unknown, K, V>` resolves to `Tag<K, V>` (since `unknown & X = X`),
|
|
9
|
+
* giving us the `Tag` constraint without importing the internal `Tag` type.
|
|
10
|
+
*/
|
|
11
|
+
type AnyTaggedUnit = Tagged<unknown, typeof UNITS, any>;
|
|
6
12
|
export declare const UNITS: unique symbol;
|
|
7
13
|
export declare const DEFINITION: unique symbol;
|
|
8
14
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
15
|
+
* Resolve a schema/constructor/enum type to its runtime value type.
|
|
16
|
+
*
|
|
17
|
+
* - **Tuple schemas** → `InferFromTupleSchema` (`['number', 'string']` → `[number, string]`)
|
|
18
|
+
* - **Class constructors** → `InstanceType` (constructor → instance)
|
|
19
|
+
* - **Record schemas** → `InferFromRecordSchema` (`{ x: 'number' }` → `{ x: number }`)
|
|
20
|
+
* - **Enum objects** → `T[keyof T]` (enum value type)
|
|
21
|
+
* - **Primitives** → passed through unchanged
|
|
22
|
+
*/
|
|
23
|
+
export type ResolveValueType<T> = T extends readonly string[] ? InferFromTupleSchema<T> : T extends ClassType ? InstanceType<T> : T extends RecordSchema ? T[keyof T] extends keyof PrimitiveTypeMap | RecordSchema ? InferFromRecordSchema<T> : T[keyof T] : T extends EnumType ? T[keyof T] : T;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a branded unit type from a `TypedMetadata` object.
|
|
26
|
+
*
|
|
27
|
+
* For primitive metadata (where `type` is a name string like `'number'`),
|
|
28
|
+
* maps back through `PrimitiveTypeMap` to recover the base primitive.
|
|
29
|
+
* For non-primitive metadata (enum, class, record, tuple), resolves to
|
|
30
|
+
* the actual runtime value type via `ResolveValueType`.
|
|
31
|
+
*
|
|
32
|
+
* @template M - A `TypedMetadata` instance (e.g., `typeof CelsiusMetadata`)
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const CelsiusMeta = { name: 'Celsius', type: 'number' } as const;
|
|
37
|
+
* type Celsius = WithTypedUnits<typeof CelsiusMeta>;
|
|
38
|
+
* // Celsius = Tagged<number, UNITS, typeof CelsiusMeta>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export type WithTypedUnits<M extends TypedMetadata<any>> = unknown extends M ? WithUnits<any, any> : M extends {
|
|
42
|
+
name: string;
|
|
43
|
+
type: infer TypeField;
|
|
44
|
+
} ? TypeField extends keyof PrimitiveTypeMap ? WithUnits<PrimitiveTypeMap[TypeField], M> : TypeField extends SupportedType ? WithUnits<ResolveValueType<TypeField>, M> : never : never;
|
|
13
45
|
/**
|
|
14
46
|
* Brand a value with a unit identifier for compile-time unit safety.
|
|
15
47
|
*
|
|
16
|
-
* @template T - Base type (e.g., number, bigint)
|
|
48
|
+
* @template T - Base type (e.g., number, bigint, record, tuple, class instance)
|
|
17
49
|
* @template M - Metadata type (must extend BaseMetadata with required name property)
|
|
18
50
|
*
|
|
19
51
|
* @example
|
|
@@ -23,18 +55,74 @@ export type WithTypedUnits<M extends TypedMetadata<any>> = WithUnits<ToPrimitive
|
|
|
23
55
|
* const temp: Celsius = 25 as Celsius;
|
|
24
56
|
* ```
|
|
25
57
|
*/
|
|
26
|
-
export type WithUnits<T
|
|
58
|
+
export type WithUnits<T, M extends BaseMetadata = BaseMetadata> = Tagged<T, typeof UNITS, M>;
|
|
59
|
+
/** Primitive JavaScript types that can be used as unit base types. */
|
|
27
60
|
export type PrimitiveType = number | string | boolean | bigint;
|
|
61
|
+
/**
|
|
62
|
+
* A TypeScript enum object at runtime — an object whose values are all
|
|
63
|
+
* strings (string enum) or all numbers (numeric enum).
|
|
64
|
+
* Mixed enums (both string and number values) are rejected at validation.
|
|
65
|
+
*/
|
|
66
|
+
export type EnumType = Record<string, string | number>;
|
|
67
|
+
/**
|
|
68
|
+
* A class constructor (including abstract classes) that can serve as a
|
|
69
|
+
* unit's type identity. At runtime, the constructor itself is stored
|
|
70
|
+
* in the metadata `type` field.
|
|
71
|
+
*/
|
|
72
|
+
export type ClassType = abstract new (...args: any[]) => any;
|
|
73
|
+
/** A record schema value — either a primitive type name or a nested schema. */
|
|
74
|
+
export type RecordSchemaValue = string | RecordSchema;
|
|
75
|
+
/**
|
|
76
|
+
* A schema describing an object shape. Keys are property names;
|
|
77
|
+
* values are primitive type name strings (`'number'`, `'string'`, etc.)
|
|
78
|
+
* or nested `RecordSchema` objects.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const PointSchema = { x: 'number', y: 'number' } satisfies RecordSchema;
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export type RecordSchema = {
|
|
86
|
+
[key: string]: RecordSchemaValue;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* A schema describing a tuple as an array of primitive type name strings.
|
|
90
|
+
* Supports optional (`'number?'`) and rest (`'...number'`) modifiers.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const RGBSchema = ['number', 'number', 'number'] as const satisfies TupleSchema;
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export type TupleSchema = readonly string[];
|
|
98
|
+
/**
|
|
99
|
+
* Union of all types that can be used as a unit's base type.
|
|
100
|
+
* Includes primitives and non-primitive categories (enum, class, record, tuple).
|
|
101
|
+
*/
|
|
102
|
+
export type SupportedType = PrimitiveType | EnumType | ClassType | RecordSchema | TupleSchema;
|
|
28
103
|
export type PrimitiveTypeMap = {
|
|
29
104
|
string: string;
|
|
30
105
|
number: number;
|
|
31
106
|
boolean: boolean;
|
|
32
107
|
bigint: bigint;
|
|
33
108
|
};
|
|
34
|
-
export type
|
|
35
|
-
export type
|
|
36
|
-
export type
|
|
37
|
-
|
|
109
|
+
export type ToPrimitiveTypeName<T> = T extends PrimitiveTypeMap[infer U extends keyof PrimitiveTypeMap] ? U : never;
|
|
110
|
+
export type OptionalWithUnits<T, M extends BaseMetadata = BaseMetadata> = T | WithUnits<T, M>;
|
|
111
|
+
export type Unwrap<T> = T extends AnyTaggedUnit ? UnwrapTagged<T> : T;
|
|
112
|
+
/**
|
|
113
|
+
* Resolve the callable argument types from a branded unit type.
|
|
114
|
+
*
|
|
115
|
+
* Uses the metadata's `type` field (the original schema/constructor) to
|
|
116
|
+
* determine the kind, then produces the appropriate parameter tuple:
|
|
117
|
+
* - **Tuple schemas** → spread members: `['number', 'string']` → `[number, string]`
|
|
118
|
+
* - **Class constructors** → spread constructor params: `ConstructorParameters<C>`
|
|
119
|
+
* - **Record schemas** → single object arg: `[{ x: number; y: number }]`
|
|
120
|
+
* - **Enum objects** → single value arg: `[LogLevel.WARN]`
|
|
121
|
+
* - **Primitives** → single arg: `[number]`
|
|
122
|
+
*/
|
|
123
|
+
export type InferCallableArgs<From> = From extends AnyTaggedUnit ? GetTagMetadata<From, typeof UNITS> extends {
|
|
124
|
+
type: infer TypeField;
|
|
125
|
+
} ? TypeField extends readonly string[] ? InferFromTupleSchema<TypeField> : TypeField extends ClassType ? ConstructorParameters<TypeField> : TypeField extends RecordSchema ? TypeField[keyof TypeField] extends keyof PrimitiveTypeMap | RecordSchema ? [InferFromRecordSchema<TypeField>] : [TypeField[keyof TypeField]] : TypeField extends EnumType ? [TypeField[keyof TypeField]] : [Unwrap<From>] : [Unwrap<From>] : [Unwrap<From>];
|
|
38
126
|
export type Relax<T> = T | Unwrap<T>;
|
|
39
127
|
/**
|
|
40
128
|
* Brand a value with a format identifier for compile-time format safety.
|
|
@@ -49,20 +137,14 @@ export type Relax<T> = T | Unwrap<T>;
|
|
|
49
137
|
* ```
|
|
50
138
|
*/
|
|
51
139
|
export type WithFormat<T, F extends string> = Tagged<T, typeof UNITS, F>;
|
|
52
|
-
export type UnitsOf<T extends
|
|
53
|
-
export type NameFor<T extends
|
|
140
|
+
export type UnitsOf<T> = T extends AnyTaggedUnit ? GetTagMetadata<T, typeof UNITS> : never;
|
|
141
|
+
export type NameFor<T> = T extends AnyTaggedUnit ? GetTagMetadata<T, typeof UNITS> extends {
|
|
54
142
|
name: infer N extends string;
|
|
55
|
-
} ? N : string;
|
|
143
|
+
} ? N : string : string;
|
|
56
144
|
/** Alias for NameFor - returns the unit name type */
|
|
57
|
-
export type UnitsFor<T
|
|
145
|
+
export type UnitsFor<T> = NameFor<T>;
|
|
58
146
|
/** Extract metadata from a WithUnits type */
|
|
59
|
-
export type MetadataOf<T extends
|
|
60
|
-
export type UnitDefinition<T extends PrimitiveType, U, A, F extends string = never> = {
|
|
61
|
-
type: ToPrimitiveTypeName<T>;
|
|
62
|
-
name: U;
|
|
63
|
-
abbreviation?: A;
|
|
64
|
-
format?: F;
|
|
65
|
-
};
|
|
147
|
+
export type MetadataOf<T> = T extends AnyTaggedUnit ? GetTagMetadata<T, typeof UNITS> extends infer M ? M : BaseMetadata : BaseMetadata;
|
|
66
148
|
/**
|
|
67
149
|
* Base metadata type that all unit metadata must extend.
|
|
68
150
|
* Requires a `name` property and allows arbitrary additional properties.
|
|
@@ -80,10 +162,19 @@ export type BaseMetadata = {
|
|
|
80
162
|
/** Unique identifier for the unit (replaces tag) */
|
|
81
163
|
name: string;
|
|
82
164
|
};
|
|
83
|
-
|
|
165
|
+
/**
|
|
166
|
+
* Metadata type for units with type information.
|
|
167
|
+
*
|
|
168
|
+
* For primitive types, `type` is the type name string (e.g., `'number'`).
|
|
169
|
+
* For non-primitive types, `type` IS the actual value:
|
|
170
|
+
* - Enum: the enum object itself
|
|
171
|
+
* - Class: the class constructor
|
|
172
|
+
* - Record: the schema object `{ x: 'number', y: 'string' }`
|
|
173
|
+
* - Tuple: the tuple schema array `['number', 'string']`
|
|
174
|
+
*/
|
|
175
|
+
export type TypedMetadata<T extends SupportedType> = Simplify<{
|
|
84
176
|
name: string;
|
|
85
|
-
|
|
86
|
-
type: ToPrimitiveTypeName<T>;
|
|
177
|
+
type: T extends PrimitiveType ? ToPrimitiveTypeName<T> : T;
|
|
87
178
|
}>;
|
|
88
179
|
/**
|
|
89
180
|
* Metadata that can be attached to units in the registry
|
|
@@ -102,4 +193,21 @@ export interface UnitMetadata {
|
|
|
102
193
|
/** Allow arbitrary custom metadata properties */
|
|
103
194
|
[key: string]: unknown;
|
|
104
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Map type name strings to TypeScript primitive types.
|
|
198
|
+
*/
|
|
199
|
+
export type PrimitiveTypeFromName<T extends string> = T extends 'number' ? number : T extends 'string' ? string : T extends 'boolean' ? boolean : T extends 'bigint' ? bigint : never;
|
|
200
|
+
/**
|
|
201
|
+
* Infer TypeScript type from a `RecordSchema`.
|
|
202
|
+
* Recursively processes nested schemas.
|
|
203
|
+
*/
|
|
204
|
+
export type InferFromRecordSchema<S extends RecordSchema> = Simplify<{
|
|
205
|
+
[K in keyof S]: S[K] extends string ? PrimitiveTypeFromName<S[K]> : S[K] extends RecordSchema ? InferFromRecordSchema<S[K]> : never;
|
|
206
|
+
}>;
|
|
207
|
+
/**
|
|
208
|
+
* Infer TypeScript type from a `TupleSchema`.
|
|
209
|
+
* Handles optional (`?`) and rest (`...`) elements.
|
|
210
|
+
*/
|
|
211
|
+
export type InferFromTupleSchema<T extends readonly string[]> = T extends readonly [] ? [] : T extends readonly [infer Head extends string, ...infer Rest extends readonly string[]] ? Head extends `...${infer Base}` ? Rest extends readonly [] ? [...Array<PrimitiveTypeFromName<Base>>] : never : Head extends `${infer Base}?` ? [PrimitiveTypeFromName<Base>?, ...InferFromTupleSchema<Rest>] : [PrimitiveTypeFromName<Head>, ...InferFromTupleSchema<Rest>] : never;
|
|
212
|
+
export {};
|
|
105
213
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhF,eAAO,MAAM,KAAK,EAAE,OAAO,MAAwB,CAAC;AAEpD,eAAO,MAAM,UAAU,EAAE,OAAO,MAA6B,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEhF;;;;GAIG;AACH,KAAK,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,EAAE,GAAG,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,EAAE,OAAO,MAAwB,CAAC;AAEpD,eAAO,MAAM,UAAU,EAAE,OAAO,MAA6B,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,MAAM,EAAE,GACzD,oBAAoB,CAAC,CAAC,CAAC,GACvB,CAAC,SAAS,SAAS,GACjB,YAAY,CAAC,CAAC,CAAC,GACf,CAAC,SAAS,YAAY,GACpB,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,gBAAgB,GAAG,YAAY,GACtD,qBAAqB,CAAC,CAAC,CAAC,GACxB,CAAC,CAAC,MAAM,CAAC,CAAC,GACZ,CAAC,SAAS,QAAQ,GAChB,CAAC,CAAC,MAAM,CAAC,CAAC,GACV,CAAC,CAAC;AAEZ;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,SAAS,CAAC,GACxE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,GACnB,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,SAAS,CAAA;CAAE,GAC/C,SAAS,SAAS,MAAM,gBAAgB,GACtC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GACzC,SAAS,SAAS,aAAa,GAC7B,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GACzC,KAAK,GACT,KAAK,CAAC;AAEZ;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;AAE7F,sEAAsE;AACtE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;AAE7D,+EAA+E;AAC/E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,MAAM,EAAE,CAAC;AAE5C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,CAAC;AAE9F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,MAAM,CAAC,SACrE,MAAM,gBAAgB,CAAC,GACrB,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9F,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,iBAAiB,CAAC,IAAI,IAAI,IAAI,SAAS,aAAa,GAC5D,cAAc,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,SAAS,CAAA;CAAE,GAClE,SAAS,SAAS,SAAS,MAAM,EAAE,GACjC,oBAAoB,CAAC,SAAS,CAAC,GAC/B,SAAS,SAAS,SAAS,GACzB,qBAAqB,CAAC,SAAS,CAAC,GAChC,SAAS,SAAS,YAAY,GAC5B,SAAS,CAAC,MAAM,SAAS,CAAC,SAAS,MAAM,gBAAgB,GAAG,YAAY,GACtE,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,GAClC,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC,GAC9B,SAAS,SAAS,QAAQ,GACxB,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC,GAC5B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GACtB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAChB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAEnB,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,CAAC;AAE3F,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GAC5C,cAAc,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC,SAAS,MAAM,CAAA;CAAE,GACtE,CAAC,GACD,MAAM,GACR,MAAM,CAAC;AAEX,qDAAqD;AACrD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAErC,6CAA6C;AAC7C,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GAC/C,cAAc,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,SAAS,MAAM,CAAC,GAC7C,CAAC,GACD,YAAY,GACd,YAAY,CAAC;AAEjB;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,aAAa,IAAI,QAAQ,CAAC;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,SAAS,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAC5D,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,QAAQ,GACpE,MAAM,GACN,CAAC,SAAS,QAAQ,GAChB,MAAM,GACN,CAAC,SAAS,SAAS,GACjB,OAAO,GACP,CAAC,SAAS,QAAQ,GAChB,MAAM,GACN,KAAK,CAAC;AAEhB;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI,QAAQ,CAAC;KAClE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAC/B,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3B,CAAC,CAAC,CAAC,CAAC,SAAS,YAAY,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3B,KAAK;CACZ,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,SAAS,MAAM,EAAE,IAAI,CAAC,SAAS,SAAS,EAAE,GACjF,EAAE,GACF,CAAC,SAAS,SAAS,CAAC,MAAM,IAAI,SAAS,MAAM,EAAE,GAAG,MAAM,IAAI,SAAS,SAAS,MAAM,EAAE,CAAC,GACrF,IAAI,SAAS,MAAM,MAAM,IAAI,EAAE,GAC7B,IAAI,SAAS,SAAS,EAAE,GACtB,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,GACvC,KAAK,GACP,IAAI,SAAS,GAAG,MAAM,IAAI,GAAG,GAC3B,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAC7D,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAChE,KAAK,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,KAAK,GAAkB,MAAM,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAkB,MAAM,CAAC,YAAY,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { Parser } from '../formatters.js';
|
|
6
6
|
import type { WithFormat } from '../types.js';
|
|
7
|
+
import type { EnumType, ClassType, RecordSchema, TupleSchema, TypedMetadata } from '../types.js';
|
|
7
8
|
/**
|
|
8
9
|
* Create a parser with Zod schema validation.
|
|
9
10
|
*
|
|
@@ -22,4 +23,109 @@ import type { WithFormat } from '../types.js';
|
|
|
22
23
|
* ```
|
|
23
24
|
*/
|
|
24
25
|
export declare function createParserWithSchema<F extends string, T>(schema: any, format: F): Parser<WithFormat<T, F>>;
|
|
26
|
+
/**
|
|
27
|
+
* Validate that a runtime value is a valid TypeScript enum object.
|
|
28
|
+
*
|
|
29
|
+
* Accepts numeric enums (with reverse-mapped keys filtered out) and
|
|
30
|
+
* string enums. Rejects empty objects and mixed enums whose forward
|
|
31
|
+
* entries contain both string and number values.
|
|
32
|
+
*
|
|
33
|
+
* @param value - The value to validate
|
|
34
|
+
* @returns `true` if `value` is a valid `EnumType`
|
|
35
|
+
* @throws {Error} If the enum contains both numeric and string members
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* enum LogLevel { DEBUG = 0, INFO = 1 }
|
|
40
|
+
* validateEnum(LogLevel); // true
|
|
41
|
+
* validateEnum({}); // false
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function validateEnum(value: unknown): value is EnumType;
|
|
45
|
+
/**
|
|
46
|
+
* Validate that a runtime value is a valid class constructor.
|
|
47
|
+
*
|
|
48
|
+
* Checks that the value is a function with a `prototype` property.
|
|
49
|
+
* Arrow functions and bound functions without prototypes are rejected.
|
|
50
|
+
*
|
|
51
|
+
* @param value - The value to validate
|
|
52
|
+
* @returns `true` if `value` is a valid `ClassType` constructor
|
|
53
|
+
*/
|
|
54
|
+
export declare function validateClass(value: unknown): value is ClassType;
|
|
55
|
+
/**
|
|
56
|
+
* Validate that a runtime value is a valid record schema.
|
|
57
|
+
*
|
|
58
|
+
* A valid record schema is a plain object whose leaf values are primitive
|
|
59
|
+
* type name strings (`'number'`, `'string'`, `'boolean'`, `'bigint'`) or
|
|
60
|
+
* nested record schema objects. Empty objects are accepted.
|
|
61
|
+
*
|
|
62
|
+
* @param value - The value to validate
|
|
63
|
+
* @param visited - Internal set for circular reference detection
|
|
64
|
+
* @returns `true` if `value` is a valid `RecordSchema`
|
|
65
|
+
* @throws {Error} If circular references or invalid type names are found
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* validateRecordSchema({ x: 'number', y: 'number' }); // true
|
|
70
|
+
* validateRecordSchema({ pos: { x: 'number' } }); // true (nested)
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export declare function validateRecordSchema(value: unknown, visited?: Set<unknown>): value is RecordSchema;
|
|
74
|
+
/**
|
|
75
|
+
* Validate that a runtime value is a valid tuple schema.
|
|
76
|
+
*
|
|
77
|
+
* A valid tuple schema is an array of primitive type name strings,
|
|
78
|
+
* optionally annotated with `?` (optional) or `...` (rest) modifiers.
|
|
79
|
+
* Empty arrays are accepted.
|
|
80
|
+
*
|
|
81
|
+
* @param value - The value to validate
|
|
82
|
+
* @returns `true` if `value` is a valid `TupleSchema`
|
|
83
|
+
* @throws {Error} If elements are not strings or contain invalid type names
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* validateTupleSchema(['number', 'number', 'number']); // true
|
|
88
|
+
* validateTupleSchema(['string', 'number?']); // true (optional)
|
|
89
|
+
* validateTupleSchema(['number', '...string']); // true (rest)
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function validateTupleSchema(value: unknown): value is TupleSchema;
|
|
93
|
+
/**
|
|
94
|
+
* Type guard: returns `true` when `meta.type` is an enum object.
|
|
95
|
+
*
|
|
96
|
+
* Distinguishes enums from record schemas by first checking whether the
|
|
97
|
+
* value passes `validateRecordSchema`; if it does, the metadata is
|
|
98
|
+
* classified as a record, not an enum.
|
|
99
|
+
*
|
|
100
|
+
* @param meta - Metadata object to inspect
|
|
101
|
+
*/
|
|
102
|
+
export declare function isEnumMetadata(meta: unknown): meta is TypedMetadata<EnumType>;
|
|
103
|
+
/**
|
|
104
|
+
* Type guard: returns `true` when `meta.type` is a class constructor.
|
|
105
|
+
*
|
|
106
|
+
* @param meta - Metadata object to inspect
|
|
107
|
+
*/
|
|
108
|
+
export declare function isClassMetadata(meta: unknown): meta is TypedMetadata<ClassType>;
|
|
109
|
+
/**
|
|
110
|
+
* Type guard: returns `true` when `meta.type` is a record schema object.
|
|
111
|
+
*
|
|
112
|
+
* @param meta - Metadata object to inspect
|
|
113
|
+
*/
|
|
114
|
+
export declare function isRecordMetadata(meta: unknown): meta is TypedMetadata<RecordSchema>;
|
|
115
|
+
/**
|
|
116
|
+
* Type guard: returns `true` when `meta.type` is a tuple schema array.
|
|
117
|
+
*
|
|
118
|
+
* @param meta - Metadata object to inspect
|
|
119
|
+
*/
|
|
120
|
+
export declare function isTupleMetadata(meta: unknown): meta is TypedMetadata<TupleSchema>;
|
|
121
|
+
/**
|
|
122
|
+
* Detect the kind of a metadata object by inspecting its `type` field.
|
|
123
|
+
*
|
|
124
|
+
* Resolution priority: `primitive` → `class` → `tuple` → `record` → `enum`.
|
|
125
|
+
* Returns `'unknown'` when the value is not a recognised metadata shape.
|
|
126
|
+
*
|
|
127
|
+
* @param meta - Metadata object to categorise
|
|
128
|
+
* @returns The detected kind string
|
|
129
|
+
*/
|
|
130
|
+
export declare function detectMetadataKind(meta: unknown): 'primitive' | 'enum' | 'class' | 'tuple' | 'record' | 'unknown';
|
|
25
131
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjG;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EACxD,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,CAAC,GACR,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAU1B;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CA0C9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAWhE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,GAAG,CAAC,OAAO,CAAa,GAChC,KAAK,IAAI,YAAY,CA8CvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAoCxE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,CA6B7E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAAC,SAAS,CAAC,CAO/E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAAC,YAAY,CAAC,CAkBnF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,CAajF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,GACZ,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CA4CjE"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -32,4 +32,321 @@ export function createParserWithSchema(schema, format) {
|
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Non-Primitive Type Validation
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* Validate that a runtime value is a valid TypeScript enum object.
|
|
40
|
+
*
|
|
41
|
+
* Accepts numeric enums (with reverse-mapped keys filtered out) and
|
|
42
|
+
* string enums. Rejects empty objects and mixed enums whose forward
|
|
43
|
+
* entries contain both string and number values.
|
|
44
|
+
*
|
|
45
|
+
* @param value - The value to validate
|
|
46
|
+
* @returns `true` if `value` is a valid `EnumType`
|
|
47
|
+
* @throws {Error} If the enum contains both numeric and string members
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* enum LogLevel { DEBUG = 0, INFO = 1 }
|
|
52
|
+
* validateEnum(LogLevel); // true
|
|
53
|
+
* validateEnum({}); // false
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export function validateEnum(value) {
|
|
57
|
+
if (typeof value !== 'object' || value === null) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const enumObj = value;
|
|
61
|
+
const entries = Object.entries(enumObj);
|
|
62
|
+
// Reject empty objects that aren't real enums
|
|
63
|
+
if (entries.length === 0) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
// For numeric enums, TypeScript creates reverse mappings:
|
|
67
|
+
// enum LogLevel { DEBUG = 0 } becomes { DEBUG: 0, 0: 'DEBUG' }
|
|
68
|
+
// We need to filter out the reverse mappings to detect actual mixed enums
|
|
69
|
+
// Separate forward and reverse mappings
|
|
70
|
+
const forwardEntries = entries.filter(([key, _val]) => {
|
|
71
|
+
// Forward mapping: string key -> number/string value
|
|
72
|
+
return isNaN(Number(key));
|
|
73
|
+
});
|
|
74
|
+
// If no forward entries, this isn't a valid enum
|
|
75
|
+
if (forwardEntries.length === 0) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// Check if all forward values are numbers or all are strings
|
|
79
|
+
const values = forwardEntries.map(([, val]) => val);
|
|
80
|
+
const numericValues = values.filter((v) => typeof v === 'number');
|
|
81
|
+
const stringValues = values.filter((v) => typeof v === 'string');
|
|
82
|
+
// Reject true mixed enums (not counting reverse mappings)
|
|
83
|
+
if (numericValues.length > 0 && stringValues.length > 0) {
|
|
84
|
+
throw new Error('Mixed enums (with both numeric and string members) are not supported. ' +
|
|
85
|
+
'Please use either numeric or string values consistently.');
|
|
86
|
+
}
|
|
87
|
+
return numericValues.length > 0 || stringValues.length > 0;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Validate that a runtime value is a valid class constructor.
|
|
91
|
+
*
|
|
92
|
+
* Checks that the value is a function with a `prototype` property.
|
|
93
|
+
* Arrow functions and bound functions without prototypes are rejected.
|
|
94
|
+
*
|
|
95
|
+
* @param value - The value to validate
|
|
96
|
+
* @returns `true` if `value` is a valid `ClassType` constructor
|
|
97
|
+
*/
|
|
98
|
+
export function validateClass(value) {
|
|
99
|
+
if (typeof value !== 'function') {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
// Check for prototype
|
|
103
|
+
if (!('prototype' in value)) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Validate that a runtime value is a valid record schema.
|
|
110
|
+
*
|
|
111
|
+
* A valid record schema is a plain object whose leaf values are primitive
|
|
112
|
+
* type name strings (`'number'`, `'string'`, `'boolean'`, `'bigint'`) or
|
|
113
|
+
* nested record schema objects. Empty objects are accepted.
|
|
114
|
+
*
|
|
115
|
+
* @param value - The value to validate
|
|
116
|
+
* @param visited - Internal set for circular reference detection
|
|
117
|
+
* @returns `true` if `value` is a valid `RecordSchema`
|
|
118
|
+
* @throws {Error} If circular references or invalid type names are found
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```typescript
|
|
122
|
+
* validateRecordSchema({ x: 'number', y: 'number' }); // true
|
|
123
|
+
* validateRecordSchema({ pos: { x: 'number' } }); // true (nested)
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export function validateRecordSchema(value, visited = new Set()) {
|
|
127
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
// Detect circular references
|
|
131
|
+
if (visited.has(value)) {
|
|
132
|
+
throw new Error('Circular references in record schemas are not supported. ' +
|
|
133
|
+
'Please restructure your schema to avoid self-referential structures.');
|
|
134
|
+
}
|
|
135
|
+
visited.add(value);
|
|
136
|
+
const schema = value;
|
|
137
|
+
// Allow empty records
|
|
138
|
+
if (Object.keys(schema).length === 0) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
// Validate all property values
|
|
142
|
+
for (const [key, propValue] of Object.entries(schema)) {
|
|
143
|
+
if (typeof propValue === 'string') {
|
|
144
|
+
// Must be a valid primitive type name
|
|
145
|
+
if (!['number', 'string', 'boolean', 'bigint'].includes(propValue)) {
|
|
146
|
+
throw new Error(`Invalid type name "${propValue}" for property "${key}". ` +
|
|
147
|
+
'Expected: "number", "string", "boolean", or "bigint".');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (typeof propValue === 'object' && propValue !== null) {
|
|
151
|
+
// Recursively validate nested schema
|
|
152
|
+
if (!validateRecordSchema(propValue, new Set(visited))) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
throw new Error(`Invalid schema value for property "${key}". ` +
|
|
158
|
+
'Expected a type name string or nested schema object.');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Validate that a runtime value is a valid tuple schema.
|
|
165
|
+
*
|
|
166
|
+
* A valid tuple schema is an array of primitive type name strings,
|
|
167
|
+
* optionally annotated with `?` (optional) or `...` (rest) modifiers.
|
|
168
|
+
* Empty arrays are accepted.
|
|
169
|
+
*
|
|
170
|
+
* @param value - The value to validate
|
|
171
|
+
* @returns `true` if `value` is a valid `TupleSchema`
|
|
172
|
+
* @throws {Error} If elements are not strings or contain invalid type names
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* validateTupleSchema(['number', 'number', 'number']); // true
|
|
177
|
+
* validateTupleSchema(['string', 'number?']); // true (optional)
|
|
178
|
+
* validateTupleSchema(['number', '...string']); // true (rest)
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
export function validateTupleSchema(value) {
|
|
182
|
+
if (!Array.isArray(value)) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
// Allow empty tuples
|
|
186
|
+
if (value.length === 0) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
// Validate each element
|
|
190
|
+
for (let i = 0; i < value.length; i++) {
|
|
191
|
+
const element = value[i];
|
|
192
|
+
if (typeof element !== 'string') {
|
|
193
|
+
throw new Error(`Tuple element at index ${i} must be a string, got ${typeof element}.`);
|
|
194
|
+
}
|
|
195
|
+
// Parse optional (?) and rest (...) modifiers
|
|
196
|
+
let typeName = element;
|
|
197
|
+
if (element.endsWith('?')) {
|
|
198
|
+
typeName = element.slice(0, -1);
|
|
199
|
+
}
|
|
200
|
+
else if (element.startsWith('...')) {
|
|
201
|
+
typeName = element.slice(3);
|
|
202
|
+
}
|
|
203
|
+
// Validate base type name
|
|
204
|
+
if (!['number', 'string', 'boolean', 'bigint'].includes(typeName)) {
|
|
205
|
+
throw new Error(`Invalid type name "${typeName}" at tuple index ${i}. ` +
|
|
206
|
+
'Expected: "number", "string", "boolean", or "bigint".');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Type Guards for Metadata
|
|
213
|
+
// ============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Type guard: returns `true` when `meta.type` is an enum object.
|
|
216
|
+
*
|
|
217
|
+
* Distinguishes enums from record schemas by first checking whether the
|
|
218
|
+
* value passes `validateRecordSchema`; if it does, the metadata is
|
|
219
|
+
* classified as a record, not an enum.
|
|
220
|
+
*
|
|
221
|
+
* @param meta - Metadata object to inspect
|
|
222
|
+
*/
|
|
223
|
+
export function isEnumMetadata(meta) {
|
|
224
|
+
if (typeof meta !== 'object' || meta === null || !('type' in meta)) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
const { type } = meta;
|
|
228
|
+
// Enum type is an object (not array, not null) that passes validateEnum
|
|
229
|
+
if (typeof type !== 'object' || type === null || Array.isArray(type)) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
// If the object is a valid record schema, it's NOT an enum.
|
|
233
|
+
// Record schemas have values from {'number','string','boolean','bigint'} or nested objects,
|
|
234
|
+
// which would also pass validateEnum (looks like a string enum). Disambiguate here.
|
|
235
|
+
try {
|
|
236
|
+
if (validateRecordSchema(type)) {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Circular ref or invalid record schema — not a record, continue to enum check
|
|
242
|
+
}
|
|
243
|
+
// Use validateEnum but catch errors (mixed enums throw)
|
|
244
|
+
try {
|
|
245
|
+
return validateEnum(type);
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Type guard: returns `true` when `meta.type` is a class constructor.
|
|
253
|
+
*
|
|
254
|
+
* @param meta - Metadata object to inspect
|
|
255
|
+
*/
|
|
256
|
+
export function isClassMetadata(meta) {
|
|
257
|
+
if (typeof meta !== 'object' || meta === null || !('type' in meta)) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
const { type } = meta;
|
|
261
|
+
return validateClass(type);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Type guard: returns `true` when `meta.type` is a record schema object.
|
|
265
|
+
*
|
|
266
|
+
* @param meta - Metadata object to inspect
|
|
267
|
+
*/
|
|
268
|
+
export function isRecordMetadata(meta) {
|
|
269
|
+
if (typeof meta !== 'object' || meta === null || !('type' in meta)) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
const { type } = meta;
|
|
273
|
+
// Must be a non-null object (not array)
|
|
274
|
+
if (typeof type !== 'object' || type === null || Array.isArray(type)) {
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
// Use validateRecordSchema but catch errors
|
|
278
|
+
try {
|
|
279
|
+
return validateRecordSchema(type);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Type guard: returns `true` when `meta.type` is a tuple schema array.
|
|
287
|
+
*
|
|
288
|
+
* @param meta - Metadata object to inspect
|
|
289
|
+
*/
|
|
290
|
+
export function isTupleMetadata(meta) {
|
|
291
|
+
if (typeof meta !== 'object' || meta === null || !('type' in meta)) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
const { type } = meta;
|
|
295
|
+
// Use validateTupleSchema but catch errors
|
|
296
|
+
try {
|
|
297
|
+
return validateTupleSchema(type);
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Detect the kind of a metadata object by inspecting its `type` field.
|
|
305
|
+
*
|
|
306
|
+
* Resolution priority: `primitive` → `class` → `tuple` → `record` → `enum`.
|
|
307
|
+
* Returns `'unknown'` when the value is not a recognised metadata shape.
|
|
308
|
+
*
|
|
309
|
+
* @param meta - Metadata object to categorise
|
|
310
|
+
* @returns The detected kind string
|
|
311
|
+
*/
|
|
312
|
+
export function detectMetadataKind(meta) {
|
|
313
|
+
if (typeof meta !== 'object' || meta === null || !('type' in meta)) {
|
|
314
|
+
return 'unknown';
|
|
315
|
+
}
|
|
316
|
+
const { type } = meta;
|
|
317
|
+
// Primitive: type is a string like 'number', 'string', 'boolean', 'bigint'
|
|
318
|
+
if (typeof type === 'string') {
|
|
319
|
+
return 'primitive';
|
|
320
|
+
}
|
|
321
|
+
// Class: type is a function (constructor)
|
|
322
|
+
if (typeof type === 'function') {
|
|
323
|
+
return 'class';
|
|
324
|
+
}
|
|
325
|
+
// Tuple: type is an array
|
|
326
|
+
if (Array.isArray(type)) {
|
|
327
|
+
return 'tuple';
|
|
328
|
+
}
|
|
329
|
+
// Object: could be enum or record
|
|
330
|
+
if (typeof type === 'object' && type !== null) {
|
|
331
|
+
// Try record first (stricter: values must be type-name strings or nested objects)
|
|
332
|
+
try {
|
|
333
|
+
if (validateRecordSchema(type)) {
|
|
334
|
+
return 'record';
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// Not a valid record schema
|
|
339
|
+
}
|
|
340
|
+
// Try enum
|
|
341
|
+
try {
|
|
342
|
+
if (validateEnum(type)) {
|
|
343
|
+
return 'enum';
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch {
|
|
347
|
+
// Not a valid enum either
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return 'unknown';
|
|
351
|
+
}
|
|
35
352
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unacy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Type-safe unit and format conversion library",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
7
7
|
"author": "Pradeep Mouli",
|
|
8
8
|
"license": "MIT",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/pradeepmouli/unacy.git"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://github.com/pradeepmouli/unacy#readme",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/pradeepmouli/unacy/issues"
|
|
16
|
+
},
|
|
9
17
|
"main": "./dist/index.js",
|
|
10
18
|
"module": "./dist/index.js",
|
|
11
19
|
"types": "./dist/index.d.ts",
|
|
@@ -20,23 +28,23 @@
|
|
|
20
28
|
"README.md"
|
|
21
29
|
],
|
|
22
30
|
"dependencies": {
|
|
23
|
-
"type-fest": "^5.4.
|
|
31
|
+
"type-fest": "^5.4.4"
|
|
24
32
|
},
|
|
25
33
|
"devDependencies": {
|
|
26
|
-
"@types/node": "^25.
|
|
27
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
28
|
-
"vitest": "^4.0.
|
|
34
|
+
"@types/node": "^25.3.1",
|
|
35
|
+
"@typescript/native-preview": "7.0.0-dev.20260225.1",
|
|
36
|
+
"vitest": "^4.0.18"
|
|
29
37
|
},
|
|
30
38
|
"engines": {
|
|
31
39
|
"node": ">=20.0.0"
|
|
32
40
|
},
|
|
33
41
|
"optionalDependencies": {
|
|
34
|
-
"zod": "^4.3.
|
|
42
|
+
"zod": "^4.3.6"
|
|
35
43
|
},
|
|
36
44
|
"scripts": {
|
|
37
45
|
"build": "tsgo -p tsconfig.json",
|
|
38
|
-
"clean": "rm -rf dist",
|
|
39
|
-
"type-check": "
|
|
46
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
47
|
+
"type-check": "tsgo --noEmit",
|
|
40
48
|
"test": "vitest run",
|
|
41
49
|
"test:watch": "vitest"
|
|
42
50
|
}
|