@c9up/rune 0.1.5 → 0.1.7

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.
@@ -0,0 +1,40 @@
1
+ /**
2
+ * SimpleMessagesProvider — VineJS-compatible message lookup.
3
+ *
4
+ * Resolves an error message for a `(rule, field)` pair using a `'field.rule'`
5
+ * → template map, human-readable field labels, wildcard (`*`) segments for
6
+ * array items, and mustache `{{ field }}` interpolation. Mirrors
7
+ * `@vinejs/vine`'s provider so validators authored against Vine's message
8
+ * conventions behave identically here.
9
+ */
10
+ /** Rule name → message template, e.g. `{ required: 'The {{ field }} is required' }`. */
11
+ export type ValidationMessages = Record<string, string>;
12
+ /** Field path → human label, e.g. `{ 'user.email': 'Email address' }`. */
13
+ export type ValidationFields = Record<string, string>;
14
+ /** Interpolation values handed to a message template. */
15
+ export type MessageArgs = Record<string, unknown>;
16
+ /**
17
+ * Contract any messages provider must satisfy — a single `getMessage` lookup.
18
+ * Keeping it an interface lets consumers swap in their own (e.g. i18n-backed)
19
+ * provider without importing the concrete class.
20
+ */
21
+ export interface MessagesProviderContract {
22
+ getMessage(rawMessage: string, rule: string, field: string, args?: MessageArgs): string;
23
+ }
24
+ export declare class SimpleMessagesProvider implements MessagesProviderContract {
25
+ #private;
26
+ constructor(messages: ValidationMessages, fields?: ValidationFields);
27
+ /**
28
+ * Resolve a message. Priority (VineJS order):
29
+ * 1. field-specific `user.email.required`
30
+ * 2. wildcard path `*.required` / `tags.*.minLength`
31
+ * 3. generic rule `required`
32
+ * 4. raw rule message (fallback)
33
+ */
34
+ getMessage(rawMessage: string, rule: string, field: string, args?: MessageArgs): string;
35
+ toJSON(): {
36
+ messages: ValidationMessages;
37
+ fields: ValidationFields;
38
+ };
39
+ }
40
+ //# sourceMappingURL=MessagesProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagesProvider.d.ts","sourceRoot":"","sources":["../src/MessagesProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,wFAAwF;AACxF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxD,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAOlD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACxC,UAAU,CACT,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GAChB,MAAM,CAAC;CACV;AAaD,qBAAa,sBAAuB,YAAW,wBAAwB;;gBAI1D,QAAQ,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,gBAAgB;IAuBnE;;;;;;OAMG;IACH,UAAU,CACT,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GAChB,MAAM;IAwBT,MAAM,IAAI;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE;CAGpE"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * SimpleMessagesProvider — VineJS-compatible message lookup.
3
+ *
4
+ * Resolves an error message for a `(rule, field)` pair using a `'field.rule'`
5
+ * → template map, human-readable field labels, wildcard (`*`) segments for
6
+ * array items, and mustache `{{ field }}` interpolation. Mirrors
7
+ * `@vinejs/vine`'s provider so validators authored against Vine's message
8
+ * conventions behave identically here.
9
+ */
10
+ /** Narrow to a plain record so dotted-path interpolation can index it. */
11
+ function isRecord(value) {
12
+ return typeof value === "object" && value !== null;
13
+ }
14
+ /**
15
+ * Replace a dotted field path's numeric segments with `*` so array items share
16
+ * a single wildcard message key — `tags.0.name` → `tags.*.name` (VineJS parity).
17
+ */
18
+ function toWildcardPath(field) {
19
+ return field
20
+ .split(".")
21
+ .map((segment) => (/^\d+$/.test(segment) ? "*" : segment))
22
+ .join(".");
23
+ }
24
+ export class SimpleMessagesProvider {
25
+ #messages;
26
+ #fields;
27
+ constructor(messages, fields) {
28
+ this.#messages = messages;
29
+ this.#fields = fields ?? {};
30
+ }
31
+ /** Mustache-style `{{ token }}` interpolation with dotted-path lookup. */
32
+ #interpolate(message, data) {
33
+ if (!message.includes("{{")) {
34
+ return message;
35
+ }
36
+ return message.replace(/{{(.*?)}}/g, (_match, rawKey) => {
37
+ const tokens = rawKey.trim().split(".");
38
+ let output = data;
39
+ for (const token of tokens) {
40
+ if (!isRecord(output)) {
41
+ return "";
42
+ }
43
+ output = Object.hasOwn(output, token) ? output[token] : undefined;
44
+ }
45
+ return output === undefined || output === null ? "" : String(output);
46
+ });
47
+ }
48
+ /**
49
+ * Resolve a message. Priority (VineJS order):
50
+ * 1. field-specific `user.email.required`
51
+ * 2. wildcard path `*.required` / `tags.*.minLength`
52
+ * 3. generic rule `required`
53
+ * 4. raw rule message (fallback)
54
+ */
55
+ getMessage(rawMessage, rule, field, args) {
56
+ const fieldName = this.#fields[field] ?? field;
57
+ const data = { field: fieldName, ...args };
58
+ const fieldMessage = this.#messages[`${field}.${rule}`];
59
+ if (fieldMessage !== undefined) {
60
+ return this.#interpolate(fieldMessage, data);
61
+ }
62
+ const wildcard = toWildcardPath(field);
63
+ const wildcardMessage = wildcard !== field ? this.#messages[`${wildcard}.${rule}`] : undefined;
64
+ if (wildcardMessage !== undefined) {
65
+ return this.#interpolate(wildcardMessage, data);
66
+ }
67
+ const ruleMessage = this.#messages[rule];
68
+ if (ruleMessage !== undefined) {
69
+ return this.#interpolate(ruleMessage, data);
70
+ }
71
+ return this.#interpolate(rawMessage, data);
72
+ }
73
+ toJSON() {
74
+ return { messages: this.#messages, fields: this.#fields };
75
+ }
76
+ }
77
+ //# sourceMappingURL=MessagesProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagesProvider.js","sourceRoot":"","sources":["../src/MessagesProvider.ts"],"names":[],"mappings":"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"}
package/dist/Schema.d.ts CHANGED
@@ -3,13 +3,67 @@
3
3
  *
