All files / blong-browser/src/types schema.ts

0% Statements 0/53
0% Branches 0/1
0% Functions 0/1
0% Lines 0/53

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                                                                                                           
/**
 * Schema registry type definitions.
 */
import type {IEnrichedSchema} from '@feasibleone/blong';

/** Schema fetcher function — resolves a schema by name */
export type SchemaFetcher = (name?: string) => Promise<ISchemaDocument>;

/** OpenAPI document shape (minimal) */
export interface ISchemaDocument {
    openapi?: string;
    info?: {title: string; version: string};
    components?: {
        schemas?: Record<string, IJsonSchemaExtended>;
    };
    paths?: Record<string, unknown>;
}

/** JSON Schema object */
export interface IJsonSchemaExtended {
    title?: string;
    description?: string;
    type?: string;
    properties?: Record<string, IJsonSchemaExtended>;
    required?: string[];
    items?: IJsonSchemaExtended;
    minLength?: number;
    maxLength?: number;
    minimum?: number;
    maximum?: number;
    pattern?: string;
    enum?: unknown[];
    readOnly?: boolean;
    'x-filter'?: boolean;
    'x-sort'?: boolean;
    'x-cards'?: string[];
    'x-widget'?: Record<string, unknown>;
    [key: string]: unknown;
}

/** Schema registry interface */
export interface ISchemaRegistry {
    /** Fetch and cache schema document */
    load(url?: string): Promise<void>;
    /** Get enriched schema by name (e.g. 'model.tree') */
    get(name: string): IEnrichedSchema | undefined;
    /** Resolve schema by name — fetches if not cached */
    resolve(name: string): Promise<IEnrichedSchema>;
    /** Manually set a schema (for mocking) */
    set(name: string, schema: IEnrichedSchema): void;
    /** Check if schema is loaded */
    has(name: string): boolean;
}