UNPKG

@gftdcojp/gftd-orm

Version:

Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture

79 lines 1.98 kB
/** * Schema 定義層 - defineSchema() で TypeScript 型→Avro Schema 生成&登録 */ import { BaseFieldType } from './field-types'; import { AvroSchema } from './types'; export interface SchemaDefinition { name: string; fields: Record<string, BaseFieldType>; avroSchema: AvroSchema; } /** * TypeScript スキーマからインデックス型を生成 */ export type InferSchemaType<T extends Record<string, BaseFieldType>> = { [K in keyof T]: InferFieldType<T[K]>; }; /** * フィールド型からTypeScript型を推論 */ export type InferFieldType<T extends BaseFieldType> = T extends { definition: { type: 'string'; }; } ? string : T extends { definition: { type: 'int'; }; } ? number : T extends { definition: { type: 'long'; }; } ? number : T extends { definition: { type: 'double'; }; } ? number : T extends { definition: { type: 'boolean'; }; } ? boolean : T extends { definition: { logicalType: 'uuid'; }; } ? string : T extends { definition: { logicalType: 'timestamp-millis'; }; } ? Date : T extends { definition: { logicalType: 'date'; }; } ? Date : T extends { definition: { logicalType: 'time-millis'; }; } ? Date : T extends { definition: { logicalType: 'decimal'; }; } ? number : any; /** * スキーマ定義関数 - 設計案の通り */ export declare function defineSchema<T extends Record<string, BaseFieldType>>(name: string, fields: T): SchemaDefinition & { type: InferSchemaType<T>; }; /** * 登録済みスキーマを取得 */ export declare function getSchema(name: string): SchemaDefinition | undefined; /** * 全スキーマを取得 */ export declare function getAllSchemas(): SchemaDefinition[]; /** * スキーマレジストリをクリア(テスト用) */ export declare function clearSchemaRegistry(): void; //# sourceMappingURL=schema.d.ts.map