typeorm 0.3.10-dev.f24b262 → 0.3.11-dev.19536ed
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/README.md +3 -1
- package/browser/data-source/BaseDataSourceOptions.d.ts +4 -0
- package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
- package/browser/decorator/columns/VirtualColumn.d.ts +10 -0
- package/browser/decorator/columns/VirtualColumn.js +46 -0
- package/browser/decorator/columns/VirtualColumn.js.map +1 -0
- package/browser/decorator/options/RelationOptions.d.ts +5 -2
- package/browser/decorator/options/RelationOptions.js.map +1 -1
- package/browser/decorator/options/VirtualColumnOptions.d.ts +27 -0
- package/browser/decorator/options/VirtualColumnOptions.js +3 -0
- package/browser/decorator/options/VirtualColumnOptions.js.map +1 -0
- package/browser/driver/aurora-mysql/AuroraMysqlConnectionOptions.d.ts +1 -0
- package/browser/driver/aurora-mysql/AuroraMysqlConnectionOptions.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +4 -0
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +26 -7
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/browser/driver/aurora-postgres/AuroraPostgresConnectionOptions.d.ts +1 -0
- package/browser/driver/aurora-postgres/AuroraPostgresConnectionOptions.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +1 -0
- package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/browser/driver/capacitor/CapacitorConnectionOptions.d.ts +1 -0
- package/browser/driver/capacitor/CapacitorConnectionOptions.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +1 -0
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +5 -3
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaConnectionOptions.d.ts +1 -0
- package/browser/driver/cordova/CordovaConnectionOptions.js.map +1 -1
- package/browser/driver/expo/ExpoConnectionOptions.d.ts +1 -0
- package/browser/driver/expo/ExpoConnectionOptions.js.map +1 -1
- package/browser/driver/mongodb/MongoConnectionOptions.d.ts +0 -4
- package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +9 -1
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +5 -3
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptConnectionOptions.d.ts +1 -0
- package/browser/driver/nativescript/NativescriptConnectionOptions.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.js +6 -0
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.d.ts +1 -1
- package/browser/driver/oracle/OracleQueryRunner.js +5 -3
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +5 -0
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +8 -3
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeConnectionOptions.d.ts +1 -0
- package/browser/driver/react-native/ReactNativeConnectionOptions.js.map +1 -1
- package/browser/driver/sap/SapConnectionOptions.d.ts +1 -0
- package/browser/driver/sap/SapConnectionOptions.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +4 -0
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +1 -1
- package/browser/driver/sap/SapQueryRunner.js +5 -3
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerConnectionOptions.d.ts +1 -0
- package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.js +4 -0
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/sqlite/SqliteConnectionOptions.d.ts +1 -0
- package/browser/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +5 -3
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsConnectionOptions.d.ts +1 -0
- package/browser/driver/sqljs/SqljsConnectionOptions.js.map +1 -1
- package/browser/driver/sqljs/SqljsDriver.d.ts +1 -0
- package/browser/driver/sqljs/SqljsDriver.js +3 -1
- package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.js +3 -1
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerConnectionOptions.d.ts +1 -0
- package/browser/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js +4 -0
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +5 -3
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +4 -2
- package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
- package/browser/index.d.ts +1 -0
- package/browser/index.js +1 -0
- package/browser/index.js.map +1 -1
- package/browser/metadata/ColumnMetadata.d.ts +12 -0
- package/browser/metadata/ColumnMetadata.js +13 -0
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/RelationMetadata.d.ts +4 -2
- package/browser/metadata/RelationMetadata.js.map +1 -1
- package/browser/metadata-args/types/ColumnMode.d.ts +1 -1
- package/browser/metadata-args/types/ColumnMode.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +9 -5
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/migration/MigrationExecutor.js +13 -3
- package/browser/migration/MigrationExecutor.js.map +1 -1
- package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +30 -27
- package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +23 -4
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +1 -1
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/schema-builder/RdbmsSchemaBuilder.js +11 -5
- package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/browser/schema-builder/table/Table.js +1 -1
- package/browser/schema-builder/table/Table.js.map +1 -1
- package/browser/util/DateUtils.js +2 -1
- package/browser/util/DateUtils.js.map +1 -1
- package/browser/util/OrmUtils.js +2 -1
- package/browser/util/OrmUtils.js.map +1 -1
- package/data-source/BaseDataSourceOptions.d.ts +4 -0
- package/data-source/BaseDataSourceOptions.js.map +1 -1
- package/decorator/columns/VirtualColumn.d.ts +10 -0
- package/decorator/columns/VirtualColumn.js +50 -0
- package/decorator/columns/VirtualColumn.js.map +1 -0
- package/decorator/options/RelationOptions.d.ts +5 -2
- package/decorator/options/RelationOptions.js.map +1 -1
- package/decorator/options/VirtualColumnOptions.d.ts +27 -0
- package/decorator/options/VirtualColumnOptions.js +4 -0
- package/decorator/options/VirtualColumnOptions.js.map +1 -0
- package/driver/aurora-mysql/AuroraMysqlConnectionOptions.d.ts +1 -0
- package/driver/aurora-mysql/AuroraMysqlConnectionOptions.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.js +4 -0
- package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +26 -7
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/driver/aurora-postgres/AuroraPostgresConnectionOptions.d.ts +1 -0
- package/driver/aurora-postgres/AuroraPostgresConnectionOptions.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +1 -0
- package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/driver/capacitor/CapacitorConnectionOptions.d.ts +1 -0
- package/driver/capacitor/CapacitorConnectionOptions.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +1 -0
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +5 -3
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaConnectionOptions.d.ts +1 -0
- package/driver/cordova/CordovaConnectionOptions.js.map +1 -1
- package/driver/expo/ExpoConnectionOptions.d.ts +1 -0
- package/driver/expo/ExpoConnectionOptions.js.map +1 -1
- package/driver/mongodb/MongoConnectionOptions.d.ts +0 -4
- package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +9 -1
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +1 -1
- package/driver/mysql/MysqlQueryRunner.js +5 -3
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptConnectionOptions.d.ts +1 -0
- package/driver/nativescript/NativescriptConnectionOptions.js.map +1 -1
- package/driver/oracle/OracleDriver.js +6 -0
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.d.ts +1 -1
- package/driver/oracle/OracleQueryRunner.js +5 -3
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +5 -0
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +1 -1
- package/driver/postgres/PostgresQueryRunner.js +8 -3
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeConnectionOptions.d.ts +1 -0
- package/driver/react-native/ReactNativeConnectionOptions.js.map +1 -1
- package/driver/sap/SapConnectionOptions.d.ts +1 -0
- package/driver/sap/SapConnectionOptions.js.map +1 -1
- package/driver/sap/SapDriver.js +4 -0
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.d.ts +1 -1
- package/driver/sap/SapQueryRunner.js +5 -3
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerConnectionOptions.d.ts +1 -0
- package/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/driver/spanner/SpannerDriver.js +4 -0
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/sqlite/SqliteConnectionOptions.d.ts +1 -0
- package/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +5 -3
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsConnectionOptions.d.ts +1 -0
- package/driver/sqljs/SqljsConnectionOptions.js.map +1 -1
- package/driver/sqljs/SqljsDriver.d.ts +1 -0
- package/driver/sqljs/SqljsDriver.js +3 -1
- package/driver/sqljs/SqljsDriver.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.js +3 -1
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerConnectionOptions.d.ts +1 -0
- package/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.js +4 -0
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +5 -3
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-schema/EntitySchemaRelationOptions.d.ts +4 -2
- package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/index.mjs +2 -0
- package/metadata/ColumnMetadata.d.ts +12 -0
- package/metadata/ColumnMetadata.js +13 -0
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/RelationMetadata.d.ts +4 -2
- package/metadata/RelationMetadata.js.map +1 -1
- package/metadata-args/types/ColumnMode.d.ts +1 -1
- package/metadata-args/types/ColumnMode.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +9 -5
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/migration/MigrationExecutor.js +13 -3
- package/migration/MigrationExecutor.js.map +1 -1
- package/package.json +1 -1
- package/persistence/subject-builder/OneToManySubjectBuilder.js +30 -27
- package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/query-builder/SelectQueryBuilder.js +23 -4
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +1 -1
- package/query-runner/QueryRunner.js.map +1 -1
- package/schema-builder/RdbmsSchemaBuilder.js +11 -5
- package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/schema-builder/table/Table.js +1 -1
- package/schema-builder/table/Table.js.map +1 -1
- package/util/DateUtils.js +2 -1
- package/util/DateUtils.js.map +1 -1
- package/util/OrmUtils.js +2 -1
- package/util/OrmUtils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/cordova/CordovaConnectionOptions.ts"],"names":[],"mappings":"","file":"CordovaConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\n\n/**\n * Sqlite-specific connection options.\n */\nexport interface CordovaConnectionOptions extends BaseDataSourceOptions {\n /**\n * Database type.\n */\n readonly type: \"cordova\"\n\n /**\n * Database name.\n */\n readonly database: string\n\n /**\n * The driver object\n * This defaults to `window.sqlitePlugin`\n */\n readonly driver?: any\n\n /**\n * Storage Location\n */\n readonly location: string\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/cordova/CordovaConnectionOptions.ts"],"names":[],"mappings":"","file":"CordovaConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\n\n/**\n * Sqlite-specific connection options.\n */\nexport interface CordovaConnectionOptions extends BaseDataSourceOptions {\n /**\n * Database type.\n */\n readonly type: \"cordova\"\n\n /**\n * Database name.\n */\n readonly database: string\n\n /**\n * The driver object\n * This defaults to `window.sqlitePlugin`\n */\n readonly driver?: any\n\n /**\n * Storage Location\n */\n readonly location: string\n\n readonly poolSize?: never\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/expo/ExpoConnectionOptions.ts"],"names":[],"mappings":"","file":"ExpoConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\n\n/**\n * Sqlite-specific connection options.\n */\nexport interface ExpoConnectionOptions extends BaseDataSourceOptions {\n /**\n * Database type.\n */\n readonly type: \"expo\"\n\n /**\n * Database name.\n */\n readonly database: string\n\n /**\n * Driver module\n */\n readonly driver: any\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/expo/ExpoConnectionOptions.ts"],"names":[],"mappings":"","file":"ExpoConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\n\n/**\n * Sqlite-specific connection options.\n */\nexport interface ExpoConnectionOptions extends BaseDataSourceOptions {\n /**\n * Database type.\n */\n readonly type: \"expo\"\n\n /**\n * Database name.\n */\n readonly database: string\n\n /**\n * Driver module\n */\n readonly driver: any\n\n readonly poolSize?: never\n}\n"],"sourceRoot":"../.."}
|
|
@@ -43,10 +43,6 @@ export interface MongoConnectionOptions extends BaseDataSourceOptions {
|
|
|
43
43
|
* This defaults to require("mongodb")
|
|
44
44
|
*/
|
|
45
45
|
readonly driver?: any;
|
|
46
|
-
/**
|
|
47
|
-
* Set the maximum poolSize for each individual server or proxy connection.
|
|
48
|
-
*/
|
|
49
|
-
readonly poolSize?: number;
|
|
50
46
|
/**
|
|
51
47
|
* Use ssl connection (needs to have a mongod server with ssl support). Default: false
|
|
52
48
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/mongodb/MongoConnectionOptions.ts"],"names":[],"mappings":"","file":"MongoConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\nimport { ReadPreference } from \"./typings\"\n\n/**\n * MongoDB specific connection options.\n * Synced with http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html\n */\nexport interface MongoConnectionOptions extends BaseDataSourceOptions {\n /**\n * Database type.\n */\n readonly type: \"mongodb\"\n\n /**\n * Connection url where perform connection to.\n */\n readonly url?: string\n\n /**\n * Database host.\n */\n readonly host?: string\n\n /**\n * Database host replica set.\n */\n readonly hostReplicaSet?: string\n\n /**\n * Database host port.\n */\n readonly port?: number\n\n /**\n * Database username.\n */\n readonly username?: string\n\n /**\n * Database password.\n */\n readonly password?: string\n\n /**\n * Database name to connect to.\n */\n readonly database?: string\n\n /**\n * The driver object\n * This defaults to require(\"mongodb\")\n */\n readonly driver?: any\n\n /**\n * Set the maximum poolSize for each individual server or proxy connection.\n */\n readonly poolSize?: number\n\n /**\n * Use ssl connection (needs to have a mongod server with ssl support). Default: false\n */\n readonly ssl?: boolean\n\n /**\n * Validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher).\n * Default: true\n */\n readonly sslValidate?: boolean\n\n /**\n * Array of valid certificates either as Buffers or Strings\n * (needs to have a mongod server with ssl support, 2.4 or higher).\n */\n readonly sslCA?: string | Buffer\n\n /**\n * String or buffer containing the certificate we wish to present\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslCert?: string | Buffer\n\n /**\n * String or buffer containing the certificate private key we wish to present\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslKey?: string\n\n /**\n * String or buffer containing the certificate password\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslPass?: string | Buffer\n\n /**\n * SSL Certificate revocation list binary buffer\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslCRL?: string | Buffer\n\n /**\n * Reconnect on error. Default: true\n */\n readonly autoReconnect?: boolean\n\n /**\n * TCP Socket NoDelay option. Default: true\n */\n readonly noDelay?: boolean\n\n /**\n * The number of milliseconds to wait before initiating keepAlive on the TCP socket. Default: 30000\n */\n readonly keepAlive?: number\n\n /**\n * TCP Connection timeout setting. Default: 30000\n */\n readonly connectTimeoutMS?: number\n\n /**\n * Version of IP stack. Can be 4, 6.\n * If undefined, will attempt to connect with IPv6, and will fall back to IPv4 on failure\n */\n readonly family?: number\n\n /**\n * TCP Socket timeout setting. Default: 360000\n */\n readonly socketTimeoutMS?: number\n\n /**\n * Server attempt to reconnect #times. Default 30\n */\n readonly reconnectTries?: number\n\n /**\n * Server will wait #milliseconds between retries. Default 1000\n */\n readonly reconnectInterval?: number\n\n /**\n * Control if high availability monitoring runs for Replicaset or Mongos proxies. Default true\n */\n readonly ha?: boolean\n\n /**\n * The High availability period for replicaset inquiry. Default: 10000\n */\n readonly haInterval?: number\n\n /**\n * The name of the replicaset to connect to\n */\n readonly replicaSet?: string\n\n /**\n * Sets the range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms).\n * Default: 15\n */\n readonly acceptableLatencyMS?: number\n\n /**\n * Sets the range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms).\n * Default: 15\n */\n readonly secondaryAcceptableLatencyMS?: number\n\n /**\n * Sets if the driver should connect even if no primary is available. Default: false\n */\n readonly connectWithNoPrimary?: boolean\n\n /**\n * If the database authentication is dependent on another databaseName.\n */\n readonly authSource?: string\n\n /**\n * The write concern.\n */\n readonly w?: string | number\n\n /**\n * The write concern timeout value.\n */\n readonly wtimeout?: number\n\n /**\n * Specify a journal write concern. Default: false\n */\n readonly j?: boolean\n\n /**\n * Force server to assign _id values instead of driver. Default: false\n */\n readonly forceServerObjectId?: boolean\n\n /**\n * Serialize functions on any object. Default: false\n */\n readonly serializeFunctions?: boolean\n\n /**\n * Specify if the BSON serializer should ignore undefined fields. Default: false\n */\n readonly ignoreUndefined?: boolean\n\n /**\n * Return document results as raw BSON buffers. Default: false\n */\n readonly raw?: boolean\n\n /**\n * Promotes Long values to number if they fit inside the 53 bits resolution. Default: true\n */\n readonly promoteLongs?: boolean\n\n /**\n * Promotes Binary BSON values to native Node Buffers. Default: false\n */\n readonly promoteBuffers?: boolean\n\n /**\n * Promotes BSON values to native types where possible, set to false to only receive wrapper types. Default: true\n */\n readonly promoteValues?: boolean\n\n /**\n * Enable the wrapping of the callback in the current domain, disabled by default to avoid perf hit. Default: false\n */\n readonly domainsEnabled?: boolean\n\n /**\n * Sets a cap on how many operations the driver will buffer up before giving up on getting a working connection,\n * default is -1 which is unlimited.\n */\n readonly bufferMaxEntries?: number\n\n /**\n * The preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY,\n * ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST).\n */\n readonly readPreference?: ReadPreference | string\n\n /**\n * A primary key factory object for generation of custom _id keys.\n */\n readonly pkFactory?: any\n\n /**\n * A Promise library class the application wishes to use such as Bluebird, must be ES6 compatible.\n */\n readonly promiseLibrary?: any\n\n /**\n * Specify a read concern for the collection. (only MongoDB 3.2 or higher supported).\n */\n readonly readConcern?: any\n\n /**\n * Specify a maxStalenessSeconds value for secondary reads, minimum is 90 seconds\n */\n readonly maxStalenessSeconds?: number\n\n /**\n * Specify the log level used by the driver logger (error/warn/info/debug).\n */\n readonly loggerLevel?: \"error\" | \"warn\" | \"info\" | \"debug\"\n\n // Do not overwrite BaseDataSourceOptions.logger\n // readonly logger?: any;\n\n /**\n * Ensure we check server identify during SSL, set to false to disable checking. Only works for Node 0.12.x or higher. You can pass in a boolean or your own checkServerIdentity override function\n * Default: true\n */\n readonly checkServerIdentity?: boolean | Function\n\n /**\n * Validate MongoClient passed in options for correctness. Default: false\n */\n readonly validateOptions?: boolean | any\n\n /**\n * The name of the application that created this MongoClient instance. MongoDB 3.4 and newer will print this value in the server log upon establishing each connection. It is also recorded in the slow query log and profile collections\n */\n readonly appname?: string\n\n /**\n * Sets the authentication mechanism that MongoDB will use to authenticate the connection\n */\n readonly authMechanism?: string\n\n /**\n * Type of compression to use: snappy or zlib\n */\n readonly compression?: any\n\n /**\n * Specify a file sync write concern. Default: false\n */\n readonly fsync?: boolean\n\n /**\n * Read preference tags\n */\n readonly readPreferenceTags?: any[]\n\n /**\n * The number of retries for a tailable cursor. Default: 5\n */\n readonly numberOfRetries?: number\n\n /**\n * Enable auto reconnecting for single server instances. Default: true\n */\n readonly auto_reconnect?: boolean\n\n /**\n * Enable command monitoring for this client. Default: false\n */\n readonly monitorCommands?: boolean\n\n /**\n * If present, the connection pool will be initialized with minSize connections, and will never dip below minSize connections\n */\n readonly minSize?: number\n\n /**\n * Determines whether or not to use the new url parser. Default: false\n */\n readonly useNewUrlParser?: boolean\n\n /**\n * Determines whether or not to use the new Server Discovery and Monitoring engine. Default: false\n * https://github.com/mongodb/node-mongodb-native/releases/tag/v3.2.1\n */\n readonly useUnifiedTopology?: boolean\n\n /**\n * Automatic Client-Side Field Level Encryption configuration.\n */\n readonly autoEncryption?: any\n\n /**\n * Enables or disables the ability to retry writes upon encountering transient network errors.\n */\n readonly retryWrites?: boolean\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../../src/driver/mongodb/MongoConnectionOptions.ts"],"names":[],"mappings":"","file":"MongoConnectionOptions.js","sourcesContent":["import { BaseDataSourceOptions } from \"../../data-source/BaseDataSourceOptions\"\nimport { ReadPreference } from \"./typings\"\n\n/**\n * MongoDB specific connection options.\n * Synced with http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html\n */\nexport interface MongoConnectionOptions extends BaseDataSourceOptions {\n /**\n * Database type.\n */\n readonly type: \"mongodb\"\n\n /**\n * Connection url where perform connection to.\n */\n readonly url?: string\n\n /**\n * Database host.\n */\n readonly host?: string\n\n /**\n * Database host replica set.\n */\n readonly hostReplicaSet?: string\n\n /**\n * Database host port.\n */\n readonly port?: number\n\n /**\n * Database username.\n */\n readonly username?: string\n\n /**\n * Database password.\n */\n readonly password?: string\n\n /**\n * Database name to connect to.\n */\n readonly database?: string\n\n /**\n * The driver object\n * This defaults to require(\"mongodb\")\n */\n readonly driver?: any\n\n /**\n * Use ssl connection (needs to have a mongod server with ssl support). Default: false\n */\n readonly ssl?: boolean\n\n /**\n * Validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher).\n * Default: true\n */\n readonly sslValidate?: boolean\n\n /**\n * Array of valid certificates either as Buffers or Strings\n * (needs to have a mongod server with ssl support, 2.4 or higher).\n */\n readonly sslCA?: string | Buffer\n\n /**\n * String or buffer containing the certificate we wish to present\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslCert?: string | Buffer\n\n /**\n * String or buffer containing the certificate private key we wish to present\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslKey?: string\n\n /**\n * String or buffer containing the certificate password\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslPass?: string | Buffer\n\n /**\n * SSL Certificate revocation list binary buffer\n * (needs to have a mongod server with ssl support, 2.4 or higher)\n */\n readonly sslCRL?: string | Buffer\n\n /**\n * Reconnect on error. Default: true\n */\n readonly autoReconnect?: boolean\n\n /**\n * TCP Socket NoDelay option. Default: true\n */\n readonly noDelay?: boolean\n\n /**\n * The number of milliseconds to wait before initiating keepAlive on the TCP socket. Default: 30000\n */\n readonly keepAlive?: number\n\n /**\n * TCP Connection timeout setting. Default: 30000\n */\n readonly connectTimeoutMS?: number\n\n /**\n * Version of IP stack. Can be 4, 6.\n * If undefined, will attempt to connect with IPv6, and will fall back to IPv4 on failure\n */\n readonly family?: number\n\n /**\n * TCP Socket timeout setting. Default: 360000\n */\n readonly socketTimeoutMS?: number\n\n /**\n * Server attempt to reconnect #times. Default 30\n */\n readonly reconnectTries?: number\n\n /**\n * Server will wait #milliseconds between retries. Default 1000\n */\n readonly reconnectInterval?: number\n\n /**\n * Control if high availability monitoring runs for Replicaset or Mongos proxies. Default true\n */\n readonly ha?: boolean\n\n /**\n * The High availability period for replicaset inquiry. Default: 10000\n */\n readonly haInterval?: number\n\n /**\n * The name of the replicaset to connect to\n */\n readonly replicaSet?: string\n\n /**\n * Sets the range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms).\n * Default: 15\n */\n readonly acceptableLatencyMS?: number\n\n /**\n * Sets the range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms).\n * Default: 15\n */\n readonly secondaryAcceptableLatencyMS?: number\n\n /**\n * Sets if the driver should connect even if no primary is available. Default: false\n */\n readonly connectWithNoPrimary?: boolean\n\n /**\n * If the database authentication is dependent on another databaseName.\n */\n readonly authSource?: string\n\n /**\n * The write concern.\n */\n readonly w?: string | number\n\n /**\n * The write concern timeout value.\n */\n readonly wtimeout?: number\n\n /**\n * Specify a journal write concern. Default: false\n */\n readonly j?: boolean\n\n /**\n * Force server to assign _id values instead of driver. Default: false\n */\n readonly forceServerObjectId?: boolean\n\n /**\n * Serialize functions on any object. Default: false\n */\n readonly serializeFunctions?: boolean\n\n /**\n * Specify if the BSON serializer should ignore undefined fields. Default: false\n */\n readonly ignoreUndefined?: boolean\n\n /**\n * Return document results as raw BSON buffers. Default: false\n */\n readonly raw?: boolean\n\n /**\n * Promotes Long values to number if they fit inside the 53 bits resolution. Default: true\n */\n readonly promoteLongs?: boolean\n\n /**\n * Promotes Binary BSON values to native Node Buffers. Default: false\n */\n readonly promoteBuffers?: boolean\n\n /**\n * Promotes BSON values to native types where possible, set to false to only receive wrapper types. Default: true\n */\n readonly promoteValues?: boolean\n\n /**\n * Enable the wrapping of the callback in the current domain, disabled by default to avoid perf hit. Default: false\n */\n readonly domainsEnabled?: boolean\n\n /**\n * Sets a cap on how many operations the driver will buffer up before giving up on getting a working connection,\n * default is -1 which is unlimited.\n */\n readonly bufferMaxEntries?: number\n\n /**\n * The preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY,\n * ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST).\n */\n readonly readPreference?: ReadPreference | string\n\n /**\n * A primary key factory object for generation of custom _id keys.\n */\n readonly pkFactory?: any\n\n /**\n * A Promise library class the application wishes to use such as Bluebird, must be ES6 compatible.\n */\n readonly promiseLibrary?: any\n\n /**\n * Specify a read concern for the collection. (only MongoDB 3.2 or higher supported).\n */\n readonly readConcern?: any\n\n /**\n * Specify a maxStalenessSeconds value for secondary reads, minimum is 90 seconds\n */\n readonly maxStalenessSeconds?: number\n\n /**\n * Specify the log level used by the driver logger (error/warn/info/debug).\n */\n readonly loggerLevel?: \"error\" | \"warn\" | \"info\" | \"debug\"\n\n // Do not overwrite BaseDataSourceOptions.logger\n // readonly logger?: any;\n\n /**\n * Ensure we check server identify during SSL, set to false to disable checking. Only works for Node 0.12.x or higher. You can pass in a boolean or your own checkServerIdentity override function\n * Default: true\n */\n readonly checkServerIdentity?: boolean | Function\n\n /**\n * Validate MongoClient passed in options for correctness. Default: false\n */\n readonly validateOptions?: boolean | any\n\n /**\n * The name of the application that created this MongoClient instance. MongoDB 3.4 and newer will print this value in the server log upon establishing each connection. It is also recorded in the slow query log and profile collections\n */\n readonly appname?: string\n\n /**\n * Sets the authentication mechanism that MongoDB will use to authenticate the connection\n */\n readonly authMechanism?: string\n\n /**\n * Type of compression to use: snappy or zlib\n */\n readonly compression?: any\n\n /**\n * Specify a file sync write concern. Default: false\n */\n readonly fsync?: boolean\n\n /**\n * Read preference tags\n */\n readonly readPreferenceTags?: any[]\n\n /**\n * The number of retries for a tailable cursor. Default: 5\n */\n readonly numberOfRetries?: number\n\n /**\n * Enable auto reconnecting for single server instances. Default: true\n */\n readonly auto_reconnect?: boolean\n\n /**\n * Enable command monitoring for this client. Default: false\n */\n readonly monitorCommands?: boolean\n\n /**\n * If present, the connection pool will be initialized with minSize connections, and will never dip below minSize connections\n */\n readonly minSize?: number\n\n /**\n * Determines whether or not to use the new url parser. Default: false\n */\n readonly useNewUrlParser?: boolean\n\n /**\n * Determines whether or not to use the new Server Discovery and Monitoring engine. Default: false\n * https://github.com/mongodb/node-mongodb-native/releases/tag/v3.2.1\n */\n readonly useUnifiedTopology?: boolean\n\n /**\n * Automatic Client-Side Field Level Encryption configuration.\n */\n readonly autoEncryption?: any\n\n /**\n * Enables or disables the ability to retry writes upon encountering transient network errors.\n */\n readonly retryWrites?: boolean\n}\n"],"sourceRoot":"../.."}
|
|
@@ -489,6 +489,10 @@ class MysqlDriver {
|
|
|
489
489
|
else if (columnMetadata.type === "set") {
|
|
490
490
|
return DateUtils_1.DateUtils.simpleArrayToString(value);
|
|
491
491
|
}
|
|
492
|
+
else if (columnMetadata.type === Number) {
|
|
493
|
+
// convert to number if number
|
|
494
|
+
value = !isNaN(+value) ? parseInt(value) : value;
|
|
495
|
+
}
|
|
492
496
|
return value;
|
|
493
497
|
}
|
|
494
498
|
/**
|
|
@@ -534,6 +538,10 @@ class MysqlDriver {
|
|
|
534
538
|
else if (columnMetadata.type === "set") {
|
|
535
539
|
value = DateUtils_1.DateUtils.stringToSimpleArray(value);
|
|
536
540
|
}
|
|
541
|
+
else if (columnMetadata.type === Number) {
|
|
542
|
+
// convert to number if number
|
|
543
|
+
value = !isNaN(+value) ? parseInt(value) : value;
|
|
544
|
+
}
|
|
537
545
|
if (columnMetadata.transformer)
|
|
538
546
|
value = ApplyValueTransformers_1.ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);
|
|
539
547
|
return value;
|
|
@@ -976,7 +984,7 @@ class MysqlDriver {
|
|
|
976
984
|
socketPath: credentials.socketPath,
|
|
977
985
|
}, options.acquireTimeout === undefined
|
|
978
986
|
? {}
|
|
979
|
-
: { acquireTimeout: options.acquireTimeout }, options.extra || {});
|
|
987
|
+
: { acquireTimeout: options.acquireTimeout }, { connectionLimit: options.poolSize }, options.extra || {});
|
|
980
988
|
}
|
|
981
989
|
/**
|
|
982
990
|
* Creates a new connection pool for a given database credentials.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/driver/mysql/MysqlDriver.ts"],"names":[],"mappings":";;;AACA,iFAA6E;AAC7E,+FAA2F;AAC3F,gDAA4C;AAE5C,yDAAqD;AAGrD,oDAAgD;AAChD,gEAA4D;AAE5D,gFAA4E;AAQ5E,kDAA8C;AAC9C,8EAA0E;AAE1E,uCAA0C;AAI1C,0DAAsD;AACtD,gEAA4D;AAE5D;;GAEG;AACH,MAAa,WAAW;IA4SpB,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,UAAsB;QAnQlC;;WAEG;QACH,iBAAY,GAAY,KAAK,CAAA;QAE7B;;WAEG;QACH,gBAAW,GAAG,IAAI,CAAA;QAElB;;WAEG;QACH,uBAAkB,GAAG,QAAiB,CAAA;QAEtC;;;;;WAKG;QACH,uBAAkB,GAAiB;YAC/B,gBAAgB;YAChB,KAAK;YACL,KAAK;YACL,SAAS;YACT,SAAS;YACT,UAAU;YACV,WAAW;YACX,QAAQ;YACR,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;YACN,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,MAAM;YACN,SAAS;YACT,sBAAsB;YACtB,MAAM;YACN,UAAU;YACV,WAAW;YACX,MAAM;YACN,MAAM;YACN,eAAe;YACf,MAAM;YACN,OAAO;YACP,eAAe;YACf,SAAS;YACT,UAAU;YACV,kBAAkB;YAClB,MAAM;YACN,MAAM;YACN,UAAU;YACV,UAAU;YACV,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,UAAU;YACV,MAAM;YACN,KAAK;YACL,QAAQ;YACR,WAAW;YACX,iBAAiB;YACjB,MAAM;YACN,qBAAqB;YACrB,UAAU;YACV,OAAO;YACP,YAAY;YACZ,SAAS;YACT,YAAY;YACZ,iBAAiB;YACjB,cAAc;YACd,oBAAoB;SACvB,CAAA;QAED;;WAEG;QACM,wBAAmB,GAAG,yBAAyB,CAAA;QAExD;;WAEG;QACH,iBAAY,GAAiB;YACzB,UAAU;YACV,OAAO;YACP,YAAY;YACZ,SAAS;YACT,YAAY;YACZ,iBAAiB;YACjB,cAAc;YACd,oBAAoB;SACvB,CAAA;QAED;;WAEG;QACH,0BAAqB,GAAiB;YAClC,MAAM;YACN,SAAS;YACT,UAAU;YACV,QAAQ;YACR,WAAW;SACd,CAAA;QAED;;WAEG;QACH,yBAAoB,GAAiB;YACjC,KAAK;YACL,SAAS;YACT,UAAU;YACV,WAAW;YACX,KAAK;YACL,SAAS;YACT,QAAQ;SACX,CAAA;QAED;;WAEG;QACH,6BAAwB,GAAiB;YACrC,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;YACN,MAAM;YACN,UAAU;YACV,WAAW;SACd,CAAA;QAED;;WAEG;QACH,yBAAoB,GAAiB;YACjC,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;SACT,CAAA;QAED;;WAEG;QACH,6BAAwB,GAAiB;YACrC,KAAK;YACL,SAAS;YACT,UAAU;YACV,SAAS;YACT,WAAW;YACX,QAAQ;YACR,SAAS;YACT,KAAK;YACL,SAAS;YACT,OAAO;YACP,OAAO;YACP,QAAQ;YACR,kBAAkB;YAClB,MAAM;SACT,CAAA;QAED;;;WAGG;QACH,oBAAe,GAAsB;YACjC,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,CAAC;YACtB,iBAAiB,EAAE,sBAAsB;YACzC,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,CAAC;YACtB,iBAAiB,EAAE,sBAAsB;YACzC,UAAU,EAAE,UAAU;YACtB,mBAAmB,EAAE,CAAC;YACtB,kBAAkB,EAAE,IAAI;YACxB,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,SAAS;YACxB,kBAAkB,EAAE,QAAQ;YAC5B,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,SAAS;YAC1B,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,MAAM;YACnB,YAAY,EAAE,SAAS;YACvB,gBAAgB,EAAE,SAAS;YAC3B,cAAc,EAAE,SAAS;YACzB,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,SAAS;YACvB,aAAa,EAAE,MAAM;SACxB,CAAA;QAED;;;WAGG;QACH,qBAAgB,GAAqB;YACjC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACzB,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YACnC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACnB,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;YACrB,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;YAC1B,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACpC,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAChC,OAAO,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACpC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YAClC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACxB,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACzB,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YACtB,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YAC1B,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;YAC3B,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACjB,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAClB,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACtB,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACrB,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACtB,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;YACvB,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;SACxB,CAAA;QAED;;;WAGG;QACH,mBAAc,GAAG,EAAE,CAAA;QAEnB,oBAAe,GAAoB;YAC/B,OAAO,EAAE,KAAK;YACd,qBAAqB,EAAE,IAAI;SAC9B,CAAA;QAED;;WAEG;QACc,6BAAwB,GACrC;YACI,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;SAChB,CAAA;QAOD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG;YACX,oBAAoB,EAAE,IAAI;YAC1B,GAAG,UAAU,CAAC,OAAO;SACE,CAAA;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;QAE3D,qBAAqB;QACrB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEvB,IAAI,CAAC,QAAQ,GAAG,yBAAW,CAAC,kBAAkB,CAC1C,IAAI,CAAC,OAAO,CAAC,WAAW;YACpB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM;YACjC,CAAC,CAAC,IAAI,CAAC,OAAO,CACrB,CAAC,QAAQ,CAAA;QAEV,kDAAkD;QAClD,oDAAoD;QACpD,iHAAiH;QACjH,gEAAgE;QAChE,8BAA8B;QAC9B,qDAAqD;QACrD,8BAA8B;QAC9B,qDAAqD;QACrD,gHAAgH;QAChH,2EAA2E;IAC/E,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC3C,IAAI,CAAC,OAAO,CAAC,WAAW,CAC3B,CAAA;YACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrD,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,OAAO,GAAG,KAAK,EACf,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CACpD,CAAA;YACL,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAChB,QAAQ,EACR,IAAI,CAAC,uBAAuB,CACxB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAClC,CACJ,CAAA;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAC7B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAC3D,CAAA;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;YAE1D,IAAI,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC,kBAAkB,EAAE,CAAA;YAEtD,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;SAC9B;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QACpD,MAAM,MAAM,GAEN,MAAM,WAAW,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QACnC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,MAAM,WAAW,CAAC,OAAO,EAAE,CAAA;QAE3B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YACjC,IAAI,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;gBACpD,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAA;aAC9C;YACD,IAAI,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;gBACpD,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI,CAAA;aAC9C;YACD,IAAI,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;gBACpD,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;aACtC;SACJ;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YACtC,IAAI,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;gBACnD,IAAI,CAAC,eAAe,CAAC,OAAO,GAAG,IAAI,CAAA;aACtC;SACJ;IACL,CAAC;IAED;;OAEG;IACH,YAAY;QACR,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI;YAC/B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,iDAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;QAE/D,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,OAAO,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;gBAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;gBAC5D,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;YAChC,CAAC,CAAC,CAAA;SACL;QACD,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,OAAO,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;oBACvB,IAAI,GAAG;wBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;oBACzB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;oBACrB,EAAE,EAAE,CAAA;gBACR,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;SACL;IACL,CAAC;IAED;;OAEG;IACH,mBAAmB;QACf,OAAO,IAAI,uCAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAClD,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,IAAqB;QACnC,OAAO,IAAI,mCAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,yBAAyB,CACrB,GAAW,EACX,UAAyB,EACzB,gBAA+B;QAE/B,MAAM,iBAAiB,GAAU,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAC9D,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CACjC,CAAA;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;YAC9C,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;QAEnC,GAAG,GAAG,GAAG,CAAC,OAAO,CACb,6BAA6B,EAC7B,CAAC,IAAI,EAAE,OAAe,EAAE,GAAW,EAAU,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAA;aACd;YAED,IAAI,KAAK,GAAQ,UAAU,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,OAAO,EAAE;gBACT,OAAO,KAAK;qBACP,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;oBACZ,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACzB,OAAO,IAAI,CAAC,eAAe,CACvB,GAAG,EACH,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAC/B,CAAA;gBACL,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;aAClB;YAED,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAC7B,OAAO,KAAK,EAAE,CAAA;aACjB;YAED,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAClE,CAAC,CACJ,CAAA,CAAC,kEAAkE;QACpE,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAkB;QACrB,OAAO,GAAG,GAAG,UAAU,GAAG,GAAG,CAAA;IACjC,CAAC;IAED;;;OAGG;IACH,cAAc,CACV,SAAiB,EACjB,MAAe,EACf,QAAiB;QAEjB,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC,CAAA;QAE3B,IAAI,QAAQ,EAAE;YACV,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;SAC9B;QAED,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,cAAc,CACV,MAAgE;QAEhE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAA;QACpC,MAAM,YAAY,GAAG,SAAS,CAAA;QAE9B,IAAI,iCAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,iCAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACnE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAE/C,OAAO;gBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,cAAc;gBAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY;gBACtD,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAA;SACJ;QAED,IAAI,iCAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAE9D,OAAO;gBACH,QAAQ,EACJ,MAAM,CAAC,kBAAkB;oBACzB,MAAM,CAAC,QAAQ;oBACf,cAAc;gBAClB,MAAM,EACF,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,IAAI,YAAY;gBAC5D,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAA;SACJ;QAED,IAAI,iCAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC1C,2CAA2C;YAE3C,OAAO;gBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,cAAc;gBAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,YAAY;gBACrC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAA;SACJ;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE/B,OAAO;YACH,QAAQ,EACJ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,cAAc;YAC/D,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;SACpD,CAAA;IACL,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,KAAU,EAAE,cAA8B;QAC7D,IAAI,cAAc,CAAC,WAAW;YAC1B,KAAK,GAAG,+CAAsB,CAAC,WAAW,CACtC,cAAc,CAAC,WAAW,EAC1B,KAAK,CACR,CAAA;QAEL,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QAEvD,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE;YACjC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;SAChC;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,OAAO,qBAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;SAChD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,OAAO,qBAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;SAChD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;SAC/B;aAAM,IACH,cAAc,CAAC,IAAI,KAAK,WAAW;YACnC,cAAc,CAAC,IAAI,KAAK,UAAU;YAClC,cAAc,CAAC,IAAI,KAAK,IAAI,EAC9B;YACE,OAAO,qBAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;SAC1C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,cAAc,EAAE;YAC/C,OAAO,qBAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;SAC9C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,aAAa,EAAE;YAC9C,OAAO,qBAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;SAC7C;aAAM,IACH,cAAc,CAAC,IAAI,KAAK,MAAM;YAC9B,cAAc,CAAC,IAAI,KAAK,aAAa,EACvC;YACE,OAAO,EAAE,GAAG,KAAK,CAAA;SACpB;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE;YACtC,OAAO,qBAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;SAC9C;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAAU,EAAE,cAA8B;QAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YACrC,OAAO,cAAc,CAAC,WAAW;gBAC7B,CAAC,CAAC,+CAAsB,CAAC,aAAa,CAChC,cAAc,CAAC,WAAW,EAC1B,KAAK,CACR;gBACH,CAAC,CAAC,KAAK,CAAA;QAEf,IACI,cAAc,CAAC,IAAI,KAAK,OAAO;YAC/B,cAAc,CAAC,IAAI,KAAK,MAAM;YAC9B,cAAc,CAAC,IAAI,KAAK,SAAS,EACnC;YACE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;SAC/B;aAAM,IACH,cAAc,CAAC,IAAI,KAAK,UAAU;YAClC,cAAc,CAAC,IAAI,KAAK,IAAI,EAC9B;YACE,KAAK,GAAG,qBAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;SACjD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,KAAK,GAAG,qBAAS,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;SACjD;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;SAChE;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE;YACvC,KAAK,GAAG,qBAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;SAC7C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,cAAc,EAAE;YAC/C,KAAK,GAAG,qBAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;SAC/C;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,aAAa,EAAE;YAC9C,KAAK,GAAG,qBAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;SAC9C;aAAM,IACH,CAAC,cAAc,CAAC,IAAI,KAAK,MAAM;YAC3B,cAAc,CAAC,IAAI,KAAK,aAAa,CAAC;YAC1C,cAAc,CAAC,IAAI;YACnB,CAAC,KAAK,CAAC,KAAK,CAAC;YACb,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EACnD;YACE,4DAA4D;YAC5D,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;SAC1B;aAAM,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE;YACtC,KAAK,GAAG,qBAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;SAC/C;QAED,IAAI,cAAc,CAAC,WAAW;YAC1B,KAAK,GAAG,+CAAsB,CAAC,aAAa,CACxC,cAAc,CAAC,WAAW,EAC1B,KAAK,CACR,CAAA;QAEL,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAKb;QACG,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YACrD,OAAO,KAAK,CAAA;SACf;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC/B,OAAO,SAAS,CAAA;SACnB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;YAC7B,OAAO,UAAU,CAAA;SACpB;aAAM,IAAK,MAAM,CAAC,IAAY,KAAK,MAAM,EAAE;YACxC,OAAO,MAAM,CAAA;SAChB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,OAAO,SAAS,CAAA;SACnB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE;YAC/B,OAAO,SAAS,CAAA;SACnB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAClE;;;;;eAKG;YACH,OAAO,UAAU,CAAA;SACpB;aAAM,IACH,MAAM,CAAC,IAAI,KAAK,cAAc;YAC9B,MAAM,CAAC,IAAI,KAAK,aAAa,EAC/B;YACE,OAAO,MAAM,CAAA;SAChB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;YACtC,OAAO,MAAM,CAAA;SAChB;aAAM,IACH,MAAM,CAAC,IAAI,KAAK,kBAAkB;YAClC,MAAM,CAAC,IAAI,KAAK,MAAM,EACxB;YACE,OAAO,QAAQ,CAAA;SAClB;aAAM,IACH,MAAM,CAAC,IAAI,KAAK,KAAK;YACrB,MAAM,CAAC,IAAI,KAAK,SAAS;YACzB,MAAM,CAAC,IAAI,KAAK,OAAO,EACzB;YACE,OAAO,SAAS,CAAA;SACnB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE;YAC5D,OAAO,SAAS,CAAA;SACnB;aAAM,IACH,MAAM,CAAC,IAAI,KAAK,UAAU;YAC1B,MAAM,CAAC,IAAI,KAAK,kBAAkB,EACpC;YACE,OAAO,SAAS,CAAA;SACnB;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE;YACnE,OAAO,MAAM,CAAA;SAChB;aAAM;YACH,OAAQ,MAAM,CAAC,IAAe,IAAI,EAAE,CAAA;SACvC;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,cAA8B;QAC3C,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAA;QAE3C,IAAI,YAAY,KAAK,IAAI,EAAE;YACvB,OAAO,SAAS,CAAA;SACnB;QAED,IACI,CAAC,cAAc,CAAC,IAAI,KAAK,MAAM;YAC3B,cAAc,CAAC,IAAI,KAAK,aAAa;YACrC,OAAO,YAAY,KAAK,QAAQ,CAAC;YACrC,YAAY,KAAK,SAAS,EAC5B;YACE,OAAO,IAAI,YAAY,GAAG,CAAA;SAC7B;QAED,IAAI,cAAc,CAAC,IAAI,KAAK,KAAK,IAAI,YAAY,KAAK,SAAS,EAAE;YAC7D,OAAO,IAAI,qBAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,GAAG,CAAA;SAC5D;QAED,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;YAClC,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAA;SAC3D;QAED,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;YACnC,OAAO,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;SAClC;QAED,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;YACpC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;YAC5B,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAA;SAC/C;QAED,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,OAAO,SAAS,CAAA;SACnB;QAED,OAAO,GAAG,YAAY,EAAE,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAsB;QACpC,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CACrC,CAAC,GAAG,EAAE,EAAE,CACJ,GAAG,CAAC,QAAQ;YACZ,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAChC,CAAA;IACL,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAoC;QAChD,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;QAElD;;WAEG;QACH,IAAI,MAAM,CAAC,kBAAkB,KAAK,MAAM;YAAE,OAAO,IAAI,CAAA;QAErD,QAAQ,MAAM,CAAC,IAAI,EAAE;YACjB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,UAAU,CAAC;YAChB,KAAK,kBAAkB;gBACnB,OAAO,KAAK,CAAA;YAChB,KAAK,WAAW;gBACZ,OAAO,KAAK,CAAA;YAChB;gBACI,OAAO,EAAE,CAAA;SAChB;IACL,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAmB;QAC9B,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QAEtB,6HAA6H;QAC7H,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;YAC9B,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAA;SAC9C;aAAM,IAAI,MAAM,CAAC,KAAK,EAAE;YACrB,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,CAAA;SAC9B;aAAM,IACH,MAAM,CAAC,SAAS,KAAK,IAAI;YACzB,MAAM,CAAC,SAAS,KAAK,SAAS;YAC9B,MAAM,CAAC,KAAK,KAAK,IAAI;YACrB,MAAM,CAAC,KAAK,KAAK,SAAS,EAC5B;YACE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,GAAG,CAAA;SAClD;aAAM,IACH,MAAM,CAAC,SAAS,KAAK,IAAI;YACzB,MAAM,CAAC,SAAS,KAAK,SAAS,EAChC;YACE,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,GAAG,CAAA;SAClC;QAED,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,IAAI,QAAQ,CAAA;QAEpC,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,sBAAsB;QAClB,OAAO,IAAI,OAAO,CAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACjC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,WAAW,CAAC,aAAa,CAC1B,QAAQ,EACR,CAAC,GAAQ,EAAE,YAAiB,EAAE,EAAE;oBAC5B,GAAG;wBACC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;wBACX,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAA;gBACpD,CAAC,CACJ,CAAA;aACJ;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAQ,EAAE,YAAiB,EAAE,EAAE;oBACpD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAA;gBAChE,CAAC,CAAC,CAAA;aACL;iBAAM;gBACH,IAAI,CACA,IAAI,oBAAY,CACZ,mDAAmD,CACtD,CACJ,CAAA;aACJ;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;;OAIG;IACH,qBAAqB;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE3D,OAAO,IAAI,OAAO,CAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YACjC,IAAI,CAAC,WAAW,CAAC,aAAa,CAC1B,QAAQ,EACR,CAAC,GAAQ,EAAE,YAAiB,EAAE,EAAE;gBAC5B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAA;YAChE,CAAC,CACJ,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,kBAAkB,CACd,QAAwB,EACxB,YAAiB,EACjB,WAAmB;QAEnB,IAAI,CAAC,YAAY,EAAE;YACf,OAAO,SAAS,CAAA;SACnB;QAED,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;YACrC,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAA;gBACvD,IAAI,MAAM,EAAE;oBACR,mBAAQ,CAAC,SAAS,CACd,GAAG,EACH,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAC3C,CAAA;oBACD,8KAA8K;iBACjL;gBACD,OAAO,GAAG,CAAA;YACd,CAAC,EAAE,EAAmB,CAAC,CAAA;SAC1B;QAED,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE;YACrB,IAAI,KAAU,CAAA;YACd,IACI,eAAe,CAAC,kBAAkB,KAAK,WAAW;gBAClD,YAAY,CAAC,QAAQ,EACvB;gBACE,qEAAqE;gBACrE,qEAAqE;gBACrE,KAAK,GAAG,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAA;gBAC3C,8DAA8D;gBAC9D,sEAAsE;gBACtE,uDAAuD;aAC1D;YAED,OAAO,mBAAQ,CAAC,SAAS,CACrB,GAAG,EACH,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,CACxC,CAAA;QACL,CAAC,EACD,EAAmB,CACtB,CAAA;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,CAAC;IAED;;;OAGG;IACH,kBAAkB,CACd,YAA2B,EAC3B,eAAiC;QAEjC,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,EAAE;YAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY,CAChD,CAAA;YACD,IAAI,CAAC,WAAW;gBAAE,OAAO,KAAK,CAAA,CAAC,4DAA4D;YAE3F,MAAM,eAAe,GACjB,WAAW,CAAC,IAAI,KAAK,cAAc,CAAC,YAAY;gBAChD,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;gBACvD,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;gBAC3D,WAAW,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK;gBAC1C,CAAC,cAAc,CAAC,SAAS,KAAK,SAAS;oBACnC,WAAW,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,CAAC;gBACvD,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS;oBAC/B,WAAW,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC;gBAC/C,WAAW,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ;gBAChD,WAAW,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ;gBAChD,WAAW,CAAC,YAAY,KAAK,cAAc,CAAC,YAAY;gBACxD,WAAW,CAAC,aAAa,KAAK,cAAc,CAAC,aAAa;gBAC1D,WAAW,CAAC,OAAO;oBACf,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC9C,CAAC,IAAI,CAAC,oBAAoB,CACtB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EACrC,WAAW,CAAC,OAAO,CACtB;gBACD,CAAC,WAAW,CAAC,IAAI;oBACb,cAAc,CAAC,IAAI;oBACnB,CAAC,mBAAQ,CAAC,aAAa,CACnB,WAAW,CAAC,IAAI,EAChB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAC7C,CAAC;gBACN,WAAW,CAAC,QAAQ;oBAChB,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC3D,WAAW,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS;gBAClD,CAAC,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,WAAW,CAAC;gBACxD,WAAW,CAAC,QAAQ;oBAChB,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;gBAC1C,CAAC,cAAc,CAAC,kBAAkB,KAAK,MAAM;oBACzC,WAAW,CAAC,WAAW,KAAK,cAAc,CAAC,WAAW,CAAC,CAAA;YAE/D,gBAAgB;YAChB,yBAAyB;YACzB,qEAAqE;YACrE,mBAAmB;YACnB,mBAAmB;YACnB,4BAA4B;YAC5B,uCAAuC;YACvC,QAAQ;YACR,mBAAmB;YACnB,mBAAmB;YACnB,4BAA4B;YAC5B,8CAA8C;YAC9C,QAAQ;YACR,mBAAmB;YACnB,qBAAqB;YACrB,8BAA8B;YAC9B,iCAAiC;YACjC,QAAQ;YACR,qEAAqE;YACrE,mBAAmB;YACnB,wBAAwB;YACxB,iCAAiC;YACjC,oCAAoC;YACpC,QAAQ;YACR,qEAAqE;YACrE,mBAAmB;YACnB,uBAAuB;YACvB,gCAAgC;YAChC,mCAAmC;YACnC,QAAQ;YACR,mBAAmB;YACnB,uBAAuB;YACvB,gCAAgC;YAChC,mCAAmC;YACnC,QAAQ;YACR,mBAAmB;YACnB,2BAA2B;YAC3B,oCAAoC;YACpC,uCAAuC;YACvC,QAAQ;YACR,mBAAmB;YACnB,4BAA4B;YAC5B,qCAAqC;YACrC,wCAAwC;YACxC,QAAQ;YACR,mBAAmB;YACnB,sBAAsB;YACtB,+BAA+B;YAC/B,sDAAsD;YACtD,QAAQ;YACR,mBAAmB;YACnB,sBAAsB;YACtB,+BAA+B;YAC/B,iDAAiD;YACjD,QAAQ;YACR,kEAAkE;YAClE,mBAAmB;YACnB,8BAA8B;YAC9B,sCAAsC;YACtC,qDAAqD;YACrD,mCAAmC;YACnC,aAAa;YACb,QAAQ;YACR,mBAAmB;YACnB,wBAAwB;YACxB,iCAAiC;YACjC,oCAAoC;YACpC,QAAQ;YACR,mBAAmB;YACnB,iCAAiC;YACjC,oEAAoE;YACpE,QAAQ;YACR,mBAAmB;YACnB,uBAAuB;YACvB,gCAAgC;YAChC,kDAAkD;YAClD,QAAQ;YACR,mBAAmB;YACnB,0BAA0B;YAC1B,mCAAmC;YACnC,sCAAsC;YACtC,QAAQ;YACR,mBAAmB;YACnB,0DAA0D;YAC1D,sEAAsE;YACtE,QAAQ;YACR,gEAAgE;YAChE,IAAI;YAEJ,OAAO,eAAe,CAAA;QAC1B,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,aAA4B;QAChD,OAAO,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAA;IACvD,CAAC;IAED;;OAEG;IACH,yBAAyB;QACrB,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,6BAA6B;QACzB,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,aAAqB,EAAE,KAAa;QAChD,OAAO,GAAG,CAAA;IACd,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;OAEG;IACO,gBAAgB;;QACtB,MAAM,gBAAgB,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,mCAAI,OAAO,CAAA;QACjE,MAAM,wBAAwB,GAC1B,gBAAgB,KAAK,OAAO;YACxB,CAAC,CAAE,QAAkB;YACrB,CAAC,CAAE,OAAiB,CAAA;QAC5B,IAAI;YACA,sCAAsC;YACtC,MAAM,KAAK,GACP,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,6BAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;YAC/D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;YAClB;;;;;;eAMG;YACH,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,MAAM,IAAI,oBAAY,CAClB,IAAI,gBAAgB,iDAAiD,wBAAwB,IAAI,CACpG,CAAA;aACJ;SACJ;QAAC,OAAO,CAAC,EAAE;YACR,IAAI;gBACA,IAAI,CAAC,KAAK,GAAG,6BAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA,CAAC,uCAAuC;aACpG;YAAC,OAAO,CAAC,EAAE;gBACR,MAAM,IAAI,+DAA8B,CACpC,OAAO,EACP,gBAAgB,CACnB,CAAA;aACJ;SACJ;IACL,CAAC;IAED;;OAEG;IACO,uBAAuB,CAC7B,OAA+B,EAC/B,WAA8C;QAE9C,WAAW,GAAG,MAAM,CAAC,MAAM,CACvB,EAAE,EACF,WAAW,EACX,yBAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAC9C,CAAA,CAAC,yBAAyB;QAE3B,0CAA0C;QAC1C,OAAO,MAAM,CAAC,MAAM,CAChB,EAAE,EACF;YACI,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,iBAAiB,EACb,OAAO,CAAC,iBAAiB,KAAK,SAAS;gBACnC,CAAC,CAAC,OAAO,CAAC,iBAAiB;gBAC3B,CAAC,CAAC,IAAI;YACd,gBAAgB,EACZ,OAAO,CAAC,gBAAgB,KAAK,SAAS;gBAClC,CAAC,CAAC,OAAO,CAAC,gBAAgB;gBAC1B,CAAC,CAAC,IAAI;YACd,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,KAAK,EAAE,OAAO,CAAC,KAAK;SACvB,EACD;YACI,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,WAAW,CAAC,UAAU;SACrC,EACD,OAAO,CAAC,cAAc,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,EAChD,OAAO,CAAC,KAAK,IAAI,EAAE,CACtB,CAAA;IACL,CAAC;IAED;;OAEG;IACO,UAAU,CAAC,iBAAsB;QACvC,2BAA2B;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;QAErD,uCAAuC;QACvC,OAAO,IAAI,OAAO,CAAO,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAClC,qGAAqG;YACrG,iFAAiF;YACjF,IAAI,CAAC,aAAa,CAAC,CAAC,GAAQ,EAAE,UAAe,EAAE,EAAE;gBAC7C,IAAI,GAAG;oBAAE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;gBAEzC,UAAU,CAAC,OAAO,EAAE,CAAA;gBACpB,EAAE,CAAC,IAAI,CAAC,CAAA;YACZ,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,UAAe;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC;;;WAGG;QACH,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CACN,MAAM,EACN,qCAAqC,KAAK,EAAE,CAC/C,CACJ,CAAA;SACJ;QACD,OAAO,UAAU,CAAA;IACrB,CAAC;IAED;;OAEG;IACO,oBAAoB,CAC1B,mBAAuC,EACvC,aAAiC;QAEjC,IACI,OAAO,mBAAmB,KAAK,QAAQ;YACvC,OAAO,aAAa,KAAK,QAAQ,EACnC;YACE,qGAAqG;YACrG,0EAA0E;YAC1E,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACjE,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;SACxD;QAED,OAAO,mBAAmB,KAAK,aAAa,CAAA;IAChD,CAAC;IAED,qBAAqB,CACjB,cAA8B,EAC9B,WAAwB;QAExB,2EAA2E;QAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAA;QACjD,IAAI,SAAS,IAAI,cAAc,CAAC,aAAa,EAAE;YAC3C,OAAO,IAAI,CAAA;SACd;QAED,OAAO,cAAc,CAAC,UAAU,KAAK,WAAW,CAAC,UAAU,CAAA;IAC/D,CAAC;IAED;;;OAGG;IACO,yBAAyB,CAAC,KAAc;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QAExB,sCAAsC;QACtC,MAAM,kBAAkB,GACpB,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACvD,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAE7C,IAAI,kBAAkB,EAAE;YACpB,gCAAgC;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACxC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;gBACjC,OAAO,SAAS;oBACZ,CAAC,CAAC,oBAAoB,SAAS,CAAC,CAAC,CAAC,EAAE;oBACpC,CAAC,CAAC,qBAAqB,CAAA;aAC9B;iBAAM;gBACH,OAAO,SAAS;oBACZ,CAAC,CAAC,oBAAoB,SAAS,CAAC,CAAC,CAAC,EAAE;oBACpC,CAAC,CAAC,mBAAmB,CAAA;aAC5B;SACJ;aAAM;YACH,OAAO,KAAK,CAAA;SACf;IACL,CAAC;IAED;;OAEG;IACO,aAAa,CAAC,OAAgB;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,OAAO,CAAA;QAE5B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA,CAAC,wCAAwC;QAEjF,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ;AA5xCD,kCA4xCC","file":"MysqlDriver.js","sourcesContent":["import { Driver, ReturningType } from \"../Driver\"\nimport { ConnectionIsNotSetError } from \"../../error/ConnectionIsNotSetError\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { DriverUtils } from \"../DriverUtils\"\nimport { CteCapabilities } from \"../types/CteCapabilities\"\nimport { MysqlQueryRunner } from \"./MysqlQueryRunner\"\nimport { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport { DateUtils } from \"../../util/DateUtils\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { DataSource } from \"../../data-source/DataSource\"\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\"\nimport { MysqlConnectionOptions } from \"./MysqlConnectionOptions\"\nimport { MappedColumnTypes } from \"../types/MappedColumnTypes\"\nimport { ColumnType } from \"../types/ColumnTypes\"\nimport { DataTypeDefaults } from \"../types/DataTypeDefaults\"\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\"\nimport { MysqlConnectionCredentialsOptions } from \"./MysqlConnectionCredentialsOptions\"\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { TypeORMError } from \"../../error\"\nimport { Table } from \"../../schema-builder/table/Table\"\nimport { View } from \"../../schema-builder/view/View\"\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\"\nimport { VersionUtils } from \"../../util/VersionUtils\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\n\n/**\n * Organizes communication with MySQL DBMS.\n */\nexport class MysqlDriver implements Driver {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: DataSource\n\n /**\n * Mysql underlying library.\n */\n mysql: any\n\n /**\n * Connection pool.\n * Used in non-replication mode.\n */\n pool: any\n\n /**\n * Pool cluster used in replication mode.\n */\n poolCluster: any\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: MysqlConnectionOptions\n\n /**\n * Version of MySQL. Requires a SQL query to the DB, so it is not always set\n */\n version?: string\n\n /**\n * Master database used to perform all write queries.\n */\n database?: 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 = \"nested\" as const\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/mysql/mysql-data-types.htm\n * @see https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n */\n supportedDataTypes: ColumnType[] = [\n // numeric types\n \"bit\",\n \"int\",\n \"integer\", // synonym for int\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"float\",\n \"double\",\n \"double precision\", // synonym for double\n \"real\", // synonym for double\n \"decimal\",\n \"dec\", // synonym for decimal\n \"numeric\", // synonym for decimal\n \"fixed\", // synonym for decimal\n \"bool\", // synonym for tinyint\n \"boolean\", // synonym for tinyint\n // date and time types\n \"date\",\n \"datetime\",\n \"timestamp\",\n \"time\",\n \"year\",\n // string types\n \"char\",\n \"nchar\", // synonym for national char\n \"national char\",\n \"varchar\",\n \"nvarchar\", // synonym for national varchar\n \"national varchar\",\n \"blob\",\n \"text\",\n \"tinyblob\",\n \"tinytext\",\n \"mediumblob\",\n \"mediumtext\",\n \"longblob\",\n \"longtext\",\n \"enum\",\n \"set\",\n \"binary\",\n \"varbinary\",\n // json data type\n \"json\",\n // spatial data types\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\",\n ]\n\n /**\n * Returns type of upsert supported by driver if any\n */\n readonly supportedUpsertType = \"on-duplicate-key-update\"\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\",\n ]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"char\",\n \"varchar\",\n \"nvarchar\",\n \"binary\",\n \"varbinary\",\n ]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withWidthColumnTypes: ColumnType[] = [\n \"bit\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"int\",\n \"integer\",\n \"bigint\",\n ]\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n \"time\",\n \"datetime\",\n \"timestamp\",\n ]\n\n /**\n * Gets list of column data types that supports scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n ]\n\n /**\n * Gets list of column data types that supports UNSIGNED and ZEROFILL attributes.\n */\n unsignedAndZerofillTypes: ColumnType[] = [\n \"int\",\n \"integer\",\n \"smallint\",\n \"tinyint\",\n \"mediumint\",\n \"bigint\",\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n ]\n\n /**\n * ORM has special columns and we need to know what database column types should be for those columns.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"datetime\",\n createDatePrecision: 6,\n createDateDefault: \"CURRENT_TIMESTAMP(6)\",\n updateDate: \"datetime\",\n updateDatePrecision: 6,\n updateDateDefault: \"CURRENT_TIMESTAMP(6)\",\n deleteDate: \"datetime\",\n deleteDatePrecision: 6,\n deleteDateNullable: true,\n version: \"int\",\n treeLevel: \"int\",\n migrationId: \"int\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\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 varchar: { length: 255 },\n nvarchar: { length: 255 },\n \"national varchar\": { length: 255 },\n char: { length: 1 },\n binary: { length: 1 },\n varbinary: { length: 255 },\n decimal: { precision: 10, scale: 0 },\n dec: { precision: 10, scale: 0 },\n numeric: { precision: 10, scale: 0 },\n fixed: { precision: 10, scale: 0 },\n float: { precision: 12 },\n double: { precision: 22 },\n time: { precision: 0 },\n datetime: { precision: 0 },\n timestamp: { precision: 0 },\n bit: { width: 1 },\n int: { width: 11 },\n integer: { width: 11 },\n tinyint: { width: 4 },\n smallint: { width: 6 },\n mediumint: { width: 9 },\n bigint: { width: 20 },\n }\n\n /**\n * Max length allowed by MySQL for aliases.\n * @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html\n */\n maxAliasLength = 63\n\n cteCapabilities: CteCapabilities = {\n enabled: false,\n requiresRecursiveHint: true,\n }\n\n /**\n * Supported returning types\n */\n private readonly _isReturningSqlSupported: Record<ReturningType, boolean> =\n {\n delete: false,\n insert: false,\n update: false,\n }\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n this.connection = connection\n this.options = {\n legacySpatialSupport: true,\n ...connection.options,\n } as MysqlConnectionOptions\n this.isReplicated = this.options.replication ? true : false\n\n // load mysql package\n this.loadDependencies()\n\n this.database = DriverUtils.buildDriverOptions(\n this.options.replication\n ? this.options.replication.master\n : this.options,\n ).database\n\n // validate options to make sure everything is set\n // todo: revisit validation with replication in mind\n // if (!(this.options.host || (this.options.extra && this.options.extra.socketPath)) && !this.options.socketPath)\n // throw new DriverOptionNotSetError(\"socketPath and host\");\n // if (!this.options.username)\n // throw new DriverOptionNotSetError(\"username\");\n // if (!this.options.database)\n // throw new DriverOptionNotSetError(\"database\");\n // todo: check what is going on when connection is setup without database and how to connect to a database then?\n // todo: provide options to auto-create a database if it does not exist yet\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n if (this.options.replication) {\n this.poolCluster = this.mysql.createPoolCluster(\n this.options.replication,\n )\n this.options.replication.slaves.forEach((slave, index) => {\n this.poolCluster.add(\n \"SLAVE\" + index,\n this.createConnectionOptions(this.options, slave),\n )\n })\n this.poolCluster.add(\n \"MASTER\",\n this.createConnectionOptions(\n this.options,\n this.options.replication.master,\n ),\n )\n } else {\n this.pool = await this.createPool(\n this.createConnectionOptions(this.options, this.options),\n )\n }\n\n if (!this.database) {\n const queryRunner = await this.createQueryRunner(\"master\")\n\n this.database = await queryRunner.getCurrentDatabase()\n\n await queryRunner.release()\n }\n\n const queryRunner = this.createQueryRunner(\"master\")\n const result: {\n version: string\n }[] = await queryRunner.query(`SELECT VERSION() AS \\`version\\``)\n const dbVersion = result[0].version\n this.version = dbVersion\n await queryRunner.release()\n\n if (this.options.type === \"mariadb\") {\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.0.5\")) {\n this._isReturningSqlSupported.delete = true\n }\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.5.0\")) {\n this._isReturningSqlSupported.insert = true\n }\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.2.0\")) {\n this.cteCapabilities.enabled = true\n }\n } else if (this.options.type === \"mysql\") {\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"8.0.0\")) {\n this.cteCapabilities.enabled = true\n }\n }\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 if (!this.poolCluster && !this.pool)\n return Promise.reject(new ConnectionIsNotSetError(\"mysql\"))\n\n if (this.poolCluster) {\n return new Promise<void>((ok, fail) => {\n this.poolCluster.end((err: any) => (err ? fail(err) : ok()))\n this.poolCluster = undefined\n })\n }\n if (this.pool) {\n return new Promise<void>((ok, fail) => {\n this.pool.end((err: any) => {\n if (err) return fail(err)\n this.pool = undefined\n ok()\n })\n })\n }\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 MysqlQueryRunner(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) => nativeParameters[key],\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 let 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 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 database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(\n tableName: string,\n schema?: string,\n database?: string,\n ): string {\n let tablePath = [tableName]\n\n if (database) {\n tablePath.unshift(database)\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 = undefined\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:\n (parts.length > 1 ? parts[0] : undefined) || driverDatabase,\n schema: 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 (columnMetadata.type === \"json\") {\n return JSON.stringify(value)\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === \"datetime\" ||\n columnMetadata.type === Date\n ) {\n return DateUtils.mixedDateToDate(value)\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 (\n columnMetadata.type === \"enum\" ||\n columnMetadata.type === \"simple-enum\"\n ) {\n return \"\" + value\n } else if (columnMetadata.type === \"set\") {\n return DateUtils.simpleArrayToString(value)\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 === Boolean ||\n columnMetadata.type === \"bool\" ||\n columnMetadata.type === \"boolean\"\n ) {\n value = value ? true : false\n } else if (\n columnMetadata.type === \"datetime\" ||\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 === \"json\") {\n value = typeof value === \"string\" ? JSON.parse(value) : 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 (\n (columnMetadata.type === \"enum\" ||\n columnMetadata.type === \"simple-enum\") &&\n columnMetadata.enum &&\n !isNaN(value) &&\n columnMetadata.enum.indexOf(parseInt(value)) >= 0\n ) {\n // convert to number if that exists in possible enum options\n value = parseInt(value)\n } else if (columnMetadata.type === \"set\") {\n value = DateUtils.stringToSimpleArray(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 === \"integer\") {\n return \"int\"\n } else if (column.type === String) {\n return \"varchar\"\n } else if (column.type === Date) {\n return \"datetime\"\n } else if ((column.type as any) === Buffer) {\n return \"blob\"\n } else if (column.type === Boolean) {\n return \"tinyint\"\n } else if (column.type === \"uuid\") {\n return \"varchar\"\n } else if (column.type === \"json\" && this.options.type === \"mariadb\") {\n /*\n * MariaDB implements this as a LONGTEXT rather, as the JSON data type contradicts the SQL standard,\n * and MariaDB's benchmarks indicate that performance is at least equivalent.\n *\n * @see https://mariadb.com/kb/en/json-data-type/\n */\n return \"longtext\"\n } else if (\n column.type === \"simple-array\" ||\n column.type === \"simple-json\"\n ) {\n return \"text\"\n } else if (column.type === \"simple-enum\") {\n return \"enum\"\n } else if (\n column.type === \"double precision\" ||\n column.type === \"real\"\n ) {\n return \"double\"\n } else if (\n column.type === \"dec\" ||\n column.type === \"numeric\" ||\n column.type === \"fixed\"\n ) {\n return \"decimal\"\n } else if (column.type === \"bool\" || column.type === \"boolean\") {\n return \"tinyint\"\n } else if (\n column.type === \"nvarchar\" ||\n column.type === \"national varchar\"\n ) {\n return \"varchar\"\n } else if (column.type === \"nchar\" || column.type === \"national char\") {\n return \"char\"\n } else {\n return (column.type as string) || \"\"\n }\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 (defaultValue === null) {\n return undefined\n }\n\n if (\n (columnMetadata.type === \"enum\" ||\n columnMetadata.type === \"simple-enum\" ||\n typeof defaultValue === \"string\") &&\n defaultValue !== undefined\n ) {\n return `'${defaultValue}'`\n }\n\n if (columnMetadata.type === \"set\" && defaultValue !== undefined) {\n return `'${DateUtils.simpleArrayToString(defaultValue)}'`\n }\n\n if (typeof defaultValue === \"number\") {\n return `'${defaultValue.toFixed(columnMetadata.scale)}'`\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"1\" : \"0\"\n }\n\n if (typeof defaultValue === \"function\") {\n const value = defaultValue()\n return this.normalizeDatetimeFunction(value)\n }\n\n if (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 /**\n * fix https://github.com/typeorm/typeorm/issues/1139\n */\n if (column.generationStrategy === \"uuid\") return \"36\"\n\n switch (column.type) {\n case String:\n case \"varchar\":\n case \"nvarchar\":\n case \"national varchar\":\n return \"255\"\n case \"varbinary\":\n return \"255\"\n default:\n return \"\"\n }\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 MySQL requires column length for `varchar`, `nvarchar` and `varbinary` data types\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`\n } else if (column.width) {\n type += `(${column.width})`\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 return new Promise<any>((ok, fail) => {\n if (this.poolCluster) {\n this.poolCluster.getConnection(\n \"MASTER\",\n (err: any, dbConnection: any) => {\n err\n ? fail(err)\n : ok(this.prepareDbConnection(dbConnection))\n },\n )\n } else if (this.pool) {\n this.pool.getConnection((err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection))\n })\n } else {\n fail(\n new TypeORMError(\n `Connection is not established with mysql database`,\n ),\n )\n }\n })\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 if (!this.poolCluster) return this.obtainMasterConnection()\n\n return new Promise<any>((ok, fail) => {\n this.poolCluster.getConnection(\n \"SLAVE*\",\n (err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection))\n },\n )\n })\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(\n metadata: EntityMetadata,\n insertResult: any,\n entityIndex: number,\n ) {\n if (!insertResult) {\n return undefined\n }\n\n if (insertResult.insertId === undefined) {\n return Object.keys(insertResult).reduce((map, key) => {\n const column = metadata.findColumnWithDatabaseName(key)\n if (column) {\n OrmUtils.mergeDeep(\n map,\n column.createValueMap(insertResult[key]),\n )\n // OrmUtils.mergeDeep(map, column.createValueMap(this.prepareHydratedValue(insertResult[key], column))); // TODO: probably should be like there, but fails on enums, fix later\n }\n return map\n }, {} as ObjectLiteral)\n }\n\n const generatedMap = metadata.generatedColumns.reduce(\n (map, generatedColumn) => {\n let value: any\n if (\n generatedColumn.generationStrategy === \"increment\" &&\n insertResult.insertId\n ) {\n // NOTE: When multiple rows is inserted by a single INSERT statement,\n // `insertId` is the value generated for the first inserted row only.\n value = insertResult.insertId + entityIndex\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) return false // we don't need new columns, we only need exist and changed\n\n const isColumnChanged =\n tableColumn.name !== columnMetadata.databaseName ||\n tableColumn.type !== this.normalizeType(columnMetadata) ||\n tableColumn.length !== this.getColumnLength(columnMetadata) ||\n tableColumn.width !== columnMetadata.width ||\n (columnMetadata.precision !== undefined &&\n tableColumn.precision !== columnMetadata.precision) ||\n (columnMetadata.scale !== undefined &&\n tableColumn.scale !== columnMetadata.scale) ||\n tableColumn.zerofill !== columnMetadata.zerofill ||\n tableColumn.unsigned !== columnMetadata.unsigned ||\n tableColumn.asExpression !== columnMetadata.asExpression ||\n tableColumn.generatedType !== columnMetadata.generatedType ||\n tableColumn.comment !==\n this.escapeComment(columnMetadata.comment) ||\n !this.compareDefaultValues(\n this.normalizeDefault(columnMetadata),\n tableColumn.default,\n ) ||\n (tableColumn.enum &&\n columnMetadata.enum &&\n !OrmUtils.isArraysEqual(\n tableColumn.enum,\n columnMetadata.enum.map((val) => val + \"\"),\n )) ||\n tableColumn.onUpdate !==\n this.normalizeDatetimeFunction(columnMetadata.onUpdate) ||\n tableColumn.isPrimary !== columnMetadata.isPrimary ||\n !this.compareNullableValues(columnMetadata, tableColumn) ||\n tableColumn.isUnique !==\n this.normalizeIsUnique(columnMetadata) ||\n (columnMetadata.generationStrategy !== \"uuid\" &&\n tableColumn.isGenerated !== columnMetadata.isGenerated)\n\n // DEBUG SECTION\n // if (isColumnChanged) {\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName)\n // console.log(\n // \"name:\",\n // tableColumn.name,\n // columnMetadata.databaseName,\n // )\n // console.log(\n // \"type:\",\n // tableColumn.type,\n // this.normalizeType(columnMetadata),\n // )\n // console.log(\n // \"length:\",\n // tableColumn.length,\n // columnMetadata.length,\n // )\n // console.log(\"width:\", tableColumn.width, columnMetadata.width)\n // console.log(\n // \"precision:\",\n // tableColumn.precision,\n // columnMetadata.precision,\n // )\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale)\n // console.log(\n // \"zerofill:\",\n // tableColumn.zerofill,\n // columnMetadata.zerofill,\n // )\n // console.log(\n // \"unsigned:\",\n // tableColumn.unsigned,\n // columnMetadata.unsigned,\n // )\n // console.log(\n // \"asExpression:\",\n // tableColumn.asExpression,\n // columnMetadata.asExpression,\n // )\n // console.log(\n // \"generatedType:\",\n // tableColumn.generatedType,\n // columnMetadata.generatedType,\n // )\n // console.log(\n // \"comment:\",\n // tableColumn.comment,\n // this.escapeComment(columnMetadata.comment),\n // )\n // console.log(\n // \"default:\",\n // tableColumn.default,\n // this.normalizeDefault(columnMetadata),\n // )\n // console.log(\"enum:\", tableColumn.enum, columnMetadata.enum)\n // console.log(\n // \"default changed:\",\n // !this.compareDefaultValues(\n // this.normalizeDefault(columnMetadata),\n // tableColumn.default,\n // ),\n // )\n // console.log(\n // \"isPrimary:\",\n // tableColumn.isPrimary,\n // columnMetadata.isPrimary,\n // )\n // console.log(\n // \"isNullable changed:\",\n // !this.compareNullableValues(columnMetadata, tableColumn),\n // )\n // console.log(\n // \"isUnique:\",\n // tableColumn.isUnique,\n // this.normalizeIsUnique(columnMetadata),\n // )\n // console.log(\n // \"isGenerated:\",\n // tableColumn.isGenerated,\n // columnMetadata.isGenerated,\n // )\n // console.log(\n // columnMetadata.generationStrategy !== \"uuid\" &&\n // tableColumn.isGenerated !== columnMetadata.isGenerated,\n // )\n // console.log(\"==========================================\")\n // }\n\n return isColumnChanged\n })\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(returningType: ReturningType): boolean {\n return this._isReturningSqlSupported[returningType]\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 true\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 * Loads all driver dependencies.\n */\n protected loadDependencies(): void {\n const connectorPackage = this.options.connectorPackage ?? \"mysql\"\n const fallbackConnectorPackage =\n connectorPackage === \"mysql\"\n ? (\"mysql2\" as const)\n : (\"mysql\" as const)\n try {\n // try to load first supported package\n const mysql =\n this.options.driver || PlatformTools.load(connectorPackage)\n this.mysql = mysql\n /*\n * Some frameworks (such as Jest) may mess up Node's require cache and provide garbage for the 'mysql' module\n * if it was not installed. We check that the object we got actually contains something otherwise we treat\n * it as if the `require` call failed.\n *\n * @see https://github.com/typeorm/typeorm/issues/1373\n */\n if (Object.keys(this.mysql).length === 0) {\n throw new TypeORMError(\n `'${connectorPackage}' was found but it is empty. Falling back to '${fallbackConnectorPackage}'.`,\n )\n }\n } catch (e) {\n try {\n this.mysql = PlatformTools.load(fallbackConnectorPackage) // try to load second supported package\n } catch (e) {\n throw new DriverPackageNotInstalledError(\n \"Mysql\",\n connectorPackage,\n )\n }\n }\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createConnectionOptions(\n options: MysqlConnectionOptions,\n credentials: MysqlConnectionCredentialsOptions,\n ): Promise<any> {\n credentials = Object.assign(\n {},\n credentials,\n DriverUtils.buildDriverOptions(credentials),\n ) // todo: do it better way\n\n // build connection options for the driver\n return Object.assign(\n {},\n {\n charset: options.charset,\n timezone: options.timezone,\n connectTimeout: options.connectTimeout,\n insecureAuth: options.insecureAuth,\n supportBigNumbers:\n options.supportBigNumbers !== undefined\n ? options.supportBigNumbers\n : true,\n bigNumberStrings:\n options.bigNumberStrings !== undefined\n ? options.bigNumberStrings\n : true,\n dateStrings: options.dateStrings,\n debug: options.debug,\n trace: options.trace,\n multipleStatements: options.multipleStatements,\n flags: options.flags,\n },\n {\n host: credentials.host,\n user: credentials.username,\n password: credentials.password,\n database: credentials.database,\n port: credentials.port,\n ssl: options.ssl,\n socketPath: credentials.socketPath,\n },\n options.acquireTimeout === undefined\n ? {}\n : { acquireTimeout: options.acquireTimeout },\n options.extra || {},\n )\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createPool(connectionOptions: any): Promise<any> {\n // create a connection pool\n const pool = this.mysql.createPool(connectionOptions)\n\n // make sure connection is working fine\n return new Promise<void>((ok, fail) => {\n // (issue #610) we make first connection to database to make sure if connection credentials are wrong\n // we give error before calling any other method that creates actual query runner\n pool.getConnection((err: any, connection: any) => {\n if (err) return pool.end(() => fail(err))\n\n connection.release()\n ok(pool)\n })\n })\n }\n\n /**\n * Attaches all required base handlers to a database connection, such as the unhandled error handler.\n */\n private prepareDbConnection(connection: any): any {\n const { logger } = this.connection\n /*\n * Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and\n * cause the hosting app to crash.\n */\n if (connection.listeners(\"error\").length === 0) {\n connection.on(\"error\", (error: any) =>\n logger.log(\n \"warn\",\n `MySQL connection raised an error. ${error}`,\n ),\n )\n }\n return connection\n }\n\n /**\n * Checks if \"DEFAULT\" values in the column metadata and in the database are equal.\n */\n protected compareDefaultValues(\n columnMetadataValue: string | undefined,\n databaseValue: string | undefined,\n ): boolean {\n if (\n typeof columnMetadataValue === \"string\" &&\n typeof databaseValue === \"string\"\n ) {\n // we need to cut out \"'\" because in mysql we can understand returned value is a string or a function\n // as result compare cannot understand if default is really changed or not\n columnMetadataValue = columnMetadataValue.replace(/^'+|'+$/g, \"\")\n databaseValue = databaseValue.replace(/^'+|'+$/g, \"\")\n }\n\n return columnMetadataValue === databaseValue\n }\n\n compareNullableValues(\n columnMetadata: ColumnMetadata,\n tableColumn: TableColumn,\n ): boolean {\n // MariaDB does not support NULL/NOT NULL expressions for generated columns\n const isMariaDb = this.options.type === \"mariadb\"\n if (isMariaDb && columnMetadata.generatedType) {\n return true\n }\n\n return columnMetadata.isNullable === tableColumn.isNullable\n }\n\n /**\n * If parameter is a datetime function, e.g. \"CURRENT_TIMESTAMP\", normalizes it.\n * Otherwise returns original input.\n */\n protected normalizeDatetimeFunction(value?: string) {\n if (!value) return value\n\n // check if input is datetime function\n const isDatetimeFunction =\n value.toUpperCase().indexOf(\"CURRENT_TIMESTAMP\") !== -1 ||\n value.toUpperCase().indexOf(\"NOW\") !== -1\n\n if (isDatetimeFunction) {\n // extract precision, e.g. \"(3)\"\n const precision = value.match(/\\(\\d+\\)/)\n if (this.options.type === \"mariadb\") {\n return precision\n ? `CURRENT_TIMESTAMP${precision[0]}`\n : \"CURRENT_TIMESTAMP()\"\n } else {\n return precision\n ? `CURRENT_TIMESTAMP${precision[0]}`\n : \"CURRENT_TIMESTAMP\"\n }\n } else {\n return value\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/mysql/MysqlDriver.ts"],"names":[],"mappings":"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","file":"MysqlDriver.js","sourcesContent":["import { Driver, ReturningType } from \"../Driver\"\nimport { ConnectionIsNotSetError } from \"../../error/ConnectionIsNotSetError\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { DriverUtils } from \"../DriverUtils\"\nimport { CteCapabilities } from \"../types/CteCapabilities\"\nimport { MysqlQueryRunner } from \"./MysqlQueryRunner\"\nimport { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport { DateUtils } from \"../../util/DateUtils\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { DataSource } from \"../../data-source/DataSource\"\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\"\nimport { MysqlConnectionOptions } from \"./MysqlConnectionOptions\"\nimport { MappedColumnTypes } from \"../types/MappedColumnTypes\"\nimport { ColumnType } from \"../types/ColumnTypes\"\nimport { DataTypeDefaults } from \"../types/DataTypeDefaults\"\nimport { TableColumn } from \"../../schema-builder/table/TableColumn\"\nimport { MysqlConnectionCredentialsOptions } from \"./MysqlConnectionCredentialsOptions\"\nimport { EntityMetadata } from \"../../metadata/EntityMetadata\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\"\nimport { ReplicationMode } from \"../types/ReplicationMode\"\nimport { TypeORMError } from \"../../error\"\nimport { Table } from \"../../schema-builder/table/Table\"\nimport { View } from \"../../schema-builder/view/View\"\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\"\nimport { VersionUtils } from \"../../util/VersionUtils\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\n\n/**\n * Organizes communication with MySQL DBMS.\n */\nexport class MysqlDriver implements Driver {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: DataSource\n\n /**\n * Mysql underlying library.\n */\n mysql: any\n\n /**\n * Connection pool.\n * Used in non-replication mode.\n */\n pool: any\n\n /**\n * Pool cluster used in replication mode.\n */\n poolCluster: any\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: MysqlConnectionOptions\n\n /**\n * Version of MySQL. Requires a SQL query to the DB, so it is not always set\n */\n version?: string\n\n /**\n * Master database used to perform all write queries.\n */\n database?: 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 = \"nested\" as const\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/mysql/mysql-data-types.htm\n * @see https://dev.mysql.com/doc/refman/8.0/en/data-types.html\n */\n supportedDataTypes: ColumnType[] = [\n // numeric types\n \"bit\",\n \"int\",\n \"integer\", // synonym for int\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"float\",\n \"double\",\n \"double precision\", // synonym for double\n \"real\", // synonym for double\n \"decimal\",\n \"dec\", // synonym for decimal\n \"numeric\", // synonym for decimal\n \"fixed\", // synonym for decimal\n \"bool\", // synonym for tinyint\n \"boolean\", // synonym for tinyint\n // date and time types\n \"date\",\n \"datetime\",\n \"timestamp\",\n \"time\",\n \"year\",\n // string types\n \"char\",\n \"nchar\", // synonym for national char\n \"national char\",\n \"varchar\",\n \"nvarchar\", // synonym for national varchar\n \"national varchar\",\n \"blob\",\n \"text\",\n \"tinyblob\",\n \"tinytext\",\n \"mediumblob\",\n \"mediumtext\",\n \"longblob\",\n \"longtext\",\n \"enum\",\n \"set\",\n \"binary\",\n \"varbinary\",\n // json data type\n \"json\",\n // spatial data types\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\",\n ]\n\n /**\n * Returns type of upsert supported by driver if any\n */\n readonly supportedUpsertType = \"on-duplicate-key-update\"\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\n \"geometry\",\n \"point\",\n \"linestring\",\n \"polygon\",\n \"multipoint\",\n \"multilinestring\",\n \"multipolygon\",\n \"geometrycollection\",\n ]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"char\",\n \"varchar\",\n \"nvarchar\",\n \"binary\",\n \"varbinary\",\n ]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withWidthColumnTypes: ColumnType[] = [\n \"bit\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"int\",\n \"integer\",\n \"bigint\",\n ]\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n \"time\",\n \"datetime\",\n \"timestamp\",\n ]\n\n /**\n * Gets list of column data types that supports scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n ]\n\n /**\n * Gets list of column data types that supports UNSIGNED and ZEROFILL attributes.\n */\n unsignedAndZerofillTypes: ColumnType[] = [\n \"int\",\n \"integer\",\n \"smallint\",\n \"tinyint\",\n \"mediumint\",\n \"bigint\",\n \"decimal\",\n \"dec\",\n \"numeric\",\n \"fixed\",\n \"float\",\n \"double\",\n \"double precision\",\n \"real\",\n ]\n\n /**\n * ORM has special columns and we need to know what database column types should be for those columns.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"datetime\",\n createDatePrecision: 6,\n createDateDefault: \"CURRENT_TIMESTAMP(6)\",\n updateDate: \"datetime\",\n updateDatePrecision: 6,\n updateDateDefault: \"CURRENT_TIMESTAMP(6)\",\n deleteDate: \"datetime\",\n deleteDatePrecision: 6,\n deleteDateNullable: true,\n version: \"int\",\n treeLevel: \"int\",\n migrationId: \"int\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\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 varchar: { length: 255 },\n nvarchar: { length: 255 },\n \"national varchar\": { length: 255 },\n char: { length: 1 },\n binary: { length: 1 },\n varbinary: { length: 255 },\n decimal: { precision: 10, scale: 0 },\n dec: { precision: 10, scale: 0 },\n numeric: { precision: 10, scale: 0 },\n fixed: { precision: 10, scale: 0 },\n float: { precision: 12 },\n double: { precision: 22 },\n time: { precision: 0 },\n datetime: { precision: 0 },\n timestamp: { precision: 0 },\n bit: { width: 1 },\n int: { width: 11 },\n integer: { width: 11 },\n tinyint: { width: 4 },\n smallint: { width: 6 },\n mediumint: { width: 9 },\n bigint: { width: 20 },\n }\n\n /**\n * Max length allowed by MySQL for aliases.\n * @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html\n */\n maxAliasLength = 63\n\n cteCapabilities: CteCapabilities = {\n enabled: false,\n requiresRecursiveHint: true,\n }\n\n /**\n * Supported returning types\n */\n private readonly _isReturningSqlSupported: Record<ReturningType, boolean> =\n {\n delete: false,\n insert: false,\n update: false,\n }\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: DataSource) {\n this.connection = connection\n this.options = {\n legacySpatialSupport: true,\n ...connection.options,\n } as MysqlConnectionOptions\n this.isReplicated = this.options.replication ? true : false\n\n // load mysql package\n this.loadDependencies()\n\n this.database = DriverUtils.buildDriverOptions(\n this.options.replication\n ? this.options.replication.master\n : this.options,\n ).database\n\n // validate options to make sure everything is set\n // todo: revisit validation with replication in mind\n // if (!(this.options.host || (this.options.extra && this.options.extra.socketPath)) && !this.options.socketPath)\n // throw new DriverOptionNotSetError(\"socketPath and host\");\n // if (!this.options.username)\n // throw new DriverOptionNotSetError(\"username\");\n // if (!this.options.database)\n // throw new DriverOptionNotSetError(\"database\");\n // todo: check what is going on when connection is setup without database and how to connect to a database then?\n // todo: provide options to auto-create a database if it does not exist yet\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n if (this.options.replication) {\n this.poolCluster = this.mysql.createPoolCluster(\n this.options.replication,\n )\n this.options.replication.slaves.forEach((slave, index) => {\n this.poolCluster.add(\n \"SLAVE\" + index,\n this.createConnectionOptions(this.options, slave),\n )\n })\n this.poolCluster.add(\n \"MASTER\",\n this.createConnectionOptions(\n this.options,\n this.options.replication.master,\n ),\n )\n } else {\n this.pool = await this.createPool(\n this.createConnectionOptions(this.options, this.options),\n )\n }\n\n if (!this.database) {\n const queryRunner = await this.createQueryRunner(\"master\")\n\n this.database = await queryRunner.getCurrentDatabase()\n\n await queryRunner.release()\n }\n\n const queryRunner = this.createQueryRunner(\"master\")\n const result: {\n version: string\n }[] = await queryRunner.query(`SELECT VERSION() AS \\`version\\``)\n const dbVersion = result[0].version\n this.version = dbVersion\n await queryRunner.release()\n\n if (this.options.type === \"mariadb\") {\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.0.5\")) {\n this._isReturningSqlSupported.delete = true\n }\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.5.0\")) {\n this._isReturningSqlSupported.insert = true\n }\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"10.2.0\")) {\n this.cteCapabilities.enabled = true\n }\n } else if (this.options.type === \"mysql\") {\n if (VersionUtils.isGreaterOrEqual(dbVersion, \"8.0.0\")) {\n this.cteCapabilities.enabled = true\n }\n }\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 if (!this.poolCluster && !this.pool)\n return Promise.reject(new ConnectionIsNotSetError(\"mysql\"))\n\n if (this.poolCluster) {\n return new Promise<void>((ok, fail) => {\n this.poolCluster.end((err: any) => (err ? fail(err) : ok()))\n this.poolCluster = undefined\n })\n }\n if (this.pool) {\n return new Promise<void>((ok, fail) => {\n this.pool.end((err: any) => {\n if (err) return fail(err)\n this.pool = undefined\n ok()\n })\n })\n }\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 MysqlQueryRunner(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) => nativeParameters[key],\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 let 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 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 database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n */\n buildTableName(\n tableName: string,\n schema?: string,\n database?: string,\n ): string {\n let tablePath = [tableName]\n\n if (database) {\n tablePath.unshift(database)\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 = undefined\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:\n (parts.length > 1 ? parts[0] : undefined) || driverDatabase,\n schema: 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 (columnMetadata.type === \"json\") {\n return JSON.stringify(value)\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === \"datetime\" ||\n columnMetadata.type === Date\n ) {\n return DateUtils.mixedDateToDate(value)\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 (\n columnMetadata.type === \"enum\" ||\n columnMetadata.type === \"simple-enum\"\n ) {\n return \"\" + value\n } else if (columnMetadata.type === \"set\") {\n return DateUtils.simpleArrayToString(value)\n } else if (columnMetadata.type === Number) {\n // convert to number if number\n value = !isNaN(+value) ? parseInt(value) : value\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 === Boolean ||\n columnMetadata.type === \"bool\" ||\n columnMetadata.type === \"boolean\"\n ) {\n value = value ? true : false\n } else if (\n columnMetadata.type === \"datetime\" ||\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 === \"json\") {\n value = typeof value === \"string\" ? JSON.parse(value) : 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 (\n (columnMetadata.type === \"enum\" ||\n columnMetadata.type === \"simple-enum\") &&\n columnMetadata.enum &&\n !isNaN(value) &&\n columnMetadata.enum.indexOf(parseInt(value)) >= 0\n ) {\n // convert to number if that exists in possible enum options\n value = parseInt(value)\n } else if (columnMetadata.type === \"set\") {\n value = DateUtils.stringToSimpleArray(value)\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 === \"integer\") {\n return \"int\"\n } else if (column.type === String) {\n return \"varchar\"\n } else if (column.type === Date) {\n return \"datetime\"\n } else if ((column.type as any) === Buffer) {\n return \"blob\"\n } else if (column.type === Boolean) {\n return \"tinyint\"\n } else if (column.type === \"uuid\") {\n return \"varchar\"\n } else if (column.type === \"json\" && this.options.type === \"mariadb\") {\n /*\n * MariaDB implements this as a LONGTEXT rather, as the JSON data type contradicts the SQL standard,\n * and MariaDB's benchmarks indicate that performance is at least equivalent.\n *\n * @see https://mariadb.com/kb/en/json-data-type/\n */\n return \"longtext\"\n } else if (\n column.type === \"simple-array\" ||\n column.type === \"simple-json\"\n ) {\n return \"text\"\n } else if (column.type === \"simple-enum\") {\n return \"enum\"\n } else if (\n column.type === \"double precision\" ||\n column.type === \"real\"\n ) {\n return \"double\"\n } else if (\n column.type === \"dec\" ||\n column.type === \"numeric\" ||\n column.type === \"fixed\"\n ) {\n return \"decimal\"\n } else if (column.type === \"bool\" || column.type === \"boolean\") {\n return \"tinyint\"\n } else if (\n column.type === \"nvarchar\" ||\n column.type === \"national varchar\"\n ) {\n return \"varchar\"\n } else if (column.type === \"nchar\" || column.type === \"national char\") {\n return \"char\"\n } else {\n return (column.type as string) || \"\"\n }\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 (defaultValue === null) {\n return undefined\n }\n\n if (\n (columnMetadata.type === \"enum\" ||\n columnMetadata.type === \"simple-enum\" ||\n typeof defaultValue === \"string\") &&\n defaultValue !== undefined\n ) {\n return `'${defaultValue}'`\n }\n\n if (columnMetadata.type === \"set\" && defaultValue !== undefined) {\n return `'${DateUtils.simpleArrayToString(defaultValue)}'`\n }\n\n if (typeof defaultValue === \"number\") {\n return `'${defaultValue.toFixed(columnMetadata.scale)}'`\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"1\" : \"0\"\n }\n\n if (typeof defaultValue === \"function\") {\n const value = defaultValue()\n return this.normalizeDatetimeFunction(value)\n }\n\n if (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 /**\n * fix https://github.com/typeorm/typeorm/issues/1139\n */\n if (column.generationStrategy === \"uuid\") return \"36\"\n\n switch (column.type) {\n case String:\n case \"varchar\":\n case \"nvarchar\":\n case \"national varchar\":\n return \"255\"\n case \"varbinary\":\n return \"255\"\n default:\n return \"\"\n }\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 MySQL requires column length for `varchar`, `nvarchar` and `varbinary` data types\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`\n } else if (column.width) {\n type += `(${column.width})`\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 return new Promise<any>((ok, fail) => {\n if (this.poolCluster) {\n this.poolCluster.getConnection(\n \"MASTER\",\n (err: any, dbConnection: any) => {\n err\n ? fail(err)\n : ok(this.prepareDbConnection(dbConnection))\n },\n )\n } else if (this.pool) {\n this.pool.getConnection((err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection))\n })\n } else {\n fail(\n new TypeORMError(\n `Connection is not established with mysql database`,\n ),\n )\n }\n })\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 if (!this.poolCluster) return this.obtainMasterConnection()\n\n return new Promise<any>((ok, fail) => {\n this.poolCluster.getConnection(\n \"SLAVE*\",\n (err: any, dbConnection: any) => {\n err ? fail(err) : ok(this.prepareDbConnection(dbConnection))\n },\n )\n })\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(\n metadata: EntityMetadata,\n insertResult: any,\n entityIndex: number,\n ) {\n if (!insertResult) {\n return undefined\n }\n\n if (insertResult.insertId === undefined) {\n return Object.keys(insertResult).reduce((map, key) => {\n const column = metadata.findColumnWithDatabaseName(key)\n if (column) {\n OrmUtils.mergeDeep(\n map,\n column.createValueMap(insertResult[key]),\n )\n // OrmUtils.mergeDeep(map, column.createValueMap(this.prepareHydratedValue(insertResult[key], column))); // TODO: probably should be like there, but fails on enums, fix later\n }\n return map\n }, {} as ObjectLiteral)\n }\n\n const generatedMap = metadata.generatedColumns.reduce(\n (map, generatedColumn) => {\n let value: any\n if (\n generatedColumn.generationStrategy === \"increment\" &&\n insertResult.insertId\n ) {\n // NOTE: When multiple rows is inserted by a single INSERT statement,\n // `insertId` is the value generated for the first inserted row only.\n value = insertResult.insertId + entityIndex\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) return false // we don't need new columns, we only need exist and changed\n\n const isColumnChanged =\n tableColumn.name !== columnMetadata.databaseName ||\n tableColumn.type !== this.normalizeType(columnMetadata) ||\n tableColumn.length !== this.getColumnLength(columnMetadata) ||\n tableColumn.width !== columnMetadata.width ||\n (columnMetadata.precision !== undefined &&\n tableColumn.precision !== columnMetadata.precision) ||\n (columnMetadata.scale !== undefined &&\n tableColumn.scale !== columnMetadata.scale) ||\n tableColumn.zerofill !== columnMetadata.zerofill ||\n tableColumn.unsigned !== columnMetadata.unsigned ||\n tableColumn.asExpression !== columnMetadata.asExpression ||\n tableColumn.generatedType !== columnMetadata.generatedType ||\n tableColumn.comment !==\n this.escapeComment(columnMetadata.comment) ||\n !this.compareDefaultValues(\n this.normalizeDefault(columnMetadata),\n tableColumn.default,\n ) ||\n (tableColumn.enum &&\n columnMetadata.enum &&\n !OrmUtils.isArraysEqual(\n tableColumn.enum,\n columnMetadata.enum.map((val) => val + \"\"),\n )) ||\n tableColumn.onUpdate !==\n this.normalizeDatetimeFunction(columnMetadata.onUpdate) ||\n tableColumn.isPrimary !== columnMetadata.isPrimary ||\n !this.compareNullableValues(columnMetadata, tableColumn) ||\n tableColumn.isUnique !==\n this.normalizeIsUnique(columnMetadata) ||\n (columnMetadata.generationStrategy !== \"uuid\" &&\n tableColumn.isGenerated !== columnMetadata.isGenerated)\n\n // DEBUG SECTION\n // if (isColumnChanged) {\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName)\n // console.log(\n // \"name:\",\n // tableColumn.name,\n // columnMetadata.databaseName,\n // )\n // console.log(\n // \"type:\",\n // tableColumn.type,\n // this.normalizeType(columnMetadata),\n // )\n // console.log(\n // \"length:\",\n // tableColumn.length,\n // columnMetadata.length,\n // )\n // console.log(\"width:\", tableColumn.width, columnMetadata.width)\n // console.log(\n // \"precision:\",\n // tableColumn.precision,\n // columnMetadata.precision,\n // )\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale)\n // console.log(\n // \"zerofill:\",\n // tableColumn.zerofill,\n // columnMetadata.zerofill,\n // )\n // console.log(\n // \"unsigned:\",\n // tableColumn.unsigned,\n // columnMetadata.unsigned,\n // )\n // console.log(\n // \"asExpression:\",\n // tableColumn.asExpression,\n // columnMetadata.asExpression,\n // )\n // console.log(\n // \"generatedType:\",\n // tableColumn.generatedType,\n // columnMetadata.generatedType,\n // )\n // console.log(\n // \"comment:\",\n // tableColumn.comment,\n // this.escapeComment(columnMetadata.comment),\n // )\n // console.log(\n // \"default:\",\n // tableColumn.default,\n // this.normalizeDefault(columnMetadata),\n // )\n // console.log(\"enum:\", tableColumn.enum, columnMetadata.enum)\n // console.log(\n // \"default changed:\",\n // !this.compareDefaultValues(\n // this.normalizeDefault(columnMetadata),\n // tableColumn.default,\n // ),\n // )\n // console.log(\n // \"isPrimary:\",\n // tableColumn.isPrimary,\n // columnMetadata.isPrimary,\n // )\n // console.log(\n // \"isNullable changed:\",\n // !this.compareNullableValues(columnMetadata, tableColumn),\n // )\n // console.log(\n // \"isUnique:\",\n // tableColumn.isUnique,\n // this.normalizeIsUnique(columnMetadata),\n // )\n // console.log(\n // \"isGenerated:\",\n // tableColumn.isGenerated,\n // columnMetadata.isGenerated,\n // )\n // console.log(\n // columnMetadata.generationStrategy !== \"uuid\" &&\n // tableColumn.isGenerated !== columnMetadata.isGenerated,\n // )\n // console.log(\"==========================================\")\n // }\n\n return isColumnChanged\n })\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(returningType: ReturningType): boolean {\n return this._isReturningSqlSupported[returningType]\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 true\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 * Loads all driver dependencies.\n */\n protected loadDependencies(): void {\n const connectorPackage = this.options.connectorPackage ?? \"mysql\"\n const fallbackConnectorPackage =\n connectorPackage === \"mysql\"\n ? (\"mysql2\" as const)\n : (\"mysql\" as const)\n try {\n // try to load first supported package\n const mysql =\n this.options.driver || PlatformTools.load(connectorPackage)\n this.mysql = mysql\n /*\n * Some frameworks (such as Jest) may mess up Node's require cache and provide garbage for the 'mysql' module\n * if it was not installed. We check that the object we got actually contains something otherwise we treat\n * it as if the `require` call failed.\n *\n * @see https://github.com/typeorm/typeorm/issues/1373\n */\n if (Object.keys(this.mysql).length === 0) {\n throw new TypeORMError(\n `'${connectorPackage}' was found but it is empty. Falling back to '${fallbackConnectorPackage}'.`,\n )\n }\n } catch (e) {\n try {\n this.mysql = PlatformTools.load(fallbackConnectorPackage) // try to load second supported package\n } catch (e) {\n throw new DriverPackageNotInstalledError(\n \"Mysql\",\n connectorPackage,\n )\n }\n }\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createConnectionOptions(\n options: MysqlConnectionOptions,\n credentials: MysqlConnectionCredentialsOptions,\n ): Promise<any> {\n credentials = Object.assign(\n {},\n credentials,\n DriverUtils.buildDriverOptions(credentials),\n ) // todo: do it better way\n\n // build connection options for the driver\n return Object.assign(\n {},\n {\n charset: options.charset,\n timezone: options.timezone,\n connectTimeout: options.connectTimeout,\n insecureAuth: options.insecureAuth,\n supportBigNumbers:\n options.supportBigNumbers !== undefined\n ? options.supportBigNumbers\n : true,\n bigNumberStrings:\n options.bigNumberStrings !== undefined\n ? options.bigNumberStrings\n : true,\n dateStrings: options.dateStrings,\n debug: options.debug,\n trace: options.trace,\n multipleStatements: options.multipleStatements,\n flags: options.flags,\n },\n {\n host: credentials.host,\n user: credentials.username,\n password: credentials.password,\n database: credentials.database,\n port: credentials.port,\n ssl: options.ssl,\n socketPath: credentials.socketPath,\n },\n options.acquireTimeout === undefined\n ? {}\n : { acquireTimeout: options.acquireTimeout },\n { connectionLimit: options.poolSize },\n options.extra || {},\n )\n }\n\n /**\n * Creates a new connection pool for a given database credentials.\n */\n protected createPool(connectionOptions: any): Promise<any> {\n // create a connection pool\n const pool = this.mysql.createPool(connectionOptions)\n\n // make sure connection is working fine\n return new Promise<void>((ok, fail) => {\n // (issue #610) we make first connection to database to make sure if connection credentials are wrong\n // we give error before calling any other method that creates actual query runner\n pool.getConnection((err: any, connection: any) => {\n if (err) return pool.end(() => fail(err))\n\n connection.release()\n ok(pool)\n })\n })\n }\n\n /**\n * Attaches all required base handlers to a database connection, such as the unhandled error handler.\n */\n private prepareDbConnection(connection: any): any {\n const { logger } = this.connection\n /*\n * Attaching an error handler to connection errors is essential, as, otherwise, errors raised will go unhandled and\n * cause the hosting app to crash.\n */\n if (connection.listeners(\"error\").length === 0) {\n connection.on(\"error\", (error: any) =>\n logger.log(\n \"warn\",\n `MySQL connection raised an error. ${error}`,\n ),\n )\n }\n return connection\n }\n\n /**\n * Checks if \"DEFAULT\" values in the column metadata and in the database are equal.\n */\n protected compareDefaultValues(\n columnMetadataValue: string | undefined,\n databaseValue: string | undefined,\n ): boolean {\n if (\n typeof columnMetadataValue === \"string\" &&\n typeof databaseValue === \"string\"\n ) {\n // we need to cut out \"'\" because in mysql we can understand returned value is a string or a function\n // as result compare cannot understand if default is really changed or not\n columnMetadataValue = columnMetadataValue.replace(/^'+|'+$/g, \"\")\n databaseValue = databaseValue.replace(/^'+|'+$/g, \"\")\n }\n\n return columnMetadataValue === databaseValue\n }\n\n compareNullableValues(\n columnMetadata: ColumnMetadata,\n tableColumn: TableColumn,\n ): boolean {\n // MariaDB does not support NULL/NOT NULL expressions for generated columns\n const isMariaDb = this.options.type === \"mariadb\"\n if (isMariaDb && columnMetadata.generatedType) {\n return true\n }\n\n return columnMetadata.isNullable === tableColumn.isNullable\n }\n\n /**\n * If parameter is a datetime function, e.g. \"CURRENT_TIMESTAMP\", normalizes it.\n * Otherwise returns original input.\n */\n protected normalizeDatetimeFunction(value?: string) {\n if (!value) return value\n\n // check if input is datetime function\n const isDatetimeFunction =\n value.toUpperCase().indexOf(\"CURRENT_TIMESTAMP\") !== -1 ||\n value.toUpperCase().indexOf(\"NOW\") !== -1\n\n if (isDatetimeFunction) {\n // extract precision, e.g. \"(3)\"\n const precision = value.match(/\\(\\d+\\)/)\n if (this.options.type === \"mariadb\") {\n return precision\n ? `CURRENT_TIMESTAMP${precision[0]}`\n : \"CURRENT_TIMESTAMP()\"\n } else {\n return precision\n ? `CURRENT_TIMESTAMP${precision[0]}`\n : \"CURRENT_TIMESTAMP\"\n }\n } else {\n return value\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":"../.."}
|
|
@@ -119,7 +119,7 @@ export declare class MysqlQueryRunner extends BaseQueryRunner implements QueryRu
|
|
|
119
119
|
/**
|
|
120
120
|
* Creates a new view.
|
|
121
121
|
*/
|
|
122
|
-
createView(view: View): Promise<void>;
|
|
122
|
+
createView(view: View, syncWithMetadata?: boolean): Promise<void>;
|
|
123
123
|
/**
|
|
124
124
|
* Drops the view.
|
|
125
125
|
*/
|
|
@@ -387,13 +387,15 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
|
|
|
387
387
|
/**
|
|
388
388
|
* Creates a new view.
|
|
389
389
|
*/
|
|
390
|
-
async createView(view) {
|
|
390
|
+
async createView(view, syncWithMetadata = false) {
|
|
391
391
|
const upQueries = [];
|
|
392
392
|
const downQueries = [];
|
|
393
393
|
upQueries.push(this.createViewSql(view));
|
|
394
|
-
|
|
394
|
+
if (syncWithMetadata)
|
|
395
|
+
upQueries.push(await this.insertViewDefinitionSql(view));
|
|
395
396
|
downQueries.push(this.dropViewSql(view));
|
|
396
|
-
|
|
397
|
+
if (syncWithMetadata)
|
|
398
|
+
downQueries.push(await this.deleteViewDefinitionSql(view));
|
|
397
399
|
await this.executeQueries(upQueries, downQueries);
|
|
398
400
|
}
|
|
399
401
|
/**
|