typeorm 0.3.26-dev.70057de → 0.3.26-dev.abf8863
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/browser/driver/oracle/OracleDriver.js +0 -5
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +41 -38
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/types/ColumnTypes.d.ts +1 -1
- package/browser/driver/types/ColumnTypes.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +2 -4
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/driver/oracle/OracleDriver.js +0 -5
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/sap/SapDriver.js +41 -38
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/types/ColumnTypes.d.ts +1 -1
- package/driver/types/ColumnTypes.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +2 -4
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/sap/SapDriver.ts"],"names":[],"mappings":"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","file":"SapDriver.js","sourcesContent":["import {\n ColumnType,\n ConnectionIsNotSetError,\n DataSource,\n EntityMetadata,\n ObjectLiteral,\n Table,\n TableColumn,\n TableForeignKey,\n} from \"../..\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { TypeORMError } from \"../../error/TypeORMError\"\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\"\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\"\nimport { DateUtils } from \"../../util/DateUtils\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { Driver } from \"../Driver\"\nimport { CteCapabilities } from \"../types/CteCapabilities\"\nimport { DataTypeDefaults } from \"../types/DataTypeDefaults\"\nimport { MappedColumnTypes } from \"../types/MappedColumnTypes\"\nimport { SapConnectionOptions } from \"./SapConnectionOptions\"\nimport { SapQueryRunner } from \"./SapQueryRunner\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { DriverUtils } from \"../DriverUtils\"\nimport { View } from \"../../schema-builder/view/View\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\nimport { UpsertType } from \"../types/UpsertType\"\n\n/**\n * Organizes communication with SAP Hana DBMS.\n *\n * todo: looks like there is no built in support for connection pooling, we need to figure out something\n */\nexport class SapDriver implements Driver {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: DataSource\n\n /**\n * Hana Pool instance.\n */\n client: any\n\n /**\n * Hana Client streaming extension.\n */\n streamClient: any\n /**\n * Pool for master database.\n */\n master: any\n\n /**\n * Pool for slave databases.\n * Used in replication.\n */\n slaves: any[] = []\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: SapConnectionOptions\n\n /**\n * Version of SAP HANA. Requires a SQL query to the DB, so it is not always set\n */\n version?: string\n\n /**\n * Database name used to perform all write queries.\n */\n database?: string\n\n /**\n * Schema name used to perform all write queries.\n */\n schema?: string\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true\n\n /**\n * Represent transaction support by this driver\n */\n transactionSupport = \"simple\" as const\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20a1569875191014b507cf392724b7eb.html\n * @see https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/data-types\n */\n supportedDataTypes: ColumnType[] = [\n \"tinyint\",\n \"smallint\",\n \"int\", // typeorm alias for \"integer\"\n \"integer\",\n \"bigint\",\n \"smalldecimal\",\n \"decimal\",\n \"dec\", // typeorm alias for \"decimal\"\n \"real\",\n \"double\",\n \"float\", // database alias for \"real\" / \"double\"\n \"date\",\n \"time\",\n \"seconddate\",\n \"timestamp\",\n \"boolean\",\n \"char\", // not officially supported, in SAP HANA Cloud: alias for \"nchar\"\n \"nchar\", // not officially supported\n \"varchar\", // in SAP HANA Cloud: alias for \"nvarchar\"\n \"nvarchar\",\n \"text\", // removed in SAP HANA Cloud\n \"alphanum\", // removed in SAP HANA Cloud\n \"shorttext\", // removed in SAP HANA Cloud\n \"array\",\n \"varbinary\",\n \"blob\",\n \"clob\", // in SAP HANA Cloud: alias for \"nclob\"\n \"nclob\",\n \"st_geometry\",\n \"st_point\",\n ]\n\n /**\n * Returns type of upsert supported by driver if any\n */\n supportedUpsertTypes: UpsertType[] = [\"merge-into\"]\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\"st_geometry\", \"st_point\"]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"varchar\",\n \"nvarchar\",\n \"alphanum\",\n \"shorttext\",\n \"varbinary\",\n ]\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\"decimal\"]\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\"decimal\"]\n\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"timestamp\",\n createDateDefault: \"CURRENT_TIMESTAMP\",\n updateDate: \"timestamp\",\n updateDateDefault: \"CURRENT_TIMESTAMP\",\n deleteDate: \"timestamp\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"nvarchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"integer\",\n cacheIdentifier: \"nvarchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"integer\",\n cacheQuery: \"nvarchar(5000)\" as any,\n cacheResult: \"nclob\",\n metadataType: \"nvarchar\",\n metadataDatabase: \"nvarchar\",\n metadataSchema: \"nvarchar\",\n metadataTable: \"nvarchar\",\n metadataName: \"nvarchar\",\n metadataValue: \"nvarchar(5000)\" as any,\n }\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults = {\n char: { length: 1 },\n nchar: { length: 1 },\n varchar: { length: 255 },\n nvarchar: { length: 255 },\n shorttext: { length: 255 },\n varbinary: { length: 255 },\n decimal: { precision: 18, scale: 0 },\n }\n\n /**\n * Max length allowed by SAP HANA for aliases (identifiers).\n * @see https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.03/en-US/20a760537519101497e3cfe07b348f3c.html\n */\n maxAliasLength = 128\n\n cteCapabilities: CteCapabilities = {\n enabled: true,\n }\n\n dummyTableName = `SYS.DUMMY`\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n this.connection = connection\n this.options = connection.options as SapConnectionOptions\n this.loadDependencies()\n\n this.database = DriverUtils.buildDriverOptions(this.options).database\n this.schema = DriverUtils.buildDriverOptions(this.options).schema\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n async connect(): Promise<void> {\n // HANA connection info\n const dbParams = {\n hostName: this.options.host,\n port: this.options.port,\n userName: this.options.username,\n password: this.options.password,\n ...this.options.extra,\n }\n\n if (this.options.database) dbParams.databaseName = this.options.database\n if (this.options.schema) dbParams.currentSchema = this.options.schema\n if (this.options.encrypt) dbParams.encrypt = this.options.encrypt\n if (this.options.sslValidateCertificate)\n dbParams.validateCertificate = this.options.sslValidateCertificate\n if (this.options.key) dbParams.key = this.options.key\n if (this.options.cert) dbParams.cert = this.options.cert\n if (this.options.ca) dbParams.ca = this.options.ca\n\n // pool options\n const options: any = {\n min:\n this.options.pool && this.options.pool.min\n ? this.options.pool.min\n : 1,\n max:\n this.options.pool && this.options.pool.max\n ? this.options.pool.max\n : 10,\n }\n\n if (this.options.pool && this.options.pool.checkInterval)\n options.checkInterval = this.options.pool.checkInterval\n if (this.options.pool && this.options.pool.maxWaitingRequests)\n options.maxWaitingRequests = this.options.pool.maxWaitingRequests\n if (this.options.pool && this.options.pool.requestTimeout)\n options.requestTimeout = this.options.pool.requestTimeout\n if (this.options.pool && this.options.pool.idleTimeout)\n options.idleTimeout = this.options.pool.idleTimeout\n\n const { logger } = this.connection\n\n const poolErrorHandler =\n options.poolErrorHandler ||\n ((error: any) =>\n logger.log(\"warn\", `SAP Hana pool raised an error. ${error}`))\n this.client.eventEmitter.on(\"poolError\", poolErrorHandler)\n\n // create the pool\n this.master = this.client.createPool(dbParams, options)\n\n const queryRunner = this.createQueryRunner(\"master\")\n\n const { version, database } = await queryRunner.getDatabaseAndVersion()\n this.version = version\n this.database = database\n\n if (!this.schema) {\n this.schema = await queryRunner.getCurrentSchema()\n }\n\n await queryRunner.release()\n }\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void> {\n return Promise.resolve()\n }\n\n /**\n * Closes connection with the database.\n */\n async disconnect(): Promise<void> {\n const pool = this.master\n if (!pool) {\n throw new ConnectionIsNotSetError(\"sap\")\n }\n\n this.master = undefined\n await pool.clear()\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.connection)\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode) {\n return new SapQueryRunner(this, mode)\n }\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n escapeQueryWithParameters(\n sql: string,\n parameters: ObjectLiteral,\n nativeParameters: ObjectLiteral,\n ): [string, any[]] {\n const escapedParameters: any[] = Object.keys(nativeParameters).map(\n (key) => {\n if (nativeParameters[key] instanceof Date)\n return DateUtils.mixedDateToDatetimeString(\n nativeParameters[key],\n true,\n )\n\n return nativeParameters[key]\n },\n )\n\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters]\n\n sql = sql.replace(\n /:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g,\n (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full\n }\n\n const value: any = parameters[key]\n\n if (isArray) {\n return value\n .map((v: any) => {\n escapedParameters.push(v)\n return this.createParameter(\n key,\n escapedParameters.length - 1,\n )\n })\n .join(\", \")\n }\n\n if (typeof value === \"function\") {\n return value()\n }\n\n if (value instanceof Date) {\n return DateUtils.mixedDateToDatetimeString(value, true)\n }\n\n escapedParameters.push(value)\n return this.createParameter(key, escapedParameters.length - 1)\n },\n ) // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters]\n }\n\n /**\n * Escapes a column name.\n */\n escape(columnName: string): string {\n return `\"${columnName}\"`\n }\n\n /**\n * Build full table name with schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(tableName: string, schema?: string): string {\n const tablePath = [tableName]\n\n if (schema) {\n tablePath.unshift(schema)\n }\n\n return tablePath.join(\".\")\n }\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(\n target: EntityMetadata | Table | View | TableForeignKey | string,\n ): { database?: string; schema?: string; tableName: string } {\n const driverDatabase = this.database\n const driverSchema = this.schema\n\n if (InstanceChecker.isTable(target) || InstanceChecker.isView(target)) {\n const parsed = this.parseTableName(target.name)\n\n return {\n database: target.database || parsed.database || driverDatabase,\n schema: target.schema || parsed.schema || driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isTableForeignKey(target)) {\n const parsed = this.parseTableName(target.referencedTableName)\n\n return {\n database:\n target.referencedDatabase ||\n parsed.database ||\n driverDatabase,\n schema:\n target.referencedSchema || parsed.schema || driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isEntityMetadata(target)) {\n // EntityMetadata tableName is never a path\n\n return {\n database: target.database || driverDatabase,\n schema: target.schema || driverSchema,\n tableName: target.tableName,\n }\n }\n\n const parts = target.split(\".\")\n\n return {\n database: driverDatabase,\n schema: (parts.length > 1 ? parts[0] : undefined) || driverSchema,\n tableName: parts.length > 1 ? parts[1] : parts[0],\n }\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(\n columnMetadata.transformer,\n value,\n )\n\n if (value === null || value === undefined) return value\n\n if (columnMetadata.type === Boolean) {\n return value === true ? 1 : 0\n } else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value)\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value)\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === Date\n ) {\n return DateUtils.mixedDateToDatetimeString(value, true)\n } else if (columnMetadata.type === \"seconddate\") {\n return DateUtils.mixedDateToDatetimeString(value, false)\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value)\n } else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value)\n } else if (columnMetadata.isArray) {\n return () => `ARRAY(${value.map((it: any) => `'${it}'`)})`\n }\n\n return value\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type or metadata.\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer\n ? ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n : value\n\n if (columnMetadata.type === Boolean) {\n value = value ? true : false\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === \"seconddate\" ||\n columnMetadata.type === Date\n ) {\n value = DateUtils.normalizeHydratedDate(value)\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value)\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value)\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value)\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata)\n } else if (columnMetadata.type === Number) {\n // convert to number if number\n value = !isNaN(+value) ? parseInt(value) : value\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n\n return value\n }\n\n /**\n * Creates a database type from a given column metadata.\n */\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\"\n } else if (column.type === \"dec\") {\n return \"decimal\"\n } else if (column.type === \"float\") {\n const length =\n typeof column.length === \"string\"\n ? parseInt(column.length)\n : column.length\n\n // https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/4ee2f261e9c44003807d08ccc2e249ac.html\n if (length && length < 25) {\n return \"real\"\n }\n\n return \"double\"\n } else if (column.type === String) {\n return \"nvarchar\"\n } else if (column.type === Date) {\n return \"timestamp\"\n } else if (column.type === Boolean) {\n return \"boolean\"\n } else if ((column.type as any) === Buffer) {\n return \"blob\"\n } else if (column.type === \"uuid\") {\n return \"nvarchar\"\n } else if (\n column.type === \"simple-array\" ||\n column.type === \"simple-json\"\n ) {\n return \"nclob\"\n } else if (column.type === \"simple-enum\") {\n return \"nvarchar\"\n }\n\n if (DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")) {\n // SAP HANA Cloud deprecated / removed these data types\n if (\n column.type === \"varchar\" ||\n column.type === \"alphanum\" ||\n column.type === \"shorttext\"\n ) {\n return \"nvarchar\"\n } else if (column.type === \"text\" || column.type === \"clob\") {\n return \"nclob\"\n } else if (column.type === \"char\") {\n return \"nchar\"\n }\n }\n\n return (column.type as string) || \"\"\n }\n\n /**\n * Normalizes \"default\" value of the column.\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined {\n const defaultValue = columnMetadata.default\n\n if (typeof defaultValue === \"number\") {\n return `${defaultValue}`\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"true\" : \"false\"\n }\n\n if (typeof defaultValue === \"function\") {\n return defaultValue()\n }\n\n if (typeof defaultValue === \"string\") {\n return `'${defaultValue}'`\n }\n\n if (defaultValue === null || defaultValue === undefined) {\n return undefined\n }\n\n return `${defaultValue}`\n }\n\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.indices.some(\n (idx) =>\n idx.isUnique &&\n idx.columns.length === 1 &&\n idx.columns[0] === column,\n )\n }\n\n /**\n * Returns default column lengths, which is required on column creation.\n */\n getColumnLength(column: ColumnMetadata | TableColumn): string {\n if (column.length) return column.length.toString()\n\n if (column.generationStrategy === \"uuid\") return \"36\"\n\n switch (column.type) {\n case \"varchar\":\n case \"nvarchar\":\n case \"shorttext\":\n case String:\n return \"255\"\n case \"alphanum\":\n return \"127\"\n case \"varbinary\":\n return \"255\"\n }\n\n return \"\"\n }\n\n /**\n * Creates column type definition including length, precision and scale\n */\n createFullType(column: TableColumn): string {\n let type = column.type\n\n // used 'getColumnLength()' method, because SqlServer sets `varchar` and `nvarchar` length to 1 by default.\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined &&\n column.scale !== null &&\n column.scale !== undefined\n ) {\n type += `(${column.precision},${column.scale})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined\n ) {\n type += `(${column.precision})`\n }\n\n if (column.isArray) type += \" array\"\n\n return type\n }\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n obtainMasterConnection(): Promise<any> {\n if (!this.master) {\n throw new TypeORMError(\"Driver not Connected\")\n }\n\n return this.master.getConnection()\n }\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n obtainSlaveConnection(): Promise<any> {\n return this.obtainMasterConnection()\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: ObjectLiteral) {\n const generatedMap = metadata.generatedColumns.reduce(\n (map, generatedColumn) => {\n let value: any\n if (\n generatedColumn.generationStrategy === \"increment\" &&\n insertResult\n ) {\n value = insertResult\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // console.log(\"getting db value:\", generatedColumn.databaseName);\n // value = generatedColumn.getEntityValue(uuidMap);\n }\n\n return OrmUtils.mergeDeep(\n map,\n generatedColumn.createValueMap(value),\n )\n },\n {} as ObjectLiteral,\n )\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n }\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n findChangedColumns(\n tableColumns: TableColumn[],\n columnMetadatas: ColumnMetadata[],\n ): ColumnMetadata[] {\n return columnMetadatas.filter((columnMetadata) => {\n const tableColumn = tableColumns.find(\n (c) => c.name === columnMetadata.databaseName,\n )\n if (!tableColumn) {\n // we don't need new columns, we only need exist and changed\n return false\n }\n\n const normalizedDefault = this.normalizeDefault(columnMetadata)\n\n return (\n tableColumn.name !== columnMetadata.databaseName ||\n tableColumn.type !== this.normalizeType(columnMetadata) ||\n (columnMetadata.length &&\n tableColumn.length !==\n this.getColumnLength(columnMetadata)) ||\n tableColumn.precision !== columnMetadata.precision ||\n tableColumn.scale !== columnMetadata.scale ||\n tableColumn.comment !==\n this.escapeComment(columnMetadata.comment) ||\n (!tableColumn.isGenerated &&\n normalizedDefault !== tableColumn.default) || // we included check for generated here, because generated columns already can have default values\n tableColumn.isPrimary !== columnMetadata.isPrimary ||\n tableColumn.isNullable !== columnMetadata.isNullable ||\n tableColumn.isUnique !==\n this.normalizeIsUnique(columnMetadata) ||\n (columnMetadata.generationStrategy !== \"uuid\" &&\n tableColumn.isGenerated !== columnMetadata.isGenerated)\n )\n })\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean {\n return !DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")\n }\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string {\n return \"?\"\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const client = this.options.driver || PlatformTools.load(\"hdb-pool\")\n this.client = client\n } catch (e) {\n // todo: better error for browser env\n throw new DriverPackageNotInstalledError(\"SAP Hana\", \"hdb-pool\")\n }\n\n try {\n if (!this.options.hanaClientDriver) {\n PlatformTools.load(\"@sap/hana-client\")\n this.streamClient = PlatformTools.load(\n \"@sap/hana-client/extension/Stream\",\n )\n }\n } catch (e) {\n // todo: better error for browser env\n throw new DriverPackageNotInstalledError(\n \"SAP Hana\",\n \"@sap/hana-client\",\n )\n }\n }\n\n /**\n * Escapes a given comment.\n */\n protected escapeComment(comment?: string) {\n if (!comment) return comment\n\n comment = comment.replace(/\\u0000/g, \"\") // Null bytes aren't allowed in comments\n\n return comment\n }\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/sap/SapDriver.ts"],"names":[],"mappings":"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","file":"SapDriver.js","sourcesContent":["import {\n ColumnType,\n ConnectionIsNotSetError,\n DataSource,\n EntityMetadata,\n ObjectLiteral,\n Table,\n TableColumn,\n TableForeignKey,\n} from \"../..\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { TypeORMError } from \"../../error/TypeORMError\"\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\"\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\"\nimport { DateUtils } from \"../../util/DateUtils\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { Driver } from \"../Driver\"\nimport { CteCapabilities } from \"../types/CteCapabilities\"\nimport { DataTypeDefaults } from \"../types/DataTypeDefaults\"\nimport { MappedColumnTypes } from \"../types/MappedColumnTypes\"\nimport { SapConnectionOptions } from \"./SapConnectionOptions\"\nimport { SapQueryRunner } from \"./SapQueryRunner\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { DriverUtils } from \"../DriverUtils\"\nimport { View } from \"../../schema-builder/view/View\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\nimport { UpsertType } from \"../types/UpsertType\"\n\n/**\n * Organizes communication with SAP Hana DBMS.\n *\n * todo: looks like there is no built in support for connection pooling, we need to figure out something\n */\nexport class SapDriver implements Driver {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: DataSource\n\n /**\n * Hana Pool instance.\n */\n client: any\n\n /**\n * Hana Client streaming extension.\n */\n streamClient: any\n /**\n * Pool for master database.\n */\n master: any\n\n /**\n * Pool for slave databases.\n * Used in replication.\n */\n slaves: any[] = []\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: SapConnectionOptions\n\n /**\n * Version of SAP HANA. Requires a SQL query to the DB, so it is not always set\n */\n version?: string\n\n /**\n * Database name used to perform all write queries.\n */\n database?: string\n\n /**\n * Schema name used to perform all write queries.\n */\n schema?: string\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true\n\n /**\n * Represent transaction support by this driver\n */\n transactionSupport = \"simple\" as const\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20a1569875191014b507cf392724b7eb.html\n * @see https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/data-types\n */\n supportedDataTypes: ColumnType[] = [\n \"alphanum\", // removed in SAP HANA Cloud\n \"array\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"char\", // not officially supported, in SAP HANA Cloud: alias for \"nchar\"\n \"clob\", // in SAP HANA Cloud: alias for \"nclob\"\n \"date\",\n \"dec\", // typeorm alias for \"decimal\"\n \"decimal\",\n \"double\",\n \"float\", // database alias for \"real\" / \"double\"\n \"half_vector\", // only supported in SAP HANA Cloud, not in SAP HANA 2.0\n \"int\", // typeorm alias for \"integer\"\n \"integer\",\n \"nchar\", // not officially supported\n \"nclob\",\n \"nvarchar\",\n \"real_vector\", // only supported in SAP HANA Cloud, not in SAP HANA 2.0\n \"real\",\n \"seconddate\",\n \"shorttext\", // removed in SAP HANA Cloud\n \"smalldecimal\",\n \"smallint\",\n \"st_geometry\",\n \"st_point\",\n \"text\", // removed in SAP HANA Cloud\n \"time\",\n \"timestamp\",\n \"tinyint\",\n \"varbinary\",\n \"varchar\", // in SAP HANA Cloud: alias for \"nvarchar\"\n ]\n\n /**\n * Returns type of upsert supported by driver if any\n */\n supportedUpsertTypes: UpsertType[] = [\"merge-into\"]\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\"st_geometry\", \"st_point\"]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"alphanum\",\n \"binary\",\n \"half_vector\",\n \"nvarchar\",\n \"real_vector\",\n \"shorttext\",\n \"varbinary\",\n \"varchar\",\n ]\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\"decimal\"]\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\"decimal\", \"timestamp\"]\n\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"timestamp\",\n createDateDefault: \"CURRENT_TIMESTAMP\",\n updateDate: \"timestamp\",\n updateDateDefault: \"CURRENT_TIMESTAMP\",\n deleteDate: \"timestamp\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"nvarchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"integer\",\n cacheIdentifier: \"nvarchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"integer\",\n cacheQuery: \"nvarchar(5000)\" as any,\n cacheResult: \"nclob\",\n metadataType: \"nvarchar\",\n metadataDatabase: \"nvarchar\",\n metadataSchema: \"nvarchar\",\n metadataTable: \"nvarchar\",\n metadataName: \"nvarchar\",\n metadataValue: \"nvarchar(5000)\" as any,\n }\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults = {\n binary: { length: 1 },\n char: { length: 1 },\n decimal: { precision: 18, scale: 0 },\n nchar: { length: 1 },\n nvarchar: { length: 255 },\n shorttext: { length: 255 },\n varbinary: { length: 255 },\n varchar: { length: 255 },\n }\n\n /**\n * Max length allowed by SAP HANA for aliases (identifiers).\n * @see https://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.03/en-US/20a760537519101497e3cfe07b348f3c.html\n */\n maxAliasLength = 128\n\n cteCapabilities: CteCapabilities = {\n enabled: true,\n }\n\n dummyTableName = `SYS.DUMMY`\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n this.connection = connection\n this.options = connection.options as SapConnectionOptions\n this.loadDependencies()\n\n this.database = DriverUtils.buildDriverOptions(this.options).database\n this.schema = DriverUtils.buildDriverOptions(this.options).schema\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n async connect(): Promise<void> {\n // HANA connection info\n const dbParams = {\n hostName: this.options.host,\n port: this.options.port,\n userName: this.options.username,\n password: this.options.password,\n ...this.options.extra,\n }\n\n if (this.options.database) dbParams.databaseName = this.options.database\n if (this.options.schema) dbParams.currentSchema = this.options.schema\n if (this.options.encrypt) dbParams.encrypt = this.options.encrypt\n if (this.options.sslValidateCertificate)\n dbParams.validateCertificate = this.options.sslValidateCertificate\n if (this.options.key) dbParams.key = this.options.key\n if (this.options.cert) dbParams.cert = this.options.cert\n if (this.options.ca) dbParams.ca = this.options.ca\n\n // pool options\n const options: any = {\n min:\n this.options.pool && this.options.pool.min\n ? this.options.pool.min\n : 1,\n max:\n this.options.pool && this.options.pool.max\n ? this.options.pool.max\n : 10,\n }\n\n if (this.options.pool && this.options.pool.checkInterval)\n options.checkInterval = this.options.pool.checkInterval\n if (this.options.pool && this.options.pool.maxWaitingRequests)\n options.maxWaitingRequests = this.options.pool.maxWaitingRequests\n if (this.options.pool && this.options.pool.requestTimeout)\n options.requestTimeout = this.options.pool.requestTimeout\n if (this.options.pool && this.options.pool.idleTimeout)\n options.idleTimeout = this.options.pool.idleTimeout\n\n const { logger } = this.connection\n\n const poolErrorHandler =\n options.poolErrorHandler ||\n ((error: any) =>\n logger.log(\"warn\", `SAP Hana pool raised an error. ${error}`))\n this.client.eventEmitter.on(\"poolError\", poolErrorHandler)\n\n // create the pool\n this.master = this.client.createPool(dbParams, options)\n\n const queryRunner = this.createQueryRunner(\"master\")\n\n const { version, database } = await queryRunner.getDatabaseAndVersion()\n this.version = version\n this.database = database\n\n if (!this.schema) {\n this.schema = await queryRunner.getCurrentSchema()\n }\n\n await queryRunner.release()\n }\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void> {\n return Promise.resolve()\n }\n\n /**\n * Closes connection with the database.\n */\n async disconnect(): Promise<void> {\n const pool = this.master\n if (!pool) {\n throw new ConnectionIsNotSetError(\"sap\")\n }\n\n this.master = undefined\n await pool.clear()\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.connection)\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode) {\n return new SapQueryRunner(this, mode)\n }\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n */\n escapeQueryWithParameters(\n sql: string,\n parameters: ObjectLiteral,\n nativeParameters: ObjectLiteral,\n ): [string, any[]] {\n const escapedParameters: any[] = Object.keys(nativeParameters).map(\n (key) => {\n if (nativeParameters[key] instanceof Date)\n return DateUtils.mixedDateToDatetimeString(\n nativeParameters[key],\n true,\n )\n\n return nativeParameters[key]\n },\n )\n\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters]\n\n sql = sql.replace(\n /:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g,\n (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full\n }\n\n const value: any = parameters[key]\n\n if (isArray) {\n return value\n .map((v: any) => {\n escapedParameters.push(v)\n return this.createParameter(\n key,\n escapedParameters.length - 1,\n )\n })\n .join(\", \")\n }\n\n if (typeof value === \"function\") {\n return value()\n }\n\n if (value instanceof Date) {\n return DateUtils.mixedDateToDatetimeString(value, true)\n }\n\n escapedParameters.push(value)\n return this.createParameter(key, escapedParameters.length - 1)\n },\n ) // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters]\n }\n\n /**\n * Escapes a column name.\n */\n escape(columnName: string): string {\n return `\"${columnName}\"`\n }\n\n /**\n * Build full table name with schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(tableName: string, schema?: string): string {\n const tablePath = [tableName]\n\n if (schema) {\n tablePath.unshift(schema)\n }\n\n return tablePath.join(\".\")\n }\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(\n target: EntityMetadata | Table | View | TableForeignKey | string,\n ): { database?: string; schema?: string; tableName: string } {\n const driverDatabase = this.database\n const driverSchema = this.schema\n\n if (InstanceChecker.isTable(target) || InstanceChecker.isView(target)) {\n const parsed = this.parseTableName(target.name)\n\n return {\n database: target.database || parsed.database || driverDatabase,\n schema: target.schema || parsed.schema || driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isTableForeignKey(target)) {\n const parsed = this.parseTableName(target.referencedTableName)\n\n return {\n database:\n target.referencedDatabase ||\n parsed.database ||\n driverDatabase,\n schema:\n target.referencedSchema || parsed.schema || driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isEntityMetadata(target)) {\n // EntityMetadata tableName is never a path\n\n return {\n database: target.database || driverDatabase,\n schema: target.schema || driverSchema,\n tableName: target.tableName,\n }\n }\n\n const parts = target.split(\".\")\n\n return {\n database: driverDatabase,\n schema: (parts.length > 1 ? parts[0] : undefined) || driverSchema,\n tableName: parts.length > 1 ? parts[1] : parts[0],\n }\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(\n columnMetadata.transformer,\n value,\n )\n\n if (value === null || value === undefined) return value\n\n if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value)\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value)\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === Date\n ) {\n return DateUtils.mixedDateToDatetimeString(value, true)\n } else if (columnMetadata.type === \"seconddate\") {\n return DateUtils.mixedDateToDatetimeString(value, false)\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value)\n } else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value)\n } else if (columnMetadata.isArray) {\n return () => `ARRAY(${value.map((it: any) => `'${it}'`)})`\n }\n\n return value\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type or metadata.\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer\n ? ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n : value\n\n if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === \"seconddate\" ||\n columnMetadata.type === Date\n ) {\n value = DateUtils.normalizeHydratedDate(value)\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value)\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value)\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value)\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata)\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n\n return value\n }\n\n /**\n * Creates a database type from a given column metadata.\n */\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\"\n } else if (column.type === \"dec\") {\n return \"decimal\"\n } else if (column.type === \"float\") {\n const length =\n typeof column.length === \"string\"\n ? parseInt(column.length)\n : column.length\n\n // https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/4ee2f261e9c44003807d08ccc2e249ac.html\n if (length && length < 25) {\n return \"real\"\n }\n\n return \"double\"\n } else if (column.type === String) {\n return \"nvarchar\"\n } else if (column.type === Date) {\n return \"timestamp\"\n } else if (column.type === Boolean) {\n return \"boolean\"\n } else if ((column.type as any) === Buffer) {\n return \"blob\"\n } else if (column.type === \"uuid\") {\n return \"nvarchar\"\n } else if (\n column.type === \"simple-array\" ||\n column.type === \"simple-json\"\n ) {\n return \"nclob\"\n } else if (column.type === \"simple-enum\") {\n return \"nvarchar\"\n }\n\n if (DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")) {\n // SAP HANA Cloud deprecated / removed these data types\n if (\n column.type === \"varchar\" ||\n column.type === \"alphanum\" ||\n column.type === \"shorttext\"\n ) {\n return \"nvarchar\"\n } else if (column.type === \"text\" || column.type === \"clob\") {\n return \"nclob\"\n } else if (column.type === \"char\") {\n return \"nchar\"\n }\n } else {\n if (\n column.type === \"real_vector\" ||\n column.type === \"half_vector\"\n ) {\n return \"varbinary\"\n }\n }\n\n return (column.type as string) || \"\"\n }\n\n /**\n * Normalizes \"default\" value of the column.\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined {\n const defaultValue = columnMetadata.default\n\n if (typeof defaultValue === \"number\") {\n return `${defaultValue}`\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"true\" : \"false\"\n }\n\n if (typeof defaultValue === \"function\") {\n return defaultValue()\n }\n\n if (typeof defaultValue === \"string\") {\n return `'${defaultValue}'`\n }\n\n if (defaultValue === null || defaultValue === undefined) {\n return undefined\n }\n\n return `${defaultValue}`\n }\n\n /**\n * Normalizes \"isUnique\" value of the column.\n */\n normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.indices.some(\n (idx) =>\n idx.isUnique &&\n idx.columns.length === 1 &&\n idx.columns[0] === column,\n )\n }\n\n /**\n * Returns default column lengths, which is required on column creation.\n */\n getColumnLength(column: ColumnMetadata | TableColumn): string {\n if (column.length) return column.length.toString()\n\n if (column.generationStrategy === \"uuid\") return \"36\"\n\n switch (column.type) {\n case \"varchar\":\n case \"nvarchar\":\n case \"shorttext\":\n case String:\n return \"255\"\n case \"alphanum\":\n return \"127\"\n case \"varbinary\":\n return \"255\"\n }\n\n return \"\"\n }\n\n /**\n * Creates column type definition including length, precision and scale\n */\n createFullType(column: TableColumn): string {\n let type = column.type\n\n // used 'getColumnLength()' method, because SqlServer sets `varchar` and `nvarchar` length to 1 by default.\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined &&\n column.scale !== null &&\n column.scale !== undefined\n ) {\n type += `(${column.precision},${column.scale})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined\n ) {\n type += `(${column.precision})`\n }\n\n if (column.isArray) type += \" array\"\n\n return type\n }\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n obtainMasterConnection(): Promise<any> {\n if (!this.master) {\n throw new TypeORMError(\"Driver not Connected\")\n }\n\n return this.master.getConnection()\n }\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n obtainSlaveConnection(): Promise<any> {\n return this.obtainMasterConnection()\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: ObjectLiteral) {\n const generatedMap = metadata.generatedColumns.reduce(\n (map, generatedColumn) => {\n let value: any\n if (\n generatedColumn.generationStrategy === \"increment\" &&\n insertResult\n ) {\n value = insertResult\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // console.log(\"getting db value:\", generatedColumn.databaseName);\n // value = generatedColumn.getEntityValue(uuidMap);\n }\n\n return OrmUtils.mergeDeep(\n map,\n generatedColumn.createValueMap(value),\n )\n },\n {} as ObjectLiteral,\n )\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n }\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n */\n findChangedColumns(\n tableColumns: TableColumn[],\n columnMetadatas: ColumnMetadata[],\n ): ColumnMetadata[] {\n return columnMetadatas.filter((columnMetadata) => {\n const tableColumn = tableColumns.find(\n (c) => c.name === columnMetadata.databaseName,\n )\n if (!tableColumn) {\n // we don't need new columns, we only need exist and changed\n return false\n }\n\n const normalizedDefault = this.normalizeDefault(columnMetadata)\n\n return (\n tableColumn.name !== columnMetadata.databaseName ||\n tableColumn.type !== this.normalizeType(columnMetadata) ||\n (columnMetadata.length &&\n tableColumn.length !==\n this.getColumnLength(columnMetadata)) ||\n tableColumn.precision !== columnMetadata.precision ||\n tableColumn.scale !== columnMetadata.scale ||\n tableColumn.comment !==\n this.escapeComment(columnMetadata.comment) ||\n (!tableColumn.isGenerated &&\n normalizedDefault !== tableColumn.default) || // we included check for generated here, because generated columns already can have default values\n tableColumn.isPrimary !== columnMetadata.isPrimary ||\n tableColumn.isNullable !== columnMetadata.isNullable ||\n tableColumn.isUnique !==\n this.normalizeIsUnique(columnMetadata) ||\n (columnMetadata.generationStrategy !== \"uuid\" &&\n tableColumn.isGenerated !== columnMetadata.isGenerated)\n )\n })\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean {\n return !DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")\n }\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string {\n return \"?\"\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const client = this.options.driver || PlatformTools.load(\"hdb-pool\")\n this.client = client\n } catch (e) {\n // todo: better error for browser env\n throw new DriverPackageNotInstalledError(\"SAP Hana\", \"hdb-pool\")\n }\n\n try {\n if (!this.options.hanaClientDriver) {\n PlatformTools.load(\"@sap/hana-client\")\n this.streamClient = PlatformTools.load(\n \"@sap/hana-client/extension/Stream\",\n )\n }\n } catch (e) {\n // todo: better error for browser env\n throw new DriverPackageNotInstalledError(\n \"SAP Hana\",\n \"@sap/hana-client\",\n )\n }\n }\n\n /**\n * Escapes a given comment.\n */\n protected escapeComment(comment?: string) {\n if (!comment) return comment\n\n comment = comment.replace(/\\u0000/g, \"\") // Null bytes aren't allowed in comments\n\n return comment\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -13,7 +13,7 @@ export type WithPrecisionColumnType = "float" | "double" | "dec" | "decimal" | "
|
|
|
13
13
|
/**
|
|
14
14
|
* Column types where column length is used.
|
|
15
15
|
*/
|
|
16
|
-
export type WithLengthColumnType = "character varying" | "varying character" | "char varying" | "nvarchar" | "national varchar" | "character" | "native character" | "varchar" | "char" | "nchar" | "national char" | "varchar2" | "nvarchar2" | "alphanum" | "shorttext" | "raw" | "binary" | "varbinary" | "string";
|
|
16
|
+
export type WithLengthColumnType = "character varying" | "varying character" | "char varying" | "nvarchar" | "national varchar" | "character" | "native character" | "varchar" | "char" | "nchar" | "national char" | "varchar2" | "nvarchar2" | "alphanum" | "shorttext" | "raw" | "binary" | "varbinary" | "string" | "half_vector" | "real_vector";
|
|
17
17
|
export type WithWidthColumnType = "tinyint" | "smallint" | "mediumint" | "int" | "bigint";
|
|
18
18
|
/**
|
|
19
19
|
* All other regular column types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/types/ColumnTypes.ts"],"names":[],"mappings":"","file":"ColumnTypes.js","sourcesContent":["/**\n * Column types used for @PrimaryGeneratedColumn() decorator.\n */\nexport type PrimaryGeneratedColumnType =\n | \"int\" // mysql, mssql, oracle, sqlite, sap\n | \"int2\" // postgres, sqlite, cockroachdb\n | \"int4\" // postgres, cockroachdb\n | \"int8\" // postgres, sqlite, cockroachdb\n | \"integer\" // postgres, oracle, sqlite, mysql, cockroachdb, sap\n | \"tinyint\" // mysql, mssql, sqlite, sap\n | \"smallint\" // mysql, postgres, mssql, oracle, sqlite, cockroachdb, sap\n | \"mediumint\" // mysql, sqlite\n | \"bigint\" // mysql, postgres, mssql, sqlite, cockroachdb, sap\n | \"dec\" // oracle, mssql, sap\n | \"decimal\" // mysql, postgres, mssql, sqlite, sap\n | \"smalldecimal\" // sap\n | \"fixed\" // mysql\n | \"numeric\" // postgres, mssql, sqlite, spanner\n | \"number\" // oracle\n\n/**\n * Column types where spatial properties are used.\n */\nexport type SpatialColumnType =\n | \"geometry\" // postgres\n | \"geography\" // postgres\n | \"st_geometry\" // sap\n | \"st_point\" // sap\n\n/**\n * Column types where precision and scale properties are used.\n */\nexport type WithPrecisionColumnType =\n | \"float\" // mysql, mssql, oracle, sqlite\n | \"double\" // mysql, sqlite\n | \"dec\" // oracle, mssql, mysql\n | \"decimal\" // mysql, postgres, mssql, sqlite\n | \"smalldecimal\" // sap\n | \"fixed\" // mysql\n | \"numeric\" // postgres, mssql, sqlite, mysql\n | \"real\" // mysql, postgres, mssql, oracle, sqlite, cockroachdb, sap\n | \"double precision\" // postgres, oracle, sqlite, mysql, cockroachdb\n | \"number\" // oracle\n | \"datetime\" // mssql, mysql, sqlite\n | \"datetime2\" // mssql\n | \"datetimeoffset\" // mssql\n | \"time\" // mysql, postgres, mssql, cockroachdb\n | \"time with time zone\" // postgres, cockroachdb\n | \"time without time zone\" // postgres\n | \"timestamp\" // mysql, postgres, mssql, oracle, cockroachdb, spanner\n | \"timestamp without time zone\" // postgres, cockroachdb\n | \"timestamp with time zone\" // postgres, oracle, cockroachdb\n | \"timestamp with local time zone\" // oracle\n\n/**\n * Column types where column length is used.\n */\nexport type WithLengthColumnType =\n | \"character varying\" // postgres, cockroachdb\n | \"varying character\" // sqlite\n | \"char varying\" // cockroachdb\n | \"nvarchar\" // mssql, mysql\n | \"national varchar\" // mysql\n | \"character\" // mysql, postgres, sqlite, cockroachdb\n | \"native character\" // sqlite\n | \"varchar\" // mysql, postgres, mssql, sqlite, cockroachdb\n | \"char\" // mysql, postgres, mssql, oracle, cockroachdb, sap\n | \"nchar\" // mssql, oracle, sqlite, mysql, sap\n | \"national char\" // mysql\n | \"varchar2\" // oracle\n | \"nvarchar2\" // oracle, sqlite\n | \"alphanum\" // sap\n | \"shorttext\" // sap\n | \"raw\" // oracle\n | \"binary\" // mssql\n | \"varbinary\" // mssql, sap\n | \"string\" // cockroachdb, spanner\n\nexport type WithWidthColumnType =\n | \"tinyint\" // mysql\n | \"smallint\" // mysql\n | \"mediumint\" // mysql\n | \"int\" // mysql\n | \"bigint\" // mysql\n\n/**\n * All other regular column types.\n */\nexport type SimpleColumnType =\n | \"simple-array\" // typeorm-specific, automatically mapped to string\n // |\"string\" // typeorm-specific, automatically mapped to varchar depend on platform\n | \"simple-json\" // typeorm-specific, automatically mapped to string\n | \"simple-enum\" // typeorm-specific, automatically mapped to string\n\n // numeric types\n | \"int2\" // postgres, sqlite, cockroachdb\n | \"integer\" // postgres, oracle, sqlite, cockroachdb\n | \"int4\" // postgres, cockroachdb\n | \"int8\" // postgres, sqlite, cockroachdb\n | \"int64\" // cockroachdb, spanner\n | \"unsigned big int\" // sqlite\n | \"float\" // mysql, mssql, oracle, sqlite, sap\n | \"float4\" // postgres, cockroachdb\n | \"float8\" // postgres, cockroachdb\n | \"float64\" // spanner\n | \"smallmoney\" // mssql\n | \"money\" // postgres, mssql\n\n // boolean types\n | \"boolean\" // postgres, sqlite, mysql, cockroachdb\n | \"bool\" // postgres, mysql, cockroachdb, spanner\n\n // text/binary types\n | \"tinyblob\" // mysql\n | \"tinytext\" // mysql\n | \"mediumblob\" // mysql\n | \"mediumtext\" // mysql\n | \"blob\" // mysql, oracle, sqlite, cockroachdb, sap\n | \"text\" // mysql, postgres, mssql, sqlite, cockroachdb, sap\n | \"ntext\" // mssql\n | \"citext\" // postgres\n | \"hstore\" // postgres\n | \"longblob\" // mysql\n | \"longtext\" // mysql\n | \"alphanum\" // sap\n | \"shorttext\" // sap\n | \"bytes\" // cockroachdb, spanner\n | \"bytea\" // postgres, cockroachdb\n | \"long\" // oracle\n | \"raw\" // oracle\n | \"long raw\" // oracle\n | \"bfile\" // oracle\n | \"clob\" // oracle, sqlite, sap\n | \"nclob\" // oracle, sap\n | \"image\" // mssql\n\n // date types\n | \"timetz\" // postgres\n | \"timestamptz\" // postgres, cockroachdb\n | \"timestamp with local time zone\" // oracle\n | \"smalldatetime\" // mssql\n | \"date\" // mysql, postgres, mssql, oracle, sqlite, spanner\n | \"interval year to month\" // oracle\n | \"interval day to second\" // oracle\n | \"interval\" // postgres, cockroachdb\n | \"year\" // mysql\n | \"seconddate\" // sap\n\n // geometric types\n | \"point\" // postgres, mysql\n | \"line\" // postgres\n | \"lseg\" // postgres\n | \"box\" // postgres\n | \"circle\" // postgres\n | \"path\" // postgres\n | \"polygon\" // postgres, mysql\n | \"geography\" // mssql\n | \"geometry\" // mysql\n | \"linestring\" // mysql\n | \"multipoint\" // mysql\n | \"multilinestring\" // mysql\n | \"multipolygon\" // mysql\n | \"geometrycollection\" // mysql\n | \"st_geometry\" // sap\n | \"st_point\" // sap\n\n // range types\n | \"int4range\" // postgres\n | \"int8range\" // postgres\n | \"numrange\" // postgres\n | \"tsrange\" // postgres\n | \"tstzrange\" // postgres\n | \"daterange\" // postgres\n\n // multirange types\n | \"int4multirange\" // postgres\n | \"int8multirange\" // postgres\n | \"nummultirange\" // postgres\n | \"tsmultirange\" // postgres\n | \"tstzmultirange\" // postgres\n | \"datemultirange\" // postgres\n\n // other types\n | \"enum\" // mysql, postgres\n | \"set\" // mysql\n | \"cidr\" // postgres\n | \"inet\" // postgres, cockroachdb\n | \"inet4\" // mariadb\n | \"inet6\" // mariadb\n | \"macaddr\" // postgres\n | \"macaddr8\" // postgres\n | \"bit\" // postgres, mssql\n | \"bit varying\" // postgres\n | \"varbit\" // postgres\n | \"tsvector\" // postgres\n | \"tsquery\" // postgres\n | \"uuid\" // postgres, cockroachdb, mariadb\n | \"xml\" // mssql, postgres\n | \"json\" // mysql, postgres, cockroachdb, spanner\n | \"jsonb\" // postgres, cockroachdb\n | \"varbinary\" // mssql, sap\n | \"hierarchyid\" // mssql\n | \"sql_variant\" // mssql\n | \"rowid\" // oracle\n | \"urowid\" // oracle\n | \"uniqueidentifier\" // mssql\n | \"rowversion\" // mssql\n | \"array\" // cockroachdb, sap, spanner\n | \"cube\" // postgres\n | \"ltree\" // postgres\n\n/**\n * Any column type column can be.\n */\nexport type ColumnType =\n | WithPrecisionColumnType\n | WithLengthColumnType\n | WithWidthColumnType\n | SpatialColumnType\n | SimpleColumnType\n | BooleanConstructor\n | DateConstructor\n | NumberConstructor\n | StringConstructor\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/types/ColumnTypes.ts"],"names":[],"mappings":"","file":"ColumnTypes.js","sourcesContent":["/**\n * Column types used for @PrimaryGeneratedColumn() decorator.\n */\nexport type PrimaryGeneratedColumnType =\n | \"int\" // mysql, mssql, oracle, sqlite, sap\n | \"int2\" // postgres, sqlite, cockroachdb\n | \"int4\" // postgres, cockroachdb\n | \"int8\" // postgres, sqlite, cockroachdb\n | \"integer\" // postgres, oracle, sqlite, mysql, cockroachdb, sap\n | \"tinyint\" // mysql, mssql, sqlite, sap\n | \"smallint\" // mysql, postgres, mssql, oracle, sqlite, cockroachdb, sap\n | \"mediumint\" // mysql, sqlite\n | \"bigint\" // mysql, postgres, mssql, sqlite, cockroachdb, sap\n | \"dec\" // oracle, mssql, sap\n | \"decimal\" // mysql, postgres, mssql, sqlite, sap\n | \"smalldecimal\" // sap\n | \"fixed\" // mysql\n | \"numeric\" // postgres, mssql, sqlite, spanner\n | \"number\" // oracle\n\n/**\n * Column types where spatial properties are used.\n */\nexport type SpatialColumnType =\n | \"geometry\" // postgres\n | \"geography\" // postgres\n | \"st_geometry\" // sap\n | \"st_point\" // sap\n\n/**\n * Column types where precision and scale properties are used.\n */\nexport type WithPrecisionColumnType =\n | \"float\" // mysql, mssql, oracle, sqlite\n | \"double\" // mysql, sqlite\n | \"dec\" // oracle, mssql, mysql\n | \"decimal\" // mysql, postgres, mssql, sqlite\n | \"smalldecimal\" // sap\n | \"fixed\" // mysql\n | \"numeric\" // postgres, mssql, sqlite, mysql\n | \"real\" // mysql, postgres, mssql, oracle, sqlite, cockroachdb, sap\n | \"double precision\" // postgres, oracle, sqlite, mysql, cockroachdb\n | \"number\" // oracle\n | \"datetime\" // mssql, mysql, sqlite\n | \"datetime2\" // mssql\n | \"datetimeoffset\" // mssql\n | \"time\" // mysql, postgres, mssql, cockroachdb\n | \"time with time zone\" // postgres, cockroachdb\n | \"time without time zone\" // postgres\n | \"timestamp\" // mysql, postgres, mssql, oracle, cockroachdb, sap, spanner\n | \"timestamp without time zone\" // postgres, cockroachdb\n | \"timestamp with time zone\" // postgres, oracle, cockroachdb\n | \"timestamp with local time zone\" // oracle\n\n/**\n * Column types where column length is used.\n */\nexport type WithLengthColumnType =\n | \"character varying\" // postgres, cockroachdb\n | \"varying character\" // sqlite\n | \"char varying\" // cockroachdb\n | \"nvarchar\" // mssql, mysql\n | \"national varchar\" // mysql\n | \"character\" // mysql, postgres, sqlite, cockroachdb\n | \"native character\" // sqlite\n | \"varchar\" // mysql, postgres, mssql, sqlite, cockroachdb\n | \"char\" // mysql, postgres, mssql, oracle, cockroachdb, sap\n | \"nchar\" // mssql, oracle, sqlite, mysql, sap\n | \"national char\" // mysql\n | \"varchar2\" // oracle\n | \"nvarchar2\" // oracle, sqlite\n | \"alphanum\" // sap\n | \"shorttext\" // sap\n | \"raw\" // oracle\n | \"binary\" // mssql\n | \"varbinary\" // mssql, sap\n | \"string\" // cockroachdb, spanner\n | \"half_vector\" // sap\n | \"real_vector\" // sap\n\nexport type WithWidthColumnType =\n | \"tinyint\" // mysql\n | \"smallint\" // mysql\n | \"mediumint\" // mysql\n | \"int\" // mysql\n | \"bigint\" // mysql\n\n/**\n * All other regular column types.\n */\nexport type SimpleColumnType =\n | \"simple-array\" // typeorm-specific, automatically mapped to string\n // |\"string\" // typeorm-specific, automatically mapped to varchar depend on platform\n | \"simple-json\" // typeorm-specific, automatically mapped to string\n | \"simple-enum\" // typeorm-specific, automatically mapped to string\n\n // numeric types\n | \"int2\" // postgres, sqlite, cockroachdb\n | \"integer\" // postgres, oracle, sqlite, cockroachdb\n | \"int4\" // postgres, cockroachdb\n | \"int8\" // postgres, sqlite, cockroachdb\n | \"int64\" // cockroachdb, spanner\n | \"unsigned big int\" // sqlite\n | \"float\" // mysql, mssql, oracle, sqlite, sap\n | \"float4\" // postgres, cockroachdb\n | \"float8\" // postgres, cockroachdb\n | \"float64\" // spanner\n | \"smallmoney\" // mssql\n | \"money\" // postgres, mssql\n\n // boolean types\n | \"boolean\" // postgres, sqlite, mysql, cockroachdb\n | \"bool\" // postgres, mysql, cockroachdb, spanner\n\n // text/binary types\n | \"tinyblob\" // mysql\n | \"tinytext\" // mysql\n | \"mediumblob\" // mysql\n | \"mediumtext\" // mysql\n | \"blob\" // mysql, oracle, sqlite, cockroachdb, sap\n | \"text\" // mysql, postgres, mssql, sqlite, cockroachdb, sap\n | \"ntext\" // mssql\n | \"citext\" // postgres\n | \"hstore\" // postgres\n | \"longblob\" // mysql\n | \"longtext\" // mysql\n | \"alphanum\" // sap\n | \"shorttext\" // sap\n | \"bytes\" // cockroachdb, spanner\n | \"bytea\" // postgres, cockroachdb\n | \"long\" // oracle\n | \"raw\" // oracle\n | \"long raw\" // oracle\n | \"bfile\" // oracle\n | \"clob\" // oracle, sqlite, sap\n | \"nclob\" // oracle, sap\n | \"image\" // mssql\n\n // date types\n | \"timetz\" // postgres\n | \"timestamptz\" // postgres, cockroachdb\n | \"timestamp with local time zone\" // oracle\n | \"smalldatetime\" // mssql\n | \"date\" // mysql, postgres, mssql, oracle, sqlite, spanner\n | \"interval year to month\" // oracle\n | \"interval day to second\" // oracle\n | \"interval\" // postgres, cockroachdb\n | \"year\" // mysql\n | \"seconddate\" // sap\n\n // geometric types\n | \"point\" // postgres, mysql\n | \"line\" // postgres\n | \"lseg\" // postgres\n | \"box\" // postgres\n | \"circle\" // postgres\n | \"path\" // postgres\n | \"polygon\" // postgres, mysql\n | \"geography\" // mssql\n | \"geometry\" // mysql\n | \"linestring\" // mysql\n | \"multipoint\" // mysql\n | \"multilinestring\" // mysql\n | \"multipolygon\" // mysql\n | \"geometrycollection\" // mysql\n | \"st_geometry\" // sap\n | \"st_point\" // sap\n\n // range types\n | \"int4range\" // postgres\n | \"int8range\" // postgres\n | \"numrange\" // postgres\n | \"tsrange\" // postgres\n | \"tstzrange\" // postgres\n | \"daterange\" // postgres\n\n // multirange types\n | \"int4multirange\" // postgres\n | \"int8multirange\" // postgres\n | \"nummultirange\" // postgres\n | \"tsmultirange\" // postgres\n | \"tstzmultirange\" // postgres\n | \"datemultirange\" // postgres\n\n // other types\n | \"enum\" // mysql, postgres\n | \"set\" // mysql\n | \"cidr\" // postgres\n | \"inet\" // postgres, cockroachdb\n | \"inet4\" // mariadb\n | \"inet6\" // mariadb\n | \"macaddr\" // postgres\n | \"macaddr8\" // postgres\n | \"bit\" // postgres, mssql\n | \"bit varying\" // postgres\n | \"varbit\" // postgres\n | \"tsvector\" // postgres\n | \"tsquery\" // postgres\n | \"uuid\" // postgres, cockroachdb, mariadb\n | \"xml\" // mssql, postgres\n | \"json\" // mysql, postgres, cockroachdb, spanner\n | \"jsonb\" // postgres, cockroachdb\n | \"varbinary\" // mssql, sap\n | \"hierarchyid\" // mssql\n | \"sql_variant\" // mssql\n | \"rowid\" // oracle\n | \"urowid\" // oracle\n | \"uniqueidentifier\" // mssql\n | \"rowversion\" // mssql\n | \"array\" // cockroachdb, sap, spanner\n | \"cube\" // postgres\n | \"ltree\" // postgres\n\n/**\n * Any column type column can be.\n */\nexport type ColumnType =\n | WithPrecisionColumnType\n | WithLengthColumnType\n | WithWidthColumnType\n | SpatialColumnType\n | SimpleColumnType\n | BooleanConstructor\n | DateConstructor\n | NumberConstructor\n | StringConstructor\n"],"sourceRoot":"../.."}
|
|
@@ -85,11 +85,10 @@ class EntityMetadataValidator {
|
|
|
85
85
|
.filter((column) => !column.isVirtualProperty)
|
|
86
86
|
.forEach((column) => {
|
|
87
87
|
const normalizedColumn = driver.normalizeType(column);
|
|
88
|
-
if (driver.supportedDataTypes.
|
|
89
|
-
-1)
|
|
88
|
+
if (!driver.supportedDataTypes.includes(normalizedColumn))
|
|
90
89
|
throw new DataTypeNotSupportedError_1.DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);
|
|
91
90
|
if (column.length &&
|
|
92
|
-
driver.withLengthColumnTypes.
|
|
91
|
+
!driver.withLengthColumnTypes.includes(normalizedColumn))
|
|
93
92
|
throw new error_1.TypeORMError(`Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`);
|
|
94
93
|
if (column.type === "enum" &&
|
|
95
94
|
!column.enum &&
|
|
@@ -213,7 +212,6 @@ class EntityMetadataValidator {
|
|
|
213
212
|
throw new error_1.TypeORMError(`Relation ${entityMetadata.name}#${relation.propertyName} and ${relation.inverseRelation.entityMetadata.name}#${relation.inverseRelation.propertyName} both has cascade remove set. ` +
|
|
214
213
|
`This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`);
|
|
215
214
|
}); // todo: maybe better just deny removal from one to one relation without join column?
|
|
216
|
-
entityMetadata.eagerRelations.forEach((relation) => { });
|
|
217
215
|
}
|
|
218
216
|
/**
|
|
219
217
|
* Validates dependencies of the entity metadatas.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":";;;AACA,kFAA8E;AAC9E,4EAAwE;AACxE,+CAA2C;AAE3C,kFAA8E;AAE9E,8EAA0E;AAC1E,gFAA4E;AAC5E,oCAAuC;AACvC,uDAAmD;AAEnD,mEAAmE;AACnE,6FAA6F;AAC7F,sEAAsE;AACtE,mGAAmG;AACnG,2GAA2G;AAC3G,6DAA6D;AAC7D,uEAAuE;AACvE,iFAAiF;AAEjF,2FAA2F;AAC3F,wHAAwH;AACxH,gIAAgI;AAChI,mGAAmG;AACnG,8EAA8E;AAC9E,8CAA8C;AAC9C,yDAAyD;AAEzD;;GAEG;AACH,MAAa,uBAAuB;IAChC,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,YAAY,CAAC,eAAiC,EAAE,MAAc;QAC1D,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CACvC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,eAAe,EAAE,MAAM,CAAC,CACzD,CAAA;QACD,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAA;QAC1C,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAA;IAChD,CAAC;IAED;;OAEG;IACH,QAAQ,CACJ,cAA8B,EAC9B,kBAAoC,EACpC,MAAc;QAEd,oCAAoC;QACpC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU;YACnE,MAAM,IAAI,qDAAyB,CAAC,cAAc,CAAC,CAAA;QAEvD,uEAAuE;QACvE,6DAA6D;QAC7D,IAAI,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,uBAAuB,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAC/D,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CACnC,cAAc,CAAC,wBAAwB;gBACvC,eAAe,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAClD,CAAA;YACD,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC3B,MAAM,IAAI,oBAAY,CAClB,UAAU,cAAc,CAAC,IAAI,sGAAsG,CACtI,CAAA;YACL,CAAC;QACL,CAAC;QAED,gEAAgE;QAChE,uEAAuE;QACvE,IACI,cAAc,CAAC,kBAAkB,KAAK,KAAK;YAC3C,cAAc,CAAC,SAAS,KAAK,cAAc,EAC7C,CAAC;YACC,IAAI,CAAC,cAAc,CAAC,mBAAmB;gBACnC,MAAM,IAAI,oBAAY,CAClB,UAAU,cAAc,CAAC,IAAI,kIAAkI,CAClK,CAAA;YAEL,IAAI,OAAO,cAAc,CAAC,kBAAkB,KAAK,WAAW;gBACxD,MAAM,IAAI,oBAAY,CAClB,UAAU,cAAc,CAAC,IAAI,+EAA+E,CAC/G,CAAA;YAEL,MAAM,oCAAoC,GACtC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACjC,OAAO,CACH,QAAQ,KAAK,cAAc;oBAC3B,CAAC,QAAQ,CAAC,kBAAkB,KAAK,KAAK;wBAClC,QAAQ,CAAC,SAAS,KAAK,cAAc,CAAC;oBAC1C,QAAQ,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS;oBAC/C,QAAQ,CAAC,kBAAkB;wBACvB,cAAc,CAAC,kBAAkB;oBACrC,QAAQ,CAAC,eAAe,CAAC,IAAI,CACzB,CAAC,MAAM,EAAE,EAAE,CACP,cAAc,CAAC,eAAe,CAAC,OAAO,CAClC,MAAM,CACT,KAAK,CAAC,CAAC,CACf,CACJ,CAAA;YACL,CAAC,CAAC,CAAA;YACN,IAAI,oCAAoC;gBACpC,MAAM,IAAI,oBAAY,CAClB,YAAY,cAAc,CAAC,IAAI,QAAQ,oCAAoC,CAAC,IAAI,2GAA2G,CAC9L,CAAA;QACT,CAAC;QAED,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;YACpD,IACI,aAAa,CAAC,QAAQ,CAAC,WAAW;gBAClC,aAAa,CAAC,QAAQ,CAAC,UAAU;gBAEjC,MAAM,IAAI,oBAAY,CAClB,2EAA2E,CAC9E,CAAA;QACT,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YACvC,cAAc,CAAC,OAAO;iBACjB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;iBAC7C,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChB,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CACzC,MAAM,CACK,CAAA;gBACf,IACI,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBACnD,CAAC,CAAC;oBAEF,MAAM,IAAI,qDAAyB,CAC/B,MAAM,EACN,gBAAgB,EAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CACtB,CAAA;gBACL,IACI,MAAM,CAAC,MAAM;oBACb,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAChC,gBAAgB,CACnB,KAAK,CAAC,CAAC;oBAER,MAAM,IAAI,oBAAY,CAClB,UAAU,MAAM,CAAC,YAAY,cAAc,cAAc,CAAC,IAAI,oCAAoC,CACrG,CAAA;gBACL,IACI,MAAM,CAAC,IAAI,KAAK,MAAM;oBACtB,CAAC,MAAM,CAAC,IAAI;oBACZ,CAAC,MAAM,CAAC,QAAQ;oBAEhB,MAAM,IAAI,oBAAY,CAClB,WAAW,MAAM,CAAC,YAAY,gBAAgB,cAAc,CAAC,IAAI,oEAAoE,CACxI,CAAA;YACT,CAAC,CAAC,CAAA;QACV,CAAC;QAED,IACI,yBAAW,CAAC,aAAa,CAAC,MAAM,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,EACxC,CAAC;YACC,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAClD,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,kBAAkB,KAAK,MAAM,CACjE,CAAA;YACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;gBAC3B,MAAM,IAAI,oBAAY,CAClB,YAAY,cAAc,CAAC,IAAI,sEAAsE,CACxG,CAAA;QACT,CAAC;QAED,gHAAgH;QAChH,4GAA4G;QAC5G,iHAAiH;QACjH,IAAI,yBAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,MAAM,CACnD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAClC,CAAA;YACD,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;gBACtD,MAAM,IAAI,iDAAuB,CAAC,UAAU,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAChD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAC7B,CAAA;YACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;gBACzB,MAAM,IAAI,oBAAY,CAClB,yDAAyD,CAC5D,CAAA;QACT,CAAC;QAED,mDAAmD;QACnD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAC7C,CAAC,MAAM,EAAE,EAAE,CACP,MAAM,CAAC,YAAY;gBACnB,CAAC,CAAC,MAAM,CAAC,aAAa;oBAClB,MAAM,CAAC,aAAa,KAAK,SAAS,CAAC,CAC9C,CAAA;YACD,IAAI,aAAa;gBACb,MAAM,IAAI,oBAAY,CAClB,WAAW,aAAa,CAAC,YAAY,gBAAgB,cAAc,CAAC,IAAI,+EAA+E,CAC1J,CAAA;QACT,CAAC;QAED,4DAA4D;QAC5D,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE;YACpD,gBAAgB,EAAE,IAAI;SACzB,CAAC,CAAA;QACF,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1C,IAAI,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAChD,uGAAuG;gBACvG,IAAI,QAAQ,CAAC,kBAAkB,KAAK,KAAK;oBAAE,OAAM;gBAEjD,sDAAsD;gBACtD,MAAM,wBAAwB,GAC1B,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;gBAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC;oBACvC,MAAM,IAAI,mDAAwB,CAAC,QAAQ,CAAC,CAAA;YACpD,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,qBAAqB;QACrB,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1C,sBAAsB;YACtB,IACI,MAAM,CAAC,sBAAsB;gBAC7B,QAAQ,CAAC,QAAQ;gBACjB,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC5D,CAAC;gBACC,MAAM,IAAI,oBAAY,CAClB,iBAAiB,QAAQ,CAAC,QAAQ,0BAA0B,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CACrF,CAAA;YACL,CAAC;YAED,sBAAsB;YACtB,IACI,MAAM,CAAC,sBAAsB;gBAC7B,QAAQ,CAAC,QAAQ;gBACjB,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC5D,CAAC;gBACC,MAAM,IAAI,oBAAY,CAClB,iBAAiB,QAAQ,CAAC,QAAQ,sBAAsB,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CACjF,CAAA;YACL,CAAC;YAED,qBAAqB;YACrB,4EAA4E;YAC5E,kBAAkB;YAClB,4BAA4B;YAC5B,kCAAkC;YAClC,+EAA+E;YAC/E,iGAAiG;YACjG,yEAAyE;YACzE,uFAAuF;YACvF,IAAI;YACJ,sBAAsB;YACtB,8GAA8G;YAC9G,uDAAuD;YACvD,kBAAkB;YAClB;;;;;;;;;;;;;;;;;;;6EAmBiE;YACjE,wFAAwF;YACxF,qEAAqE;YACrE,qBAAqB;YACrB,yHAAyH;YACzH,iEAAiE;YACjE,mGAAmG;YACnG,oGAAoG;YACpG,oGAAoG;YACpG,6IAA6I;YAC7I,sLAAsL;YACtL,wEAAwE;YACxE,0IAA0I;YAC1I,8FAA8F;YAC9F,qJAAqJ;YACrJ,oHAAoH;YACpH,oEAAoE;QACxE,CAAC,CAAC,CAAA;QAEF,0GAA0G;QAC1G,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1C,MAAM,uBAAuB,GACzB,QAAQ,CAAC,eAAe;gBACxB,QAAQ,CAAC,eAAe;gBACxB,QAAQ,CAAC,eAAgB,CAAC,eAAe,CAAA;YAC7C,IAAI,uBAAuB;gBACvB,MAAM,IAAI,oBAAY,CAClB,YAAY,cAAc,CAAC,IAAI,IAC3B,QAAQ,CAAC,YACb,QAAQ,QAAQ,CAAC,eAAgB,CAAC,cAAc,CAAC,IAAI,IACjD,QAAQ,CAAC,eAAgB,CAAC,YAC9B,gCAAgC;oBAC5B,8GAA8G,CACrH,CAAA;QACT,CAAC,CAAC,CAAA,CAAC,qFAAqF;QAExF,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACO,oBAAoB,CAAC,eAAiC;QAC5D,MAAM,KAAK,GAAG,IAAI,mBAAQ,EAAE,CAAA;QAC5B,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YACvC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;QACF,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YACvC,cAAc,CAAC,wBAAwB;iBAClC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;iBAC1C,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAClB,KAAK,CAAC,aAAa,CACf,cAAc,CAAC,IAAI,EACnB,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CACtC,CAAA;YACL,CAAC,CAAC,CAAA;QACV,CAAC,CAAC,CAAA;QACF,IAAI,CAAC;YACD,KAAK,CAAC,YAAY,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,+CAAsB,CAC5B,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAChE,CAAA;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACO,sBAAsB,CAAC,eAAiC;QAC9D,eAAe,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YACvC,cAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC/C,IACI,QAAQ,CAAC,eAAe;oBACxB,QAAQ,CAAC,eAAe,CAAC,OAAO;oBAEhC,MAAM,IAAI,oBAAY,CAClB,2CAA2C;wBACvC,GAAG,cAAc,CAAC,UAAU,IAAI,QAAQ,CAAC,YAAY,gDAAgD;wBACrG,GAAG,QAAQ,CAAC,qBAAqB,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,kCAAkC;wBACvH,sDAAsD,CAC7D,CAAA;YACT,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;CACJ;AAhVD,0DAgVC","file":"EntityMetadataValidator.js","sourcesContent":["import { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { MissingPrimaryColumnError } from \"../error/MissingPrimaryColumnError\"\nimport { CircularRelationsError } from \"../error/CircularRelationsError\"\nimport { DepGraph } from \"../util/DepGraph\"\nimport { Driver } from \"../driver/Driver\"\nimport { DataTypeNotSupportedError } from \"../error/DataTypeNotSupportedError\"\nimport { ColumnType } from \"../driver/types/ColumnTypes\"\nimport { NoConnectionOptionError } from \"../error/NoConnectionOptionError\"\nimport { InitializedRelationError } from \"../error/InitializedRelationError\"\nimport { TypeORMError } from \"../error\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given entity metadatas.\n */\n validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n entityMetadatas.forEach((entityMetadata) =>\n this.validate(entityMetadata, entityMetadatas, driver),\n )\n this.validateDependencies(entityMetadatas)\n this.validateEagerRelations(entityMetadatas)\n }\n\n /**\n * Validates given entity metadata.\n */\n validate(\n entityMetadata: EntityMetadata,\n allEntityMetadatas: EntityMetadata[],\n driver: Driver,\n ) {\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata)\n\n // if entity has multiple primary keys and uses custom constraint name,\n // then all primary keys should have the same constraint name\n if (entityMetadata.primaryColumns.length > 1) {\n const areConstraintNamesEqual = entityMetadata.primaryColumns.every(\n (columnMetadata, i, columnMetadatas) =>\n columnMetadata.primaryKeyConstraintName ===\n columnMetadatas[0].primaryKeyConstraintName,\n )\n if (!areConstraintNamesEqual) {\n throw new TypeORMError(\n `Entity ${entityMetadata.name} has multiple primary columns with different constraint names. Constraint names should be the equal.`,\n )\n }\n }\n\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (\n entityMetadata.inheritancePattern === \"STI\" ||\n entityMetadata.tableType === \"entity-child\"\n ) {\n if (!entityMetadata.discriminatorColumn)\n throw new TypeORMError(\n `Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`,\n )\n\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new TypeORMError(\n `Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`,\n )\n\n const sameDiscriminatorValueEntityMetadata =\n allEntityMetadatas.find((metadata) => {\n return (\n metadata !== entityMetadata &&\n (metadata.inheritancePattern === \"STI\" ||\n metadata.tableType === \"entity-child\") &&\n metadata.tableName === entityMetadata.tableName &&\n metadata.discriminatorValue ===\n entityMetadata.discriminatorValue &&\n metadata.inheritanceTree.some(\n (parent) =>\n entityMetadata.inheritanceTree.indexOf(\n parent,\n ) !== -1,\n )\n )\n })\n if (sameDiscriminatorValueEntityMetadata)\n throw new TypeORMError(\n `Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`,\n )\n }\n\n entityMetadata.relationCounts.forEach((relationCount) => {\n if (\n relationCount.relation.isManyToOne ||\n relationCount.relation.isOneToOne\n )\n throw new TypeORMError(\n `Relation count can not be implemented on ManyToOne or OneToOne relations.`,\n )\n })\n\n if (!(driver.options.type === \"mongodb\")) {\n entityMetadata.columns\n .filter((column) => !column.isVirtualProperty)\n .forEach((column) => {\n const normalizedColumn = driver.normalizeType(\n column,\n ) as ColumnType\n if (\n driver.supportedDataTypes.indexOf(normalizedColumn) ===\n -1\n )\n throw new DataTypeNotSupportedError(\n column,\n normalizedColumn,\n driver.options.type,\n )\n if (\n column.length &&\n driver.withLengthColumnTypes.indexOf(\n normalizedColumn,\n ) === -1\n )\n throw new TypeORMError(\n `Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`,\n )\n if (\n column.type === \"enum\" &&\n !column.enum &&\n !column.enumName\n )\n throw new TypeORMError(\n `Column \"${column.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as enum, but missing \"enum\" or \"enumName\" properties.`,\n )\n })\n }\n\n if (\n DriverUtils.isMySQLFamily(driver) ||\n driver.options.type === \"aurora-mysql\"\n ) {\n const generatedColumns = entityMetadata.columns.filter(\n (column) =>\n column.isGenerated && column.generationStrategy !== \"uuid\",\n )\n if (generatedColumns.length > 1)\n throw new TypeORMError(\n `Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`,\n )\n }\n\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (DriverUtils.isMySQLFamily(driver)) {\n const metadatasWithDatabase = allEntityMetadatas.filter(\n (metadata) => metadata.database,\n )\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\")\n }\n\n if (driver.options.type === \"mssql\") {\n const charsetColumns = entityMetadata.columns.filter(\n (column) => column.charset,\n )\n if (charsetColumns.length > 1)\n throw new TypeORMError(\n `Character set specifying is not supported in Sql Server`,\n )\n }\n\n // Postgres supports only STORED generated columns.\n if (driver.options.type === \"postgres\") {\n const virtualColumn = entityMetadata.columns.find(\n (column) =>\n column.asExpression &&\n (!column.generatedType ||\n column.generatedType === \"VIRTUAL\"),\n )\n if (virtualColumn)\n throw new TypeORMError(\n `Column \"${virtualColumn.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as VIRTUAL, but Postgres supports only STORED generated columns.`,\n )\n }\n\n // check if relations are all without initialized properties\n const entityInstance = entityMetadata.create(undefined, {\n fromDeserializer: true,\n })\n entityMetadata.relations.forEach((relation) => {\n if (relation.isManyToMany || relation.isOneToMany) {\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false) return\n\n // get entity relation value and check if its an array\n const relationInitializedValue =\n relation.getEntityValue(entityInstance)\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation)\n }\n })\n\n // validate relations\n entityMetadata.relations.forEach((relation) => {\n // check OnDeleteTypes\n if (\n driver.supportedOnDeleteTypes &&\n relation.onDelete &&\n !driver.supportedOnDeleteTypes.includes(relation.onDelete)\n ) {\n throw new TypeORMError(\n `OnDeleteType \"${relation.onDelete}\" is not supported for ${driver.options.type}!`,\n )\n }\n\n // check OnUpdateTypes\n if (\n driver.supportedOnUpdateTypes &&\n relation.onUpdate &&\n !driver.supportedOnUpdateTypes.includes(relation.onUpdate)\n ) {\n throw new TypeORMError(\n `OnUpdateType \"${relation.onUpdate}\" is not valid for ${driver.options.type}!`,\n )\n }\n\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new TypeORMError(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new TypeORMError(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n })\n\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach((relation) => {\n const isCircularCascadeRemove =\n relation.isCascadeRemove &&\n relation.inverseRelation &&\n relation.inverseRelation!.isCascadeRemove\n if (isCircularCascadeRemove)\n throw new TypeORMError(\n `Relation ${entityMetadata.name}#${\n relation.propertyName\n } and ${relation.inverseRelation!.entityMetadata.name}#${\n relation.inverseRelation!.propertyName\n } both has cascade remove set. ` +\n `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`,\n )\n }) // todo: maybe better just deny removal from one to one relation without join column?\n\n entityMetadata.eagerRelations.forEach((relation) => {})\n }\n\n /**\n * Validates dependencies of the entity metadatas.\n */\n protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n const graph = new DepGraph()\n entityMetadatas.forEach((entityMetadata) => {\n graph.addNode(entityMetadata.name)\n })\n entityMetadatas.forEach((entityMetadata) => {\n entityMetadata.relationsWithJoinColumns\n .filter((relation) => !relation.isNullable)\n .forEach((relation) => {\n graph.addDependency(\n entityMetadata.name,\n relation.inverseEntityMetadata.name,\n )\n })\n })\n try {\n graph.overallOrder()\n } catch (err) {\n throw new CircularRelationsError(\n err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"),\n )\n }\n }\n\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n entityMetadatas.forEach((entityMetadata) => {\n entityMetadata.eagerRelations.forEach((relation) => {\n if (\n relation.inverseRelation &&\n relation.inverseRelation.isEager\n )\n throw new TypeORMError(\n `Circular eager relations are disallowed. ` +\n `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n ` Remove \"eager: true\" from one side of the relation.`,\n )\n })\n })\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../../src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":"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","file":"EntityMetadataValidator.js","sourcesContent":["import { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { MissingPrimaryColumnError } from \"../error/MissingPrimaryColumnError\"\nimport { CircularRelationsError } from \"../error/CircularRelationsError\"\nimport { DepGraph } from \"../util/DepGraph\"\nimport { Driver } from \"../driver/Driver\"\nimport { DataTypeNotSupportedError } from \"../error/DataTypeNotSupportedError\"\nimport { ColumnType } from \"../driver/types/ColumnTypes\"\nimport { NoConnectionOptionError } from \"../error/NoConnectionOptionError\"\nimport { InitializedRelationError } from \"../error/InitializedRelationError\"\nimport { TypeORMError } from \"../error\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given entity metadatas.\n */\n validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n entityMetadatas.forEach((entityMetadata) =>\n this.validate(entityMetadata, entityMetadatas, driver),\n )\n this.validateDependencies(entityMetadatas)\n this.validateEagerRelations(entityMetadatas)\n }\n\n /**\n * Validates given entity metadata.\n */\n validate(\n entityMetadata: EntityMetadata,\n allEntityMetadatas: EntityMetadata[],\n driver: Driver,\n ) {\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata)\n\n // if entity has multiple primary keys and uses custom constraint name,\n // then all primary keys should have the same constraint name\n if (entityMetadata.primaryColumns.length > 1) {\n const areConstraintNamesEqual = entityMetadata.primaryColumns.every(\n (columnMetadata, i, columnMetadatas) =>\n columnMetadata.primaryKeyConstraintName ===\n columnMetadatas[0].primaryKeyConstraintName,\n )\n if (!areConstraintNamesEqual) {\n throw new TypeORMError(\n `Entity ${entityMetadata.name} has multiple primary columns with different constraint names. Constraint names should be the equal.`,\n )\n }\n }\n\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (\n entityMetadata.inheritancePattern === \"STI\" ||\n entityMetadata.tableType === \"entity-child\"\n ) {\n if (!entityMetadata.discriminatorColumn)\n throw new TypeORMError(\n `Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`,\n )\n\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new TypeORMError(\n `Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`,\n )\n\n const sameDiscriminatorValueEntityMetadata =\n allEntityMetadatas.find((metadata) => {\n return (\n metadata !== entityMetadata &&\n (metadata.inheritancePattern === \"STI\" ||\n metadata.tableType === \"entity-child\") &&\n metadata.tableName === entityMetadata.tableName &&\n metadata.discriminatorValue ===\n entityMetadata.discriminatorValue &&\n metadata.inheritanceTree.some(\n (parent) =>\n entityMetadata.inheritanceTree.indexOf(\n parent,\n ) !== -1,\n )\n )\n })\n if (sameDiscriminatorValueEntityMetadata)\n throw new TypeORMError(\n `Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`,\n )\n }\n\n entityMetadata.relationCounts.forEach((relationCount) => {\n if (\n relationCount.relation.isManyToOne ||\n relationCount.relation.isOneToOne\n )\n throw new TypeORMError(\n `Relation count can not be implemented on ManyToOne or OneToOne relations.`,\n )\n })\n\n if (!(driver.options.type === \"mongodb\")) {\n entityMetadata.columns\n .filter((column) => !column.isVirtualProperty)\n .forEach((column) => {\n const normalizedColumn = driver.normalizeType(\n column,\n ) as ColumnType\n if (!driver.supportedDataTypes.includes(normalizedColumn))\n throw new DataTypeNotSupportedError(\n column,\n normalizedColumn,\n driver.options.type,\n )\n if (\n column.length &&\n !driver.withLengthColumnTypes.includes(normalizedColumn)\n )\n throw new TypeORMError(\n `Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`,\n )\n if (\n column.type === \"enum\" &&\n !column.enum &&\n !column.enumName\n )\n throw new TypeORMError(\n `Column \"${column.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as enum, but missing \"enum\" or \"enumName\" properties.`,\n )\n })\n }\n\n if (\n DriverUtils.isMySQLFamily(driver) ||\n driver.options.type === \"aurora-mysql\"\n ) {\n const generatedColumns = entityMetadata.columns.filter(\n (column) =>\n column.isGenerated && column.generationStrategy !== \"uuid\",\n )\n if (generatedColumns.length > 1)\n throw new TypeORMError(\n `Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`,\n )\n }\n\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (DriverUtils.isMySQLFamily(driver)) {\n const metadatasWithDatabase = allEntityMetadatas.filter(\n (metadata) => metadata.database,\n )\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\")\n }\n\n if (driver.options.type === \"mssql\") {\n const charsetColumns = entityMetadata.columns.filter(\n (column) => column.charset,\n )\n if (charsetColumns.length > 1)\n throw new TypeORMError(\n `Character set specifying is not supported in Sql Server`,\n )\n }\n\n // Postgres supports only STORED generated columns.\n if (driver.options.type === \"postgres\") {\n const virtualColumn = entityMetadata.columns.find(\n (column) =>\n column.asExpression &&\n (!column.generatedType ||\n column.generatedType === \"VIRTUAL\"),\n )\n if (virtualColumn)\n throw new TypeORMError(\n `Column \"${virtualColumn.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as VIRTUAL, but Postgres supports only STORED generated columns.`,\n )\n }\n\n // check if relations are all without initialized properties\n const entityInstance = entityMetadata.create(undefined, {\n fromDeserializer: true,\n })\n entityMetadata.relations.forEach((relation) => {\n if (relation.isManyToMany || relation.isOneToMany) {\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false) return\n\n // get entity relation value and check if its an array\n const relationInitializedValue =\n relation.getEntityValue(entityInstance)\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation)\n }\n })\n\n // validate relations\n entityMetadata.relations.forEach((relation) => {\n // check OnDeleteTypes\n if (\n driver.supportedOnDeleteTypes &&\n relation.onDelete &&\n !driver.supportedOnDeleteTypes.includes(relation.onDelete)\n ) {\n throw new TypeORMError(\n `OnDeleteType \"${relation.onDelete}\" is not supported for ${driver.options.type}!`,\n )\n }\n\n // check OnUpdateTypes\n if (\n driver.supportedOnUpdateTypes &&\n relation.onUpdate &&\n !driver.supportedOnUpdateTypes.includes(relation.onUpdate)\n ) {\n throw new TypeORMError(\n `OnUpdateType \"${relation.onUpdate}\" is not valid for ${driver.options.type}!`,\n )\n }\n\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new TypeORMError(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new TypeORMError(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n })\n\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach((relation) => {\n const isCircularCascadeRemove =\n relation.isCascadeRemove &&\n relation.inverseRelation &&\n relation.inverseRelation!.isCascadeRemove\n if (isCircularCascadeRemove)\n throw new TypeORMError(\n `Relation ${entityMetadata.name}#${\n relation.propertyName\n } and ${relation.inverseRelation!.entityMetadata.name}#${\n relation.inverseRelation!.propertyName\n } both has cascade remove set. ` +\n `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`,\n )\n }) // todo: maybe better just deny removal from one to one relation without join column?\n }\n\n /**\n * Validates dependencies of the entity metadatas.\n */\n protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n const graph = new DepGraph()\n entityMetadatas.forEach((entityMetadata) => {\n graph.addNode(entityMetadata.name)\n })\n entityMetadatas.forEach((entityMetadata) => {\n entityMetadata.relationsWithJoinColumns\n .filter((relation) => !relation.isNullable)\n .forEach((relation) => {\n graph.addDependency(\n entityMetadata.name,\n relation.inverseEntityMetadata.name,\n )\n })\n })\n try {\n graph.overallOrder()\n } catch (err) {\n throw new CircularRelationsError(\n err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"),\n )\n }\n }\n\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n entityMetadatas.forEach((entityMetadata) => {\n entityMetadata.eagerRelations.forEach((relation) => {\n if (\n relation.inverseRelation &&\n relation.inverseRelation.isEager\n )\n throw new TypeORMError(\n `Circular eager relations are disallowed. ` +\n `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n ` Remove \"eager: true\" from one side of the relation.`,\n )\n })\n })\n }\n}\n"],"sourceRoot":".."}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "name": "typeorm", "version": "0.3.26-dev.
|
|
1
|
+
{ "name": "typeorm", "version": "0.3.26-dev.abf8863", "description": "Data-Mapper ORM for TypeScript and ES2021+. Supports MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, SAP HANA, SQLite, MongoDB databases.", "homepage": "https://typeorm.io", "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "funding": "https://opencollective.com/typeorm", "license": "MIT", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "exports": { ".": { "types": "./index.d.ts", "node": { "import": "./index.mjs", "require": "./index.js", "types": "./index.d.ts" }, "browser": { "require": "./index.js", "import": "./browser/index.js", "default": "./index.js" } }, "./browser": { "types": "./index.d.ts", "default": "./browser/index.js" }, "./*.js": "./*.js", "./*": { "require": "./*.js", "import": "./*" } }, "main": "./index.js", "module": "./index.mjs", "browser": { "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/bson.typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/typings.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./index.js": "./browser/index.js", "./index.mjs": "./browser/index.js" }, "types": "./index.d.ts", "bin": { "typeorm": "./cli.js", "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js", "typeorm-ts-node-esm": "./cli-ts-node-esm.js" }, "scripts": { "changelog": "standard-changelog", "compile": "rimraf ./build && tsc", "docs:dev": "cd docs && npm run start", "format": "prettier --cache --write \"./**/*.ts\"", "format:ci": "prettier --check \"./**/*.ts\"", "lint": "eslint .", "pack": "gulp pack", "package": "gulp package", "pre-commit": "lint-staged", "prepare": "husky", "publish:preview": "pkg-pr-new publish './build/package' --pnpm --template='./sample/playground'", "test": "npm run compile && npm run test:fast --", "test:ci": "mocha --bail", "test:fast": "mocha", "typecheck": "tsc --noEmit", "watch": "tsc --watch" }, "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", "dayjs": "^1.11.13", "debug": "^4.4.0", "dedent": "^1.6.0", "dotenv": "^16.4.7", "glob": "^10.4.5", "sha.js": "^2.4.11", "sql-highlight": "^6.0.0", "tslib": "^2.8.1", "uuid": "^11.1.0", "yargs": "^17.7.2" }, "devDependencies": { "@eslint/js": "^9.28.0", "@sap/hana-client": "^2.25.22", "@tsconfig/node16": "^16.1.4", "@types/chai": "^4.3.20", "@types/chai-as-promised": "^7.1.8", "@types/debug": "^4.1.12", "@types/gulp-rename": "^2.0.6", "@types/gulp-sourcemaps": "^0.0.38", "@types/mocha": "^10.0.10", "@types/node": "^16.18.126", "@types/sha.js": "^2.4.4", "@types/sinon": "^10.0.20", "@types/sinon-chai": "^4.0.0", "@types/source-map-support": "^0.5.10", "@types/yargs": "^17.0.33", "better-sqlite3": "^8.7.0", "chai": "^4.5.0", "chai-as-promised": "^7.1.2", "class-transformer": "^0.5.1", "eslint": "^9.28.0", "globals": "^16.2.0", "gulp": "^4.0.2", "gulp-rename": "^2.0.0", "gulp-replace": "^1.1.4", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "hdb-pool": "^0.1.6", "husky": "^9.1.7", "lint-staged": "^15.5.2", "mocha": "^10.8.2", "mongodb": "^6.15.0", "mssql": "^11.0.1", "mysql": "^2.18.1", "mysql2": "^3.14.0", "nyc": "^17.1.0", "oracledb": "^6.8.0", "pg": "^8.14.1", "pg-query-stream": "^4.8.1", "pkg-pr-new": "^0.0.43", "prettier": "^2.8.8", "redis": "^4.7.0", "remap-istanbul": "^0.13.0", "rimraf": "^5.0.10", "sinon": "^15.2.0", "sinon-chai": "^3.7.0", "sort-package-json": "^2.15.1", "source-map-support": "^0.5.21", "sql.js": "^1.13.0", "sqlite3": "^5.1.7", "standard-changelog": "^6.0.0", "ts-node": "^10.9.2", "typescript": "^5.8.3", "typescript-eslint": "^8.33.1" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^5.8.0 || ^6.0.0", "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "reflect-metadata": "^0.1.14 || ^0.2.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { "optional": true }, "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "ts-node": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "engines": { "node": ">=16.13.0" }, "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "readmeFilename": "README.md", "tags": [ "orm", "typescript", "typescript-orm", "mariadb", "mariadb-orm", "mysql", "mysql-orm", "oracle", "oracle-orm", "postgresql", "postgresql-orm", "sap-hana", "sap-hana-orm", "spanner", "cloud-spanner", "cloud-spanner-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm" ] }
|