Spaces:
Sleeping
Sleeping
| <h1 align="center"> | |
| <img alt="Standard Schema fire logo" loading="lazy" width="50" height="50" decoding="async" data-nimg="1" style="color:transparent" src="https://standardschema.dev/favicon.svg"> | |
| </br> | |
| Standard Schema</h1> | |
| <p align="center"> | |
| A family of specs for interoperable TypeScript | |
| <br/> | |
| <a href="https://standardschema.dev">standardschema.dev</a> | |
| </p> | |
| <br/> | |
| <!-- start --> | |
| The Standard Schema project is a set of interfaces that standardize the provision and consumption of shared functionality in the TypeScript ecosystem. | |
| Its goal is to allow tools to accept a single input that includes all the types and capabilities they need— no library-specific adapters, no extra dependencies. The result is an ecosystem that's fair for implementers, friendly for consumers, and open for end users. | |
| ## The specifications | |
| The specifications can be found below in their entirety. Libraries wishing to implement a spec can copy/paste the code block below into their codebase. They're also available at `@standard-schema/spec` on [npm](https://www.npmjs.com/package/@standard-schema/spec) and [JSR](https://jsr.io/@standard-schema/spec). | |
| ```ts | |
| // ######################### | |
| // ### Standard Typed ### | |
| // ######################### | |
| /** The Standard Typed interface. This is a base type extended by other specs. */ | |
| export interface StandardTypedV1<Input = unknown, Output = Input> { | |
| /** The Standard properties. */ | |
| readonly "~standard": StandardTypedV1.Props<Input, Output>; | |
| } | |
| export declare namespace StandardTypedV1 { | |
| /** The Standard Typed properties interface. */ | |
| export interface Props<Input = unknown, Output = Input> { | |
| /** The version number of the standard. */ | |
| readonly version: 1; | |
| /** The vendor name of the schema library. */ | |
| readonly vendor: string; | |
| /** Inferred types associated with the schema. */ | |
| readonly types?: Types<Input, Output> | undefined; | |
| } | |
| /** The Standard Typed types interface. */ | |
| export interface Types<Input = unknown, Output = Input> { | |
| /** The input type of the schema. */ | |
| readonly input: Input; | |
| /** The output type of the schema. */ | |
| readonly output: Output; | |
| } | |
| /** Infers the input type of a Standard Typed. */ | |
| export type InferInput<Schema extends StandardTypedV1> = NonNullable< | |
| Schema["~standard"]["types"] | |
| >["input"]; | |
| /** Infers the output type of a Standard Typed. */ | |
| export type InferOutput<Schema extends StandardTypedV1> = NonNullable< | |
| Schema["~standard"]["types"] | |
| >["output"]; | |
| } | |
| // ########################## | |
| // ### Standard Schema ### | |
| // ########################## | |
| /** The Standard Schema interface. */ | |
| export interface StandardSchemaV1<Input = unknown, Output = Input> { | |
| /** The Standard Schema properties. */ | |
| readonly "~standard": StandardSchemaV1.Props<Input, Output>; | |
| } | |
| export declare namespace StandardSchemaV1 { | |
| /** The Standard Schema properties interface. */ | |
| export interface Props<Input = unknown, Output = Input> | |
| extends StandardTypedV1.Props<Input, Output> { | |
| /** Validates unknown input values. */ | |
| readonly validate: ( | |
| value: unknown, | |
| options?: StandardSchemaV1.Options | undefined | |
| ) => Result<Output> | Promise<Result<Output>>; | |
| } | |
| /** The result interface of the validate function. */ | |
| export type Result<Output> = SuccessResult<Output> | FailureResult; | |
| /** The result interface if validation succeeds. */ | |
| export interface SuccessResult<Output> { | |
| /** The typed output value. */ | |
| readonly value: Output; | |
| /** A falsy value for `issues` indicates success. */ | |
| readonly issues?: undefined; | |
| } | |
| export interface Options { | |
| /** Explicit support for additional vendor-specific parameters, if needed. */ | |
| readonly libraryOptions?: Record<string, unknown> | undefined; | |
| } | |
| /** The result interface if validation fails. */ | |
| export interface FailureResult { | |
| /** The issues of failed validation. */ | |
| readonly issues: ReadonlyArray<Issue>; | |
| } | |
| /** The issue interface of the failure output. */ | |
| export interface Issue { | |
| /** The error message of the issue. */ | |
| readonly message: string; | |
| /** The path of the issue, if any. */ | |
| readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined; | |
| } | |
| /** The path segment interface of the issue. */ | |
| export interface PathSegment { | |
| /** The key representing a path segment. */ | |
| readonly key: PropertyKey; | |
| } | |
| /** The Standard types interface. */ | |
| export interface Types<Input = unknown, Output = Input> | |
| extends StandardTypedV1.Types<Input, Output> {} | |
| /** Infers the input type of a Standard. */ | |
| export type InferInput<Schema extends StandardTypedV1> = | |
| StandardTypedV1.InferInput<Schema>; | |
| /** Infers the output type of a Standard. */ | |
| export type InferOutput<Schema extends StandardTypedV1> = | |
| StandardTypedV1.InferOutput<Schema>; | |
| } | |
| // ############################### | |
| // ### Standard JSON Schema ### | |
| // ############################### | |
| /** The Standard JSON Schema interface. */ | |
| export interface StandardJSONSchemaV1<Input = unknown, Output = Input> { | |
| /** The Standard JSON Schema properties. */ | |
| readonly "~standard": StandardJSONSchemaV1.Props<Input, Output>; | |
| } | |
| export declare namespace StandardJSONSchemaV1 { | |
| /** The Standard JSON Schema properties interface. */ | |
| export interface Props<Input = unknown, Output = Input> | |
| extends StandardTypedV1.Props<Input, Output> { | |
| /** Methods for generating the input/output JSON Schema. */ | |
| readonly jsonSchema: StandardJSONSchemaV1.Converter; | |
| } | |
| /** The Standard JSON Schema converter interface. */ | |
| export interface Converter { | |
| /** Converts the input type to JSON Schema. May throw if conversion is not supported. */ | |
| readonly input: ( | |
| options: StandardJSONSchemaV1.Options | |
| ) => Record<string, unknown>; | |
| /** Converts the output type to JSON Schema. May throw if conversion is not supported. */ | |
| readonly output: ( | |
| options: StandardJSONSchemaV1.Options | |
| ) => Record<string, unknown>; | |
| } | |
| /** | |
| * The target version of the generated JSON Schema. | |
| * | |
| * It is *strongly recommended* that implementers support `"draft-2020-12"` and `"draft-07"`, as they are both in wide use. All other targets can be implemented on a best-effort basis. Libraries should throw if they don't support a specified target. | |
| * | |
| * The `"openapi-3.0"` target is intended as a standardized specifier for OpenAPI 3.0 which is a superset of JSON Schema `"draft-04"`. | |
| */ | |
| export type Target = | |
| | "draft-2020-12" | |
| | "draft-07" | |
| | "openapi-3.0" | |
| // Accepts any string for future targets while preserving autocomplete | |
| | ({} & string); | |
| /** The options for the input/output methods. */ | |
| export interface Options { | |
| /** Specifies the target version of the generated JSON Schema. Support for all versions is on a best-effort basis. If a given version is not supported, the library should throw. */ | |
| readonly target: Target; | |
| /** Explicit support for additional vendor-specific parameters, if needed. */ | |
| readonly libraryOptions?: Record<string, unknown> | undefined; | |
| } | |
| /** The Standard types interface. */ | |
| export interface Types<Input = unknown, Output = Input> | |
| extends StandardTypedV1.Types<Input, Output> {} | |
| /** Infers the input type of a Standard. */ | |
| export type InferInput<Schema extends StandardTypedV1> = | |
| StandardTypedV1.InferInput<Schema>; | |
| /** Infers the output type of a Standard. */ | |
| export type InferOutput<Schema extends StandardTypedV1> = | |
| StandardTypedV1.InferOutput<Schema>; | |
| } | |
| ``` | |