UNPKG

lambdaorm-base

Version:
224 lines 8.88 kB
"use strict"; 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