typeorm 1.0.0-beta.2 → 1.0.0-beta.3
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 +1 -3
- package/browser/connection/ConnectionOptionsReader.js +1 -1
- package/browser/connection/ConnectionOptionsReader.js.map +1 -1
- package/browser/data-source/DataSource.d.ts +1 -1
- package/browser/data-source/DataSource.js.map +1 -1
- package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
- package/browser/driver/DriverUtils.d.ts +1 -0
- package/browser/driver/DriverUtils.js +27 -29
- package/browser/driver/DriverUtils.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +4 -4
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +2 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +2 -1
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +3 -0
- package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +2 -1
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -0
- package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +1 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js +5 -1
- package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachDriver.js +3 -3
- package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +55 -50
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.d.ts +1 -1
- package/browser/driver/cordova/CordovaQueryRunner.js +2 -0
- package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/browser/driver/expo/ExpoDataSourceOptions.d.ts +5 -3
- package/browser/driver/expo/ExpoDataSourceOptions.js.map +1 -1
- package/browser/driver/expo/ExpoDriver.d.ts +16 -1
- package/browser/driver/expo/ExpoDriver.js +68 -6
- package/browser/driver/expo/ExpoDriver.js.map +1 -1
- package/browser/driver/expo/ExpoQueryRunner.d.ts +2 -1
- package/browser/driver/expo/ExpoQueryRunner.js +3 -0
- package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.js +4 -4
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +2 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +78 -82
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +1 -1
- package/browser/driver/nativescript/NativescriptQueryRunner.js +3 -0
- package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleDriver.js +2 -2
- package/browser/driver/oracle/OracleDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.js +8 -8
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +2 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +12 -8
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/react-native/ReactNativeDriver.js +1 -1
- package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +1 -1
- package/browser/driver/react-native/ReactNativeQueryRunner.js +3 -0
- package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +5 -3
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/sap/SapQueryRunner.d.ts +2 -1
- package/browser/driver/sap/SapQueryRunner.js +171 -16
- package/browser/driver/sap/SapQueryRunner.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
- package/browser/driver/spanner/SpannerDriver.js +6 -8
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerQueryRunner.d.ts +16 -1
- package/browser/driver/spanner/SpannerQueryRunner.js +75 -7
- package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -14
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqljs/SqljsQueryRunner.d.ts +2 -1
- package/browser/driver/sqljs/SqljsQueryRunner.js +3 -0
- package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js +1 -1
- package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +65 -60
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-manager/EntityManager.d.ts +1 -1
- package/browser/entity-manager/EntityManager.js.map +1 -1
- package/browser/error/NamedPlaceholdersNotSupportedError.d.ts +7 -0
- package/browser/error/NamedPlaceholdersNotSupportedError.js +14 -0
- package/browser/error/NamedPlaceholdersNotSupportedError.js.map +1 -0
- package/browser/error/QueryFailedError.d.ts +3 -2
- package/browser/error/QueryFailedError.js.map +1 -1
- package/browser/error/index.d.ts +1 -0
- package/browser/error/index.js +1 -0
- package/browser/error/index.js.map +1 -1
- package/browser/index.d.ts +0 -1
- package/browser/index.js +1 -3
- package/browser/index.js.map +1 -1
- package/browser/logger/AbstractLogger.d.ts +5 -4
- package/browser/logger/AbstractLogger.js +3 -1
- package/browser/logger/AbstractLogger.js.map +1 -1
- package/browser/logger/DebugLogger.js +3 -1
- package/browser/logger/DebugLogger.js.map +1 -1
- package/browser/logger/Logger.d.ts +5 -4
- package/browser/logger/Logger.js.map +1 -1
- package/browser/naming-strategy/DefaultNamingStrategy.d.ts +7 -26
- package/browser/naming-strategy/DefaultNamingStrategy.js +19 -37
- package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/browser/naming-strategy/NamingStrategyInterface.d.ts +9 -13
- package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
- package/browser/persistence/EntityPersistExecutor.js +20 -8
- package/browser/persistence/EntityPersistExecutor.js.map +1 -1
- package/browser/persistence/SubjectDatabaseEntityLoader.js +15 -5
- package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/browser/persistence/SubjectExecutor.js +50 -30
- package/browser/persistence/SubjectExecutor.js.map +1 -1
- package/browser/platform/PlatformTools.js +1 -1
- package/browser/platform/PlatformTools.js.map +1 -1
- package/browser/query-builder/JoinAttribute.js +3 -3
- package/browser/query-builder/JoinAttribute.js.map +1 -1
- package/browser/query-builder/QueryBuilder.d.ts +0 -1
- package/browser/query-builder/QueryBuilder.js +3 -13
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +33 -27
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/query-builder/SoftDeleteQueryBuilder.js +0 -2
- package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/browser/query-builder/UpdateQueryBuilder.js +0 -2
- package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdAttribute.js +4 -4
- package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/browser/query-builder/relation-id/RelationIdLoader.js +16 -9
- package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/browser/query-runner/BaseQueryRunner.d.ts +44 -21
- package/browser/query-runner/BaseQueryRunner.js +61 -21
- package/browser/query-runner/BaseQueryRunner.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +11 -2
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/repository/BaseEntity.d.ts +2 -1
- package/browser/repository/BaseEntity.js.map +1 -1
- package/browser/repository/Repository.d.ts +1 -1
- package/browser/repository/Repository.js.map +1 -1
- package/browser/subscriber/Broadcaster.d.ts +4 -4
- package/browser/subscriber/Broadcaster.js.map +1 -1
- package/browser/subscriber/event/QueryEvent.d.ts +2 -1
- package/browser/subscriber/event/QueryEvent.js.map +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js +1 -1
- package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/browser/util/ImportUtils.js +1 -1
- package/browser/util/ImportUtils.js.map +1 -1
- package/browser/util/OrmUtils.js +1 -1
- package/browser/util/OrmUtils.js.map +1 -1
- package/browser/util/PathUtils.js +1 -1
- package/browser/util/PathUtils.js.map +1 -1
- package/browser/util/RandomGenerator.d.ts +1 -10
- package/browser/util/RandomGenerator.js +1 -10
- package/browser/util/RandomGenerator.js.map +1 -1
- package/browser/util/StringUtils.js +9 -9
- package/browser/util/StringUtils.js.map +1 -1
- package/browser/util/escapeRegExp.js +1 -1
- package/browser/util/escapeRegExp.js.map +1 -1
- package/commands/InitCommand.d.ts +0 -3
- package/commands/InitCommand.js +4 -31
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +3 -1
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/commands/VersionCommand.js +2 -2
- package/commands/VersionCommand.js.map +1 -1
- package/connection/ConnectionOptionsReader.js +1 -1
- package/connection/ConnectionOptionsReader.js.map +1 -1
- package/data-source/DataSource.d.ts +1 -1
- package/data-source/DataSource.js.map +1 -1
- package/decorator/options/JoinColumnOptions.js.map +1 -1
- package/driver/DriverUtils.d.ts +1 -0
- package/driver/DriverUtils.js +27 -29
- package/driver/DriverUtils.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.js +4 -4
- package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +2 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +2 -1
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +3 -0
- package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +2 -1
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -0
- package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/driver/capacitor/CapacitorQueryRunner.d.ts +1 -1
- package/driver/capacitor/CapacitorQueryRunner.js +5 -1
- package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/driver/cockroachdb/CockroachDriver.js +3 -3
- package/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
- package/driver/cockroachdb/CockroachQueryRunner.js +55 -50
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/cordova/CordovaQueryRunner.d.ts +1 -1
- package/driver/cordova/CordovaQueryRunner.js +2 -0
- package/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/driver/expo/ExpoDataSourceOptions.d.ts +5 -3
- package/driver/expo/ExpoDataSourceOptions.js.map +1 -1
- package/driver/expo/ExpoDriver.d.ts +16 -1
- package/driver/expo/ExpoDriver.js +68 -6
- package/driver/expo/ExpoDriver.js.map +1 -1
- package/driver/expo/ExpoQueryRunner.d.ts +2 -1
- package/driver/expo/ExpoQueryRunner.js +3 -0
- package/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.js +4 -4
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +2 -1
- package/driver/mysql/MysqlQueryRunner.js +78 -82
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/nativescript/NativescriptQueryRunner.d.ts +1 -1
- package/driver/nativescript/NativescriptQueryRunner.js +3 -0
- package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/driver/oracle/OracleDriver.js +2 -2
- package/driver/oracle/OracleDriver.js.map +1 -1
- package/driver/postgres/PostgresDriver.js +8 -8
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +2 -1
- package/driver/postgres/PostgresQueryRunner.js +12 -8
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/react-native/ReactNativeDriver.js +1 -1
- package/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/driver/react-native/ReactNativeQueryRunner.d.ts +1 -1
- package/driver/react-native/ReactNativeQueryRunner.js +3 -0
- package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.js +5 -3
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/sap/SapQueryRunner.d.ts +2 -1
- package/driver/sap/SapQueryRunner.js +171 -16
- package/driver/sap/SapQueryRunner.js.map +1 -1
- package/driver/spanner/SpannerDriver.d.ts +1 -1
- package/driver/spanner/SpannerDriver.js +6 -8
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/spanner/SpannerQueryRunner.d.ts +16 -1
- package/driver/spanner/SpannerQueryRunner.js +75 -7
- package/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -14
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqljs/SqljsQueryRunner.d.ts +2 -1
- package/driver/sqljs/SqljsQueryRunner.js +3 -0
- package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerDriver.js +1 -1
- package/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
- package/driver/sqlserver/SqlServerQueryRunner.js +65 -60
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-manager/EntityManager.d.ts +1 -1
- package/entity-manager/EntityManager.js.map +1 -1
- package/error/NamedPlaceholdersNotSupportedError.d.ts +7 -0
- package/error/NamedPlaceholdersNotSupportedError.js +14 -0
- package/error/NamedPlaceholdersNotSupportedError.js.map +1 -0
- package/error/QueryFailedError.d.ts +3 -2
- package/error/QueryFailedError.js.map +1 -1
- package/error/index.d.ts +1 -0
- package/error/index.js +1 -0
- package/error/index.js.map +1 -1
- package/index.d.ts +0 -1
- package/index.js +1 -3
- package/index.js.map +1 -1
- package/index.mjs +2 -2
- package/logger/AbstractLogger.d.ts +5 -4
- package/logger/AbstractLogger.js +3 -1
- package/logger/AbstractLogger.js.map +1 -1
- package/logger/DebugLogger.js +3 -1
- package/logger/DebugLogger.js.map +1 -1
- package/logger/Logger.d.ts +5 -4
- package/logger/Logger.js.map +1 -1
- package/naming-strategy/DefaultNamingStrategy.d.ts +7 -26
- package/naming-strategy/DefaultNamingStrategy.js +19 -37
- package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/naming-strategy/NamingStrategyInterface.d.ts +9 -13
- package/naming-strategy/NamingStrategyInterface.js.map +1 -1
- package/package.json +6 -6
- package/persistence/EntityPersistExecutor.js +20 -8
- package/persistence/EntityPersistExecutor.js.map +1 -1
- package/persistence/SubjectDatabaseEntityLoader.js +15 -5
- package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/persistence/SubjectExecutor.js +50 -30
- package/persistence/SubjectExecutor.js.map +1 -1
- package/platform/PlatformTools.js +1 -1
- package/platform/PlatformTools.js.map +1 -1
- package/query-builder/JoinAttribute.js +3 -3
- package/query-builder/JoinAttribute.js.map +1 -1
- package/query-builder/QueryBuilder.d.ts +0 -1
- package/query-builder/QueryBuilder.js +3 -13
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/SelectQueryBuilder.js +33 -27
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/query-builder/SoftDeleteQueryBuilder.js +0 -2
- package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/query-builder/UpdateQueryBuilder.js +0 -2
- package/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/query-builder/relation-id/RelationIdAttribute.js +4 -4
- package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/query-builder/relation-id/RelationIdLoader.js +16 -9
- package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/query-runner/BaseQueryRunner.d.ts +44 -21
- package/query-runner/BaseQueryRunner.js +61 -21
- package/query-runner/BaseQueryRunner.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +11 -2
- package/query-runner/QueryRunner.js.map +1 -1
- package/repository/BaseEntity.d.ts +2 -1
- package/repository/BaseEntity.js.map +1 -1
- package/repository/Repository.d.ts +1 -1
- package/repository/Repository.js.map +1 -1
- package/subscriber/Broadcaster.d.ts +4 -4
- package/subscriber/Broadcaster.js.map +1 -1
- package/subscriber/event/QueryEvent.d.ts +2 -1
- package/subscriber/event/QueryEvent.js.map +1 -1
- package/util/DirectoryExportedClassesLoader.js +1 -1
- package/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/util/ImportUtils.js +1 -1
- package/util/ImportUtils.js.map +1 -1
- package/util/OrmUtils.js +1 -1
- package/util/OrmUtils.js.map +1 -1
- package/util/PathUtils.js +1 -1
- package/util/PathUtils.js.map +1 -1
- package/util/RandomGenerator.d.ts +1 -10
- package/util/RandomGenerator.js +1 -10
- package/util/RandomGenerator.js.map +1 -1
- package/util/StringUtils.js +9 -9
- package/util/StringUtils.js.map +1 -1
- package/util/escapeRegExp.js +1 -1
- package/util/escapeRegExp.js.map +1 -1
- package/browser/naming-strategy/LegacyOracleNamingStrategy.d.ts +0 -21
- package/browser/naming-strategy/LegacyOracleNamingStrategy.js +0 -49
- package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +0 -1
- package/naming-strategy/LegacyOracleNamingStrategy.d.ts +0 -21
- package/naming-strategy/LegacyOracleNamingStrategy.js +0 -49
- package/naming-strategy/LegacyOracleNamingStrategy.js.map +0 -1
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
<a href="https://www.npmjs.com/package/typeorm"><img src="https://img.shields.io/npm/v/typeorm" alt="NPM Version"/></a>
|
|
12
12
|
<a href="https://www.npmjs.com/package/typeorm"><img src="https://img.shields.io/npm/dm/typeorm" alt="NPM Downloads"/></a>
|
|
13
13
|
<a href="https://github.com/typeorm/typeorm/actions/workflows/tests.yml?query=branch%3Amaster"><img src="https://github.com/typeorm/typeorm/actions/workflows/tests.yml/badge.svg?branch=master" alt="Commit Validation"/></a>
|
|
14
|
-
<a href="https://
|
|
14
|
+
<a href="https://sonarcloud.io/summary/overall?id=typeorm_typeorm"><img src="https://sonarcloud.io/api/project_badges/measure?project=typeorm_typeorm&metric=coverage" alt="Coverage"/></a>
|
|
15
15
|
<a href='https://dashboard.stryker-mutator.io/reports/github.com/typeorm/typeorm/master'><img src='https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Ftypeorm%2Ftypeorm%2Fmaster' alt='Mutation testing badge' /></a>
|
|
16
16
|
<a href=""><img src="https://img.shields.io/badge/License-MIT-teal.svg" alt="MIT License"/></a>
|
|
17
17
|
<br>
|
|
@@ -156,8 +156,6 @@ await timber.remove()
|
|
|
156
156
|
|
|
157
157
|
## Samples
|
|
158
158
|
|
|
159
|
-
Take a look at the samples in [sample](https://github.com/typeorm/typeorm/tree/master/sample) for examples of usage.
|
|
160
|
-
|
|
161
159
|
There are a few repositories that you can clone and start with:
|
|
162
160
|
|
|
163
161
|
- [Example how to use TypeORM with TypeScript](https://github.com/typeorm/typescript-example)
|
|
@@ -134,7 +134,7 @@ class ConnectionOptionsReader {
|
|
|
134
134
|
if (typeof options.database === "string" &&
|
|
135
135
|
!(0, PathUtils_1.isAbsolute)(options.database) &&
|
|
136
136
|
!options.database.startsWith("/") && // unix absolute
|
|
137
|
-
options.database.
|
|
137
|
+
options.database.slice(1, 3) !== ":\\" && // windows absolute
|
|
138
138
|
options.database !== ":memory:") {
|
|
139
139
|
Object.assign(options, {
|
|
140
140
|
database: this.baseDirectory + "/" + options.database,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionOptionsReader.js","sourceRoot":"../build/browser/src/","sources":["connection/ConnectionOptionsReader.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\"\n\nimport type { DataSourceOptions } from \"../data-source/DataSourceOptions\"\nimport { TypeORMError } from \"../error\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { importOrRequireFile } from \"../util/ImportUtils\"\nimport { isAbsolute } from \"../util/PathUtils\"\n\n/**\n * Reads connection options from the ormconfig.\n */\nexport class ConnectionOptionsReader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected options?: {\n /**\n * Directory from where the `ormconfig` file should be read.\n * Default: `process.cwd()`.\n */\n root?: string\n\n /**\n * Filename of the ormconfig configuration. By default its equal to \"ormconfig\".\n */\n configName?: string\n },\n ) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns all connection options read from the ormconfig.\n */\n async get(): Promise<DataSourceOptions[]> {\n const options = await this.load()\n if (!options)\n throw new TypeORMError(\n `No connection options were found in any orm configuration files.`,\n )\n\n return options\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads all connection options from a configuration file.\n *\n * todo: get in count NODE_ENV somehow\n */\n protected async load(): Promise<DataSourceOptions[] | undefined> {\n let connectionOptions:\n | DataSourceOptions\n | DataSourceOptions[]\n | undefined = undefined\n\n const fileFormats = [\"js\", \"mjs\", \"cjs\", \"ts\", \"mts\", \"cts\", \"json\"]\n\n // Detect if baseFilePath contains file extension\n const possibleExtension = path.extname(this.baseFilePath)\n const fileExtension = fileFormats.find(\n (extension) => `.${extension}` === possibleExtension,\n )\n\n // try to find any of following configuration formats\n const foundFileFormat =\n fileExtension ??\n fileFormats.find((format) => {\n return PlatformTools.fileExist(this.baseFilePath + \".\" + format)\n })\n\n // Determine config file name\n const configFile = fileExtension\n ? this.baseFilePath\n : this.baseFilePath + \".\" + foundFileFormat\n\n // try to find connection options from any of available sources of configuration\n if (\n foundFileFormat === \"js\" ||\n foundFileFormat === \"mjs\" ||\n foundFileFormat === \"cjs\" ||\n foundFileFormat === \"ts\" ||\n foundFileFormat === \"mts\" ||\n foundFileFormat === \"cts\"\n ) {\n try {\n const [importOrRequireResult, moduleSystem] =\n await importOrRequireFile(configFile)\n const configModule = await importOrRequireResult\n\n if (\n moduleSystem === \"esm\" ||\n (configModule &&\n \"__esModule\" in configModule &&\n \"default\" in configModule)\n ) {\n connectionOptions = configModule.default\n } else {\n connectionOptions = configModule\n }\n } catch (err) {\n PlatformTools.logWarn(\n `Warning: Could not load ormconfig file at ${configFile}`,\n err instanceof Error ? err.message : String(err),\n )\n }\n } else if (foundFileFormat === \"json\") {\n try {\n connectionOptions = require(configFile)\n } catch (err) {\n PlatformTools.logWarn(\n `Warning: Could not load ormconfig file at ${configFile}`,\n err instanceof Error ? err.message : String(err),\n )\n }\n }\n\n // normalize and return connection options\n if (connectionOptions) {\n return this.normalizeConnectionOptions(connectionOptions)\n }\n\n return undefined\n }\n\n /**\n * Normalize connection options.\n *\n * @param connectionOptions\n */\n protected normalizeConnectionOptions(\n connectionOptions: DataSourceOptions | DataSourceOptions[],\n ): DataSourceOptions[] {\n if (!Array.isArray(connectionOptions))\n connectionOptions = [connectionOptions]\n\n connectionOptions.forEach((options) => {\n options.baseDirectory = this.baseDirectory\n if (options.entities) {\n const entities = (options.entities as any[]).map((entity) => {\n if (typeof entity === \"string\" && !entity.startsWith(\"/\")) {\n return this.baseDirectory + \"/\" + entity\n }\n\n return entity\n })\n Object.assign(connectionOptions, { entities: entities })\n }\n if (options.subscribers) {\n const subscribers = (options.subscribers as any[]).map(\n (subscriber) => {\n if (\n typeof subscriber === \"string\" &&\n !subscriber.startsWith(\"/\")\n ) {\n return this.baseDirectory + \"/\" + subscriber\n }\n\n return subscriber\n },\n )\n Object.assign(connectionOptions, { subscribers: subscribers })\n }\n if (options.migrations) {\n const migrations = (options.migrations as any[]).map(\n (migration) => {\n if (\n typeof migration === \"string\" &&\n !migration.startsWith(\"/\")\n ) {\n return this.baseDirectory + \"/\" + migration\n }\n\n return migration\n },\n )\n Object.assign(connectionOptions, { migrations: migrations })\n }\n\n // make database path file in sqlite relative to package.json\n if (options.type === \"better-sqlite3\") {\n if (\n typeof options.database === \"string\" &&\n !isAbsolute(options.database) &&\n !options.database.startsWith(\"/\") && // unix absolute\n options.database.substring(1, 3) !== \":\\\\\" && // windows absolute\n options.database !== \":memory:\"\n ) {\n Object.assign(options, {\n database: this.baseDirectory + \"/\" + options.database,\n })\n }\n }\n })\n\n return connectionOptions\n }\n\n /**\n * Gets directory where configuration file should be located and configuration file name.\n */\n protected get baseFilePath(): string {\n return path.resolve(this.baseDirectory, this.baseConfigName)\n }\n\n /**\n * Gets directory where configuration file should be located.\n */\n protected get baseDirectory(): string {\n return this.options?.root ?? process.cwd()\n }\n\n /**\n * Gets configuration file name.\n */\n protected get baseConfigName(): string {\n return this.options?.configName ?? \"ormconfig\"\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ConnectionOptionsReader.js","sourceRoot":"../build/browser/src/","sources":["connection/ConnectionOptionsReader.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\"\n\nimport type { DataSourceOptions } from \"../data-source/DataSourceOptions\"\nimport { TypeORMError } from \"../error\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { importOrRequireFile } from \"../util/ImportUtils\"\nimport { isAbsolute } from \"../util/PathUtils\"\n\n/**\n * Reads connection options from the ormconfig.\n */\nexport class ConnectionOptionsReader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected options?: {\n /**\n * Directory from where the `ormconfig` file should be read.\n * Default: `process.cwd()`.\n */\n root?: string\n\n /**\n * Filename of the ormconfig configuration. By default its equal to \"ormconfig\".\n */\n configName?: string\n },\n ) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns all connection options read from the ormconfig.\n */\n async get(): Promise<DataSourceOptions[]> {\n const options = await this.load()\n if (!options)\n throw new TypeORMError(\n `No connection options were found in any orm configuration files.`,\n )\n\n return options\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads all connection options from a configuration file.\n *\n * todo: get in count NODE_ENV somehow\n */\n protected async load(): Promise<DataSourceOptions[] | undefined> {\n let connectionOptions:\n | DataSourceOptions\n | DataSourceOptions[]\n | undefined = undefined\n\n const fileFormats = [\"js\", \"mjs\", \"cjs\", \"ts\", \"mts\", \"cts\", \"json\"]\n\n // Detect if baseFilePath contains file extension\n const possibleExtension = path.extname(this.baseFilePath)\n const fileExtension = fileFormats.find(\n (extension) => `.${extension}` === possibleExtension,\n )\n\n // try to find any of following configuration formats\n const foundFileFormat =\n fileExtension ??\n fileFormats.find((format) => {\n return PlatformTools.fileExist(this.baseFilePath + \".\" + format)\n })\n\n // Determine config file name\n const configFile = fileExtension\n ? this.baseFilePath\n : this.baseFilePath + \".\" + foundFileFormat\n\n // try to find connection options from any of available sources of configuration\n if (\n foundFileFormat === \"js\" ||\n foundFileFormat === \"mjs\" ||\n foundFileFormat === \"cjs\" ||\n foundFileFormat === \"ts\" ||\n foundFileFormat === \"mts\" ||\n foundFileFormat === \"cts\"\n ) {\n try {\n const [importOrRequireResult, moduleSystem] =\n await importOrRequireFile(configFile)\n const configModule = await importOrRequireResult\n\n if (\n moduleSystem === \"esm\" ||\n (configModule &&\n \"__esModule\" in configModule &&\n \"default\" in configModule)\n ) {\n connectionOptions = configModule.default\n } else {\n connectionOptions = configModule\n }\n } catch (err) {\n PlatformTools.logWarn(\n `Warning: Could not load ormconfig file at ${configFile}`,\n err instanceof Error ? err.message : String(err),\n )\n }\n } else if (foundFileFormat === \"json\") {\n try {\n connectionOptions = require(configFile)\n } catch (err) {\n PlatformTools.logWarn(\n `Warning: Could not load ormconfig file at ${configFile}`,\n err instanceof Error ? err.message : String(err),\n )\n }\n }\n\n // normalize and return connection options\n if (connectionOptions) {\n return this.normalizeConnectionOptions(connectionOptions)\n }\n\n return undefined\n }\n\n /**\n * Normalize connection options.\n *\n * @param connectionOptions\n */\n protected normalizeConnectionOptions(\n connectionOptions: DataSourceOptions | DataSourceOptions[],\n ): DataSourceOptions[] {\n if (!Array.isArray(connectionOptions))\n connectionOptions = [connectionOptions]\n\n connectionOptions.forEach((options) => {\n options.baseDirectory = this.baseDirectory\n if (options.entities) {\n const entities = (options.entities as any[]).map((entity) => {\n if (typeof entity === \"string\" && !entity.startsWith(\"/\")) {\n return this.baseDirectory + \"/\" + entity\n }\n\n return entity\n })\n Object.assign(connectionOptions, { entities: entities })\n }\n if (options.subscribers) {\n const subscribers = (options.subscribers as any[]).map(\n (subscriber) => {\n if (\n typeof subscriber === \"string\" &&\n !subscriber.startsWith(\"/\")\n ) {\n return this.baseDirectory + \"/\" + subscriber\n }\n\n return subscriber\n },\n )\n Object.assign(connectionOptions, { subscribers: subscribers })\n }\n if (options.migrations) {\n const migrations = (options.migrations as any[]).map(\n (migration) => {\n if (\n typeof migration === \"string\" &&\n !migration.startsWith(\"/\")\n ) {\n return this.baseDirectory + \"/\" + migration\n }\n\n return migration\n },\n )\n Object.assign(connectionOptions, { migrations: migrations })\n }\n\n // make database path file in sqlite relative to package.json\n if (options.type === \"better-sqlite3\") {\n if (\n typeof options.database === \"string\" &&\n !isAbsolute(options.database) &&\n !options.database.startsWith(\"/\") && // unix absolute\n options.database.slice(1, 3) !== \":\\\\\" && // windows absolute\n options.database !== \":memory:\"\n ) {\n Object.assign(options, {\n database: this.baseDirectory + \"/\" + options.database,\n })\n }\n }\n })\n\n return connectionOptions\n }\n\n /**\n * Gets directory where configuration file should be located and configuration file name.\n */\n protected get baseFilePath(): string {\n return path.resolve(this.baseDirectory, this.baseConfigName)\n }\n\n /**\n * Gets directory where configuration file should be located.\n */\n protected get baseDirectory(): string {\n return this.options?.root ?? process.cwd()\n }\n\n /**\n * Gets configuration file name.\n */\n protected get baseConfigName(): string {\n return this.options?.configName ?? \"ormconfig\"\n }\n}\n"]}
|
|
@@ -210,7 +210,7 @@ export declare class DataSource {
|
|
|
210
210
|
* @returns a raw response from the database client
|
|
211
211
|
* @see {@link https://typeorm.io/data-source-api | Official docs} for examples.
|
|
212
212
|
*/
|
|
213
|
-
query<T = any>(query: string, parameters?: any[], queryRunner?: QueryRunner): Promise<T>;
|
|
213
|
+
query<T = any>(query: string, parameters?: any[] | ObjectLiteral, queryRunner?: QueryRunner): Promise<T>;
|
|
214
214
|
/**
|
|
215
215
|
* Tagged template function that executes raw SQL query and returns raw database results.
|
|
216
216
|
* Template expressions are automatically transformed into database parameters.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataSource.js","sourceRoot":"../build/browser/src/","sources":["data-source/DataSource.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Driver } from \"../driver/Driver\"\nimport { registerQueryBuilders } from \"../query-builder\"\nimport type { Repository } from \"../repository/Repository\"\nimport type { EntitySubscriberInterface } from \"../subscriber/EntitySubscriberInterface\"\nimport type { EntityTarget } from \"../common/EntityTarget\"\nimport type { EntityManager } from \"../entity-manager/EntityManager\"\nimport { DefaultNamingStrategy } from \"../naming-strategy/DefaultNamingStrategy\"\nimport {\n CannotConnectAlreadyConnectedError,\n CannotExecuteNotConnectedError,\n EntityMetadataNotFoundError,\n QueryRunnerProviderAlreadyReleasedError,\n TypeORMError,\n} from \"../error\"\nimport type { TreeRepository } from \"../repository/TreeRepository\"\nimport type { NamingStrategyInterface } from \"../naming-strategy/NamingStrategyInterface\"\nimport type { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport type { Logger } from \"../logger/Logger\"\nimport type { MigrationInterface } from \"../migration/MigrationInterface\"\nimport { MigrationExecutor } from \"../migration/MigrationExecutor\"\nimport type { Migration } from \"../migration/Migration\"\nimport type { MongoRepository } from \"../repository/MongoRepository\"\nimport type { MongoEntityManager } from \"../entity-manager/MongoEntityManager\"\nimport { EntityMetadataValidator } from \"../metadata-builder/EntityMetadataValidator\"\nimport type { DataSourceOptions } from \"./DataSourceOptions\"\nimport { EntityManagerFactory } from \"../entity-manager/EntityManagerFactory\"\nimport { DriverFactory } from \"../driver/DriverFactory\"\nimport { ConnectionMetadataBuilder } from \"../connection/ConnectionMetadataBuilder\"\nimport type { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { LoggerFactory } from \"../logger/LoggerFactory\"\nimport { QueryResultCacheFactory } from \"../cache/QueryResultCacheFactory\"\nimport type { QueryResultCache } from \"../cache/QueryResultCache\"\nimport type { SqljsEntityManager } from \"../entity-manager/SqljsEntityManager\"\nimport { RelationLoader } from \"../query-builder/RelationLoader\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport type { IsolationLevel } from \"../driver/types/IsolationLevel\"\nimport { validateIsolationLevel } from \"../driver/validate-isolation-level\"\nimport type { ReplicationMode } from \"../driver/types/ReplicationMode\"\nimport { RelationIdLoader } from \"../query-builder/RelationIdLoader\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\nimport type { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { buildSqlTag } from \"../util/SqlTagUtils\"\n\nregisterQueryBuilders()\n\n/**\n * DataSource is a pre-defined connection configuration to a specific database.\n * You can have multiple data sources connected (with multiple connections in it),\n * connected to multiple databases in your application.\n *\n * Before, it was called `Connection`, but now `Connection` is deprecated\n * because `Connection` isn't the best name for what it's actually is.\n */\nexport class DataSource {\n readonly \"@instanceof\" = Symbol.for(\"DataSource\")\n\n // -------------------------------------------------------------------------\n // Public Readonly Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource options.\n */\n readonly options: DataSourceOptions\n\n /**\n * Indicates if the DataSource is initialized or not.\n */\n readonly isInitialized: boolean\n\n /**\n * Database driver used by this connection.\n */\n driver: Driver\n\n /**\n * EntityManager of this connection.\n */\n readonly manager: EntityManager\n\n /**\n * Naming strategy used in the connection.\n */\n namingStrategy: NamingStrategyInterface\n\n /**\n * Name for the metadata table\n */\n readonly metadataTableName: string\n\n /**\n * Logger used to log orm events.\n */\n logger: Logger\n\n /**\n * Migration instances that are registered for this connection.\n */\n readonly migrations: MigrationInterface[] = []\n\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n readonly subscribers: EntitySubscriberInterface<any>[] = []\n\n /**\n * All entity metadatas that are registered for this connection.\n */\n readonly entityMetadatas: EntityMetadata[] = []\n\n /**\n * All entity metadatas that are registered for this connection.\n * This is a copy of #.entityMetadatas property -> used for more performant searches.\n */\n readonly entityMetadatasMap = new Map<EntityTarget<any>, EntityMetadata>()\n\n /**\n * Used to work with query result cache.\n */\n queryResultCache?: QueryResultCache\n\n /**\n * Used to load relations and work with lazy relations.\n */\n readonly relationLoader: RelationLoader\n\n readonly relationIdLoader: RelationIdLoader\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(options: DataSourceOptions) {\n registerQueryBuilders()\n this.options = options\n this.logger = new LoggerFactory().create(\n this.options.logger,\n this.options.logging,\n )\n this.driver = new DriverFactory().create(this)\n this.manager = this.createEntityManager()\n this.namingStrategy =\n options.namingStrategy ?? new DefaultNamingStrategy()\n this.metadataTableName = options.metadataTableName ?? \"typeorm_metadata\"\n this.queryResultCache = options.cache\n ? new QueryResultCacheFactory(this).create()\n : undefined\n this.relationLoader = new RelationLoader(this)\n this.relationIdLoader = new RelationIdLoader(this)\n this.isInitialized = false\n }\n\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n *\n * @returns the mongodb entity manager\n */\n get mongoManager(): MongoEntityManager {\n if (!InstanceChecker.isMongoEntityManager(this.manager))\n throw new TypeORMError(\n `MongoEntityManager is only available for MongoDB databases.`,\n )\n\n return this.manager as MongoEntityManager\n }\n\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n *\n * @returns an sqljs specific Entity Manager\n */\n get sqljsManager(): SqljsEntityManager {\n if (!InstanceChecker.isSqljsEntityManager(this.manager))\n throw new TypeORMError(\n `SqljsEntityManager is only available for Sqljs databases.`,\n )\n\n return this.manager\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Updates current connection options with provided options.\n *\n * @param options\n */\n setOptions(options: Partial<DataSourceOptions>): this {\n Object.assign(this.options, options)\n\n if (options.logger || options.logging) {\n this.logger = new LoggerFactory().create(\n options.logger ?? this.options.logger,\n options.logging ?? this.options.logging,\n )\n }\n\n if (options.namingStrategy) {\n this.namingStrategy = options.namingStrategy\n }\n\n if (options.cache) {\n this.queryResultCache = new QueryResultCacheFactory(this).create()\n }\n\n // todo: we must update the database in the driver as well, if it was set by setOptions method\n // in the future we need to refactor the code and remove \"database\" from the driver, and instead\n // use database (and options) from a single place - data source.\n if (options.database) {\n this.driver.database = DriverUtils.buildDriverOptions(\n this.options,\n ).database\n }\n\n // todo: need to take a look if we need to update schema and other \"poor\" properties\n\n return this\n }\n\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n async initialize(): Promise<this> {\n if (this.isInitialized) throw new CannotConnectAlreadyConnectedError()\n\n // validate isolationLevel before connecting\n validateIsolationLevel(\n this.driver.supportedIsolationLevels,\n this.options.isolationLevel,\n )\n\n // connect to the database via its driver\n await this.driver.connect()\n\n // connect to the cache-specific database if cache is enabled\n if (this.queryResultCache) await this.queryResultCache.connect()\n\n // set connected status for the current connection\n ObjectUtils.assign(this, { isInitialized: true })\n\n try {\n // build all metadatas registered in the current connection\n await this.buildMetadatas()\n\n await this.driver.afterConnect()\n\n // if option is set - drop schema once connection is done\n if (this.options.dropSchema) await this.dropDatabase()\n\n // if option is set - automatically synchronize a schema\n if (this.options.migrationsRun)\n await this.runMigrations({\n transaction: this.options.migrationsTransactionMode,\n })\n\n // if option is set - automatically synchronize a schema\n if (this.options.synchronize) await this.synchronize()\n } catch (error) {\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n await this.destroy()\n throw error\n }\n\n return this\n }\n\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n async destroy(): Promise<void> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n await this.driver.disconnect()\n\n // disconnect from the cache-specific database if cache was enabled\n if (this.queryResultCache) await this.queryResultCache.disconnect()\n\n ObjectUtils.assign(this, { isInitialized: false })\n }\n\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n async synchronize(dropBeforeSync: boolean = false): Promise<void> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n if (dropBeforeSync) await this.dropDatabase()\n\n const schemaBuilder = this.driver.createSchemaBuilder()\n await schemaBuilder.build()\n }\n\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n async dropDatabase(): Promise<void> {\n const queryRunner = this.createQueryRunner()\n try {\n if (\n this.driver.options.type === \"mssql\" ||\n DriverUtils.isMySQLFamily(this.driver) ||\n this.driver.options.type === \"aurora-mysql\" ||\n DriverUtils.isSQLiteFamily(this.driver)\n ) {\n const databases: string[] = []\n this.entityMetadatas.forEach((metadata) => {\n if (\n metadata.database &&\n databases.indexOf(metadata.database) === -1\n )\n databases.push(metadata.database)\n })\n if (databases.length === 0 && this.driver.database) {\n databases.push(this.driver.database)\n }\n\n if (databases.length === 0) {\n await queryRunner.clearDatabase()\n } else {\n for (const database of databases) {\n await queryRunner.clearDatabase(database)\n }\n }\n } else {\n await queryRunner.clearDatabase()\n }\n } finally {\n await queryRunner.release()\n }\n }\n\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n *\n * @param options\n * @param options.transaction\n * @param options.fake\n */\n async runMigrations(options?: {\n transaction?: \"all\" | \"none\" | \"each\"\n fake?: boolean\n }): Promise<Migration[]> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n const migrationExecutor = new MigrationExecutor(this)\n migrationExecutor.transaction =\n options?.transaction ??\n this.options?.migrationsTransactionMode ??\n \"all\"\n migrationExecutor.fake = options?.fake ?? false\n\n const successMigrations =\n await migrationExecutor.executePendingMigrations()\n return successMigrations\n }\n\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n *\n * @param options\n * @param options.transaction\n * @param options.fake\n */\n async undoLastMigration(options?: {\n transaction?: \"all\" | \"none\" | \"each\"\n fake?: boolean\n }): Promise<void> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n const migrationExecutor = new MigrationExecutor(this)\n migrationExecutor.transaction = options?.transaction ?? \"all\"\n migrationExecutor.fake = options?.fake ?? false\n\n await migrationExecutor.undoLastMigration()\n }\n\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n async showMigrations(): Promise<boolean> {\n if (!this.isInitialized) {\n throw new CannotExecuteNotConnectedError()\n }\n const migrationExecutor = new MigrationExecutor(this)\n return await migrationExecutor.showMigrations()\n }\n\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n *\n * @param target\n */\n hasMetadata(target: EntityTarget<any>): boolean {\n return !!this.findMetadata(target)\n }\n\n /**\n * Gets entity metadata for the given entity class or schema name.\n *\n * @param target\n */\n getMetadata(target: EntityTarget<any>): EntityMetadata {\n const metadata = this.findMetadata(target)\n if (!metadata) throw new EntityMetadataNotFoundError(target)\n\n return metadata\n }\n\n /**\n * Gets repository for the given entity.\n *\n * @param target\n */\n getRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): Repository<Entity> {\n return this.manager.getRepository(target)\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with `@Tree` decorator.\n *\n * @param target\n */\n getTreeRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): TreeRepository<Entity> {\n return this.manager.getTreeRepository(target)\n }\n\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n *\n * @param target\n */\n getMongoRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): MongoRepository<Entity> {\n if (!(this.driver.options.type === \"mongodb\"))\n throw new TypeORMError(\n `You can use getMongoRepository only for MongoDB connections.`,\n )\n\n return this.manager.getRepository(target) as any\n }\n\n /**\n * Wraps given function execution (and all operations made there) into a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n async transaction<T>(\n isolationLevel: IsolationLevel,\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n async transaction<T>(\n isolationOrRunInTransaction:\n | IsolationLevel\n | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>,\n ): Promise<any> {\n return this.manager.transaction(\n isolationOrRunInTransaction as any,\n runInTransactionParam as any,\n )\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n *\n * @param query\n * @param parameters\n * @param queryRunner\n * @returns a raw response from the database client\n * @see {@link https://typeorm.io/data-source-api | Official docs} for examples.\n */\n async query<T = any>(\n query: string,\n parameters?: any[],\n queryRunner?: QueryRunner,\n ): Promise<T> {\n if (InstanceChecker.isMongoEntityManager(this.manager))\n throw new TypeORMError(`Queries aren't supported by MongoDB.`)\n\n if (queryRunner?.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError()\n\n const usedQueryRunner = queryRunner ?? this.createQueryRunner()\n\n try {\n return await usedQueryRunner.query(query, parameters) // await is needed here because we are using finally\n } finally {\n if (!queryRunner) await usedQueryRunner.release()\n }\n }\n\n /**\n * Tagged template function that executes raw SQL query and returns raw database results.\n * Template expressions are automatically transformed into database parameters.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n * Note: Don't call this as a regular function, it is meant to be used with backticks to tag a template literal.\n *\n * @example\n * dataSource.sql`SELECT * FROM table_name WHERE id = ${id}`\n *\n * @param strings\n * @param values\n * @returns a raw response from the database client\n */\n async sql<T = any>(\n strings: TemplateStringsArray,\n ...values: unknown[]\n ): Promise<T> {\n const { query, parameters } = buildSqlTag({\n driver: this.driver,\n strings: strings,\n expressions: values,\n })\n\n return await this.query(query, parameters)\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n alias: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n *\n * @param entityOrRunner\n * @param alias\n * @param queryRunner\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityOrRunner?: EntityTarget<Entity> | QueryRunner,\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n if (InstanceChecker.isMongoEntityManager(this.manager))\n throw new TypeORMError(`Query Builder is not supported by MongoDB.`)\n\n if (alias) {\n alias = DriverUtils.buildAlias(this.driver, undefined, alias)\n const metadata = this.getMetadata(\n entityOrRunner as EntityTarget<Entity>,\n )\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias)\n } else {\n return new SelectQueryBuilder(\n this,\n entityOrRunner as QueryRunner | undefined,\n )\n }\n }\n\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n *\n * @param mode\n */\n createQueryRunner(mode: ReplicationMode = \"master\"): QueryRunner {\n const queryRunner = this.driver.createQueryRunner(mode)\n const manager = this.createEntityManager(queryRunner)\n Object.assign(queryRunner, { manager: manager })\n return queryRunner\n }\n\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n *\n * @param entityTarget\n * @param relationPropertyPath\n */\n getManyToManyMetadata(\n entityTarget: EntityTarget<any>,\n relationPropertyPath: string,\n ) {\n const relationMetadata =\n this.getMetadata(entityTarget).findRelationWithPropertyPath(\n relationPropertyPath,\n )\n if (!relationMetadata)\n throw new TypeORMError(\n `Relation \"${relationPropertyPath}\" was not found in ${entityTarget} entity.`,\n )\n if (!relationMetadata.isManyToMany)\n throw new TypeORMError(\n `Relation \"${entityTarget}#${relationPropertyPath}\" does not have a many-to-many relationship.` +\n `You can use this method only on many-to-many relations.`,\n )\n\n return relationMetadata.junctionEntityMetadata\n }\n\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n *\n * @param queryRunner\n */\n createEntityManager(queryRunner?: QueryRunner): EntityManager {\n return new EntityManagerFactory().create(this, queryRunner)\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n *\n * @param target\n */\n protected findMetadata(\n target: EntityTarget<any>,\n ): EntityMetadata | undefined {\n const metadataFromMap = this.entityMetadatasMap.get(target)\n if (metadataFromMap) return metadataFromMap\n\n for (const [_, metadata] of this.entityMetadatasMap) {\n if (\n InstanceChecker.isEntitySchema(target) &&\n metadata.name === target.options.name\n ) {\n return metadata\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n if (metadata.tablePath === target) {\n return metadata\n }\n } else {\n if (\n metadata.name === target ||\n metadata.tableName === target\n ) {\n return metadata\n }\n }\n }\n if (\n ObjectUtils.isObjectWithName(target) &&\n typeof target.name === \"string\"\n ) {\n if (target.name.indexOf(\".\") !== -1) {\n if (metadata.tablePath === target.name) {\n return metadata\n }\n } else {\n if (\n metadata.name === target.name ||\n metadata.tableName === target.name\n ) {\n return metadata\n }\n }\n }\n }\n\n return undefined\n }\n\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n protected async buildMetadatas(): Promise<void> {\n const connectionMetadataBuilder = new ConnectionMetadataBuilder(this)\n const entityMetadataValidator = new EntityMetadataValidator()\n\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n const flattenedSubscribers = ObjectUtils.mixedListToArray(\n this.options.subscribers ?? [],\n )\n const subscribers =\n await connectionMetadataBuilder.buildSubscribers(\n flattenedSubscribers,\n )\n ObjectUtils.assign(this, { subscribers: subscribers })\n\n // build entity metadatas\n const flattenedEntities = ObjectUtils.mixedListToArray(\n this.options.entities ?? [],\n )\n const entityMetadatas =\n await connectionMetadataBuilder.buildEntityMetadatas(\n flattenedEntities,\n )\n ObjectUtils.assign(this, {\n entityMetadatas: entityMetadatas,\n entityMetadatasMap: new Map(\n entityMetadatas.map((metadata) => [metadata.target, metadata]),\n ),\n })\n\n // create migration instances\n const flattenedMigrations = ObjectUtils.mixedListToArray(\n this.options.migrations ?? [],\n )\n const migrations =\n await connectionMetadataBuilder.buildMigrations(flattenedMigrations)\n ObjectUtils.assign(this, { migrations: migrations })\n\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(\n this.entityMetadatas.filter(\n (metadata) => metadata.tableType !== \"view\",\n ),\n this.driver,\n )\n\n // set current data source to the entities\n for (const entityMetadata of entityMetadatas) {\n if (\n InstanceChecker.isBaseEntityConstructor(entityMetadata.target)\n ) {\n entityMetadata.target.useDataSource(this)\n }\n }\n }\n\n /**\n * Get the replication mode SELECT queries should use for this datasource by default\n */\n defaultReplicationModeForReads(): ReplicationMode {\n if (\n \"replication\" in this.driver.options &&\n this.driver.options.replication\n ) {\n const value = (\n this.driver.options.replication as {\n defaultMode?: ReplicationMode\n }\n ).defaultMode\n if (value) {\n return value\n }\n }\n return \"slave\"\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DataSource.js","sourceRoot":"../build/browser/src/","sources":["data-source/DataSource.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Driver } from \"../driver/Driver\"\nimport { registerQueryBuilders } from \"../query-builder\"\nimport type { Repository } from \"../repository/Repository\"\nimport type { EntitySubscriberInterface } from \"../subscriber/EntitySubscriberInterface\"\nimport type { EntityTarget } from \"../common/EntityTarget\"\nimport type { EntityManager } from \"../entity-manager/EntityManager\"\nimport { DefaultNamingStrategy } from \"../naming-strategy/DefaultNamingStrategy\"\nimport {\n CannotConnectAlreadyConnectedError,\n CannotExecuteNotConnectedError,\n EntityMetadataNotFoundError,\n QueryRunnerProviderAlreadyReleasedError,\n TypeORMError,\n} from \"../error\"\nimport type { TreeRepository } from \"../repository/TreeRepository\"\nimport type { NamingStrategyInterface } from \"../naming-strategy/NamingStrategyInterface\"\nimport type { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport type { Logger } from \"../logger/Logger\"\nimport type { MigrationInterface } from \"../migration/MigrationInterface\"\nimport { MigrationExecutor } from \"../migration/MigrationExecutor\"\nimport type { Migration } from \"../migration/Migration\"\nimport type { MongoRepository } from \"../repository/MongoRepository\"\nimport type { MongoEntityManager } from \"../entity-manager/MongoEntityManager\"\nimport { EntityMetadataValidator } from \"../metadata-builder/EntityMetadataValidator\"\nimport type { DataSourceOptions } from \"./DataSourceOptions\"\nimport { EntityManagerFactory } from \"../entity-manager/EntityManagerFactory\"\nimport { DriverFactory } from \"../driver/DriverFactory\"\nimport { ConnectionMetadataBuilder } from \"../connection/ConnectionMetadataBuilder\"\nimport type { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { LoggerFactory } from \"../logger/LoggerFactory\"\nimport { QueryResultCacheFactory } from \"../cache/QueryResultCacheFactory\"\nimport type { QueryResultCache } from \"../cache/QueryResultCache\"\nimport type { SqljsEntityManager } from \"../entity-manager/SqljsEntityManager\"\nimport { RelationLoader } from \"../query-builder/RelationLoader\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\nimport type { IsolationLevel } from \"../driver/types/IsolationLevel\"\nimport { validateIsolationLevel } from \"../driver/validate-isolation-level\"\nimport type { ReplicationMode } from \"../driver/types/ReplicationMode\"\nimport { RelationIdLoader } from \"../query-builder/RelationIdLoader\"\nimport { DriverUtils } from \"../driver/DriverUtils\"\nimport { InstanceChecker } from \"../util/InstanceChecker\"\nimport type { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { buildSqlTag } from \"../util/SqlTagUtils\"\n\nregisterQueryBuilders()\n\n/**\n * DataSource is a pre-defined connection configuration to a specific database.\n * You can have multiple data sources connected (with multiple connections in it),\n * connected to multiple databases in your application.\n *\n * Before, it was called `Connection`, but now `Connection` is deprecated\n * because `Connection` isn't the best name for what it's actually is.\n */\nexport class DataSource {\n readonly \"@instanceof\" = Symbol.for(\"DataSource\")\n\n // -------------------------------------------------------------------------\n // Public Readonly Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource options.\n */\n readonly options: DataSourceOptions\n\n /**\n * Indicates if the DataSource is initialized or not.\n */\n readonly isInitialized: boolean\n\n /**\n * Database driver used by this connection.\n */\n driver: Driver\n\n /**\n * EntityManager of this connection.\n */\n readonly manager: EntityManager\n\n /**\n * Naming strategy used in the connection.\n */\n namingStrategy: NamingStrategyInterface\n\n /**\n * Name for the metadata table\n */\n readonly metadataTableName: string\n\n /**\n * Logger used to log orm events.\n */\n logger: Logger\n\n /**\n * Migration instances that are registered for this connection.\n */\n readonly migrations: MigrationInterface[] = []\n\n /**\n * Entity subscriber instances that are registered for this connection.\n */\n readonly subscribers: EntitySubscriberInterface<any>[] = []\n\n /**\n * All entity metadatas that are registered for this connection.\n */\n readonly entityMetadatas: EntityMetadata[] = []\n\n /**\n * All entity metadatas that are registered for this connection.\n * This is a copy of #.entityMetadatas property -> used for more performant searches.\n */\n readonly entityMetadatasMap = new Map<EntityTarget<any>, EntityMetadata>()\n\n /**\n * Used to work with query result cache.\n */\n queryResultCache?: QueryResultCache\n\n /**\n * Used to load relations and work with lazy relations.\n */\n readonly relationLoader: RelationLoader\n\n readonly relationIdLoader: RelationIdLoader\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(options: DataSourceOptions) {\n registerQueryBuilders()\n this.options = options\n this.logger = new LoggerFactory().create(\n this.options.logger,\n this.options.logging,\n )\n this.driver = new DriverFactory().create(this)\n this.manager = this.createEntityManager()\n this.namingStrategy =\n options.namingStrategy ?? new DefaultNamingStrategy()\n this.metadataTableName = options.metadataTableName ?? \"typeorm_metadata\"\n this.queryResultCache = options.cache\n ? new QueryResultCacheFactory(this).create()\n : undefined\n this.relationLoader = new RelationLoader(this)\n this.relationIdLoader = new RelationIdLoader(this)\n this.isInitialized = false\n }\n\n // -------------------------------------------------------------------------\n // Public Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Gets the mongodb entity manager that allows to perform mongodb-specific repository operations\n * with any entity in this connection.\n *\n * Available only in mongodb connections.\n *\n * @returns the mongodb entity manager\n */\n get mongoManager(): MongoEntityManager {\n if (!InstanceChecker.isMongoEntityManager(this.manager))\n throw new TypeORMError(\n `MongoEntityManager is only available for MongoDB databases.`,\n )\n\n return this.manager as MongoEntityManager\n }\n\n /**\n * Gets a sql.js specific Entity Manager that allows to perform special load and save operations\n *\n * Available only in connection with the sqljs driver.\n *\n * @returns an sqljs specific Entity Manager\n */\n get sqljsManager(): SqljsEntityManager {\n if (!InstanceChecker.isSqljsEntityManager(this.manager))\n throw new TypeORMError(\n `SqljsEntityManager is only available for Sqljs databases.`,\n )\n\n return this.manager\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n /**\n * Updates current connection options with provided options.\n *\n * @param options\n */\n setOptions(options: Partial<DataSourceOptions>): this {\n Object.assign(this.options, options)\n\n if (options.logger || options.logging) {\n this.logger = new LoggerFactory().create(\n options.logger ?? this.options.logger,\n options.logging ?? this.options.logging,\n )\n }\n\n if (options.namingStrategy) {\n this.namingStrategy = options.namingStrategy\n }\n\n if (options.cache) {\n this.queryResultCache = new QueryResultCacheFactory(this).create()\n }\n\n // todo: we must update the database in the driver as well, if it was set by setOptions method\n // in the future we need to refactor the code and remove \"database\" from the driver, and instead\n // use database (and options) from a single place - data source.\n if (options.database) {\n this.driver.database = DriverUtils.buildDriverOptions(\n this.options,\n ).database\n }\n\n // todo: need to take a look if we need to update schema and other \"poor\" properties\n\n return this\n }\n\n /**\n * Performs connection to the database.\n * This method should be called once on application bootstrap.\n * This method not necessarily creates database connection (depend on database type),\n * but it also can setup a connection pool with database to use.\n */\n async initialize(): Promise<this> {\n if (this.isInitialized) throw new CannotConnectAlreadyConnectedError()\n\n // validate isolationLevel before connecting\n validateIsolationLevel(\n this.driver.supportedIsolationLevels,\n this.options.isolationLevel,\n )\n\n // connect to the database via its driver\n await this.driver.connect()\n\n // connect to the cache-specific database if cache is enabled\n if (this.queryResultCache) await this.queryResultCache.connect()\n\n // set connected status for the current connection\n ObjectUtils.assign(this, { isInitialized: true })\n\n try {\n // build all metadatas registered in the current connection\n await this.buildMetadatas()\n\n await this.driver.afterConnect()\n\n // if option is set - drop schema once connection is done\n if (this.options.dropSchema) await this.dropDatabase()\n\n // if option is set - automatically synchronize a schema\n if (this.options.migrationsRun)\n await this.runMigrations({\n transaction: this.options.migrationsTransactionMode,\n })\n\n // if option is set - automatically synchronize a schema\n if (this.options.synchronize) await this.synchronize()\n } catch (error) {\n // if for some reason build metadata fail (for example validation error during entity metadata check)\n // connection needs to be closed\n await this.destroy()\n throw error\n }\n\n return this\n }\n\n /**\n * Closes connection with the database.\n * Once connection is closed, you cannot use repositories or perform any operations except opening connection again.\n */\n async destroy(): Promise<void> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n await this.driver.disconnect()\n\n // disconnect from the cache-specific database if cache was enabled\n if (this.queryResultCache) await this.queryResultCache.disconnect()\n\n ObjectUtils.assign(this, { isInitialized: false })\n }\n\n /**\n * Creates database schema for all entities registered in this connection.\n * Can be used only after connection to the database is established.\n *\n * @param dropBeforeSync If set to true then it drops the database with all its tables and data\n */\n async synchronize(dropBeforeSync: boolean = false): Promise<void> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n if (dropBeforeSync) await this.dropDatabase()\n\n const schemaBuilder = this.driver.createSchemaBuilder()\n await schemaBuilder.build()\n }\n\n /**\n * Drops the database and all its data.\n * Be careful with this method on production since this method will erase all your database tables and their data.\n * Can be used only after connection to the database is established.\n */\n // TODO rename\n async dropDatabase(): Promise<void> {\n const queryRunner = this.createQueryRunner()\n try {\n if (\n this.driver.options.type === \"mssql\" ||\n DriverUtils.isMySQLFamily(this.driver) ||\n this.driver.options.type === \"aurora-mysql\" ||\n DriverUtils.isSQLiteFamily(this.driver)\n ) {\n const databases: string[] = []\n this.entityMetadatas.forEach((metadata) => {\n if (\n metadata.database &&\n databases.indexOf(metadata.database) === -1\n )\n databases.push(metadata.database)\n })\n if (databases.length === 0 && this.driver.database) {\n databases.push(this.driver.database)\n }\n\n if (databases.length === 0) {\n await queryRunner.clearDatabase()\n } else {\n for (const database of databases) {\n await queryRunner.clearDatabase(database)\n }\n }\n } else {\n await queryRunner.clearDatabase()\n }\n } finally {\n await queryRunner.release()\n }\n }\n\n /**\n * Runs all pending migrations.\n * Can be used only after connection to the database is established.\n *\n * @param options\n * @param options.transaction\n * @param options.fake\n */\n async runMigrations(options?: {\n transaction?: \"all\" | \"none\" | \"each\"\n fake?: boolean\n }): Promise<Migration[]> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n const migrationExecutor = new MigrationExecutor(this)\n migrationExecutor.transaction =\n options?.transaction ??\n this.options?.migrationsTransactionMode ??\n \"all\"\n migrationExecutor.fake = options?.fake ?? false\n\n const successMigrations =\n await migrationExecutor.executePendingMigrations()\n return successMigrations\n }\n\n /**\n * Reverts last executed migration.\n * Can be used only after connection to the database is established.\n *\n * @param options\n * @param options.transaction\n * @param options.fake\n */\n async undoLastMigration(options?: {\n transaction?: \"all\" | \"none\" | \"each\"\n fake?: boolean\n }): Promise<void> {\n if (!this.isInitialized) throw new CannotExecuteNotConnectedError()\n\n const migrationExecutor = new MigrationExecutor(this)\n migrationExecutor.transaction = options?.transaction ?? \"all\"\n migrationExecutor.fake = options?.fake ?? false\n\n await migrationExecutor.undoLastMigration()\n }\n\n /**\n * Lists all migrations and whether they have been run.\n * Returns true if there are pending migrations\n */\n async showMigrations(): Promise<boolean> {\n if (!this.isInitialized) {\n throw new CannotExecuteNotConnectedError()\n }\n const migrationExecutor = new MigrationExecutor(this)\n return await migrationExecutor.showMigrations()\n }\n\n /**\n * Checks if entity metadata exist for the given entity class, target name or table name.\n *\n * @param target\n */\n hasMetadata(target: EntityTarget<any>): boolean {\n return !!this.findMetadata(target)\n }\n\n /**\n * Gets entity metadata for the given entity class or schema name.\n *\n * @param target\n */\n getMetadata(target: EntityTarget<any>): EntityMetadata {\n const metadata = this.findMetadata(target)\n if (!metadata) throw new EntityMetadataNotFoundError(target)\n\n return metadata\n }\n\n /**\n * Gets repository for the given entity.\n *\n * @param target\n */\n getRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): Repository<Entity> {\n return this.manager.getRepository(target)\n }\n\n /**\n * Gets tree repository for the given entity class or name.\n * Only tree-type entities can have a TreeRepository, like ones decorated with `@Tree` decorator.\n *\n * @param target\n */\n getTreeRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): TreeRepository<Entity> {\n return this.manager.getTreeRepository(target)\n }\n\n /**\n * Gets mongodb-specific repository for the given entity class or name.\n * Works only if connection is mongodb-specific.\n *\n * @param target\n */\n getMongoRepository<Entity extends ObjectLiteral>(\n target: EntityTarget<Entity>,\n ): MongoRepository<Entity> {\n if (!(this.driver.options.type === \"mongodb\"))\n throw new TypeORMError(\n `You can use getMongoRepository only for MongoDB connections.`,\n )\n\n return this.manager.getRepository(target) as any\n }\n\n /**\n * Wraps given function execution (and all operations made there) into a transaction.\n * All database operations must be executed using provided entity manager.\n */\n async transaction<T>(\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n async transaction<T>(\n isolationLevel: IsolationLevel,\n runInTransaction: (entityManager: EntityManager) => Promise<T>,\n ): Promise<T>\n async transaction<T>(\n isolationOrRunInTransaction:\n | IsolationLevel\n | ((entityManager: EntityManager) => Promise<T>),\n runInTransactionParam?: (entityManager: EntityManager) => Promise<T>,\n ): Promise<any> {\n return this.manager.transaction(\n isolationOrRunInTransaction as any,\n runInTransactionParam as any,\n )\n }\n\n /**\n * Executes raw SQL query and returns raw database results.\n *\n * @param query\n * @param parameters\n * @param queryRunner\n * @returns a raw response from the database client\n * @see {@link https://typeorm.io/data-source-api | Official docs} for examples.\n */\n async query<T = any>(\n query: string,\n parameters?: any[] | ObjectLiteral,\n queryRunner?: QueryRunner,\n ): Promise<T> {\n if (InstanceChecker.isMongoEntityManager(this.manager))\n throw new TypeORMError(`Queries aren't supported by MongoDB.`)\n\n if (queryRunner?.isReleased)\n throw new QueryRunnerProviderAlreadyReleasedError()\n\n const usedQueryRunner = queryRunner ?? this.createQueryRunner()\n\n try {\n return await usedQueryRunner.query(query, parameters) // await is needed here because we are using finally\n } finally {\n if (!queryRunner) await usedQueryRunner.release()\n }\n }\n\n /**\n * Tagged template function that executes raw SQL query and returns raw database results.\n * Template expressions are automatically transformed into database parameters.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n * Note: Don't call this as a regular function, it is meant to be used with backticks to tag a template literal.\n *\n * @example\n * dataSource.sql`SELECT * FROM table_name WHERE id = ${id}`\n *\n * @param strings\n * @param values\n * @returns a raw response from the database client\n */\n async sql<T = any>(\n strings: TemplateStringsArray,\n ...values: unknown[]\n ): Promise<T> {\n const { query, parameters } = buildSqlTag({\n driver: this.driver,\n strings: strings,\n expressions: values,\n })\n\n return await this.query(query, parameters)\n }\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityClass: EntityTarget<Entity>,\n alias: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n *\n * @param entityOrRunner\n * @param alias\n * @param queryRunner\n */\n createQueryBuilder<Entity extends ObjectLiteral>(\n entityOrRunner?: EntityTarget<Entity> | QueryRunner,\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n if (InstanceChecker.isMongoEntityManager(this.manager))\n throw new TypeORMError(`Query Builder is not supported by MongoDB.`)\n\n if (alias) {\n alias = DriverUtils.buildAlias(this.driver, undefined, alias)\n const metadata = this.getMetadata(\n entityOrRunner as EntityTarget<Entity>,\n )\n return new SelectQueryBuilder(this, queryRunner)\n .select(alias)\n .from(metadata.target, alias)\n } else {\n return new SelectQueryBuilder(\n this,\n entityOrRunner as QueryRunner | undefined,\n )\n }\n }\n\n /**\n * Creates a query runner used for perform queries on a single database connection.\n * Using query runners you can control your queries to execute using single database connection and\n * manually control your database transaction.\n *\n * Mode is used in replication mode and indicates whatever you want to connect\n * to master database or any of slave databases.\n * If you perform writes you must use master database,\n * if you perform reads you can use slave databases.\n *\n * @param mode\n */\n createQueryRunner(mode: ReplicationMode = \"master\"): QueryRunner {\n const queryRunner = this.driver.createQueryRunner(mode)\n const manager = this.createEntityManager(queryRunner)\n Object.assign(queryRunner, { manager: manager })\n return queryRunner\n }\n\n /**\n * Gets entity metadata of the junction table (many-to-many table).\n *\n * @param entityTarget\n * @param relationPropertyPath\n */\n getManyToManyMetadata(\n entityTarget: EntityTarget<any>,\n relationPropertyPath: string,\n ) {\n const relationMetadata =\n this.getMetadata(entityTarget).findRelationWithPropertyPath(\n relationPropertyPath,\n )\n if (!relationMetadata)\n throw new TypeORMError(\n `Relation \"${relationPropertyPath}\" was not found in ${entityTarget} entity.`,\n )\n if (!relationMetadata.isManyToMany)\n throw new TypeORMError(\n `Relation \"${entityTarget}#${relationPropertyPath}\" does not have a many-to-many relationship.` +\n `You can use this method only on many-to-many relations.`,\n )\n\n return relationMetadata.junctionEntityMetadata\n }\n\n /**\n * Creates an Entity Manager for the current connection with the help of the EntityManagerFactory.\n *\n * @param queryRunner\n */\n createEntityManager(queryRunner?: QueryRunner): EntityManager {\n return new EntityManagerFactory().create(this, queryRunner)\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds exist entity metadata by the given entity class, target name or table name.\n *\n * @param target\n */\n protected findMetadata(\n target: EntityTarget<any>,\n ): EntityMetadata | undefined {\n const metadataFromMap = this.entityMetadatasMap.get(target)\n if (metadataFromMap) return metadataFromMap\n\n for (const [_, metadata] of this.entityMetadatasMap) {\n if (\n InstanceChecker.isEntitySchema(target) &&\n metadata.name === target.options.name\n ) {\n return metadata\n }\n if (typeof target === \"string\") {\n if (target.indexOf(\".\") !== -1) {\n if (metadata.tablePath === target) {\n return metadata\n }\n } else {\n if (\n metadata.name === target ||\n metadata.tableName === target\n ) {\n return metadata\n }\n }\n }\n if (\n ObjectUtils.isObjectWithName(target) &&\n typeof target.name === \"string\"\n ) {\n if (target.name.indexOf(\".\") !== -1) {\n if (metadata.tablePath === target.name) {\n return metadata\n }\n } else {\n if (\n metadata.name === target.name ||\n metadata.tableName === target.name\n ) {\n return metadata\n }\n }\n }\n }\n\n return undefined\n }\n\n /**\n * Builds metadatas for all registered classes inside this connection.\n */\n protected async buildMetadatas(): Promise<void> {\n const connectionMetadataBuilder = new ConnectionMetadataBuilder(this)\n const entityMetadataValidator = new EntityMetadataValidator()\n\n // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)\n const flattenedSubscribers = ObjectUtils.mixedListToArray(\n this.options.subscribers ?? [],\n )\n const subscribers =\n await connectionMetadataBuilder.buildSubscribers(\n flattenedSubscribers,\n )\n ObjectUtils.assign(this, { subscribers: subscribers })\n\n // build entity metadatas\n const flattenedEntities = ObjectUtils.mixedListToArray(\n this.options.entities ?? [],\n )\n const entityMetadatas =\n await connectionMetadataBuilder.buildEntityMetadatas(\n flattenedEntities,\n )\n ObjectUtils.assign(this, {\n entityMetadatas: entityMetadatas,\n entityMetadatasMap: new Map(\n entityMetadatas.map((metadata) => [metadata.target, metadata]),\n ),\n })\n\n // create migration instances\n const flattenedMigrations = ObjectUtils.mixedListToArray(\n this.options.migrations ?? [],\n )\n const migrations =\n await connectionMetadataBuilder.buildMigrations(flattenedMigrations)\n ObjectUtils.assign(this, { migrations: migrations })\n\n // validate all created entity metadatas to make sure user created entities are valid and correct\n entityMetadataValidator.validateMany(\n this.entityMetadatas.filter(\n (metadata) => metadata.tableType !== \"view\",\n ),\n this.driver,\n )\n\n // set current data source to the entities\n for (const entityMetadata of entityMetadatas) {\n if (\n InstanceChecker.isBaseEntityConstructor(entityMetadata.target)\n ) {\n entityMetadata.target.useDataSource(this)\n }\n }\n }\n\n /**\n * Get the replication mode SELECT queries should use for this datasource by default\n */\n defaultReplicationModeForReads(): ReplicationMode {\n if (\n \"replication\" in this.driver.options &&\n this.driver.options.replication\n ) {\n const value = (\n this.driver.options.replication as {\n defaultMode?: ReplicationMode\n }\n ).defaultMode\n if (value) {\n return value\n }\n }\n return \"slave\"\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JoinColumnOptions.js","sourceRoot":"../build/browser/src/","sources":["decorator/options/JoinColumnOptions.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Describes join column options.\n */\nexport interface JoinColumnOptions {\n /**\n * Name of the column.\n */\n name?: string\n\n /**\n * Name of the column in the entity to which this column is referenced.\n */\n referencedColumnName?: string
|
|
1
|
+
{"version":3,"file":"JoinColumnOptions.js","sourceRoot":"../build/browser/src/","sources":["decorator/options/JoinColumnOptions.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Describes join column options.\n */\nexport interface JoinColumnOptions {\n /**\n * Name of the column.\n */\n name?: string\n\n /**\n * Name of the column in the entity to which this column is referenced.\n */\n referencedColumnName?: string\n\n /**\n * Name of the foreign key constraint.\n */\n foreignKeyConstraintName?: string\n}\n"]}
|
|
@@ -129,27 +129,18 @@ class DriverUtils {
|
|
|
129
129
|
static parseConnectionUrl(url) {
|
|
130
130
|
const type = url.split(":")[0];
|
|
131
131
|
const firstSlashes = url.indexOf("//");
|
|
132
|
-
const preBase = url.
|
|
132
|
+
const preBase = url.slice(firstSlashes + 2);
|
|
133
133
|
const secondSlash = preBase.indexOf("/");
|
|
134
|
-
const base = secondSlash
|
|
135
|
-
let afterBase = secondSlash
|
|
134
|
+
const base = secondSlash === -1 ? preBase : preBase.slice(0, secondSlash);
|
|
135
|
+
let afterBase = secondSlash === -1 ? undefined : preBase.slice(secondSlash + 1);
|
|
136
136
|
// remove mongodb query params
|
|
137
137
|
if (afterBase && afterBase.indexOf("?") !== -1) {
|
|
138
|
-
afterBase = afterBase.
|
|
138
|
+
afterBase = afterBase.slice(0, afterBase.indexOf("?"));
|
|
139
139
|
}
|
|
140
140
|
// normalize empty string to undefined so downstream ?? works correctly
|
|
141
141
|
if (afterBase === "")
|
|
142
142
|
afterBase = undefined;
|
|
143
|
-
const
|
|
144
|
-
const usernameAndPassword = base.substring(0, lastAtSign);
|
|
145
|
-
const hostAndPort = base.substring(lastAtSign + 1);
|
|
146
|
-
let username = usernameAndPassword;
|
|
147
|
-
let password = "";
|
|
148
|
-
const firstColon = usernameAndPassword.indexOf(":");
|
|
149
|
-
if (firstColon !== -1) {
|
|
150
|
-
username = usernameAndPassword.substring(0, firstColon);
|
|
151
|
-
password = usernameAndPassword.substring(firstColon + 1);
|
|
152
|
-
}
|
|
143
|
+
const { username, password, hostAndPort } = this.parseCredentials(base);
|
|
153
144
|
const [host, port] = hostAndPort.split(":");
|
|
154
145
|
return {
|
|
155
146
|
type: type,
|
|
@@ -168,10 +159,10 @@ class DriverUtils {
|
|
|
168
159
|
static parseMongoDBConnectionUrl(url) {
|
|
169
160
|
const type = url.split(":")[0];
|
|
170
161
|
const firstSlashes = url.indexOf("//");
|
|
171
|
-
const preBase = url.
|
|
162
|
+
const preBase = url.slice(firstSlashes + 2);
|
|
172
163
|
const secondSlash = preBase.indexOf("/");
|
|
173
|
-
const base = secondSlash
|
|
174
|
-
let afterBase = secondSlash
|
|
164
|
+
const base = secondSlash === -1 ? preBase : preBase.slice(0, secondSlash);
|
|
165
|
+
let afterBase = secondSlash === -1 ? undefined : preBase.slice(secondSlash + 1);
|
|
175
166
|
// normalize empty string to undefined so downstream ?? works correctly
|
|
176
167
|
if (afterBase === "")
|
|
177
168
|
afterBase = undefined;
|
|
@@ -183,7 +174,7 @@ class DriverUtils {
|
|
|
183
174
|
const optionsObject = {};
|
|
184
175
|
if (afterBase && afterBase.indexOf("?") !== -1) {
|
|
185
176
|
// split params
|
|
186
|
-
afterQuestionMark = afterBase.
|
|
177
|
+
afterQuestionMark = afterBase.slice(afterBase.indexOf("?") + 1);
|
|
187
178
|
const optionsList = afterQuestionMark.split("&");
|
|
188
179
|
let optionKey;
|
|
189
180
|
let optionValue;
|
|
@@ -195,18 +186,9 @@ class DriverUtils {
|
|
|
195
186
|
});
|
|
196
187
|
// specific replicaSet value to set options about hostReplicaSet
|
|
197
188
|
replicaSet = optionsObject["replicaSet"];
|
|
198
|
-
afterBase = afterBase.
|
|
199
|
-
}
|
|
200
|
-
const lastAtSign = base.lastIndexOf("@");
|
|
201
|
-
const usernameAndPassword = base.substring(0, lastAtSign);
|
|
202
|
-
const hostAndPort = base.substring(lastAtSign + 1);
|
|
203
|
-
let username = usernameAndPassword;
|
|
204
|
-
let password = "";
|
|
205
|
-
const firstColon = usernameAndPassword.indexOf(":");
|
|
206
|
-
if (firstColon !== -1) {
|
|
207
|
-
username = usernameAndPassword.substring(0, firstColon);
|
|
208
|
-
password = usernameAndPassword.substring(firstColon + 1);
|
|
189
|
+
afterBase = afterBase.slice(0, afterBase.indexOf("?"));
|
|
209
190
|
}
|
|
191
|
+
const { username, password, hostAndPort } = this.parseCredentials(base);
|
|
210
192
|
// If replicaSet have value set It as hostlist, If not set like standalone host
|
|
211
193
|
if (replicaSet) {
|
|
212
194
|
hostReplicaSet = hostAndPort;
|
|
@@ -230,6 +212,22 @@ class DriverUtils {
|
|
|
230
212
|
}
|
|
231
213
|
return connectionUrl;
|
|
232
214
|
}
|
|
215
|
+
static parseCredentials(base) {
|
|
216
|
+
const lastAtSign = base.lastIndexOf("@");
|
|
217
|
+
if (lastAtSign === -1) {
|
|
218
|
+
return { username: "", password: "", hostAndPort: base };
|
|
219
|
+
}
|
|
220
|
+
const hostAndPort = base.slice(lastAtSign + 1);
|
|
221
|
+
const credentials = base.slice(0, lastAtSign);
|
|
222
|
+
const colonIndex = credentials.indexOf(":");
|
|
223
|
+
return colonIndex === -1
|
|
224
|
+
? { username: credentials, password: "", hostAndPort }
|
|
225
|
+
: {
|
|
226
|
+
username: credentials.slice(0, colonIndex),
|
|
227
|
+
password: credentials.slice(colonIndex + 1),
|
|
228
|
+
hostAndPort,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
233
231
|
}
|
|
234
232
|
exports.DriverUtils = DriverUtils;
|
|
235
233
|
//# sourceMappingURL=DriverUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DriverUtils.js","sourceRoot":"../build/browser/src/","sources":["driver/DriverUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Driver } from \"./Driver\"\nimport { hash, shorten } from \"../util/StringUtils\"\nimport { VersionUtils } from \"../util/VersionUtils\"\n\n/**\n * Common driver utility functions.\n */\nexport class DriverUtils {\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns true if given driver is SQLite-based driver.\n *\n * @param driver\n */\n static isSQLiteFamily(driver: Driver): boolean {\n return [\n \"better-sqlite3\",\n \"capacitor\",\n \"cordova\",\n \"expo\",\n \"nativescript\",\n \"react-native\",\n \"sqljs\",\n ].includes(driver.options.type)\n }\n\n /**\n * Returns true if given driver is MySQL-based driver.\n *\n * @param driver\n */\n static isMySQLFamily(driver: Driver): boolean {\n return [\"mysql\", \"mariadb\"].includes(driver.options.type)\n }\n\n static isReleaseVersionOrGreater(driver: Driver, version: string): boolean {\n return VersionUtils.isGreaterOrEqual(driver.version, version)\n }\n\n static isPostgresFamily(driver: Driver): boolean {\n return [\"postgres\", \"aurora-postgres\", \"cockroachdb\"].includes(\n driver.options.type,\n )\n }\n\n /**\n * Normalizes and builds a new driver options.\n * Extracts settings from connection url and sets to a new options object.\n *\n * @param options\n * @param buildOptions\n * @param buildOptions.useSid\n */\n static buildDriverOptions(\n options: any,\n buildOptions?: { useSid: boolean },\n ): any {\n if (options.url) {\n const urlDriverOptions = this.parseConnectionUrl(options.url) as {\n [key: string]: any\n }\n\n if (\n buildOptions &&\n buildOptions.useSid &&\n urlDriverOptions.database\n ) {\n urlDriverOptions.sid = urlDriverOptions.database\n }\n\n for (const key of Object.keys(urlDriverOptions)) {\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key]\n }\n }\n\n return Object.assign({}, options, urlDriverOptions)\n }\n return Object.assign({}, options)\n }\n\n /**\n * buildDriverOptions for MongodDB only to support replica set\n *\n * @param options\n * @param buildOptions\n * @param buildOptions.useSid\n */\n static buildMongoDBDriverOptions(\n options: any,\n buildOptions?: { useSid: boolean },\n ): any {\n if (options.url) {\n const urlDriverOptions = this.parseMongoDBConnectionUrl(\n options.url,\n ) as { [key: string]: any }\n\n if (\n buildOptions &&\n buildOptions.useSid &&\n urlDriverOptions.database\n ) {\n urlDriverOptions.sid = urlDriverOptions.database\n }\n\n for (const key of Object.keys(urlDriverOptions)) {\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key]\n }\n }\n\n return Object.assign({}, options, urlDriverOptions)\n }\n return Object.assign({}, options)\n }\n\n /**\n * Joins and shortens alias if needed.\n *\n * If the alias length is greater than the limit allowed by the current\n * driver, replaces it with a shortend string, if the shortend string\n * is still too long, it will then hash the alias.\n *\n * @param driver Current `Driver`.\n * @param driver.maxAliasLength\n * @param buildOptions Optional settings.\n * @param alias Alias parts.\n * @returns An alias that is no longer than the divers max alias length.\n */\n static buildAlias(\n { maxAliasLength }: Driver,\n buildOptions: { shorten?: boolean; joiner?: string } | undefined,\n ...alias: string[]\n ): string {\n const joiner = buildOptions?.joiner ?? \"_\"\n\n const newAlias = alias.length === 1 ? alias[0] : alias.join(joiner)\n\n if (\n maxAliasLength &&\n maxAliasLength > 0 &&\n newAlias.length > maxAliasLength\n ) {\n if (buildOptions?.shorten === true) {\n const shortenedAlias = shorten(newAlias)\n if (shortenedAlias.length < maxAliasLength) {\n return shortenedAlias\n }\n }\n\n return hash(newAlias, { length: maxAliasLength })\n }\n\n return newAlias\n }\n\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Extracts connection data from the connection url.\n *\n * @param url\n */\n private static parseConnectionUrl(url: string) {\n const type = url.split(\":\")[0]\n const firstSlashes = url.indexOf(\"//\")\n const preBase = url.substring(firstSlashes + 2)\n const secondSlash = preBase.indexOf(\"/\")\n const base =\n secondSlash !== -1 ? preBase.substring(0, secondSlash) : preBase\n let afterBase =\n secondSlash !== -1 ? preBase.substring(secondSlash + 1) : undefined\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n afterBase = afterBase.substring(0, afterBase.indexOf(\"?\"))\n }\n // normalize empty string to undefined so downstream ?? works correctly\n if (afterBase === \"\") afterBase = undefined\n\n const lastAtSign = base.lastIndexOf(\"@\")\n const usernameAndPassword = base.substring(0, lastAtSign)\n const hostAndPort = base.substring(lastAtSign + 1)\n\n let username = usernameAndPassword\n let password = \"\"\n const firstColon = usernameAndPassword.indexOf(\":\")\n if (firstColon !== -1) {\n username = usernameAndPassword.substring(0, firstColon)\n password = usernameAndPassword.substring(firstColon + 1)\n }\n const [host, port] = hostAndPort.split(\":\")\n\n return {\n type: type,\n host: host,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase ?? undefined,\n }\n }\n\n /**\n * Extracts connection data from the connection url for MongoDB to support replica set.\n *\n * @param url\n */\n private static parseMongoDBConnectionUrl(url: string) {\n const type = url.split(\":\")[0]\n const firstSlashes = url.indexOf(\"//\")\n const preBase = url.substring(firstSlashes + 2)\n const secondSlash = preBase.indexOf(\"/\")\n const base =\n secondSlash !== -1 ? preBase.substring(0, secondSlash) : preBase\n let afterBase =\n secondSlash !== -1 ? preBase.substring(secondSlash + 1) : undefined\n // normalize empty string to undefined so downstream ?? works correctly\n if (afterBase === \"\") afterBase = undefined\n let afterQuestionMark: string\n let host = undefined\n let port = undefined\n let hostReplicaSet = undefined\n let replicaSet = undefined\n\n const optionsObject: any = {}\n\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n // split params\n afterQuestionMark = afterBase.substring(\n afterBase.indexOf(\"?\") + 1,\n afterBase.length,\n )\n\n const optionsList = afterQuestionMark.split(\"&\")\n let optionKey: string\n let optionValue: string\n\n // create optionsObject for merge with connectionUrl object before return\n optionsList.forEach((optionItem) => {\n optionKey = optionItem.split(\"=\")[0]\n optionValue = optionItem.split(\"=\")[1]\n optionsObject[optionKey] = optionValue\n })\n\n // specific replicaSet value to set options about hostReplicaSet\n replicaSet = optionsObject[\"replicaSet\"]\n afterBase = afterBase.substring(0, afterBase.indexOf(\"?\"))\n }\n\n const lastAtSign = base.lastIndexOf(\"@\")\n const usernameAndPassword = base.substring(0, lastAtSign)\n const hostAndPort = base.substring(lastAtSign + 1)\n\n let username = usernameAndPassword\n let password = \"\"\n const firstColon = usernameAndPassword.indexOf(\":\")\n if (firstColon !== -1) {\n username = usernameAndPassword.substring(0, firstColon)\n password = usernameAndPassword.substring(firstColon + 1)\n }\n\n // If replicaSet have value set It as hostlist, If not set like standalone host\n if (replicaSet) {\n hostReplicaSet = hostAndPort\n } else {\n ;[host, port] = hostAndPort.split(\":\")\n }\n\n const connectionUrl: any = {\n type: type,\n host: host,\n hostReplicaSet: hostReplicaSet,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase ?? undefined,\n }\n\n // Loop to set every options in connectionUrl to object\n for (const [key, value] of Object.entries(optionsObject)) {\n connectionUrl[key] = value\n }\n\n return connectionUrl\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DriverUtils.js","sourceRoot":"../build/browser/src/","sources":["driver/DriverUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Driver } from \"./Driver\"\nimport { hash, shorten } from \"../util/StringUtils\"\nimport { VersionUtils } from \"../util/VersionUtils\"\n\n/**\n * Common driver utility functions.\n */\nexport class DriverUtils {\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns true if given driver is SQLite-based driver.\n *\n * @param driver\n */\n static isSQLiteFamily(driver: Driver): boolean {\n return [\n \"better-sqlite3\",\n \"capacitor\",\n \"cordova\",\n \"expo\",\n \"nativescript\",\n \"react-native\",\n \"sqljs\",\n ].includes(driver.options.type)\n }\n\n /**\n * Returns true if given driver is MySQL-based driver.\n *\n * @param driver\n */\n static isMySQLFamily(driver: Driver): boolean {\n return [\"mysql\", \"mariadb\"].includes(driver.options.type)\n }\n\n static isReleaseVersionOrGreater(driver: Driver, version: string): boolean {\n return VersionUtils.isGreaterOrEqual(driver.version, version)\n }\n\n static isPostgresFamily(driver: Driver): boolean {\n return [\"postgres\", \"aurora-postgres\", \"cockroachdb\"].includes(\n driver.options.type,\n )\n }\n\n /**\n * Normalizes and builds a new driver options.\n * Extracts settings from connection url and sets to a new options object.\n *\n * @param options\n * @param buildOptions\n * @param buildOptions.useSid\n */\n static buildDriverOptions(\n options: any,\n buildOptions?: { useSid: boolean },\n ): any {\n if (options.url) {\n const urlDriverOptions = this.parseConnectionUrl(options.url) as {\n [key: string]: any\n }\n\n if (\n buildOptions &&\n buildOptions.useSid &&\n urlDriverOptions.database\n ) {\n urlDriverOptions.sid = urlDriverOptions.database\n }\n\n for (const key of Object.keys(urlDriverOptions)) {\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key]\n }\n }\n\n return Object.assign({}, options, urlDriverOptions)\n }\n return Object.assign({}, options)\n }\n\n /**\n * buildDriverOptions for MongodDB only to support replica set\n *\n * @param options\n * @param buildOptions\n * @param buildOptions.useSid\n */\n static buildMongoDBDriverOptions(\n options: any,\n buildOptions?: { useSid: boolean },\n ): any {\n if (options.url) {\n const urlDriverOptions = this.parseMongoDBConnectionUrl(\n options.url,\n ) as { [key: string]: any }\n\n if (\n buildOptions &&\n buildOptions.useSid &&\n urlDriverOptions.database\n ) {\n urlDriverOptions.sid = urlDriverOptions.database\n }\n\n for (const key of Object.keys(urlDriverOptions)) {\n if (typeof urlDriverOptions[key] === \"undefined\") {\n delete urlDriverOptions[key]\n }\n }\n\n return Object.assign({}, options, urlDriverOptions)\n }\n return Object.assign({}, options)\n }\n\n /**\n * Joins and shortens alias if needed.\n *\n * If the alias length is greater than the limit allowed by the current\n * driver, replaces it with a shortend string, if the shortend string\n * is still too long, it will then hash the alias.\n *\n * @param driver Current `Driver`.\n * @param driver.maxAliasLength\n * @param buildOptions Optional settings.\n * @param alias Alias parts.\n * @returns An alias that is no longer than the divers max alias length.\n */\n static buildAlias(\n { maxAliasLength }: Driver,\n buildOptions: { shorten?: boolean; joiner?: string } | undefined,\n ...alias: string[]\n ): string {\n const joiner = buildOptions?.joiner ?? \"_\"\n\n const newAlias = alias.length === 1 ? alias[0] : alias.join(joiner)\n\n if (\n maxAliasLength &&\n maxAliasLength > 0 &&\n newAlias.length > maxAliasLength\n ) {\n if (buildOptions?.shorten === true) {\n const shortenedAlias = shorten(newAlias)\n if (shortenedAlias.length < maxAliasLength) {\n return shortenedAlias\n }\n }\n\n return hash(newAlias, { length: maxAliasLength })\n }\n\n return newAlias\n }\n\n // -------------------------------------------------------------------------\n // Private Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Extracts connection data from the connection url.\n *\n * @param url\n */\n private static parseConnectionUrl(url: string) {\n const type = url.split(\":\")[0]\n const firstSlashes = url.indexOf(\"//\")\n const preBase = url.slice(firstSlashes + 2)\n const secondSlash = preBase.indexOf(\"/\")\n const base =\n secondSlash === -1 ? preBase : preBase.slice(0, secondSlash)\n let afterBase =\n secondSlash === -1 ? undefined : preBase.slice(secondSlash + 1)\n // remove mongodb query params\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n afterBase = afterBase.slice(0, afterBase.indexOf(\"?\"))\n }\n // normalize empty string to undefined so downstream ?? works correctly\n if (afterBase === \"\") afterBase = undefined\n\n const { username, password, hostAndPort } = this.parseCredentials(base)\n const [host, port] = hostAndPort.split(\":\")\n\n return {\n type: type,\n host: host,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase ?? undefined,\n }\n }\n\n /**\n * Extracts connection data from the connection url for MongoDB to support replica set.\n *\n * @param url\n */\n private static parseMongoDBConnectionUrl(url: string) {\n const type = url.split(\":\")[0]\n const firstSlashes = url.indexOf(\"//\")\n const preBase = url.slice(firstSlashes + 2)\n const secondSlash = preBase.indexOf(\"/\")\n const base =\n secondSlash === -1 ? preBase : preBase.slice(0, secondSlash)\n let afterBase =\n secondSlash === -1 ? undefined : preBase.slice(secondSlash + 1)\n // normalize empty string to undefined so downstream ?? works correctly\n if (afterBase === \"\") afterBase = undefined\n let afterQuestionMark: string\n let host = undefined\n let port = undefined\n let hostReplicaSet = undefined\n let replicaSet = undefined\n\n const optionsObject: any = {}\n\n if (afterBase && afterBase.indexOf(\"?\") !== -1) {\n // split params\n afterQuestionMark = afterBase.slice(afterBase.indexOf(\"?\") + 1)\n\n const optionsList = afterQuestionMark.split(\"&\")\n let optionKey: string\n let optionValue: string\n\n // create optionsObject for merge with connectionUrl object before return\n optionsList.forEach((optionItem) => {\n optionKey = optionItem.split(\"=\")[0]\n optionValue = optionItem.split(\"=\")[1]\n optionsObject[optionKey] = optionValue\n })\n\n // specific replicaSet value to set options about hostReplicaSet\n replicaSet = optionsObject[\"replicaSet\"]\n afterBase = afterBase.slice(0, afterBase.indexOf(\"?\"))\n }\n\n const { username, password, hostAndPort } = this.parseCredentials(base)\n\n // If replicaSet have value set It as hostlist, If not set like standalone host\n if (replicaSet) {\n hostReplicaSet = hostAndPort\n } else {\n ;[host, port] = hostAndPort.split(\":\")\n }\n\n const connectionUrl: any = {\n type: type,\n host: host,\n hostReplicaSet: hostReplicaSet,\n username: decodeURIComponent(username),\n password: decodeURIComponent(password),\n port: port ? parseInt(port) : undefined,\n database: afterBase ?? undefined,\n }\n\n // Loop to set every options in connectionUrl to object\n for (const [key, value] of Object.entries(optionsObject)) {\n connectionUrl[key] = value\n }\n\n return connectionUrl\n }\n\n private static parseCredentials(base: string): {\n username: string\n password: string\n hostAndPort: string\n } {\n const lastAtSign = base.lastIndexOf(\"@\")\n if (lastAtSign === -1) {\n return { username: \"\", password: \"\", hostAndPort: base }\n }\n\n const hostAndPort = base.slice(lastAtSign + 1)\n const credentials = base.slice(0, lastAtSign)\n const colonIndex = credentials.indexOf(\":\")\n\n return colonIndex === -1\n ? { username: credentials, password: \"\", hostAndPort }\n : {\n username: credentials.slice(0, colonIndex),\n password: credentials.slice(colonIndex + 1),\n hostAndPort,\n }\n }\n}\n"]}
|
|
@@ -299,7 +299,7 @@ class AuroraMysqlDriver {
|
|
|
299
299
|
const escapedParameters = [];
|
|
300
300
|
if (!parameters || !Object.keys(parameters).length)
|
|
301
301
|
return [sql, escapedParameters];
|
|
302
|
-
sql = sql.
|
|
302
|
+
sql = sql.replaceAll(/:(\.\.\.)?([A-Za-z0-9_.]+)/g, (full, isArray, key) => {
|
|
303
303
|
if (!parameters.hasOwnProperty(key)) {
|
|
304
304
|
return full;
|
|
305
305
|
}
|
|
@@ -859,8 +859,8 @@ class AuroraMysqlDriver {
|
|
|
859
859
|
typeof databaseValue === "string") {
|
|
860
860
|
// we need to cut out "'" because in mysql we can understand returned value is a string or a function
|
|
861
861
|
// as result compare cannot understand if default is really changed or not
|
|
862
|
-
columnMetadataValue = columnMetadataValue.
|
|
863
|
-
databaseValue = databaseValue.
|
|
862
|
+
columnMetadataValue = columnMetadataValue.replaceAll(/^'+|'+$/g, "");
|
|
863
|
+
databaseValue = databaseValue.replaceAll(/^'+|'+$/g, "");
|
|
864
864
|
}
|
|
865
865
|
return columnMetadataValue === databaseValue;
|
|
866
866
|
}
|
|
@@ -872,7 +872,7 @@ class AuroraMysqlDriver {
|
|
|
872
872
|
escapeComment(comment) {
|
|
873
873
|
if (!comment)
|
|
874
874
|
return comment;
|
|
875
|
-
comment = comment.
|
|
875
|
+
comment = comment.replaceAll("\u0000", ""); // Null bytes aren't allowed in comments
|
|
876
876
|
return comment;
|
|
877
877
|
}
|
|
878
878
|
}
|