taon-typeorm 18.0.24 → 19.0.0
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/assets/shared/shared_folder_info.txt +1 -1
- package/browser/README.md +24 -24
- package/client/README.md +24 -24
- package/index.js.map +1 -1
- package/lib/build-info._auto-generated_.js.map +1 -1
- package/lib/index._auto-generated_.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/typeorm/cache/DbQueryResultCache.js.map +1 -1
- package/lib/typeorm/cache/QueryResultCache.js.map +1 -1
- package/lib/typeorm/cache/QueryResultCacheFactory.js.map +1 -1
- package/lib/typeorm/cache/QueryResultCacheOptions.js.map +1 -1
- package/lib/typeorm/cache/RedisQueryResultCache.js.map +1 -1
- package/lib/typeorm/cli-ts-node-commonjs.js.map +1 -1
- package/lib/typeorm/cli-ts-node-esm.js.map +1 -1
- package/lib/typeorm/cli.js.map +1 -1
- package/lib/typeorm/commands/CacheClearCommand.js.map +1 -1
- package/lib/typeorm/commands/CommandUtils.js.map +1 -1
- package/lib/typeorm/commands/EntityCreateCommand.js.map +1 -1
- package/lib/typeorm/commands/InitCommand.js.map +1 -1
- package/lib/typeorm/commands/MigrationCreateCommand.js.map +1 -1
- package/lib/typeorm/commands/MigrationGenerateCommand.js.map +1 -1
- package/lib/typeorm/commands/MigrationRevertCommand.js.map +1 -1
- package/lib/typeorm/commands/MigrationRunCommand.js.map +1 -1
- package/lib/typeorm/commands/MigrationShowCommand.js.map +1 -1
- package/lib/typeorm/commands/QueryCommand.js.map +1 -1
- package/lib/typeorm/commands/SchemaDropCommand.js.map +1 -1
- package/lib/typeorm/commands/SchemaLogCommand.js.map +1 -1
- package/lib/typeorm/commands/SchemaSyncCommand.js.map +1 -1
- package/lib/typeorm/commands/SubscriberCreateCommand.js.map +1 -1
- package/lib/typeorm/commands/VersionCommand.js.map +1 -1
- package/lib/typeorm/common/DeepPartial.js.map +1 -1
- package/lib/typeorm/common/EntityTarget.js.map +1 -1
- package/lib/typeorm/common/MixedList.js.map +1 -1
- package/lib/typeorm/common/NonNever.js.map +1 -1
- package/lib/typeorm/common/ObjectLiteral.js.map +1 -1
- package/lib/typeorm/common/ObjectType.js.map +1 -1
- package/lib/typeorm/common/RelationType.js.map +1 -1
- package/lib/typeorm/connection/BaseConnectionOptions.js.map +1 -1
- package/lib/typeorm/connection/Connection.js.map +1 -1
- package/lib/typeorm/connection/ConnectionManager.js.map +1 -1
- package/lib/typeorm/connection/ConnectionMetadataBuilder.js.map +1 -1
- package/lib/typeorm/connection/ConnectionOptions.js.map +1 -1
- package/lib/typeorm/connection/ConnectionOptionsReader.js.map +1 -1
- package/lib/typeorm/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
- package/lib/typeorm/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
- package/lib/typeorm/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
- package/lib/typeorm/constants.js.map +1 -1
- package/lib/typeorm/container.js.map +1 -1
- package/lib/typeorm/data-source/BaseDataSourceOptions.js.map +1 -1
- package/lib/typeorm/data-source/DataSource.js.map +1 -1
- package/lib/typeorm/data-source/DataSourceOptions.js.map +1 -1
- package/lib/typeorm/data-source/index.js.map +1 -1
- package/lib/typeorm/decorator/Check.js.map +1 -1
- package/lib/typeorm/decorator/EntityRepository.js.map +1 -1
- package/lib/typeorm/decorator/Exclusion.js.map +1 -1
- package/lib/typeorm/decorator/Generated.js.map +1 -1
- package/lib/typeorm/decorator/Index.js.map +1 -1
- package/lib/typeorm/decorator/Unique.js.map +1 -1
- package/lib/typeorm/decorator/columns/Column.js.map +1 -1
- package/lib/typeorm/decorator/columns/CreateDateColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/DeleteDateColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/ObjectIdColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/PrimaryColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/UpdateDateColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/VersionColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/ViewColumn.js.map +1 -1
- package/lib/typeorm/decorator/columns/VirtualColumn.js.map +1 -1
- package/lib/typeorm/decorator/entity/ChildEntity.js.map +1 -1
- package/lib/typeorm/decorator/entity/Entity.js.map +1 -1
- package/lib/typeorm/decorator/entity/TableInheritance.js.map +1 -1
- package/lib/typeorm/decorator/entity-view/ViewEntity.js.map +1 -1
- package/lib/typeorm/decorator/listeners/AfterInsert.js.map +1 -1
- package/lib/typeorm/decorator/listeners/AfterLoad.js.map +1 -1
- package/lib/typeorm/decorator/listeners/AfterRecover.js.map +1 -1
- package/lib/typeorm/decorator/listeners/AfterRemove.js.map +1 -1
- package/lib/typeorm/decorator/listeners/AfterSoftRemove.js.map +1 -1
- package/lib/typeorm/decorator/listeners/AfterUpdate.js.map +1 -1
- package/lib/typeorm/decorator/listeners/BeforeInsert.js.map +1 -1
- package/lib/typeorm/decorator/listeners/BeforeRecover.js.map +1 -1
- package/lib/typeorm/decorator/listeners/BeforeRemove.js.map +1 -1
- package/lib/typeorm/decorator/listeners/BeforeSoftRemove.js.map +1 -1
- package/lib/typeorm/decorator/listeners/BeforeUpdate.js.map +1 -1
- package/lib/typeorm/decorator/listeners/EventSubscriber.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnCommonOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnEmbeddedOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnEnumOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnHstoreOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnNumericOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnWithLengthOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ColumnWithWidthOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/EntityOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/IndexOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/JoinColumnOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/JoinTableOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/RelationOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/SpatialColumnOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/TransactionOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/UniqueOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ValueTransformer.js.map +1 -1
- package/lib/typeorm/decorator/options/ViewColumnOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/ViewEntityOptions.js.map +1 -1
- package/lib/typeorm/decorator/options/VirtualColumnOptions.js.map +1 -1
- package/lib/typeorm/decorator/relations/JoinColumn.js.map +1 -1
- package/lib/typeorm/decorator/relations/JoinTable.js.map +1 -1
- package/lib/typeorm/decorator/relations/ManyToMany.js.map +1 -1
- package/lib/typeorm/decorator/relations/ManyToOne.js.map +1 -1
- package/lib/typeorm/decorator/relations/OneToMany.js.map +1 -1
- package/lib/typeorm/decorator/relations/OneToOne.js.map +1 -1
- package/lib/typeorm/decorator/relations/RelationCount.js.map +1 -1
- package/lib/typeorm/decorator/relations/RelationId.js.map +1 -1
- package/lib/typeorm/decorator/tree/Tree.js.map +1 -1
- package/lib/typeorm/decorator/tree/TreeChildren.js.map +1 -1
- package/lib/typeorm/decorator/tree/TreeLevelColumn.js.map +1 -1
- package/lib/typeorm/decorator/tree/TreeParent.js.map +1 -1
- package/lib/typeorm/driver/Driver.js.map +1 -1
- package/lib/typeorm/driver/DriverFactory.js.map +1 -1
- package/lib/typeorm/driver/DriverUtils.js.map +1 -1
- package/lib/typeorm/driver/Query.js.map +1 -1
- package/lib/typeorm/driver/SqlInMemory.js.map +1 -1
- package/lib/typeorm/driver/aurora-mysql/AuroraMysqlConnection.js.map +1 -1
- package/lib/typeorm/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/aurora-mysql/AuroraMysqlConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/lib/typeorm/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/aurora-postgres/AuroraPostgresConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
- package/lib/typeorm/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
- package/lib/typeorm/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
- package/lib/typeorm/driver/capacitor/CapacitorConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/capacitor/CapacitorDriver.js.map +1 -1
- package/lib/typeorm/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/cockroachdb/CockroachDriver.js.map +1 -1
- package/lib/typeorm/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/cordova/CordovaConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/cordova/CordovaDriver.js.map +1 -1
- package/lib/typeorm/driver/cordova/CordovaQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/expo/ExpoConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/expo/ExpoDriver.js.map +1 -1
- package/lib/typeorm/driver/expo/ExpoQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/mongodb/MongoConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/mongodb/MongoDriver.js.map +1 -1
- package/lib/typeorm/driver/mongodb/MongoQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/mongodb/typings.js.map +1 -1
- package/lib/typeorm/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/mysql/MysqlConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/mysql/MysqlDriver.js.map +1 -1
- package/lib/typeorm/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/nativescript/NativescriptDriver.js.map +1 -1
- package/lib/typeorm/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/oracle/OracleConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/oracle/OracleConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/oracle/OracleDriver.js.map +1 -1
- package/lib/typeorm/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/postgres/PostgresConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/postgres/PostgresDriver.js.map +1 -1
- package/lib/typeorm/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/react-native/ReactNativeDriver.js.map +1 -1
- package/lib/typeorm/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/sap/SapConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/sap/SapConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/sap/SapDriver.js.map +1 -1
- package/lib/typeorm/driver/sap/SapQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/spanner/SpannerDriver.js.map +1 -1
- package/lib/typeorm/driver/spanner/SpannerQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/sqlite/SqliteDriver.js.map +1 -1
- package/lib/typeorm/driver/sqlite/SqliteQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/sqljs/SqljsConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/sqljs/SqljsDriver.js.map +1 -1
- package/lib/typeorm/driver/sqljs/SqljsQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/MssqlParameter.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/SqlServerConnectionCredentialsOptions.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/SqlServerDriver.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/AzureActiveDirectoryServicePrincipalSecret.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/DefaultAuthentication.js.map +1 -1
- package/lib/typeorm/driver/sqlserver/authentication/NtlmAuthentication.js.map +1 -1
- package/lib/typeorm/driver/types/ColumnTypes.js.map +1 -1
- package/lib/typeorm/driver/types/CteCapabilities.js.map +1 -1
- package/lib/typeorm/driver/types/DataTypeDefaults.js.map +1 -1
- package/lib/typeorm/driver/types/DatabaseType.js.map +1 -1
- package/lib/typeorm/driver/types/IsolationLevel.js.map +1 -1
- package/lib/typeorm/driver/types/MappedColumnTypes.js.map +1 -1
- package/lib/typeorm/driver/types/MetadataTableType.js.map +1 -1
- package/lib/typeorm/driver/types/ReplicationMode.js.map +1 -1
- package/lib/typeorm/driver/types/UpsertType.js.map +1 -1
- package/lib/typeorm/entity-manager/EntityManager.js.map +1 -1
- package/lib/typeorm/entity-manager/EntityManagerFactory.js.map +1 -1
- package/lib/typeorm/entity-manager/MongoEntityManager.js.map +1 -1
- package/lib/typeorm/entity-manager/SqljsEntityManager.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchema.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaCheckOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
- package/lib/typeorm/error/AlreadyHasActiveConnectionError.js.map +1 -1
- package/lib/typeorm/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
- package/lib/typeorm/error/CannotConnectAlreadyConnectedError.js.map +1 -1
- package/lib/typeorm/error/CannotCreateEntityIdMapError.js.map +1 -1
- package/lib/typeorm/error/CannotDetermineEntityError.js.map +1 -1
- package/lib/typeorm/error/CannotExecuteNotConnectedError.js.map +1 -1
- package/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
- package/lib/typeorm/error/CannotReflectMethodParameterTypeError.js.map +1 -1
- package/lib/typeorm/error/CircularRelationsError.js.map +1 -1
- package/lib/typeorm/error/ColumnTypeUndefinedError.js.map +1 -1
- package/lib/typeorm/error/ConnectionIsNotSetError.js.map +1 -1
- package/lib/typeorm/error/ConnectionNotFoundError.js.map +1 -1
- package/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
- package/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
- package/lib/typeorm/error/CustomRepositoryNotFoundError.js.map +1 -1
- package/lib/typeorm/error/DataTypeNotSupportedError.js.map +1 -1
- package/lib/typeorm/error/DriverOptionNotSetError.js.map +1 -1
- package/lib/typeorm/error/DriverPackageNotInstalledError.js.map +1 -1
- package/lib/typeorm/error/EntityMetadataNotFoundError.js.map +1 -1
- package/lib/typeorm/error/EntityNotFoundError.js.map +1 -1
- package/lib/typeorm/error/EntityPropertyNotFoundError.js.map +1 -1
- package/lib/typeorm/error/FindRelationsNotFoundError.js.map +1 -1
- package/lib/typeorm/error/ForbiddenTransactionModeOverrideError.js.map +1 -1
- package/lib/typeorm/error/InitializedRelationError.js.map +1 -1
- package/lib/typeorm/error/InsertValuesMissingError.js.map +1 -1
- package/lib/typeorm/error/LimitOnUpdateNotSupportedError.js.map +1 -1
- package/lib/typeorm/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
- package/lib/typeorm/error/MetadataAlreadyExistsError.js.map +1 -1
- package/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
- package/lib/typeorm/error/MissingDeleteDateColumnError.js.map +1 -1
- package/lib/typeorm/error/MissingDriverError.js.map +1 -1
- package/lib/typeorm/error/MissingJoinColumnError.js.map +1 -1
- package/lib/typeorm/error/MissingJoinTableError.js.map +1 -1
- package/lib/typeorm/error/MissingPrimaryColumnError.js.map +1 -1
- package/lib/typeorm/error/MustBeEntityError.js.map +1 -1
- package/lib/typeorm/error/NamingStrategyNotFoundError.js.map +1 -1
- package/lib/typeorm/error/NestedSetMultipleRootError.js.map +1 -1
- package/lib/typeorm/error/NoConnectionForRepositoryError.js.map +1 -1
- package/lib/typeorm/error/NoConnectionOptionError.js.map +1 -1
- package/lib/typeorm/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
- package/lib/typeorm/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
- package/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
- package/lib/typeorm/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
- package/lib/typeorm/error/OptimisticLockVersionMismatchError.js.map +1 -1
- package/lib/typeorm/error/PersistedEntityNotFoundError.js.map +1 -1
- package/lib/typeorm/error/PessimisticLockTransactionRequiredError.js.map +1 -1
- package/lib/typeorm/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
- package/lib/typeorm/error/QueryFailedError.js.map +1 -1
- package/lib/typeorm/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
- package/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
- package/lib/typeorm/error/RepositoryNotTreeError.js.map +1 -1
- package/lib/typeorm/error/ReturningStatementNotSupportedError.js.map +1 -1
- package/lib/typeorm/error/SubjectRemovedAndUpdatedError.js.map +1 -1
- package/lib/typeorm/error/SubjectWithoutIdentifierError.js.map +1 -1
- package/lib/typeorm/error/TransactionAlreadyStartedError.js.map +1 -1
- package/lib/typeorm/error/TransactionNotStartedError.js.map +1 -1
- package/lib/typeorm/error/TreeRepositoryNotSupportedError.js.map +1 -1
- package/lib/typeorm/error/TypeORMError.js.map +1 -1
- package/lib/typeorm/error/UpdateValuesMissingError.js.map +1 -1
- package/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
- package/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
- package/lib/typeorm/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
- package/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
- package/lib/typeorm/error/index.js.map +1 -1
- package/lib/typeorm/find-options/EqualOperator.js.map +1 -1
- package/lib/typeorm/find-options/FindManyOptions.js.map +1 -1
- package/lib/typeorm/find-options/FindOneOptions.js.map +1 -1
- package/lib/typeorm/find-options/FindOperator.js.map +1 -1
- package/lib/typeorm/find-options/FindOperatorType.js.map +1 -1
- package/lib/typeorm/find-options/FindOptionsOrder.js.map +1 -1
- package/lib/typeorm/find-options/FindOptionsRelations.js.map +1 -1
- package/lib/typeorm/find-options/FindOptionsSelect.js.map +1 -1
- package/lib/typeorm/find-options/FindOptionsUtils.js.map +1 -1
- package/lib/typeorm/find-options/FindOptionsWhere.js.map +1 -1
- package/lib/typeorm/find-options/FindTreeOptions.js.map +1 -1
- package/lib/typeorm/find-options/JoinOptions.js.map +1 -1
- package/lib/typeorm/find-options/OrderByCondition.js.map +1 -1
- package/lib/typeorm/find-options/mongodb/MongoFindManyOptions.js.map +1 -1
- package/lib/typeorm/find-options/mongodb/MongoFindOneOptions.js.map +1 -1
- package/lib/typeorm/find-options/operator/And.js.map +1 -1
- package/lib/typeorm/find-options/operator/Any.js.map +1 -1
- package/lib/typeorm/find-options/operator/ArrayContainedBy.js.map +1 -1
- package/lib/typeorm/find-options/operator/ArrayContains.js.map +1 -1
- package/lib/typeorm/find-options/operator/ArrayOverlap.js.map +1 -1
- package/lib/typeorm/find-options/operator/Between.js.map +1 -1
- package/lib/typeorm/find-options/operator/Equal.js.map +1 -1
- package/lib/typeorm/find-options/operator/ILike.js.map +1 -1
- package/lib/typeorm/find-options/operator/In.js.map +1 -1
- package/lib/typeorm/find-options/operator/IsNull.js.map +1 -1
- package/lib/typeorm/find-options/operator/LessThan.js.map +1 -1
- package/lib/typeorm/find-options/operator/LessThanOrEqual.js.map +1 -1
- package/lib/typeorm/find-options/operator/Like.js.map +1 -1
- package/lib/typeorm/find-options/operator/MoreThan.js.map +1 -1
- package/lib/typeorm/find-options/operator/MoreThanOrEqual.js.map +1 -1
- package/lib/typeorm/find-options/operator/Not.js.map +1 -1
- package/lib/typeorm/find-options/operator/Raw.js.map +1 -1
- package/lib/typeorm/globals.js.map +1 -1
- package/lib/typeorm/index.js.map +1 -1
- package/lib/typeorm/logger/AdvancedConsoleLogger.js.map +1 -1
- package/lib/typeorm/logger/DebugLogger.js.map +1 -1
- package/lib/typeorm/logger/FileLogger.js.map +1 -1
- package/lib/typeorm/logger/Logger.js.map +1 -1
- package/lib/typeorm/logger/LoggerFactory.js.map +1 -1
- package/lib/typeorm/logger/LoggerOptions.js.map +1 -1
- package/lib/typeorm/logger/SimpleConsoleLogger.js.map +1 -1
- package/lib/typeorm/metadata/CheckMetadata.js.map +1 -1
- package/lib/typeorm/metadata/ColumnMetadata.js.map +1 -1
- package/lib/typeorm/metadata/EmbeddedMetadata.js.map +1 -1
- package/lib/typeorm/metadata/EntityListenerMetadata.js.map +1 -1
- package/lib/typeorm/metadata/EntityMetadata.js.map +1 -1
- package/lib/typeorm/metadata/ExclusionMetadata.js.map +1 -1
- package/lib/typeorm/metadata/ForeignKeyMetadata.js.map +1 -1
- package/lib/typeorm/metadata/IndexMetadata.js.map +1 -1
- package/lib/typeorm/metadata/RelationCountMetadata.js.map +1 -1
- package/lib/typeorm/metadata/RelationIdMetadata.js.map +1 -1
- package/lib/typeorm/metadata/RelationMetadata.js.map +1 -1
- package/lib/typeorm/metadata/UniqueMetadata.js.map +1 -1
- package/lib/typeorm/metadata/types/ClosureTreeOptions.js.map +1 -1
- package/lib/typeorm/metadata/types/DeferrableType.js.map +1 -1
- package/lib/typeorm/metadata/types/EventListenerTypes.js.map +1 -1
- package/lib/typeorm/metadata/types/OnDeleteType.js.map +1 -1
- package/lib/typeorm/metadata/types/OnUpdateType.js.map +1 -1
- package/lib/typeorm/metadata/types/PropertyTypeInFunction.js.map +1 -1
- package/lib/typeorm/metadata/types/RelationTypeInFunction.js.map +1 -1
- package/lib/typeorm/metadata/types/RelationTypes.js.map +1 -1
- package/lib/typeorm/metadata/types/TableTypes.js.map +1 -1
- package/lib/typeorm/metadata/types/TreeTypes.js.map +1 -1
- package/lib/typeorm/metadata-args/CheckMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/ColumnMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/EmbeddedMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/EntityListenerMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/ExclusionMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/GeneratedMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/IndexMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/InheritanceMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/JoinTableMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/MetadataArgsStorage.js.map +1 -1
- package/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/RelationCountMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/RelationIdMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/RelationMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/TableMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/TreeMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/UniqueMetadataArgs.js.map +1 -1
- package/lib/typeorm/metadata-args/types/ColumnMode.js.map +1 -1
- package/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
- package/lib/typeorm/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/lib/typeorm/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/lib/typeorm/metadata-builder/MetadataUtils.js.map +1 -1
- package/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/lib/typeorm/migration/Migration.js.map +1 -1
- package/lib/typeorm/migration/MigrationExecutor.js.map +1 -1
- package/lib/typeorm/migration/MigrationInterface.js.map +1 -1
- package/lib/typeorm/naming-strategy/DefaultNamingStrategy.js.map +1 -1
- package/lib/typeorm/naming-strategy/NamingStrategyInterface.js.map +1 -1
- package/lib/typeorm/persistence/EntityPersistExecutor.js.map +1 -1
- package/lib/typeorm/persistence/Subject.js.map +1 -1
- package/lib/typeorm/persistence/SubjectChangeMap.js.map +1 -1
- package/lib/typeorm/persistence/SubjectChangedColumnsComputer.js.map +1 -1
- package/lib/typeorm/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
- package/lib/typeorm/persistence/SubjectExecutor.js.map +1 -1
- package/lib/typeorm/persistence/SubjectTopoligicalSorter.js.map +1 -1
- package/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
- package/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
- package/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
- package/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
- package/lib/typeorm/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
- package/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
- package/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
- package/lib/typeorm/platform/PlatformTools.js.map +1 -1
- package/lib/typeorm/query-builder/Alias.js.map +1 -1
- package/lib/typeorm/query-builder/Brackets.js.map +1 -1
- package/lib/typeorm/query-builder/DeleteQueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/InsertOrUpdateOptions.js.map +1 -1
- package/lib/typeorm/query-builder/InsertQueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/JoinAttribute.js.map +1 -1
- package/lib/typeorm/query-builder/JoinOptions.js.map +1 -1
- package/lib/typeorm/query-builder/NotBrackets.js.map +1 -1
- package/lib/typeorm/query-builder/QueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/QueryBuilderCte.js.map +1 -1
- package/lib/typeorm/query-builder/QueryBuilderUtils.js.map +1 -1
- package/lib/typeorm/query-builder/QueryExpressionMap.js.map +1 -1
- package/lib/typeorm/query-builder/QueryPartialEntity.js.map +1 -1
- package/lib/typeorm/query-builder/RelationIdLoader.js.map +1 -1
- package/lib/typeorm/query-builder/RelationLoader.js.map +1 -1
- package/lib/typeorm/query-builder/RelationQueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/RelationRemover.js.map +1 -1
- package/lib/typeorm/query-builder/RelationUpdater.js.map +1 -1
- package/lib/typeorm/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
- package/lib/typeorm/query-builder/SelectQuery.js.map +1 -1
- package/lib/typeorm/query-builder/SelectQueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/SelectQueryBuilderOption.js.map +1 -1
- package/lib/typeorm/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/UpdateQueryBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/WhereClause.js.map +1 -1
- package/lib/typeorm/query-builder/WhereExpressionBuilder.js.map +1 -1
- package/lib/typeorm/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
- package/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.js.map +1 -1
- package/lib/typeorm/query-builder/relation-count/RelationCountLoader.js.map +1 -1
- package/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js.map +1 -1
- package/lib/typeorm/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
- package/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.js.map +1 -1
- package/lib/typeorm/query-builder/relation-id/RelationIdLoader.js.map +1 -1
- package/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js.map +1 -1
- package/lib/typeorm/query-builder/result/DeleteResult.js.map +1 -1
- package/lib/typeorm/query-builder/result/InsertResult.js.map +1 -1
- package/lib/typeorm/query-builder/result/UpdateResult.js.map +1 -1
- package/lib/typeorm/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
- package/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
- package/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
- package/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
- package/lib/typeorm/query-runner/BaseQueryRunner.js.map +1 -1
- package/lib/typeorm/query-runner/QueryLock.js.map +1 -1
- package/lib/typeorm/query-runner/QueryResult.js.map +1 -1
- package/lib/typeorm/query-runner/QueryRunner.js.map +1 -1
- package/lib/typeorm/repository/AbstractRepository.js.map +1 -1
- package/lib/typeorm/repository/BaseEntity.js.map +1 -1
- package/lib/typeorm/repository/EntityId.js.map +1 -1
- package/lib/typeorm/repository/FindTreesOptions.js.map +1 -1
- package/lib/typeorm/repository/MongoRepository.js.map +1 -1
- package/lib/typeorm/repository/RemoveOptions.js.map +1 -1
- package/lib/typeorm/repository/Repository.js.map +1 -1
- package/lib/typeorm/repository/SaveOptions.js.map +1 -1
- package/lib/typeorm/repository/TreeRepository.js.map +1 -1
- package/lib/typeorm/repository/UpsertOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/MongoSchemaBuilder.js.map +1 -1
- package/lib/typeorm/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
- package/lib/typeorm/schema-builder/SchemaBuilder.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableCheckOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableExclusionOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableIndexOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/TableUniqueOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/options/ViewOptions.js.map +1 -1
- package/lib/typeorm/schema-builder/table/Table.js.map +1 -1
- package/lib/typeorm/schema-builder/table/TableCheck.js.map +1 -1
- package/lib/typeorm/schema-builder/table/TableColumn.js.map +1 -1
- package/lib/typeorm/schema-builder/table/TableExclusion.js.map +1 -1
- package/lib/typeorm/schema-builder/table/TableForeignKey.js.map +1 -1
- package/lib/typeorm/schema-builder/table/TableIndex.js.map +1 -1
- package/lib/typeorm/schema-builder/table/TableUnique.js.map +1 -1
- package/lib/typeorm/schema-builder/util/TableUtils.js.map +1 -1
- package/lib/typeorm/schema-builder/util/ViewUtils.js.map +1 -1
- package/lib/typeorm/schema-builder/view/View.js.map +1 -1
- package/lib/typeorm/subscriber/Broadcaster.js.map +1 -1
- package/lib/typeorm/subscriber/BroadcasterResult.js.map +1 -1
- package/lib/typeorm/subscriber/EntitySubscriberInterface.js.map +1 -1
- package/lib/typeorm/subscriber/event/InsertEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/LoadEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/RecoverEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/RemoveEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/SoftRemoveEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/TransactionCommitEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/TransactionRollbackEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/TransactionStartEvent.js.map +1 -1
- package/lib/typeorm/subscriber/event/UpdateEvent.js.map +1 -1
- package/lib/typeorm/util/ApplyValueTransformers.js.map +1 -1
- package/lib/typeorm/util/DateUtils.js.map +1 -1
- package/lib/typeorm/util/DepGraph.js.map +1 -1
- package/lib/typeorm/util/DirectoryExportedClassesLoader.js.map +1 -1
- package/lib/typeorm/util/ImportUtils.js.map +1 -1
- package/lib/typeorm/util/InstanceChecker.js.map +1 -1
- package/lib/typeorm/util/ObjectUtils.js.map +1 -1
- package/lib/typeorm/util/OrmUtils.js.map +1 -1
- package/lib/typeorm/util/PathUtils.js.map +1 -1
- package/lib/typeorm/util/RandomGenerator.js.map +1 -1
- package/lib/typeorm/util/StringUtils.js.map +1 -1
- package/lib/typeorm/util/TreeRepositoryUtils.js.map +1 -1
- package/lib/typeorm/util/VersionUtils.js.map +1 -1
- package/lib/typeorm/util/escapeRegExp.js.map +1 -1
- package/migrations/index.js.map +1 -1
- package/migrations/migrations_index._auto-generated_.js.map +1 -1
- package/package.json +1 -1
- package/tmp-environment.json +3 -3
- package/websql/README.md +24 -24
- package/browser/esm2022/lib/index.mjs +0 -4
- package/browser/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
- package/browser/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
- package/browser/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
- package/browser/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
- package/browser/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
- package/browser/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
- package/browser/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
- package/browser/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
- package/browser/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
- package/browser/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
- package/browser/esm2022/lib/typeorm/constants.mjs +0 -4
- package/browser/esm2022/lib/typeorm/container.mjs +0 -57
- package/browser/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
- package/browser/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
- package/browser/esm2022/lib/typeorm/data-source/index.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
- package/browser/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
- package/browser/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
- package/browser/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
- package/browser/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
- package/browser/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
- package/browser/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
- package/browser/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
- package/browser/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
- package/browser/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
- package/browser/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
- package/browser/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
- package/browser/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
- package/browser/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
- package/browser/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
- package/browser/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
- package/browser/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
- package/browser/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
- package/browser/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
- package/browser/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
- package/browser/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
- package/browser/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
- package/browser/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
- package/browser/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
- package/browser/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
- package/browser/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
- package/browser/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
- package/browser/esm2022/lib/typeorm/driver/Query.mjs +0 -13
- package/browser/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
- package/browser/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
- package/browser/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
- package/browser/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
- package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
- package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
- package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
- package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
- package/browser/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
- package/browser/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
- package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
- package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
- package/browser/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
- package/browser/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
- package/browser/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
- package/browser/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
- package/browser/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
- package/browser/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
- package/browser/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
- package/browser/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
- package/browser/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
- package/browser/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
- package/browser/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
- package/browser/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
- package/browser/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
- package/browser/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
- package/browser/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
- package/browser/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
- package/browser/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
- package/browser/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
- package/browser/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/index.mjs +0 -63
- package/browser/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
- package/browser/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
- package/browser/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
- package/browser/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
- package/browser/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
- package/browser/esm2022/lib/typeorm/globals.mjs +0 -165
- package/browser/esm2022/lib/typeorm/index.mjs +0 -157
- package/browser/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
- package/browser/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
- package/browser/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
- package/browser/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
- package/browser/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
- package/browser/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
- package/browser/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
- package/browser/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
- package/browser/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
- package/browser/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
- package/browser/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
- package/browser/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
- package/browser/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
- package/browser/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
- package/browser/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
- package/browser/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
- package/browser/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
- package/browser/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
- package/browser/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
- package/browser/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
- package/browser/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
- package/browser/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
- package/browser/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
- package/browser/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
- package/browser/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
- package/browser/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
- package/browser/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
- package/browser/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
- package/browser/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
- package/browser/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
- package/browser/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
- package/browser/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
- package/browser/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
- package/browser/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
- package/browser/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
- package/browser/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
- package/browser/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
- package/browser/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
- package/browser/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
- package/browser/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
- package/browser/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
- package/browser/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -346
- package/browser/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
- package/browser/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
- package/browser/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
- package/browser/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
- package/browser/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
- package/browser/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
- package/browser/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
- package/browser/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
- package/browser/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
- package/browser/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
- package/browser/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
- package/browser/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
- package/browser/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
- package/browser/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
- package/browser/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
- package/browser/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
- package/browser/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
- package/browser/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
- package/browser/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
- package/browser/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
- package/browser/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
- package/browser/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
- package/browser/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
- package/browser/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
- package/browser/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
- package/browser/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
- package/browser/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
- package/browser/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
- package/browser/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
- package/browser/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
- package/browser/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
- package/browser/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
- package/browser/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
- package/browser/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
- package/browser/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
- package/browser/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
- package/browser/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
- package/browser/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
- package/browser/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
- package/browser/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
- package/browser/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
- package/browser/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
- package/browser/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
- package/browser/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
- package/browser/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
- package/browser/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
- package/browser/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
- package/browser/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
- package/browser/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
- package/browser/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
- package/browser/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
- package/browser/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
- package/browser/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
- package/browser/esm2022/public-api.mjs +0 -2
- package/browser/esm2022/taon-typeorm.mjs +0 -5
- package/client/esm2022/lib/index.mjs +0 -4
- package/client/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
- package/client/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
- package/client/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
- package/client/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
- package/client/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
- package/client/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
- package/client/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
- package/client/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
- package/client/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
- package/client/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
- package/client/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
- package/client/esm2022/lib/typeorm/constants.mjs +0 -4
- package/client/esm2022/lib/typeorm/container.mjs +0 -57
- package/client/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
- package/client/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
- package/client/esm2022/lib/typeorm/data-source/index.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
- package/client/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
- package/client/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
- package/client/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
- package/client/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
- package/client/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
- package/client/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
- package/client/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
- package/client/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
- package/client/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
- package/client/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
- package/client/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
- package/client/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
- package/client/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
- package/client/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
- package/client/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
- package/client/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
- package/client/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
- package/client/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
- package/client/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
- package/client/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
- package/client/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
- package/client/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
- package/client/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
- package/client/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
- package/client/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
- package/client/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
- package/client/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
- package/client/esm2022/lib/typeorm/driver/Query.mjs +0 -13
- package/client/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
- package/client/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
- package/client/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
- package/client/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
- package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
- package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
- package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
- package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
- package/client/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
- package/client/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
- package/client/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
- package/client/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
- package/client/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
- package/client/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
- package/client/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
- package/client/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
- package/client/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
- package/client/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
- package/client/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
- package/client/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
- package/client/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
- package/client/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
- package/client/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
- package/client/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
- package/client/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
- package/client/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
- package/client/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
- package/client/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
- package/client/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
- package/client/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
- package/client/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
- package/client/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/index.mjs +0 -63
- package/client/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
- package/client/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
- package/client/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
- package/client/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
- package/client/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
- package/client/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
- package/client/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
- package/client/esm2022/lib/typeorm/globals.mjs +0 -165
- package/client/esm2022/lib/typeorm/index.mjs +0 -157
- package/client/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
- package/client/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
- package/client/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
- package/client/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
- package/client/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
- package/client/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
- package/client/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
- package/client/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
- package/client/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
- package/client/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
- package/client/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
- package/client/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
- package/client/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
- package/client/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
- package/client/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
- package/client/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
- package/client/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
- package/client/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
- package/client/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
- package/client/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
- package/client/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
- package/client/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
- package/client/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
- package/client/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
- package/client/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
- package/client/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
- package/client/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
- package/client/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
- package/client/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
- package/client/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
- package/client/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
- package/client/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
- package/client/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
- package/client/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
- package/client/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
- package/client/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
- package/client/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
- package/client/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
- package/client/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
- package/client/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
- package/client/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
- package/client/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
- package/client/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
- package/client/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
- package/client/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
- package/client/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -346
- package/client/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
- package/client/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
- package/client/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
- package/client/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
- package/client/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
- package/client/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
- package/client/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
- package/client/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
- package/client/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
- package/client/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
- package/client/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
- package/client/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
- package/client/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
- package/client/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
- package/client/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
- package/client/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
- package/client/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
- package/client/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
- package/client/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
- package/client/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
- package/client/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
- package/client/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
- package/client/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
- package/client/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
- package/client/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
- package/client/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
- package/client/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
- package/client/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
- package/client/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
- package/client/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
- package/client/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
- package/client/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
- package/client/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
- package/client/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
- package/client/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
- package/client/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
- package/client/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
- package/client/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
- package/client/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
- package/client/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
- package/client/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
- package/client/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
- package/client/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
- package/client/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
- package/client/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
- package/client/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
- package/client/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
- package/client/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
- package/client/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
- package/client/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
- package/client/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
- package/client/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
- package/client/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
- package/client/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
- package/client/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
- package/client/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
- package/client/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
- package/client/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
- package/client/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
- package/client/esm2022/public-api.mjs +0 -2
- package/client/esm2022/taon-typeorm.mjs +0 -5
- package/taon.jsonc +0 -10
- package/websql/esm2022/lib/index.mjs +0 -4
- package/websql/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
- package/websql/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
- package/websql/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
- package/websql/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
- package/websql/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
- package/websql/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
- package/websql/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
- package/websql/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
- package/websql/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
- package/websql/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
- package/websql/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
- package/websql/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
- package/websql/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
- package/websql/esm2022/lib/typeorm/constants.mjs +0 -4
- package/websql/esm2022/lib/typeorm/container.mjs +0 -57
- package/websql/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
- package/websql/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
- package/websql/esm2022/lib/typeorm/data-source/index.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
- package/websql/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
- package/websql/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
- package/websql/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
- package/websql/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
- package/websql/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
- package/websql/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
- package/websql/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
- package/websql/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
- package/websql/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
- package/websql/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
- package/websql/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
- package/websql/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
- package/websql/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
- package/websql/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
- package/websql/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
- package/websql/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
- package/websql/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
- package/websql/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
- package/websql/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
- package/websql/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
- package/websql/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
- package/websql/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
- package/websql/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
- package/websql/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
- package/websql/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
- package/websql/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
- package/websql/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
- package/websql/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
- package/websql/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
- package/websql/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
- package/websql/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
- package/websql/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
- package/websql/esm2022/lib/typeorm/driver/Query.mjs +0 -13
- package/websql/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
- package/websql/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
- package/websql/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
- package/websql/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
- package/websql/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
- package/websql/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
- package/websql/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
- package/websql/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
- package/websql/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
- package/websql/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
- package/websql/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
- package/websql/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
- package/websql/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
- package/websql/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
- package/websql/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
- package/websql/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
- package/websql/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
- package/websql/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
- package/websql/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
- package/websql/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
- package/websql/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
- package/websql/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
- package/websql/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
- package/websql/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
- package/websql/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
- package/websql/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
- package/websql/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
- package/websql/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
- package/websql/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
- package/websql/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
- package/websql/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
- package/websql/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
- package/websql/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
- package/websql/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
- package/websql/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
- package/websql/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
- package/websql/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
- package/websql/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
- package/websql/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
- package/websql/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
- package/websql/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
- package/websql/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
- package/websql/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
- package/websql/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
- package/websql/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
- package/websql/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
- package/websql/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
- package/websql/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
- package/websql/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
- package/websql/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
- package/websql/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
- package/websql/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
- package/websql/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
- package/websql/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
- package/websql/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
- package/websql/esm2022/lib/typeorm/error/index.mjs +0 -63
- package/websql/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
- package/websql/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
- package/websql/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
- package/websql/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
- package/websql/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
- package/websql/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
- package/websql/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
- package/websql/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
- package/websql/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
- package/websql/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
- package/websql/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
- package/websql/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
- package/websql/esm2022/lib/typeorm/globals.mjs +0 -165
- package/websql/esm2022/lib/typeorm/index.mjs +0 -157
- package/websql/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
- package/websql/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
- package/websql/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
- package/websql/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
- package/websql/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
- package/websql/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
- package/websql/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
- package/websql/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
- package/websql/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
- package/websql/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
- package/websql/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
- package/websql/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
- package/websql/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
- package/websql/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
- package/websql/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
- package/websql/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
- package/websql/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
- package/websql/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
- package/websql/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
- package/websql/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
- package/websql/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
- package/websql/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
- package/websql/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
- package/websql/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
- package/websql/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
- package/websql/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
- package/websql/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
- package/websql/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
- package/websql/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
- package/websql/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
- package/websql/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
- package/websql/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
- package/websql/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
- package/websql/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
- package/websql/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
- package/websql/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
- package/websql/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
- package/websql/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
- package/websql/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
- package/websql/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
- package/websql/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
- package/websql/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
- package/websql/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
- package/websql/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
- package/websql/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
- package/websql/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
- package/websql/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
- package/websql/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -331
- package/websql/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
- package/websql/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
- package/websql/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
- package/websql/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
- package/websql/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
- package/websql/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
- package/websql/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
- package/websql/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
- package/websql/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
- package/websql/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
- package/websql/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
- package/websql/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
- package/websql/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
- package/websql/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
- package/websql/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
- package/websql/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
- package/websql/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
- package/websql/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
- package/websql/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
- package/websql/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
- package/websql/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
- package/websql/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
- package/websql/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
- package/websql/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
- package/websql/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
- package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
- package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
- package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
- package/websql/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
- package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
- package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
- package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
- package/websql/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
- package/websql/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
- package/websql/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
- package/websql/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
- package/websql/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
- package/websql/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
- package/websql/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
- package/websql/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
- package/websql/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
- package/websql/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
- package/websql/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
- package/websql/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
- package/websql/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
- package/websql/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
- package/websql/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
- package/websql/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
- package/websql/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
- package/websql/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
- package/websql/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
- package/websql/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
- package/websql/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
- package/websql/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
- package/websql/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
- package/websql/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
- package/websql/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
- package/websql/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
- package/websql/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
- package/websql/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
- package/websql/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
- package/websql/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
- package/websql/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
- package/websql/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
- package/websql/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
- package/websql/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
- package/websql/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
- package/websql/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
- package/websql/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
- package/websql/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
- package/websql/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
- package/websql/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
- package/websql/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
- package/websql/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
- package/websql/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
- package/websql/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
- package/websql/esm2022/public-api.mjs +0 -2
- package/websql/esm2022/taon-typeorm.mjs +0 -5
|
@@ -1,770 +0,0 @@
|
|
|
1
|
-
import { Table } from "./table/Table";
|
|
2
|
-
import { TableColumn } from "./table/TableColumn";
|
|
3
|
-
import { TableForeignKey } from "./table/TableForeignKey";
|
|
4
|
-
import { TableIndex } from "./table/TableIndex";
|
|
5
|
-
import { TableUtils } from "./util/TableUtils";
|
|
6
|
-
import { TableUnique } from "./table/TableUnique";
|
|
7
|
-
import { TableCheck } from "./table/TableCheck";
|
|
8
|
-
import { TableExclusion } from "./table/TableExclusion";
|
|
9
|
-
import { View } from "./view/View";
|
|
10
|
-
import { ViewUtils } from "./util/ViewUtils";
|
|
11
|
-
import { DriverUtils } from "../driver/DriverUtils";
|
|
12
|
-
/**
|
|
13
|
-
* Creates complete tables schemas in the database based on the entity metadatas.
|
|
14
|
-
*
|
|
15
|
-
* Steps how schema is being built:
|
|
16
|
-
* 1. load list of all tables with complete column and keys information from the db
|
|
17
|
-
* 2. drop all (old) foreign keys that exist in the table, but does not exist in the metadata
|
|
18
|
-
* 3. create new tables that does not exist in the db, but exist in the metadata
|
|
19
|
-
* 4. drop all columns exist (left old) in the db table, but does not exist in the metadata
|
|
20
|
-
* 5. add columns from metadata which does not exist in the table
|
|
21
|
-
* 6. update all exist columns which metadata has changed
|
|
22
|
-
* 7. update primary keys - update old and create new primary key from changed columns
|
|
23
|
-
* 8. create foreign keys which does not exist in the table yet
|
|
24
|
-
* 9. create indices which are missing in db yet, and drops indices which exist in the db, but does not exist in the metadata anymore
|
|
25
|
-
*/
|
|
26
|
-
export class RdbmsSchemaBuilder {
|
|
27
|
-
constructor(connection) {
|
|
28
|
-
this.connection = connection;
|
|
29
|
-
this["@instanceof"] = Symbol.for("RdbmsSchemaBuilder");
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Creates complete schemas for the given entity metadatas.
|
|
33
|
-
*/
|
|
34
|
-
async build() {
|
|
35
|
-
this.queryRunner = this.connection.createQueryRunner();
|
|
36
|
-
this.currentDatabase = this.connection.driver.database;
|
|
37
|
-
this.currentSchema = this.connection.driver.schema;
|
|
38
|
-
const isUsingTransactions = !(this.connection.driver.options.type === "cockroachdb") &&
|
|
39
|
-
!(this.connection.driver.options.type === "spanner") &&
|
|
40
|
-
this.connection.options.migrationsTransactionMode !== "none";
|
|
41
|
-
await this.queryRunner.beforeMigration();
|
|
42
|
-
if (isUsingTransactions) {
|
|
43
|
-
await this.queryRunner.startTransaction();
|
|
44
|
-
}
|
|
45
|
-
try {
|
|
46
|
-
await this.createMetadataTableIfNecessary(this.queryRunner);
|
|
47
|
-
const tablePaths = this.entityToSyncMetadatas.map((metadata) => this.getTablePath(metadata));
|
|
48
|
-
await this.queryRunner.getTables(tablePaths);
|
|
49
|
-
await this.queryRunner.getViews([]);
|
|
50
|
-
await this.executeSchemaSyncOperationsInProperOrder();
|
|
51
|
-
if (this.connection.queryResultCache)
|
|
52
|
-
await this.connection.queryResultCache.synchronize(this.queryRunner);
|
|
53
|
-
if (isUsingTransactions) {
|
|
54
|
-
await this.queryRunner.commitTransaction();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
try {
|
|
59
|
-
if (isUsingTransactions) {
|
|
60
|
-
await this.queryRunner.rollbackTransaction();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
catch (rollbackError) { }
|
|
64
|
-
throw error;
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
await this.queryRunner.afterMigration();
|
|
68
|
-
await this.queryRunner.release();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Create the typeorm_metadata table if necessary.
|
|
73
|
-
*/
|
|
74
|
-
async createMetadataTableIfNecessary(queryRunner) {
|
|
75
|
-
if (this.viewEntityToSyncMetadatas.length > 0 ||
|
|
76
|
-
this.hasGeneratedColumns()) {
|
|
77
|
-
await this.createTypeormMetadataTable(queryRunner);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Returns sql queries to be executed by schema builder.
|
|
82
|
-
*/
|
|
83
|
-
async log() {
|
|
84
|
-
this.queryRunner = this.connection.createQueryRunner();
|
|
85
|
-
try {
|
|
86
|
-
const tablePaths = this.entityToSyncMetadatas.map((metadata) => this.getTablePath(metadata));
|
|
87
|
-
await this.queryRunner.getTables(tablePaths);
|
|
88
|
-
await this.queryRunner.getViews([]);
|
|
89
|
-
this.queryRunner.enableSqlMemory();
|
|
90
|
-
await this.executeSchemaSyncOperationsInProperOrder();
|
|
91
|
-
if (this.connection.queryResultCache)
|
|
92
|
-
await this.connection.queryResultCache.synchronize(this.queryRunner);
|
|
93
|
-
return this.queryRunner.getMemorySql();
|
|
94
|
-
}
|
|
95
|
-
finally {
|
|
96
|
-
this.queryRunner.disableSqlMemory();
|
|
97
|
-
await this.queryRunner.release();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Returns only entities that should be synced in the database.
|
|
102
|
-
*/
|
|
103
|
-
get entityToSyncMetadatas() {
|
|
104
|
-
return this.connection.entityMetadatas.filter((metadata) => metadata.synchronize &&
|
|
105
|
-
metadata.tableType !== "entity-child" &&
|
|
106
|
-
metadata.tableType !== "view");
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Returns only entities that should be synced in the database.
|
|
110
|
-
*/
|
|
111
|
-
get viewEntityToSyncMetadatas() {
|
|
112
|
-
return (this.connection.entityMetadatas
|
|
113
|
-
.filter((metadata) => metadata.tableType === "view" && metadata.synchronize)
|
|
114
|
-
.sort(ViewUtils.viewMetadataCmp));
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Checks if there are at least one generated column.
|
|
118
|
-
*/
|
|
119
|
-
hasGeneratedColumns() {
|
|
120
|
-
return this.connection.entityMetadatas.some((entityMetadata) => {
|
|
121
|
-
return entityMetadata.columns.some((column) => column.generatedType);
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Executes schema sync operations in a proper order.
|
|
126
|
-
* Order of operations matter here.
|
|
127
|
-
*/
|
|
128
|
-
async executeSchemaSyncOperationsInProperOrder() {
|
|
129
|
-
await this.dropOldViews();
|
|
130
|
-
await this.dropOldForeignKeys();
|
|
131
|
-
await this.dropOldIndices();
|
|
132
|
-
await this.dropOldChecks();
|
|
133
|
-
await this.dropOldExclusions();
|
|
134
|
-
await this.dropCompositeUniqueConstraints();
|
|
135
|
-
await this.renameColumns();
|
|
136
|
-
await this.createNewTables();
|
|
137
|
-
await this.dropRemovedColumns();
|
|
138
|
-
await this.addNewColumns();
|
|
139
|
-
await this.updatePrimaryKeys();
|
|
140
|
-
await this.updateExistColumns();
|
|
141
|
-
await this.createNewIndices();
|
|
142
|
-
await this.createNewChecks();
|
|
143
|
-
await this.createNewExclusions();
|
|
144
|
-
await this.createCompositeUniqueConstraints();
|
|
145
|
-
await this.createForeignKeys();
|
|
146
|
-
await this.createViews();
|
|
147
|
-
}
|
|
148
|
-
getTablePath(target) {
|
|
149
|
-
const parsed = this.connection.driver.parseTableName(target);
|
|
150
|
-
return this.connection.driver.buildTableName(parsed.tableName, parsed.schema || this.currentSchema, parsed.database || this.currentDatabase);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Drops all (old) foreign keys that exist in the tables, but do not exist in the entity metadata.
|
|
154
|
-
*/
|
|
155
|
-
async dropOldForeignKeys() {
|
|
156
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
157
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
158
|
-
if (!table)
|
|
159
|
-
continue;
|
|
160
|
-
const tableForeignKeysToDrop = table.foreignKeys.filter((tableForeignKey) => {
|
|
161
|
-
const metadataFK = metadata.foreignKeys.find((metadataForeignKey) => tableForeignKey.name === metadataForeignKey.name &&
|
|
162
|
-
this.getTablePath(tableForeignKey) ===
|
|
163
|
-
this.getTablePath(metadataForeignKey.referencedEntityMetadata));
|
|
164
|
-
return (!metadataFK ||
|
|
165
|
-
(metadataFK.onDelete &&
|
|
166
|
-
metadataFK.onDelete !== tableForeignKey.onDelete) ||
|
|
167
|
-
(metadataFK.onUpdate &&
|
|
168
|
-
metadataFK.onUpdate !== tableForeignKey.onUpdate));
|
|
169
|
-
});
|
|
170
|
-
if (tableForeignKeysToDrop.length === 0)
|
|
171
|
-
continue;
|
|
172
|
-
this.connection.logger.logSchemaBuild(`dropping old foreign keys of ${table.name}: ${tableForeignKeysToDrop
|
|
173
|
-
.map((dbForeignKey) => dbForeignKey.name)
|
|
174
|
-
.join(", ")}`);
|
|
175
|
-
await this.queryRunner.dropForeignKeys(table, tableForeignKeysToDrop);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Rename tables
|
|
180
|
-
*/
|
|
181
|
-
async renameTables() {
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Renames columns.
|
|
185
|
-
* Works if only one column per table was changed.
|
|
186
|
-
* Changes only column name. If something besides name was changed, these changes will be ignored.
|
|
187
|
-
*/
|
|
188
|
-
async renameColumns() {
|
|
189
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
190
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
191
|
-
if (!table)
|
|
192
|
-
continue;
|
|
193
|
-
if (metadata.columns.length !== table.columns.length)
|
|
194
|
-
continue;
|
|
195
|
-
const renamedMetadataColumns = metadata.columns
|
|
196
|
-
.filter((c) => !c.isVirtualProperty)
|
|
197
|
-
.filter((column) => {
|
|
198
|
-
return !table.columns.find((tableColumn) => {
|
|
199
|
-
return (tableColumn.name === column.databaseName &&
|
|
200
|
-
tableColumn.type ===
|
|
201
|
-
this.connection.driver.normalizeType(column) &&
|
|
202
|
-
tableColumn.isNullable === column.isNullable &&
|
|
203
|
-
tableColumn.isUnique ===
|
|
204
|
-
this.connection.driver.normalizeIsUnique(column));
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
if (renamedMetadataColumns.length === 0 ||
|
|
208
|
-
renamedMetadataColumns.length > 1)
|
|
209
|
-
continue;
|
|
210
|
-
const renamedTableColumns = table.columns.filter((tableColumn) => {
|
|
211
|
-
return !metadata.columns.find((column) => {
|
|
212
|
-
return (!column.isVirtualProperty &&
|
|
213
|
-
column.databaseName === tableColumn.name &&
|
|
214
|
-
this.connection.driver.normalizeType(column) ===
|
|
215
|
-
tableColumn.type &&
|
|
216
|
-
column.isNullable === tableColumn.isNullable &&
|
|
217
|
-
this.connection.driver.normalizeIsUnique(column) ===
|
|
218
|
-
tableColumn.isUnique);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
if (renamedTableColumns.length === 0 ||
|
|
222
|
-
renamedTableColumns.length > 1)
|
|
223
|
-
continue;
|
|
224
|
-
const renamedColumn = renamedTableColumns[0].clone();
|
|
225
|
-
renamedColumn.name = renamedMetadataColumns[0].databaseName;
|
|
226
|
-
this.connection.logger.logSchemaBuild(`renaming column "${renamedTableColumns[0].name}" in to "${renamedColumn.name}"`);
|
|
227
|
-
await this.queryRunner.renameColumn(table, renamedTableColumns[0], renamedColumn);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
async dropOldIndices() {
|
|
231
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
232
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
233
|
-
if (!table)
|
|
234
|
-
continue;
|
|
235
|
-
const dropQueries = table.indices
|
|
236
|
-
.filter((tableIndex) => {
|
|
237
|
-
const indexMetadata = metadata.indices.find((index) => index.name === tableIndex.name);
|
|
238
|
-
if (indexMetadata) {
|
|
239
|
-
if (indexMetadata.synchronize === false)
|
|
240
|
-
return false;
|
|
241
|
-
if (indexMetadata.isUnique !== tableIndex.isUnique)
|
|
242
|
-
return true;
|
|
243
|
-
if (indexMetadata.isSpatial !== tableIndex.isSpatial)
|
|
244
|
-
return true;
|
|
245
|
-
if (this.connection.driver.isFullTextColumnTypeSupported() &&
|
|
246
|
-
indexMetadata.isFulltext !== tableIndex.isFulltext)
|
|
247
|
-
return true;
|
|
248
|
-
if (indexMetadata.columns.length !==
|
|
249
|
-
tableIndex.columnNames.length)
|
|
250
|
-
return true;
|
|
251
|
-
return !indexMetadata.columns.every((column) => tableIndex.columnNames.indexOf(column.databaseName) !== -1);
|
|
252
|
-
}
|
|
253
|
-
return true;
|
|
254
|
-
})
|
|
255
|
-
.map(async (tableIndex) => {
|
|
256
|
-
this.connection.logger.logSchemaBuild(`dropping an index: "${tableIndex.name}" from table ${table.name}`);
|
|
257
|
-
await this.queryRunner.dropIndex(table, tableIndex);
|
|
258
|
-
});
|
|
259
|
-
await Promise.all(dropQueries);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
async dropOldChecks() {
|
|
263
|
-
if (DriverUtils.isMySQLFamily(this.connection.driver) ||
|
|
264
|
-
this.connection.driver.options.type === "aurora-mysql")
|
|
265
|
-
return;
|
|
266
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
267
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
268
|
-
if (!table)
|
|
269
|
-
continue;
|
|
270
|
-
const oldChecks = table.checks.filter((tableCheck) => {
|
|
271
|
-
return !metadata.checks.find((checkMetadata) => checkMetadata.name === tableCheck.name);
|
|
272
|
-
});
|
|
273
|
-
if (oldChecks.length === 0)
|
|
274
|
-
continue;
|
|
275
|
-
this.connection.logger.logSchemaBuild(`dropping old check constraint: ${oldChecks
|
|
276
|
-
.map((check) => `"${check.name}"`)
|
|
277
|
-
.join(", ")} from table "${table.name}"`);
|
|
278
|
-
await this.queryRunner.dropCheckConstraints(table, oldChecks);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
async dropCompositeUniqueConstraints() {
|
|
282
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
283
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
284
|
-
if (!table)
|
|
285
|
-
continue;
|
|
286
|
-
const compositeUniques = table.uniques.filter((tableUnique) => {
|
|
287
|
-
return (tableUnique.columnNames.length > 1 &&
|
|
288
|
-
!metadata.uniques.find((uniqueMetadata) => uniqueMetadata.name === tableUnique.name));
|
|
289
|
-
});
|
|
290
|
-
if (compositeUniques.length === 0)
|
|
291
|
-
continue;
|
|
292
|
-
this.connection.logger.logSchemaBuild(`dropping old unique constraint: ${compositeUniques
|
|
293
|
-
.map((unique) => `"${unique.name}"`)
|
|
294
|
-
.join(", ")} from table "${table.name}"`);
|
|
295
|
-
await this.queryRunner.dropUniqueConstraints(table, compositeUniques);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
async dropOldExclusions() {
|
|
299
|
-
if (!(this.connection.driver.options.type === "postgres"))
|
|
300
|
-
return;
|
|
301
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
302
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
303
|
-
if (!table)
|
|
304
|
-
continue;
|
|
305
|
-
const oldExclusions = table.exclusions.filter((tableExclusion) => {
|
|
306
|
-
return !metadata.exclusions.find((exclusionMetadata) => exclusionMetadata.name === tableExclusion.name);
|
|
307
|
-
});
|
|
308
|
-
if (oldExclusions.length === 0)
|
|
309
|
-
continue;
|
|
310
|
-
this.connection.logger.logSchemaBuild(`dropping old exclusion constraint: ${oldExclusions
|
|
311
|
-
.map((exclusion) => `"${exclusion.name}"`)
|
|
312
|
-
.join(", ")} from table "${table.name}"`);
|
|
313
|
-
await this.queryRunner.dropExclusionConstraints(table, oldExclusions);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Creates tables that do not exist in the database yet.
|
|
318
|
-
* New tables are created without foreign and primary keys.
|
|
319
|
-
* Primary key only can be created in conclusion with auto generated column.
|
|
320
|
-
*/
|
|
321
|
-
async createNewTables() {
|
|
322
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
323
|
-
const existTable = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
324
|
-
if (existTable)
|
|
325
|
-
continue;
|
|
326
|
-
this.connection.logger.logSchemaBuild(`creating a new table: ${this.getTablePath(metadata)}`);
|
|
327
|
-
const table = Table.create(metadata, this.connection.driver);
|
|
328
|
-
await this.queryRunner.createTable(table, false, false);
|
|
329
|
-
this.queryRunner.loadedTables.push(table);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
async createViews() {
|
|
333
|
-
for (const metadata of this.viewEntityToSyncMetadatas) {
|
|
334
|
-
const existView = this.queryRunner.loadedViews.find((view) => {
|
|
335
|
-
const viewExpression = typeof view.expression === "string"
|
|
336
|
-
? view.expression.trim()
|
|
337
|
-
: view.expression(this.connection).getQuery();
|
|
338
|
-
const metadataExpression = typeof metadata.expression === "string"
|
|
339
|
-
? metadata.expression.trim()
|
|
340
|
-
: metadata.expression(this.connection).getQuery();
|
|
341
|
-
return (this.getTablePath(view) === this.getTablePath(metadata) &&
|
|
342
|
-
viewExpression === metadataExpression);
|
|
343
|
-
});
|
|
344
|
-
if (existView)
|
|
345
|
-
continue;
|
|
346
|
-
this.connection.logger.logSchemaBuild(`creating a new view: ${this.getTablePath(metadata)}`);
|
|
347
|
-
const view = View.create(metadata, this.connection.driver);
|
|
348
|
-
await this.queryRunner.createView(view, true);
|
|
349
|
-
this.queryRunner.loadedViews.push(view);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
async dropOldViews() {
|
|
353
|
-
const droppedViews = [];
|
|
354
|
-
const viewEntityToSyncMetadatas = this.viewEntityToSyncMetadatas;
|
|
355
|
-
const viewToMetadata = new Map();
|
|
356
|
-
for (const view of this.queryRunner.loadedViews) {
|
|
357
|
-
const viewMetadata = viewEntityToSyncMetadatas.find((metadata) => {
|
|
358
|
-
return this.getTablePath(view) === this.getTablePath(metadata);
|
|
359
|
-
});
|
|
360
|
-
if (viewMetadata) {
|
|
361
|
-
viewToMetadata.set(view, viewMetadata);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
for (const view of this.queryRunner.loadedViews) {
|
|
365
|
-
const viewMetadata = viewToMetadata.get(view);
|
|
366
|
-
if (!viewMetadata) {
|
|
367
|
-
continue;
|
|
368
|
-
}
|
|
369
|
-
const viewExpression = typeof view.expression === "string"
|
|
370
|
-
? view.expression.trim()
|
|
371
|
-
: view.expression(this.connection).getQuery();
|
|
372
|
-
const metadataExpression = typeof viewMetadata.expression === "string"
|
|
373
|
-
? viewMetadata.expression.trim()
|
|
374
|
-
: viewMetadata.expression(this.connection).getQuery();
|
|
375
|
-
if (viewExpression === metadataExpression)
|
|
376
|
-
continue;
|
|
377
|
-
this.connection.logger.logSchemaBuild(`dropping an old view: ${view.name}`);
|
|
378
|
-
droppedViews.push(view);
|
|
379
|
-
}
|
|
380
|
-
const viewDependencyChain = (view) => {
|
|
381
|
-
const viewMetadata = viewToMetadata.get(view);
|
|
382
|
-
let viewWithDependencies = [view];
|
|
383
|
-
if (!viewMetadata) {
|
|
384
|
-
return viewWithDependencies;
|
|
385
|
-
}
|
|
386
|
-
for (const [currentView, currentMetadata,] of viewToMetadata.entries()) {
|
|
387
|
-
if (currentView === view) {
|
|
388
|
-
continue;
|
|
389
|
-
}
|
|
390
|
-
if (currentMetadata.dependsOn &&
|
|
391
|
-
(currentMetadata.dependsOn.has(viewMetadata.target) ||
|
|
392
|
-
currentMetadata.dependsOn.has(viewMetadata.name))) {
|
|
393
|
-
viewWithDependencies = viewWithDependencies.concat(viewDependencyChain(currentView));
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
return viewWithDependencies;
|
|
397
|
-
};
|
|
398
|
-
const droppedViewsWithDependencies = new Set(droppedViews
|
|
399
|
-
.map((view) => viewDependencyChain(view))
|
|
400
|
-
.reduce((all, segment) => {
|
|
401
|
-
return all.concat(segment);
|
|
402
|
-
}, [])
|
|
403
|
-
.sort((a, b) => {
|
|
404
|
-
return ViewUtils.viewMetadataCmp(viewToMetadata.get(a), viewToMetadata.get(b));
|
|
405
|
-
})
|
|
406
|
-
.reverse());
|
|
407
|
-
for (const view of droppedViewsWithDependencies) {
|
|
408
|
-
await this.queryRunner.dropView(view);
|
|
409
|
-
}
|
|
410
|
-
this.queryRunner.loadedViews = this.queryRunner.loadedViews.filter((view) => !droppedViewsWithDependencies.has(view));
|
|
411
|
-
}
|
|
412
|
-
/**
|
|
413
|
-
* Drops all columns that exist in the table, but does not exist in the metadata (left old).
|
|
414
|
-
* We drop their keys too, since it should be safe.
|
|
415
|
-
*/
|
|
416
|
-
async dropRemovedColumns() {
|
|
417
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
418
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
419
|
-
if (!table)
|
|
420
|
-
continue;
|
|
421
|
-
const droppedTableColumns = table.columns.filter((tableColumn) => {
|
|
422
|
-
return !metadata.columns.find((columnMetadata) => columnMetadata.isVirtualProperty ||
|
|
423
|
-
columnMetadata.databaseName === tableColumn.name);
|
|
424
|
-
});
|
|
425
|
-
if (droppedTableColumns.length === 0)
|
|
426
|
-
continue;
|
|
427
|
-
this.connection.logger.logSchemaBuild(`columns dropped in ${table.name}: ` +
|
|
428
|
-
droppedTableColumns.map((column) => column.name).join(", "));
|
|
429
|
-
await this.queryRunner.dropColumns(table, droppedTableColumns);
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Adds columns from metadata which does not exist in the table.
|
|
434
|
-
* Columns are created without keys.
|
|
435
|
-
*/
|
|
436
|
-
async addNewColumns() {
|
|
437
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
438
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
439
|
-
if (!table)
|
|
440
|
-
continue;
|
|
441
|
-
const newColumnMetadatas = metadata.columns.filter((columnMetadata) => {
|
|
442
|
-
return (!columnMetadata.isVirtualProperty &&
|
|
443
|
-
!table.columns.find((tableColumn) => tableColumn.name ===
|
|
444
|
-
columnMetadata.databaseName));
|
|
445
|
-
});
|
|
446
|
-
if (newColumnMetadatas.length === 0)
|
|
447
|
-
continue;
|
|
448
|
-
const newTableColumnOptions = this.metadataColumnsToTableColumnOptions(newColumnMetadatas);
|
|
449
|
-
const newTableColumns = newTableColumnOptions.map((option) => new TableColumn(option));
|
|
450
|
-
if (newTableColumns.length === 0)
|
|
451
|
-
continue;
|
|
452
|
-
this.connection.logger.logSchemaBuild(`new columns added: ` +
|
|
453
|
-
newColumnMetadatas
|
|
454
|
-
.map((column) => column.databaseName)
|
|
455
|
-
.join(", "));
|
|
456
|
-
await this.queryRunner.addColumns(table, newTableColumns);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
/**
|
|
460
|
-
* Updates composite primary keys.
|
|
461
|
-
*/
|
|
462
|
-
async updatePrimaryKeys() {
|
|
463
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
464
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
465
|
-
if (!table)
|
|
466
|
-
continue;
|
|
467
|
-
const primaryMetadataColumns = metadata.columns.filter((column) => column.isPrimary);
|
|
468
|
-
const primaryTableColumns = table.columns.filter((column) => column.isPrimary);
|
|
469
|
-
if (primaryTableColumns.length !== primaryMetadataColumns.length &&
|
|
470
|
-
primaryMetadataColumns.length > 1) {
|
|
471
|
-
const changedPrimaryColumns = primaryMetadataColumns.map((primaryMetadataColumn) => {
|
|
472
|
-
return new TableColumn(TableUtils.createTableColumnOptions(primaryMetadataColumn, this.connection.driver));
|
|
473
|
-
});
|
|
474
|
-
await this.queryRunner.updatePrimaryKeys(table, changedPrimaryColumns);
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
/**
|
|
479
|
-
* Update all exist columns which metadata has changed.
|
|
480
|
-
* Still don't create keys. Also we don't touch foreign keys of the changed columns.
|
|
481
|
-
*/
|
|
482
|
-
async updateExistColumns() {
|
|
483
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
484
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
485
|
-
if (!table)
|
|
486
|
-
continue;
|
|
487
|
-
const changedColumns = this.connection.driver.findChangedColumns(table.columns, metadata.columns);
|
|
488
|
-
if (changedColumns.length === 0)
|
|
489
|
-
continue;
|
|
490
|
-
for (const changedColumn of changedColumns) {
|
|
491
|
-
await this.dropColumnReferencedForeignKeys(this.getTablePath(metadata), changedColumn.databaseName);
|
|
492
|
-
}
|
|
493
|
-
for (const changedColumn of changedColumns) {
|
|
494
|
-
await this.dropColumnCompositeIndices(this.getTablePath(metadata), changedColumn.databaseName);
|
|
495
|
-
}
|
|
496
|
-
if (!(DriverUtils.isMySQLFamily(this.connection.driver) ||
|
|
497
|
-
this.connection.driver.options.type === "aurora-mysql" ||
|
|
498
|
-
this.connection.driver.options.type === "spanner")) {
|
|
499
|
-
for (const changedColumn of changedColumns) {
|
|
500
|
-
await this.dropColumnCompositeUniques(this.getTablePath(metadata), changedColumn.databaseName);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
const newAndOldTableColumns = changedColumns.map((changedColumn) => {
|
|
504
|
-
const oldTableColumn = table.columns.find((column) => column.name === changedColumn.databaseName);
|
|
505
|
-
const newTableColumnOptions = TableUtils.createTableColumnOptions(changedColumn, this.connection.driver);
|
|
506
|
-
const newTableColumn = new TableColumn(newTableColumnOptions);
|
|
507
|
-
return {
|
|
508
|
-
oldColumn: oldTableColumn,
|
|
509
|
-
newColumn: newTableColumn,
|
|
510
|
-
};
|
|
511
|
-
});
|
|
512
|
-
if (newAndOldTableColumns.length === 0)
|
|
513
|
-
continue;
|
|
514
|
-
this.connection.logger.logSchemaBuild(`columns changed in "${table.name}". updating: ` +
|
|
515
|
-
changedColumns
|
|
516
|
-
.map((column) => column.databaseName)
|
|
517
|
-
.join(", "));
|
|
518
|
-
await this.queryRunner.changeColumns(table, newAndOldTableColumns);
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Creates composite indices which are missing in db yet.
|
|
523
|
-
*/
|
|
524
|
-
async createNewIndices() {
|
|
525
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
526
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
527
|
-
if (!table)
|
|
528
|
-
continue;
|
|
529
|
-
const newIndices = metadata.indices
|
|
530
|
-
.filter((indexMetadata) => !table.indices.find((tableIndex) => tableIndex.name === indexMetadata.name) && indexMetadata.synchronize === true)
|
|
531
|
-
.map((indexMetadata) => TableIndex.create(indexMetadata));
|
|
532
|
-
if (newIndices.length === 0)
|
|
533
|
-
continue;
|
|
534
|
-
this.connection.logger.logSchemaBuild(`adding new indices ${newIndices
|
|
535
|
-
.map((index) => `"${index.name}"`)
|
|
536
|
-
.join(", ")} in table "${table.name}"`);
|
|
537
|
-
await this.queryRunner.createIndices(table, newIndices);
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
async createNewChecks() {
|
|
541
|
-
if (DriverUtils.isMySQLFamily(this.connection.driver) ||
|
|
542
|
-
this.connection.driver.options.type === "aurora-mysql")
|
|
543
|
-
return;
|
|
544
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
545
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
546
|
-
if (!table)
|
|
547
|
-
continue;
|
|
548
|
-
const newChecks = metadata.checks
|
|
549
|
-
.filter((checkMetadata) => !table.checks.find((tableCheck) => tableCheck.name === checkMetadata.name))
|
|
550
|
-
.map((checkMetadata) => TableCheck.create(checkMetadata));
|
|
551
|
-
if (newChecks.length === 0)
|
|
552
|
-
continue;
|
|
553
|
-
this.connection.logger.logSchemaBuild(`adding new check constraints: ${newChecks
|
|
554
|
-
.map((index) => `"${index.name}"`)
|
|
555
|
-
.join(", ")} in table "${table.name}"`);
|
|
556
|
-
await this.queryRunner.createCheckConstraints(table, newChecks);
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
/**
|
|
560
|
-
* Creates composite uniques which are missing in db yet.
|
|
561
|
-
*/
|
|
562
|
-
async createCompositeUniqueConstraints() {
|
|
563
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
564
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
565
|
-
if (!table)
|
|
566
|
-
continue;
|
|
567
|
-
const compositeUniques = metadata.uniques
|
|
568
|
-
.filter((uniqueMetadata) => uniqueMetadata.columns.length > 1 &&
|
|
569
|
-
!table.uniques.find((tableUnique) => tableUnique.name === uniqueMetadata.name))
|
|
570
|
-
.map((uniqueMetadata) => TableUnique.create(uniqueMetadata));
|
|
571
|
-
if (compositeUniques.length === 0)
|
|
572
|
-
continue;
|
|
573
|
-
this.connection.logger.logSchemaBuild(`adding new unique constraints: ${compositeUniques
|
|
574
|
-
.map((unique) => `"${unique.name}"`)
|
|
575
|
-
.join(", ")} in table "${table.name}"`);
|
|
576
|
-
await this.queryRunner.createUniqueConstraints(table, compositeUniques);
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* Creates exclusions which are missing in db yet.
|
|
581
|
-
*/
|
|
582
|
-
async createNewExclusions() {
|
|
583
|
-
if (!(this.connection.driver.options.type === "postgres"))
|
|
584
|
-
return;
|
|
585
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
586
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
587
|
-
if (!table)
|
|
588
|
-
continue;
|
|
589
|
-
const newExclusions = metadata.exclusions
|
|
590
|
-
.filter((exclusionMetadata) => !table.exclusions.find((tableExclusion) => tableExclusion.name === exclusionMetadata.name))
|
|
591
|
-
.map((exclusionMetadata) => TableExclusion.create(exclusionMetadata));
|
|
592
|
-
if (newExclusions.length === 0)
|
|
593
|
-
continue;
|
|
594
|
-
this.connection.logger.logSchemaBuild(`adding new exclusion constraints: ${newExclusions
|
|
595
|
-
.map((exclusion) => `"${exclusion.name}"`)
|
|
596
|
-
.join(", ")} in table "${table.name}"`);
|
|
597
|
-
await this.queryRunner.createExclusionConstraints(table, newExclusions);
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
/**
|
|
601
|
-
* Creates foreign keys which does not exist in the table yet.
|
|
602
|
-
*/
|
|
603
|
-
async createForeignKeys() {
|
|
604
|
-
for (const metadata of this.entityToSyncMetadatas) {
|
|
605
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === this.getTablePath(metadata));
|
|
606
|
-
if (!table)
|
|
607
|
-
continue;
|
|
608
|
-
const newKeys = metadata.foreignKeys.filter((foreignKey) => {
|
|
609
|
-
return !table.foreignKeys.find((dbForeignKey) => dbForeignKey.name === foreignKey.name &&
|
|
610
|
-
this.getTablePath(dbForeignKey) ===
|
|
611
|
-
this.getTablePath(foreignKey.referencedEntityMetadata));
|
|
612
|
-
});
|
|
613
|
-
if (newKeys.length === 0)
|
|
614
|
-
continue;
|
|
615
|
-
const dbForeignKeys = newKeys.map((foreignKeyMetadata) => TableForeignKey.create(foreignKeyMetadata, this.connection.driver));
|
|
616
|
-
this.connection.logger.logSchemaBuild(`creating a foreign keys: ${newKeys
|
|
617
|
-
.map((key) => key.name)
|
|
618
|
-
.join(", ")} on table "${table.name}"`);
|
|
619
|
-
await this.queryRunner.createForeignKeys(table, dbForeignKeys);
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* Drops all foreign keys where given column of the given table is being used.
|
|
624
|
-
*/
|
|
625
|
-
async dropColumnReferencedForeignKeys(tablePath, columnName) {
|
|
626
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === tablePath);
|
|
627
|
-
if (!table)
|
|
628
|
-
return;
|
|
629
|
-
const tablesWithFK = [];
|
|
630
|
-
const columnForeignKey = table.foreignKeys.find((foreignKey) => foreignKey.columnNames.indexOf(columnName) !== -1);
|
|
631
|
-
if (columnForeignKey) {
|
|
632
|
-
const clonedTable = table.clone();
|
|
633
|
-
clonedTable.foreignKeys = [columnForeignKey];
|
|
634
|
-
tablesWithFK.push(clonedTable);
|
|
635
|
-
table.removeForeignKey(columnForeignKey);
|
|
636
|
-
}
|
|
637
|
-
for (const loadedTable of this.queryRunner.loadedTables) {
|
|
638
|
-
const dependForeignKeys = loadedTable.foreignKeys.filter((foreignKey) => {
|
|
639
|
-
return (this.getTablePath(foreignKey) === tablePath &&
|
|
640
|
-
foreignKey.referencedColumnNames.indexOf(columnName) !==
|
|
641
|
-
-1);
|
|
642
|
-
});
|
|
643
|
-
if (dependForeignKeys.length > 0) {
|
|
644
|
-
const clonedTable = loadedTable.clone();
|
|
645
|
-
clonedTable.foreignKeys = dependForeignKeys;
|
|
646
|
-
tablesWithFK.push(clonedTable);
|
|
647
|
-
dependForeignKeys.forEach((dependForeignKey) => loadedTable.removeForeignKey(dependForeignKey));
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
if (tablesWithFK.length > 0) {
|
|
651
|
-
for (const tableWithFK of tablesWithFK) {
|
|
652
|
-
this.connection.logger.logSchemaBuild(`dropping related foreign keys of ${tableWithFK.name}: ${tableWithFK.foreignKeys
|
|
653
|
-
.map((foreignKey) => foreignKey.name)
|
|
654
|
-
.join(", ")}`);
|
|
655
|
-
await this.queryRunner.dropForeignKeys(tableWithFK, tableWithFK.foreignKeys);
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
/**
|
|
660
|
-
* Drops all composite indices, related to given column.
|
|
661
|
-
*/
|
|
662
|
-
async dropColumnCompositeIndices(tablePath, columnName) {
|
|
663
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === tablePath);
|
|
664
|
-
if (!table)
|
|
665
|
-
return;
|
|
666
|
-
const relatedIndices = table.indices.filter((index) => index.columnNames.length > 1 &&
|
|
667
|
-
index.columnNames.indexOf(columnName) !== -1);
|
|
668
|
-
if (relatedIndices.length === 0)
|
|
669
|
-
return;
|
|
670
|
-
this.connection.logger.logSchemaBuild(`dropping related indices of "${tablePath}"."${columnName}": ${relatedIndices
|
|
671
|
-
.map((index) => index.name)
|
|
672
|
-
.join(", ")}`);
|
|
673
|
-
await this.queryRunner.dropIndices(table, relatedIndices);
|
|
674
|
-
}
|
|
675
|
-
/**
|
|
676
|
-
* Drops all composite uniques, related to given column.
|
|
677
|
-
*/
|
|
678
|
-
async dropColumnCompositeUniques(tablePath, columnName) {
|
|
679
|
-
const table = this.queryRunner.loadedTables.find((table) => this.getTablePath(table) === tablePath);
|
|
680
|
-
if (!table)
|
|
681
|
-
return;
|
|
682
|
-
const relatedUniques = table.uniques.filter((unique) => unique.columnNames.length > 1 &&
|
|
683
|
-
unique.columnNames.indexOf(columnName) !== -1);
|
|
684
|
-
if (relatedUniques.length === 0)
|
|
685
|
-
return;
|
|
686
|
-
this.connection.logger.logSchemaBuild(`dropping related unique constraints of "${tablePath}"."${columnName}": ${relatedUniques
|
|
687
|
-
.map((unique) => unique.name)
|
|
688
|
-
.join(", ")}`);
|
|
689
|
-
await this.queryRunner.dropUniqueConstraints(table, relatedUniques);
|
|
690
|
-
}
|
|
691
|
-
/**
|
|
692
|
-
* Creates new columns from the given column metadatas.
|
|
693
|
-
*/
|
|
694
|
-
metadataColumnsToTableColumnOptions(columns) {
|
|
695
|
-
return columns.map((columnMetadata) => TableUtils.createTableColumnOptions(columnMetadata, this.connection.driver));
|
|
696
|
-
}
|
|
697
|
-
/**
|
|
698
|
-
* Creates typeorm service table for storing user defined Views and generate columns.
|
|
699
|
-
*/
|
|
700
|
-
async createTypeormMetadataTable(queryRunner) {
|
|
701
|
-
const schema = this.currentSchema;
|
|
702
|
-
const database = this.currentDatabase;
|
|
703
|
-
const typeormMetadataTable = this.connection.driver.buildTableName(this.connection.metadataTableName, schema, database);
|
|
704
|
-
const isPrimary = this.connection.driver.options.type === "spanner";
|
|
705
|
-
await queryRunner.createTable(new Table({
|
|
706
|
-
database: database,
|
|
707
|
-
schema: schema,
|
|
708
|
-
name: typeormMetadataTable,
|
|
709
|
-
columns: [
|
|
710
|
-
{
|
|
711
|
-
name: "type",
|
|
712
|
-
type: this.connection.driver.normalizeType({
|
|
713
|
-
type: this.connection.driver.mappedDataTypes
|
|
714
|
-
.metadataType,
|
|
715
|
-
}),
|
|
716
|
-
isNullable: false,
|
|
717
|
-
isPrimary,
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
name: "database",
|
|
721
|
-
type: this.connection.driver.normalizeType({
|
|
722
|
-
type: this.connection.driver.mappedDataTypes
|
|
723
|
-
.metadataDatabase,
|
|
724
|
-
}),
|
|
725
|
-
isNullable: true,
|
|
726
|
-
isPrimary,
|
|
727
|
-
},
|
|
728
|
-
{
|
|
729
|
-
name: "schema",
|
|
730
|
-
type: this.connection.driver.normalizeType({
|
|
731
|
-
type: this.connection.driver.mappedDataTypes
|
|
732
|
-
.metadataSchema,
|
|
733
|
-
}),
|
|
734
|
-
isNullable: true,
|
|
735
|
-
isPrimary,
|
|
736
|
-
},
|
|
737
|
-
{
|
|
738
|
-
name: "table",
|
|
739
|
-
type: this.connection.driver.normalizeType({
|
|
740
|
-
type: this.connection.driver.mappedDataTypes
|
|
741
|
-
.metadataTable,
|
|
742
|
-
}),
|
|
743
|
-
isNullable: true,
|
|
744
|
-
isPrimary,
|
|
745
|
-
},
|
|
746
|
-
{
|
|
747
|
-
name: "name",
|
|
748
|
-
type: this.connection.driver.normalizeType({
|
|
749
|
-
type: this.connection.driver.mappedDataTypes
|
|
750
|
-
.metadataName,
|
|
751
|
-
}),
|
|
752
|
-
isNullable: true,
|
|
753
|
-
isPrimary,
|
|
754
|
-
},
|
|
755
|
-
{
|
|
756
|
-
name: "value",
|
|
757
|
-
type: this.connection.driver.normalizeType({
|
|
758
|
-
type: this.connection.driver.mappedDataTypes
|
|
759
|
-
.metadataValue,
|
|
760
|
-
}),
|
|
761
|
-
isNullable: true,
|
|
762
|
-
isPrimary,
|
|
763
|
-
},
|
|
764
|
-
],
|
|
765
|
-
}), true);
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
;
|
|
769
|
-
({}); // @--end-of-file-for-module=taon-typeorm lib/typeorm/schema-builder/RdbmsSchemaBuilder.ts
|
|
770
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmRibXNTY2hlbWFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24tdHlwZW9ybS9wcm9qZWN0cy90YW9uLXR5cGVvcm0vc3JjL2xpYi90eXBlb3JtL3NjaGVtYS1idWlsZGVyL1JkYm1zU2NoZW1hQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3JDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBTy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFbkQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFnQjNCLFlBQXNCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFmbkMsbUJBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFlVixDQUFDO0lBTWhEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDUCxJQUFJLENBQUMsV0FB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OzZCQUN2QyxjQUFjO3FCQUN0QixDQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTO2lCQUNaO2dCQUNEO29CQUNJLElBQUksRUFBRSxPQUFPO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7d0JBQ3ZDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlOzZCQUN2QyxhQUFhO3FCQUNyQixDQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTO2lCQUNaO2dCQUNEO29CQUNJLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7d0JBQ3ZDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlOzZCQUN2QyxZQUFZO3FCQUNwQixDQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTO2lCQUNaO2dCQUNEO29CQUNJLElBQUksRUFBRSxPQUFPO29CQUNiLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7d0JBQ3ZDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlOzZCQUN2QyxhQUFhO3FCQUNyQixDQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTO2lCQUNaO2FBQ0o7U0FDSixDQUFDLEVBQ0YsSUFBSSxDQUNQLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDBGQUEwRiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCIuL3RhYmxlL1RhYmxlXCJcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSBcIi4vdGFibGUvVGFibGVDb2x1bW5cIlxuaW1wb3J0IHsgVGFibGVGb3JlaWduS2V5IH0gZnJvbSBcIi4vdGFibGUvVGFibGVGb3JlaWduS2V5XCJcbmltcG9ydCB7IFRhYmxlSW5kZXggfSBmcm9tIFwiLi90YWJsZS9UYWJsZUluZGV4XCJcbmltcG9ydCB7IFF1ZXJ5UnVubmVyIH0gZnJvbSBcIi4uL3F1ZXJ5LXJ1bm5lci9RdWVyeVJ1bm5lclwiXG5pbXBvcnQgeyBDb2x1bW5NZXRhZGF0YSB9IGZyb20gXCIuLi9tZXRhZGF0YS9Db2x1bW5NZXRhZGF0YVwiXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YSB9IGZyb20gXCIuLi9tZXRhZGF0YS9FbnRpdHlNZXRhZGF0YVwiXG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4uL2RhdGEtc291cmNlL0RhdGFTb3VyY2VcIlxuaW1wb3J0IHsgU2NoZW1hQnVpbGRlciB9IGZyb20gXCIuL1NjaGVtYUJ1aWxkZXJcIlxuaW1wb3J0IHsgU3FsSW5NZW1vcnkgfSBmcm9tIFwiLi4vZHJpdmVyL1NxbEluTWVtb3J5XCJcbmltcG9ydCB7IFRhYmxlVXRpbHMgfSBmcm9tIFwiLi91dGlsL1RhYmxlVXRpbHNcIlxuaW1wb3J0IHsgVGFibGVDb2x1bW5PcHRpb25zIH0gZnJvbSBcIi4vb3B0aW9ucy9UYWJsZUNvbHVtbk9wdGlvbnNcIlxuaW1wb3J0IHsgVGFibGVVbmlxdWUgfSBmcm9tIFwiLi90YWJsZS9UYWJsZVVuaXF1ZVwiXG5pbXBvcnQgeyBUYWJsZUNoZWNrIH0gZnJvbSBcIi4vdGFibGUvVGFibGVDaGVja1wiXG5pbXBvcnQgeyBUYWJsZUV4Y2x1c2lvbiB9IGZyb20gXCIuL3RhYmxlL1RhYmxlRXhjbHVzaW9uXCJcbmltcG9ydCB7IFZpZXcgfSBmcm9tIFwiLi92aWV3L1ZpZXdcIlxuaW1wb3J0IHsgVmlld1V0aWxzIH0gZnJvbSBcIi4vdXRpbC9WaWV3VXRpbHNcIlxuaW1wb3J0IHsgRHJpdmVyVXRpbHMgfSBmcm9tIFwiLi4vZHJpdmVyL0RyaXZlclV0aWxzXCJcblxuLyoqXG4gKiBDcmVhdGVzIGNvbXBsZXRlIHRhYmxlcyBzY2hlbWFzIGluIHRoZSBkYXRhYmFzZSBiYXNlZCBvbiB0aGUgZW50aXR5IG1ldGFkYXRhcy5cbiAqXG4gKiBTdGVwcyBob3cgc2NoZW1hIGlzIGJlaW5nIGJ1aWx0OlxuICogMS4gbG9hZCBsaXN0IG9mIGFsbCB0YWJsZXMgd2l0aCBjb21wbGV0ZSBjb2x1bW4gYW5kIGtleXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGJcbiAqIDIuIGRyb3AgYWxsIChvbGQpIGZvcmVpZ24ga2V5cyB0aGF0IGV4aXN0IGluIHRoZSB0YWJsZSwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBtZXRhZGF0YVxuICogMy4gY3JlYXRlIG5ldyB0YWJsZXMgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGIsIGJ1dCBleGlzdCBpbiB0aGUgbWV0YWRhdGFcbiAqIDQuIGRyb3AgYWxsIGNvbHVtbnMgZXhpc3QgKGxlZnQgb2xkKSBpbiB0aGUgZGIgdGFibGUsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWV0YWRhdGFcbiAqIDUuIGFkZCBjb2x1bW5zIGZyb20gbWV0YWRhdGEgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRhYmxlXG4gKiA2LiB1cGRhdGUgYWxsIGV4aXN0IGNvbHVtbnMgd2hpY2ggbWV0YWRhdGEgaGFzIGNoYW5nZWRcbiAqIDcuIHVwZGF0ZSBwcmltYXJ5IGtleXMgLSB1cGRhdGUgb2xkIGFuZCBjcmVhdGUgbmV3IHByaW1hcnkga2V5IGZyb20gY2hhbmdlZCBjb2x1bW5zXG4gKiA4LiBjcmVhdGUgZm9yZWlnbiBrZXlzIHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIHRoZSB0YWJsZSB5ZXRcbiAqIDkuIGNyZWF0ZSBpbmRpY2VzIHdoaWNoIGFyZSBtaXNzaW5nIGluIGRiIHlldCwgYW5kIGRyb3BzIGluZGljZXMgd2hpY2ggZXhpc3QgaW4gdGhlIGRiLCBidXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1ldGFkYXRhIGFueW1vcmVcbiAqL1xuZXhwb3J0IGNsYXNzIFJkYm1zU2NoZW1hQnVpbGRlciBpbXBsZW1lbnRzIFNjaGVtYUJ1aWxkZXIge1xuICAgIHJlYWRvbmx5IFwiQGluc3RhbmNlb2ZcIiA9IFN5bWJvbC5mb3IoXCJSZGJtc1NjaGVtYUJ1aWxkZXJcIilcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gZXhlY3V0ZSBzY2hlbWEgY3JlYXRpb24gcXVlcmllcyBpbiBhIHNpbmdsZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXJcblxuICAgIHByaXZhdGUgY3VycmVudERhdGFiYXNlPzogc3RyaW5nXG5cbiAgICBwcml2YXRlIGN1cnJlbnRTY2hlbWE/OiBzdHJpbmdcblxuXG5cblxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbm5lY3Rpb246IERhdGFTb3VyY2UpIHt9XG5cblxuXG5cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgY29tcGxldGUgc2NoZW1hcyBmb3IgdGhlIGdpdmVuIGVudGl0eSBtZXRhZGF0YXMuXG4gICAgICovXG4gICAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMucXVlcnlSdW5uZXIgPSB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlUXVlcnlSdW5uZXIoKVxuXG5cbiAgICAgICAgdGhpcy5jdXJyZW50RGF0YWJhc2UgPSB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLmRhdGFiYXNlXG4gICAgICAgIHRoaXMuY3VycmVudFNjaGVtYSA9IHRoaXMuY29ubmVjdGlvbi5kcml2ZXIuc2NoZW1hXG5cblxuXG5cblxuICAgICAgICBjb25zdCBpc1VzaW5nVHJhbnNhY3Rpb25zID1cbiAgICAgICAgICAgICEodGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwiY29ja3JvYWNoZGJcIikgJiZcbiAgICAgICAgICAgICEodGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwic3Bhbm5lclwiKSAmJlxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm9wdGlvbnMubWlncmF0aW9uc1RyYW5zYWN0aW9uTW9kZSAhPT0gXCJub25lXCJcblxuICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmJlZm9yZU1pZ3JhdGlvbigpXG5cbiAgICAgICAgaWYgKGlzVXNpbmdUcmFuc2FjdGlvbnMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuc3RhcnRUcmFuc2FjdGlvbigpXG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVNZXRhZGF0YVRhYmxlSWZOZWNlc3NhcnkodGhpcy5xdWVyeVJ1bm5lcilcblxuICAgICAgICAgICAgY29uc3QgdGFibGVQYXRocyA9IHRoaXMuZW50aXR5VG9TeW5jTWV0YWRhdGFzLm1hcCgobWV0YWRhdGEpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmdldFRhYmxlcyh0YWJsZVBhdGhzKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5nZXRWaWV3cyhbXSlcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlU2NoZW1hU3luY09wZXJhdGlvbnNJblByb3Blck9yZGVyKClcblxuXG4gICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnF1ZXJ5UmVzdWx0Q2FjaGUpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLnF1ZXJ5UmVzdWx0Q2FjaGUuc3luY2hyb25pemUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSdW5uZXIsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoaXNVc2luZ1RyYW5zYWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgIGlmIChpc1VzaW5nVHJhbnNhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocm9sbGJhY2tFcnJvcikge31cbiAgICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmFmdGVyTWlncmF0aW9uKClcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5yZWxlYXNlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSB0aGUgdHlwZW9ybV9tZXRhZGF0YSB0YWJsZSBpZiBuZWNlc3NhcnkuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlTWV0YWRhdGFUYWJsZUlmTmVjZXNzYXJ5KFxuICAgICAgICBxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudmlld0VudGl0eVRvU3luY01ldGFkYXRhcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLmhhc0dlbmVyYXRlZENvbHVtbnMoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlVHlwZW9ybU1ldGFkYXRhVGFibGUocXVlcnlSdW5uZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHNxbCBxdWVyaWVzIHRvIGJlIGV4ZWN1dGVkIGJ5IHNjaGVtYSBidWlsZGVyLlxuICAgICAqL1xuICAgIGFzeW5jIGxvZygpOiBQcm9taXNlPFNxbEluTWVtb3J5PiB7XG4gICAgICAgIHRoaXMucXVlcnlSdW5uZXIgPSB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlUXVlcnlSdW5uZXIoKVxuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICBjb25zdCB0YWJsZVBhdGhzID0gdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMubWFwKChtZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmdldFRhYmxlcyh0YWJsZVBhdGhzKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5nZXRWaWV3cyhbXSlcblxuICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lci5lbmFibGVTcWxNZW1vcnkoKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlU2NoZW1hU3luY09wZXJhdGlvbnNJblByb3Blck9yZGVyKClcblxuXG4gICAgICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnF1ZXJ5UmVzdWx0Q2FjaGUpXG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24ucXVlcnlSZXN1bHRDYWNoZS5zeW5jaHJvbml6ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lcixcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UnVubmVyLmdldE1lbW9yeVNxbCgpXG4gICAgICAgIH0gZmluYWxseSB7XG5cblxuXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyLmRpc2FibGVTcWxNZW1vcnkoKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5yZWxlYXNlKClcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBvbmx5IGVudGl0aWVzIHRoYXQgc2hvdWxkIGJlIHN5bmNlZCBpbiB0aGUgZGF0YWJhc2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldCBlbnRpdHlUb1N5bmNNZXRhZGF0YXMoKTogRW50aXR5TWV0YWRhdGFbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24uZW50aXR5TWV0YWRhdGFzLmZpbHRlcihcbiAgICAgICAgICAgIChtZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5zeW5jaHJvbml6ZSAmJlxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLnRhYmxlVHlwZSAhPT0gXCJlbnRpdHktY2hpbGRcIiAmJlxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLnRhYmxlVHlwZSAhPT0gXCJ2aWV3XCIsXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIG9ubHkgZW50aXRpZXMgdGhhdCBzaG91bGQgYmUgc3luY2VkIGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IHZpZXdFbnRpdHlUb1N5bmNNZXRhZGF0YXMoKTogRW50aXR5TWV0YWRhdGFbXSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZW50aXR5TWV0YWRhdGFzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKG1ldGFkYXRhKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudGFibGVUeXBlID09PSBcInZpZXdcIiAmJiBtZXRhZGF0YS5zeW5jaHJvbml6ZSxcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAuc29ydChWaWV3VXRpbHMudmlld01ldGFkYXRhQ21wKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCBvbmUgZ2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaGFzR2VuZXJhdGVkQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5lbnRpdHlNZXRhZGF0YXMuc29tZSgoZW50aXR5TWV0YWRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbnRpdHlNZXRhZGF0YS5jb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmdlbmVyYXRlZFR5cGUpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgc2NoZW1hIHN5bmMgb3BlcmF0aW9ucyBpbiBhIHByb3BlciBvcmRlci5cbiAgICAgKiBPcmRlciBvZiBvcGVyYXRpb25zIG1hdHRlciBoZXJlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBleGVjdXRlU2NoZW1hU3luY09wZXJhdGlvbnNJblByb3Blck9yZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmRyb3BPbGRWaWV3cygpXG4gICAgICAgIGF3YWl0IHRoaXMuZHJvcE9sZEZvcmVpZ25LZXlzKClcbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wT2xkSW5kaWNlcygpXG4gICAgICAgIGF3YWl0IHRoaXMuZHJvcE9sZENoZWNrcygpXG4gICAgICAgIGF3YWl0IHRoaXMuZHJvcE9sZEV4Y2x1c2lvbnMoKVxuICAgICAgICBhd2FpdCB0aGlzLmRyb3BDb21wb3NpdGVVbmlxdWVDb25zdHJhaW50cygpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZW5hbWVDb2x1bW5zKClcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVOZXdUYWJsZXMoKVxuICAgICAgICBhd2FpdCB0aGlzLmRyb3BSZW1vdmVkQ29sdW1ucygpXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkTmV3Q29sdW1ucygpXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUHJpbWFyeUtleXMoKVxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUV4aXN0Q29sdW1ucygpXG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTmV3SW5kaWNlcygpXG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTmV3Q2hlY2tzKClcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVOZXdFeGNsdXNpb25zKClcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVDb21wb3NpdGVVbmlxdWVDb25zdHJhaW50cygpXG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRm9yZWlnbktleXMoKVxuICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVZpZXdzKClcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhYmxlUGF0aChcbiAgICAgICAgdGFyZ2V0OiBFbnRpdHlNZXRhZGF0YSB8IFRhYmxlIHwgVmlldyB8IFRhYmxlRm9yZWlnbktleSB8IHN0cmluZyxcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLnBhcnNlVGFibGVOYW1lKHRhcmdldClcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLmRyaXZlci5idWlsZFRhYmxlTmFtZShcbiAgICAgICAgICAgIHBhcnNlZC50YWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJzZWQuc2NoZW1hIHx8IHRoaXMuY3VycmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcnNlZC5kYXRhYmFzZSB8fCB0aGlzLmN1cnJlbnREYXRhYmFzZSxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGFsbCAob2xkKSBmb3JlaWduIGtleXMgdGhhdCBleGlzdCBpbiB0aGUgdGFibGVzLCBidXQgZG8gbm90IGV4aXN0IGluIHRoZSBlbnRpdHkgbWV0YWRhdGEuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGRyb3BPbGRGb3JlaWduS2V5cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBtZXRhZGF0YSBvZiB0aGlzLmVudGl0eVRvU3luY01ldGFkYXRhcykge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcy5maW5kKFxuICAgICAgICAgICAgICAgICh0YWJsZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgodGFibGUpID09PSB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoIXRhYmxlKSBjb250aW51ZVxuXG5cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlRm9yZWlnbktleXNUb0Ryb3AgPSB0YWJsZS5mb3JlaWduS2V5cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHRhYmxlRm9yZWlnbktleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhZGF0YUZLID0gbWV0YWRhdGEuZm9yZWlnbktleXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChtZXRhZGF0YUZvcmVpZ25LZXkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVGb3JlaWduS2V5Lm5hbWUgPT09IG1ldGFkYXRhRm9yZWlnbktleS5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgodGFibGVGb3JlaWduS2V5KSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YUZvcmVpZ25LZXkucmVmZXJlbmNlZEVudGl0eU1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhbWV0YWRhdGFGSyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGFkYXRhRksub25EZWxldGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YUZLLm9uRGVsZXRlICE9PSB0YWJsZUZvcmVpZ25LZXkub25EZWxldGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobWV0YWRhdGFGSy5vblVwZGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhRksub25VcGRhdGUgIT09IHRhYmxlRm9yZWlnbktleS5vblVwZGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAodGFibGVGb3JlaWduS2V5c1RvRHJvcC5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgYGRyb3BwaW5nIG9sZCBmb3JlaWduIGtleXMgb2YgJHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUubmFtZVxuICAgICAgICAgICAgICAgIH06ICR7dGFibGVGb3JlaWduS2V5c1RvRHJvcFxuICAgICAgICAgICAgICAgICAgICAubWFwKChkYkZvcmVpZ25LZXkpID0+IGRiRm9yZWlnbktleS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5kcm9wRm9yZWlnbktleXMoXG4gICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAgICAgdGFibGVGb3JlaWduS2V5c1RvRHJvcCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbmFtZSB0YWJsZXNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgcmVuYW1lVGFibGVzKCk6IFByb21pc2U8dm9pZD4ge1xuXG5cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbmFtZXMgY29sdW1ucy5cbiAgICAgKiBXb3JrcyBpZiBvbmx5IG9uZSBjb2x1bW4gcGVyIHRhYmxlIHdhcyBjaGFuZ2VkLlxuICAgICAqIENoYW5nZXMgb25seSBjb2x1bW4gbmFtZS4gSWYgc29tZXRoaW5nIGJlc2lkZXMgbmFtZSB3YXMgY2hhbmdlZCwgdGhlc2UgY2hhbmdlcyB3aWxsIGJlIGlnbm9yZWQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIHJlbmFtZUNvbHVtbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmNvbHVtbnMubGVuZ3RoICE9PSB0YWJsZS5jb2x1bW5zLmxlbmd0aCkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgcmVuYW1lZE1ldGFkYXRhQ29sdW1ucyA9IG1ldGFkYXRhLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjKSA9PiAhYy5pc1ZpcnR1YWxQcm9wZXJ0eSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0YWJsZS5jb2x1bW5zLmZpbmQoKHRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5kYXRhYmFzZU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi50eXBlID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLm5vcm1hbGl6ZVR5cGUoY29sdW1uKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmlzTnVsbGFibGUgPT09IGNvbHVtbi5pc051bGxhYmxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uaXNVbmlxdWUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIubm9ybWFsaXplSXNVbmlxdWUoY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZW5hbWVkTWV0YWRhdGFDb2x1bW5zLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgICAgIHJlbmFtZWRNZXRhZGF0YUNvbHVtbnMubGVuZ3RoID4gMVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRUYWJsZUNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcigodGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIW1ldGFkYXRhLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhY29sdW1uLmlzVmlydHVhbFByb3BlcnR5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGF0YWJhc2VOYW1lID09PSB0YWJsZUNvbHVtbi5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLm5vcm1hbGl6ZVR5cGUoY29sdW1uKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi50eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaXNOdWxsYWJsZSA9PT0gdGFibGVDb2x1bW4uaXNOdWxsYWJsZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRyaXZlci5ub3JtYWxpemVJc1VuaXF1ZShjb2x1bW4pID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmlzVW5pcXVlXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlbmFtZWRUYWJsZUNvbHVtbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICAgcmVuYW1lZFRhYmxlQ29sdW1ucy5sZW5ndGggPiAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgcmVuYW1lZENvbHVtbiA9IHJlbmFtZWRUYWJsZUNvbHVtbnNbMF0uY2xvbmUoKVxuICAgICAgICAgICAgcmVuYW1lZENvbHVtbi5uYW1lID0gcmVuYW1lZE1ldGFkYXRhQ29sdW1uc1swXS5kYXRhYmFzZU5hbWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgcmVuYW1pbmcgY29sdW1uIFwiJHtyZW5hbWVkVGFibGVDb2x1bW5zWzBdLm5hbWV9XCIgaW4gdG8gXCIke3JlbmFtZWRDb2x1bW4ubmFtZX1cImAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLnJlbmFtZUNvbHVtbihcbiAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICByZW5hbWVkVGFibGVDb2x1bW5zWzBdLFxuICAgICAgICAgICAgICAgIHJlbmFtZWRDb2x1bW4sXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZHJvcE9sZEluZGljZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgZHJvcFF1ZXJpZXMgPSB0YWJsZS5pbmRpY2VzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodGFibGVJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleE1ldGFkYXRhID0gbWV0YWRhdGEuaW5kaWNlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGluZGV4KSA9PiBpbmRleC5uYW1lID09PSB0YWJsZUluZGV4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleE1ldGFkYXRhLnN5bmNocm9uaXplID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleE1ldGFkYXRhLmlzVW5pcXVlICE9PSB0YWJsZUluZGV4LmlzVW5pcXVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleE1ldGFkYXRhLmlzU3BhdGlhbCAhPT0gdGFibGVJbmRleC5pc1NwYXRpYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIuaXNGdWxsVGV4dENvbHVtblR5cGVTdXBwb3J0ZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4TWV0YWRhdGEuaXNGdWxsdGV4dCAhPT0gdGFibGVJbmRleC5pc0Z1bGx0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4TWV0YWRhdGEuY29sdW1ucy5sZW5ndGggIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVJbmRleC5jb2x1bW5OYW1lcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWluZGV4TWV0YWRhdGEuY29sdW1ucy5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUluZGV4LmNvbHVtbk5hbWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICE9PSAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAubWFwKGFzeW5jICh0YWJsZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBgZHJvcHBpbmcgYW4gaW5kZXg6IFwiJHt0YWJsZUluZGV4Lm5hbWV9XCIgZnJvbSB0YWJsZSAke3RhYmxlLm5hbWV9YCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmRyb3BJbmRleCh0YWJsZSwgdGFibGVJbmRleClcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChkcm9wUXVlcmllcylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBkcm9wT2xkQ2hlY2tzKCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIERyaXZlclV0aWxzLmlzTXlTUUxGYW1pbHkodGhpcy5jb25uZWN0aW9uLmRyaXZlcikgfHxcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIub3B0aW9ucy50eXBlID09PSBcImF1cm9yYS1teXNxbFwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3Qgb2xkQ2hlY2tzID0gdGFibGUuY2hlY2tzLmZpbHRlcigodGFibGVDaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbWV0YWRhdGEuY2hlY2tzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChjaGVja01ldGFkYXRhKSA9PiBjaGVja01ldGFkYXRhLm5hbWUgPT09IHRhYmxlQ2hlY2submFtZSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAob2xkQ2hlY2tzLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgZHJvcHBpbmcgb2xkIGNoZWNrIGNvbnN0cmFpbnQ6ICR7b2xkQ2hlY2tzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNoZWNrKSA9PiBgXCIke2NoZWNrLm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSBmcm9tIHRhYmxlIFwiJHt0YWJsZS5uYW1lfVwiYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuZHJvcENoZWNrQ29uc3RyYWludHModGFibGUsIG9sZENoZWNrcylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBkcm9wQ29tcG9zaXRlVW5pcXVlQ29uc3RyYWludHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgY29tcG9zaXRlVW5pcXVlcyA9IHRhYmxlLnVuaXF1ZXMuZmlsdGVyKCh0YWJsZVVuaXF1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlVW5pcXVlLmNvbHVtbk5hbWVzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgIW1ldGFkYXRhLnVuaXF1ZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh1bmlxdWVNZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVNZXRhZGF0YS5uYW1lID09PSB0YWJsZVVuaXF1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZVVuaXF1ZXMubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubG9nZ2VyLmxvZ1NjaGVtYUJ1aWxkKFxuICAgICAgICAgICAgICAgIGBkcm9wcGluZyBvbGQgdW5pcXVlIGNvbnN0cmFpbnQ6ICR7Y29tcG9zaXRlVW5pcXVlc1xuICAgICAgICAgICAgICAgICAgICAubWFwKCh1bmlxdWUpID0+IGBcIiR7dW5pcXVlLm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSBmcm9tIHRhYmxlIFwiJHt0YWJsZS5uYW1lfVwiYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuZHJvcFVuaXF1ZUNvbnN0cmFpbnRzKFxuICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVVuaXF1ZXMsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZHJvcE9sZEV4Y2x1c2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICAgICAgaWYgKCEodGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwicG9zdGdyZXNcIikpIHJldHVyblxuXG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3Qgb2xkRXhjbHVzaW9ucyA9IHRhYmxlLmV4Y2x1c2lvbnMuZmlsdGVyKCh0YWJsZUV4Y2x1c2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbWV0YWRhdGEuZXhjbHVzaW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoZXhjbHVzaW9uTWV0YWRhdGEpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBleGNsdXNpb25NZXRhZGF0YS5uYW1lID09PSB0YWJsZUV4Y2x1c2lvbi5uYW1lLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChvbGRFeGNsdXNpb25zLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgZHJvcHBpbmcgb2xkIGV4Y2x1c2lvbiBjb25zdHJhaW50OiAke29sZEV4Y2x1c2lvbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhjbHVzaW9uKSA9PiBgXCIke2V4Y2x1c2lvbi5uYW1lfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gZnJvbSB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmRyb3BFeGNsdXNpb25Db25zdHJhaW50cyhcbiAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICBvbGRFeGNsdXNpb25zLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0YWJsZXMgdGhhdCBkbyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC5cbiAgICAgKiBOZXcgdGFibGVzIGFyZSBjcmVhdGVkIHdpdGhvdXQgZm9yZWlnbiBhbmQgcHJpbWFyeSBrZXlzLlxuICAgICAqIFByaW1hcnkga2V5IG9ubHkgY2FuIGJlIGNyZWF0ZWQgaW4gY29uY2x1c2lvbiB3aXRoIGF1dG8gZ2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTmV3VGFibGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGFkYXRhIG9mIHRoaXMuZW50aXR5VG9TeW5jTWV0YWRhdGFzKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGV4aXN0VGFibGUgPSB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcy5maW5kKFxuICAgICAgICAgICAgICAgICh0YWJsZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgodGFibGUpID09PSB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoZXhpc3RUYWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgY3JlYXRpbmcgYSBuZXcgdGFibGU6ICR7dGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpfWAsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgY29uc3QgdGFibGUgPSBUYWJsZS5jcmVhdGUobWV0YWRhdGEsIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmNyZWF0ZVRhYmxlKHRhYmxlLCBmYWxzZSwgZmFsc2UpXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcy5wdXNoKHRhYmxlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVZpZXdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGFkYXRhIG9mIHRoaXMudmlld0VudGl0eVRvU3luY01ldGFkYXRhcykge1xuXG4gICAgICAgICAgICBjb25zdCBleGlzdFZpZXcgPSB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFZpZXdzLmZpbmQoKHZpZXcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3RXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2aWV3LmV4cHJlc3Npb24gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmlldy5leHByZXNzaW9uLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2aWV3LmV4cHJlc3Npb24odGhpcy5jb25uZWN0aW9uKS5nZXRRdWVyeSgpXG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFFeHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1ldGFkYXRhLmV4cHJlc3Npb24gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbWV0YWRhdGEuZXhwcmVzc2lvbi50cmltKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbWV0YWRhdGEuZXhwcmVzc2lvbiEodGhpcy5jb25uZWN0aW9uKS5nZXRRdWVyeSgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgodmlldykgPT09IHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSAmJlxuICAgICAgICAgICAgICAgICAgICB2aWV3RXhwcmVzc2lvbiA9PT0gbWV0YWRhdGFFeHByZXNzaW9uXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmIChleGlzdFZpZXcpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgYGNyZWF0aW5nIGEgbmV3IHZpZXc6ICR7dGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpfWAsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgY29uc3QgdmlldyA9IFZpZXcuY3JlYXRlKG1ldGFkYXRhLCB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5jcmVhdGVWaWV3KHZpZXcsIHRydWUpXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFZpZXdzLnB1c2godmlldylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBkcm9wT2xkVmlld3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGRyb3BwZWRWaWV3czogQXJyYXk8Vmlldz4gPSBbXVxuICAgICAgICBjb25zdCB2aWV3RW50aXR5VG9TeW5jTWV0YWRhdGFzID0gdGhpcy52aWV3RW50aXR5VG9TeW5jTWV0YWRhdGFzXG5cbiAgICAgICAgY29uc3Qgdmlld1RvTWV0YWRhdGEgPSBuZXcgTWFwPFZpZXcsIEVudGl0eU1ldGFkYXRhPigpXG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFZpZXdzKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3TWV0YWRhdGEgPSB2aWV3RW50aXR5VG9TeW5jTWV0YWRhdGFzLmZpbmQoKG1ldGFkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFibGVQYXRoKHZpZXcpID09PSB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZiAodmlld01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdmlld1RvTWV0YWRhdGEuc2V0KHZpZXcsIHZpZXdNZXRhZGF0YSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFZpZXdzKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3TWV0YWRhdGEgPSB2aWV3VG9NZXRhZGF0YS5nZXQodmlldylcbiAgICAgICAgICAgIGlmICghdmlld01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZpZXdFeHByZXNzaW9uID1cbiAgICAgICAgICAgICAgICB0eXBlb2Ygdmlldy5leHByZXNzaW9uID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgID8gdmlldy5leHByZXNzaW9uLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICA6IHZpZXcuZXhwcmVzc2lvbih0aGlzLmNvbm5lY3Rpb24pLmdldFF1ZXJ5KClcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhRXhwcmVzc2lvbiA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHZpZXdNZXRhZGF0YS5leHByZXNzaW9uID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgID8gdmlld01ldGFkYXRhLmV4cHJlc3Npb24udHJpbSgpXG4gICAgICAgICAgICAgICAgICAgIDogdmlld01ldGFkYXRhLmV4cHJlc3Npb24hKHRoaXMuY29ubmVjdGlvbikuZ2V0UXVlcnkoKVxuXG4gICAgICAgICAgICBpZiAodmlld0V4cHJlc3Npb24gPT09IG1ldGFkYXRhRXhwcmVzc2lvbikgY29udGludWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgZHJvcHBpbmcgYW4gb2xkIHZpZXc6ICR7dmlldy5uYW1lfWAsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgZHJvcHBlZFZpZXdzLnB1c2godmlldylcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3Qgdmlld0RlcGVuZGVuY3lDaGFpbiA9ICh2aWV3OiBWaWV3KTogVmlld1tdID0+IHtcblxuICAgICAgICAgICAgY29uc3Qgdmlld01ldGFkYXRhID0gdmlld1RvTWV0YWRhdGEuZ2V0KHZpZXcpXG4gICAgICAgICAgICBsZXQgdmlld1dpdGhEZXBlbmRlbmNpZXMgPSBbdmlld11cblxuICAgICAgICAgICAgaWYgKCF2aWV3TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlld1dpdGhEZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBbXG4gICAgICAgICAgICAgICAgY3VycmVudFZpZXcsXG4gICAgICAgICAgICAgICAgY3VycmVudE1ldGFkYXRhLFxuICAgICAgICAgICAgXSBvZiB2aWV3VG9NZXRhZGF0YS5lbnRyaWVzKCkpIHtcblxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmlldyA9PT0gdmlldykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1ldGFkYXRhLmRlcGVuZHNPbiAmJlxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudE1ldGFkYXRhLmRlcGVuZHNPbi5oYXModmlld01ldGFkYXRhLnRhcmdldCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNZXRhZGF0YS5kZXBlbmRzT24uaGFzKHZpZXdNZXRhZGF0YS5uYW1lKSlcbiAgICAgICAgICAgICAgICApIHtcblxuICAgICAgICAgICAgICAgICAgICB2aWV3V2l0aERlcGVuZGVuY2llcyA9IHZpZXdXaXRoRGVwZW5kZW5jaWVzLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdEZXBlbmRlbmN5Q2hhaW4oY3VycmVudFZpZXcpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmlld1dpdGhEZXBlbmRlbmNpZXNcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgZHJvcHBlZFZpZXdzV2l0aERlcGVuZGVuY2llczogU2V0PFZpZXc+ID0gbmV3IFNldChcblxuICAgICAgICAgICAgZHJvcHBlZFZpZXdzXG4gICAgICAgICAgICAgICAgLm1hcCgodmlldykgPT4gdmlld0RlcGVuZGVuY3lDaGFpbih2aWV3KSlcblxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKGFsbCwgc2VnbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsLmNvbmNhdChzZWdtZW50KVxuICAgICAgICAgICAgICAgIH0sIFtdKVxuXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpZXdVdGlscy52aWV3TWV0YWRhdGFDbXAoXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3VG9NZXRhZGF0YS5nZXQoYSksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3VG9NZXRhZGF0YS5nZXQoYiksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKSxcbiAgICAgICAgKVxuXG5cbiAgICAgICAgZm9yIChjb25zdCB2aWV3IG9mIGRyb3BwZWRWaWV3c1dpdGhEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuZHJvcFZpZXcodmlldylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFZpZXdzID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRWaWV3cy5maWx0ZXIoXG4gICAgICAgICAgICAodmlldykgPT4gIWRyb3BwZWRWaWV3c1dpdGhEZXBlbmRlbmNpZXMuaGFzKHZpZXcpLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYWxsIGNvbHVtbnMgdGhhdCBleGlzdCBpbiB0aGUgdGFibGUsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWV0YWRhdGEgKGxlZnQgb2xkKS5cbiAgICAgKiBXZSBkcm9wIHRoZWlyIGtleXMgdG9vLCBzaW5jZSBpdCBzaG91bGQgYmUgc2FmZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZHJvcFJlbW92ZWRDb2x1bW5zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGFkYXRhIG9mIHRoaXMuZW50aXR5VG9TeW5jTWV0YWRhdGFzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlSdW5uZXIubG9hZGVkVGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHRhYmxlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aCh0YWJsZSkgPT09IHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmICghdGFibGUpIGNvbnRpbnVlXG5cblxuICAgICAgICAgICAgY29uc3QgZHJvcHBlZFRhYmxlQ29sdW1ucyA9IHRhYmxlLmNvbHVtbnMuZmlsdGVyKCh0YWJsZUNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbWV0YWRhdGEuY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoY29sdW1uTWV0YWRhdGEpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZXRhZGF0YS5pc1ZpcnR1YWxQcm9wZXJ0eSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTWV0YWRhdGEuZGF0YWJhc2VOYW1lID09PSB0YWJsZUNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZiAoZHJvcHBlZFRhYmxlQ29sdW1ucy5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgYGNvbHVtbnMgZHJvcHBlZCBpbiAke3RhYmxlLm5hbWV9OiBgICtcbiAgICAgICAgICAgICAgICAgICAgZHJvcHBlZFRhYmxlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmRyb3BDb2x1bW5zKHRhYmxlLCBkcm9wcGVkVGFibGVDb2x1bW5zKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBjb2x1bW5zIGZyb20gbWV0YWRhdGEgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gdGhlIHRhYmxlLlxuICAgICAqIENvbHVtbnMgYXJlIGNyZWF0ZWQgd2l0aG91dCBrZXlzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBhZGROZXdDb2x1bW5zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGFkYXRhIG9mIHRoaXMuZW50aXR5VG9TeW5jTWV0YWRhdGFzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlSdW5uZXIubG9hZGVkVGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHRhYmxlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aCh0YWJsZSkgPT09IHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmICghdGFibGUpIGNvbnRpbnVlXG5cblxuICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1uTWV0YWRhdGFzID0gbWV0YWRhdGEuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNvbHVtbk1ldGFkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhY29sdW1uTWV0YWRhdGEuaXNWaXJ0dWFsUHJvcGVydHkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0YWJsZS5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlQ29sdW1uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5uYW1lID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZXRhZGF0YS5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKG5ld0NvbHVtbk1ldGFkYXRhcy5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cblxuICAgICAgICAgICAgY29uc3QgbmV3VGFibGVDb2x1bW5PcHRpb25zID1cbiAgICAgICAgICAgICAgICB0aGlzLm1ldGFkYXRhQ29sdW1uc1RvVGFibGVDb2x1bW5PcHRpb25zKG5ld0NvbHVtbk1ldGFkYXRhcylcbiAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1ucyA9IG5ld1RhYmxlQ29sdW1uT3B0aW9ucy5tYXAoXG4gICAgICAgICAgICAgICAgKG9wdGlvbikgPT4gbmV3IFRhYmxlQ29sdW1uKG9wdGlvbiksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChuZXdUYWJsZUNvbHVtbnMubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubG9nZ2VyLmxvZ1NjaGVtYUJ1aWxkKFxuICAgICAgICAgICAgICAgIGBuZXcgY29sdW1ucyBhZGRlZDogYCArXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbk1ldGFkYXRhc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZGF0YWJhc2VOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuYWRkQ29sdW1ucyh0YWJsZSwgbmV3VGFibGVDb2x1bW5zKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBjb21wb3NpdGUgcHJpbWFyeSBrZXlzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyB1cGRhdGVQcmltYXJ5S2V5cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBtZXRhZGF0YSBvZiB0aGlzLmVudGl0eVRvU3luY01ldGFkYXRhcykge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcy5maW5kKFxuICAgICAgICAgICAgICAgICh0YWJsZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgodGFibGUpID09PSB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoIXRhYmxlKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBwcmltYXJ5TWV0YWRhdGFDb2x1bW5zID0gbWV0YWRhdGEuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmlzUHJpbWFyeSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IHByaW1hcnlUYWJsZUNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uaXNQcmltYXJ5LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHByaW1hcnlUYWJsZUNvbHVtbnMubGVuZ3RoICE9PSBwcmltYXJ5TWV0YWRhdGFDb2x1bW5zLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIHByaW1hcnlNZXRhZGF0YUNvbHVtbnMubGVuZ3RoID4gMVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZFByaW1hcnlDb2x1bW5zID0gcHJpbWFyeU1ldGFkYXRhQ29sdW1ucy5tYXAoXG4gICAgICAgICAgICAgICAgICAgIChwcmltYXJ5TWV0YWRhdGFDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVDb2x1bW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVVdGlscy5jcmVhdGVUYWJsZUNvbHVtbk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlNZXRhZGF0YUNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRyaXZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLnVwZGF0ZVByaW1hcnlLZXlzKFxuICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByaW1hcnlDb2x1bW5zLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbGwgZXhpc3QgY29sdW1ucyB3aGljaCBtZXRhZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgKiBTdGlsbCBkb24ndCBjcmVhdGUga2V5cy4gQWxzbyB3ZSBkb24ndCB0b3VjaCBmb3JlaWduIGtleXMgb2YgdGhlIGNoYW5nZWQgY29sdW1ucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgdXBkYXRlRXhpc3RDb2x1bW5zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IG1ldGFkYXRhIG9mIHRoaXMuZW50aXR5VG9TeW5jTWV0YWRhdGFzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlSdW5uZXIubG9hZGVkVGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHRhYmxlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aCh0YWJsZSkgPT09IHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmICghdGFibGUpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRDb2x1bW5zID0gdGhpcy5jb25uZWN0aW9uLmRyaXZlci5maW5kQ2hhbmdlZENvbHVtbnMoXG4gICAgICAgICAgICAgICAgdGFibGUuY29sdW1ucyxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YS5jb2x1bW5zLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKGNoYW5nZWRDb2x1bW5zLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZWRDb2x1bW4gb2YgY2hhbmdlZENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyb3BDb2x1bW5SZWZlcmVuY2VkRm9yZWlnbktleXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZENvbHVtbi5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbmdlZENvbHVtbiBvZiBjaGFuZ2VkQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJvcENvbHVtbkNvbXBvc2l0ZUluZGljZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZENvbHVtbi5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG5cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIERyaXZlclV0aWxzLmlzTXlTUUxGYW1pbHkodGhpcy5jb25uZWN0aW9uLmRyaXZlcikgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwiYXVyb3JhLW15c3FsXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwic3Bhbm5lclwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2VkQ29sdW1uIG9mIGNoYW5nZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJvcENvbHVtbkNvbXBvc2l0ZVVuaXF1ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBjb25zdCBuZXdBbmRPbGRUYWJsZUNvbHVtbnMgPSBjaGFuZ2VkQ29sdW1ucy5tYXAoXG4gICAgICAgICAgICAgICAgKGNoYW5nZWRDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2xkVGFibGVDb2x1bW4gPSB0YWJsZS5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gY2hhbmdlZENvbHVtbi5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICkhXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1uT3B0aW9ucyA9XG4gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZVV0aWxzLmNyZWF0ZVRhYmxlQ29sdW1uT3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFibGVDb2x1bW5PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZENvbHVtbjogb2xkVGFibGVDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW46IG5ld1RhYmxlQ29sdW1uLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKG5ld0FuZE9sZFRhYmxlQ29sdW1ucy5sZW5ndGggPT09IDApIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgYGNvbHVtbnMgY2hhbmdlZCBpbiBcIiR7dGFibGUubmFtZX1cIi4gdXBkYXRpbmc6IGAgK1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZGF0YWJhc2VOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuY2hhbmdlQ29sdW1ucyh0YWJsZSwgbmV3QW5kT2xkVGFibGVDb2x1bW5zKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBjb21wb3NpdGUgaW5kaWNlcyB3aGljaCBhcmUgbWlzc2luZyBpbiBkYiB5ZXQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZU5ld0luZGljZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgbmV3SW5kaWNlcyA9IG1ldGFkYXRhLmluZGljZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoaW5kZXhNZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICF0YWJsZS5pbmRpY2VzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlSW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlSW5kZXgubmFtZSA9PT0gaW5kZXhNZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiBpbmRleE1ldGFkYXRhLnN5bmNocm9uaXplID09PSB0cnVlLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChpbmRleE1ldGFkYXRhKSA9PiBUYWJsZUluZGV4LmNyZWF0ZShpbmRleE1ldGFkYXRhKSlcblxuICAgICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubG9nZ2VyLmxvZ1NjaGVtYUJ1aWxkKFxuICAgICAgICAgICAgICAgIGBhZGRpbmcgbmV3IGluZGljZXMgJHtuZXdJbmRpY2VzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGluZGV4KSA9PiBgXCIke2luZGV4Lm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSBpbiB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmNyZWF0ZUluZGljZXModGFibGUsIG5ld0luZGljZXMpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTmV3Q2hlY2tzKCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIERyaXZlclV0aWxzLmlzTXlTUUxGYW1pbHkodGhpcy5jb25uZWN0aW9uLmRyaXZlcikgfHxcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIub3B0aW9ucy50eXBlID09PSBcImF1cm9yYS1teXNxbFwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVyblxuXG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgbmV3Q2hlY2tzID0gbWV0YWRhdGEuY2hlY2tzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGNoZWNrTWV0YWRhdGEpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhdGFibGUuY2hlY2tzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlQ2hlY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ2hlY2submFtZSA9PT0gY2hlY2tNZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCgoY2hlY2tNZXRhZGF0YSkgPT4gVGFibGVDaGVjay5jcmVhdGUoY2hlY2tNZXRhZGF0YSkpXG5cbiAgICAgICAgICAgIGlmIChuZXdDaGVja3MubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubG9nZ2VyLmxvZ1NjaGVtYUJ1aWxkKFxuICAgICAgICAgICAgICAgIGBhZGRpbmcgbmV3IGNoZWNrIGNvbnN0cmFpbnRzOiAke25ld0NoZWNrc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChpbmRleCkgPT4gYFwiJHtpbmRleC5uYW1lfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gaW4gdGFibGUgXCIke3RhYmxlLm5hbWV9XCJgLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5jcmVhdGVDaGVja0NvbnN0cmFpbnRzKHRhYmxlLCBuZXdDaGVja3MpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGNvbXBvc2l0ZSB1bmlxdWVzIHdoaWNoIGFyZSBtaXNzaW5nIGluIGRiIHlldC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlQ29tcG9zaXRlVW5pcXVlQ29uc3RyYWludHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgdGhpcy5lbnRpdHlUb1N5bmNNZXRhZGF0YXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICAgICAodGFibGUpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGhpcy5nZXRUYWJsZVBhdGgobWV0YWRhdGEpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKCF0YWJsZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgY29tcG9zaXRlVW5pcXVlcyA9IG1ldGFkYXRhLnVuaXF1ZXNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAodW5pcXVlTWV0YWRhdGEpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVNZXRhZGF0YS5jb2x1bW5zLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0YWJsZS51bmlxdWVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlVW5pcXVlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVVuaXF1ZS5uYW1lID09PSB1bmlxdWVNZXRhZGF0YS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCgodW5pcXVlTWV0YWRhdGEpID0+IFRhYmxlVW5pcXVlLmNyZWF0ZSh1bmlxdWVNZXRhZGF0YSkpXG5cbiAgICAgICAgICAgIGlmIChjb21wb3NpdGVVbmlxdWVzLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgYWRkaW5nIG5ldyB1bmlxdWUgY29uc3RyYWludHM6ICR7Y29tcG9zaXRlVW5pcXVlc1xuICAgICAgICAgICAgICAgICAgICAubWFwKCh1bmlxdWUpID0+IGBcIiR7dW5pcXVlLm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSBpbiB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmNyZWF0ZVVuaXF1ZUNvbnN0cmFpbnRzKFxuICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVVuaXF1ZXMsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGV4Y2x1c2lvbnMgd2hpY2ggYXJlIG1pc3NpbmcgaW4gZGIgeWV0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVOZXdFeGNsdXNpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuXG4gICAgICAgIGlmICghKHRoaXMuY29ubmVjdGlvbi5kcml2ZXIub3B0aW9ucy50eXBlID09PSBcInBvc3RncmVzXCIpKSByZXR1cm5cblxuICAgICAgICBmb3IgKGNvbnN0IG1ldGFkYXRhIG9mIHRoaXMuZW50aXR5VG9TeW5jTWV0YWRhdGFzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlSdW5uZXIubG9hZGVkVGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHRhYmxlKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aCh0YWJsZSkgPT09IHRoaXMuZ2V0VGFibGVQYXRoKG1ldGFkYXRhKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmICghdGFibGUpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0V4Y2x1c2lvbnMgPSBtZXRhZGF0YS5leGNsdXNpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGV4Y2x1c2lvbk1ldGFkYXRhKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhYmxlLmV4Y2x1c2lvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVFeGNsdXNpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRXhjbHVzaW9uLm5hbWUgPT09IGV4Y2x1c2lvbk1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChleGNsdXNpb25NZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICAgICAgVGFibGVFeGNsdXNpb24uY3JlYXRlKGV4Y2x1c2lvbk1ldGFkYXRhKSxcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChuZXdFeGNsdXNpb25zLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgICAgICBgYWRkaW5nIG5ldyBleGNsdXNpb24gY29uc3RyYWludHM6ICR7bmV3RXhjbHVzaW9uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChleGNsdXNpb24pID0+IGBcIiR7ZXhjbHVzaW9uLm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSBpbiB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmNyZWF0ZUV4Y2x1c2lvbkNvbnN0cmFpbnRzKFxuICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgIG5ld0V4Y2x1c2lvbnMsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGZvcmVpZ24ga2V5cyB3aGljaCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgdGFibGUgeWV0LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBjcmVhdGVGb3JlaWduS2V5cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBtZXRhZGF0YSBvZiB0aGlzLmVudGl0eVRvU3luY01ldGFkYXRhcykge1xuICAgICAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcy5maW5kKFxuICAgICAgICAgICAgICAgICh0YWJsZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgodGFibGUpID09PSB0aGlzLmdldFRhYmxlUGF0aChtZXRhZGF0YSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoIXRhYmxlKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBuZXdLZXlzID0gbWV0YWRhdGEuZm9yZWlnbktleXMuZmlsdGVyKChmb3JlaWduS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0YWJsZS5mb3JlaWduS2V5cy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoZGJGb3JlaWduS2V5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZGJGb3JlaWduS2V5Lm5hbWUgPT09IGZvcmVpZ25LZXkubmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZGJGb3JlaWduS2V5KSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5yZWZlcmVuY2VkRW50aXR5TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKG5ld0tleXMubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBkYkZvcmVpZ25LZXlzID0gbmV3S2V5cy5tYXAoKGZvcmVpZ25LZXlNZXRhZGF0YSkgPT5cbiAgICAgICAgICAgICAgICBUYWJsZUZvcmVpZ25LZXkuY3JlYXRlKFxuICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgYGNyZWF0aW5nIGEgZm9yZWlnbiBrZXlzOiAke25ld0tleXNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiBrZXkubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gb24gdGFibGUgXCIke3RhYmxlLm5hbWV9XCJgLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeVJ1bm5lci5jcmVhdGVGb3JlaWduS2V5cyh0YWJsZSwgZGJGb3JlaWduS2V5cylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGFsbCBmb3JlaWduIGtleXMgd2hlcmUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZSBpcyBiZWluZyB1c2VkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBkcm9wQ29sdW1uUmVmZXJlbmNlZEZvcmVpZ25LZXlzKFxuICAgICAgICB0YWJsZVBhdGg6IHN0cmluZyxcbiAgICAgICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMucXVlcnlSdW5uZXIubG9hZGVkVGFibGVzLmZpbmQoXG4gICAgICAgICAgICAodGFibGUpID0+IHRoaXMuZ2V0VGFibGVQYXRoKHRhYmxlKSA9PT0gdGFibGVQYXRoLFxuICAgICAgICApXG4gICAgICAgIGlmICghdGFibGUpIHJldHVyblxuXG4gICAgICAgIGNvbnN0IHRhYmxlc1dpdGhGSzogVGFibGVbXSA9IFtdXG4gICAgICAgIGNvbnN0IGNvbHVtbkZvcmVpZ25LZXkgPSB0YWJsZS5mb3JlaWduS2V5cy5maW5kKFxuICAgICAgICAgICAgKGZvcmVpZ25LZXkpID0+IGZvcmVpZ25LZXkuY29sdW1uTmFtZXMuaW5kZXhPZihjb2x1bW5OYW1lKSAhPT0gLTEsXG4gICAgICAgIClcbiAgICAgICAgaWYgKGNvbHVtbkZvcmVpZ25LZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICAgICAgY2xvbmVkVGFibGUuZm9yZWlnbktleXMgPSBbY29sdW1uRm9yZWlnbktleV1cbiAgICAgICAgICAgIHRhYmxlc1dpdGhGSy5wdXNoKGNsb25lZFRhYmxlKVxuICAgICAgICAgICAgdGFibGUucmVtb3ZlRm9yZWlnbktleShjb2x1bW5Gb3JlaWduS2V5KVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBsb2FkZWRUYWJsZSBvZiB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcykge1xuICAgICAgICAgICAgY29uc3QgZGVwZW5kRm9yZWlnbktleXMgPSBsb2FkZWRUYWJsZS5mb3JlaWduS2V5cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGZvcmVpZ25LZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKGZvcmVpZ25LZXkpID09PSB0YWJsZVBhdGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkucmVmZXJlbmNlZENvbHVtbk5hbWVzLmluZGV4T2YoY29sdW1uTmFtZSkgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLTFcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChkZXBlbmRGb3JlaWduS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xvbmVkVGFibGUgPSBsb2FkZWRUYWJsZS5jbG9uZSgpXG4gICAgICAgICAgICAgICAgY2xvbmVkVGFibGUuZm9yZWlnbktleXMgPSBkZXBlbmRGb3JlaWduS2V5c1xuICAgICAgICAgICAgICAgIHRhYmxlc1dpdGhGSy5wdXNoKGNsb25lZFRhYmxlKVxuICAgICAgICAgICAgICAgIGRlcGVuZEZvcmVpZ25LZXlzLmZvckVhY2goKGRlcGVuZEZvcmVpZ25LZXkpID0+XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZFRhYmxlLnJlbW92ZUZvcmVpZ25LZXkoZGVwZW5kRm9yZWlnbktleSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmxlc1dpdGhGSy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhYmxlV2l0aEZLIG9mIHRhYmxlc1dpdGhGSykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5sb2dnZXIubG9nU2NoZW1hQnVpbGQoXG4gICAgICAgICAgICAgICAgICAgIGBkcm9wcGluZyByZWxhdGVkIGZvcmVpZ24ga2V5cyBvZiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVXaXRoRksubmFtZVxuICAgICAgICAgICAgICAgICAgICB9OiAke3RhYmxlV2l0aEZLLmZvcmVpZ25LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChmb3JlaWduS2V5KSA9PiBmb3JlaWduS2V5Lm5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfWAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnlSdW5uZXIuZHJvcEZvcmVpZ25LZXlzKFxuICAgICAgICAgICAgICAgICAgICB0YWJsZVdpdGhGSyxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVXaXRoRksuZm9yZWlnbktleXMsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYWxsIGNvbXBvc2l0ZSBpbmRpY2VzLCByZWxhdGVkIHRvIGdpdmVuIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZHJvcENvbHVtbkNvbXBvc2l0ZUluZGljZXMoXG4gICAgICAgIHRhYmxlUGF0aDogc3RyaW5nLFxuICAgICAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5xdWVyeVJ1bm5lci5sb2FkZWRUYWJsZXMuZmluZChcbiAgICAgICAgICAgICh0YWJsZSkgPT4gdGhpcy5nZXRUYWJsZVBhdGgodGFibGUpID09PSB0YWJsZVBhdGgsXG4gICAgICAgIClcbiAgICAgICAgaWYgKCF0YWJsZSkgcmV0dXJuXG5cbiAgICAgICAgY29uc3QgcmVsYXRlZEluZGljZXMgPSB0YWJsZS5pbmRpY2VzLmZpbHRlcihcbiAgICAgICAgICAgIChpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMuaW5kZXhPZihjb2x1bW5OYW1lKSAhPT0gLTEsXG4gICAgICAgIClcbiAgICAgICAgaWYgKHJlbGF0ZWRJbmRpY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dTY2hlbWFCdWlsZChcbiAgICAgICAgICAgIGBkcm9wcGluZyByZWxhdGVkIGluZGljZXMgb2YgXCIke3RhYmxlUGF0aH1cIi5cIiR7Y29sdW1uTmFtZX1cIjogJHtyZWxhdGVkSW5kaWNlc1xuICAgICAgICAgICAgICAgIC5tYXAoKGluZGV4KSA9PiBpbmRleC5uYW1lKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9YCxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmRyb3BJbmRpY2VzKHRhYmxlLCByZWxhdGVkSW5kaWNlcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbGwgY29tcG9zaXRlIHVuaXF1ZXMsIHJlbGF0ZWQgdG8gZ2l2ZW4gY29sdW1uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBkcm9wQ29sdW1uQ29tcG9zaXRlVW5pcXVlcyhcbiAgICAgICAgdGFibGVQYXRoOiBzdHJpbmcsXG4gICAgICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnF1ZXJ5UnVubmVyLmxvYWRlZFRhYmxlcy5maW5kKFxuICAgICAgICAgICAgKHRhYmxlKSA9PiB0aGlzLmdldFRhYmxlUGF0aCh0YWJsZSkgPT09IHRhYmxlUGF0aCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXRhYmxlKSByZXR1cm5cblxuICAgICAgICBjb25zdCByZWxhdGVkVW5pcXVlcyA9IHRhYmxlLnVuaXF1ZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHVuaXF1ZSkgPT5cbiAgICAgICAgICAgICAgICB1bmlxdWUuY29sdW1uTmFtZXMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcy5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMSxcbiAgICAgICAgKVxuICAgICAgICBpZiAocmVsYXRlZFVuaXF1ZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubG9nZ2VyLmxvZ1NjaGVtYUJ1aWxkKFxuICAgICAgICAgICAgYGRyb3BwaW5nIHJlbGF0ZWQgdW5pcXVlIGNvbnN0cmFpbnRzIG9mIFwiJHt0YWJsZVBhdGh9XCIuXCIke2NvbHVtbk5hbWV9XCI6ICR7cmVsYXRlZFVuaXF1ZXNcbiAgICAgICAgICAgICAgICAubWFwKCh1bmlxdWUpID0+IHVuaXF1ZS5uYW1lKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9YCxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5UnVubmVyLmRyb3BVbmlxdWVDb25zdHJhaW50cyh0YWJsZSwgcmVsYXRlZFVuaXF1ZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgY29sdW1ucyBmcm9tIHRoZSBnaXZlbiBjb2x1bW4gbWV0YWRhdGFzLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtZXRhZGF0YUNvbHVtbnNUb1RhYmxlQ29sdW1uT3B0aW9ucyhcbiAgICAgICAgY29sdW1uczogQ29sdW1uTWV0YWRhdGFbXSxcbiAgICApOiBUYWJsZUNvbHVtbk9wdGlvbnNbXSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uTWV0YWRhdGEpID0+XG4gICAgICAgICAgICBUYWJsZVV0aWxzLmNyZWF0ZVRhYmxlQ29sdW1uT3B0aW9ucyhcbiAgICAgICAgICAgICAgICBjb2x1bW5NZXRhZGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdHlwZW9ybSBzZXJ2aWNlIHRhYmxlIGZvciBzdG9yaW5nIHVzZXIgZGVmaW5lZCBWaWV3cyBhbmQgZ2VuZXJhdGUgY29sdW1ucy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlVHlwZW9ybU1ldGFkYXRhVGFibGUocXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuY3VycmVudFNjaGVtYVxuICAgICAgICBjb25zdCBkYXRhYmFzZSA9IHRoaXMuY3VycmVudERhdGFiYXNlXG4gICAgICAgIGNvbnN0IHR5cGVvcm1NZXRhZGF0YVRhYmxlID0gdGhpcy5jb25uZWN0aW9uLmRyaXZlci5idWlsZFRhYmxlTmFtZShcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5tZXRhZGF0YVRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFiYXNlLFxuICAgICAgICApXG5cblxuXG5cbiAgICAgICAgY29uc3QgaXNQcmltYXJ5ID0gdGhpcy5jb25uZWN0aW9uLmRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwic3Bhbm5lclwiXG4gICAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNyZWF0ZVRhYmxlKFxuICAgICAgICAgICAgbmV3IFRhYmxlKHtcbiAgICAgICAgICAgICAgICBkYXRhYmFzZTogZGF0YWJhc2UsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICAgICAgbmFtZTogdHlwZW9ybU1ldGFkYXRhVGFibGUsXG4gICAgICAgICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuY29ubmVjdGlvbi5kcml2ZXIubm9ybWFsaXplVHlwZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5jb25uZWN0aW9uLmRyaXZlci5tYXBwZWREYXRhVHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1ldGFkYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOdWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1hcnksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiZGF0YWJhc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuY29ubmVjdGlvbi5kcml2ZXIubm9ybWFsaXplVHlwZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5jb25uZWN0aW9uLmRyaXZlci5tYXBwZWREYXRhVHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1ldGFkYXRhRGF0YWJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1hcnksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLm5vcm1hbGl6ZVR5cGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuY29ubmVjdGlvbi5kcml2ZXIubWFwcGVkRGF0YVR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tZXRhZGF0YVNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOdWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJpbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ0YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5jb25uZWN0aW9uLmRyaXZlci5ub3JtYWxpemVUeXBlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLm1hcHBlZERhdGFUeXBlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWV0YWRhdGFUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOdWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJpbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLm5vcm1hbGl6ZVR5cGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuY29ubmVjdGlvbi5kcml2ZXIubWFwcGVkRGF0YVR5cGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tZXRhZGF0YU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1hcnksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMuY29ubmVjdGlvbi5kcml2ZXIubm9ybWFsaXplVHlwZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdGhpcy5jb25uZWN0aW9uLmRyaXZlci5tYXBwZWREYXRhVHlwZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1ldGFkYXRhVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1hcnksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKVxuICAgIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24tdHlwZW9ybSBsaWIvdHlwZW9ybS9zY2hlbWEtYnVpbGRlci9SZGJtc1NjaGVtYUJ1aWxkZXIudHMiXX0=
|