@ultimat3/schema 1.0.0 → 1.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ultimat3/schema",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Ultimate's validation seam: Standard Schema interface, the t namespace, JSON Schema output",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/builder.d.ts DELETED
@@ -1,62 +0,0 @@
1
- import type { SchemaNode } from './node';
2
- import { type InferInput, type InferOutput, type StandardIssue, type StandardResult, type StandardSchemaV1 } from './standard';
3
- export declare const VENDOR = "ultimate";
4
- export type Path = readonly PropertyKey[];
5
- export interface CheckOk<Out> {
6
- readonly ok: true;
7
- readonly value: Out;
8
- }
9
- export interface CheckErr {
10
- readonly ok: false;
11
- readonly issues: readonly StandardIssue[];
12
- }
13
- export type CheckResult<Out> = CheckOk<Out> | CheckErr;
14
- export type Check<Out> = (value: unknown, path: Path) => CheckResult<Out>;
15
- export declare function pass<Out>(value: Out): CheckOk<Out>;
16
- export declare function fail(path: Path, message: string): CheckErr;
17
- export declare function failWith(issues: readonly StandardIssue[]): CheckErr;
18
- /** `expected uuid, received "abc"` — the message an agent can act on without guessing. */
19
- export declare function expected(what: string, value: unknown): string;
20
- export declare function describeValue(value: unknown): string;
21
- export interface Schema<In = unknown, Out = In> extends StandardSchemaV1<In, Out> {
22
- /** The introspectable IR. JSON Schema, OpenAPI, MCP and coercion all read this. */
23
- readonly node: SchemaNode;
24
- parse(value: unknown, root?: string): Out;
25
- safeParse(value: unknown): StandardResult<Out>;
26
- optional(): Schema<In | undefined, Out | undefined>;
27
- /**
28
- * Distinct from `optional()`: absent and null are different facts. A nullable column holds a
29
- * row that says "no cover image"; an optional field says the caller did not mention it. SQL
30
- * has always drawn that line, so the schema has to as well or a round-trip loses it.
31
- */
32
- nullable(): Schema<In | null, Out | null>;
33
- default(value: Out): Schema<In | undefined, Out>;
34
- describe(description: string): Schema<In, Out>;
35
- }
36
- /** The general constraint for "some schema". Methods are bivariant, so this is a real supertype. */
37
- export type AnySchema = Schema<unknown, unknown>;
38
- export type Shape = Readonly<Record<string, AnySchema>>;
39
- export type Simplify<T> = {
40
- [K in keyof T]: T[K];
41
- } & {};
42
- type OptionalOutputKeys<S extends Shape> = {
43
- [K in keyof S]: undefined extends InferOutput<S[K]> ? K : never;
44
- }[keyof S];
45
- type OptionalInputKeys<S extends Shape> = {
46
- [K in keyof S]: undefined extends InferInput<S[K]> ? K : never;
47
- }[keyof S];
48
- export type ShapeOutput<S extends Shape> = Simplify<{
49
- [K in Exclude<keyof S, OptionalOutputKeys<S>>]: InferOutput<S[K]>;
50
- } & {
51
- [K in OptionalOutputKeys<S>]?: InferOutput<S[K]>;
52
- }>;
53
- export type ShapeInput<S extends Shape> = Simplify<{
54
- [K in Exclude<keyof S, OptionalInputKeys<S>>]: InferInput<S[K]>;
55
- } & {
56
- [K in OptionalInputKeys<S>]?: InferInput<S[K]>;
57
- }>;
58
- export declare function makeSchema<In, Out>(node: SchemaNode, check: Check<Out>): Schema<In, Out>;
59
- /** Read the check back off a builtin schema so composites can reuse it. */
60
- export declare function checkOf<In, Out>(schema: Schema<In, Out>): Check<Out>;
61
- export {};
62
- //# sourceMappingURL=builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["builder.ts"],"names":[],"mappings":"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"}
package/src/builder.js DELETED
@@ -1,93 +0,0 @@
1
- // Single responsibility: the `Schema` type every builtin validator returns, and the factory
2
- // that turns a check function plus an IR node into a Standard-Schema-conforming object.
3
- import { ValidationFailedError } from './errors';
4
- import { formatPath, } from './standard';
5
- export const VENDOR = 'ultimate';
6
- export function pass(value) {
7
- return { ok: true, value };
8
- }
9
- export function fail(path, message) {
10
- return { ok: false, issues: [{ message, path: [...path] }] };
11
- }
12
- export function failWith(issues) {
13
- return { ok: false, issues };
14
- }
15
- /** `expected uuid, received "abc"` — the message an agent can act on without guessing. */
16
- export function expected(what, value) {
17
- return `expected ${what}, received ${describeValue(value)}`;
18
- }
19
- export function describeValue(value) {
20
- if (value === undefined)
21
- return 'undefined';
22
- if (value === null)
23
- return 'null';
24
- if (typeof value === 'string')
25
- return JSON.stringify(value);
26
- if (typeof value === 'number' || typeof value === 'boolean')
27
- return String(value);
28
- if (Array.isArray(value))
29
- return `array(${value.length})`;
30
- if (value instanceof Date)
31
- return `Date(${value.toISOString()})`;
32
- return typeof value;
33
- }
34
- function toIssues(result) {
35
- return result.issues.map((issue) => ({
36
- path: formatPath(issue.path),
37
- expected: issue.message,
38
- received: '',
39
- message: issue.message,
40
- }));
41
- }
42
- export function makeSchema(node, check) {
43
- const schema = {
44
- '~standard': {
45
- version: 1,
46
- vendor: VENDOR,
47
- validate: (value) => {
48
- const result = check(value, []);
49
- return result.ok ? { value: result.value } : { issues: result.issues };
50
- },
51
- },
52
- node,
53
- parse(value, root = 'value') {
54
- const result = check(value, []);
55
- if (result.ok)
56
- return result.value;
57
- throw new ValidationFailedError(toIssues(result), root);
58
- },
59
- safeParse(value) {
60
- const result = check(value, []);
61
- return result.ok ? { value: result.value } : { issues: result.issues };
62
- },
63
- optional() {
64
- return makeSchema({ ...node, optional: true }, (value, path) => (value === undefined ? pass(undefined) : check(value, path)));
65
- },
66
- nullable() {
67
- return makeSchema({ ...node, nullable: true }, (value, path) => value === null ? pass(null) : check(value, path));
68
- },
69
- default(fallback) {
70
- return makeSchema({ ...node, hasDefault: true, default: fallback }, (value, path) => (value === undefined ? pass(fallback) : check(value, path)));
71
- },
72
- describe(description) {
73
- return makeSchema({ ...node, description }, check);
74
- },
75
- };
76
- return schema;
77
- }
78
- /** Read the check back off a builtin schema so composites can reuse it. */
79
- export function checkOf(schema) {
80
- return (value, path) => {
81
- const result = schema['~standard'].validate(value);
82
- if (result instanceof Promise) {
83
- return fail(path, 'expected a synchronous schema, received an async one');
84
- }
85
- if (result.issues === undefined)
86
- return pass(result.value);
87
- return failWith(result.issues.map((issue) => ({
88
- message: issue.message,
89
- path: [...path, ...(issue.path ?? [])],
90
- })));
91
- };
92
- }
93
- //# sourceMappingURL=builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["builder.ts"],"names":[],"mappings":"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"}
package/src/coerce.d.ts DELETED
@@ -1,15 +0,0 @@
1
- import type { SchemaNode } from './node';
2
- export type QuerySource = URLSearchParams | Readonly<Record<string, string | readonly string[] | undefined>>;
3
- /**
4
- * Coerce one raw value toward `node`. Never throws and never invents data: anything it cannot
5
- * confidently convert is returned untouched so validation produces the real error message.
6
- */
7
- export declare function coerceNode(node: SchemaNode, raw: unknown): unknown;
8
- /**
9
- * Coerce a query string / route params object against a schema, ready to `parse()`.
10
- * Unknown keys are passed through — the schema decides what to keep.
11
- */
12
- export declare function coerceQuery(schema: unknown, source: QuerySource): Record<string, unknown>;
13
- /** Coerce an arbitrary record (route params, form data) against a schema. */
14
- export declare function coerceInput(schema: unknown, raw: Readonly<Record<string, unknown>>): Record<string, unknown>;
15
- //# sourceMappingURL=coerce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coerce.d.ts","sourceRoot":"","sources":["coerce.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAMzC,MAAM,MAAM,WAAW,GACnB,eAAe,GACf,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAErE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CA2DlE;AAcD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzF;AAMD,6EAA6E;AAC7E,wBAAgB,WAAW,CACzB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOzB"}
package/src/coerce.js DELETED
@@ -1,123 +0,0 @@
1
- // Single responsibility: HTTP-boundary coercion. Kept out of validation on purpose — only the
2
- // HTTP layer has strings that "mean" numbers. Actions, jobs and MCP calls receive real JSON and
3
- // must never get this leniency.
4
- import { tryIntrospect } from './provider';
5
- const TRUE_VALUES = new Set(['1', 'true', 'yes', 'on']);
6
- const FALSE_VALUES = new Set(['0', 'false', 'no', 'off', '']);
7
- /**
8
- * Coerce one raw value toward `node`. Never throws and never invents data: anything it cannot
9
- * confidently convert is returned untouched so validation produces the real error message.
10
- */
11
- export function coerceNode(node, raw) {
12
- if (raw === undefined || raw === null)
13
- return raw;
14
- switch (node.kind) {
15
- case 'number': {
16
- if (typeof raw !== 'string')
17
- return raw;
18
- const value = Number(raw);
19
- return raw.trim() !== '' && Number.isFinite(value) ? value : raw;
20
- }
21
- case 'boolean': {
22
- if (typeof raw !== 'string')
23
- return raw;
24
- const lowered = raw.toLowerCase();
25
- if (TRUE_VALUES.has(lowered))
26
- return true;
27
- if (FALSE_VALUES.has(lowered))
28
- return false;
29
- return raw;
30
- }
31
- case 'date': {
32
- if (typeof raw !== 'string')
33
- return raw;
34
- const parsed = new Date(raw);
35
- return Number.isNaN(parsed.getTime()) ? raw : parsed;
36
- }
37
- case 'array': {
38
- const items = Array.isArray(raw) ? raw : [raw];
39
- const itemNode = node.items;
40
- return itemNode === undefined ? items : items.map((item) => coerceNode(itemNode, item));
41
- }
42
- case 'record': {
43
- if (typeof raw !== 'object' || node.valueNode === undefined)
44
- return raw;
45
- const out = {};
46
- for (const [key, value] of Object.entries(raw)) {
47
- out[key] = coerceNode(node.valueNode, value);
48
- }
49
- return out;
50
- }
51
- case 'object': {
52
- if (typeof raw !== 'object' || node.properties === undefined)
53
- return raw;
54
- const source = raw;
55
- const out = { ...source };
56
- for (const [key, child] of Object.entries(node.properties)) {
57
- if (key in source)
58
- out[key] = coerceNode(child, source[key]);
59
- }
60
- return out;
61
- }
62
- case 'money': {
63
- if (typeof raw !== 'object')
64
- return raw;
65
- const source = raw;
66
- const minor = typeof source['minor'] === 'string' ? Number(source['minor']) : source['minor'];
67
- return Number.isFinite(minor) ? { ...source, minor } : raw;
68
- }
69
- case 'union': {
70
- // Only unambiguous single-kind unions (e.g. `number | undefined`) are safe to coerce.
71
- const kinds = new Set((node.anyOf ?? []).map((member) => member.kind));
72
- if (kinds.size !== 1)
73
- return raw;
74
- const [member] = node.anyOf ?? [];
75
- return member === undefined ? raw : coerceNode(member, raw);
76
- }
77
- default:
78
- return raw;
79
- }
80
- }
81
- function toRecord(source) {
82
- if (!(source instanceof URLSearchParams)) {
83
- return { ...source };
84
- }
85
- const out = {};
86
- for (const key of new Set(source.keys())) {
87
- const all = source.getAll(key);
88
- out[key] = all.length > 1 ? all : all[0];
89
- }
90
- return out;
91
- }
92
- /**
93
- * Coerce a query string / route params object against a schema, ready to `parse()`.
94
- * Unknown keys are passed through — the schema decides what to keep.
95
- */
96
- export function coerceQuery(schema, source) {
97
- const record = toRecord(source);
98
- const node = tryIntrospect(schema);
99
- if (node?.properties === undefined)
100
- return record;
101
- const out = { ...record };
102
- for (const [key, child] of Object.entries(node.properties)) {
103
- if (!(key in record))
104
- continue;
105
- const raw = record[key];
106
- out[key] = coerceNode(child, child.kind === 'array' ? (raw ?? []) : normaliseSingle(raw));
107
- }
108
- return out;
109
- }
110
- function normaliseSingle(raw) {
111
- return Array.isArray(raw) ? raw[raw.length - 1] : raw;
112
- }
113
- /** Coerce an arbitrary record (route params, form data) against a schema. */
114
- export function coerceInput(schema, raw) {
115
- const node = tryIntrospect(schema);
116
- if (node === undefined)
117
- return { ...raw };
118
- const coerced = coerceNode(node, raw);
119
- return typeof coerced === 'object' && coerced !== null
120
- ? coerced
121
- : { ...raw };
122
- }
123
- //# sourceMappingURL=coerce.js.map
package/src/coerce.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"coerce.js","sourceRoot":"","sources":["coerce.ts"],"names":[],"mappings":"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"}
package/src/errors.d.ts DELETED
@@ -1,62 +0,0 @@
1
- /** Same well-known symbol `@ultimat3/core` brands with. Keep in sync, never rename. */
2
- export declare const ULTIMATE_ERROR_BRAND: unique symbol;
3
- export interface SchemaErrorCodeDeclaration {
4
- readonly title: string;
5
- readonly docs?: string | undefined;
6
- }
7
- /**
8
- * Pass to `registerErrorCodes()` from a package that may import both tiers (the CLI does this
9
- * at boot) so the terminal and the dev overlay render these codes identically.
10
- */
11
- export declare const SCHEMA_ERROR_CODES: Readonly<Record<string, SchemaErrorCodeDeclaration>>;
12
- export interface SchemaErrorInit {
13
- readonly code: string;
14
- readonly cause: string;
15
- readonly fix: string;
16
- readonly docs?: string | undefined;
17
- readonly meta?: Readonly<Record<string, unknown>> | undefined;
18
- }
19
- export interface SchemaErrorJSON {
20
- readonly code: string;
21
- readonly title: string;
22
- readonly cause: string;
23
- readonly fix: string;
24
- readonly docs: string;
25
- readonly meta?: Readonly<Record<string, unknown>> | undefined;
26
- }
27
- export declare class SchemaError extends Error {
28
- readonly [ULTIMATE_ERROR_BRAND] = true;
29
- readonly name: string;
30
- readonly code: string;
31
- readonly title: string;
32
- readonly cause: string;
33
- readonly fix: string;
34
- readonly docs: string;
35
- readonly meta: Readonly<Record<string, unknown>> | undefined;
36
- constructor(init: SchemaErrorInit);
37
- /** The same 3-line rendering as `UltimateError.format()`. */
38
- format(): string;
39
- toJSON(): SchemaErrorJSON;
40
- }
41
- export interface ValidationIssue {
42
- /** Dotted path from the validated root, e.g. `input.items[0].price`. */
43
- readonly path: string;
44
- readonly expected: string;
45
- readonly received: string;
46
- readonly message: string;
47
- }
48
- export declare class ValidationFailedError extends SchemaError {
49
- static readonly code = "X_VALIDATION_FAILED";
50
- readonly name = "ValidationFailedError";
51
- readonly issues: readonly ValidationIssue[];
52
- constructor(issues: readonly ValidationIssue[], root?: string);
53
- /** One line per issue — what the dev overlay and `x test --json` render. */
54
- formatIssues(): string;
55
- }
56
- export declare class SchemaUnsupportedError extends SchemaError {
57
- static readonly code = "X_SCHEMA_UNSUPPORTED";
58
- readonly name = "SchemaUnsupportedError";
59
- constructor(init: Omit<SchemaErrorInit, 'code'>);
60
- }
61
- export declare function isSchemaError(value: unknown): value is SchemaError;
62
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["errors.ts"],"names":[],"mappings":"AAIA,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,EAAE,OAAO,MAAqC,CAAC;AAEhF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAIhF,CAAC;AAYL,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CAC/D;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,QAAQ;IACvC,SAAkB,IAAI,EAAE,MAAM,CAAiB;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,SAAiB,KAAK,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAE7D,YAAY,IAAI,EAAE,eAAe,EAQhC;IAED,6DAA6D;IAC7D,MAAM,IAAI,MAAM,CAIf;IAED,MAAM,IAAI,eAAe,CASxB;CACF;AAED,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,yBAAyB;IAC7C,SAAkB,IAAI,2BAA2B;IACjD,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAE5C,YAAY,MAAM,EAAE,SAAS,eAAe,EAAE,EAAE,IAAI,SAAU,EAW7D;IAED,4EAA4E;IAC5E,YAAY,IAAI,MAAM,CAErB;CACF;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,0BAA0B;IAC9C,SAAkB,IAAI,4BAA4B;IAClD,YAAY,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,EAE9C;CACF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE"}
package/src/errors.js DELETED
@@ -1,85 +0,0 @@
1
- // Single responsibility: this package's error codes. `@ultimat3/schema` is tier 0 and may not
2
- // import `@ultimat3/core`, so `SchemaError` reproduces the `UltimateError` shape structurally
3
- // and carries the same `Symbol.for('ultimate.error')` brand — `isUltimateError()` still matches.
4
- /** Same well-known symbol `@ultimat3/core` brands with. Keep in sync, never rename. */
5
- export const ULTIMATE_ERROR_BRAND = Symbol.for('ultimate.error');
6
- /**
7
- * Pass to `registerErrorCodes()` from a package that may import both tiers (the CLI does this
8
- * at boot) so the terminal and the dev overlay render these codes identically.
9
- */
10
- export const SCHEMA_ERROR_CODES = Object.freeze({
11
- X_VALIDATION_FAILED: { title: 'value did not match its schema' },
12
- X_SCHEMA_UNSUPPORTED: { title: 'the active schema provider cannot do this' },
13
- });
14
- const TITLES = Object.freeze({
15
- X_VALIDATION_FAILED: 'value did not match its schema',
16
- X_SCHEMA_UNSUPPORTED: 'the active schema provider cannot do this',
17
- });
18
- /** `X_SCHEMA_UNSUPPORTED` -> `schema unsupported`, same fallback as the core registry. */
19
- function humanize(code) {
20
- return code.replace(/^X_/, '').toLowerCase().replaceAll('_', ' ');
21
- }
22
- export class SchemaError extends Error {
23
- [ULTIMATE_ERROR_BRAND] = true;
24
- name = 'SchemaError';
25
- code;
26
- title;
27
- fix;
28
- docs;
29
- meta;
30
- constructor(init) {
31
- const title = TITLES[init.code] ?? humanize(init.code);
32
- super(`${init.code}: ${title}`, { cause: init.cause });
33
- this.code = init.code;
34
- this.title = title;
35
- this.fix = init.fix;
36
- this.docs = init.docs ?? `https://ultimate.dev/errors/${init.code}`;
37
- this.meta = init.meta;
38
- }
39
- /** The same 3-line rendering as `UltimateError.format()`. */
40
- format() {
41
- return [`${this.code}: ${this.title}`, ` cause: ${this.cause}`, ` fix: ${this.fix}`].join('\n');
42
- }
43
- toJSON() {
44
- return {
45
- code: this.code,
46
- title: this.title,
47
- cause: this.cause,
48
- fix: this.fix,
49
- docs: this.docs,
50
- meta: this.meta,
51
- };
52
- }
53
- }
54
- export class ValidationFailedError extends SchemaError {
55
- static code = 'X_VALIDATION_FAILED';
56
- name = 'ValidationFailedError';
57
- issues;
58
- constructor(issues, root = 'value') {
59
- const cause = issues
60
- .map((issue) => `${issue.path === '' ? root : issue.path}: ${issue.message}`)
61
- .join('; ');
62
- super({
63
- code: ValidationFailedError.code,
64
- cause,
65
- fix: `send ${root} with the field(s) named in cause corrected to the expected type`,
66
- meta: { issues },
67
- });
68
- this.issues = issues;
69
- }
70
- /** One line per issue — what the dev overlay and `x test --json` render. */
71
- formatIssues() {
72
- return this.issues.map((issue) => ` ${issue.path}: ${issue.message}`).join('\n');
73
- }
74
- }
75
- export class SchemaUnsupportedError extends SchemaError {
76
- static code = 'X_SCHEMA_UNSUPPORTED';
77
- name = 'SchemaUnsupportedError';
78
- constructor(init) {
79
- super({ ...init, code: SchemaUnsupportedError.code });
80
- }
81
- }
82
- export function isSchemaError(value) {
83
- return typeof value === 'object' && value !== null && ULTIMATE_ERROR_BRAND in value;
84
- }
85
- //# sourceMappingURL=errors.js.map
package/src/errors.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["errors.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts DELETED
@@ -1,19 +0,0 @@
1
- export type { AnySchema, Check, CheckErr, CheckOk, CheckResult, Path, Schema, Shape, ShapeInput, ShapeOutput, Simplify, } from './builder';
2
- export { checkOf, describeValue, expected, fail, failWith, makeSchema, pass, VENDOR, } from './builder';
3
- export type { QuerySource } from './coerce';
4
- export { coerceInput, coerceNode, coerceQuery } from './coerce';
5
- export type { SchemaErrorCodeDeclaration, SchemaErrorInit, SchemaErrorJSON, ValidationIssue, } from './errors';
6
- export { isSchemaError, SCHEMA_ERROR_CODES, SchemaError, SchemaUnsupportedError, ULTIMATE_ERROR_BRAND, ValidationFailedError, } from './errors';
7
- export type { JsonSchema, JsonSchemaDialect, JsonSchemaType, ToJsonSchemaOptions, } from './json-schema';
8
- export { nodeToJsonSchema, toJsonSchema, toMcpInputSchema } from './json-schema';
9
- export type { SchemaFormat, SchemaKind, SchemaNode } from './node';
10
- export { isSchemaNode, nodeOf, requiredKeys } from './node';
11
- export type { SchemaProvider } from './provider';
12
- export { builtinProvider, configureSchemaProvider, introspect, resetSchemaProvider, schemaProvider, tryIntrospect, } from './provider';
13
- export type { InferInput, InferOutput, StandardFailureResult, StandardIssue, StandardPathSegment, StandardResult, StandardSchemaProps, StandardSchemaV1, StandardSuccessResult, StandardTypes, } from './standard';
14
- export { formatPath, isStandardSchema, parse, parseAsync, toValidationIssues, validate, validateAsync, } from './standard';
15
- export type { Infer } from './t';
16
- export { t } from './t';
17
- export type { MoneyValue, NumberSchema, ObjectSchema, StringSchema, TNamespace, } from './validators';
18
- export { arraySchema, builtinT, enumSchema, literalSchema, objectSchema, optionalSchema, recordSchema, unionSchema, } from './validators';
19
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,WAAW,EACX,IAAI,EACJ,MAAM,EACN,KAAK,EACL,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,MAAM,GACP,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAChE,YAAY,EACV,0BAA0B,EAC1B,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,EACL,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,cAAc,CAAC"}
package/src/index.js DELETED
@@ -1,11 +0,0 @@
1
- // Single responsibility: the public API of @ultimat3/schema. Explicit named exports only.
2
- export { checkOf, describeValue, expected, fail, failWith, makeSchema, pass, VENDOR, } from './builder';
3
- export { coerceInput, coerceNode, coerceQuery } from './coerce';
4
- export { isSchemaError, SCHEMA_ERROR_CODES, SchemaError, SchemaUnsupportedError, ULTIMATE_ERROR_BRAND, ValidationFailedError, } from './errors';
5
- export { nodeToJsonSchema, toJsonSchema, toMcpInputSchema } from './json-schema';
6
- export { isSchemaNode, nodeOf, requiredKeys } from './node';
7
- export { builtinProvider, configureSchemaProvider, introspect, resetSchemaProvider, schemaProvider, tryIntrospect, } from './provider';
8
- export { formatPath, isStandardSchema, parse, parseAsync, toValidationIssues, validate, validateAsync, } from './standard';
9
- export { t } from './t';
10
- export { arraySchema, builtinT, enumSchema, literalSchema, objectSchema, optionalSchema, recordSchema, unionSchema, } from './validators';
11
- //# sourceMappingURL=index.js.map
package/src/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAe1F,OAAO,EACL,OAAO,EACP,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,MAAM,GACP,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAOlB,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE5D,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AAapB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,EACL,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,cAAc,CAAC"}
@@ -1,37 +0,0 @@
1
- import { type SchemaNode } from './node';
2
- export type JsonSchemaType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array';
3
- export interface JsonSchema {
4
- readonly $schema?: string;
5
- readonly type?: JsonSchemaType;
6
- readonly format?: string;
7
- readonly description?: string;
8
- readonly default?: unknown;
9
- readonly minLength?: number;
10
- readonly maxLength?: number;
11
- readonly pattern?: string;
12
- readonly minimum?: number;
13
- readonly maximum?: number;
14
- readonly enum?: readonly (string | number)[];
15
- readonly const?: string | number | boolean | null;
16
- readonly properties?: Readonly<Record<string, JsonSchema>>;
17
- readonly required?: readonly string[];
18
- readonly additionalProperties?: boolean | JsonSchema;
19
- readonly items?: JsonSchema;
20
- readonly anyOf?: readonly JsonSchema[];
21
- readonly title?: string;
22
- }
23
- export type JsonSchemaDialect = '2020-12' | 'draft-07';
24
- export interface ToJsonSchemaOptions {
25
- /** MCP clients are happiest with `draft-07`; OpenAPI 3.1 wants `2020-12` (the default). */
26
- readonly dialect?: JsonSchemaDialect | undefined;
27
- /** Emit `$schema` at the root. Off for OpenAPI component schemas. */
28
- readonly includeDialect?: boolean | undefined;
29
- readonly title?: string | undefined;
30
- }
31
- /** Convert any schema the active provider can introspect. */
32
- export declare function toJsonSchema(schema: unknown, options?: ToJsonSchemaOptions): JsonSchema;
33
- /** The exact shape an MCP `tools/list` entry needs: draft-07, no `$schema`. */
34
- export declare function toMcpInputSchema(schema: unknown): JsonSchema;
35
- /** Convert an already-introspected node — used by generators that walk the IR themselves. */
36
- export declare function nodeToJsonSchema(node: SchemaNode): JsonSchema;
37
- //# sourceMappingURL=json-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["json-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGvD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9F,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,CAAC;AAOvD,MAAM,WAAW,mBAAmB;IAClC,2FAA2F;IAC3F,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,qEAAqE;IACrE,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAsFD,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAQvF;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAE5D;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAE7D"}