4
4
  * @implements FR38, FR39, FR40, FR41
5
5
  */
6
+ import type { MessagesProviderContract } from "./MessagesProvider.js";
6
7
  export type ValidationMessageParams = Record<string, string | number | boolean>;
7
8
  export type ValidationTranslator = (key: string, params?: ValidationMessageParams) => string | undefined;
8
9
  export interface ValidationError {
9
10
  field: string;
10
11
  rule: string;
11
12
  message: string;
13
+ /** Array index when the field is an array item (VineJS parity). */
14
+ index?: number;
15
+ /** Rule metadata carried for reporters/i18n (e.g. `{ min: 3 }`). */
16
+ meta?: Record<string, unknown>;
12
17
  }
18
+ /**
19
+ * Field context handed to `.use()` rules — mirrors VineJS's field context. It
20
+ * exposes the value plus the surrounding data so a rule can validate across
21
+ * fields (e.g. `password === passwordConfirmation`), and a `report()` sink to
22
+ * raise errors (VineJS reports instead of returning a boolean).
23
+ */
24
+ export interface FieldContext {
25
+ /** The current field value (post-transform). */
26
+ value: unknown;
27
+ /** The root object being validated. Shared across fields — do NOT mutate. */
28
+ data: Record<string, unknown>;
29
+ /** The immediate parent container of this field (object or array). */
30
+ parent: Record<string, unknown> | unknown[];
31
+ /** Dotted path to the field, e.g. `address.city` or `tags.0`. */
32
+ field: string;
33
+ /** Runtime metadata passed to `validate(data, { meta })`. */
34
+ meta: Record<string, unknown>;
35
+ /** `true` while no error has been reported for this field yet. */
36
+ isValid: boolean;
37
+ /** Report a validation failure for this field. */
38
+ report(message: string, rule: string): void;
39
+ }
40
+ /**
41
+ * A `.use()` rule validator — VineJS shape `(value, options, field)`. Report
42
+ * failures via `field.report(...)`; the return value is ignored.
43
+ */
44
+ export type RuleValidator<Options = undefined> = (value: unknown, options: Options, field: FieldContext) => void;
45
+ /** A compiled `.use()` rule produced by {@link createRule}. */
46
+ export interface CompiledRule {
47
+ readonly __rune: "rule";
48
+ run(value: unknown, field: FieldContext): void;
49
+ }
50
+ /**
51
+ * Turn a validator function into a reusable `.use()` rule — VineJS's
52
+ * `createRule`. Returns a factory: call it with the rule's options to get a
53
+ * `CompiledRule`, then attach it with `chain.use(rule(options))`.
54
+ *
55
+ * const sameAs = createRule<string>((value, other, field) => {
56
+ * if (value !== field.data[other]) {
57
+ * field.report(`Must match ${other}`, 'sameAs')
58
+ * }
59
+ * })
60
+ * schema({
61
+ * password: rules.string().min(8),
62
+ * passwordConfirmation: rules.string().use(sameAs('password')),
63
+ * })
64
+ */
65
+ export declare function createRule(validator: RuleValidator<undefined>): () => CompiledRule;
66
+ export declare function createRule<Options>(validator: RuleValidator<Options>): (options: Options) => CompiledRule;
13
67
  /**
14
68
  * Validation result — discriminated union that narrows `data` to the schema's
15
69
  * `T` when `valid` is `true`, removing the need for callers to cast or guard
@@ -24,26 +78,73 @@ export type ValidationResult<T = Record<string, unknown>> = {
24
78
  errors: ValidationError[];
25
79
  data?: undefined;
26
80
  };
81
+ /** Options for {@link ValidationSchema.validate}. */
82
+ export interface ValidateOptions {
83
+ /** Runtime metadata exposed to `.use()` rules via `field.meta` (VineJS parity). */
84
+ meta?: Record<string, unknown>;
85
+ /**
86
+ * VineJS-style messages provider. When supplied, default rule messages are
87
+ * resolved through it (custom `.message()` overrides still win, and the
88
+ * provider takes precedence over a globally bound translator).
89
+ */
90
+ messagesProvider?: MessagesProviderContract;
91
+ }
27
92
  export interface ValidationSchema<T = Record<string, unknown>> {
28
93
  fields: Record<string, RuleChain>;
29
- validate(data: unknown): ValidationResult<T>;
94
+ /** Result-based validation (superset) — never throws. */
95
+ validate(data: unknown, options?: ValidateOptions): ValidationResult<T>;
96
+ /**
97
+ * Throwing validation (VineJS/Adonis parity). Returns the validated data on
98
+ * success; throws {@link RuneValidationError} (`E_VALIDATION_ERROR`, HTTP 422)
99
+ * with a structured `.messages` array on failure.
100
+ */
101
+ validateOrThrow(data: unknown, options?: ValidateOptions): T;
102
+ }
103
+ /** Context threaded through validation so field rules can reach root/parent/meta. */
104
+ interface RunContext {
105
+ data: Record<string, unknown>;
106
+ parent: Record<string, unknown> | unknown[];
107
+ meta: Record<string, unknown>;
108
+ messagesProvider?: MessagesProviderContract;
30
109
  }
