@ultimat3/schema 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,108 +0,0 @@
1
- // Single responsibility: SchemaNode -> JSON Schema. Load-bearing: OpenAPI request/response
2
- // bodies and MCP tool `inputSchema` are both this function's output, so an agent's view of an
3
- // action and an HTTP client's view can never drift.
4
- import { requiredKeys } from './node';
5
- import { introspect } from './provider';
6
- const DIALECTS = Object.freeze({
7
- '2020-12': 'https://json-schema.org/draft/2020-12/schema',
8
- 'draft-07': 'http://json-schema.org/draft-07/schema#',
9
- });
10
- const FORMAT_MAP = Object.freeze({
11
- uuid: 'uuid',
12
- email: 'email',
13
- uri: 'uri',
14
- 'date-time': 'date-time',
15
- slug: 'slug',
16
- timezone: 'iana-time-zone',
17
- locale: 'bcp47-locale',
18
- cursor: 'ultimate-cursor',
19
- });
20
- function stringNode(node) {
21
- return {
22
- type: 'string',
23
- ...(node.format === undefined ? {} : { format: FORMAT_MAP[node.format] ?? node.format }),
24
- ...(node.minLength === undefined ? {} : { minLength: node.minLength }),
25
- ...(node.maxLength === undefined ? {} : { maxLength: node.maxLength }),
26
- ...(node.pattern === undefined ? {} : { pattern: node.pattern }),
27
- };
28
- }
29
- function convert(node) {
30
- const annotate = (schema) => ({
31
- ...schema,
32
- ...(node.description === undefined ? {} : { description: node.description }),
33
- ...(node.hasDefault === true ? { default: node.default } : {}),
34
- });
35
- switch (node.kind) {
36
- case 'string':
37
- return annotate(stringNode(node));
38
- case 'number':
39
- return annotate({
40
- type: node.integer === true ? 'integer' : 'number',
41
- ...(node.minimum === undefined ? {} : { minimum: node.minimum }),
42
- ...(node.maximum === undefined ? {} : { maximum: node.maximum }),
43
- });
44
- case 'boolean':
45
- return annotate({ type: 'boolean' });
46
- case 'date':
47
- return annotate({ type: 'string', format: 'date-time' });
48
- case 'enum':
49
- return annotate({ type: 'string', enum: node.values ?? [] });
50
- case 'literal':
51
- return annotate({ const: node.literal ?? null });
52
- case 'array':
53
- return annotate({
54
- type: 'array',
55
- items: node.items === undefined ? {} : convert(node.items),
56
- });
57
- case 'union':
58
- return annotate({ anyOf: (node.anyOf ?? []).map(convert) });
59
- case 'record':
60
- return annotate({
61
- type: 'object',
62
- additionalProperties: node.valueNode === undefined ? true : convert(node.valueNode),
63
- });
64
- case 'money':
65
- return annotate({
66
- type: 'object',
67
- properties: {
68
- minor: { type: 'integer', description: 'amount in minor units, never a float' },
69
- currency: { type: 'string', pattern: '^[A-Z]{3}$' },
70
- },
71
- required: ['minor', 'currency'],
72
- additionalProperties: false,
73
- });
74
- case 'object': {
75
- const properties = {};
76
- for (const [key, child] of Object.entries(node.properties ?? {})) {
77
- properties[key] = convert(child);
78
- }
79
- return annotate({
80
- type: 'object',
81
- properties,
82
- required: requiredKeys(node),
83
- additionalProperties: false,
84
- });
85
- }
86
- default:
87
- return annotate({});
88
- }
89
- }
90
- /** Convert any schema the active provider can introspect. */
91
- export function toJsonSchema(schema, options) {
92
- const converted = convert(introspect(schema));
93
- const dialect = options?.dialect ?? '2020-12';
94
- return {
95
- ...(options?.includeDialect === false ? {} : { $schema: DIALECTS[dialect] }),
96
- ...(options?.title === undefined ? {} : { title: options.title }),
97
- ...converted,
98
- };
99
- }
100
- /** The exact shape an MCP `tools/list` entry needs: draft-07, no `$schema`. */
101
- export function toMcpInputSchema(schema) {
102
- return toJsonSchema(schema, { dialect: 'draft-07', includeDialect: false });
103
- }
104
- /** Convert an already-introspected node — used by generators that walk the IR themselves. */
105
- export function nodeToJsonSchema(node) {
106
- return convert(node);
107
- }
108
- //# sourceMappingURL=json-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.js","sourceRoot":"","sources":["json-schema.ts"],"names":[],"mappings":"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"}
package/src/node.d.ts DELETED
@@ -1,32 +0,0 @@
1
- export type SchemaKind = 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array' | 'enum' | 'literal' | 'union' | 'record' | 'money' | 'unknown';
2
- /** JSON Schema `format`, plus the framework's own semantic formats. */
3
- export type SchemaFormat = 'uuid' | 'email' | 'uri' | 'date-time' | 'slug' | 'timezone' | 'locale' | 'cursor';
4
- export interface SchemaNode {
5
- readonly kind: SchemaKind;
6
- readonly optional?: boolean | undefined;
7
- /** Separate from `optional`: JSON Schema and the DB both distinguish null from absent. */
8
- readonly nullable?: boolean | undefined;
9
- readonly hasDefault?: boolean | undefined;
10
- readonly default?: unknown;
11
- readonly description?: string | undefined;
12
- readonly format?: SchemaFormat | undefined;
13
- readonly minLength?: number | undefined;
14
- readonly maxLength?: number | undefined;
15
- /** Source string of the RegExp, so the node stays JSON-serialisable. */
16
- readonly pattern?: string | undefined;
17
- readonly minimum?: number | undefined;
18
- readonly maximum?: number | undefined;
19
- readonly integer?: boolean | undefined;
20
- readonly properties?: Readonly<Record<string, SchemaNode>> | undefined;
21
- readonly items?: SchemaNode | undefined;
22
- readonly values?: readonly (string | number)[] | undefined;
23
- readonly literal?: string | number | boolean | null | undefined;
24
- readonly anyOf?: readonly SchemaNode[] | undefined;
25
- readonly valueNode?: SchemaNode | undefined;
26
- }
27
- export declare function isSchemaNode(value: unknown): value is SchemaNode;
28
- /** Duck-typed: any object carrying a `node` is introspectable, whatever built it. */
29
- export declare function nodeOf(value: unknown): SchemaNode | undefined;
30
- /** Keys an object node requires — everything not optional and without a default. */
31
- export declare function requiredKeys(node: SchemaNode): readonly string[];
32
- //# sourceMappingURL=node.d.ts.map
package/src/node.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["node.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,CAAC;AAEd,uEAAuE;AACvE,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,OAAO,GACP,KAAK,GACL,WAAW,GACX,MAAM,GACN,UAAU,GACV,QAAQ,GACR,QAAQ,CAAC;AAEb,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC7C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAMhE;AAED,qFAAqF;AACrF,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAI7D;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,CAKhE"}
package/src/node.js DELETED
@@ -1,24 +0,0 @@
1
- // Single responsibility: the introspectable schema IR. Flat on purpose — OpenAPI generation,
2
- // MCP tool schemas, HTTP query coercion and the admin form generator all read this one shape,
3
- // so it must stay trivially walkable.
4
- export function isSchemaNode(value) {
5
- return (typeof value === 'object' &&
6
- value !== null &&
7
- typeof value.kind === 'string');
8
- }
9
- /** Duck-typed: any object carrying a `node` is introspectable, whatever built it. */
10
- export function nodeOf(value) {
11
- if (typeof value !== 'object' || value === null || !('node' in value))
12
- return undefined;
13
- const node = value.node;
14
- return isSchemaNode(node) ? node : undefined;
15
- }
16
- /** Keys an object node requires — everything not optional and without a default. */
17
- export function requiredKeys(node) {
18
- if (node.properties === undefined)
19
- return [];
20
- return Object.entries(node.properties)
21
- .filter(([, child]) => child.optional !== true && child.hasDefault !== true)
22
- .map(([key]) => key);
23
- }
24
- //# sourceMappingURL=node.js.map
package/src/node.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["node.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,8FAA8F;AAC9F,sCAAsC;AAmDtC,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CACvD,CAAC;AACJ,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACxF,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAI,CAAC;IAC/C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;SAC3E,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
package/src/provider.d.ts DELETED
@@ -1,32 +0,0 @@
1
- import { type SchemaNode } from './node';
2
- import { type TNamespace } from './validators';
3
- export interface SchemaProvider {
4
- /** Matches `~standard.vendor`, e.g. `ultimate`, `arktype`, `zod`. */
5
- readonly vendor: string;
6
- readonly t: TNamespace;
7
- /**
8
- * Return the IR for one of this provider's schemas. Required for OpenAPI and MCP tool
9
- * schemas; omit it only if the provider also supplies `toJsonSchema`.
10
- */
11
- introspect?(schema: unknown): SchemaNode | undefined;
12
- }
13
- export declare const builtinProvider: SchemaProvider;
14
- /**
15
- * Swap the library behind `t`.
16
- *
17
- * ```ts
18
- * import { z } from 'zod';
19
- * configureSchemaProvider({ vendor: 'zod', t: zodNamespace, introspect: zodToNode });
20
- * ```
21
- */
22
- export declare function configureSchemaProvider(provider: SchemaProvider): void;
23
- export declare function schemaProvider(): SchemaProvider;
24
- export declare function resetSchemaProvider(): void;
25
- /**
26
- * The IR for any schema, whoever built it. Throws `X_SCHEMA_UNSUPPORTED` rather than silently
27
- * emitting an empty OpenAPI body.
28
- */
29
- export declare function introspect(schema: unknown): SchemaNode;
30
- /** Best-effort variant for callers that can degrade (HTTP query coercion). */
31
- export declare function tryIntrospect(schema: unknown): SchemaNode | undefined;
32
- //# sourceMappingURL=provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,eAAO,MAAM,eAAe,EAAE,cAI5B,CAAC;AAIH;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAEtE;AAED,wBAAgB,cAAc,IAAI,cAAc,CAE/C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAUtD;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAErE"}
package/src/provider.js DELETED
@@ -1,49 +0,0 @@
1
- // Single responsibility: the swap point. One provider is active per process; everything that
2
- // consumes schemas (OpenAPI, MCP, coercion, the admin form generator) goes through `introspect`
3
- // so a third-party library can be plugged in without touching the rest of the framework.
4
- import { SchemaUnsupportedError } from './errors';
5
- import { nodeOf } from './node';
6
- import { builtinT } from './validators';
7
- export const builtinProvider = Object.freeze({
8
- vendor: 'ultimate',
9
- t: builtinT,
10
- introspect: nodeOf,
11
- });
12
- let active = builtinProvider;
13
- /**
14
- * Swap the library behind `t`.
15
- *
16
- * ```ts
17
- * import { z } from 'zod';
18
- * configureSchemaProvider({ vendor: 'zod', t: zodNamespace, introspect: zodToNode });
19
- * ```
20
- */
21
- export function configureSchemaProvider(provider) {
22
- active = provider;
23
- }
24
- export function schemaProvider() {
25
- return active;
26
- }
27
- export function resetSchemaProvider() {
28
- active = builtinProvider;
29
- }
30
- /**
31
- * The IR for any schema, whoever built it. Throws `X_SCHEMA_UNSUPPORTED` rather than silently
32
- * emitting an empty OpenAPI body.
33
- */
34
- export function introspect(schema) {
35
- const node = active.introspect?.(schema) ?? nodeOf(schema);
36
- if (node === undefined) {
37
- throw new SchemaUnsupportedError({
38
- cause: `provider "${active.vendor}" cannot describe this schema as a SchemaNode`,
39
- fix: 'add introspect() to the object passed to configureSchemaProvider()',
40
- meta: { vendor: active.vendor },
41
- });
42
- }
43
- return node;
44
- }
45
- /** Best-effort variant for callers that can degrade (HTTP query coercion). */
46
- export function tryIntrospect(schema) {
47
- return active.introspect?.(schema) ?? nodeOf(schema);
48
- }
49
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["provider.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,gGAAgG;AAChG,yFAAyF;AAEzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,MAAM,EAAmB,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAmB,MAAM,cAAc,CAAC;AAazD,MAAM,CAAC,MAAM,eAAe,GAAmB,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,EAAE,UAAU;IAClB,CAAC,EAAE,QAAQ;IACX,UAAU,EAAE,MAAM;CACnB,CAAC,CAAC;AAEH,IAAI,MAAM,GAAmB,eAAe,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAwB;IAC9D,MAAM,GAAG,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,eAAe,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,sBAAsB,CAAC;YAC/B,KAAK,EAAE,aAAa,MAAM,CAAC,MAAM,+CAA+C;YAChF,GAAG,EAAE,oEAAoE;YACzE,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC"}
package/src/standard.d.ts DELETED
@@ -1,44 +0,0 @@
1
- import { type ValidationIssue } from './errors';
2
- export interface StandardSchemaV1<Input = unknown, Output = Input> {
3
- readonly '~standard': StandardSchemaProps<Input, Output>;
4
- }
5
- export interface StandardSchemaProps<Input, Output> {
6
- readonly version: 1;
7
- /** Library name, e.g. `ultimate`, `arktype`, `zod`. */
8
- readonly vendor: string;
9
- readonly validate: (value: unknown) => StandardResult<Output> | Promise<StandardResult<Output>>;
10
- readonly types?: StandardTypes<Input, Output> | undefined;
11
- }
12
- export interface StandardTypes<Input, Output> {
13
- readonly input: Input;
14
- readonly output: Output;
15
- }
16
- export interface StandardSuccessResult<Output> {
17
- readonly value: Output;
18
- readonly issues?: undefined;
19
- }
20
- export interface StandardFailureResult {
21
- readonly issues: readonly StandardIssue[];
22
- }
23
- export type StandardResult<Output> = StandardSuccessResult<Output> | StandardFailureResult;
24
- export interface StandardPathSegment {
25
- readonly key: PropertyKey;
26
- }
27
- export interface StandardIssue {
28
- readonly message: string;
29
- readonly path?: readonly (PropertyKey | StandardPathSegment)[] | undefined;
30
- }
31
- export type InferInput<S extends StandardSchemaV1> = NonNullable<S['~standard']['types']>['input'];
32
- export type InferOutput<S extends StandardSchemaV1> = NonNullable<S['~standard']['types']>['output'];
33
- /** `['items', 0, 'price']` -> `items[0].price` */
34
- export declare function formatPath(path: readonly (PropertyKey | StandardPathSegment)[] | undefined): string;
35
- /** Normalise any conforming library's issues into Ultimate's path-annotated shape. */
36
- export declare function toValidationIssues(issues: readonly StandardIssue[]): readonly ValidationIssue[];
37
- /** Validate against ANY conforming schema. Never throws on invalid input. */
38
- export declare function validate<S extends StandardSchemaV1>(schema: S, value: unknown): StandardResult<InferOutput<S>>;
39
- export declare function validateAsync<S extends StandardSchemaV1>(schema: S, value: unknown): Promise<StandardResult<InferOutput<S>>>;
40
- /** Validate or throw `X_VALIDATION_FAILED` with a path-annotated issue list. */
41
- export declare function parse<S extends StandardSchemaV1>(schema: S, value: unknown, root?: string): InferOutput<S>;
42
- export declare function parseAsync<S extends StandardSchemaV1>(schema: S, value: unknown, root?: string): Promise<InferOutput<S>>;
43
- export declare function isStandardSchema(value: unknown): value is StandardSchemaV1;
44
- //# sourceMappingURL=standard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["standard.ts"],"names":[],"mappings":"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"}
package/src/standard.js DELETED
@@ -1,71 +0,0 @@
1
- // Single responsibility: the Standard Schema v1 interface plus library-agnostic helpers.
2
- // This is the swap point: every Ultimate primitive accepts any conforming schema, so ArkType,
3
- // Zod and Valibot are all first-class without a line of adapter code.
4
- import { SchemaUnsupportedError, ValidationFailedError } from './errors';
5
- /** `['items', 0, 'price']` -> `items[0].price` */
6
- export function formatPath(path) {
7
- if (path === undefined || path.length === 0)
8
- return '';
9
- let out = '';
10
- for (const segment of path) {
11
- const key = typeof segment === 'object' ? segment.key : segment;
12
- if (typeof key === 'number') {
13
- out += `[${key}]`;
14
- }
15
- else {
16
- out += out === '' ? String(key) : `.${String(key)}`;
17
- }
18
- }
19
- return out;
20
- }
21
- /** Normalise any conforming library's issues into Ultimate's path-annotated shape. */
22
- export function toValidationIssues(issues) {
23
- return issues.map((issue) => ({
24
- path: formatPath(issue.path),
25
- expected: issue.message,
26
- received: '',
27
- message: issue.message,
28
- }));
29
- }
30
- function assertSync(result, vendor) {
31
- if (result instanceof Promise) {
32
- throw new SchemaUnsupportedError({
33
- cause: `${vendor} validated asynchronously in a synchronous call site`,
34
- fix: 'call validateAsync()/parseAsync() instead of validate()/parse()',
35
- meta: { vendor },
36
- });
37
- }
38
- return result;
39
- }
40
- /** Validate against ANY conforming schema. Never throws on invalid input. */
41
- export function validate(schema, value) {
42
- const props = schema['~standard'];
43
- return assertSync(props.validate(value), props.vendor);
44
- }
45
- export async function validateAsync(schema, value) {
46
- const result = await schema['~standard'].validate(value);
47
- return result;
48
- }
49
- /** Validate or throw `X_VALIDATION_FAILED` with a path-annotated issue list. */
50
- export function parse(schema, value, root = 'value') {
51
- const result = validate(schema, value);
52
- if (result.issues === undefined)
53
- return result.value;
54
- throw new ValidationFailedError(toValidationIssues(result.issues), root);
55
- }
56
- export async function parseAsync(schema, value, root = 'value') {
57
- const result = await validateAsync(schema, value);
58
- if (result.issues === undefined)
59
- return result.value;
60
- throw new ValidationFailedError(toValidationIssues(result.issues), root);
61
- }
62
- export function isStandardSchema(value) {
63
- if (typeof value !== 'object' || value === null || !('~standard' in value))
64
- return false;
65
- const props = value['~standard'];
66
- return (typeof props === 'object' &&
67
- props !== null &&
68
- props.version === 1 &&
69
- typeof props.validate === 'function');
70
- }
71
- //# sourceMappingURL=standard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"standard.js","sourceRoot":"","sources":["standard.ts"],"names":[],"mappings":"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"}
package/src/t.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { InferOutput, StandardSchemaV1 } from './standard';
2
- import type { TNamespace } from './validators';
3
- export declare const t: TNamespace;
4
- /** `type PublishInput = Infer<typeof publishInput>` */
5
- export type Infer<S extends StandardSchemaV1> = InferOutput<S>;
6
- //# sourceMappingURL=t.d.ts.map
package/src/t.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"t.d.ts","sourceRoot":"","sources":["t.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAc,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAKV,UAAU,EACX,MAAM,cAAc,CAAC;AAMtB,eAAO,MAAM,CAAC,EAAE,UA8Ef,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,gBAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC"}
package/src/t.js DELETED
@@ -1,79 +0,0 @@
1
- // Single responsibility: the blessed `t` namespace. One import, one way to declare a schema.
2
- // Every member delegates to the active provider, so `configureSchemaProvider()` takes effect
3
- // even for modules that captured `t` at import time.
4
- import { schemaProvider } from './provider';
5
- function provider() {
6
- return schemaProvider().t;
7
- }
8
- export const t = {
9
- get string() {
10
- return provider().string;
11
- },
12
- get number() {
13
- return provider().number;
14
- },
15
- get boolean() {
16
- return provider().boolean;
17
- },
18
- get uuid() {
19
- return provider().uuid;
20
- },
21
- get email() {
22
- return provider().email;
23
- },
24
- get url() {
25
- return provider().url;
26
- },
27
- get date() {
28
- return provider().date;
29
- },
30
- get money() {
31
- return provider().money;
32
- },
33
- get timezone() {
34
- return provider().timezone;
35
- },
36
- get locale() {
37
- return provider().locale;
38
- },
39
- get slug() {
40
- return provider().slug;
41
- },
42
- get cursor() {
43
- return provider().cursor;
44
- },
45
- object(shape) {
46
- return provider().object(shape);
47
- },
48
- array(items) {
49
- return provider().array(items);
50
- },
51
- enum(values) {
52
- return provider().enum(values);
53
- },
54
- /**
55
- * Variadic form of `enum`, and the blessed spelling: it spreads a `const` tuple of codes
56
- * straight from the domain package (`t.enumerated(...PLAN_CODES)`) and avoids the reserved
57
- * word at the call site.
58
- */
59
- enumerated(...values) {
60
- return provider().enum(values);
61
- },
62
- literal(value) {
63
- return provider().literal(value);
64
- },
65
- union(...members) {
66
- return provider().union(...members);
67
- },
68
- record(values) {
69
- return provider().record(values);
70
- },
71
- /** `t.nullable(t.url)` — the column may hold null, which is not the same as being absent. */
72
- nullable(schema) {
73
- return schema.nullable();
74
- },
75
- optional(schema) {
76
- return provider().optional(schema);
77
- },
78
- };
79
- //# sourceMappingURL=t.js.map
package/src/t.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"t.js","sourceRoot":"","sources":["t.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,6FAA6F;AAC7F,qDAAqD;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAU5C,SAAS,QAAQ;IACf,OAAO,cAAc,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,GAAe;IAC3B,IAAI,MAAM;QACR,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,IAAI,MAAM;QACR,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO;QACT,OAAO,QAAQ,EAAE,CAAC,OAAO,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI;QACN,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG;QACL,OAAO,QAAQ,EAAE,CAAC,GAAG,CAAC;IACxB,CAAC;IACD,IAAI,IAAI;QACN,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM;QACR,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,IAAI,IAAI;QACN,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC;IACzB,CAAC;IACD,IAAI,MAAM;QACR,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,MAAM,CAAkB,KAAQ;QAC9B,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IACD,KAAK,CAAsB,KAAQ;QACjC,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,CAAiD,MAAS;QAC5D,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD;;;;OAIG;IACH,UAAU,CACR,GAAG,MAAS;QAEZ,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAA4C,KAAQ;QACzD,OAAO,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,CACH,GAAG,OAAU;QAEb,OAAO,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,CACJ,MAAS;QAET,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IACD,6FAA6F;IAC7F,QAAQ,CAAsB,MAAS;QACrC,OAAO,MAAM,CAAC,QAAQ,EAAyD,CAAC;IAClF,CAAC;IACD,QAAQ,CACN,MAAS;QAET,OAAO,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACF,CAAC"}
@@ -1,63 +0,0 @@
1
- import { type AnySchema, type Schema, type Shape, type ShapeInput, type ShapeOutput } from './builder';
2
- import type { InferInput, InferOutput } from './standard';
3
- /** Structurally identical to `Money` in `@ultimat3/money`. Never a float. */
4
- export interface MoneyValue {
5
- readonly minor: number;
6
- readonly currency: string;
7
- }
8
- export interface StringSchema extends Schema<string, string> {
9
- min(length: number): StringSchema;
10
- max(length: number): StringSchema;
11
- pattern(regex: RegExp): StringSchema;
12
- }
13
- export interface NumberSchema extends Schema<number, number> {
14
- min(value: number): NumberSchema;
15
- max(value: number): NumberSchema;
16
- int(): NumberSchema;
17
- }
18
- export interface ObjectSchema<S extends Shape> extends Schema<ShapeInput<S>, ShapeOutput<S>> {
19
- readonly shape: S;
20
- extend<E extends Shape>(extra: E): ObjectSchema<Simplified<S & E>>;
21
- pick<K extends keyof S & string>(...keys: readonly K[]): ObjectSchema<Pick<S, K>>;
22
- omit<K extends keyof S & string>(...keys: readonly K[]): ObjectSchema<Omit<S, K>>;
23
- }
24
- type Simplified<S> = {
25
- [K in keyof S]: S[K];
26
- } & {};
27
- export declare function objectSchema<S extends Shape>(shape: S): ObjectSchema<S>;
28
- export declare function arraySchema<S extends AnySchema>(items: S): Schema<readonly InferInput<S>[], InferOutput<S>[]>;
29
- export declare function enumSchema<const V extends readonly [string, ...string[]]>(values: V): Schema<V[number], V[number]>;
30
- export declare function literalSchema<const V extends string | number | boolean>(value: V): Schema<V, V>;
31
- export declare function unionSchema<S extends readonly [AnySchema, ...AnySchema[]]>(...members: S): Schema<InferInput<S[number]>, InferOutput<S[number]>>;
32
- export declare function recordSchema<S extends AnySchema>(values: S): Schema<Readonly<Record<string, InferInput<S>>>, Record<string, InferOutput<S>>>;
33
- export declare function nullableSchema<S extends AnySchema>(schema: S): Schema<InferInput<S> | null, InferOutput<S> | null>;
34
- export declare function optionalSchema<S extends AnySchema>(schema: S): Schema<InferInput<S> | undefined, InferOutput<S> | undefined>;
35
- /** The shape a schema provider must implement to back `t`. */
36
- export interface TNamespace {
37
- readonly string: StringSchema;
38
- readonly number: NumberSchema;
39
- readonly boolean: Schema<boolean, boolean>;
40
- readonly uuid: StringSchema;
41
- readonly email: StringSchema;
42
- readonly url: StringSchema;
43
- readonly date: Schema<Date | string | number, Date>;
44
- readonly money: Schema<MoneyValue, MoneyValue>;
45
- readonly timezone: StringSchema;
46
- readonly locale: StringSchema;
47
- readonly slug: StringSchema;
48
- readonly cursor: StringSchema;
49
- object<S extends Shape>(shape: S): ObjectSchema<S>;
50
- array<S extends AnySchema>(items: S): Schema<readonly InferInput<S>[], InferOutput<S>[]>;
51
- enum<const V extends readonly [string, ...string[]]>(values: V): Schema<V[number], V[number]>;
52
- /** Variadic `enum`; the blessed spelling at call sites. */
53
- enumerated<const V extends readonly [string, ...string[]]>(...values: V): Schema<V[number], V[number]>;
54
- literal<const V extends string | number | boolean>(value: V): Schema<V, V>;
55
- union<S extends readonly [AnySchema, ...AnySchema[]]>(...members: S): Schema<InferInput<S[number]>, InferOutput<S[number]>>;
56
- record<S extends AnySchema>(values: S): Schema<Readonly<Record<string, InferInput<S>>>, Record<string, InferOutput<S>>>;
57
- /** Null is a value the column holds; `optional` is the caller omitting the field. */
58
- nullable<S extends AnySchema>(schema: S): Schema<InferInput<S> | null, InferOutput<S> | null>;
59
- optional<S extends AnySchema>(schema: S): Schema<InferInput<S> | undefined, InferOutput<S> | undefined>;
60
- }
61
- export declare const builtinT: TNamespace;
62
- export {};
63
- //# sourceMappingURL=validators.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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"}