@gftdcojp/gftd-orm
Version:
Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture
79 lines • 1.98 kB
TypeScript
/**
* 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