UNPKG

juniper

Version:

ESM JSON Schema builder for static Typescript inference.

44 lines 2.29 kB
import { AbstractSchema, type ConditionalResult, type SchemaGenerics, type SchemaParams } from '../lib/schema.js'; import type { Schema, SchemaType } from '../lib/types.js'; type AnyMergeSchema = MergeSchema<any>; /** * Schema for defining "merged" `anyOf` + `oneOf` sub-schemas. * * Useful when defining possibly overlapping schemas (as opposed to `oneOf` for a single type). * * Current typing is not able to detect duplicate/overlap types. Users must take caution * when merging types (e.g. multiple `nullable` schemas effectively makes `null` an invalid type). * * Similarly typescript types are not mutually exclusive. * e.g. `{ foo: 1, bar: 2 }` fulfills type `{ foo: number } | { bar: number }`; * * This schema without any conditions is effectively an `unknown` schema, allowing everything * to validate. * * @template T */ export declare class MergeSchema<T> extends AbstractSchema<SchemaGenerics<T>> { allOf: <S extends Schema<unknown>>(this: AnyMergeSchema, schema: S) => MergeSchema<SchemaType<S> & T>; anyOf: <S extends Schema<unknown>>(this: AnyMergeSchema, schemas: S[]) => MergeSchema<SchemaType<S> & T>; if: <If extends AbstractSchema<SchemaGenerics<unknown>>, Then extends AbstractSchema<SchemaGenerics<unknown>>, Else extends AbstractSchema<SchemaGenerics<unknown>>>(this: AnyMergeSchema, schema: If, conditionals: ConditionalResult<Then, Else>) => MergeSchema<T & (SchemaType<Else> | (SchemaType<If> & SchemaType<Then>))>; not: (this: AnyMergeSchema, schemas: Schema<unknown>) => this; /** * Not applicable. */ nullable: never; oneOf: <S extends Schema<unknown>>(this: AnyMergeSchema, schemas: S[]) => MergeSchema<SchemaType<S> & T>; /** * Create a new instance of MergeSchema. * * @param [options] - schemas or options object * @param [options.title] - Add title to schema * @param [options.description] - Add description to schema * @param [options.deprecated] - flag schema as deprecated * @param [options.readOnly] - value should not be modified * @param [options.writeOnly] - value should be hidden * @returns object schema */ static create(this: void, options?: SchemaParams<unknown>): MergeSchema<unknown>; } export {}; //# sourceMappingURL=merge.d.ts.map