import type { ArkRegistry, requireKeys, show } from "@ark/util"; import type { intrinsic } from "./intrinsic.ts"; import type { nodesByRegisteredId } from "./parse.ts"; import type { TypeMeta } from "./shared/declare.ts"; import type { ActualConfig, ArkErrorCode, ArkErrors, ExpectedConfig, MessageConfig, ProblemConfig } from "./shared/errors.ts"; import { type DescriptionWriter, type NodeKind } from "./shared/implement.ts"; import { ToJsonSchema } from "./shared/toJsonSchema.ts"; import type { UndeclaredKeyBehavior } from "./structure/structure.ts"; export interface ArkSchemaRegistry extends ArkRegistry { intrinsic: typeof intrinsic; config: ArkSchemaConfig; defaultConfig: ResolvedConfig; resolvedConfig: ResolvedConfig; nodesByRegisteredId: typeof nodesByRegisteredId; } type nodeConfigForKind = Readonly; } & (kind extends ArkErrorCode ? { expected?: ExpectedConfig; actual?: ActualConfig; problem?: ProblemConfig; message?: MessageConfig; } : {})>>; type NodeConfigsByKind = { [kind in NodeKind]: nodeConfigForKind; }; export type NodeConfig = NodeConfigsByKind[kind]; export interface UnknownErrorConfigs { expected?: ExpectedConfig; actual?: ActualConfig; problem?: ProblemConfig; message?: MessageConfig; } interface UnknownNodeConfig extends UnknownErrorConfigs { description?: DescriptionWriter; } export type ResolvedUnknownNodeConfig = requireKeys; export declare const configureSchema: (config: ArkSchemaConfig) => ArkSchemaConfig; export declare const mergeConfigs: (base: base, merged: ArkSchemaConfig | undefined) => base; type MergeToJsonSchemaConfigs = (baseConfig: base, mergedConfig: ToJsonSchema.Options | undefined) => base extends ToJsonSchema.Context ? ToJsonSchema.Context : ToJsonSchema.Options; export declare const mergeToJsonSchemaConfigs: MergeToJsonSchemaConfigs; export type CloneImplementation = (original: original) => original; export interface ArkSchemaConfig extends Partial> { readonly jitless?: boolean; readonly clone?: boolean | CloneImplementation; readonly onUndeclaredKey?: UndeclaredKeyBehavior; readonly numberAllowsNaN?: boolean; readonly dateAllowsInvalid?: boolean; readonly exactOptionalPropertyTypes?: boolean; readonly onFail?: ArkErrors.Handler | null; readonly keywords?: Record; readonly toJsonSchema?: ToJsonSchema.Options; } export type resolveConfig = show<{ [k in keyof ArkSchemaConfig]-?: k extends NodeKind ? Required : k extends "clone" ? CloneImplementation | false : k extends "keywords" ? Record : k extends "toJsonSchema" ? ToJsonSchema.Context : config[k]; } & Omit>; export type ResolvedConfig = resolveConfig; export {};