Libraries
    Preparing search index...

    Type Alias JsonSchemaNodeToBuilder<S, TRequired>

    JsonSchemaNodeToBuilder: S extends { const: infer V }
        ? ConstToBuilder<V, TRequired>
        : S extends { enum: infer Vals extends readonly unknown[] }
            ? UnionSchemaBuilder<EnumTupleToBuilders<Vals>, TRequired>
            : S extends { anyOf: infer Opts extends readonly unknown[] }
                ? UnionSchemaBuilder<SchemaNodesTupleToBuilders<Opts>, TRequired>
                : S extends { allOf: infer _Opts extends readonly unknown[] }
                    ? SchemaBuilder<unknown, TRequired>
                    : S extends { type: "string" }
                        ? ExtendedStringBuilder<string, TRequired>
                        : S extends { type: "number" }
                            ? ExtendedNumberBuilder<number, TRequired>
                            : S extends { type: "integer" }
                                ? ExtendedNumberBuilder<number, TRequired>
                                : S extends { type: "boolean" }
                                    ? BooleanSchemaBuilder<boolean, TRequired>
                                    : S extends { type: "null" }
                                        ? SchemaBuilder<null, TRequired>
                                        : S extends { items: ...; type: ... }
                                            ? ExtendedArrayBuilder<(...), (...)>
                                            : (...) extends (...) ? (...) : (...)

    Recursively maps a statically-known JSON Schema node (passed with as const) to the exact @cleverbrush/schema builder type, including:

    • StringSchemaBuilder, NumberSchemaBuilder, BooleanSchemaBuilder for primitive types and const literals
    • ArraySchemaBuilder<ElementBuilder> with the element builder inferred from items
    • ObjectSchemaBuilder<PropertyDescriptors> where each property is a typed builder with TRequired = true/false driven by the required array
    • UnionSchemaBuilder<[...Builders]> for enum and anyOf

    Type Parameters

    • S

      The JSON Schema node type (inferred from as const).

    • TRequired extends boolean = true

      Whether this node represents a required (true) or optional (false) value in its parent context. Defaults to true.

    import { fromJsonSchema } from '@cleverbrush/schema-json';
    import type { JsonSchemaNodeToBuilder } from '@cleverbrush/schema-json';

    const S = {
    type: 'object',
    properties: {
    name: { type: 'string' },
    score: { type: 'number' },
    },
    required: ['name'],
    } as const;

    type Builder = JsonSchemaNodeToBuilder<typeof S>;
    // ObjectSchemaBuilder<
    // { name: ExtendedStringBuilder<string, true> } &
    // { score: ExtendedNumberBuilder<number, false> }
    // >

    const schema = fromJsonSchema(S);
    // TypeScript knows schema is ObjectSchemaBuilder<...>
    // with full intellisense on .parse(), .addProp(), etc.