@gftdcojp/gftd-orm
Version:
Enterprise-grade real-time data platform with ksqlDB, inspired by Supabase architecture
63 lines • 1.66 kB
JavaScript
;
/**
* Schema 定義層 - defineSchema() で TypeScript 型→Avro Schema 生成&登録
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.defineSchema = defineSchema;
exports.getSchema = getSchema;
exports.getAllSchemas = getAllSchemas;
exports.clearSchemaRegistry = clearSchemaRegistry;
/**
* スキーマ定義のレジストリ
*/
const schemaRegistry = new Map();
/**
* スキーマ定義関数 - 設計案の通り
*/
function defineSchema(name, fields) {
// Avro Schema を生成
const avroFields = Object.entries(fields).map(([fieldName, fieldType]) => {
const definition = fieldType.getDefinition();
const avroField = {
name: fieldName,
type: fieldType.toAvroType(),
};
// デフォルト値があれば追加
if (definition.default !== undefined) {
avroField.default = definition.default;
}
return avroField;
});
const avroSchema = {
type: 'record',
name,
fields: avroFields,
};
const schemaDefinition = {
name,
fields,
avroSchema,
};
// レジストリに登録
schemaRegistry.set(name, schemaDefinition);
return schemaDefinition;
}
/**
* 登録済みスキーマを取得
*/
function getSchema(name) {
return schemaRegistry.get(name);
}
/**
* 全スキーマを取得
*/
function getAllSchemas() {
return Array.from(schemaRegistry.values());
}
/**
* スキーマレジストリをクリア(テスト用)
*/
function clearSchemaRegistry() {
schemaRegistry.clear();
}
//# sourceMappingURL=schema.js.map