lambdaorm-base
Version:
224 lines • 8.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrmBaseH3lp = exports.UUIDWrapper = exports.QueryHelper = exports.YamlWrapper = void 0;
const _3xpr_1 = require("3xpr");
const infrastructure_1 = require("../../schema/infrastructure");
const domain_1 = require("../../schema/domain");
const YAML = require('js-yaml');
const UUID = require('uuid');
const SqlString = require('sqlstring');
const LUXON = require('luxon');
class YamlWrapper {
load(yaml) {
if (!yaml)
return undefined;
return YAML.load(yaml);
}
dump(obj, options) {
return YAML.dump(obj, options);
}
}
exports.YamlWrapper = YamlWrapper;
class QueryHelper {
// eslint-disable-next-line no-useless-constructor
constructor(str) {
this.str = str;
}
escapeId(name) {
return SqlString.escapeId(name);
}
escape(name) {
return SqlString.escape(name);
}
arrayToList(array, timeZone) {
return SqlString.arrayToList(array, timeZone);
}
format(sql, values, stringifyObjects, timeZone) {
return SqlString.format(sql, values, stringifyObjects, timeZone);
}
dateToString(date, timeZone = 'local') {
return SqlString.dateToString(date, timeZone);
}
dateFormat(value, format = 'iso') {
if (!format) {
throw new Error('Format is required');
}
if (!value) {
throw new Error('Value is required');
}
const date = value instanceof Date ? value : new Date(value);
const _format = format.toLowerCase();
if (_format === 'utc') {
return date.toISOString();
}
else if (_format === 'utc-without-ms') {
return date.toISOString().replace(/\.\d{3}Z$/, '.000Z');
}
else if (_format === 'utc-date') {
return new Date(LUXON.DateTime.fromJSDate(date).toFormat('yyyy-MM-dd 00:00:00')).toISOString();
}
else if (_format === 'iso') {
return LUXON.DateTime.fromJSDate(date).toISO();
}
else {
return LUXON.DateTime.fromJSDate(date).toFormat(format);
}
}
bufferToString(buffer) {
return SqlString.bufferToString(buffer);
}
raw(sql) {
return SqlString.raw(sql);
}
transformParameter(name) {
return this.str.replace(name, '.', '_');
// con la siguiente opción falla cuando se hace value=Helper.str.replace(value,"\\'","\\''")
// return string.replace(new RegExp(search, 'g'), replace)
}
getSentenceType(action) {
switch (action) {
case domain_1.SentenceAction.select:
return domain_1.SentenceType.dql;
case domain_1.SentenceAction.objects:
case domain_1.SentenceAction.tables:
case domain_1.SentenceAction.views:
case domain_1.SentenceAction.foreignKeys:
case domain_1.SentenceAction.primaryKeys:
case domain_1.SentenceAction.uniqueKeys:
case domain_1.SentenceAction.indexes:
case domain_1.SentenceAction.sequences:
case domain_1.SentenceAction.partitions:
return domain_1.SentenceType.metadata;
case domain_1.SentenceAction.insert:
case domain_1.SentenceAction.insertConditional:
case domain_1.SentenceAction.bulkInsert:
case domain_1.SentenceAction.bulkDelete:
case domain_1.SentenceAction.update:
case domain_1.SentenceAction.delete:
case domain_1.SentenceAction.merge:
case domain_1.SentenceAction.bulkMerge:
case domain_1.SentenceAction.upsert:
return domain_1.SentenceType.dml;
case domain_1.SentenceAction.truncateEntity:
case domain_1.SentenceAction.createEntity:
case domain_1.SentenceAction.createSequence:
case domain_1.SentenceAction.createFk:
case domain_1.SentenceAction.createIndex:
case domain_1.SentenceAction.alterProperty:
case domain_1.SentenceAction.addProperty:
case domain_1.SentenceAction.addPk:
case domain_1.SentenceAction.addUk:
case domain_1.SentenceAction.addFk:
case domain_1.SentenceAction.dropSequence:
case domain_1.SentenceAction.dropEntity:
case domain_1.SentenceAction.dropProperty:
case domain_1.SentenceAction.dropPk:
case domain_1.SentenceAction.dropUk:
case domain_1.SentenceAction.dropFk:
case domain_1.SentenceAction.dropIndex:
return domain_1.SentenceType.ddl;
default:
throw new Error(`Invalid action ${action}`);
}
}
getSentenceCategory(action) {
switch (action) {
case domain_1.SentenceAction.select:
case domain_1.SentenceAction.objects:
case domain_1.SentenceAction.tables:
case domain_1.SentenceAction.views:
case domain_1.SentenceAction.foreignKeys:
case domain_1.SentenceAction.primaryKeys:
case domain_1.SentenceAction.uniqueKeys:
case domain_1.SentenceAction.indexes:
case domain_1.SentenceAction.sequences:
case domain_1.SentenceAction.partitions:
return domain_1.SentenceCategory.select;
case domain_1.SentenceAction.insert:
case domain_1.SentenceAction.insertConditional:
case domain_1.SentenceAction.bulkInsert:
return domain_1.SentenceCategory.insert;
case domain_1.SentenceAction.bulkDelete:
case domain_1.SentenceAction.delete:
return domain_1.SentenceCategory.delete;
case domain_1.SentenceAction.update:
return domain_1.SentenceCategory.update;
case domain_1.SentenceAction.merge:
case domain_1.SentenceAction.bulkMerge:
case domain_1.SentenceAction.upsert:
return domain_1.SentenceCategory.upsert;
case domain_1.SentenceAction.truncateEntity:
return domain_1.SentenceCategory.truncate;
case domain_1.SentenceAction.createEntity:
case domain_1.SentenceAction.createSequence:
case domain_1.SentenceAction.createFk:
case domain_1.SentenceAction.createIndex:
return domain_1.SentenceCategory.create;
case domain_1.SentenceAction.alterProperty:
return domain_1.SentenceCategory.alter;
case domain_1.SentenceAction.addProperty:
case domain_1.SentenceAction.addPk:
case domain_1.SentenceAction.addUk:
case domain_1.SentenceAction.addFk:
return domain_1.SentenceCategory.add;
case domain_1.SentenceAction.dropSequence:
case domain_1.SentenceAction.dropEntity:
case domain_1.SentenceAction.dropProperty:
case domain_1.SentenceAction.dropPk:
case domain_1.SentenceAction.dropUk:
case domain_1.SentenceAction.dropFk:
case domain_1.SentenceAction.dropIndex:
return domain_1.SentenceCategory.drop;
case domain_1.SentenceAction.undefined:
return domain_1.SentenceCategory.undefined;
default:
throw new Error(`Invalid action ${action}`);
}
}
getInfo(action, entity, type) {
const category = this.getSentenceCategory(action);
const _type = type || this.getSentenceType(action);
return {
entity,
action,
category,
type: _type,
// for retro-compatibility
read: category === domain_1.SentenceCategory.select,
write: category !== domain_1.SentenceCategory.select,
ddl: _type === domain_1.SentenceType.ddl,
dml: _type === domain_1.SentenceType.dml || _type === domain_1.SentenceType.dql
};
}
}
exports.QueryHelper = QueryHelper;
class UUIDWrapper {
v4() {
return UUID.v4();
}
isUuid(id) {
return UUID.isUuid(id);
}
empty() {
return UUID.empty();
}
fromString(text, namespace) {
return UUID.fromString(text, namespace);
}
jsonSchema() {
return UUID.jsonSchema();
}
}
exports.UUIDWrapper = UUIDWrapper;
class OrmBaseH3lp extends _3xpr_1.ExprH3lp {
constructor(h3lp, logger) {
super(h3lp);
this.logger = logger;
this.schema = new infrastructure_1.SchemaHelper(this.str);
this.yaml = new YamlWrapper();
this.query = new QueryHelper(h3lp.str);
this.uuid = new UUIDWrapper();
}
}
exports.OrmBaseH3lp = OrmBaseH3lp;
//# sourceMappingURL=helper.js.map