@cyber-rom/nestjs-scylladb
Version:
Based on https://www.npmjs.com/package/@ouato/nestjs-express-cassandra With support columns name mapping
144 lines • 6.58 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addHookFunction = exports.addOptions = exports.setOptions = exports.getOptions = exports.addAttributeOptions = exports.addAttribute = exports.hasAttribute = exports.setTransformMapping = exports.setPropertyMapping = exports.setColumnMapping = exports.getPropertyName = exports.getColumnName = exports.getPropertiesMapper = exports.getColumnsMapper = exports.setAttributes = exports.getAttributes = exports.getEntityName = exports.setEntityName = exports.getEntity = exports.setEntity = void 0;
require("reflect-metadata");
const common_1 = require("@nestjs/common");
const deep_merge_utils_1 = require("./deep-merge.utils");
const orm_constant_1 = require("../orm.constant");
function setEntity(target, entity) {
Reflect.defineMetadata(orm_constant_1.ENTITY_METADATA, entity, target);
}
exports.setEntity = setEntity;
function getEntity(target) {
return Reflect.getMetadata(orm_constant_1.ENTITY_METADATA, target);
}
exports.getEntity = getEntity;
function setEntityName(target, modelName) {
Reflect.defineMetadata(orm_constant_1.ENTITY_NAME_KEY, modelName, target);
}
exports.setEntityName = setEntityName;
function getEntityName(target) {
return Reflect.getMetadata(orm_constant_1.ENTITY_NAME_KEY, target);
}
exports.getEntityName = getEntityName;
function getAttributes(target) {
const attributes = Reflect.getMetadata(orm_constant_1.ATTRIBUTE_KEY, target);
if (attributes) {
return Object.keys(attributes).reduce((copy, key) => {
copy[key] = Object.assign({}, attributes[key]);
return copy;
}, {});
}
}
exports.getAttributes = getAttributes;
function setAttributes(target, attributes) {
Reflect.defineMetadata(orm_constant_1.ATTRIBUTE_KEY, Object.assign({}, attributes), target);
}
exports.setAttributes = setAttributes;
function getColumnsMapper(target) {
return Reflect.getMetadata(orm_constant_1.COLUMNS_MAPPER_KEY, target) || {};
}
exports.getColumnsMapper = getColumnsMapper;
function getPropertiesMapper(target) {
return Reflect.getMetadata(orm_constant_1.PROPERTIES_MAPPER_KEY, target) || {};
}
exports.getPropertiesMapper = getPropertiesMapper;
function getColumnName(target, propertyName, def) {
const mapper = getColumnsMapper(target);
if (propertyName in mapper) {
return mapper[propertyName];
}
return def || propertyName;
}
exports.getColumnName = getColumnName;
function getPropertyName(target, columnName, def) {
const mapper = getPropertiesMapper(target);
if (columnName in mapper) {
return mapper[columnName];
}
return def || columnName;
}
exports.getPropertyName = getPropertyName;
function setColumnMapping(target, propertyName, columnName) {
if (!propertyName || !columnName || propertyName === columnName) {
return;
}
const mapper = getColumnsMapper(target);
if (propertyName in mapper && mapper[propertyName]) {
common_1.Logger.warn(`Columns mapper already constrain propertyName "${propertyName}"`, undefined, 'ScyllaModule');
}
Reflect.defineMetadata(orm_constant_1.COLUMNS_MAPPER_KEY, Object.assign(Object.assign({}, mapper), { [propertyName]: columnName }), target);
}
exports.setColumnMapping = setColumnMapping;
function setPropertyMapping(target, propertyName, columnName) {
if (!propertyName || !columnName || propertyName === columnName) {
return;
}
const mapper = getPropertiesMapper(target);
if (columnName in mapper && mapper[propertyName]) {
common_1.Logger.warn(`Columns mapper already constrain columnName "${columnName}"`, undefined, 'ScyllaModule');
}
Reflect.defineMetadata(orm_constant_1.PROPERTIES_MAPPER_KEY, Object.assign(Object.assign({}, mapper), { [columnName]: propertyName }), target);
}
exports.setPropertyMapping = setPropertyMapping;
function setTransformMapping(target, propertyName, columnName) {
setPropertyMapping(target, propertyName, columnName);
setColumnMapping(target, propertyName, columnName);
}
exports.setTransformMapping = setTransformMapping;
function hasAttribute(target, propertyName) {
const attributes = getAttributes(target), columnName = getColumnName(target, propertyName);
return attributes && columnName in attributes && attributes[columnName];
}
exports.hasAttribute = hasAttribute;
function addAttribute(target, propertyName, _a) {
var { name } = _a, options = __rest(_a, ["name"]);
const attributes = getAttributes(target) || {};
if (name) {
setTransformMapping(target, propertyName, name);
}
setAttributes(target, Object.assign(Object.assign({}, attributes), { [name || propertyName]: Object.assign({}, (options || {})) }));
}
exports.addAttribute = addAttribute;
function addAttributeOptions(target, propertyName, _a) {
var { name } = _a, options = __rest(_a, ["name"]);
const attributes = getAttributes(target) || {};
const columnName = getColumnName(target, propertyName, name);
if (columnName in attributes) {
attributes[columnName] = (0, deep_merge_utils_1.mergeDeep)(attributes[columnName], options);
}
else {
attributes[columnName] = options;
}
setAttributes(target, attributes);
}
exports.addAttributeOptions = addAttributeOptions;
function getOptions(target) {
return Object.assign({}, (Reflect.getMetadata(orm_constant_1.OPTIONS_KEY, target) || {}));
}
exports.getOptions = getOptions;
function setOptions(target, options) {
Reflect.defineMetadata(orm_constant_1.OPTIONS_KEY, Object.assign({}, options), target);
}
exports.setOptions = setOptions;
function addOptions(target, options) {
setOptions(target, (0, deep_merge_utils_1.mergeDeep)(getOptions(target) || {}, options));
}
exports.addOptions = addOptions;
const addHookFunction = (target, metadataKey) => {
const funcLikeArray = Reflect.getMetadata(metadataKey, target) || [];
return (...args) => funcLikeArray.map((funcLike) => funcLike(...args));
};
exports.addHookFunction = addHookFunction;
//# sourceMappingURL=decorator.utils.js.map