110
+ /** Extract the phantom output type of a chain. */
111
+ type OutputOf<C> = C extends RuleChain<infer O> ? O : never;
112
+ /** Keys whose output includes `undefined` become optional in the inferred shape. */
113
+ type OptionalKeys<S> = {
114
+ [K in keyof S]: undefined extends OutputOf<S[K]> ? K : never;
115
+ }[keyof S];
116
+ /** Flatten an intersection into a single readable object type. */
117
+ type Prettify<T> = {
118
+ [K in keyof T]: T[K];
119
+ } & unknown;
120
+ /**
121
+ * Infer the validated data shape from a schema's field map — the type
122
+ * `result.data` carries once `result.valid === true`. `rules.string()` →
123
+ * `string`, `.optional()` → an optional key, `.nullable()` → `T | null`,
124
+ * `.object(shape)`/`.array(item)` recurse.
125
+ */
126
+ export type Infer<S> = Prettify<{
127
+ [K in Exclude<keyof S, OptionalKeys<S>>]: OutputOf<S[K]>;
128
+ } & {
129
+ [K in OptionalKeys<S>]?: Exclude<OutputOf<S[K]>, undefined>;
130
+ }>;
31
131
  /**
32
132
  * Create a validation schema.
33
133
  *
34
- * Pass `T` explicitly when the caller wants `result.data` typed as a concrete
35
- * shape after `result.valid === true` narrows the union — runtime validation
36
- * is unchanged, the generic only types the success branch.
134
+ * The field map's rule chains are phantom-typed, so `result.data` is inferred
135
+ * automatically `schema({ email: rules.string(), age: rules.number() })`
136
+ * types `data` as `{ email: string; age: number }` with no manual generic.
37
137
  *
38
- * const RegisterValidator = schema<{ email: string; password: string }>({
138
+ * const RegisterValidator = schema({
39
139
  * email: rules.string().email(),
40
- * password: rules.string().min(8),
140
+ * age: rules.number().optional(),
41
141
  * });
142
+ * // Infer<typeof RegisterValidator> not needed — result.data is typed.
42
143
  *
43
- * The default `Record<string, unknown>` matches the historical untyped surface
44
- * so existing call sites that read `result.data` field-by-field with their
45
- * own narrowing continue to compile.
144
+ * An explicit generic is still accepted for back-compat
145
+ * (`schema<MyType>({ ... })`), overriding inference.
46
146
  */
