UNPKG

@iarayan/ch-orm

Version:

A Developer-First ClickHouse ORM with Powerful CLI Tools

300 lines 7.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MetadataStorage = void 0; exports.Table = Table; exports.Column = Column; exports.PrimaryKey = PrimaryKey; exports.StringColumn = StringColumn; exports.UInt32Column = UInt32Column; exports.UInt64Column = UInt64Column; exports.Int32Column = Int32Column; exports.Int64Column = Int64Column; exports.Float32Column = Float32Column; exports.Float64Column = Float64Column; exports.BooleanColumn = BooleanColumn; exports.DateColumn = DateColumn; exports.DateTimeColumn = DateTimeColumn; exports.UUIDColumn = UUIDColumn; exports.ArrayColumn = ArrayColumn; exports.NullableColumn = NullableColumn; exports.JSONColumn = JSONColumn; const Types_1 = require("../constants/Types"); /** * Storage for metadata about models and their columns */ exports.MetadataStorage = { /** * Map of model constructors to table names */ tables: new Map(), /** * Map of model constructors to primary key column names */ primaryKeys: new Map(), /** * Map of model constructors to column definitions */ columns: new Map(), /** * Get table name for a model * @param target - Model constructor * @returns Table name or undefined if not set */ getTableName(target) { return this.tables.get(target); }, /** * Set table name for a model * @param target - Model constructor * @param name - Table name */ setTableName(target, name) { this.tables.set(target, name); }, /** * Get primary keys for a model * @param target - Model constructor * @returns Array of primary key column names */ getPrimaryKeys(target) { return this.primaryKeys.get(target) || []; }, /** * Add a primary key to a model * @param target - Model constructor * @param propertyName - Primary key property name */ addPrimaryKey(target, propertyName) { const keys = this.primaryKeys.get(target) || []; keys.push(propertyName); this.primaryKeys.set(target, keys); }, /** * Get column metadata for a model * @param target - Model constructor * @returns Map of property names to column metadata */ getColumns(target) { if (!this.columns.has(target)) { this.columns.set(target, new Map()); } return this.columns.get(target); }, /** * Add column metadata to a model * @param target - Model constructor * @param propertyName - Property name * @param metadata - Column metadata */ addColumn(target, propertyName, metadata) { const columns = this.getColumns(target); columns.set(propertyName, metadata); }, }; /** * Table decorator * @param name - Table name * @returns Class decorator */ function Table(name) { return function (target) { exports.MetadataStorage.setTableName(target, name); return target; }; } /** * Column decorator factory * @param options - Column options * @returns Property decorator */ function Column(options) { return function (target, propertyKey) { const constructor = target.constructor; const propertyName = propertyKey.toString(); exports.MetadataStorage.addColumn(constructor, propertyName, { propertyName, name: options.name || propertyName, type: options.type.toString(), primary: options.primary, nullable: options.nullable, defaultExpression: options.defaultExpression, comment: options.comment, codec: options.codec, ttl: options.ttl, }); // If the column is a primary key, add it to the primary keys list if (options.primary) { exports.MetadataStorage.addPrimaryKey(constructor, propertyName); } }; } /** * PrimaryKey decorator * @param options - Column options (optional) * @returns Property decorator */ function PrimaryKey(options = {}) { return Column({ ...options, primary: true, type: options.type || Types_1.DataTypes.STRING, }); } /** * String column decorator * @param options - Column options (optional) * @returns Property decorator */ function StringColumn(options = {}) { return Column({ ...options, type: Types_1.DataTypes.STRING, }); } /** * UInt32 column decorator * @param options - Column options (optional) * @returns Property decorator */ function UInt32Column(options = {}) { return Column({ ...options, type: Types_1.DataTypes.UINT32, }); } /** * UInt64 column decorator * @param options - Column options (optional) * @returns Property decorator */ function UInt64Column(options = {}) { return Column({ ...options, type: Types_1.DataTypes.UINT64, }); } /** * Int32 column decorator * @param options - Column options (optional) * @returns Property decorator */ function Int32Column(options = {}) { return Column({ ...options, type: Types_1.DataTypes.INT32, }); } /** * Int64 column decorator * @param options - Column options (optional) * @returns Property decorator */ function Int64Column(options = {}) { return Column({ ...options, type: Types_1.DataTypes.INT64, }); } /** * Float32 column decorator * @param options - Column options (optional) * @returns Property decorator */ function Float32Column(options = {}) { return Column({ ...options, type: Types_1.DataTypes.FLOAT32, }); } /** * Float64 column decorator * @param options - Column options (optional) * @returns Property decorator */ function Float64Column(options = {}) { return Column({ ...options, type: Types_1.DataTypes.FLOAT64, }); } /** * Boolean column decorator * @param options - Column options (optional) * @returns Property decorator */ function BooleanColumn(options = {}) { return Column({ ...options, type: Types_1.DataTypes.BOOLEAN, }); } /** * Date column decorator * @param options - Column options (optional) * @returns Property decorator */ function DateColumn(options = {}) { return Column({ ...options, type: Types_1.DataTypes.DATE, }); } /** * DateTime column decorator * @param options - Column options (optional) * @returns Property decorator */ function DateTimeColumn(options = {}) { return Column({ ...options, type: Types_1.DataTypes.DATETIME, }); } /** * UUID column decorator * @param options - Column options (optional) * @returns Property decorator */ function UUIDColumn(options = {}) { return Column({ ...options, type: Types_1.DataTypes.UUID, }); } /** * Array column decorator * @param subType - Array element type * @param options - Column options (optional) * @returns Property decorator */ function ArrayColumn(subType, options = {}) { return Column({ ...options, type: `${Types_1.DataTypes.ARRAY}(${subType})`, }); } /** * Nullable column decorator * @param subType - Base type * @param options - Column options (optional) * @returns Property decorator */ function NullableColumn(subType, options = {}) { return Column({ ...options, type: `${Types_1.DataTypes.NULLABLE}(${subType})`, nullable: true, }); } /** * JSON column decorator * @param options - Column options (optional) * @returns Property decorator */ function JSONColumn(options = {}) { return Column({ ...options, type: Types_1.DataTypes.JSON, }); } //# sourceMappingURL=ModelDecorators.js.map