UNPKG

shyft

Version:

Model driven GraphQL API framework

622 lines (621 loc) 35 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.StorageTypePostgres = exports.extendWithFromStateCheck = exports.preMutationPermissionCheckQueryGenerator = exports.transformFilterAttributeName = void 0; var __1 = require(".."); var storageDataTypes_1 = require("./storageDataTypes"); var dataloader_1 = __importDefault(require("dataloader")); var util_1 = require("./util"); var filter_1 = require("./filter"); var permission_1 = require("./permission"); var helpers_1 = require("./helpers"); var i18n_1 = require("./i18n"); var processOrmError = function (err, storageInstance, qBuilder, constraints) { if (String(err.code) === '23505') { var meta = void 0; if (constraints) { var constraintName = err.constraint; if (constraintName) { meta = constraints.unique[constraintName]; } } throw new __1.CustomError('Uniqueness constraint violated', 'UniqueConstraintError', null, meta); } else if (String(err.code) === '23503') { throw new __1.CustomError('Foreign key not found', 'ForeignKeyConstraintError'); } else if (String(err.code) === '22P02') { throw new __1.CustomError(err.message, 'InvalidInputSyntaxError'); } else if (String(err.code) === '23502') { throw new __1.CustomError(err.message, 'NotNullConstraintViolationError'); } else if (String(err.code) === '42703') { throw new __1.CustomError(err.message, 'UndefinedColumnError'); } storageInstance.logger.logQueryError(err.message, qBuilder.getSql()); throw new __1.CustomError('Undefined server error', 'UndefinedServerError', 500); }; var transformFilterAttributeName = function (context, entity, modelRegistry) { return i18n_1.i18nTransformFilterAttributeName(context, entity, modelRegistry); }; exports.transformFilterAttributeName = transformFilterAttributeName; var createDataLoader = function (context, entity, StorageTypePostgres) { var storageInstance = StorageTypePostgres.getStorageInstance(); var modelRegistry = StorageTypePostgres.getStorageModels(); var manager = storageInstance.manager; var loader = new dataloader_1.default(function (ids) { return __awaiter(void 0, void 0, void 0, function () { var entityName, _a, filterShaper, storageTableName, primaryAttributeName, permissionWhere, baseWhere, where, qBuilder, rows, data, err_1; var _b, _c; return __generator(this, function (_d) { switch (_d.label) { case 0: entityName = entity.name; _a = modelRegistry[entityName], filterShaper = _a.filterShaper, storageTableName = _a.storageTableName; primaryAttributeName = entity.getPrimaryAttribute().name; return [4 /*yield*/, permission_1.handlePermission(context, entity, permission_1.PERMISSION_TYPES.read)]; case 1: permissionWhere = _d.sent(); if (permissionWhere) { permissionWhere = filterShaper(permissionWhere); } baseWhere = { $and: [], }; if (ids.length === 1) { baseWhere.$and.push((_b = {}, _b[primaryAttributeName] = ids[0], _b)); } else { baseWhere.$and.push((_c = {}, _c[primaryAttributeName] = { $in: ids, }, _c)); } where = permission_1.applyPermission(baseWhere, permissionWhere); qBuilder = manager.createQueryBuilder(storageTableName, storageTableName); filter_1.buildWhereQuery(qBuilder, where, entityName, modelRegistry, true); _d.label = 2; case 2: _d.trys.push([2, 4, , 5]); return [4 /*yield*/, qBuilder.getMany()]; case 3: rows = _d.sent(); data = helpers_1.parseValuesMap(entity, rows, modelRegistry[entityName], context); // reorder results to match requested IDs order // https://github.com/facebook/dataloader/issues/66 return [2 /*return*/, __1.sortDataByKeys(ids, data, primaryAttributeName)]; case 4: err_1 = _d.sent(); processOrmError(err_1, storageInstance, qBuilder); return [3 /*break*/, 5]; case 5: return [2 /*return*/, null]; } }); }); }); return loader; }; var buildInstanceNotFoundError = function (id) { return new __1.CustomError("Instance with ID '" + id + "' not found", 'InstanceNotFound'); }; var buildInstanceNotFoundOrAccessDeniedError = function (id) { return new __1.CustomError("Instance with ID '" + id + "' not found or access denied", 'InstanceNotFoundOrAccessDenied'); }; var buildMutationDeniedError = function (mutationName) { return new __1.CustomError("Mutation '" + mutationName + "' denied", 'PermissionError', 403); }; var preMutationPermissionCheckQueryGenerator = function (StorageTypePostgres, permissionWhere, entityName, modelRegistry) { var storageInstance = StorageTypePostgres.getStorageInstance(); var manager = storageInstance.manager; var qBuilder = manager.createQueryBuilder().select().from(''); filter_1.buildWhereQuery(qBuilder, permissionWhere, entityName, modelRegistry); var _a = qBuilder.getQueryAndParameters(), query = _a[0], queryParams = _a[1]; return [query.replace(/ \* FROM {2}WHERE /, ' ') + " AS found", queryParams]; }; exports.preMutationPermissionCheckQueryGenerator = preMutationPermissionCheckQueryGenerator; var extendWithFromStateCheck = function (where, entity, entityMutation) { var fromState = entityMutation.fromState; var states = entity.getStates(); if (!fromState || !states) { return; } var fromStates = __1.isArray(fromState) ? fromState : [fromState]; var stateIds = fromStates.map(function (stateName) { return states[stateName]; }); where.$and.push({ state: { $in: stateIds, }, }); }; exports.extendWithFromStateCheck = extendWithFromStateCheck; exports.StorageTypePostgres = new __1.StorageType({ name: 'StorageTypePostgres', description: 'Postgres database storage type', findOne: function (entity, id, _args, context) { var entityName = entity.name; context.loaders = context.loaders || {}; var loaders = context.loaders; var loader = loaders[entityName]; if (!loader) { loader = loaders[entityName] = createDataLoader(context, entity, this); } return loader.load(id); }, findOneByValues: function (entity, args, context) { return __awaiter(this, void 0, void 0, function () { var storageInstance, manager, modelRegistry, entityName, loaders, loader, _a, filterShaper, storageTableName, primaryAttributeName, permissionWhere, baseWhere, where, qBuilder, transformFn, result, err_2; return __generator(this, function (_b) { switch (_b.label) { case 0: storageInstance = this.getStorageInstance(); manager = storageInstance.manager; modelRegistry = this.getStorageModels(); entityName = entity.name; context.loaders = context.loaders || {}; loaders = context.loaders; loader = loaders[entityName]; _a = modelRegistry[entityName], filterShaper = _a.filterShaper, storageTableName = _a.storageTableName; primaryAttributeName = entity.getPrimaryAttribute().name; if (!loader) { loader = loaders[entityName] = createDataLoader(context, entity, this); } return [4 /*yield*/, permission_1.handlePermission(context, entity, permission_1.PERMISSION_TYPES.find)]; case 1: permissionWhere = _b.sent(); if (permissionWhere) { permissionWhere = filterShaper(permissionWhere); } baseWhere = { $and: [args], }; where = permission_1.applyPermission(baseWhere, permissionWhere); qBuilder = manager.createQueryBuilder(storageTableName, storageTableName); transformFn = exports.transformFilterAttributeName(context, entity, modelRegistry); filter_1.buildWhereQuery(qBuilder, where, entityName, modelRegistry, false, transformFn); _b.label = 2; case 2: _b.trys.push([2, 4, , 5]); return [4 /*yield*/, qBuilder.getOne()]; case 3: result = _b.sent(); return [3 /*break*/, 5]; case 4: err_2 = _b.sent(); processOrmError(err_2, storageInstance, qBuilder); return [3 /*break*/, 5]; case 5: if (result) { loader.prime(result[primaryAttributeName], result); } return [2 /*return*/, helpers_1.parseValues(entity, result, modelRegistry[entityName], context)]; } }); }); }, find: function (entity, args, context, parentConnection) { return __awaiter(this, void 0, void 0, function () { var storageInstance, manager, modelRegistry, entityName, _a, dataShaperMap, filterShaper, storageTableName, primaryAttributeName, loaders, loader, reverseOrder, permissionWhere, pageInfo, limit, offset, baseWhere, where, qBuilder, transformFn, result, err_3, orderedResults, data; var _b; return __generator(this, function (_c) { switch (_c.label) { case 0: storageInstance = this.getStorageInstance(); manager = storageInstance.manager; modelRegistry = this.getStorageModels(); entityName = entity.name; _a = modelRegistry[entityName], dataShaperMap = _a.dataShaperMap, filterShaper = _a.filterShaper, storageTableName = _a.storageTableName; if (entity.getPrimaryAttribute()) { primaryAttributeName = entity.getPrimaryAttribute().name; } context.loaders = context.loaders || {}; loaders = context.loaders; loader = loaders[entityName]; reverseOrder = !!args.last; if (!!args.skipPermissions) return [3 /*break*/, 2]; return [4 /*yield*/, permission_1.handlePermission(context, entity, permission_1.PERMISSION_TYPES.find)]; case 1: permissionWhere = _c.sent(); if (permissionWhere) { permissionWhere = filterShaper(permissionWhere); } _c.label = 2; case 2: pageInfo = { hasNextPage: false, hasPreviousPage: false, }; limit = null; if (!args.all) { limit = util_1.getLimit(args.first, args.last); if (limit === 0) { // no point in fetching data return [2 /*return*/, { data: [], pageInfo: pageInfo, }]; } limit += 1; // ask for 1 more to determine if there is a next page } offset = args.offset; baseWhere = { $and: [ __assign({}, filter_1.processAndConvertFilter(entity, filterShaper, args, this)), __assign({}, __1.processCursors(entity, args)), ], }; where = args.skipPermissions ? baseWhere : permission_1.applyPermission(baseWhere, permissionWhere); if (parentConnection) { where.$and.push((_b = {}, _b[parentConnection.attribute] = parentConnection.id, _b)); } qBuilder = manager .createQueryBuilder(storageTableName, storageTableName) .offset(offset); if (limit) { qBuilder.limit(limit); } if (args.orderBy) { args.orderBy.map(function (_a) { var attribute = _a.attribute, direction = _a.direction; if (!dataShaperMap[attribute]) { throw new __1.CustomError("Unknown sorting attribute: " + attribute, 'UnknownSortingAttributeError'); } qBuilder.addOrderBy(util_1.quote(dataShaperMap[attribute]), reverseOrder ? util_1.invertDirection(direction) : direction); }); } transformFn = exports.transformFilterAttributeName(context, entity, modelRegistry); filter_1.buildWhereQuery(qBuilder, where, entityName, modelRegistry, true, transformFn); _c.label = 3; case 3: _c.trys.push([3, 5, , 6]); return [4 /*yield*/, qBuilder.getMany()]; case 4: result = _c.sent(); return [3 /*break*/, 6]; case 5: err_3 = _c.sent(); processOrmError(err_3, storageInstance, qBuilder); return [3 /*break*/, 6]; case 6: if (entity.getPrimaryAttribute()) { if (!loader) { loader = loaders[entityName] = createDataLoader(context, entity, this); } result.map(function (row) { loader.prime(row[primaryAttributeName], row); }); } if (limit) { // remove the 1 extra row if it exists if (result.length >= limit) { result = result.slice(0, limit - 1); if (reverseOrder) { pageInfo.hasPreviousPage = true; } else { pageInfo.hasNextPage = true; } } } orderedResults = reverseOrder ? result.reverse() : result; data = helpers_1.parseValuesMap(entity, orderedResults, modelRegistry[entityName], context); return [2 /*return*/, { data: data, pageInfo: pageInfo, }]; } }); }); }, count: function (entity, args, context, parentConnection) { return __awaiter(this, void 0, void 0, function () { var storageInstance, manager, modelRegistry, entityName, _a, filterShaper, storageTableName, permissionWhere, baseWhere, where, qBuilder, transformFn, result, err_4; var _b; return __generator(this, function (_c) { switch (_c.label) { case 0: storageInstance = this.getStorageInstance(); manager = storageInstance.manager; modelRegistry = this.getStorageModels(); entityName = entity.name; _a = modelRegistry[entityName], filterShaper = _a.filterShaper, storageTableName = _a.storageTableName; return [4 /*yield*/, permission_1.handlePermission(context, entity, permission_1.PERMISSION_TYPES.find)]; case 1: permissionWhere = _c.sent(); if (permissionWhere) { permissionWhere = filterShaper(permissionWhere); } baseWhere = { $and: [ __assign({}, filter_1.processAndConvertFilter(entity, filterShaper, args, this)), ], }; where = permission_1.applyPermission(baseWhere, permissionWhere); if (parentConnection) { where.$and.push((_b = {}, _b[parentConnection.attribute] = parentConnection.id, _b)); } qBuilder = manager .createQueryBuilder(storageTableName, storageTableName) .select('COUNT(*)'); transformFn = exports.transformFilterAttributeName(context, entity, modelRegistry); filter_1.buildWhereQuery(qBuilder, where, entityName, modelRegistry, true, transformFn); _c.label = 2; case 2: _c.trys.push([2, 4, , 5]); return [4 /*yield*/, qBuilder.getRawOne()]; case 3: result = _c.sent(); return [3 /*break*/, 5]; case 4: err_4 = _c.sent(); processOrmError(err_4, storageInstance, qBuilder); return [3 /*break*/, 5]; case 5: return [2 /*return*/, parseInt(result.count, 10)]; } }); }); }, mutate: function (entity, id, args, entityMutation, context) { return __awaiter(this, void 0, void 0, function () { var entityName, modelRegistry, storageInstance, _a, dataShaper, dataShaperMap, filterShaper, storageTableName, constraints, primaryAttributeName, data, knownAttributes_1, manager, permissionWhere, result, _b, query, queryParams, preMutationPermissionCheck, qBuilder, err_5, result, baseWhere, where, i18nSerialized_1, qBuilder, err_6, rowCount, result, baseWhere, where, qBuilder, err_7, rowCount; var _c, _d, _e; return __generator(this, function (_f) { switch (_f.label) { case 0: if (!entityMutation) { throw new __1.CustomError('Invalid mutation', 'InvalidMutationError'); } entityName = entity.name; modelRegistry = this.getStorageModels(); storageInstance = this.getStorageInstance(); _a = modelRegistry[entityName], dataShaper = _a.dataShaper, dataShaperMap = _a.dataShaperMap, filterShaper = _a.filterShaper, storageTableName = _a.storageTableName, constraints = _a.constraints; primaryAttributeName = entity.getPrimaryAttribute().name; data = entityMutation.type !== __1.MUTATION_TYPE_DELETE ? helpers_1.serializeValues(entity, entityMutation, args, modelRegistry[entityName], context) : null; if (data) { __1.deleteUndefinedProps(data); knownAttributes_1 = Object.keys(dataShaperMap); Object.keys(data).forEach(function (key) { return !knownAttributes_1.includes(key) && delete data[key]; }); } manager = storageInstance.manager; return [4 /*yield*/, permission_1.handlePermission(context, entity, permission_1.PERMISSION_TYPES.mutation, entityMutation, data)]; case 1: permissionWhere = _f.sent(); if (permissionWhere) { permissionWhere = filterShaper(permissionWhere); } if (!(entityMutation.type === __1.MUTATION_TYPE_CREATE)) return [3 /*break*/, 8]; result = void 0; if (!(permissionWhere && permissionWhere.$or)) return [3 /*break*/, 3]; _b = exports.preMutationPermissionCheckQueryGenerator(this, permissionWhere, entityName, modelRegistry), query = _b[0], queryParams = _b[1]; return [4 /*yield*/, manager.query(query, queryParams)]; case 2: preMutationPermissionCheck = _f.sent(); if (!preMutationPermissionCheck[0].found) { throw buildMutationDeniedError(entityMutation.name); } _f.label = 3; case 3: qBuilder = manager .createQueryBuilder() .insert() .into(storageTableName) .values(data) .returning('*'); _f.label = 4; case 4: _f.trys.push([4, 6, , 7]); return [4 /*yield*/, qBuilder.execute()]; case 5: result = _f.sent(); return [3 /*break*/, 7]; case 6: err_5 = _f.sent(); processOrmError(err_5, storageInstance, qBuilder, constraints); return [3 /*break*/, 7]; case 7: return [2 /*return*/, helpers_1.parseValues(entity, dataShaper(result.raw[0]), modelRegistry[entityName], context)]; case 8: if (!(entityMutation.type === __1.MUTATION_TYPE_UPDATE)) return [3 /*break*/, 13]; result = void 0; baseWhere = { $and: [ (_c = {}, _c[primaryAttributeName] = id, _c), ], }; exports.extendWithFromStateCheck(baseWhere, entity, entityMutation); where = permission_1.applyPermission(baseWhere, permissionWhere); if (__1.isMap(data.i18n, true)) { i18nSerialized_1 = JSON.stringify(data.i18n).replace(/'/g, "''"); data.i18n = function () { return "merge_translations(i18n, '" + i18nSerialized_1 + "')"; }; } else { delete data.i18n; } qBuilder = manager .createQueryBuilder() .update(storageTableName) .set(data) .returning('*'); filter_1.buildWhereQuery(qBuilder, where, entityName, modelRegistry); _f.label = 9; case 9: _f.trys.push([9, 11, , 12]); return [4 /*yield*/, qBuilder.execute()]; case 10: result = _f.sent(); return [3 /*break*/, 12]; case 11: err_6 = _f.sent(); processOrmError(err_6, storageInstance, qBuilder, constraints); return [3 /*break*/, 12]; case 12: rowCount = result.raw.length; if (rowCount < 1) { if (permissionWhere) { throw buildInstanceNotFoundOrAccessDeniedError(id); } throw buildInstanceNotFoundError(id); } return [2 /*return*/, helpers_1.parseValues(entity, dataShaper(result.raw[0]), modelRegistry[entityName], context)]; case 13: if (!(entityMutation.type === __1.MUTATION_TYPE_DELETE)) return [3 /*break*/, 18]; result = void 0; baseWhere = { $and: [ (_d = {}, _d[primaryAttributeName] = id, _d), ], }; exports.extendWithFromStateCheck(baseWhere, entity, entityMutation); where = permission_1.applyPermission(baseWhere, permissionWhere); qBuilder = manager .createQueryBuilder() .delete() .from(storageTableName) .returning('*'); filter_1.buildWhereQuery(qBuilder, where, entityName, modelRegistry); _f.label = 14; case 14: _f.trys.push([14, 16, , 17]); return [4 /*yield*/, qBuilder.execute()]; case 15: result = _f.sent(); return [3 /*break*/, 17]; case 16: err_7 = _f.sent(); processOrmError(err_7, storageInstance, qBuilder, constraints); return [3 /*break*/, 17]; case 17: rowCount = result.raw.length; if (rowCount < 1) { if (permissionWhere) { throw buildInstanceNotFoundOrAccessDeniedError(id); } throw buildInstanceNotFoundError(id); } return [2 /*return*/, (_e = { deleteRowCount: rowCount }, _e[primaryAttributeName] = id, _e.rows = result.raw.map(dataShaper), _e)]; case 18: return [2 /*return*/, null]; } }); }); }, checkLookupPermission: function (entity, filter) { return __awaiter(this, void 0, void 0, function () { var storageInstance, manager, modelRegistry, entityName, _a, filterShaper, storageTableName, permissionWhere, qBuilder, result, err_8; return __generator(this, function (_b) { switch (_b.label) { case 0: storageInstance = this.getStorageInstance(); manager = storageInstance.manager; modelRegistry = this.getStorageModels(); entityName = entity.name; _a = modelRegistry[entityName], filterShaper = _a.filterShaper, storageTableName = _a.storageTableName; permissionWhere = filterShaper(filter); qBuilder = manager .createQueryBuilder(storageTableName, storageTableName) .select('COUNT(*) > 0 AS found'); filter_1.buildWhereQuery(qBuilder, permissionWhere, entityName, modelRegistry, true); _b.label = 1; case 1: _b.trys.push([1, 3, , 4]); return [4 /*yield*/, qBuilder.getRawOne()]; case 2: result = _b.sent(); return [3 /*break*/, 4]; case 3: err_8 = _b.sent(); processOrmError(err_8, storageInstance, qBuilder); return [3 /*break*/, 4]; case 4: return [2 /*return*/, result.found]; } }); }); }, }); exports.default = exports.StorageTypePostgres; exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeID, storageDataTypes_1.StorageDataTypeBigInt); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeInteger, storageDataTypes_1.StorageDataTypeInteger); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeBigInt, storageDataTypes_1.StorageDataTypeBigInt); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeFloat, storageDataTypes_1.StorageDataTypeNumeric); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeDouble, storageDataTypes_1.StorageDataTypeDouble); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeBoolean, storageDataTypes_1.StorageDataTypeBoolean); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeString, storageDataTypes_1.StorageDataTypeText); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeJson, storageDataTypes_1.StorageDataTypeJSON); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeTimestamp, storageDataTypes_1.StorageDataTypeTimestamp); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeTimestampTz, storageDataTypes_1.StorageDataTypeTimestampTz); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeDate, storageDataTypes_1.StorageDataTypeDate); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeTime, storageDataTypes_1.StorageDataTypeTime); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeTimeTz, storageDataTypes_1.StorageDataTypeTimeTz); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeUUID, storageDataTypes_1.StorageDataTypeUUID); exports.StorageTypePostgres.addDataTypeMap(__1.DataTypeI18n, storageDataTypes_1.StorageDataTypeI18n); exports.StorageTypePostgres.addDynamicDataTypeMap(__1.isDataTypeEnum, storageDataTypes_1.StorageDataTypeInteger); exports.StorageTypePostgres.addDynamicDataTypeMap(__1.isDataTypeState, storageDataTypes_1.StorageDataTypeInteger); exports.StorageTypePostgres.addDynamicDataTypeMap(__1.isObjectDataType, storageDataTypes_1.StorageDataTypeJSON); exports.StorageTypePostgres.addDynamicDataTypeMap(__1.isListDataType, storageDataTypes_1.StorageDataTypeJSON);