Sign In

@ultimat3/schema

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ultimat3/schema - npm Package Compare versions

Comparing version
1.0.0
to
1.1.0
+1
-1
package.json
{
"name": "@ultimat3/schema",
"version": "1.0.0",
"version": "1.1.0",
"description": "Ultimate's validation seam: Standard Schema interface, the t namespace, JSON Schema output",

@@ -5,0 +5,0 @@ "license": "MIT",

import type { SchemaNode } from './node';
import { type InferInput, type InferOutput, type StandardIssue, type StandardResult, type StandardSchemaV1 } from './standard';
export declare const VENDOR = "ultimate";
export type Path = readonly PropertyKey[];
export interface CheckOk<Out> {
readonly ok: true;
readonly value: Out;
}
export interface CheckErr {
readonly ok: false;
readonly issues: readonly StandardIssue[];
}
export type CheckResult<Out> = CheckOk<Out> | CheckErr;
export type Check<Out> = (value: unknown, path: Path) => CheckResult<Out>;
export declare function pass<Out>(value: Out): CheckOk<Out>;
export declare function fail(path: Path, message: string): CheckErr;
export declare function failWith(issues: readonly StandardIssue[]): CheckErr;
/** `expected uuid, received "abc"` — the message an agent can act on without guessing. */
export declare function expected(what: string, value: unknown): string;
export declare function describeValue(value: unknown): string;
export interface Schema<In = unknown, Out = In> extends StandardSchemaV1<In, Out> {
/** The introspectable IR. JSON Schema, OpenAPI, MCP and coercion all read this. */
readonly node: SchemaNode;
parse(value: unknown, root?: string): Out;
safeParse(value: unknown): StandardResult<Out>;
optional(): Schema<In | undefined, Out | undefined>;
/**
* Distinct from `optional()`: absent and null are different facts. A nullable column holds a
* row that says "no cover image"; an optional field says the caller did not mention it. SQL
* has always drawn that line, so the schema has to as well or a round-trip loses it.
*/
nullable(): Schema<In | null, Out | null>;
default(value: Out): Schema<In | undefined, Out>;
describe(description: string): Schema<In, Out>;
}
/** The general constraint for "some schema". Methods are bivariant, so this is a real supertype. */
export type AnySchema = Schema<unknown, unknown>;
export type Shape = Readonly<Record<string, AnySchema>>;
export type Simplify<T> = {
[K in keyof T]: T[K];
} & {};
type OptionalOutputKeys<S extends Shape> = {
[K in keyof S]: undefined extends InferOutput<S[K]> ? K : never;
}[keyof S];
type OptionalInputKeys<S extends Shape> = {
[K in keyof S]: undefined extends InferInput<S[K]> ? K : never;
}[keyof S];
export type ShapeOutput<S extends Shape> = Simplify<{
[K in Exclude<keyof S, OptionalOutputKeys<S>>]: InferOutput<S[K]>;
} & {
[K in OptionalOutputKeys<S>]?: InferOutput<S[K]>;
}>;
export type ShapeInput<S extends Shape> = Simplify<{
[K in Exclude<keyof S, OptionalInputKeys<S>>]: InferInput<S[K]>;
} & {
[K in OptionalInputKeys<S>]?: InferInput<S[K]>;
}>;
export declare function makeSchema<In, Out>(node: SchemaNode, check: Check<Out>): Schema<In, Out>;
/** Read the check back off a builtin schema so composites can reuse it. */
export declare function checkOf<In, Out>(schema: Schema<In, Out>): Check<Out>;
export {};
//# sourceMappingURL=builder.d.ts.map
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["builder.ts"],"names":[],"mappings":"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"}
// Single responsibility: the `Schema` type every builtin validator returns, and the factory
// that turns a check function plus an IR node into a Standard-Schema-conforming object.
import { ValidationFailedError } from './errors';
import { formatPath, } from './standard';
export const VENDOR = 'ultimate';
export function pass(value) {
return { ok: true, value };
}
export function fail(path, message) {
return { ok: false, issues: [{ message, path: [...path] }] };
}
export function failWith(issues) {
return { ok: false, issues };
}
/** `expected uuid, received "abc"` — the message an agent can act on without guessing. */
export function expected(what, value) {
return `expected ${what}, received ${describeValue(value)}`;
}
export function describeValue(value) {
if (value === undefined)
return 'undefined';
if (value === null)
return 'null';
if (typeof value === 'string')
return JSON.stringify(value);
if (typeof value === 'number' || typeof value === 'boolean')
return String(value);
if (Array.isArray(value))
return `array(${value.length})`;
if (value instanceof Date)
return `Date(${value.toISOString()})`;
return typeof value;
}
function toIssues(result) {
return result.issues.map((issue) => ({
path: formatPath(issue.path),
expected: issue.message,
received: '',
message: issue.message,
}));
}
export function makeSchema(node, check) {
const schema = {
'~standard': {
version: 1,
vendor: VENDOR,
validate: (value) => {
const result = check(value, []);
return result.ok ? { value: result.value } : { issues: result.issues };
},
},
node,
parse(value, root = 'value') {
const result = check(value, []);
if (result.ok)
return result.value;
throw new ValidationFailedError(toIssues(result), root);
},
safeParse(value) {
const result = check(value, []);
return result.ok ? { value: result.value } : { issues: result.issues };
},
optional() {
return makeSchema({ ...node, optional: true }, (value, path) => (value === undefined ? pass(undefined) : check(value, path)));
},
nullable() {
return makeSchema({ ...node, nullable: true }, (value, path) => value === null ? pass(null) : check(value, path));
},
default(fallback) {
return makeSchema({ ...node, hasDefault: true, default: fallback }, (value, path) => (value === undefined ? pass(fallback) : check(value, path)));
},
describe(description) {
return makeSchema({ ...node, description }, check);
},
};
return schema;
}
/** Read the check back off a builtin schema so composites can reuse it. */
export function checkOf(schema) {
return (value, path) => {
const result = schema['~standard'].validate(value);
if (result instanceof Promise) {
return fail(path, 'expected a synchronous schema, received an async one');
}
if (result.issues === undefined)
return pass(result.value);
return failWith(result.issues.map((issue) => ({
message: issue.message,
path: [...path, ...(issue.path ?? [])],
})));
};
}
//# sourceMappingURL=builder.js.map
{"version":3,"file":"builder.js","sourceRoot":"","sources":["builder.ts"],"names":[],"mappings":"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"}
import type { SchemaNode } from './node';
export type QuerySource = URLSearchParams | Readonly<Record<string, string | readonly string[] | undefined>>;
/**
* Coerce one raw value toward `node`. Never throws and never invents data: anything it cannot
* confidently convert is returned untouched so validation produces the real error message.
*/
export declare function coerceNode(node: SchemaNode, raw: unknown): unknown;
/**
* Coerce a query string / route params object against a schema, ready to `parse()`.
* Unknown keys are passed through — the schema decides what to keep.
*/
export declare function coerceQuery(schema: unknown, source: QuerySource): Record<string, unknown>;
/** Coerce an arbitrary record (route params, form data) against a schema. */
export declare function coerceInput(schema: unknown, raw: Readonly<Record<string, unknown>>): Record<string, unknown>;
//# sourceMappingURL=coerce.d.ts.map
{"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"}
// Single responsibility: HTTP-boundary coercion. Kept out of validation on purpose — only the
// HTTP layer has strings that "mean" numbers. Actions, jobs and MCP calls receive real JSON and
// must never get this leniency.
import { tryIntrospect } from './provider';
const TRUE_VALUES = new Set(['1', 'true', 'yes', 'on']);
const FALSE_VALUES = new Set(['0', 'false', 'no', 'off', '']);
/**
* Coerce one raw value toward `node`. Never throws and never invents data: anything it cannot
* confidently convert is returned untouched so validation produces the real error message.
*/
export function coerceNode(node, raw) {
if (raw === undefined || raw === null)
return raw;
switch (node.kind) {
case 'number': {
if (typeof raw !== 'string')
return raw;
const value = Number(raw);
return raw.trim() !== '' && Number.isFinite(value) ? value : raw;
}
case 'boolean': {
if (typeof raw !== 'string')
return raw;
const lowered = raw.toLowerCase();
if (TRUE_VALUES.has(lowered))
return true;
if (FALSE_VALUES.has(lowered))
return false;
return raw;
}
case 'date': {
if (typeof raw !== 'string')
return raw;
const parsed = new Date(raw);
return Number.isNaN(parsed.getTime()) ? raw : parsed;
}
case 'array': {
const items = Array.isArray(raw) ? raw : [raw];
const itemNode = node.items;
return itemNode === undefined ? items : items.map((item) => coerceNode(itemNode, item));
}
case 'record': {
if (typeof raw !== 'object' || node.valueNode === undefined)
return raw;
const out = {};
for (const [key, value] of Object.entries(raw)) {
out[key] = coerceNode(node.valueNode, value);
}
return out;
}
case 'object': {
if (typeof raw !== 'object' || node.properties === undefined)
return raw;
const source = raw;
const out = { ...source };
for (const [key, child] of Object.entries(node.properties)) {
if (key in source)
out[key] = coerceNode(child, source[key]);
}
return out;
}
case 'money': {
if (typeof raw !== 'object')
return raw;
const source = raw;
const minor = typeof source['minor'] === 'string' ? Number(source['minor']) : source['minor'];
return Number.isFinite(minor) ? { ...source, minor } : raw;
}
case 'union': {
// Only unambiguous single-kind unions (e.g. `number | undefined`) are safe to coerce.
const kinds = new Set((node.anyOf ?? []).map((member) => member.kind));
if (kinds.size !== 1)
return raw;
const [member] = node.anyOf ?? [];
return member === undefined ? raw : coerceNode(member, raw);
}
default:
return raw;
}
}
function toRecord(source) {
if (!(source instanceof URLSearchParams)) {
return { ...source };
}
const out = {};
for (const key of new Set(source.keys())) {
const all = source.getAll(key);
out[key] = all.length > 1 ? all : all[0];
}
return out;
}
/**
* Coerce a query string / route params object against a schema, ready to `parse()`.
* Unknown keys are passed through — the schema decides what to keep.
*/
export function coerceQuery(schema, source) {
const record = toRecord(source);
const node = tryIntrospect(schema);
if (node?.properties === undefined)
return record;
const out = { ...record };
for (const [key, child] of Object.entries(node.properties)) {
if (!(key in record))
continue;
const raw = record[key];
out[key] = coerceNode(child, child.kind === 'array' ? (raw ?? []) : normaliseSingle(raw));
}
return out;
}
function normaliseSingle(raw) {
return Array.isArray(raw) ? raw[raw.length - 1] : raw;
}
/** Coerce an arbitrary record (route params, form data) against a schema. */
export function coerceInput(schema, raw) {
const node = tryIntrospect(schema);
if (node === undefined)
return { ...raw };
const coerced = coerceNode(node, raw);
return typeof coerced === 'object' && coerced !== null
? coerced
: { ...raw };
}
//# sourceMappingURL=coerce.js.map
{"version":3,"file":"coerce.js","sourceRoot":"","sources":["coerce.ts"],"names":[],"mappings":"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"}
/** Same well-known symbol `@ultimat3/core` brands with. Keep in sync, never rename. */
export declare const ULTIMATE_ERROR_BRAND: unique symbol;
export interface SchemaErrorCodeDeclaration {
readonly title: string;
readonly docs?: string | undefined;
}
/**
* Pass to `registerErrorCodes()` from a package that may import both tiers (the CLI does this
* at boot) so the terminal and the dev overlay render these codes identically.
*/
export declare const SCHEMA_ERROR_CODES: Readonly<Record<string, SchemaErrorCodeDeclaration>>;
export interface SchemaErrorInit {
readonly code: string;
readonly cause: string;
readonly fix: string;
readonly docs?: string | undefined;
readonly meta?: Readonly<Record<string, unknown>> | undefined;
}
export interface SchemaErrorJSON {
readonly code: string;
readonly title: string;
readonly cause: string;
readonly fix: string;
readonly docs: string;
readonly meta?: Readonly<Record<string, unknown>> | undefined;
}
export declare class SchemaError extends Error {
readonly [ULTIMATE_ERROR_BRAND] = true;
readonly name: string;
readonly code: string;
readonly title: string;
readonly cause: string;
readonly fix: string;
readonly docs: string;
readonly meta: Readonly<Record<string, unknown>> | undefined;
constructor(init: SchemaErrorInit);
/** The same 3-line rendering as `UltimateError.format()`. */
format(): string;
toJSON(): SchemaErrorJSON;
}
export interface ValidationIssue {
/** Dotted path from the validated root, e.g. `input.items[0].price`. */
readonly path: string;
readonly expected: string;
readonly received: string;
readonly message: string;
}
export declare class ValidationFailedError extends SchemaError {
static readonly code = "X_VALIDATION_FAILED";
readonly name = "ValidationFailedError";
readonly issues: readonly ValidationIssue[];
constructor(issues: readonly ValidationIssue[], root?: string);
/** One line per issue — what the dev overlay and `x test --json` render. */
formatIssues(): string;
}
export declare class SchemaUnsupportedError extends SchemaError {
static readonly code = "X_SCHEMA_UNSUPPORTED";
readonly name = "SchemaUnsupportedError";
constructor(init: Omit<SchemaErrorInit, 'code'>);
}
export declare function isSchemaError(value: unknown): value is SchemaError;
//# sourceMappingURL=errors.d.ts.map
{"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"}
// Single responsibility: this package's error codes. `@ultimat3/schema` is tier 0 and may not
// import `@ultimat3/core`, so `SchemaError` reproduces the `UltimateError` shape structurally
// and carries the same `Symbol.for('ultimate.error')` brand — `isUltimateError()` still matches.
/** Same well-known symbol `@ultimat3/core` brands with. Keep in sync, never rename. */
export const ULTIMATE_ERROR_BRAND = Symbol.for('ultimate.error');
/**
* Pass to `registerErrorCodes()` from a package that may import both tiers (the CLI does this
* at boot) so the terminal and the dev overlay render these codes identically.
*/
export const SCHEMA_ERROR_CODES = Object.freeze({
X_VALIDATION_FAILED: { title: 'value did not match its schema' },
X_SCHEMA_UNSUPPORTED: { title: 'the active schema provider cannot do this' },
});
const TITLES = Object.freeze({
X_VALIDATION_FAILED: 'value did not match its schema',
X_SCHEMA_UNSUPPORTED: 'the active schema provider cannot do this',
});
/** `X_SCHEMA_UNSUPPORTED` -> `schema unsupported`, same fallback as the core registry. */
function humanize(code) {
return code.replace(/^X_/, '').toLowerCase().replaceAll('_', ' ');
}
export class SchemaError extends Error {
[ULTIMATE_ERROR_BRAND] = true;
name = 'SchemaError';
code;
title;
fix;
docs;
meta;
constructor(init) {
const title = TITLES[init.code] ?? humanize(init.code);
super(`${init.code}: ${title}`, { cause: init.cause });
this.code = init.code;
this.title = title;
this.fix = init.fix;
this.docs = init.docs ?? `https://ultimate.dev/errors/${init.code}`;
this.meta = init.meta;
}
/** The same 3-line rendering as `UltimateError.format()`. */
format() {
return [`${this.code}: ${this.title}`, ` cause: ${this.cause}`, ` fix: ${this.fix}`].join('\n');
}
toJSON() {
return {
code: this.code,
title: this.title,
cause: this.cause,
fix: this.fix,
docs: this.docs,
meta: this.meta,
};
}
}
export class ValidationFailedError extends SchemaError {
static code = 'X_VALIDATION_FAILED';
name = 'ValidationFailedError';
issues;
constructor(issues, root = 'value') {
const cause = issues
.map((issue) => `${issue.path === '' ? root : issue.path}: ${issue.message}`)
.join('; ');
super({
code: ValidationFailedError.code,
cause,
fix: `send ${root} with the field(s) named in cause corrected to the expected type`,
meta: { issues },
});
this.issues = issues;
}
/** One line per issue — what the dev overlay and `x test --json` render. */
formatIssues() {
return this.issues.map((issue) => ` ${issue.path}: ${issue.message}`).join('\n');
}
}
export class SchemaUnsupportedError extends SchemaError {
static code = 'X_SCHEMA_UNSUPPORTED';
name = 'SchemaUnsupportedError';
constructor(init) {
super({ ...init, code: SchemaUnsupportedError.code });
}
}
export function isSchemaError(value) {
return typeof value === 'object' && value !== null && ULTIMATE_ERROR_BRAND in value;
}
//# sourceMappingURL=errors.js.map
{"version":3,"file":"errors.js","sourceRoot":"","sources":["errors.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,8FAA8F;AAC9F,iGAAiG;AAEjG,uFAAuF;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAkB,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAOhF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAC7B,MAAM,CAAC,MAAM,CAAC;IACZ,mBAAmB,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE;IAChE,oBAAoB,EAAE,EAAE,KAAK,EAAE,2CAA2C,EAAE;CAC7E,CAAC,CAAC;AAEL,MAAM,MAAM,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC7D,mBAAmB,EAAE,gCAAgC;IACrD,oBAAoB,EAAE,2CAA2C;CAClE,CAAC,CAAC;AAEH,0FAA0F;AAC1F,SAAS,QAAQ,CAAC,IAAY;IAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAmBD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IACrB,IAAI,GAAW,aAAa,CAAC;IACtC,IAAI,CAAS;IACb,KAAK,CAAS;IAEd,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,IAAI,CAAgD;IAE7D,YAAY,IAAqB;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,6DAA6D;IAC7D,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,IAAI,CAAC,KAAK,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAC3F,IAAI,CACL,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;CACF;AAUD,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IACpD,MAAM,CAAU,IAAI,GAAG,qBAAqB,CAAC;IAC3B,IAAI,GAAG,uBAAuB,CAAC;IACxC,MAAM,CAA6B;IAE5C,YAAY,MAAkC,EAAE,IAAI,GAAG,OAAO;QAC5D,MAAM,KAAK,GAAG,MAAM;aACjB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;aAC5E,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC;YACJ,IAAI,EAAE,qBAAqB,CAAC,IAAI;YAChC,KAAK;YACL,GAAG,EAAE,QAAQ,IAAI,kEAAkE;YACnF,IAAI,EAAE,EAAE,MAAM,EAAE;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,4EAA4E;IAC5E,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACrD,MAAM,CAAU,IAAI,GAAG,sBAAsB,CAAC;IAC5B,IAAI,GAAG,wBAAwB,CAAC;IAClD,YAAY,IAAmC;QAC7C,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,oBAAoB,IAAI,KAAK,CAAC;AACtF,CAAC"}
export type { AnySchema, Check, CheckErr, CheckOk, CheckResult, Path, Schema, Shape, ShapeInput, ShapeOutput, Simplify, } from './builder';
export { checkOf, describeValue, expected, fail, failWith, makeSchema, pass, VENDOR, } from './builder';
export type { QuerySource } from './coerce';
export { coerceInput, coerceNode, coerceQuery } from './coerce';
export type { SchemaErrorCodeDeclaration, SchemaErrorInit, SchemaErrorJSON, ValidationIssue, } from './errors';
export { isSchemaError, SCHEMA_ERROR_CODES, SchemaError, SchemaUnsupportedError, ULTIMATE_ERROR_BRAND, ValidationFailedError, } from './errors';
export type { JsonSchema, JsonSchemaDialect, JsonSchemaType, ToJsonSchemaOptions, } from './json-schema';
export { nodeToJsonSchema, toJsonSchema, toMcpInputSchema } from './json-schema';
export type { SchemaFormat, SchemaKind, SchemaNode } from './node';
export { isSchemaNode, nodeOf, requiredKeys } from './node';
export type { SchemaProvider } from './provider';
export { builtinProvider, configureSchemaProvider, introspect, resetSchemaProvider, schemaProvider, tryIntrospect, } from './provider';
export type { InferInput, InferOutput, StandardFailureResult, StandardIssue, StandardPathSegment, StandardResult, StandardSchemaProps, StandardSchemaV1, StandardSuccessResult, StandardTypes, } from './standard';
export { formatPath, isStandardSchema, parse, parseAsync, toValidationIssues, validate, validateAsync, } from './standard';
export type { Infer } from './t';
export { t } from './t';
export type { MoneyValue, NumberSchema, ObjectSchema, StringSchema, TNamespace, } from './validators';
export { arraySchema, builtinT, enumSchema, literalSchema, objectSchema, optionalSchema, recordSchema, unionSchema, } from './validators';
//# sourceMappingURL=index.d.ts.map
{"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"}
// Single responsibility: the public API of @ultimat3/schema. Explicit named exports only.
export { checkOf, describeValue, expected, fail, failWith, makeSchema, pass, VENDOR, } from './builder';
export { coerceInput, coerceNode, coerceQuery } from './coerce';
export { isSchemaError, SCHEMA_ERROR_CODES, SchemaError, SchemaUnsupportedError, ULTIMATE_ERROR_BRAND, ValidationFailedError, } from './errors';
export { nodeToJsonSchema, toJsonSchema, toMcpInputSchema } from './json-schema';
export { isSchemaNode, nodeOf, requiredKeys } from './node';
export { builtinProvider, configureSchemaProvider, introspect, resetSchemaProvider, schemaProvider, tryIntrospect, } from './provider';
export { formatPath, isStandardSchema, parse, parseAsync, toValidationIssues, validate, validateAsync, } from './standard';
export { t } from './t';
export { arraySchema, builtinT, enumSchema, literalSchema, objectSchema, optionalSchema, recordSchema, unionSchema, } from './validators';
//# sourceMappingURL=index.js.map
{"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"}
import { type SchemaNode } from './node';
export type JsonSchemaType = 'string' | 'number' | 'integer' | 'boolean' | 'object' | 'array';
export interface JsonSchema {
readonly $schema?: string;
readonly type?: JsonSchemaType;
readonly format?: string;
readonly description?: string;
readonly default?: unknown;
readonly minLength?: number;
readonly maxLength?: number;
readonly pattern?: string;
readonly minimum?: number;
readonly maximum?: number;
readonly enum?: readonly (string | number)[];
readonly const?: string | number | boolean | null;
readonly properties?: Readonly<Record<string, JsonSchema>>;
readonly required?: readonly string[];
readonly additionalProperties?: boolean | JsonSchema;
readonly items?: JsonSchema;
readonly anyOf?: readonly JsonSchema[];
readonly title?: string;
}
export type JsonSchemaDialect = '2020-12' | 'draft-07';
export interface ToJsonSchemaOptions {
/** MCP clients are happiest with `draft-07`; OpenAPI 3.1 wants `2020-12` (the default). */
readonly dialect?: JsonSchemaDialect | undefined;
/** Emit `$schema` at the root. Off for OpenAPI component schemas. */
readonly includeDialect?: boolean | undefined;
readonly title?: string | undefined;
}
/** Convert any schema the active provider can introspect. */
export declare function toJsonSchema(schema: unknown, options?: ToJsonSchemaOptions): JsonSchema;
/** The exact shape an MCP `tools/list` entry needs: draft-07, no `$schema`. */
export declare function toMcpInputSchema(schema: unknown): JsonSchema;
/** Convert an already-introspected node — used by generators that walk the IR themselves. */
export declare function nodeToJsonSchema(node: SchemaNode): JsonSchema;
//# sourceMappingURL=json-schema.d.ts.map
{"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"}
// Single responsibility: SchemaNode -> JSON Schema. Load-bearing: OpenAPI request/response
// bodies and MCP tool `inputSchema` are both this function's output, so an agent's view of an
// action and an HTTP client's view can never drift.
import { requiredKeys } from './node';
import { introspect } from './provider';
const DIALECTS = Object.freeze({
'2020-12': 'https://json-schema.org/draft/2020-12/schema',
'draft-07': 'http://json-schema.org/draft-07/schema#',
});
const FORMAT_MAP = Object.freeze({
uuid: 'uuid',
email: 'email',
uri: 'uri',
'date-time': 'date-time',
slug: 'slug',
timezone: 'iana-time-zone',
locale: 'bcp47-locale',
cursor: 'ultimate-cursor',
});
function stringNode(node) {
return {
type: 'string',
...(node.format === undefined ? {} : { format: FORMAT_MAP[node.format] ?? node.format }),
...(node.minLength === undefined ? {} : { minLength: node.minLength }),
...(node.maxLength === undefined ? {} : { maxLength: node.maxLength }),
...(node.pattern === undefined ? {} : { pattern: node.pattern }),
};
}
function convert(node) {
const annotate = (schema) => ({
...schema,
...(node.description === undefined ? {} : { description: node.description }),
...(node.hasDefault === true ? { default: node.default } : {}),
});
switch (node.kind) {
case 'string':
return annotate(stringNode(node));
case 'number':
return annotate({
type: node.integer === true ? 'integer' : 'number',
...(node.minimum === undefined ? {} : { minimum: node.minimum }),
...(node.maximum === undefined ? {} : { maximum: node.maximum }),
});
case 'boolean':
return annotate({ type: 'boolean' });
case 'date':
return annotate({ type: 'string', format: 'date-time' });
case 'enum':
return annotate({ type: 'string', enum: node.values ?? [] });
case 'literal':
return annotate({ const: node.literal ?? null });
case 'array':
return annotate({
type: 'array',
items: node.items === undefined ? {} : convert(node.items),
});
case 'union':
return annotate({ anyOf: (node.anyOf ?? []).map(convert) });
case 'record':
return annotate({
type: 'object',
additionalProperties: node.valueNode === undefined ? true : convert(node.valueNode),
});
case 'money':
return annotate({
type: 'object',
properties: {
minor: { type: 'integer', description: 'amount in minor units, never a float' },
currency: { type: 'string', pattern: '^[A-Z]{3}$' },
},
required: ['minor', 'currency'],
additionalProperties: false,
});
case 'object': {
const properties = {};
for (const [key, child] of Object.entries(node.properties ?? {})) {
properties[key] = convert(child);
}
return annotate({
type: 'object',
properties,
required: requiredKeys(node),
additionalProperties: false,
});
}
default:
return annotate({});
}
}
/** Convert any schema the active provider can introspect. */
export function toJsonSchema(schema, options) {
const converted = convert(introspect(schema));
const dialect = options?.dialect ?? '2020-12';
return {
...(options?.includeDialect === false ? {} : { $schema: DIALECTS[dialect] }),
...(options?.title === undefined ? {} : { title: options.title }),
...converted,
};
}
/** The exact shape an MCP `tools/list` entry needs: draft-07, no `$schema`. */
export function toMcpInputSchema(schema) {
return toJsonSchema(schema, { dialect: 'draft-07', includeDialect: false });
}
/** Convert an already-introspected node — used by generators that walk the IR themselves. */
export function nodeToJsonSchema(node) {
return convert(node);
}
//# sourceMappingURL=json-schema.js.map
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["json-schema.ts"],"names":[],"mappings":"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"}
export type SchemaKind = 'string' | 'number' | 'boolean' | 'date' | 'object' | 'array' | 'enum' | 'literal' | 'union' | 'record' | 'money' | 'unknown';
/** JSON Schema `format`, plus the framework's own semantic formats. */
export type SchemaFormat = 'uuid' | 'email' | 'uri' | 'date-time' | 'slug' | 'timezone' | 'locale' | 'cursor';
export interface SchemaNode {
readonly kind: SchemaKind;
readonly optional?: boolean | undefined;
/** Separate from `optional`: JSON Schema and the DB both distinguish null from absent. */
readonly nullable?: boolean | undefined;
readonly hasDefault?: boolean | undefined;
readonly default?: unknown;
readonly description?: string | undefined;
readonly format?: SchemaFormat | undefined;
readonly minLength?: number | undefined;
readonly maxLength?: number | undefined;
/** Source string of the RegExp, so the node stays JSON-serialisable. */
readonly pattern?: string | undefined;
readonly minimum?: number | undefined;
readonly maximum?: number | undefined;
readonly integer?: boolean | undefined;
readonly properties?: Readonly<Record<string, SchemaNode>> | undefined;
readonly items?: SchemaNode | undefined;
readonly values?: readonly (string | number)[] | undefined;
readonly literal?: string | number | boolean | null | undefined;
readonly anyOf?: readonly SchemaNode[] | undefined;
readonly valueNode?: SchemaNode | undefined;
}
export declare function isSchemaNode(value: unknown): value is SchemaNode;
/** Duck-typed: any object carrying a `node` is introspectable, whatever built it. */
export declare function nodeOf(value: unknown): SchemaNode | undefined;
/** Keys an object node requires — everything not optional and without a default. */
export declare function requiredKeys(node: SchemaNode): readonly string[];
//# sourceMappingURL=node.d.ts.map
{"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"}
// Single responsibility: the introspectable schema IR. Flat on purpose — OpenAPI generation,
// MCP tool schemas, HTTP query coercion and the admin form generator all read this one shape,
// so it must stay trivially walkable.
export function isSchemaNode(value) {
return (typeof value === 'object' &&
value !== null &&
typeof value.kind === 'string');
}
/** Duck-typed: any object carrying a `node` is introspectable, whatever built it. */
export function nodeOf(value) {
if (typeof value !== 'object' || value === null || !('node' in value))
return undefined;
const node = value.node;
return isSchemaNode(node) ? node : undefined;
}
/** Keys an object node requires — everything not optional and without a default. */
export function requiredKeys(node) {
if (node.properties === undefined)
return [];
return Object.entries(node.properties)
.filter(([, child]) => child.optional !== true && child.hasDefault !== true)
.map(([key]) => key);
}
//# sourceMappingURL=node.js.map
{"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"}
import { type SchemaNode } from './node';
import { type TNamespace } from './validators';
export interface SchemaProvider {
/** Matches `~standard.vendor`, e.g. `ultimate`, `arktype`, `zod`. */
readonly vendor: string;
readonly t: TNamespace;
/**
* Return the IR for one of this provider's schemas. Required for OpenAPI and MCP tool
* schemas; omit it only if the provider also supplies `toJsonSchema`.
*/
introspect?(schema: unknown): SchemaNode | undefined;
}
export declare const builtinProvider: SchemaProvider;
/**
* Swap the library behind `t`.
*
* ```ts
* import { z } from 'zod';
* configureSchemaProvider({ vendor: 'zod', t: zodNamespace, introspect: zodToNode });
* ```
*/
export declare function configureSchemaProvider(provider: SchemaProvider): void;
export declare function schemaProvider(): SchemaProvider;
export declare function resetSchemaProvider(): void;
/**
* The IR for any schema, whoever built it. Throws `X_SCHEMA_UNSUPPORTED` rather than silently
* emitting an empty OpenAPI body.
*/
export declare function introspect(schema: unknown): SchemaNode;
/** Best-effort variant for callers that can degrade (HTTP query coercion). */
export declare function tryIntrospect(schema: unknown): SchemaNode | undefined;
//# sourceMappingURL=provider.d.ts.map
{"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"}
// Single responsibility: the swap point. One provider is active per process; everything that
// consumes schemas (OpenAPI, MCP, coercion, the admin form generator) goes through `introspect`
// so a third-party library can be plugged in without touching the rest of the framework.
import { SchemaUnsupportedError } from './errors';
import { nodeOf } from './node';
import { builtinT } from './validators';
export const builtinProvider = Object.freeze({
vendor: 'ultimate',
t: builtinT,
introspect: nodeOf,
});
let active = builtinProvider;
/**
* Swap the library behind `t`.
*
* ```ts
* import { z } from 'zod';
* configureSchemaProvider({ vendor: 'zod', t: zodNamespace, introspect: zodToNode });
* ```
*/
export function configureSchemaProvider(provider) {
active = provider;
}
export function schemaProvider() {
return active;
}
export function resetSchemaProvider() {
active = builtinProvider;
}
/**
* The IR for any schema, whoever built it. Throws `X_SCHEMA_UNSUPPORTED` rather than silently
* emitting an empty OpenAPI body.
*/
export function introspect(schema) {
const node = active.introspect?.(schema) ?? nodeOf(schema);
if (node === undefined) {
throw new SchemaUnsupportedError({
cause: `provider "${active.vendor}" cannot describe this schema as a SchemaNode`,
fix: 'add introspect() to the object passed to configureSchemaProvider()',
meta: { vendor: active.vendor },
});
}
return node;
}
/** Best-effort variant for callers that can degrade (HTTP query coercion). */
export function tryIntrospect(schema) {
return active.introspect?.(schema) ?? nodeOf(schema);
}
//# sourceMappingURL=provider.js.map
{"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"}
import { type ValidationIssue } from './errors';
export interface StandardSchemaV1<Input = unknown, Output = Input> {
readonly '~standard': StandardSchemaProps<Input, Output>;
}
export interface StandardSchemaProps<Input, Output> {
readonly version: 1;
/** Library name, e.g. `ultimate`, `arktype`, `zod`. */
readonly vendor: string;
readonly validate: (value: unknown) => StandardResult<Output> | Promise<StandardResult<Output>>;
readonly types?: StandardTypes<Input, Output> | undefined;
}
export interface StandardTypes<Input, Output> {
readonly input: Input;
readonly output: Output;
}
export interface StandardSuccessResult<Output> {
readonly value: Output;
readonly issues?: undefined;
}
export interface StandardFailureResult {
readonly issues: readonly StandardIssue[];
}
export type StandardResult<Output> = StandardSuccessResult<Output> | StandardFailureResult;
export interface StandardPathSegment {
readonly key: PropertyKey;
}
export interface StandardIssue {
readonly message: string;
readonly path?: readonly (PropertyKey | StandardPathSegment)[] | undefined;
}
export type InferInput<S extends StandardSchemaV1> = NonNullable<S['~standard']['types']>['input'];
export type InferOutput<S extends StandardSchemaV1> = NonNullable<S['~standard']['types']>['output'];
/** `['items', 0, 'price']` -> `items[0].price` */
export declare function formatPath(path: readonly (PropertyKey | StandardPathSegment)[] | undefined): string;
/** Normalise any conforming library's issues into Ultimate's path-annotated shape. */
export declare function toValidationIssues(issues: readonly StandardIssue[]): readonly ValidationIssue[];
/** Validate against ANY conforming schema. Never throws on invalid input. */
export declare function validate<S extends StandardSchemaV1>(schema: S, value: unknown): StandardResult<InferOutput<S>>;
export declare function validateAsync<S extends StandardSchemaV1>(schema: S, value: unknown): Promise<StandardResult<InferOutput<S>>>;
/** Validate or throw `X_VALIDATION_FAILED` with a path-annotated issue list. */
export declare function parse<S extends StandardSchemaV1>(schema: S, value: unknown, root?: string): InferOutput<S>;
export declare function parseAsync<S extends StandardSchemaV1>(schema: S, value: unknown, root?: string): Promise<InferOutput<S>>;
export declare function isStandardSchema(value: unknown): value is StandardSchemaV1;
//# sourceMappingURL=standard.d.ts.map
{"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["standard.ts"],"names":[],"mappings":"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"}
// Single responsibility: the Standard Schema v1 interface plus library-agnostic helpers.
// This is the swap point: every Ultimate primitive accepts any conforming schema, so ArkType,
// Zod and Valibot are all first-class without a line of adapter code.
import { SchemaUnsupportedError, ValidationFailedError } from './errors';
/** `['items', 0, 'price']` -> `items[0].price` */
export function formatPath(path) {
if (path === undefined || path.length === 0)
return '';
let out = '';
for (const segment of path) {
const key = typeof segment === 'object' ? segment.key : segment;
if (typeof key === 'number') {
out += `[${key}]`;
}
else {
out += out === '' ? String(key) : `.${String(key)}`;
}
}
return out;
}
/** Normalise any conforming library's issues into Ultimate's path-annotated shape. */
export function toValidationIssues(issues) {
return issues.map((issue) => ({
path: formatPath(issue.path),
expected: issue.message,
received: '',
message: issue.message,
}));
}
function assertSync(result, vendor) {
if (result instanceof Promise) {
throw new SchemaUnsupportedError({
cause: `${vendor} validated asynchronously in a synchronous call site`,
fix: 'call validateAsync()/parseAsync() instead of validate()/parse()',
meta: { vendor },
});
}
return result;
}
/** Validate against ANY conforming schema. Never throws on invalid input. */
export function validate(schema, value) {
const props = schema['~standard'];
return assertSync(props.validate(value), props.vendor);
}
export async function validateAsync(schema, value) {
const result = await schema['~standard'].validate(value);
return result;
}
/** Validate or throw `X_VALIDATION_FAILED` with a path-annotated issue list. */
export function parse(schema, value, root = 'value') {
const result = validate(schema, value);
if (result.issues === undefined)
return result.value;
throw new ValidationFailedError(toValidationIssues(result.issues), root);
}
export async function parseAsync(schema, value, root = 'value') {
const result = await validateAsync(schema, value);
if (result.issues === undefined)
return result.value;
throw new ValidationFailedError(toValidationIssues(result.issues), root);
}
export function isStandardSchema(value) {
if (typeof value !== 'object' || value === null || !('~standard' in value))
return false;
const props = value['~standard'];
return (typeof props === 'object' &&
props !== null &&
props.version === 1 &&
typeof props.validate === 'function');
}
//# sourceMappingURL=standard.js.map
{"version":3,"file":"standard.js","sourceRoot":"","sources":["standard.ts"],"names":[],"mappings":"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"}
import type { InferOutput, StandardSchemaV1 } from './standard';
import type { TNamespace } from './validators';
export declare const t: TNamespace;
/** `type PublishInput = Infer<typeof publishInput>` */
export type Infer<S extends StandardSchemaV1> = InferOutput<S>;
//# sourceMappingURL=t.d.ts.map
{"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"}
// Single responsibility: the blessed `t` namespace. One import, one way to declare a schema.
// Every member delegates to the active provider, so `configureSchemaProvider()` takes effect
// even for modules that captured `t` at import time.
import { schemaProvider } from './provider';
function provider() {
return schemaProvider().t;
}
export const t = {
get string() {
return provider().string;
},
get number() {
return provider().number;
},
get boolean() {
return provider().boolean;
},
get uuid() {
return provider().uuid;
},
get email() {
return provider().email;
},
get url() {
return provider().url;
},
get date() {
return provider().date;
},
get money() {
return provider().money;
},
get timezone() {
return provider().timezone;
},
get locale() {
return provider().locale;
},
get slug() {
return provider().slug;
},
get cursor() {
return provider().cursor;
},
object(shape) {
return provider().object(shape);
},
array(items) {
return provider().array(items);
},
enum(values) {
return provider().enum(values);
},
/**
* Variadic form of `enum`, and the blessed spelling: it spreads a `const` tuple of codes
* straight from the domain package (`t.enumerated(...PLAN_CODES)`) and avoids the reserved
* word at the call site.
*/
enumerated(...values) {
return provider().enum(values);
},
literal(value) {
return provider().literal(value);
},
union(...members) {
return provider().union(...members);
},
record(values) {
return provider().record(values);
},
/** `t.nullable(t.url)` — the column may hold null, which is not the same as being absent. */
nullable(schema) {
return schema.nullable();
},
optional(schema) {
return provider().optional(schema);
},
};
//# sourceMappingURL=t.js.map
{"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"}
import { type AnySchema, type Schema, type Shape, type ShapeInput, type ShapeOutput } from './builder';
import type { InferInput, InferOutput } from './standard';
/** Structurally identical to `Money` in `@ultimat3/money`. Never a float. */
export interface MoneyValue {
readonly minor: number;
readonly currency: string;
}
export interface StringSchema extends Schema<string, string> {
min(length: number): StringSchema;
max(length: number): StringSchema;
pattern(regex: RegExp): StringSchema;
}
export interface NumberSchema extends Schema<number, number> {
min(value: number): NumberSchema;
max(value: number): NumberSchema;
int(): NumberSchema;
}
export interface ObjectSchema<S extends Shape> extends Schema<ShapeInput<S>, ShapeOutput<S>> {
readonly shape: S;
extend<E extends Shape>(extra: E): ObjectSchema<Simplified<S & E>>;
pick<K extends keyof S & string>(...keys: readonly K[]): ObjectSchema<Pick<S, K>>;
omit<K extends keyof S & string>(...keys: readonly K[]): ObjectSchema<Omit<S, K>>;
}
type Simplified<S> = {
[K in keyof S]: S[K];
} & {};
export declare function objectSchema<S extends Shape>(shape: S): ObjectSchema<S>;
export declare function arraySchema<S extends AnySchema>(items: S): Schema<readonly InferInput<S>[], InferOutput<S>[]>;
export declare function enumSchema<const V extends readonly [string, ...string[]]>(values: V): Schema<V[number], V[number]>;
export declare function literalSchema<const V extends string | number | boolean>(value: V): Schema<V, V>;
export declare function unionSchema<S extends readonly [AnySchema, ...AnySchema[]]>(...members: S): Schema<InferInput<S[number]>, InferOutput<S[number]>>;
export declare function recordSchema<S extends AnySchema>(values: S): Schema<Readonly<Record<string, InferInput<S>>>, Record<string, InferOutput<S>>>;
export declare function nullableSchema<S extends AnySchema>(schema: S): Schema<InferInput<S> | null, InferOutput<S> | null>;
export declare function optionalSchema<S extends AnySchema>(schema: S): Schema<InferInput<S> | undefined, InferOutput<S> | undefined>;
/** The shape a schema provider must implement to back `t`. */
export interface TNamespace {
readonly string: StringSchema;
readonly number: NumberSchema;
readonly boolean: Schema<boolean, boolean>;
readonly uuid: StringSchema;
readonly email: StringSchema;
readonly url: StringSchema;
readonly date: Schema<Date | string | number, Date>;
readonly money: Schema<MoneyValue, MoneyValue>;
readonly timezone: StringSchema;
readonly locale: StringSchema;
readonly slug: StringSchema;
readonly cursor: StringSchema;
object<S extends Shape>(shape: S): ObjectSchema<S>;
array<S extends AnySchema>(items: S): Schema<readonly InferInput<S>[], InferOutput<S>[]>;
enum<const V extends readonly [string, ...string[]]>(values: V): Schema<V[number], V[number]>;
/** Variadic `enum`; the blessed spelling at call sites. */
enumerated<const V extends readonly [string, ...string[]]>(...values: V): Schema<V[number], V[number]>;
literal<const V extends string | number | boolean>(value: V): Schema<V, V>;
union<S extends readonly [AnySchema, ...AnySchema[]]>(...members: S): Schema<InferInput<S[number]>, InferOutput<S[number]>>;
record<S extends AnySchema>(values: S): Schema<Readonly<Record<string, InferInput<S>>>, Record<string, InferOutput<S>>>;
/** Null is a value the column holds; `optional` is the caller omitting the field. */
nullable<S extends AnySchema>(schema: S): Schema<InferInput<S> | null, InferOutput<S> | null>;
optional<S extends AnySchema>(schema: S): Schema<InferInput<S> | undefined, InferOutput<S> | undefined>;
}
export declare const builtinT: TNamespace;
export {};
//# sourceMappingURL=validators.d.ts.map
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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"}
// Single responsibility: the builtin, dependency-free validators behind `t`. Small on purpose —
// ArkType or Zod replace them wholesale via `configureSchemaProvider()`; the IR and the
// Standard Schema surface are what the rest of the framework actually depends on.
import { checkOf, expected, fail, failWith, makeSchema, pass, } from './builder';
const EMAIL_RE = /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/;
const SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
const CURSOR_RE = /^[A-Za-z0-9_-]+$/;
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
const CURRENCY_RE = /^[A-Z]{3}$/;
function stringLike(node, what, test) {
const check = (value, path) => {
if (typeof value !== 'string')
return fail(path, expected(what, value));
if (node.minLength !== undefined && value.length < node.minLength) {
return fail(path, expected(`${what} of at least ${node.minLength} chars`, value));
}
if (node.maxLength !== undefined && value.length > node.maxLength) {
return fail(path, expected(`${what} of at most ${node.maxLength} chars`, value));
}
if (node.pattern !== undefined && !new RegExp(node.pattern).test(value)) {
return fail(path, expected(`${what} matching ${node.pattern}`, value));
}
if (test !== undefined && !test(value))
return fail(path, expected(what, value));
return pass(value);
};
return check;
}
function makeStringSchema(node, what, test) {
const base = makeSchema(node, stringLike(node, what, test));
return {
...base,
min: (length) => makeStringSchema({ ...node, minLength: length }, what, test),
max: (length) => makeStringSchema({ ...node, maxLength: length }, what, test),
pattern: (regex) => makeStringSchema({ ...node, pattern: regex.source }, what, test),
};
}
function makeNumberSchema(node) {
const check = (value, path) => {
if (typeof value !== 'number' || !Number.isFinite(value)) {
return fail(path, expected('a finite number', value));
}
if (node.integer === true && !Number.isInteger(value)) {
return fail(path, expected('an integer', value));
}
if (node.minimum !== undefined && value < node.minimum) {
return fail(path, expected(`a number >= ${node.minimum}`, value));
}
if (node.maximum !== undefined && value > node.maximum) {
return fail(path, expected(`a number <= ${node.maximum}`, value));
}
return pass(value);
};
const base = makeSchema(node, check);
return {
...base,
min: (value) => makeNumberSchema({ ...node, minimum: value }),
max: (value) => makeNumberSchema({ ...node, maximum: value }),
int: () => makeNumberSchema({ ...node, integer: true }),
};
}
function isPlainObject(value) {
return typeof value === 'object' && value !== null && !Array.isArray(value);
}
export function objectSchema(shape) {
const properties = {};
const checks = [];
for (const [key, member] of Object.entries(shape)) {
properties[key] = member.node;
checks.push([key, checkOf(member)]);
}
const node = { kind: 'object', properties };
const check = (value, path) => {
if (!isPlainObject(value))
return fail(path, expected('an object', value));
const issues = [];
const out = {};
for (const [key, memberCheck] of checks) {
const result = memberCheck(value[key], [...path, key]);
if (result.ok) {
// Unknown keys are dropped, never forwarded — no mass assignment through an action.
if (result.value !== undefined)
out[key] = result.value;
}
else {
issues.push(...result.issues);
}
}
if (issues.length > 0)
return failWith(issues);
return pass(out);
};
const base = makeSchema(node, check);
return {
...base,
shape,
extend: (extra) => objectSchema({ ...shape, ...extra }),
pick: (...keys) => {
const next = {};
for (const key of keys)
next[key] = shape[key];
return objectSchema(next);
},
omit: (...keys) => {
const drop = new Set(keys);
const next = {};
for (const [key, member] of Object.entries(shape)) {
if (!drop.has(key))
next[key] = member;
}
return objectSchema(next);
},
};
}
export function arraySchema(items) {
const itemCheck = checkOf(items);
const node = { kind: 'array', items: items.node };
return makeSchema(node, (value, path) => {
if (!Array.isArray(value))
return fail(path, expected('an array', value));
const issues = [];
const out = [];
for (const [index, item] of value.entries()) {
const result = itemCheck(item, [...path, index]);
if (result.ok)
out.push(result.value);
else
issues.push(...result.issues);
}
if (issues.length > 0)
return failWith(issues);
return pass(out);
});
}
export function enumSchema(values) {
const node = { kind: 'enum', values: [...values] };
return makeSchema(node, (value, path) => {
if (typeof value === 'string' && values.includes(value)) {
return pass(value);
}
return fail(path, expected(`one of ${values.join(' | ')}`, value));
});
}
export function literalSchema(value) {
const node = { kind: 'literal', literal: value };
return makeSchema(node, (candidate, path) => candidate === value ? pass(value) : fail(path, expected(JSON.stringify(value), candidate)));
}
export function unionSchema(...members) {
const checks = members.map((member) => checkOf(member));
const node = { kind: 'union', anyOf: members.map((member) => member.node) };
return makeSchema(node, (value, path) => {
const reasons = [];
for (const memberCheck of checks) {
const result = memberCheck(value, path);
if (result.ok)
return pass(result.value);
reasons.push(result.issues.map((issue) => issue.message).join(', '));
}
return fail(path, `no union member matched (${reasons.join(' | ')})`);
});
}
export function recordSchema(values) {
const valueCheck = checkOf(values);
const node = { kind: 'record', valueNode: values.node };
return makeSchema(node, (value, path) => {
if (!isPlainObject(value))
return fail(path, expected('an object', value));
const issues = [];
const out = {};
for (const [key, entry] of Object.entries(value)) {
const result = valueCheck(entry, [...path, key]);
if (result.ok)
out[key] = result.value;
else
issues.push(...result.issues);
}
if (issues.length > 0)
return failWith(issues);
return pass(out);
});
}
export function nullableSchema(schema) {
return schema.nullable();
}
export function optionalSchema(schema) {
return schema.optional();
}
function isTimeZone(value) {
try {
new Intl.DateTimeFormat('en', { timeZone: value });
return true;
}
catch {
return false;
}
}
function isLocale(value) {
try {
return Intl.getCanonicalLocales(value).length === 1;
}
catch {
return false;
}
}
const dateSchema = makeSchema({ kind: 'date', format: 'date-time' }, (value, path) => {
if (value instanceof Date) {
return Number.isNaN(value.getTime())
? fail(path, expected('a valid Date', value))
: pass(value);
}
if (typeof value === 'string' || typeof value === 'number') {
const parsed = new Date(value);
return Number.isNaN(parsed.getTime())
? fail(path, expected('an ISO-8601 date-time', value))
: pass(parsed);
}
return fail(path, expected('an ISO-8601 date-time', value));
});
const moneySchema = makeSchema({
kind: 'money',
description: 'integer minor units plus an ISO 4217 currency code',
properties: {
minor: { kind: 'number', integer: true },
currency: { kind: 'string', pattern: CURRENCY_RE.source },
},
}, (value, path) => {
if (!isPlainObject(value))
return fail(path, expected('a Money object', value));
const minor = value['minor'];
const currency = value['currency'];
const issues = [];
if (typeof minor !== 'number' || !Number.isInteger(minor)) {
issues.push({
message: expected('an integer number of minor units', minor),
path: [...path, 'minor'],
});
}
if (typeof currency !== 'string' || !CURRENCY_RE.test(currency)) {
issues.push({
message: expected('a 3-letter ISO 4217 code', currency),
path: [...path, 'currency'],
});
}
if (issues.length > 0)
return failWith(issues);
return pass({ minor: minor, currency: currency });
});
export const builtinT = Object.freeze({
string: makeStringSchema({ kind: 'string', minLength: 1 }, 'a non-empty string'),
number: makeNumberSchema({ kind: 'number' }),
boolean: makeSchema({ kind: 'boolean' }, (value, path) => typeof value === 'boolean' ? pass(value) : fail(path, expected('a boolean', value))),
uuid: makeStringSchema({ kind: 'string', format: 'uuid' }, 'a uuid', (value) => UUID_RE.test(value)),
email: makeStringSchema({ kind: 'string', format: 'email' }, 'an email address', (value) => EMAIL_RE.test(value)),
url: makeStringSchema({ kind: 'string', format: 'uri' }, 'an absolute URL', (value) => URL.canParse(value)),
date: dateSchema,
money: moneySchema,
timezone: makeStringSchema({ kind: 'string', format: 'timezone' }, 'an IANA time zone', isTimeZone),
locale: makeStringSchema({ kind: 'string', format: 'locale' }, 'a BCP-47 locale', isLocale),
slug: makeStringSchema({ kind: 'string', format: 'slug', pattern: SLUG_RE.source }, 'a slug'),
cursor: makeStringSchema({ kind: 'string', format: 'cursor', pattern: CURSOR_RE.source }, 'an opaque base64url cursor'),
object: objectSchema,
array: arraySchema,
enum: enumSchema,
enumerated: (...values) => enumSchema(values),
literal: literalSchema,
union: unionSchema,
record: recordSchema,
nullable: nullableSchema,
optional: optionalSchema,
});
//# sourceMappingURL=validators.js.map
{"version":3,"file":"validators.js","sourceRoot":"","sources":["validators.ts"],"names":[],"mappings":"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"}