UNPKG

@opra/sqb

Version:

Opra SQB adapter package

91 lines (90 loc) 4.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("@opra/common"); const connect_1 = require("@sqb/connect"); var DataTypeFactory = common_1.classes.DataTypeFactory; const _prepareComplexTypeArgs = DataTypeFactory ._prepareComplexTypeArgs; DataTypeFactory._prepareComplexTypeArgs = async function (context, owner, initArgs, metadata) { let sqbMeta; if (initArgs.ctor && metadata.fields && (sqbMeta = connect_1.EntityMetadata.get(initArgs.ctor))) { metadata = (0, common_1.cloneObject)(metadata); for (const [fieldName, fieldSchema] of Object.entries(metadata.fields)) { const sqbField = sqbMeta && connect_1.EntityMetadata.getField(sqbMeta, fieldName); if (!sqbField) continue; /** Copy type information from sqb metadata to opra */ if (!fieldSchema.type || fieldSchema.type === Object) { if ((0, connect_1.isAssociationField)(sqbField)) { if (!fieldSchema.type) { const trg = await sqbField.association.resolveTarget(); if (trg?.ctor) fieldSchema.type = trg.ctor; } } else if ((0, connect_1.isColumnField)(sqbField)) { fieldSchema.type = sqbField.enum || sqbField.type; } } if ((0, connect_1.isColumnField)(sqbField)) { const hasNoType = !fieldSchema.type || fieldSchema.type === Object; switch (sqbField.dataType) { case connect_1.DataType.INTEGER: case connect_1.DataType.SMALLINT: if (hasNoType || fieldSchema.type === Number) fieldSchema.type = 'integer'; break; case connect_1.DataType.GUID: if (hasNoType || fieldSchema.type === String) fieldSchema.type = 'uuid'; break; case connect_1.DataType.DATE: if (hasNoType || fieldSchema.type === String || fieldSchema.type === Date) { fieldSchema.type = 'date'; } break; case connect_1.DataType.TIMESTAMP: if (hasNoType || fieldSchema.type === String || fieldSchema.type === Date) { fieldSchema.type = 'datetime'; } break; case connect_1.DataType.TIMESTAMPTZ: if (hasNoType || fieldSchema.type === String || fieldSchema.type === Date) { fieldSchema.type = 'datetimetz'; } break; case connect_1.DataType.TIME: if (hasNoType || fieldSchema.type === String) fieldSchema.type = 'time'; break; default: break; } } if ((0, connect_1.isAssociationField)(sqbField)) { if (sqbField.association.returnsMany()) fieldSchema.isArray = true; if (!Object.prototype.hasOwnProperty.call(fieldSchema, 'exclusive')) fieldSchema.exclusive = true; } if (!Object.prototype.hasOwnProperty.call(fieldSchema, 'exclusive') && Object.prototype.hasOwnProperty.call(sqbField, 'exclusive')) { fieldSchema.exclusive = sqbField.exclusive; } } } return _prepareComplexTypeArgs.apply(DataTypeFactory, [ context, owner, initArgs, metadata, ]); };