147
+ export declare function schema<S extends Record<string, RuleChain>>(fields: S): ValidationSchema<Infer<S>>;
47
148
  export declare function schema<T = Record<string, unknown>>(fields: Record<string, RuleChain>): ValidationSchema<T>;
48
149
  export declare function setValidationTranslator(translator?: ValidationTranslator): void;
49
150
  export declare function bindRosetta(rosetta: {
@@ -53,47 +154,138 @@ export declare function bindRosetta(rosetta: {
53
154
  export interface RuleDef {
54
155
  name: string;
55
156
  param?: number;
157
+ /** Interpolation args exposed to i18n/messages providers (e.g. `{ min: 3 }`). */
158
+ args?: Record<string, unknown>;
56
159
  validate: (value: unknown) => boolean;
57
160
  message: string;
161
+ /** Set when `.message()` overrode this rule's default text. */
162
+ hasCustomMessage?: boolean;
163
+ }
164
+ /** A conditional-required condition (VineJS `requiredWhen` family). */
165
+ interface RequiredCondition {
166
+ kind: "exists" | "missing" | "when";
167
+ otherField: string;
168
+ operator?: "=" | "!=" | ">" | "<" | ">=" | "<=" | "in" | "notIn";
169
+ value?: unknown;
58
170
  }
59
- /** Rule chain fluent validation builder. */
60
- export declare class RuleChain {
171
+ /** Phantom brand carrying the inferred output type (never assigned at runtime). */
172
+ declare const OUTPUT: unique symbol;
173
+ /** Rule chain — fluent, phantom-typed validation builder. */
174
+ export declare class RuleChain<Output = unknown> {
61
175
  #private;
176
+ /** Phantom output type — drives {@link Infer}; never read at runtime. */
177
+ readonly [OUTPUT]: Output;
62
178
  /** Public read access to rules (for OpenAPI generation, Rust bridge). */
63
179
  get rules(): readonly RuleDef[];
64
180
  get isOptionalField(): boolean;
181
+ /** Public read access to the `.nullable()` flag (keeps such schemas off the native path). */
182
+ get isNullable(): boolean;
65
183
  get transforms(): ReadonlyArray<{
66
184
  name: string;
67
- fn: (value: unknown) => unknown;
185
+ fn: (value: unknown, field: FieldContext) => unknown;
68
186
  }>;
69
- /** Mark field as optional. */
70
- optional(): this;
187
+ /** Public read access to `.use()` rules (used to keep such schemas off the native path). */
188
+ get useRules(): readonly CompiledRule[];
189
+ /** Public read access to `.parse()` pre-transforms (kept off the native path). */
190
+ get preTransforms(): ReadonlyArray<(value: unknown) => unknown>;
191
+ /** Whether this chain carries a `requiredWhen`-family condition. */
192
+ get hasConditionalRequired(): boolean;
193
+ /** Mark field as optional (absent / `undefined` allowed). */
194
+ optional(): RuleChain<Output | undefined>;
195
+ /** Mark field as nullable (`null` allowed, kept in the output). */
196
+ nullable(): RuleChain<Output | null>;
197
+ /** Mark field as both optional and nullable. */
198
+ nullish(): RuleChain<Output | null | undefined>;
199
+ /** Stop at the first failing rule for this field (VineJS bail). */
200
+ bail(enabled?: boolean): this;
71
201
  /** Must be an object matching a nested schema. */
72
- object(shape: Record<string, RuleChain>): this;
202
+ object<Sh extends Record<string, RuleChain>>(shape: Sh): RuleChain<Infer<Sh>>;
73
203
  /** Must be an array. Items validated by the provided chain. */
74
- array(itemChain?: RuleChain): this;
204
+ array<Item extends RuleChain>(itemChain?: Item): RuleChain<OutputOf<Item>[]>;
75
205
  /** Must be a string. */
76
- string(): this;
206
+ string(): RuleChain<string>;
77
207
  /** Must be a number. */
78
- number(): this;
208
+ number(): RuleChain<number>;
79
209
  /** Must be a boolean. */
80
- boolean(): this;
81
- /** Minimum length (string) or minimum value (number). */
210
+ boolean(): RuleChain<boolean>;
211
+ /** Must equal one of `values` (enum). Narrows the output to the union. */
212
+ enum<const V extends readonly (string | number | boolean)[]>(values: V): RuleChain<V[number]>;
213
+ /** Must equal a literal value. */
214
+ literal<V extends string | number | boolean>(value: V): RuleChain<V>;
215
+ /** Minimum length (string) or minimum value (number). Alias of min/minLength. */
82
216
  min(n: number): this;
83
- /** Maximum length (string) or maximum value (number). */
217
+ /** Maximum length (string) or maximum value (number). Alias of max/maxLength. */
84
218
  max(n: number): this;
219
+ /** Minimum length for a string or array (VineJS `minLength`). */
220
+ minLength(n: number): this;
221
+ /** Maximum length for a string or array (VineJS `maxLength`). */
222
+ maxLength(n: number): this;
223
+ /** Exact length for a string or array (VineJS `fixedLength`). */
224
+ fixedLength(n: number): this;
85
225
  /** Must be a valid email. */
86
226
  email(): this;
87
- /** Must be positive (> 0) and finite. */
227
+ /** Must match a regular expression (TS-only never dispatched to Rust). */
228
+ regex(pattern: RegExp): this;
229
+ /** Must be a valid URL (TS-only — uses the WHATWG URL parser). */
230
+ url(): this;
231
+ /** Must be a valid UUID. */
232
+ uuid(): this;
233
+ /** Must contain only ASCII letters. */
234
+ alpha(): this;
235
+ /** Must contain only ASCII letters and digits. */
236
+ alphaNumeric(): this;
237
+ /** String must start with `substring`. */
238
+ startsWith(substring: string): this;
239
+ /** String must end with `substring`. */
240
+ endsWith(substring: string): this;
241
+ /** Value must be one of `values`. */
242
+ in(values: ReadonlyArray<string | number | boolean>): this;
243
+ /** Value must NOT be one of `values`. */
244
+ notIn(values: ReadonlyArray<string | number | boolean>): this;
245
+ /** Number must be positive (> 0) and finite. */
88
246
  positive(): this;
247
+ /** Number must be negative (< 0) and finite. */
248
+ negative(): this;
249
+ /** Number must be >= 0 and finite. */
250
+ nonNegative(): this;
251
+ /** Number must fall within `[min, max]` (inclusive). */
252
+ range(min: number, max: number): this;
253
+ /** Number must have at most `digits` decimal places (TS-only). */
254
+ decimal(digits: number): this;
255
+ /** Must equal a sibling field (VineJS `sameAs`). Cross-field → TS-only. */
256
+ sameAs(otherField: string): this;
257
+ /** Must equal its `<field>_confirmation` sibling (VineJS `confirmed`). */
258
+ confirmed(options?: {
259
+ confirmationField?: string;
260
+ }): this;
261
+ /** Required only when `otherField` is present (non-null) — else optional. */
262
+ requiredIfExists(otherField: string): this;
263
+ /** Required only when `otherField` is absent/null — else optional. */
264
+ requiredIfMissing(otherField: string): this;
265
+ /** Required only when `otherField <op> value` holds — else optional. */
266
+ requiredWhen(otherField: string, operator: RequiredCondition["operator"], value: unknown): this;
89
267
  /** Trim whitespace (transform). */
90
268
  trim(): this;
269
+ /**
270
+ * Post-validation transform changing the output type (VineJS `transform`).
271
+ * `value` is `unknown` — narrow it in the callback (the no-cast rule forbids
272
+ * lying about a dynamically-produced value's static type).
273
+ */
274
+ transform<U>(fn: (value: unknown, field: FieldContext) => U): RuleChain<U>;
275
+ /** Pre-validation transform of the raw input (VineJS `parse`). */
276
+ parse(fn: (value: unknown) => unknown): this;
91
277
  /** Custom validation rule. */
92
278
  custom(name: string, validate: (value: unknown) => boolean, message?: string): this;
279
+ /**
280
+ * Attach a `.use()` rule (from {@link createRule}). Unlike `custom`, the rule
281
+ * receives a {@link FieldContext} with the root `data` and `parent`, so it can
282
+ * validate across fields. Runs after this field's type/value rules.
283
+ */
284
+ use(rule: CompiledRule): this;
93
285
  /** Set custom error message for the last rule. */
94
286
  message(msg: string): this;
95
287
  /** Internal: validate a field value and return errors + transformed value. */
96
- _validateWithTransform(field: string, value: unknown): {
288
+ _validateWithTransform(field: string, rawValue: unknown, ctx?: RunContext): {
97
289
  errors: ValidationError[];
98
290
  transformed: unknown;
99
291
  };
@@ -102,11 +294,18 @@ export declare class RuleChain {
102
294
  /** Internal: apply transforms. */
103
295
  _transform(value: unknown): unknown;
104
296
  }
297
+ /** No-op alias of {@link schema} — VineJS `vine.compile()` API parity. */
298
+ export declare function compile<T extends ValidationSchema>(s: T): T;
105
299
  /** Entry point for building rules. */
106
300
  export declare const rules: {
107
- string: () => RuleChain;
108
- number: () => RuleChain;
109
- boolean: () => RuleChain;
110
- any: () => RuleChain;
301
+ string: () => RuleChain<string>;
302
+ number: () => RuleChain<number>;
303
+ boolean: () => RuleChain<boolean>;
304
+ any: () => RuleChain<unknown>;
305
+ object: <Sh extends Record<string, RuleChain>>(shape: Sh) => RuleChain<Infer<Sh>>;
306
+ array: <Item extends RuleChain>(item?: Item) => RuleChain<OutputOf<Item>[]>;
307
+ enum: <const V extends readonly (string | number | boolean)[]>(values: V) => RuleChain<V[number]>;
308
+ literal: <V extends string | number | boolean>(value: V) => RuleChain<V>;
111
309
  };
310
+ export {};
112
311
  //# sourceMappingURL=Schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}