@iarayan/ch-orm
Version:
A Developer-First ClickHouse ORM with Powerful CLI Tools
300 lines • 7.73 kB
JavaScript
;
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