taon-typeorm 18.0.24 → 19.0.1
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 +3 -3
- package/browser/README.md +24 -24
- package/client/README.md +24 -24
- package/index.js.map +1 -1
- package/lib/build-info._auto-generated_.d.ts +1 -0
- package/lib/build-info._auto-generated_.js +4 -1
- package/lib/build-info._auto-generated_.js.map +1 -1
- package/lib/index._auto-generated_.js +2 -2
- 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 +2 -2
- package/src.d.ts +3 -3
- package/taon.jsonc +7 -9
- package/tmp-environment.json +4 -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/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,1421 +0,0 @@
|
|
|
1
|
-
import { TransactionNotStartedError } from "../../error/TransactionNotStartedError";
|
|
2
|
-
import { TableColumn } from "../../schema-builder/table/TableColumn";
|
|
3
|
-
import { Table } from "../../schema-builder/table/Table";
|
|
4
|
-
import { TableIndex } from "../../schema-builder/table/TableIndex";
|
|
5
|
-
import { TableForeignKey } from "../../schema-builder/table/TableForeignKey";
|
|
6
|
-
import { View } from "../../schema-builder/view/View";
|
|
7
|
-
import { Query } from "../Query";
|
|
8
|
-
import { TableUnique } from "../../schema-builder/table/TableUnique";
|
|
9
|
-
import { BaseQueryRunner } from "../../query-runner/BaseQueryRunner";
|
|
10
|
-
import { OrmUtils } from "../../util/OrmUtils";
|
|
11
|
-
import { TableCheck } from "../../schema-builder/table/TableCheck";
|
|
12
|
-
import { TransactionAlreadyStartedError, TypeORMError } from "../../error";
|
|
13
|
-
import { MetadataTableType } from "../types/MetadataTableType";
|
|
14
|
-
import { InstanceChecker } from "../../util/InstanceChecker";
|
|
15
|
-
/**
|
|
16
|
-
* Runs queries on a single sqlite database connection.
|
|
17
|
-
*/
|
|
18
|
-
export class AbstractSqliteQueryRunner extends BaseQueryRunner {
|
|
19
|
-
constructor() {
|
|
20
|
-
super();
|
|
21
|
-
this.transactionPromise = null;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Creates/uses database connection from the connection pool to perform further operations.
|
|
25
|
-
* Returns obtained database connection.
|
|
26
|
-
*/
|
|
27
|
-
connect() {
|
|
28
|
-
return Promise.resolve(this.driver.databaseConnection);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Releases used database connection.
|
|
32
|
-
* We just clear loaded tables and sql in memory, because sqlite do not support multiple connections thus query runners.
|
|
33
|
-
*/
|
|
34
|
-
release() {
|
|
35
|
-
this.loadedTables = [];
|
|
36
|
-
this.clearSqlMemory();
|
|
37
|
-
return Promise.resolve();
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Starts transaction.
|
|
41
|
-
*/
|
|
42
|
-
async startTransaction(isolationLevel) {
|
|
43
|
-
if (this.driver.transactionSupport === "none")
|
|
44
|
-
throw new TypeORMError(`Transactions aren't supported by ${this.connection.driver.options.type}.`);
|
|
45
|
-
if (this.isTransactionActive &&
|
|
46
|
-
this.driver.transactionSupport === "simple")
|
|
47
|
-
throw new TransactionAlreadyStartedError();
|
|
48
|
-
if (isolationLevel &&
|
|
49
|
-
isolationLevel !== "READ UNCOMMITTED" &&
|
|
50
|
-
isolationLevel !== "SERIALIZABLE")
|
|
51
|
-
throw new TypeORMError(`SQLite only supports SERIALIZABLE and READ UNCOMMITTED isolation`);
|
|
52
|
-
this.isTransactionActive = true;
|
|
53
|
-
try {
|
|
54
|
-
await this.broadcaster.broadcast("BeforeTransactionStart");
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
this.isTransactionActive = false;
|
|
58
|
-
throw err;
|
|
59
|
-
}
|
|
60
|
-
if (this.transactionDepth === 0) {
|
|
61
|
-
if (isolationLevel) {
|
|
62
|
-
if (isolationLevel === "READ UNCOMMITTED") {
|
|
63
|
-
await this.query("PRAGMA read_uncommitted = true");
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
await this.query("PRAGMA read_uncommitted = false");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
await this.query("BEGIN TRANSACTION");
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`);
|
|
73
|
-
}
|
|
74
|
-
this.transactionDepth += 1;
|
|
75
|
-
await this.broadcaster.broadcast("AfterTransactionStart");
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Commits transaction.
|
|
79
|
-
* Error will be thrown if transaction was not started.
|
|
80
|
-
*/
|
|
81
|
-
async commitTransaction() {
|
|
82
|
-
if (!this.isTransactionActive)
|
|
83
|
-
throw new TransactionNotStartedError();
|
|
84
|
-
await this.broadcaster.broadcast("BeforeTransactionCommit");
|
|
85
|
-
if (this.transactionDepth > 1) {
|
|
86
|
-
await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
await this.query("COMMIT");
|
|
90
|
-
this.isTransactionActive = false;
|
|
91
|
-
}
|
|
92
|
-
this.transactionDepth -= 1;
|
|
93
|
-
await this.broadcaster.broadcast("AfterTransactionCommit");
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Rollbacks transaction.
|
|
97
|
-
* Error will be thrown if transaction was not started.
|
|
98
|
-
*/
|
|
99
|
-
async rollbackTransaction() {
|
|
100
|
-
if (!this.isTransactionActive)
|
|
101
|
-
throw new TransactionNotStartedError();
|
|
102
|
-
await this.broadcaster.broadcast("BeforeTransactionRollback");
|
|
103
|
-
if (this.transactionDepth > 1) {
|
|
104
|
-
await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
await this.query("ROLLBACK");
|
|
108
|
-
this.isTransactionActive = false;
|
|
109
|
-
}
|
|
110
|
-
this.transactionDepth -= 1;
|
|
111
|
-
await this.broadcaster.broadcast("AfterTransactionRollback");
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Returns raw data stream.
|
|
115
|
-
*/
|
|
116
|
-
stream(query, parameters, onEnd, onError) {
|
|
117
|
-
throw new TypeORMError(`Stream is not supported by sqlite driver.`);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Returns all available database names including system databases.
|
|
121
|
-
*/
|
|
122
|
-
async getDatabases() {
|
|
123
|
-
return Promise.resolve([]);
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Returns all available schema names including system schemas.
|
|
127
|
-
* If database parameter specified, returns schemas of that database.
|
|
128
|
-
*/
|
|
129
|
-
async getSchemas(database) {
|
|
130
|
-
return Promise.resolve([]);
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Checks if database with the given name exist.
|
|
134
|
-
*/
|
|
135
|
-
async hasDatabase(database) {
|
|
136
|
-
return Promise.resolve(false);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Loads currently using database
|
|
140
|
-
*/
|
|
141
|
-
async getCurrentDatabase() {
|
|
142
|
-
return Promise.resolve(undefined);
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Checks if schema with the given name exist.
|
|
146
|
-
*/
|
|
147
|
-
async hasSchema(schema) {
|
|
148
|
-
throw new TypeORMError(`This driver does not support table schemas`);
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Loads currently using database schema
|
|
152
|
-
*/
|
|
153
|
-
async getCurrentSchema() {
|
|
154
|
-
return Promise.resolve(undefined);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Checks if table with the given name exist in the database.
|
|
158
|
-
*/
|
|
159
|
-
async hasTable(tableOrName) {
|
|
160
|
-
const tableName = InstanceChecker.isTable(tableOrName)
|
|
161
|
-
? tableOrName.name
|
|
162
|
-
: tableOrName;
|
|
163
|
-
const sql = `SELECT * FROM "sqlite_master" WHERE "type" = 'table' AND "name" = '${tableName}'`;
|
|
164
|
-
const result = await this.query(sql);
|
|
165
|
-
return result.length ? true : false;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Checks if column with the given name exist in the given table.
|
|
169
|
-
*/
|
|
170
|
-
async hasColumn(tableOrName, columnName) {
|
|
171
|
-
const tableName = InstanceChecker.isTable(tableOrName)
|
|
172
|
-
? tableOrName.name
|
|
173
|
-
: tableOrName;
|
|
174
|
-
const sql = `PRAGMA table_xinfo(${this.escapePath(tableName)})`;
|
|
175
|
-
const columns = await this.query(sql);
|
|
176
|
-
return !!columns.find((column) => column["name"] === columnName);
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Creates a new database.
|
|
180
|
-
*/
|
|
181
|
-
async createDatabase(database, ifNotExist) {
|
|
182
|
-
return Promise.resolve();
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Drops database.
|
|
186
|
-
*/
|
|
187
|
-
async dropDatabase(database, ifExist) {
|
|
188
|
-
return Promise.resolve();
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Creates a new table schema.
|
|
192
|
-
*/
|
|
193
|
-
async createSchema(schemaPath, ifNotExist) {
|
|
194
|
-
return Promise.resolve();
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Drops table schema.
|
|
198
|
-
*/
|
|
199
|
-
async dropSchema(schemaPath, ifExist) {
|
|
200
|
-
return Promise.resolve();
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Creates a new table.
|
|
204
|
-
*/
|
|
205
|
-
async createTable(table, ifNotExist = false, createForeignKeys = true, createIndices = true) {
|
|
206
|
-
const upQueries = [];
|
|
207
|
-
const downQueries = [];
|
|
208
|
-
if (ifNotExist) {
|
|
209
|
-
const isTableExist = await this.hasTable(table);
|
|
210
|
-
if (isTableExist)
|
|
211
|
-
return Promise.resolve();
|
|
212
|
-
}
|
|
213
|
-
upQueries.push(this.createTableSql(table, createForeignKeys));
|
|
214
|
-
downQueries.push(this.dropTableSql(table));
|
|
215
|
-
if (createIndices) {
|
|
216
|
-
table.indices.forEach((index) => {
|
|
217
|
-
if (!index.name)
|
|
218
|
-
index.name = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
|
|
219
|
-
upQueries.push(this.createIndexSql(table, index));
|
|
220
|
-
downQueries.push(this.dropIndexSql(index));
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
224
|
-
for (const column of generatedColumns) {
|
|
225
|
-
const insertQuery = this.insertTypeormMetadataSql({
|
|
226
|
-
table: table.name,
|
|
227
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
228
|
-
name: column.name,
|
|
229
|
-
value: column.asExpression,
|
|
230
|
-
});
|
|
231
|
-
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
232
|
-
table: table.name,
|
|
233
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
234
|
-
name: column.name,
|
|
235
|
-
});
|
|
236
|
-
upQueries.push(insertQuery);
|
|
237
|
-
downQueries.push(deleteQuery);
|
|
238
|
-
}
|
|
239
|
-
await this.executeQueries(upQueries, downQueries);
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Drops the table.
|
|
243
|
-
*/
|
|
244
|
-
async dropTable(tableOrName, ifExist, dropForeignKeys = true, dropIndices = true) {
|
|
245
|
-
if (ifExist) {
|
|
246
|
-
const isTableExist = await this.hasTable(tableOrName);
|
|
247
|
-
if (!isTableExist)
|
|
248
|
-
return Promise.resolve();
|
|
249
|
-
}
|
|
250
|
-
const createForeignKeys = dropForeignKeys;
|
|
251
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
252
|
-
? tableOrName
|
|
253
|
-
: await this.getCachedTable(tableOrName);
|
|
254
|
-
const upQueries = [];
|
|
255
|
-
const downQueries = [];
|
|
256
|
-
if (dropIndices) {
|
|
257
|
-
table.indices.forEach((index) => {
|
|
258
|
-
upQueries.push(this.dropIndexSql(index));
|
|
259
|
-
downQueries.push(this.createIndexSql(table, index));
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
upQueries.push(this.dropTableSql(table, ifExist));
|
|
263
|
-
downQueries.push(this.createTableSql(table, createForeignKeys));
|
|
264
|
-
const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
|
|
265
|
-
for (const column of generatedColumns) {
|
|
266
|
-
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
267
|
-
table: table.name,
|
|
268
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
269
|
-
name: column.name,
|
|
270
|
-
});
|
|
271
|
-
const insertQuery = this.insertTypeormMetadataSql({
|
|
272
|
-
table: table.name,
|
|
273
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
274
|
-
name: column.name,
|
|
275
|
-
value: column.asExpression,
|
|
276
|
-
});
|
|
277
|
-
upQueries.push(deleteQuery);
|
|
278
|
-
downQueries.push(insertQuery);
|
|
279
|
-
}
|
|
280
|
-
await this.executeQueries(upQueries, downQueries);
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Creates a new view.
|
|
284
|
-
*/
|
|
285
|
-
async createView(view, syncWithMetadata = false) {
|
|
286
|
-
const upQueries = [];
|
|
287
|
-
const downQueries = [];
|
|
288
|
-
upQueries.push(this.createViewSql(view));
|
|
289
|
-
if (syncWithMetadata)
|
|
290
|
-
upQueries.push(this.insertViewDefinitionSql(view));
|
|
291
|
-
downQueries.push(this.dropViewSql(view));
|
|
292
|
-
if (syncWithMetadata)
|
|
293
|
-
downQueries.push(this.deleteViewDefinitionSql(view));
|
|
294
|
-
await this.executeQueries(upQueries, downQueries);
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Drops the view.
|
|
298
|
-
*/
|
|
299
|
-
async dropView(target) {
|
|
300
|
-
const viewName = InstanceChecker.isView(target) ? target.name : target;
|
|
301
|
-
const view = await this.getCachedView(viewName);
|
|
302
|
-
const upQueries = [];
|
|
303
|
-
const downQueries = [];
|
|
304
|
-
upQueries.push(this.deleteViewDefinitionSql(view));
|
|
305
|
-
upQueries.push(this.dropViewSql(view));
|
|
306
|
-
downQueries.push(this.insertViewDefinitionSql(view));
|
|
307
|
-
downQueries.push(this.createViewSql(view));
|
|
308
|
-
await this.executeQueries(upQueries, downQueries);
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Renames the given table.
|
|
312
|
-
*/
|
|
313
|
-
async renameTable(oldTableOrName, newTableName) {
|
|
314
|
-
const oldTable = InstanceChecker.isTable(oldTableOrName)
|
|
315
|
-
? oldTableOrName
|
|
316
|
-
: await this.getCachedTable(oldTableOrName);
|
|
317
|
-
const newTable = oldTable.clone();
|
|
318
|
-
newTable.name = newTableName;
|
|
319
|
-
const up = new Query(`ALTER TABLE ${this.escapePath(oldTable.name)} RENAME TO ${this.escapePath(newTableName)}`);
|
|
320
|
-
const down = new Query(`ALTER TABLE ${this.escapePath(newTableName)} RENAME TO ${this.escapePath(oldTable.name)}`);
|
|
321
|
-
await this.executeQueries(up, down);
|
|
322
|
-
newTable.uniques.forEach((unique) => {
|
|
323
|
-
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
|
|
324
|
-
if (unique.name !== oldUniqueName)
|
|
325
|
-
return;
|
|
326
|
-
unique.name = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
|
|
327
|
-
});
|
|
328
|
-
newTable.foreignKeys.forEach((foreignKey) => {
|
|
329
|
-
const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
330
|
-
if (foreignKey.name !== oldForeignKeyName)
|
|
331
|
-
return;
|
|
332
|
-
foreignKey.name = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
333
|
-
});
|
|
334
|
-
newTable.indices.forEach((index) => {
|
|
335
|
-
const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
|
|
336
|
-
if (index.name !== oldIndexName)
|
|
337
|
-
return;
|
|
338
|
-
index.name = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
|
|
339
|
-
});
|
|
340
|
-
oldTable.name = newTable.name;
|
|
341
|
-
await this.recreateTable(newTable, oldTable);
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Creates a new column from the column in the table.
|
|
345
|
-
*/
|
|
346
|
-
async addColumn(tableOrName, column) {
|
|
347
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
348
|
-
? tableOrName
|
|
349
|
-
: await this.getCachedTable(tableOrName);
|
|
350
|
-
return this.addColumns(table, [column]);
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Creates a new columns from the column in the table.
|
|
354
|
-
*/
|
|
355
|
-
async addColumns(tableOrName, columns) {
|
|
356
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
357
|
-
? tableOrName
|
|
358
|
-
: await this.getCachedTable(tableOrName);
|
|
359
|
-
const changedTable = table.clone();
|
|
360
|
-
columns.forEach((column) => changedTable.addColumn(column));
|
|
361
|
-
await this.recreateTable(changedTable, table);
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Renames column in the given table.
|
|
365
|
-
*/
|
|
366
|
-
async renameColumn(tableOrName, oldTableColumnOrName, newTableColumnOrName) {
|
|
367
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
368
|
-
? tableOrName
|
|
369
|
-
: await this.getCachedTable(tableOrName);
|
|
370
|
-
const oldColumn = InstanceChecker.isTableColumn(oldTableColumnOrName)
|
|
371
|
-
? oldTableColumnOrName
|
|
372
|
-
: table.columns.find((c) => c.name === oldTableColumnOrName);
|
|
373
|
-
if (!oldColumn)
|
|
374
|
-
throw new TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
|
|
375
|
-
let newColumn = undefined;
|
|
376
|
-
if (InstanceChecker.isTableColumn(newTableColumnOrName)) {
|
|
377
|
-
newColumn = newTableColumnOrName;
|
|
378
|
-
}
|
|
379
|
-
else {
|
|
380
|
-
newColumn = oldColumn.clone();
|
|
381
|
-
newColumn.name = newTableColumnOrName;
|
|
382
|
-
}
|
|
383
|
-
return this.changeColumn(table, oldColumn, newColumn);
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Changes a column in the table.
|
|
387
|
-
*/
|
|
388
|
-
async changeColumn(tableOrName, oldTableColumnOrName, newColumn) {
|
|
389
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
390
|
-
? tableOrName
|
|
391
|
-
: await this.getCachedTable(tableOrName);
|
|
392
|
-
const oldColumn = InstanceChecker.isTableColumn(oldTableColumnOrName)
|
|
393
|
-
? oldTableColumnOrName
|
|
394
|
-
: table.columns.find((c) => c.name === oldTableColumnOrName);
|
|
395
|
-
if (!oldColumn)
|
|
396
|
-
throw new TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
|
|
397
|
-
await this.changeColumns(table, [{ oldColumn, newColumn }]);
|
|
398
|
-
}
|
|
399
|
-
/**
|
|
400
|
-
* Changes a column in the table.
|
|
401
|
-
* Changed column looses all its keys in the db.
|
|
402
|
-
*/
|
|
403
|
-
async changeColumns(tableOrName, changedColumns) {
|
|
404
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
405
|
-
? tableOrName
|
|
406
|
-
: await this.getCachedTable(tableOrName);
|
|
407
|
-
const changedTable = table.clone();
|
|
408
|
-
changedColumns.forEach((changedColumnSet) => {
|
|
409
|
-
if (changedColumnSet.newColumn.name !==
|
|
410
|
-
changedColumnSet.oldColumn.name) {
|
|
411
|
-
changedTable
|
|
412
|
-
.findColumnUniques(changedColumnSet.oldColumn)
|
|
413
|
-
.forEach((unique) => {
|
|
414
|
-
const uniqueName = this.connection.namingStrategy.uniqueConstraintName(table, unique.columnNames);
|
|
415
|
-
unique.columnNames.splice(unique.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
416
|
-
unique.columnNames.push(changedColumnSet.newColumn.name);
|
|
417
|
-
if (unique.name === uniqueName) {
|
|
418
|
-
unique.name =
|
|
419
|
-
this.connection.namingStrategy.uniqueConstraintName(changedTable, unique.columnNames);
|
|
420
|
-
}
|
|
421
|
-
});
|
|
422
|
-
changedTable
|
|
423
|
-
.findColumnForeignKeys(changedColumnSet.oldColumn)
|
|
424
|
-
.forEach((foreignKey) => {
|
|
425
|
-
const foreignKeyName = this.connection.namingStrategy.foreignKeyName(table, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
426
|
-
foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
427
|
-
foreignKey.columnNames.push(changedColumnSet.newColumn.name);
|
|
428
|
-
if (foreignKey.name === foreignKeyName) {
|
|
429
|
-
foreignKey.name =
|
|
430
|
-
this.connection.namingStrategy.foreignKeyName(changedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
431
|
-
}
|
|
432
|
-
});
|
|
433
|
-
changedTable
|
|
434
|
-
.findColumnIndices(changedColumnSet.oldColumn)
|
|
435
|
-
.forEach((index) => {
|
|
436
|
-
const indexName = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
|
|
437
|
-
index.columnNames.splice(index.columnNames.indexOf(changedColumnSet.oldColumn.name), 1);
|
|
438
|
-
index.columnNames.push(changedColumnSet.newColumn.name);
|
|
439
|
-
if (index.name === indexName) {
|
|
440
|
-
index.name =
|
|
441
|
-
this.connection.namingStrategy.indexName(changedTable, index.columnNames, index.where);
|
|
442
|
-
}
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
const originalColumn = changedTable.columns.find((column) => column.name === changedColumnSet.oldColumn.name);
|
|
446
|
-
if (originalColumn)
|
|
447
|
-
changedTable.columns[changedTable.columns.indexOf(originalColumn)] = changedColumnSet.newColumn;
|
|
448
|
-
});
|
|
449
|
-
await this.recreateTable(changedTable, table);
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* Drops column in the table.
|
|
453
|
-
*/
|
|
454
|
-
async dropColumn(tableOrName, columnOrName) {
|
|
455
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
456
|
-
? tableOrName
|
|
457
|
-
: await this.getCachedTable(tableOrName);
|
|
458
|
-
const column = InstanceChecker.isTableColumn(columnOrName)
|
|
459
|
-
? columnOrName
|
|
460
|
-
: table.findColumnByName(columnOrName);
|
|
461
|
-
if (!column)
|
|
462
|
-
throw new TypeORMError(`Column "${columnOrName}" was not found in table "${table.name}"`);
|
|
463
|
-
await this.dropColumns(table, [column]);
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* Drops the columns in the table.
|
|
467
|
-
*/
|
|
468
|
-
async dropColumns(tableOrName, columns) {
|
|
469
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
470
|
-
? tableOrName
|
|
471
|
-
: await this.getCachedTable(tableOrName);
|
|
472
|
-
const changedTable = table.clone();
|
|
473
|
-
columns.forEach((column) => {
|
|
474
|
-
const columnInstance = InstanceChecker.isTableColumn(column)
|
|
475
|
-
? column
|
|
476
|
-
: table.findColumnByName(column);
|
|
477
|
-
if (!columnInstance)
|
|
478
|
-
throw new Error(`Column "${column}" was not found in table "${table.name}"`);
|
|
479
|
-
changedTable.removeColumn(columnInstance);
|
|
480
|
-
changedTable
|
|
481
|
-
.findColumnUniques(columnInstance)
|
|
482
|
-
.forEach((unique) => changedTable.removeUniqueConstraint(unique));
|
|
483
|
-
changedTable
|
|
484
|
-
.findColumnIndices(columnInstance)
|
|
485
|
-
.forEach((index) => changedTable.removeIndex(index));
|
|
486
|
-
changedTable
|
|
487
|
-
.findColumnForeignKeys(columnInstance)
|
|
488
|
-
.forEach((fk) => changedTable.removeForeignKey(fk));
|
|
489
|
-
});
|
|
490
|
-
await this.recreateTable(changedTable, table);
|
|
491
|
-
}
|
|
492
|
-
/**
|
|
493
|
-
* Creates a new primary key.
|
|
494
|
-
*/
|
|
495
|
-
async createPrimaryKey(tableOrName, columnNames) {
|
|
496
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
497
|
-
? tableOrName
|
|
498
|
-
: await this.getCachedTable(tableOrName);
|
|
499
|
-
const changedTable = table.clone();
|
|
500
|
-
changedTable.columns.forEach((column) => {
|
|
501
|
-
if (columnNames.find((columnName) => columnName === column.name))
|
|
502
|
-
column.isPrimary = true;
|
|
503
|
-
});
|
|
504
|
-
await this.recreateTable(changedTable, table);
|
|
505
|
-
table.columns.forEach((column) => {
|
|
506
|
-
if (columnNames.find((columnName) => columnName === column.name))
|
|
507
|
-
column.isPrimary = true;
|
|
508
|
-
});
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Updates composite primary keys.
|
|
512
|
-
*/
|
|
513
|
-
async updatePrimaryKeys(tableOrName, columns) {
|
|
514
|
-
await Promise.resolve();
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Drops a primary key.
|
|
518
|
-
*/
|
|
519
|
-
async dropPrimaryKey(tableOrName) {
|
|
520
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
521
|
-
? tableOrName
|
|
522
|
-
: await this.getCachedTable(tableOrName);
|
|
523
|
-
const changedTable = table.clone();
|
|
524
|
-
changedTable.primaryColumns.forEach((column) => {
|
|
525
|
-
column.isPrimary = false;
|
|
526
|
-
});
|
|
527
|
-
await this.recreateTable(changedTable, table);
|
|
528
|
-
table.primaryColumns.forEach((column) => {
|
|
529
|
-
column.isPrimary = false;
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
/**
|
|
533
|
-
* Creates a new unique constraint.
|
|
534
|
-
*/
|
|
535
|
-
async createUniqueConstraint(tableOrName, uniqueConstraint) {
|
|
536
|
-
await this.createUniqueConstraints(tableOrName, [uniqueConstraint]);
|
|
537
|
-
}
|
|
538
|
-
/**
|
|
539
|
-
* Creates a new unique constraints.
|
|
540
|
-
*/
|
|
541
|
-
async createUniqueConstraints(tableOrName, uniqueConstraints) {
|
|
542
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
543
|
-
? tableOrName
|
|
544
|
-
: await this.getCachedTable(tableOrName);
|
|
545
|
-
const changedTable = table.clone();
|
|
546
|
-
uniqueConstraints.forEach((uniqueConstraint) => changedTable.addUniqueConstraint(uniqueConstraint));
|
|
547
|
-
await this.recreateTable(changedTable, table);
|
|
548
|
-
}
|
|
549
|
-
/**
|
|
550
|
-
* Drops an unique constraint.
|
|
551
|
-
*/
|
|
552
|
-
async dropUniqueConstraint(tableOrName, uniqueOrName) {
|
|
553
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
554
|
-
? tableOrName
|
|
555
|
-
: await this.getCachedTable(tableOrName);
|
|
556
|
-
const uniqueConstraint = InstanceChecker.isTableUnique(uniqueOrName)
|
|
557
|
-
? uniqueOrName
|
|
558
|
-
: table.uniques.find((u) => u.name === uniqueOrName);
|
|
559
|
-
if (!uniqueConstraint)
|
|
560
|
-
throw new TypeORMError(`Supplied unique constraint was not found in table ${table.name}`);
|
|
561
|
-
await this.dropUniqueConstraints(table, [uniqueConstraint]);
|
|
562
|
-
}
|
|
563
|
-
/**
|
|
564
|
-
* Creates an unique constraints.
|
|
565
|
-
*/
|
|
566
|
-
async dropUniqueConstraints(tableOrName, uniqueConstraints) {
|
|
567
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
568
|
-
? tableOrName
|
|
569
|
-
: await this.getCachedTable(tableOrName);
|
|
570
|
-
const changedTable = table.clone();
|
|
571
|
-
uniqueConstraints.forEach((uniqueConstraint) => changedTable.removeUniqueConstraint(uniqueConstraint));
|
|
572
|
-
await this.recreateTable(changedTable, table);
|
|
573
|
-
}
|
|
574
|
-
/**
|
|
575
|
-
* Creates new check constraint.
|
|
576
|
-
*/
|
|
577
|
-
async createCheckConstraint(tableOrName, checkConstraint) {
|
|
578
|
-
await this.createCheckConstraints(tableOrName, [checkConstraint]);
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* Creates new check constraints.
|
|
582
|
-
*/
|
|
583
|
-
async createCheckConstraints(tableOrName, checkConstraints) {
|
|
584
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
585
|
-
? tableOrName
|
|
586
|
-
: await this.getCachedTable(tableOrName);
|
|
587
|
-
const changedTable = table.clone();
|
|
588
|
-
checkConstraints.forEach((checkConstraint) => changedTable.addCheckConstraint(checkConstraint));
|
|
589
|
-
await this.recreateTable(changedTable, table);
|
|
590
|
-
}
|
|
591
|
-
/**
|
|
592
|
-
* Drops check constraint.
|
|
593
|
-
*/
|
|
594
|
-
async dropCheckConstraint(tableOrName, checkOrName) {
|
|
595
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
596
|
-
? tableOrName
|
|
597
|
-
: await this.getCachedTable(tableOrName);
|
|
598
|
-
const checkConstraint = InstanceChecker.isTableCheck(checkOrName)
|
|
599
|
-
? checkOrName
|
|
600
|
-
: table.checks.find((c) => c.name === checkOrName);
|
|
601
|
-
if (!checkConstraint)
|
|
602
|
-
throw new TypeORMError(`Supplied check constraint was not found in table ${table.name}`);
|
|
603
|
-
await this.dropCheckConstraints(table, [checkConstraint]);
|
|
604
|
-
}
|
|
605
|
-
/**
|
|
606
|
-
* Drops check constraints.
|
|
607
|
-
*/
|
|
608
|
-
async dropCheckConstraints(tableOrName, checkConstraints) {
|
|
609
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
610
|
-
? tableOrName
|
|
611
|
-
: await this.getCachedTable(tableOrName);
|
|
612
|
-
const changedTable = table.clone();
|
|
613
|
-
checkConstraints.forEach((checkConstraint) => changedTable.removeCheckConstraint(checkConstraint));
|
|
614
|
-
await this.recreateTable(changedTable, table);
|
|
615
|
-
}
|
|
616
|
-
/**
|
|
617
|
-
* Creates a new exclusion constraint.
|
|
618
|
-
*/
|
|
619
|
-
async createExclusionConstraint(tableOrName, exclusionConstraint) {
|
|
620
|
-
throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* Creates a new exclusion constraints.
|
|
624
|
-
*/
|
|
625
|
-
async createExclusionConstraints(tableOrName, exclusionConstraints) {
|
|
626
|
-
throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
|
|
627
|
-
}
|
|
628
|
-
/**
|
|
629
|
-
* Drops exclusion constraint.
|
|
630
|
-
*/
|
|
631
|
-
async dropExclusionConstraint(tableOrName, exclusionOrName) {
|
|
632
|
-
throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
|
|
633
|
-
}
|
|
634
|
-
/**
|
|
635
|
-
* Drops exclusion constraints.
|
|
636
|
-
*/
|
|
637
|
-
async dropExclusionConstraints(tableOrName, exclusionConstraints) {
|
|
638
|
-
throw new TypeORMError(`Sqlite does not support exclusion constraints.`);
|
|
639
|
-
}
|
|
640
|
-
/**
|
|
641
|
-
* Creates a new foreign key.
|
|
642
|
-
*/
|
|
643
|
-
async createForeignKey(tableOrName, foreignKey) {
|
|
644
|
-
await this.createForeignKeys(tableOrName, [foreignKey]);
|
|
645
|
-
}
|
|
646
|
-
/**
|
|
647
|
-
* Creates a new foreign keys.
|
|
648
|
-
*/
|
|
649
|
-
async createForeignKeys(tableOrName, foreignKeys) {
|
|
650
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
651
|
-
? tableOrName
|
|
652
|
-
: await this.getCachedTable(tableOrName);
|
|
653
|
-
const changedTable = table.clone();
|
|
654
|
-
foreignKeys.forEach((foreignKey) => changedTable.addForeignKey(foreignKey));
|
|
655
|
-
await this.recreateTable(changedTable, table);
|
|
656
|
-
}
|
|
657
|
-
/**
|
|
658
|
-
* Drops a foreign key from the table.
|
|
659
|
-
*/
|
|
660
|
-
async dropForeignKey(tableOrName, foreignKeyOrName) {
|
|
661
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
662
|
-
? tableOrName
|
|
663
|
-
: await this.getCachedTable(tableOrName);
|
|
664
|
-
const foreignKey = InstanceChecker.isTableForeignKey(foreignKeyOrName)
|
|
665
|
-
? foreignKeyOrName
|
|
666
|
-
: table.foreignKeys.find((fk) => fk.name === foreignKeyOrName);
|
|
667
|
-
if (!foreignKey)
|
|
668
|
-
throw new TypeORMError(`Supplied foreign key was not found in table ${table.name}`);
|
|
669
|
-
await this.dropForeignKeys(tableOrName, [foreignKey]);
|
|
670
|
-
}
|
|
671
|
-
/**
|
|
672
|
-
* Drops a foreign keys from the table.
|
|
673
|
-
*/
|
|
674
|
-
async dropForeignKeys(tableOrName, foreignKeys) {
|
|
675
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
676
|
-
? tableOrName
|
|
677
|
-
: await this.getCachedTable(tableOrName);
|
|
678
|
-
const changedTable = table.clone();
|
|
679
|
-
foreignKeys.forEach((foreignKey) => changedTable.removeForeignKey(foreignKey));
|
|
680
|
-
await this.recreateTable(changedTable, table);
|
|
681
|
-
}
|
|
682
|
-
/**
|
|
683
|
-
* Creates a new index.
|
|
684
|
-
*/
|
|
685
|
-
async createIndex(tableOrName, index) {
|
|
686
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
687
|
-
? tableOrName
|
|
688
|
-
: await this.getCachedTable(tableOrName);
|
|
689
|
-
if (!index.name)
|
|
690
|
-
index.name = this.generateIndexName(table, index);
|
|
691
|
-
const up = this.createIndexSql(table, index);
|
|
692
|
-
const down = this.dropIndexSql(index);
|
|
693
|
-
await this.executeQueries(up, down);
|
|
694
|
-
table.addIndex(index);
|
|
695
|
-
}
|
|
696
|
-
/**
|
|
697
|
-
* Creates a new indices
|
|
698
|
-
*/
|
|
699
|
-
async createIndices(tableOrName, indices) {
|
|
700
|
-
const promises = indices.map((index) => this.createIndex(tableOrName, index));
|
|
701
|
-
await Promise.all(promises);
|
|
702
|
-
}
|
|
703
|
-
/**
|
|
704
|
-
* Drops an index from the table.
|
|
705
|
-
*/
|
|
706
|
-
async dropIndex(tableOrName, indexOrName) {
|
|
707
|
-
const table = InstanceChecker.isTable(tableOrName)
|
|
708
|
-
? tableOrName
|
|
709
|
-
: await this.getCachedTable(tableOrName);
|
|
710
|
-
const index = InstanceChecker.isTableIndex(indexOrName)
|
|
711
|
-
? indexOrName
|
|
712
|
-
: table.indices.find((i) => i.name === indexOrName);
|
|
713
|
-
if (!index)
|
|
714
|
-
throw new TypeORMError(`Supplied index ${indexOrName} was not found in table ${table.name}`);
|
|
715
|
-
if (!index.name)
|
|
716
|
-
index.name = this.generateIndexName(table, index);
|
|
717
|
-
const up = this.dropIndexSql(index);
|
|
718
|
-
const down = this.createIndexSql(table, index);
|
|
719
|
-
await this.executeQueries(up, down);
|
|
720
|
-
table.removeIndex(index);
|
|
721
|
-
}
|
|
722
|
-
/**
|
|
723
|
-
* Drops an indices from the table.
|
|
724
|
-
*/
|
|
725
|
-
async dropIndices(tableOrName, indices) {
|
|
726
|
-
const promises = indices.map((index) => this.dropIndex(tableOrName, index));
|
|
727
|
-
await Promise.all(promises);
|
|
728
|
-
}
|
|
729
|
-
/**
|
|
730
|
-
* Clears all table contents.
|
|
731
|
-
* Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.
|
|
732
|
-
*/
|
|
733
|
-
async clearTable(tableName) {
|
|
734
|
-
await this.query(`DELETE FROM ${this.escapePath(tableName)}`);
|
|
735
|
-
}
|
|
736
|
-
/**
|
|
737
|
-
* Removes all tables from the currently connected database.
|
|
738
|
-
*/
|
|
739
|
-
async clearDatabase(database) {
|
|
740
|
-
let dbPath = undefined;
|
|
741
|
-
if (database &&
|
|
742
|
-
this.driver.getAttachedDatabaseHandleByRelativePath(database)) {
|
|
743
|
-
dbPath =
|
|
744
|
-
this.driver.getAttachedDatabaseHandleByRelativePath(database);
|
|
745
|
-
}
|
|
746
|
-
await this.query(`PRAGMA foreign_keys = OFF`);
|
|
747
|
-
const isAnotherTransactionActive = this.isTransactionActive;
|
|
748
|
-
if (!isAnotherTransactionActive)
|
|
749
|
-
await this.startTransaction();
|
|
750
|
-
try {
|
|
751
|
-
const selectViewDropsQuery = dbPath
|
|
752
|
-
? `SELECT 'DROP VIEW "${dbPath}"."' || name || '";' as query FROM "${dbPath}"."sqlite_master" WHERE "type" = 'view'`
|
|
753
|
-
: `SELECT 'DROP VIEW "' || name || '";' as query FROM "sqlite_master" WHERE "type" = 'view'`;
|
|
754
|
-
const dropViewQueries = await this.query(selectViewDropsQuery);
|
|
755
|
-
await Promise.all(dropViewQueries.map((q) => this.query(q["query"])));
|
|
756
|
-
const selectTableDropsQuery = dbPath
|
|
757
|
-
? `SELECT 'DROP TABLE "${dbPath}"."' || name || '";' as query FROM "${dbPath}"."sqlite_master" WHERE "type" = 'table' AND "name" != 'sqlite_sequence'`
|
|
758
|
-
: `SELECT 'DROP TABLE "' || name || '";' as query FROM "sqlite_master" WHERE "type" = 'table' AND "name" != 'sqlite_sequence'`;
|
|
759
|
-
const dropTableQueries = await this.query(selectTableDropsQuery);
|
|
760
|
-
await Promise.all(dropTableQueries.map((q) => this.query(q["query"])));
|
|
761
|
-
if (!isAnotherTransactionActive)
|
|
762
|
-
await this.commitTransaction();
|
|
763
|
-
}
|
|
764
|
-
catch (error) {
|
|
765
|
-
try {
|
|
766
|
-
if (!isAnotherTransactionActive)
|
|
767
|
-
await this.rollbackTransaction();
|
|
768
|
-
}
|
|
769
|
-
catch (rollbackError) { }
|
|
770
|
-
throw error;
|
|
771
|
-
}
|
|
772
|
-
finally {
|
|
773
|
-
await this.query(`PRAGMA foreign_keys = ON`);
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
async loadViews(viewNames) {
|
|
777
|
-
const hasTable = await this.hasTable(this.getTypeormMetadataTableName());
|
|
778
|
-
if (!hasTable) {
|
|
779
|
-
return [];
|
|
780
|
-
}
|
|
781
|
-
if (!viewNames) {
|
|
782
|
-
viewNames = [];
|
|
783
|
-
}
|
|
784
|
-
const viewNamesString = viewNames
|
|
785
|
-
.map((name) => "'" + name + "'")
|
|
786
|
-
.join(", ");
|
|
787
|
-
let query = `SELECT "t".* FROM "${this.getTypeormMetadataTableName()}" "t" INNER JOIN "sqlite_master" s ON "s"."name" = "t"."name" AND "s"."type" = 'view' WHERE "t"."type" = '${MetadataTableType.VIEW}'`;
|
|
788
|
-
if (viewNamesString.length > 0)
|
|
789
|
-
query += ` AND "t"."name" IN (${viewNamesString})`;
|
|
790
|
-
const dbViews = await this.query(query);
|
|
791
|
-
return dbViews.map((dbView) => {
|
|
792
|
-
const view = new View();
|
|
793
|
-
view.name = dbView["name"];
|
|
794
|
-
view.expression = dbView["value"];
|
|
795
|
-
return view;
|
|
796
|
-
});
|
|
797
|
-
}
|
|
798
|
-
async loadTableRecords(tablePath, tableOrIndex) {
|
|
799
|
-
let database = undefined;
|
|
800
|
-
const [schema, tableName] = this.splitTablePath(tablePath);
|
|
801
|
-
if (schema &&
|
|
802
|
-
this.driver.getAttachedDatabasePathRelativeByHandle(schema)) {
|
|
803
|
-
database =
|
|
804
|
-
this.driver.getAttachedDatabasePathRelativeByHandle(schema);
|
|
805
|
-
}
|
|
806
|
-
const res = await this.query(`SELECT ${database ? `'${database}'` : null} as database, ${schema ? `'${schema}'` : null} as schema, * FROM ${schema ? `"${schema}".` : ""}${this.escapePath(`sqlite_master`)} WHERE "type" = '${tableOrIndex}' AND "${tableOrIndex === "table" ? "name" : "tbl_name"}" IN ('${tableName}')`);
|
|
807
|
-
return res;
|
|
808
|
-
}
|
|
809
|
-
async loadPragmaRecords(tablePath, pragma) {
|
|
810
|
-
const [, tableName] = this.splitTablePath(tablePath);
|
|
811
|
-
const res = await this.query(`PRAGMA ${pragma}("${tableName}")`);
|
|
812
|
-
return res;
|
|
813
|
-
}
|
|
814
|
-
/**
|
|
815
|
-
* Loads all tables (with given names) from the database and creates a Table from them.
|
|
816
|
-
*/
|
|
817
|
-
async loadTables(tableNames) {
|
|
818
|
-
if (tableNames && tableNames.length === 0) {
|
|
819
|
-
return [];
|
|
820
|
-
}
|
|
821
|
-
let dbTables = [];
|
|
822
|
-
let dbIndicesDef;
|
|
823
|
-
if (!tableNames) {
|
|
824
|
-
const tablesSql = `SELECT * FROM "sqlite_master" WHERE "type" = 'table'`;
|
|
825
|
-
dbTables.push(...(await this.query(tablesSql)));
|
|
826
|
-
const tableNamesString = dbTables
|
|
827
|
-
.map(({ name }) => `'${name}'`)
|
|
828
|
-
.join(", ");
|
|
829
|
-
dbIndicesDef = await this.query(`SELECT * FROM "sqlite_master" WHERE "type" = 'index' AND "tbl_name" IN (${tableNamesString})`);
|
|
830
|
-
}
|
|
831
|
-
else {
|
|
832
|
-
dbTables = (await Promise.all(tableNames.map((tableName) => this.loadTableRecords(tableName, "table"))))
|
|
833
|
-
.reduce((acc, res) => [...acc, ...res], [])
|
|
834
|
-
.filter(Boolean);
|
|
835
|
-
dbIndicesDef = (await Promise.all((tableNames ?? []).map((tableName) => this.loadTableRecords(tableName, "index"))))
|
|
836
|
-
.reduce((acc, res) => [...acc, ...res], [])
|
|
837
|
-
.filter(Boolean);
|
|
838
|
-
}
|
|
839
|
-
if (dbTables.length === 0) {
|
|
840
|
-
return [];
|
|
841
|
-
}
|
|
842
|
-
return Promise.all(dbTables.map(async (dbTable) => {
|
|
843
|
-
const tablePath = dbTable["database"] &&
|
|
844
|
-
this.driver.getAttachedDatabaseHandleByRelativePath(dbTable["database"])
|
|
845
|
-
? `${this.driver.getAttachedDatabaseHandleByRelativePath(dbTable["database"])}.${dbTable["name"]}`
|
|
846
|
-
: dbTable["name"];
|
|
847
|
-
const sql = dbTable["sql"];
|
|
848
|
-
const withoutRowid = sql.includes("WITHOUT ROWID");
|
|
849
|
-
const table = new Table({ name: tablePath, withoutRowid });
|
|
850
|
-
const [dbColumns, dbIndices, dbForeignKeys] = await Promise.all([
|
|
851
|
-
this.loadPragmaRecords(tablePath, `table_xinfo`),
|
|
852
|
-
this.loadPragmaRecords(tablePath, `index_list`),
|
|
853
|
-
this.loadPragmaRecords(tablePath, `foreign_key_list`),
|
|
854
|
-
]);
|
|
855
|
-
let autoIncrementColumnName = undefined;
|
|
856
|
-
const tableSql = dbTable["sql"];
|
|
857
|
-
let autoIncrementIndex = tableSql
|
|
858
|
-
.toUpperCase()
|
|
859
|
-
.indexOf("AUTOINCREMENT");
|
|
860
|
-
if (autoIncrementIndex !== -1) {
|
|
861
|
-
autoIncrementColumnName = tableSql.substr(0, autoIncrementIndex);
|
|
862
|
-
const comma = autoIncrementColumnName.lastIndexOf(",");
|
|
863
|
-
const bracket = autoIncrementColumnName.lastIndexOf("(");
|
|
864
|
-
if (comma !== -1) {
|
|
865
|
-
autoIncrementColumnName =
|
|
866
|
-
autoIncrementColumnName.substr(comma);
|
|
867
|
-
autoIncrementColumnName =
|
|
868
|
-
autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf('"'));
|
|
869
|
-
autoIncrementColumnName =
|
|
870
|
-
autoIncrementColumnName.substr(autoIncrementColumnName.indexOf('"') + 1);
|
|
871
|
-
}
|
|
872
|
-
else if (bracket !== -1) {
|
|
873
|
-
autoIncrementColumnName =
|
|
874
|
-
autoIncrementColumnName.substr(bracket);
|
|
875
|
-
autoIncrementColumnName =
|
|
876
|
-
autoIncrementColumnName.substr(0, autoIncrementColumnName.lastIndexOf('"'));
|
|
877
|
-
autoIncrementColumnName =
|
|
878
|
-
autoIncrementColumnName.substr(autoIncrementColumnName.indexOf('"') + 1);
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
table.columns = await Promise.all(dbColumns.map(async (dbColumn) => {
|
|
882
|
-
const tableColumn = new TableColumn();
|
|
883
|
-
tableColumn.name = dbColumn["name"];
|
|
884
|
-
tableColumn.type = dbColumn["type"].toLowerCase();
|
|
885
|
-
tableColumn.default =
|
|
886
|
-
dbColumn["dflt_value"] !== null &&
|
|
887
|
-
dbColumn["dflt_value"] !== undefined
|
|
888
|
-
? dbColumn["dflt_value"]
|
|
889
|
-
: undefined;
|
|
890
|
-
tableColumn.isNullable = dbColumn["notnull"] === 0;
|
|
891
|
-
tableColumn.isPrimary = dbColumn["pk"] > 0;
|
|
892
|
-
tableColumn.comment = ""; // SQLite does not support column comments
|
|
893
|
-
tableColumn.isGenerated =
|
|
894
|
-
autoIncrementColumnName === dbColumn["name"];
|
|
895
|
-
if (tableColumn.isGenerated) {
|
|
896
|
-
tableColumn.generationStrategy = "increment";
|
|
897
|
-
}
|
|
898
|
-
if (dbColumn["hidden"] === 2 ||
|
|
899
|
-
dbColumn["hidden"] === 3) {
|
|
900
|
-
tableColumn.generatedType =
|
|
901
|
-
dbColumn["hidden"] === 2 ? "VIRTUAL" : "STORED";
|
|
902
|
-
const asExpressionQuery = await this.selectTypeormMetadataSql({
|
|
903
|
-
table: table.name,
|
|
904
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
905
|
-
name: tableColumn.name,
|
|
906
|
-
});
|
|
907
|
-
const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
|
|
908
|
-
if (results[0] && results[0].value) {
|
|
909
|
-
tableColumn.asExpression = results[0].value;
|
|
910
|
-
}
|
|
911
|
-
else {
|
|
912
|
-
tableColumn.asExpression = "";
|
|
913
|
-
}
|
|
914
|
-
}
|
|
915
|
-
if (tableColumn.type === "varchar") {
|
|
916
|
-
const enumMatch = sql.match(new RegExp('"(' +
|
|
917
|
-
tableColumn.name +
|
|
918
|
-
")\" varchar CHECK\\s*\\(\\s*\"\\1\"\\s+IN\\s*\\(('[^']+'(?:\\s*,\\s*'[^']+')+)\\s*\\)\\s*\\)"));
|
|
919
|
-
if (enumMatch) {
|
|
920
|
-
tableColumn.enum = enumMatch[2]
|
|
921
|
-
.substr(1, enumMatch[2].length - 2)
|
|
922
|
-
.split("','");
|
|
923
|
-
}
|
|
924
|
-
}
|
|
925
|
-
let pos = tableColumn.type.indexOf("(");
|
|
926
|
-
if (pos !== -1) {
|
|
927
|
-
const fullType = tableColumn.type;
|
|
928
|
-
let dataType = fullType.substr(0, pos);
|
|
929
|
-
if (!!this.driver.withLengthColumnTypes.find((col) => col === dataType)) {
|
|
930
|
-
let len = parseInt(fullType.substring(pos + 1, fullType.length - 1));
|
|
931
|
-
if (len) {
|
|
932
|
-
tableColumn.length = len.toString();
|
|
933
|
-
tableColumn.type = dataType; // remove the length part from the datatype
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
if (!!this.driver.withPrecisionColumnTypes.find((col) => col === dataType)) {
|
|
937
|
-
const re = new RegExp(`^${dataType}\\((\\d+),?\\s?(\\d+)?\\)`);
|
|
938
|
-
const matches = fullType.match(re);
|
|
939
|
-
if (matches && matches[1]) {
|
|
940
|
-
tableColumn.precision = +matches[1];
|
|
941
|
-
}
|
|
942
|
-
if (!!this.driver.withScaleColumnTypes.find((col) => col === dataType)) {
|
|
943
|
-
if (matches && matches[2]) {
|
|
944
|
-
tableColumn.scale = +matches[2];
|
|
945
|
-
}
|
|
946
|
-
}
|
|
947
|
-
tableColumn.type = dataType; // remove the precision/scale part from the datatype
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
return tableColumn;
|
|
951
|
-
}));
|
|
952
|
-
let fkResult;
|
|
953
|
-
const fkMappings = [];
|
|
954
|
-
const fkRegex = /CONSTRAINT "([^"]*)" FOREIGN KEY ?\((.*?)\) REFERENCES "([^"]*)"/g;
|
|
955
|
-
while ((fkResult = fkRegex.exec(sql)) !== null) {
|
|
956
|
-
fkMappings.push({
|
|
957
|
-
name: fkResult[1],
|
|
958
|
-
columns: fkResult[2]
|
|
959
|
-
.substr(1, fkResult[2].length - 2)
|
|
960
|
-
.split(`", "`),
|
|
961
|
-
referencedTableName: fkResult[3],
|
|
962
|
-
});
|
|
963
|
-
}
|
|
964
|
-
const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys, (dbForeignKey) => dbForeignKey["id"]);
|
|
965
|
-
table.foreignKeys = tableForeignKeyConstraints.map((foreignKey) => {
|
|
966
|
-
const ownForeignKeys = dbForeignKeys.filter((dbForeignKey) => dbForeignKey["id"] === foreignKey["id"] &&
|
|
967
|
-
dbForeignKey["table"] === foreignKey["table"]);
|
|
968
|
-
const columnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["from"]);
|
|
969
|
-
const referencedColumnNames = ownForeignKeys.map((dbForeignKey) => dbForeignKey["to"]);
|
|
970
|
-
const fkMapping = fkMappings.find((it) => it.referencedTableName ===
|
|
971
|
-
foreignKey["table"] &&
|
|
972
|
-
it.columns.every((column) => columnNames.indexOf(column) !== -1));
|
|
973
|
-
return new TableForeignKey({
|
|
974
|
-
name: fkMapping.name,
|
|
975
|
-
columnNames: columnNames,
|
|
976
|
-
referencedTableName: foreignKey["table"],
|
|
977
|
-
referencedColumnNames: referencedColumnNames,
|
|
978
|
-
onDelete: foreignKey["on_delete"],
|
|
979
|
-
onUpdate: foreignKey["on_update"],
|
|
980
|
-
});
|
|
981
|
-
});
|
|
982
|
-
let uniqueRegexResult;
|
|
983
|
-
const uniqueMappings = [];
|
|
984
|
-
const uniqueRegex = /CONSTRAINT "([^"]*)" UNIQUE ?\((.*?)\)/g;
|
|
985
|
-
while ((uniqueRegexResult = uniqueRegex.exec(sql)) !== null) {
|
|
986
|
-
uniqueMappings.push({
|
|
987
|
-
name: uniqueRegexResult[1],
|
|
988
|
-
columns: uniqueRegexResult[2]
|
|
989
|
-
.substr(1, uniqueRegexResult[2].length - 2)
|
|
990
|
-
.split(`", "`),
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
|
-
const tableUniquePromises = dbIndices
|
|
994
|
-
.filter((dbIndex) => dbIndex["origin"] === "u")
|
|
995
|
-
.map((dbIndex) => dbIndex["name"])
|
|
996
|
-
.filter((value, index, self) => self.indexOf(value) === index)
|
|
997
|
-
.map(async (dbIndexName) => {
|
|
998
|
-
const dbIndex = dbIndices.find((dbIndex) => dbIndex["name"] === dbIndexName);
|
|
999
|
-
const indexInfos = await this.query(`PRAGMA index_info("${dbIndex["name"]}")`);
|
|
1000
|
-
const indexColumns = indexInfos
|
|
1001
|
-
.sort((indexInfo1, indexInfo2) => parseInt(indexInfo1["seqno"]) -
|
|
1002
|
-
parseInt(indexInfo2["seqno"]))
|
|
1003
|
-
.map((indexInfo) => indexInfo["name"]);
|
|
1004
|
-
if (indexColumns.length === 1) {
|
|
1005
|
-
const column = table.columns.find((column) => {
|
|
1006
|
-
return !!indexColumns.find((indexColumn) => indexColumn === column.name);
|
|
1007
|
-
});
|
|
1008
|
-
if (column)
|
|
1009
|
-
column.isUnique = true;
|
|
1010
|
-
}
|
|
1011
|
-
const foundMapping = uniqueMappings.find((mapping) => {
|
|
1012
|
-
return mapping.columns.every((column) => indexColumns.indexOf(column) !== -1);
|
|
1013
|
-
});
|
|
1014
|
-
return new TableUnique({
|
|
1015
|
-
name: foundMapping
|
|
1016
|
-
? foundMapping.name
|
|
1017
|
-
: this.connection.namingStrategy.uniqueConstraintName(table, indexColumns),
|
|
1018
|
-
columnNames: indexColumns,
|
|
1019
|
-
});
|
|
1020
|
-
});
|
|
1021
|
-
table.uniques = (await Promise.all(tableUniquePromises));
|
|
1022
|
-
let result;
|
|
1023
|
-
const regexp = /CONSTRAINT "([^"]*)" CHECK ?(\(.*?\))([,]|[)]$)/g;
|
|
1024
|
-
while ((result = regexp.exec(sql)) !== null) {
|
|
1025
|
-
table.checks.push(new TableCheck({
|
|
1026
|
-
name: result[1],
|
|
1027
|
-
expression: result[2],
|
|
1028
|
-
}));
|
|
1029
|
-
}
|
|
1030
|
-
const indicesPromises = dbIndices
|
|
1031
|
-
.filter((dbIndex) => dbIndex["origin"] === "c")
|
|
1032
|
-
.map((dbIndex) => dbIndex["name"])
|
|
1033
|
-
.filter((value, index, self) => self.indexOf(value) === index) // unqiue
|
|
1034
|
-
.map(async (dbIndexName) => {
|
|
1035
|
-
const indexDef = dbIndicesDef.find((dbIndexDef) => dbIndexDef["name"] === dbIndexName);
|
|
1036
|
-
const condition = /WHERE (.*)/.exec(indexDef["sql"]);
|
|
1037
|
-
const dbIndex = dbIndices.find((dbIndex) => dbIndex["name"] === dbIndexName);
|
|
1038
|
-
const indexInfos = await this.query(`PRAGMA index_info("${dbIndex["name"]}")`);
|
|
1039
|
-
const indexColumns = indexInfos
|
|
1040
|
-
.sort((indexInfo1, indexInfo2) => parseInt(indexInfo1["seqno"]) -
|
|
1041
|
-
parseInt(indexInfo2["seqno"]))
|
|
1042
|
-
.map((indexInfo) => indexInfo["name"]);
|
|
1043
|
-
const dbIndexPath = `${dbTable["database"] ? `${dbTable["database"]}.` : ""}${dbIndex["name"]}`;
|
|
1044
|
-
const isUnique = dbIndex["unique"] === "1" ||
|
|
1045
|
-
dbIndex["unique"] === 1;
|
|
1046
|
-
return new TableIndex({
|
|
1047
|
-
table: table,
|
|
1048
|
-
name: dbIndexPath,
|
|
1049
|
-
columnNames: indexColumns,
|
|
1050
|
-
isUnique: isUnique,
|
|
1051
|
-
where: condition ? condition[1] : undefined,
|
|
1052
|
-
});
|
|
1053
|
-
});
|
|
1054
|
-
const indices = await Promise.all(indicesPromises);
|
|
1055
|
-
table.indices = indices.filter((index) => !!index);
|
|
1056
|
-
return table;
|
|
1057
|
-
}));
|
|
1058
|
-
}
|
|
1059
|
-
/**
|
|
1060
|
-
* Builds create table sql.
|
|
1061
|
-
*/
|
|
1062
|
-
createTableSql(table, createForeignKeys, temporaryTable) {
|
|
1063
|
-
const primaryColumns = table.columns.filter((column) => column.isPrimary);
|
|
1064
|
-
const hasAutoIncrement = primaryColumns.find((column) => column.isGenerated && column.generationStrategy === "increment");
|
|
1065
|
-
const skipPrimary = primaryColumns.length > 1;
|
|
1066
|
-
if (skipPrimary && hasAutoIncrement)
|
|
1067
|
-
throw new TypeORMError(`Sqlite does not support AUTOINCREMENT on composite primary key`);
|
|
1068
|
-
const columnDefinitions = table.columns
|
|
1069
|
-
.map((column) => this.buildCreateColumnSql(column, skipPrimary))
|
|
1070
|
-
.join(", ");
|
|
1071
|
-
const [database] = this.splitTablePath(table.name);
|
|
1072
|
-
let sql = `CREATE TABLE ${this.escapePath(table.name)} (${columnDefinitions}`;
|
|
1073
|
-
let [databaseNew, tableName] = this.splitTablePath(table.name);
|
|
1074
|
-
const newTableName = temporaryTable
|
|
1075
|
-
? `${databaseNew ? `${databaseNew}.` : ""}${tableName.replace(/^temporary_/, "")}`
|
|
1076
|
-
: table.name;
|
|
1077
|
-
table.columns
|
|
1078
|
-
.filter((column) => column.isUnique)
|
|
1079
|
-
.forEach((column) => {
|
|
1080
|
-
const isUniqueExist = table.uniques.some((unique) => unique.columnNames.length === 1 &&
|
|
1081
|
-
unique.columnNames[0] === column.name);
|
|
1082
|
-
if (!isUniqueExist)
|
|
1083
|
-
table.uniques.push(new TableUnique({
|
|
1084
|
-
name: this.connection.namingStrategy.uniqueConstraintName(table, [column.name]),
|
|
1085
|
-
columnNames: [column.name],
|
|
1086
|
-
}));
|
|
1087
|
-
});
|
|
1088
|
-
if (table.uniques.length > 0) {
|
|
1089
|
-
const uniquesSql = table.uniques
|
|
1090
|
-
.map((unique) => {
|
|
1091
|
-
const uniqueName = unique.name
|
|
1092
|
-
? unique.name
|
|
1093
|
-
: this.connection.namingStrategy.uniqueConstraintName(newTableName, unique.columnNames);
|
|
1094
|
-
const columnNames = unique.columnNames
|
|
1095
|
-
.map((columnName) => `"${columnName}"`)
|
|
1096
|
-
.join(", ");
|
|
1097
|
-
return `CONSTRAINT "${uniqueName}" UNIQUE (${columnNames})`;
|
|
1098
|
-
})
|
|
1099
|
-
.join(", ");
|
|
1100
|
-
sql += `, ${uniquesSql}`;
|
|
1101
|
-
}
|
|
1102
|
-
if (table.checks.length > 0) {
|
|
1103
|
-
const checksSql = table.checks
|
|
1104
|
-
.map((check) => {
|
|
1105
|
-
const checkName = check.name
|
|
1106
|
-
? check.name
|
|
1107
|
-
: this.connection.namingStrategy.checkConstraintName(newTableName, check.expression);
|
|
1108
|
-
return `CONSTRAINT "${checkName}" CHECK (${check.expression})`;
|
|
1109
|
-
})
|
|
1110
|
-
.join(", ");
|
|
1111
|
-
sql += `, ${checksSql}`;
|
|
1112
|
-
}
|
|
1113
|
-
if (table.foreignKeys.length > 0 && createForeignKeys) {
|
|
1114
|
-
const foreignKeysSql = table.foreignKeys
|
|
1115
|
-
.filter((fk) => {
|
|
1116
|
-
const [referencedDatabase] = this.splitTablePath(fk.referencedTableName);
|
|
1117
|
-
if (referencedDatabase !== database) {
|
|
1118
|
-
return false;
|
|
1119
|
-
}
|
|
1120
|
-
return true;
|
|
1121
|
-
})
|
|
1122
|
-
.map((fk) => {
|
|
1123
|
-
const [, referencedTable] = this.splitTablePath(fk.referencedTableName);
|
|
1124
|
-
const columnNames = fk.columnNames
|
|
1125
|
-
.map((columnName) => `"${columnName}"`)
|
|
1126
|
-
.join(", ");
|
|
1127
|
-
if (!fk.name)
|
|
1128
|
-
fk.name = this.connection.namingStrategy.foreignKeyName(newTableName, fk.columnNames, this.getTablePath(fk), fk.referencedColumnNames);
|
|
1129
|
-
const referencedColumnNames = fk.referencedColumnNames
|
|
1130
|
-
.map((columnName) => `"${columnName}"`)
|
|
1131
|
-
.join(", ");
|
|
1132
|
-
let constraint = `CONSTRAINT "${fk.name}" FOREIGN KEY (${columnNames}) REFERENCES "${referencedTable}" (${referencedColumnNames})`;
|
|
1133
|
-
if (fk.onDelete)
|
|
1134
|
-
constraint += ` ON DELETE ${fk.onDelete}`;
|
|
1135
|
-
if (fk.onUpdate)
|
|
1136
|
-
constraint += ` ON UPDATE ${fk.onUpdate}`;
|
|
1137
|
-
if (fk.deferrable)
|
|
1138
|
-
constraint += ` DEFERRABLE ${fk.deferrable}`;
|
|
1139
|
-
return constraint;
|
|
1140
|
-
})
|
|
1141
|
-
.join(", ");
|
|
1142
|
-
sql += `, ${foreignKeysSql}`;
|
|
1143
|
-
}
|
|
1144
|
-
if (primaryColumns.length > 1) {
|
|
1145
|
-
const columnNames = primaryColumns
|
|
1146
|
-
.map((column) => `"${column.name}"`)
|
|
1147
|
-
.join(", ");
|
|
1148
|
-
sql += `, PRIMARY KEY (${columnNames})`;
|
|
1149
|
-
}
|
|
1150
|
-
sql += `)`;
|
|
1151
|
-
if (table.withoutRowid) {
|
|
1152
|
-
sql += " WITHOUT ROWID";
|
|
1153
|
-
}
|
|
1154
|
-
return new Query(sql);
|
|
1155
|
-
}
|
|
1156
|
-
/**
|
|
1157
|
-
* Builds drop table sql.
|
|
1158
|
-
*/
|
|
1159
|
-
dropTableSql(tableOrName, ifExist) {
|
|
1160
|
-
const tableName = InstanceChecker.isTable(tableOrName)
|
|
1161
|
-
? tableOrName.name
|
|
1162
|
-
: tableOrName;
|
|
1163
|
-
const query = ifExist
|
|
1164
|
-
? `DROP TABLE IF EXISTS ${this.escapePath(tableName)}`
|
|
1165
|
-
: `DROP TABLE ${this.escapePath(tableName)}`;
|
|
1166
|
-
return new Query(query);
|
|
1167
|
-
}
|
|
1168
|
-
createViewSql(view) {
|
|
1169
|
-
if (typeof view.expression === "string") {
|
|
1170
|
-
return new Query(`CREATE VIEW "${view.name}" AS ${view.expression}`);
|
|
1171
|
-
}
|
|
1172
|
-
else {
|
|
1173
|
-
return new Query(`CREATE VIEW "${view.name}" AS ${view
|
|
1174
|
-
.expression(this.connection)
|
|
1175
|
-
.getQuery()}`);
|
|
1176
|
-
}
|
|
1177
|
-
}
|
|
1178
|
-
insertViewDefinitionSql(view) {
|
|
1179
|
-
const expression = typeof view.expression === "string"
|
|
1180
|
-
? view.expression.trim()
|
|
1181
|
-
: view.expression(this.connection).getQuery();
|
|
1182
|
-
return this.insertTypeormMetadataSql({
|
|
1183
|
-
type: MetadataTableType.VIEW,
|
|
1184
|
-
name: view.name,
|
|
1185
|
-
value: expression,
|
|
1186
|
-
});
|
|
1187
|
-
}
|
|
1188
|
-
/**
|
|
1189
|
-
* Builds drop view sql.
|
|
1190
|
-
*/
|
|
1191
|
-
dropViewSql(viewOrPath) {
|
|
1192
|
-
const viewName = InstanceChecker.isView(viewOrPath)
|
|
1193
|
-
? viewOrPath.name
|
|
1194
|
-
: viewOrPath;
|
|
1195
|
-
return new Query(`DROP VIEW "${viewName}"`);
|
|
1196
|
-
}
|
|
1197
|
-
/**
|
|
1198
|
-
* Builds remove view sql.
|
|
1199
|
-
*/
|
|
1200
|
-
deleteViewDefinitionSql(viewOrPath) {
|
|
1201
|
-
const viewName = InstanceChecker.isView(viewOrPath)
|
|
1202
|
-
? viewOrPath.name
|
|
1203
|
-
: viewOrPath;
|
|
1204
|
-
return this.deleteTypeormMetadataSql({
|
|
1205
|
-
type: MetadataTableType.VIEW,
|
|
1206
|
-
name: viewName,
|
|
1207
|
-
});
|
|
1208
|
-
}
|
|
1209
|
-
/**
|
|
1210
|
-
* Builds create index sql.
|
|
1211
|
-
*/
|
|
1212
|
-
createIndexSql(table, index) {
|
|
1213
|
-
const columns = index.columnNames
|
|
1214
|
-
.map((columnName) => `"${columnName}"`)
|
|
1215
|
-
.join(", ");
|
|
1216
|
-
const [database, tableName] = this.splitTablePath(table.name);
|
|
1217
|
-
return new Query(`CREATE ${index.isUnique ? "UNIQUE " : ""}INDEX ${database ? `"${database}".` : ""}${this.escapePath(index.name)} ON "${tableName}" (${columns}) ${index.where ? "WHERE " + index.where : ""}`);
|
|
1218
|
-
}
|
|
1219
|
-
/**
|
|
1220
|
-
* Builds drop index sql.
|
|
1221
|
-
*/
|
|
1222
|
-
dropIndexSql(indexOrName) {
|
|
1223
|
-
let indexName = InstanceChecker.isTableIndex(indexOrName)
|
|
1224
|
-
? indexOrName.name
|
|
1225
|
-
: indexOrName;
|
|
1226
|
-
return new Query(`DROP INDEX ${this.escapePath(indexName)}`);
|
|
1227
|
-
}
|
|
1228
|
-
/**
|
|
1229
|
-
* Builds a query for create column.
|
|
1230
|
-
*/
|
|
1231
|
-
buildCreateColumnSql(column, skipPrimary) {
|
|
1232
|
-
let c = '"' + column.name + '"';
|
|
1233
|
-
if (InstanceChecker.isColumnMetadata(column)) {
|
|
1234
|
-
c += " " + this.driver.normalizeType(column);
|
|
1235
|
-
}
|
|
1236
|
-
else {
|
|
1237
|
-
c += " " + this.connection.driver.createFullType(column);
|
|
1238
|
-
}
|
|
1239
|
-
if (column.enum)
|
|
1240
|
-
c +=
|
|
1241
|
-
' CHECK( "' +
|
|
1242
|
-
column.name +
|
|
1243
|
-
'" IN (' +
|
|
1244
|
-
column.enum.map((val) => "'" + val + "'").join(",") +
|
|
1245
|
-
") )";
|
|
1246
|
-
if (column.isPrimary && !skipPrimary)
|
|
1247
|
-
c += " PRIMARY KEY";
|
|
1248
|
-
if (column.isGenerated === true &&
|
|
1249
|
-
column.generationStrategy === "increment")
|
|
1250
|
-
c += " AUTOINCREMENT";
|
|
1251
|
-
if (column.collation)
|
|
1252
|
-
c += " COLLATE " + column.collation;
|
|
1253
|
-
if (column.isNullable !== true)
|
|
1254
|
-
c += " NOT NULL";
|
|
1255
|
-
if (column.asExpression) {
|
|
1256
|
-
c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
|
|
1257
|
-
}
|
|
1258
|
-
else {
|
|
1259
|
-
if (column.default !== undefined && column.default !== null)
|
|
1260
|
-
c += " DEFAULT (" + column.default + ")";
|
|
1261
|
-
}
|
|
1262
|
-
return c;
|
|
1263
|
-
}
|
|
1264
|
-
async recreateTable(newTable, oldTable, migrateData = true) {
|
|
1265
|
-
const upQueries = [];
|
|
1266
|
-
const downQueries = [];
|
|
1267
|
-
oldTable.indices.forEach((index) => {
|
|
1268
|
-
upQueries.push(this.dropIndexSql(index));
|
|
1269
|
-
downQueries.push(this.createIndexSql(oldTable, index));
|
|
1270
|
-
});
|
|
1271
|
-
let [databaseNew, tableNameNew] = this.splitTablePath(newTable.name);
|
|
1272
|
-
let [, tableNameOld] = this.splitTablePath(oldTable.name);
|
|
1273
|
-
newTable.name = tableNameNew = `${databaseNew ? `${databaseNew}.` : ""}temporary_${tableNameNew}`;
|
|
1274
|
-
upQueries.push(this.createTableSql(newTable, true, true));
|
|
1275
|
-
downQueries.push(this.dropTableSql(newTable));
|
|
1276
|
-
if (migrateData) {
|
|
1277
|
-
let newColumnNames = newTable.columns
|
|
1278
|
-
.filter((column) => !column.generatedType)
|
|
1279
|
-
.map((column) => `"${column.name}"`);
|
|
1280
|
-
let oldColumnNames = oldTable.columns
|
|
1281
|
-
.filter((column) => !column.generatedType)
|
|
1282
|
-
.map((column) => `"${column.name}"`);
|
|
1283
|
-
if (oldColumnNames.length < newColumnNames.length) {
|
|
1284
|
-
newColumnNames = newTable.columns
|
|
1285
|
-
.filter((column) => {
|
|
1286
|
-
const oldColumn = oldTable.columns.find((c) => c.name === column.name);
|
|
1287
|
-
if (oldColumn && oldColumn.generatedType)
|
|
1288
|
-
return false;
|
|
1289
|
-
return !column.generatedType && oldColumn;
|
|
1290
|
-
})
|
|
1291
|
-
.map((column) => `"${column.name}"`);
|
|
1292
|
-
}
|
|
1293
|
-
else if (oldColumnNames.length > newColumnNames.length) {
|
|
1294
|
-
oldColumnNames = oldTable.columns
|
|
1295
|
-
.filter((column) => {
|
|
1296
|
-
return (!column.generatedType &&
|
|
1297
|
-
newTable.columns.find((c) => c.name === column.name));
|
|
1298
|
-
})
|
|
1299
|
-
.map((column) => `"${column.name}"`);
|
|
1300
|
-
}
|
|
1301
|
-
upQueries.push(new Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames.join(", ")}) SELECT ${oldColumnNames.join(", ")} FROM ${this.escapePath(oldTable.name)}`));
|
|
1302
|
-
downQueries.push(new Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames.join(", ")}) SELECT ${newColumnNames.join(", ")} FROM ${this.escapePath(newTable.name)}`));
|
|
1303
|
-
}
|
|
1304
|
-
upQueries.push(this.dropTableSql(oldTable));
|
|
1305
|
-
downQueries.push(this.createTableSql(oldTable, true));
|
|
1306
|
-
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable.name)} RENAME TO ${this.escapePath(tableNameOld)}`));
|
|
1307
|
-
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable.name)} RENAME TO ${this.escapePath(tableNameNew)}`));
|
|
1308
|
-
newTable.name = oldTable.name;
|
|
1309
|
-
newTable.indices.forEach((index) => {
|
|
1310
|
-
if (!index.name)
|
|
1311
|
-
index.name = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
|
|
1312
|
-
upQueries.push(this.createIndexSql(newTable, index));
|
|
1313
|
-
downQueries.push(this.dropIndexSql(index));
|
|
1314
|
-
});
|
|
1315
|
-
oldTable.columns
|
|
1316
|
-
.filter((column) => {
|
|
1317
|
-
const newTableColumn = newTable.columns.find((c) => c.name === column.name);
|
|
1318
|
-
return (column.generatedType &&
|
|
1319
|
-
column.asExpression &&
|
|
1320
|
-
(!newTableColumn ||
|
|
1321
|
-
(!newTableColumn.generatedType &&
|
|
1322
|
-
!newTableColumn.asExpression)));
|
|
1323
|
-
})
|
|
1324
|
-
.forEach((column) => {
|
|
1325
|
-
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1326
|
-
table: oldTable.name,
|
|
1327
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1328
|
-
name: column.name,
|
|
1329
|
-
});
|
|
1330
|
-
const insertQuery = this.insertTypeormMetadataSql({
|
|
1331
|
-
table: oldTable.name,
|
|
1332
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1333
|
-
name: column.name,
|
|
1334
|
-
value: column.asExpression,
|
|
1335
|
-
});
|
|
1336
|
-
upQueries.push(deleteQuery);
|
|
1337
|
-
downQueries.push(insertQuery);
|
|
1338
|
-
});
|
|
1339
|
-
newTable.columns
|
|
1340
|
-
.filter((column) => column.generatedType &&
|
|
1341
|
-
column.asExpression &&
|
|
1342
|
-
!oldTable.columns.some((c) => c.name === column.name))
|
|
1343
|
-
.forEach((column) => {
|
|
1344
|
-
const insertQuery = this.insertTypeormMetadataSql({
|
|
1345
|
-
table: newTable.name,
|
|
1346
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1347
|
-
name: column.name,
|
|
1348
|
-
value: column.asExpression,
|
|
1349
|
-
});
|
|
1350
|
-
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1351
|
-
table: newTable.name,
|
|
1352
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1353
|
-
name: column.name,
|
|
1354
|
-
});
|
|
1355
|
-
upQueries.push(insertQuery);
|
|
1356
|
-
downQueries.push(deleteQuery);
|
|
1357
|
-
});
|
|
1358
|
-
newTable.columns
|
|
1359
|
-
.filter((column) => column.generatedType && column.asExpression)
|
|
1360
|
-
.forEach((column) => {
|
|
1361
|
-
const oldColumn = oldTable.columns.find((c) => c.name === column.name &&
|
|
1362
|
-
c.generatedType &&
|
|
1363
|
-
column.generatedType &&
|
|
1364
|
-
c.asExpression !== column.asExpression);
|
|
1365
|
-
if (!oldColumn)
|
|
1366
|
-
return;
|
|
1367
|
-
const deleteQuery = this.deleteTypeormMetadataSql({
|
|
1368
|
-
table: oldTable.name,
|
|
1369
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1370
|
-
name: oldColumn.name,
|
|
1371
|
-
});
|
|
1372
|
-
const insertQuery = this.insertTypeormMetadataSql({
|
|
1373
|
-
table: newTable.name,
|
|
1374
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1375
|
-
name: column.name,
|
|
1376
|
-
value: column.asExpression,
|
|
1377
|
-
});
|
|
1378
|
-
upQueries.push(deleteQuery);
|
|
1379
|
-
upQueries.push(insertQuery);
|
|
1380
|
-
const revertInsertQuery = this.insertTypeormMetadataSql({
|
|
1381
|
-
table: newTable.name,
|
|
1382
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1383
|
-
name: oldColumn.name,
|
|
1384
|
-
value: oldColumn.asExpression,
|
|
1385
|
-
});
|
|
1386
|
-
const revertDeleteQuery = this.deleteTypeormMetadataSql({
|
|
1387
|
-
table: oldTable.name,
|
|
1388
|
-
type: MetadataTableType.GENERATED_COLUMN,
|
|
1389
|
-
name: column.name,
|
|
1390
|
-
});
|
|
1391
|
-
downQueries.push(revertInsertQuery);
|
|
1392
|
-
downQueries.push(revertDeleteQuery);
|
|
1393
|
-
});
|
|
1394
|
-
await this.executeQueries(upQueries, downQueries);
|
|
1395
|
-
this.replaceCachedTable(oldTable, newTable);
|
|
1396
|
-
}
|
|
1397
|
-
/**
|
|
1398
|
-
* tablePath e.g. "myDB.myTable", "myTable"
|
|
1399
|
-
*/
|
|
1400
|
-
splitTablePath(tablePath) {
|
|
1401
|
-
return (tablePath.indexOf(".") !== -1
|
|
1402
|
-
? tablePath.split(".")
|
|
1403
|
-
: [undefined, tablePath]);
|
|
1404
|
-
}
|
|
1405
|
-
/**
|
|
1406
|
-
* Escapes given table or view path. Tolerates leading/trailing dots
|
|
1407
|
-
*/
|
|
1408
|
-
escapePath(target, disableEscape) {
|
|
1409
|
-
const tableName = InstanceChecker.isTable(target) || InstanceChecker.isView(target)
|
|
1410
|
-
? target.name
|
|
1411
|
-
: target;
|
|
1412
|
-
return tableName
|
|
1413
|
-
.replace(/^\.+|\.+$/g, "")
|
|
1414
|
-
.split(".")
|
|
1415
|
-
.map((i) => (disableEscape ? i : `"${i}"`))
|
|
1416
|
-
.join(".");
|
|
1417
|
-
}
|
|
1418
|
-
}
|
|
1419
|
-
;
|
|
1420
|
-
({}); // @--end-of-file-for-module=taon-typeorm lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.ts
|
|
1421
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTcWxpdGVRdWVyeVJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uLXR5cGVvcm0vcHJvamVjdHMvdGFvbi10eXBlb3JtL3NyYy9saWIvdHlwZW9ybS9kcml2ZXIvc3FsaXRlLWFic3RyYWN0L0Fic3RyYWN0U3FsaXRlUXVlcnlSdW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDbkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBTWhDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUdsRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU1RDs7R0FFRztBQUNILE1BQU0sT0FBZ0IseUJBQ2xC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QUNiLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFDaEIsT0FBTyxTQUFTO2FBQ1gsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7YUFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQixDQUFDO0NBQ0o7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlHQUF5RyIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBRdWVyeVJ1bm5lciB9IGZyb20gXCIuLi8uLi9xdWVyeS1ydW5uZXIvUXVlcnlSdW5uZXJcIlxuaW1wb3J0IHsgT2JqZWN0TGl0ZXJhbCB9IGZyb20gXCIuLi8uLi9jb21tb24vT2JqZWN0TGl0ZXJhbFwiXG5pbXBvcnQgeyBUcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvci9UcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvclwiXG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9zY2hlbWEtYnVpbGRlci90YWJsZS9UYWJsZUNvbHVtblwiXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gXCIuLi8uLi9zY2hlbWEtYnVpbGRlci90YWJsZS9UYWJsZVwiXG5pbXBvcnQgeyBUYWJsZUluZGV4IH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlSW5kZXhcIlxuaW1wb3J0IHsgVGFibGVGb3JlaWduS2V5IH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlRm9yZWlnbktleVwiXG5pbXBvcnQgeyBWaWV3IH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3ZpZXcvVmlld1wiXG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuLi9RdWVyeVwiXG5pbXBvcnQgeyBBYnN0cmFjdFNxbGl0ZURyaXZlciB9IGZyb20gXCIuL0Fic3RyYWN0U3FsaXRlRHJpdmVyXCJcbi8qICovXG4vKiAqL1xuICBcbmltcG9ydCB7IFRhYmxlSW5kZXhPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL29wdGlvbnMvVGFibGVJbmRleE9wdGlvbnNcIlxuaW1wb3J0IHsgVGFibGVVbmlxdWUgfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVVbmlxdWVcIlxuaW1wb3J0IHsgQmFzZVF1ZXJ5UnVubmVyIH0gZnJvbSBcIi4uLy4uL3F1ZXJ5LXJ1bm5lci9CYXNlUXVlcnlSdW5uZXJcIlxuaW1wb3J0IHsgT3JtVXRpbHMgfSBmcm9tIFwiLi4vLi4vdXRpbC9Pcm1VdGlsc1wiXG5pbXBvcnQgeyBUYWJsZUNoZWNrIH0gZnJvbSBcIi4uLy4uL3NjaGVtYS1idWlsZGVyL3RhYmxlL1RhYmxlQ2hlY2tcIlxuaW1wb3J0IHsgSXNvbGF0aW9uTGV2ZWwgfSBmcm9tIFwiLi4vdHlwZXMvSXNvbGF0aW9uTGV2ZWxcIlxuaW1wb3J0IHsgVGFibGVFeGNsdXNpb24gfSBmcm9tIFwiLi4vLi4vc2NoZW1hLWJ1aWxkZXIvdGFibGUvVGFibGVFeGNsdXNpb25cIlxuaW1wb3J0IHsgVHJhbnNhY3Rpb25BbHJlYWR5U3RhcnRlZEVycm9yLCBUeXBlT1JNRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JcIlxuaW1wb3J0IHsgTWV0YWRhdGFUYWJsZVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvTWV0YWRhdGFUYWJsZVR5cGVcIlxuaW1wb3J0IHsgSW5zdGFuY2VDaGVja2VyIH0gZnJvbSBcIi4uLy4uL3V0aWwvSW5zdGFuY2VDaGVja2VyXCJcblxuLyoqXG4gKiBSdW5zIHF1ZXJpZXMgb24gYSBzaW5nbGUgc3FsaXRlIGRhdGFiYXNlIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNxbGl0ZVF1ZXJ5UnVubmVyXG4gICAgZXh0ZW5kcyBCYXNlUXVlcnlSdW5uZXJcbiAgICBpbXBsZW1lbnRzIFF1ZXJ5UnVubmVyXG57XG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBEYXRhYmFzZSBkcml2ZXIgdXNlZCBieSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGRyaXZlcjogQWJzdHJhY3RTcWxpdGVEcml2ZXJcblxuICAgIHByb3RlY3RlZCB0cmFuc2FjdGlvblByb21pc2U6IFByb21pc2U8YW55PiB8IG51bGwgPSBudWxsXG5cblxuXG5cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG4gICAgfVxuXG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzL3VzZXMgZGF0YWJhc2UgY29ubmVjdGlvbiBmcm9tIHRoZSBjb25uZWN0aW9uIHBvb2wgdG8gcGVyZm9ybSBmdXJ0aGVyIG9wZXJhdGlvbnMuXG4gICAgICogUmV0dXJucyBvYnRhaW5lZCBkYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGNvbm5lY3QoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRyaXZlci5kYXRhYmFzZUNvbm5lY3Rpb24pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgdXNlZCBkYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgICAqIFdlIGp1c3QgY2xlYXIgbG9hZGVkIHRhYmxlcyBhbmQgc3FsIGluIG1lbW9yeSwgYmVjYXVzZSBzcWxpdGUgZG8gbm90IHN1cHBvcnQgbXVsdGlwbGUgY29ubmVjdGlvbnMgdGh1cyBxdWVyeSBydW5uZXJzLlxuICAgICAqL1xuICAgIHJlbGVhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubG9hZGVkVGFibGVzID0gW11cbiAgICAgICAgdGhpcy5jbGVhclNxbE1lbW9yeSgpXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXJ0cyB0cmFuc2FjdGlvbi5cbiAgICAgKi9cbiAgICBhc3luYyBzdGFydFRyYW5zYWN0aW9uKGlzb2xhdGlvbkxldmVsPzogSXNvbGF0aW9uTGV2ZWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnRyYW5zYWN0aW9uU3VwcG9ydCA9PT0gXCJub25lXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBUcmFuc2FjdGlvbnMgYXJlbid0IHN1cHBvcnRlZCBieSAke3RoaXMuY29ubmVjdGlvbi5kcml2ZXIub3B0aW9ucy50eXBlfS5gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSAmJlxuICAgICAgICAgICAgdGhpcy5kcml2ZXIudHJhbnNhY3Rpb25TdXBwb3J0ID09PSBcInNpbXBsZVwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHRocm93IG5ldyBUcmFuc2FjdGlvbkFscmVhZHlTdGFydGVkRXJyb3IoKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsICYmXG4gICAgICAgICAgICBpc29sYXRpb25MZXZlbCAhPT0gXCJSRUFEIFVOQ09NTUlUVEVEXCIgJiZcbiAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsICE9PSBcIlNFUklBTElaQUJMRVwiXG4gICAgICAgIClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFNRTGl0ZSBvbmx5IHN1cHBvcnRzIFNFUklBTElaQUJMRSBhbmQgUkVBRCBVTkNPTU1JVFRFRCBpc29sYXRpb25gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0ZXIuYnJvYWRjYXN0KFwiQmVmb3JlVHJhbnNhY3Rpb25TdGFydFwiKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZSA9IGZhbHNlXG4gICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIGlmIChpc29sYXRpb25MZXZlbCkge1xuICAgICAgICAgICAgICAgIGlmIChpc29sYXRpb25MZXZlbCA9PT0gXCJSRUFEIFVOQ09NTUlUVEVEXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIlBSQUdNQSByZWFkX3VuY29tbWl0dGVkID0gdHJ1ZVwiKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoXCJQUkFHTUEgcmVhZF91bmNvbW1pdHRlZCA9IGZhbHNlXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIkJFR0lOIFRSQU5TQUNUSU9OXCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KGBTQVZFUE9JTlQgdHlwZW9ybV8ke3RoaXMudHJhbnNhY3Rpb25EZXB0aH1gKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCArPSAxXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJBZnRlclRyYW5zYWN0aW9uU3RhcnRcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21taXRzIHRyYW5zYWN0aW9uLlxuICAgICAqIEVycm9yIHdpbGwgYmUgdGhyb3duIGlmIHRyYW5zYWN0aW9uIHdhcyBub3Qgc3RhcnRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBjb21taXRUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUpIHRocm93IG5ldyBUcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvcigpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJCZWZvcmVUcmFuc2FjdGlvbkNvbW1pdFwiKVxuXG4gICAgICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uRGVwdGggPiAxKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgICAgIGBSRUxFQVNFIFNBVkVQT0lOVCB0eXBlb3JtXyR7dGhpcy50cmFuc2FjdGlvbkRlcHRoIC0gMX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIkNPTU1JVFwiKVxuICAgICAgICAgICAgdGhpcy5pc1RyYW5zYWN0aW9uQWN0aXZlID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGVwdGggLT0gMVxuXG4gICAgICAgIGF3YWl0IHRoaXMuYnJvYWRjYXN0ZXIuYnJvYWRjYXN0KFwiQWZ0ZXJUcmFuc2FjdGlvbkNvbW1pdFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvbGxiYWNrcyB0cmFuc2FjdGlvbi5cbiAgICAgKiBFcnJvciB3aWxsIGJlIHRocm93biBpZiB0cmFuc2FjdGlvbiB3YXMgbm90IHN0YXJ0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcm9sbGJhY2tUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUpIHRocm93IG5ldyBUcmFuc2FjdGlvbk5vdFN0YXJ0ZWRFcnJvcigpXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJCZWZvcmVUcmFuc2FjdGlvblJvbGxiYWNrXCIpXG5cbiAgICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25EZXB0aCA+IDEpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgYFJPTExCQUNLIFRPIFNBVkVQT0lOVCB0eXBlb3JtXyR7dGhpcy50cmFuc2FjdGlvbkRlcHRoIC0gMX1gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShcIlJPTExCQUNLXCIpXG4gICAgICAgICAgICB0aGlzLmlzVHJhbnNhY3Rpb25BY3RpdmUgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25EZXB0aCAtPSAxXG5cbiAgICAgICAgYXdhaXQgdGhpcy5icm9hZGNhc3Rlci5icm9hZGNhc3QoXCJBZnRlclRyYW5zYWN0aW9uUm9sbGJhY2tcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHJhdyBkYXRhIHN0cmVhbS5cbiAgICAgKi9cbiAgICBzdHJlYW0oXG4gICAgICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgICAgIHBhcmFtZXRlcnM/OiBhbnlbXSxcbiAgICAgICAgb25FbmQ/OiBGdW5jdGlvbixcbiAgICAgICAgb25FcnJvcj86IEZ1bmN0aW9uLFxuICAgIClcbi8qICovXG4vKiAqL1xuICBcbiAgICB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFN0cmVhbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNxbGl0ZSBkcml2ZXIuYClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCBhdmFpbGFibGUgZGF0YWJhc2UgbmFtZXMgaW5jbHVkaW5nIHN5c3RlbSBkYXRhYmFzZXMuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0RGF0YWJhc2VzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFsbCBhdmFpbGFibGUgc2NoZW1hIG5hbWVzIGluY2x1ZGluZyBzeXN0ZW0gc2NoZW1hcy5cbiAgICAgKiBJZiBkYXRhYmFzZSBwYXJhbWV0ZXIgc3BlY2lmaWVkLCByZXR1cm5zIHNjaGVtYXMgb2YgdGhhdCBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTY2hlbWFzKGRhdGFiYXNlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBkYXRhYmFzZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0LlxuICAgICAqL1xuICAgIGFzeW5jIGhhc0RhdGFiYXNlKGRhdGFiYXNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBjdXJyZW50bHkgdXNpbmcgZGF0YWJhc2VcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDdXJyZW50RGF0YWJhc2UoKTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHNjaGVtYSB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0LlxuICAgICAqL1xuICAgIGFzeW5jIGhhc1NjaGVtYShzY2hlbWE6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKGBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRhYmxlIHNjaGVtYXNgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGN1cnJlbnRseSB1c2luZyBkYXRhYmFzZSBzY2hlbWFcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDdXJyZW50U2NoZW1hKCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0YWJsZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBhc3luYyBoYXNUYWJsZSh0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgdGFibGVOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lLm5hbWVcbiAgICAgICAgICAgIDogdGFibGVPck5hbWVcbiAgICAgICAgY29uc3Qgc3FsID0gYFNFTEVDVCAqIEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnIEFORCBcIm5hbWVcIiA9ICcke3RhYmxlTmFtZX0nYFxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgY29sdW1uIHdpdGggdGhlIGdpdmVuIG5hbWUgZXhpc3QgaW4gdGhlIGdpdmVuIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGhhc0NvbHVtbihcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZS5uYW1lXG4gICAgICAgICAgICA6IHRhYmxlT3JOYW1lXG4gICAgICAgIGNvbnN0IHNxbCA9IGBQUkFHTUEgdGFibGVfeGluZm8oJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lKX0pYFxuICAgICAgICBjb25zdCBjb2x1bW5zOiBPYmplY3RMaXRlcmFsW10gPSBhd2FpdCB0aGlzLnF1ZXJ5KHNxbClcbiAgICAgICAgcmV0dXJuICEhY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbltcIm5hbWVcIl0gPT09IGNvbHVtbk5hbWUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVEYXRhYmFzZShcbiAgICAgICAgZGF0YWJhc2U6IHN0cmluZyxcbiAgICAgICAgaWZOb3RFeGlzdD86IGJvb2xlYW4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BEYXRhYmFzZShkYXRhYmFzZTogc3RyaW5nLCBpZkV4aXN0PzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRhYmxlIHNjaGVtYS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVTY2hlbWEoXG4gICAgICAgIHNjaGVtYVBhdGg6IHN0cmluZyxcbiAgICAgICAgaWZOb3RFeGlzdD86IGJvb2xlYW4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIHRhYmxlIHNjaGVtYS5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wU2NoZW1hKHNjaGVtYVBhdGg6IHN0cmluZywgaWZFeGlzdD86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVUYWJsZShcbiAgICAgICAgdGFibGU6IFRhYmxlLFxuICAgICAgICBpZk5vdEV4aXN0OiBib29sZWFuID0gZmFsc2UsXG4gICAgICAgIGNyZWF0ZUZvcmVpZ25LZXlzOiBib29sZWFuID0gdHJ1ZSxcbiAgICAgICAgY3JlYXRlSW5kaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVwUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIGNvbnN0IGRvd25RdWVyaWVzOiBRdWVyeVtdID0gW11cblxuICAgICAgICBpZiAoaWZOb3RFeGlzdCkge1xuICAgICAgICAgICAgY29uc3QgaXNUYWJsZUV4aXN0ID0gYXdhaXQgdGhpcy5oYXNUYWJsZSh0YWJsZSlcbiAgICAgICAgICAgIGlmIChpc1RhYmxlRXhpc3QpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVUYWJsZVNxbCh0YWJsZSwgY3JlYXRlRm9yZWlnbktleXMpKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcFRhYmxlU3FsKHRhYmxlKSlcblxuICAgICAgICBpZiAoY3JlYXRlSW5kaWNlcykge1xuICAgICAgICAgICAgdGFibGUuaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpbmRleC5uYW1lKVxuICAgICAgICAgICAgICAgICAgICBpbmRleC5uYW1lID0gdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmluZGV4TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleC53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuY3JlYXRlSW5kZXhTcWwodGFibGUsIGluZGV4KSlcbiAgICAgICAgICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmIGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgIClcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBnZW5lcmF0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRRdWVyeSA9IHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICB0YWJsZTogdGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgY29uc3QgZGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGluc2VydFF1ZXJ5KVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXBRdWVyaWVzLCBkb3duUXVlcmllcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFRhYmxlKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGlmRXhpc3Q/OiBib29sZWFuLFxuICAgICAgICBkcm9wRm9yZWlnbktleXM6IGJvb2xlYW4gPSB0cnVlLFxuICAgICAgICBkcm9wSW5kaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChpZkV4aXN0KSB7XG4gICAgICAgICAgICBjb25zdCBpc1RhYmxlRXhpc3QgPSBhd2FpdCB0aGlzLmhhc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgaWYgKCFpc1RhYmxlRXhpc3QpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBjcmVhdGVGb3JlaWduS2V5czogYm9vbGVhbiA9IGRyb3BGb3JlaWduS2V5c1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCB1cFF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICBjb25zdCBkb3duUXVlcmllczogUXVlcnlbXSA9IFtdXG5cbiAgICAgICAgaWYgKGRyb3BJbmRpY2VzKSB7XG4gICAgICAgICAgICB0YWJsZS5pbmRpY2VzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5kcm9wSW5kZXhTcWwoaW5kZXgpKVxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbCh0YWJsZSwgaW5kZXgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcFRhYmxlU3FsKHRhYmxlLCBpZkV4aXN0KSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVRhYmxlU3FsKHRhYmxlLCBjcmVhdGVGb3JlaWduS2V5cykpXG5cblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gdGFibGUuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4uZ2VuZXJhdGVkVHlwZSAmJiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICApXG5cbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZ2VuZXJhdGVkQ29sdW1ucykge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlUXVlcnkgPSB0aGlzLmRlbGV0ZVR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2goaW5zZXJ0UXVlcnkpXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwUXVlcmllcywgZG93blF1ZXJpZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB2aWV3LlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVZpZXcoXG4gICAgICAgIHZpZXc6IFZpZXcsXG4gICAgICAgIHN5bmNXaXRoTWV0YWRhdGE6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXBRdWVyaWVzOiBRdWVyeVtdID0gW11cbiAgICAgICAgY29uc3QgZG93blF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVZpZXdTcWwodmlldykpXG4gICAgICAgIGlmIChzeW5jV2l0aE1ldGFkYXRhKSB1cFF1ZXJpZXMucHVzaCh0aGlzLmluc2VydFZpZXdEZWZpbml0aW9uU3FsKHZpZXcpKVxuICAgICAgICBkb3duUXVlcmllcy5wdXNoKHRoaXMuZHJvcFZpZXdTcWwodmlldykpXG4gICAgICAgIGlmIChzeW5jV2l0aE1ldGFkYXRhKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmRlbGV0ZVZpZXdEZWZpbml0aW9uU3FsKHZpZXcpKVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwUXVlcmllcywgZG93blF1ZXJpZXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgdGhlIHZpZXcuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFZpZXcodGFyZ2V0OiBWaWV3IHwgc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHZpZXdOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVmlldyh0YXJnZXQpID8gdGFyZ2V0Lm5hbWUgOiB0YXJnZXRcbiAgICAgICAgY29uc3QgdmlldyA9IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVmlldyh2aWV3TmFtZSlcblxuICAgICAgICBjb25zdCB1cFF1ZXJpZXM6IFF1ZXJ5W10gPSBbXVxuICAgICAgICBjb25zdCBkb3duUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZGVsZXRlVmlld0RlZmluaXRpb25TcWwodmlldykpXG4gICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcFZpZXdTcWwodmlldykpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5pbnNlcnRWaWV3RGVmaW5pdGlvblNxbCh2aWV3KSlcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmNyZWF0ZVZpZXdTcWwodmlldykpXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVF1ZXJpZXModXBRdWVyaWVzLCBkb3duUXVlcmllcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBnaXZlbiB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyByZW5hbWVUYWJsZShcbiAgICAgICAgb2xkVGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBuZXdUYWJsZU5hbWU6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgb2xkVGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZShvbGRUYWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gb2xkVGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZShvbGRUYWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgbmV3VGFibGUgPSBvbGRUYWJsZS5jbG9uZSgpXG5cbiAgICAgICAgbmV3VGFibGUubmFtZSA9IG5ld1RhYmxlTmFtZVxuXG5cbiAgICAgICAgY29uc3QgdXAgPSBuZXcgUXVlcnkoXG4gICAgICAgICAgICBgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICAgICAgb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICl9IFJFTkFNRSBUTyAke3RoaXMuZXNjYXBlUGF0aChuZXdUYWJsZU5hbWUpfWAsXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgZG93biA9IG5ldyBRdWVyeShcbiAgICAgICAgICAgIGBBTFRFUiBUQUJMRSAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICApfSBSRU5BTUUgVE8gJHt0aGlzLmVzY2FwZVBhdGgob2xkVGFibGUubmFtZSl9YCxcbiAgICAgICAgKVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwLCBkb3duKVxuXG5cbiAgICAgICAgbmV3VGFibGUudW5pcXVlcy5mb3JFYWNoKCh1bmlxdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFVuaXF1ZU5hbWUgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgb2xkVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgaWYgKHVuaXF1ZS5uYW1lICE9PSBvbGRVbmlxdWVOYW1lKSByZXR1cm5cblxuICAgICAgICAgICAgdW5pcXVlLm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kudW5pcXVlQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgbmV3VGFibGUsXG4gICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3VGFibGUuZm9yZWlnbktleXMuZm9yRWFjaCgoZm9yZWlnbktleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2xkRm9yZWlnbktleU5hbWUgPVxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5mb3JlaWduS2V5TmFtZShcbiAgICAgICAgICAgICAgICAgICAgb2xkVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkuY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKGZvcmVpZ25LZXkpLFxuICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5LnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgaWYgKGZvcmVpZ25LZXkubmFtZSAhPT0gb2xkRm9yZWlnbktleU5hbWUpIHJldHVyblxuXG4gICAgICAgICAgICBmb3JlaWduS2V5Lm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuZm9yZWlnbktleU5hbWUoXG4gICAgICAgICAgICAgICAgbmV3VGFibGUsXG4gICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlUGF0aChmb3JlaWduS2V5KSxcbiAgICAgICAgICAgICAgICBmb3JlaWduS2V5LnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcblxuXG4gICAgICAgIG5ld1RhYmxlLmluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9sZEluZGV4TmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5pbmRleE5hbWUoXG4gICAgICAgICAgICAgICAgb2xkVGFibGUsXG4gICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgaWYgKGluZGV4Lm5hbWUgIT09IG9sZEluZGV4TmFtZSkgcmV0dXJuXG5cbiAgICAgICAgICAgIGluZGV4Lm5hbWUgPSB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuaW5kZXhOYW1lKFxuICAgICAgICAgICAgICAgIG5ld1RhYmxlLFxuICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgIGluZGV4LndoZXJlLFxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgb2xkVGFibGUubmFtZSA9IG5ld1RhYmxlLm5hbWVcblxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShuZXdUYWJsZSwgb2xkVGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjb2x1bW4gZnJvbSB0aGUgY29sdW1uIGluIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBhc3luYyBhZGRDb2x1bW4oXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1ucyh0YWJsZSEsIFtjb2x1bW5dKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY29sdW1ucyBmcm9tIHRoZSBjb2x1bW4gaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGFkZENvbHVtbnMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uczogVGFibGVDb2x1bW5bXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4gY2hhbmdlZFRhYmxlLmFkZENvbHVtbihjb2x1bW4pKVxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIGNvbHVtbiBpbiB0aGUgZ2l2ZW4gdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgcmVuYW1lQ29sdW1uKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIG9sZFRhYmxlQ29sdW1uT3JOYW1lOiBUYWJsZUNvbHVtbiB8IHN0cmluZyxcbiAgICAgICAgbmV3VGFibGVDb2x1bW5Pck5hbWU6IFRhYmxlQ29sdW1uIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBvbGRDb2x1bW4gPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNvbHVtbihvbGRUYWJsZUNvbHVtbk9yTmFtZSlcbiAgICAgICAgICAgID8gb2xkVGFibGVDb2x1bW5Pck5hbWVcbiAgICAgICAgICAgIDogdGFibGUuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG9sZFRhYmxlQ29sdW1uT3JOYW1lKVxuICAgICAgICBpZiAoIW9sZENvbHVtbilcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvbHVtbiBcIiR7b2xkVGFibGVDb2x1bW5Pck5hbWV9XCIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgXCIke3RhYmxlLm5hbWV9XCIgdGFibGUuYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBsZXQgbmV3Q29sdW1uOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4obmV3VGFibGVDb2x1bW5Pck5hbWUpKSB7XG4gICAgICAgICAgICBuZXdDb2x1bW4gPSBuZXdUYWJsZUNvbHVtbk9yTmFtZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q29sdW1uID0gb2xkQ29sdW1uLmNsb25lKClcbiAgICAgICAgICAgIG5ld0NvbHVtbi5uYW1lID0gbmV3VGFibGVDb2x1bW5Pck5hbWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5nZUNvbHVtbih0YWJsZSwgb2xkQ29sdW1uLCBuZXdDb2x1bW4pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhIGNvbHVtbiBpbiB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgY2hhbmdlQ29sdW1uKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIG9sZFRhYmxlQ29sdW1uT3JOYW1lOiBUYWJsZUNvbHVtbiB8IHN0cmluZyxcbiAgICAgICAgbmV3Q29sdW1uOiBUYWJsZUNvbHVtbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3Qgb2xkQ29sdW1uID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4ob2xkVGFibGVDb2x1bW5Pck5hbWUpXG4gICAgICAgICAgICA/IG9sZFRhYmxlQ29sdW1uT3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLmNvbHVtbnMuZmluZCgoYykgPT4gYy5uYW1lID09PSBvbGRUYWJsZUNvbHVtbk9yTmFtZSlcbiAgICAgICAgaWYgKCFvbGRDb2x1bW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBDb2x1bW4gXCIke29sZFRhYmxlQ29sdW1uT3JOYW1lfVwiIHdhcyBub3QgZm91bmQgaW4gdGhlIFwiJHt0YWJsZS5uYW1lfVwiIHRhYmxlLmAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5jaGFuZ2VDb2x1bW5zKHRhYmxlLCBbeyBvbGRDb2x1bW4sIG5ld0NvbHVtbiB9XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGEgY29sdW1uIGluIHRoZSB0YWJsZS5cbiAgICAgKiBDaGFuZ2VkIGNvbHVtbiBsb29zZXMgYWxsIGl0cyBrZXlzIGluIHRoZSBkYi5cbiAgICAgKi9cbiAgICBhc3luYyBjaGFuZ2VDb2x1bW5zKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoYW5nZWRDb2x1bW5zOiB7IG9sZENvbHVtbjogVGFibGVDb2x1bW47IG5ld0NvbHVtbjogVGFibGVDb2x1bW4gfVtdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIGNoYW5nZWRDb2x1bW5zLmZvckVhY2goKGNoYW5nZWRDb2x1bW5TZXQpID0+IHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lICE9PVxuICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgICAgICAuZmluZENvbHVtblVuaXF1ZXMoY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh1bmlxdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZU5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLnB1c2goY2hhbmdlZENvbHVtblNldC5uZXdDb2x1bW4ubmFtZSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pcXVlLm5hbWUgPT09IHVuaXF1ZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUubmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS51bmlxdWVDb25zdHJhaW50TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlXG4gICAgICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uRm9yZWlnbktleXMoY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmb3JlaWduS2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JlaWduS2V5TmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmZvcmVpZ25LZXlOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZm9yZWlnbktleSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkucmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcy5pbmRleE9mKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uU2V0Lm9sZENvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25LZXkuY29sdW1uTmFtZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JlaWduS2V5Lm5hbWUgPT09IGZvcmVpZ25LZXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5uYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmZvcmVpZ25LZXlOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVQYXRoKGZvcmVpZ25LZXkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbktleS5yZWZlcmVuY2VkQ29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgICAgICAuZmluZENvbHVtbkluZGljZXMoY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhOYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kuaW5kZXhOYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LndoZXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMuc3BsaWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLmluZGV4T2YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRDb2x1bW5TZXQub2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguY29sdW1uTmFtZXMucHVzaChjaGFuZ2VkQ29sdW1uU2V0Lm5ld0NvbHVtbi5uYW1lKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleC5uYW1lID09PSBpbmRleE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleC5uYW1lID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmluZGV4TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sdW1uID0gY2hhbmdlZFRhYmxlLmNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gY2hhbmdlZENvbHVtblNldC5vbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbENvbHVtbilcbiAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGUuY29sdW1uc1tcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFRhYmxlLmNvbHVtbnMuaW5kZXhPZihvcmlnaW5hbENvbHVtbilcbiAgICAgICAgICAgICAgICBdID0gY2hhbmdlZENvbHVtblNldC5uZXdDb2x1bW5cbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBjb2x1bW4gaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BDb2x1bW4oXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY29sdW1uT3JOYW1lOiBUYWJsZUNvbHVtbiB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgY29sdW1uID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGVDb2x1bW4oY29sdW1uT3JOYW1lKVxuICAgICAgICAgICAgPyBjb2x1bW5Pck5hbWVcbiAgICAgICAgICAgIDogdGFibGUuZmluZENvbHVtbkJ5TmFtZShjb2x1bW5Pck5hbWUpXG4gICAgICAgIGlmICghY29sdW1uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtjb2x1bW5Pck5hbWV9XCIgd2FzIG5vdCBmb3VuZCBpbiB0YWJsZSBcIiR7dGFibGUubmFtZX1cImAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wQ29sdW1ucyh0YWJsZSwgW2NvbHVtbl0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgdGhlIGNvbHVtbnMgaW4gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BDb2x1bW5zKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gfCBzdHJpbmdbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IFRhYmxlQ29sdW1uIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5JbnN0YW5jZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlQ29sdW1uKGNvbHVtbilcbiAgICAgICAgICAgICAgICA/IGNvbHVtblxuICAgICAgICAgICAgICAgIDogdGFibGUuZmluZENvbHVtbkJ5TmFtZShjb2x1bW4pXG4gICAgICAgICAgICBpZiAoIWNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYENvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBub3QgZm91bmQgaW4gdGFibGUgXCIke3RhYmxlLm5hbWV9XCJgLFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLnJlbW92ZUNvbHVtbihjb2x1bW5JbnN0YW5jZSlcbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uVW5pcXVlcyhjb2x1bW5JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgodW5pcXVlKSA9PlxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkVGFibGUucmVtb3ZlVW5pcXVlQ29uc3RyYWludCh1bmlxdWUpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZVxuICAgICAgICAgICAgICAgIC5maW5kQ29sdW1uSW5kaWNlcyhjb2x1bW5JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaW5kZXgpID0+IGNoYW5nZWRUYWJsZS5yZW1vdmVJbmRleChpbmRleCkpXG4gICAgICAgICAgICBjaGFuZ2VkVGFibGVcbiAgICAgICAgICAgICAgICAuZmluZENvbHVtbkZvcmVpZ25LZXlzKGNvbHVtbkluc3RhbmNlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaykgPT4gY2hhbmdlZFRhYmxlLnJlbW92ZUZvcmVpZ25LZXkoZmspKVxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcHJpbWFyeSBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlUHJpbWFyeUtleShcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGFuZ2VkVGFibGUuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lcy5maW5kKChjb2x1bW5OYW1lKSA9PiBjb2x1bW5OYW1lID09PSBjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAgICAgY29sdW1uLmlzUHJpbWFyeSA9IHRydWVcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcblxuICAgICAgICB0YWJsZS5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbk5hbWVzLmZpbmQoKGNvbHVtbk5hbWUpID0+IGNvbHVtbk5hbWUgPT09IGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgICAgICBjb2x1bW4uaXNQcmltYXJ5ID0gdHJ1ZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgY29tcG9zaXRlIHByaW1hcnkga2V5cy5cbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVQcmltYXJ5S2V5cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgcHJpbWFyeSBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFByaW1hcnlLZXkodGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGFuZ2VkVGFibGUucHJpbWFyeUNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4uaXNQcmltYXJ5ID0gZmFsc2VcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcblxuICAgICAgICB0YWJsZS5wcmltYXJ5Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5pc1ByaW1hcnkgPSBmYWxzZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgdW5pcXVlIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlVW5pcXVlQ29uc3RyYWludChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICB1bmlxdWVDb25zdHJhaW50OiBUYWJsZVVuaXF1ZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVVbmlxdWVDb25zdHJhaW50cyh0YWJsZU9yTmFtZSwgW3VuaXF1ZUNvbnN0cmFpbnRdKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgdW5pcXVlIGNvbnN0cmFpbnRzLlxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVVuaXF1ZUNvbnN0cmFpbnRzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzOiBUYWJsZVVuaXF1ZVtdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICB1bmlxdWVDb25zdHJhaW50cy5mb3JFYWNoKCh1bmlxdWVDb25zdHJhaW50KSA9PlxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLmFkZFVuaXF1ZUNvbnN0cmFpbnQodW5pcXVlQ29uc3RyYWludCksXG4gICAgICAgIClcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYW4gdW5pcXVlIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcFVuaXF1ZUNvbnN0cmFpbnQoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgdW5pcXVlT3JOYW1lOiBUYWJsZVVuaXF1ZSB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgdW5pcXVlQ29uc3RyYWludCA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlVW5pcXVlKHVuaXF1ZU9yTmFtZSlcbiAgICAgICAgICAgID8gdW5pcXVlT3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLnVuaXF1ZXMuZmluZCgodSkgPT4gdS5uYW1lID09PSB1bmlxdWVPck5hbWUpXG4gICAgICAgIGlmICghdW5pcXVlQ29uc3RyYWludClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN1cHBsaWVkIHVuaXF1ZSBjb25zdHJhaW50IHdhcyBub3QgZm91bmQgaW4gdGFibGUgJHt0YWJsZS5uYW1lfWAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wVW5pcXVlQ29uc3RyYWludHModGFibGUsIFt1bmlxdWVDb25zdHJhaW50XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHVuaXF1ZSBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wVW5pcXVlQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgdW5pcXVlQ29uc3RyYWludHM6IFRhYmxlVW5pcXVlW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cblxuICAgICAgICBjb25zdCBjaGFuZ2VkVGFibGUgPSB0YWJsZS5jbG9uZSgpXG4gICAgICAgIHVuaXF1ZUNvbnN0cmFpbnRzLmZvckVhY2goKHVuaXF1ZUNvbnN0cmFpbnQpID0+XG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUucmVtb3ZlVW5pcXVlQ29uc3RyYWludCh1bmlxdWVDb25zdHJhaW50KSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IGNoZWNrIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlQ2hlY2tDb25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoZWNrQ29uc3RyYWludDogVGFibGVDaGVjayxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVDaGVja0NvbnN0cmFpbnRzKHRhYmxlT3JOYW1lLCBbY2hlY2tDb25zdHJhaW50XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBjaGVjayBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVDaGVja0NvbnN0cmFpbnRzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoZWNrQ29uc3RyYWludHM6IFRhYmxlQ2hlY2tbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgY2hlY2tDb25zdHJhaW50cy5mb3JFYWNoKChjaGVja0NvbnN0cmFpbnQpID0+XG4gICAgICAgICAgICBjaGFuZ2VkVGFibGUuYWRkQ2hlY2tDb25zdHJhaW50KGNoZWNrQ29uc3RyYWludCksXG4gICAgICAgIClcbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgY2hlY2sgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wQ2hlY2tDb25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGNoZWNrT3JOYW1lOiBUYWJsZUNoZWNrIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICBjb25zdCBjaGVja0NvbnN0cmFpbnQgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUNoZWNrKGNoZWNrT3JOYW1lKVxuICAgICAgICAgICAgPyBjaGVja09yTmFtZVxuICAgICAgICAgICAgOiB0YWJsZS5jaGVja3MuZmluZCgoYykgPT4gYy5uYW1lID09PSBjaGVja09yTmFtZSlcbiAgICAgICAgaWYgKCFjaGVja0NvbnN0cmFpbnQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBTdXBwbGllZCBjaGVjayBjb25zdHJhaW50IHdhcyBub3QgZm91bmQgaW4gdGFibGUgJHt0YWJsZS5uYW1lfWAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5kcm9wQ2hlY2tDb25zdHJhaW50cyh0YWJsZSwgW2NoZWNrQ29uc3RyYWludF0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgY2hlY2sgY29uc3RyYWludHMuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcENoZWNrQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgY2hlY2tDb25zdHJhaW50czogVGFibGVDaGVja1tdLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlKHRhYmxlT3JOYW1lKVxuICAgICAgICAgICAgPyB0YWJsZU9yTmFtZVxuICAgICAgICAgICAgOiBhd2FpdCB0aGlzLmdldENhY2hlZFRhYmxlKHRhYmxlT3JOYW1lKVxuXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBjaGVja0NvbnN0cmFpbnRzLmZvckVhY2goKGNoZWNrQ29uc3RyYWludCkgPT5cbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5yZW1vdmVDaGVja0NvbnN0cmFpbnQoY2hlY2tDb25zdHJhaW50KSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMucmVjcmVhdGVUYWJsZShjaGFuZ2VkVGFibGUsIHRhYmxlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZXhjbHVzaW9uIGNvbnN0cmFpbnQuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlRXhjbHVzaW9uQ29uc3RyYWludChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBleGNsdXNpb25Db25zdHJhaW50OiBUYWJsZUV4Y2x1c2lvbixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgU3FsaXRlIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzLmApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBleGNsdXNpb24gY29uc3RyYWludHMuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlRXhjbHVzaW9uQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IFRhYmxlRXhjbHVzaW9uW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGV4Y2x1c2lvbiBjb25zdHJhaW50LlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BFeGNsdXNpb25Db25zdHJhaW50KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGV4Y2x1c2lvbk9yTmFtZTogVGFibGVFeGNsdXNpb24gfCBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGV4Y2x1c2lvbiBjb25zdHJhaW50cy5cbiAgICAgKi9cbiAgICBhc3luYyBkcm9wRXhjbHVzaW9uQ29uc3RyYWludHMoXG4gICAgICAgIHRhYmxlT3JOYW1lOiBUYWJsZSB8IHN0cmluZyxcbiAgICAgICAgZXhjbHVzaW9uQ29uc3RyYWludHM6IFRhYmxlRXhjbHVzaW9uW10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJhaW50cy5gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZm9yZWlnbiBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlRm9yZWlnbktleShcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBmb3JlaWduS2V5OiBUYWJsZUZvcmVpZ25LZXksXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlRm9yZWlnbktleXModGFibGVPck5hbWUsIFtmb3JlaWduS2V5XSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGZvcmVpZ24ga2V5cy5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVGb3JlaWduS2V5cyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBmb3JlaWduS2V5czogVGFibGVGb3JlaWduS2V5W10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lXG4gICAgICAgICAgICA6IGF3YWl0IHRoaXMuZ2V0Q2FjaGVkVGFibGUodGFibGVPck5hbWUpXG5cbiAgICAgICAgY29uc3QgY2hhbmdlZFRhYmxlID0gdGFibGUuY2xvbmUoKVxuICAgICAgICBmb3JlaWduS2V5cy5mb3JFYWNoKChmb3JlaWduS2V5KSA9PlxuICAgICAgICAgICAgY2hhbmdlZFRhYmxlLmFkZEZvcmVpZ25LZXkoZm9yZWlnbktleSksXG4gICAgICAgIClcblxuICAgICAgICBhd2FpdCB0aGlzLnJlY3JlYXRlVGFibGUoY2hhbmdlZFRhYmxlLCB0YWJsZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhIGZvcmVpZ24ga2V5IGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BGb3JlaWduS2V5KFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGZvcmVpZ25LZXlPck5hbWU6IFRhYmxlRm9yZWlnbktleSB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgZm9yZWlnbktleSA9IEluc3RhbmNlQ2hlY2tlci5pc1RhYmxlRm9yZWlnbktleShmb3JlaWduS2V5T3JOYW1lKVxuICAgICAgICAgICAgPyBmb3JlaWduS2V5T3JOYW1lXG4gICAgICAgICAgICA6IHRhYmxlLmZvcmVpZ25LZXlzLmZpbmQoKGZrKSA9PiBmay5uYW1lID09PSBmb3JlaWduS2V5T3JOYW1lKVxuICAgICAgICBpZiAoIWZvcmVpZ25LZXkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBTdXBwbGllZCBmb3JlaWduIGtleSB3YXMgbm90IGZvdW5kIGluIHRhYmxlICR7dGFibGUubmFtZX1gLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IHRoaXMuZHJvcEZvcmVpZ25LZXlzKHRhYmxlT3JOYW1lLCBbZm9yZWlnbktleV0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRHJvcHMgYSBmb3JlaWduIGtleXMgZnJvbSB0aGUgdGFibGUuXG4gICAgICovXG4gICAgYXN5bmMgZHJvcEZvcmVpZ25LZXlzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGZvcmVpZ25LZXlzOiBUYWJsZUZvcmVpZ25LZXlbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGNvbnN0IGNoYW5nZWRUYWJsZSA9IHRhYmxlLmNsb25lKClcbiAgICAgICAgZm9yZWlnbktleXMuZm9yRWFjaCgoZm9yZWlnbktleSkgPT5cbiAgICAgICAgICAgIGNoYW5nZWRUYWJsZS5yZW1vdmVGb3JlaWduS2V5KGZvcmVpZ25LZXkpLFxuICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgdGhpcy5yZWNyZWF0ZVRhYmxlKGNoYW5nZWRUYWJsZSwgdGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbmRleC5cbiAgICAgKi9cbiAgICBhc3luYyBjcmVhdGVJbmRleChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBpbmRleDogVGFibGVJbmRleCxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcblxuXG4gICAgICAgIGlmICghaW5kZXgubmFtZSkgaW5kZXgubmFtZSA9IHRoaXMuZ2VuZXJhdGVJbmRleE5hbWUodGFibGUsIGluZGV4KVxuXG4gICAgICAgIGNvbnN0IHVwID0gdGhpcy5jcmVhdGVJbmRleFNxbCh0YWJsZSwgaW5kZXgpXG4gICAgICAgIGNvbnN0IGRvd24gPSB0aGlzLmRyb3BJbmRleFNxbChpbmRleClcbiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUXVlcmllcyh1cCwgZG93bilcbiAgICAgICAgdGFibGUuYWRkSW5kZXgoaW5kZXgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbmRpY2VzXG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlSW5kaWNlcyhcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBpbmRpY2VzOiBUYWJsZUluZGV4W10sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gaW5kaWNlcy5tYXAoKGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5jcmVhdGVJbmRleCh0YWJsZU9yTmFtZSwgaW5kZXgpLFxuICAgICAgICApXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGFuIGluZGV4IGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BJbmRleChcbiAgICAgICAgdGFibGVPck5hbWU6IFRhYmxlIHwgc3RyaW5nLFxuICAgICAgICBpbmRleE9yTmFtZTogVGFibGVJbmRleCB8IHN0cmluZyxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgICAgID8gdGFibGVPck5hbWVcbiAgICAgICAgICAgIDogYXdhaXQgdGhpcy5nZXRDYWNoZWRUYWJsZSh0YWJsZU9yTmFtZSlcbiAgICAgICAgY29uc3QgaW5kZXggPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUluZGV4KGluZGV4T3JOYW1lKVxuICAgICAgICAgICAgPyBpbmRleE9yTmFtZVxuICAgICAgICAgICAgOiB0YWJsZS5pbmRpY2VzLmZpbmQoKGkpID0+IGkubmFtZSA9PT0gaW5kZXhPck5hbWUpXG4gICAgICAgIGlmICghaW5kZXgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBTdXBwbGllZCBpbmRleCAke2luZGV4T3JOYW1lfSB3YXMgbm90IGZvdW5kIGluIHRhYmxlICR7dGFibGUubmFtZX1gLFxuICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgaWYgKCFpbmRleC5uYW1lKSBpbmRleC5uYW1lID0gdGhpcy5nZW5lcmF0ZUluZGV4TmFtZSh0YWJsZSwgaW5kZXgpXG5cbiAgICAgICAgY29uc3QgdXAgPSB0aGlzLmRyb3BJbmRleFNxbChpbmRleClcbiAgICAgICAgY29uc3QgZG93biA9IHRoaXMuY3JlYXRlSW5kZXhTcWwodGFibGUsIGluZGV4KVxuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVRdWVyaWVzKHVwLCBkb3duKVxuICAgICAgICB0YWJsZS5yZW1vdmVJbmRleChpbmRleClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbiBpbmRpY2VzIGZyb20gdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIGFzeW5jIGRyb3BJbmRpY2VzKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGluZGljZXM6IFRhYmxlSW5kZXhbXSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBpbmRpY2VzLm1hcCgoaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmRyb3BJbmRleCh0YWJsZU9yTmFtZSwgaW5kZXgpLFxuICAgICAgICApXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgdGFibGUgY29udGVudHMuXG4gICAgICogTm90ZTogdGhpcyBvcGVyYXRpb24gdXNlcyBTUUwncyBUUlVOQ0FURSBxdWVyeSB3aGljaCBjYW5ub3QgYmUgcmV2ZXJ0ZWQgaW4gdHJhbnNhY3Rpb25zLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyVGFibGUodGFibGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5xdWVyeShgREVMRVRFIEZST00gJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lKX1gKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIHRhYmxlcyBmcm9tIHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIGRhdGFiYXNlLlxuICAgICAqL1xuICAgIGFzeW5jIGNsZWFyRGF0YWJhc2UoZGF0YWJhc2U/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGRiUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRhdGFiYXNlICYmXG4gICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoZGF0YWJhc2UpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGJQYXRoID1cbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoZGF0YWJhc2UpXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLnF1ZXJ5KGBQUkFHTUEgZm9yZWlnbl9rZXlzID0gT0ZGYClcblxuICAgICAgICBjb25zdCBpc0Fub3RoZXJUcmFuc2FjdGlvbkFjdGl2ZSA9IHRoaXMuaXNUcmFuc2FjdGlvbkFjdGl2ZVxuICAgICAgICBpZiAoIWlzQW5vdGhlclRyYW5zYWN0aW9uQWN0aXZlKSBhd2FpdCB0aGlzLnN0YXJ0VHJhbnNhY3Rpb24oKVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0Vmlld0Ryb3BzUXVlcnkgPSBkYlBhdGhcbiAgICAgICAgICAgICAgICA/IGBTRUxFQ1QgJ0RST1AgVklFVyBcIiR7ZGJQYXRofVwiLlwiJyB8fCBuYW1lIHx8ICdcIjsnIGFzIHF1ZXJ5IEZST00gXCIke2RiUGF0aH1cIi5cInNxbGl0ZV9tYXN0ZXJcIiBXSEVSRSBcInR5cGVcIiA9ICd2aWV3J2BcbiAgICAgICAgICAgICAgICA6IGBTRUxFQ1QgJ0RST1AgVklFVyBcIicgfHwgbmFtZSB8fCAnXCI7JyBhcyBxdWVyeSBGUk9NIFwic3FsaXRlX21hc3RlclwiIFdIRVJFIFwidHlwZVwiID0gJ3ZpZXcnYFxuICAgICAgICAgICAgY29uc3QgZHJvcFZpZXdRdWVyaWVzOiBPYmplY3RMaXRlcmFsW10gPSBhd2FpdCB0aGlzLnF1ZXJ5KFxuICAgICAgICAgICAgICAgIHNlbGVjdFZpZXdEcm9wc1F1ZXJ5LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZHJvcFZpZXdRdWVyaWVzLm1hcCgocSkgPT4gdGhpcy5xdWVyeShxW1wicXVlcnlcIl0pKSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0VGFibGVEcm9wc1F1ZXJ5ID0gZGJQYXRoXG4gICAgICAgICAgICAgICAgPyBgU0VMRUNUICdEUk9QIFRBQkxFIFwiJHtkYlBhdGh9XCIuXCInIHx8IG5hbWUgfHwgJ1wiOycgYXMgcXVlcnkgRlJPTSBcIiR7ZGJQYXRofVwiLlwic3FsaXRlX21hc3RlclwiIFdIRVJFIFwidHlwZVwiID0gJ3RhYmxlJyBBTkQgXCJuYW1lXCIgIT0gJ3NxbGl0ZV9zZXF1ZW5jZSdgXG4gICAgICAgICAgICAgICAgOiBgU0VMRUNUICdEUk9QIFRBQkxFIFwiJyB8fCBuYW1lIHx8ICdcIjsnIGFzIHF1ZXJ5IEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnIEFORCBcIm5hbWVcIiAhPSAnc3FsaXRlX3NlcXVlbmNlJ2BcbiAgICAgICAgICAgIGNvbnN0IGRyb3BUYWJsZVF1ZXJpZXM6IE9iamVjdExpdGVyYWxbXSA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgc2VsZWN0VGFibGVEcm9wc1F1ZXJ5LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgZHJvcFRhYmxlUXVlcmllcy5tYXAoKHEpID0+IHRoaXMucXVlcnkocVtcInF1ZXJ5XCJdKSksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmICghaXNBbm90aGVyVHJhbnNhY3Rpb25BY3RpdmUpIGF3YWl0IHRoaXMuY29tbWl0VHJhbnNhY3Rpb24oKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgIGlmICghaXNBbm90aGVyVHJhbnNhY3Rpb25BY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucm9sbGJhY2tUcmFuc2FjdGlvbigpXG4gICAgICAgICAgICB9IGNhdGNoIChyb2xsYmFja0Vycm9yKSB7fVxuICAgICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucXVlcnkoYFBSQUdNQSBmb3JlaWduX2tleXMgPSBPTmApXG4gICAgICAgIH1cbiAgICB9XG5cblxuXG5cblxuICAgIHByb3RlY3RlZCBhc3luYyBsb2FkVmlld3Modmlld05hbWVzPzogc3RyaW5nW10pOiBQcm9taXNlPFZpZXdbXT4ge1xuICAgICAgICBjb25zdCBoYXNUYWJsZSA9IGF3YWl0IHRoaXMuaGFzVGFibGUodGhpcy5nZXRUeXBlb3JtTWV0YWRhdGFUYWJsZU5hbWUoKSlcbiAgICAgICAgaWYgKCFoYXNUYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZpZXdOYW1lcykge1xuICAgICAgICAgICAgdmlld05hbWVzID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpZXdOYW1lc1N0cmluZyA9IHZpZXdOYW1lc1xuICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gXCInXCIgKyBuYW1lICsgXCInXCIpXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpXG4gICAgICAgIGxldCBxdWVyeSA9IGBTRUxFQ1QgXCJ0XCIuKiBGUk9NIFwiJHt0aGlzLmdldFR5cGVvcm1NZXRhZGF0YVRhYmxlTmFtZSgpfVwiIFwidFwiIElOTkVSIEpPSU4gXCJzcWxpdGVfbWFzdGVyXCIgcyBPTiBcInNcIi5cIm5hbWVcIiA9IFwidFwiLlwibmFtZVwiIEFORCBcInNcIi5cInR5cGVcIiA9ICd2aWV3JyBXSEVSRSBcInRcIi5cInR5cGVcIiA9ICcke1xuICAgICAgICAgICAgTWV0YWRhdGFUYWJsZVR5cGUuVklFV1xuICAgICAgICB9J2BcbiAgICAgICAgaWYgKHZpZXdOYW1lc1N0cmluZy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcXVlcnkgKz0gYCBBTkQgXCJ0XCIuXCJuYW1lXCIgSU4gKCR7dmlld05hbWVzU3RyaW5nfSlgXG4gICAgICAgIGNvbnN0IGRiVmlld3MgPSBhd2FpdCB0aGlzLnF1ZXJ5KHF1ZXJ5KVxuICAgICAgICByZXR1cm4gZGJWaWV3cy5tYXAoKGRiVmlldzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gbmV3IFZpZXcoKVxuICAgICAgICAgICAgdmlldy5uYW1lID0gZGJWaWV3W1wibmFtZVwiXVxuICAgICAgICAgICAgdmlldy5leHByZXNzaW9uID0gZGJWaWV3W1widmFsdWVcIl1cbiAgICAgICAgICAgIHJldHVybiB2aWV3XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRUYWJsZVJlY29yZHMoXG4gICAgICAgIHRhYmxlUGF0aDogc3RyaW5nLFxuICAgICAgICB0YWJsZU9ySW5kZXg6IFwidGFibGVcIiB8IFwiaW5kZXhcIixcbiAgICApIHtcbiAgICAgICAgbGV0IGRhdGFiYXNlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgICAgY29uc3QgW3NjaGVtYSwgdGFibGVOYW1lXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGVQYXRoKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzY2hlbWEgJiZcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VQYXRoUmVsYXRpdmVCeUhhbmRsZShzY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGF0YWJhc2UgPVxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldEF0dGFjaGVkRGF0YWJhc2VQYXRoUmVsYXRpdmVCeUhhbmRsZShzY2hlbWEpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgIGBTRUxFQ1QgJHtkYXRhYmFzZSA/IGAnJHtkYXRhYmFzZX0nYCA6IG51bGx9IGFzIGRhdGFiYXNlLCAke1xuICAgICAgICAgICAgICAgIHNjaGVtYSA/IGAnJHtzY2hlbWF9J2AgOiBudWxsXG4gICAgICAgICAgICB9IGFzIHNjaGVtYSwgKiBGUk9NICR7XG4gICAgICAgICAgICAgICAgc2NoZW1hID8gYFwiJHtzY2hlbWF9XCIuYCA6IFwiXCJcbiAgICAgICAgICAgIH0ke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICBgc3FsaXRlX21hc3RlcmAsXG4gICAgICAgICAgICApfSBXSEVSRSBcInR5cGVcIiA9ICcke3RhYmxlT3JJbmRleH0nIEFORCBcIiR7XG4gICAgICAgICAgICAgICAgdGFibGVPckluZGV4ID09PSBcInRhYmxlXCIgPyBcIm5hbWVcIiA6IFwidGJsX25hbWVcIlxuICAgICAgICAgICAgfVwiIElOICgnJHt0YWJsZU5hbWV9JylgLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRQcmFnbWFSZWNvcmRzKHRhYmxlUGF0aDogc3RyaW5nLCBwcmFnbWE6IHN0cmluZykge1xuICAgICAgICBjb25zdCBbLCB0YWJsZU5hbWVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aCh0YWJsZVBhdGgpXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMucXVlcnkoYFBSQUdNQSAke3ByYWdtYX0oXCIke3RhYmxlTmFtZX1cIilgKVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgYWxsIHRhYmxlcyAod2l0aCBnaXZlbiBuYW1lcykgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIGNyZWF0ZXMgYSBUYWJsZSBmcm9tIHRoZW0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFzeW5jIGxvYWRUYWJsZXModGFibGVOYW1lcz86IHN0cmluZ1tdKTogUHJvbWlzZTxUYWJsZVtdPiB7XG5cbiAgICAgICAgaWYgKHRhYmxlTmFtZXMgJiYgdGFibGVOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRiVGFibGVzOiB7IGRhdGFiYXNlPzogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNxbDogc3RyaW5nIH1bXSA9IFtdXG4gICAgICAgIGxldCBkYkluZGljZXNEZWY6IE9iamVjdExpdGVyYWxbXVxuXG4gICAgICAgIGlmICghdGFibGVOYW1lcykge1xuICAgICAgICAgICAgY29uc3QgdGFibGVzU3FsID0gYFNFTEVDVCAqIEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAndGFibGUnYFxuICAgICAgICAgICAgZGJUYWJsZXMucHVzaCguLi4oYXdhaXQgdGhpcy5xdWVyeSh0YWJsZXNTcWwpKSlcblxuICAgICAgICAgICAgY29uc3QgdGFibGVOYW1lc1N0cmluZyA9IGRiVGFibGVzXG4gICAgICAgICAgICAgICAgLm1hcCgoeyBuYW1lIH0pID0+IGAnJHtuYW1lfSdgKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAgIGRiSW5kaWNlc0RlZiA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgYFNFTEVDVCAqIEZST00gXCJzcWxpdGVfbWFzdGVyXCIgV0hFUkUgXCJ0eXBlXCIgPSAnaW5kZXgnIEFORCBcInRibF9uYW1lXCIgSU4gKCR7dGFibGVOYW1lc1N0cmluZ30pYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRiVGFibGVzID0gKFxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICB0YWJsZU5hbWVzLm1hcCgodGFibGVOYW1lKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVSZWNvcmRzKHRhYmxlTmFtZSwgXCJ0YWJsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCByZXMpID0+IFsuLi5hY2MsIC4uLnJlc10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIGRiSW5kaWNlc0RlZiA9IChcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgKHRhYmxlTmFtZXMgPz8gW10pLm1hcCgodGFibGVOYW1lKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVSZWNvcmRzKHRhYmxlTmFtZSwgXCJpbmRleFwiKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCByZXMpID0+IFsuLi5hY2MsIC4uLnJlc10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKGRiVGFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGRiVGFibGVzLm1hcChhc3luYyAoZGJUYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9XG4gICAgICAgICAgICAgICAgICAgIGRiVGFibGVbXCJkYXRhYmFzZVwiXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5nZXRBdHRhY2hlZERhdGFiYXNlSGFuZGxlQnlSZWxhdGl2ZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgICAgICBkYlRhYmxlW1wiZGF0YWJhc2VcIl0sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5kcml2ZXIuZ2V0QXR0YWNoZWREYXRhYmFzZUhhbmRsZUJ5UmVsYXRpdmVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJUYWJsZVtcImRhdGFiYXNlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApfS4ke2RiVGFibGVbXCJuYW1lXCJdfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGJUYWJsZVtcIm5hbWVcIl1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNxbCA9IGRiVGFibGVbXCJzcWxcIl1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHdpdGhvdXRSb3dpZCA9IHNxbC5pbmNsdWRlcyhcIldJVEhPVVQgUk9XSURcIilcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh7IG5hbWU6IHRhYmxlUGF0aCwgd2l0aG91dFJvd2lkIH0pXG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IFtkYkNvbHVtbnMsIGRiSW5kaWNlcywgZGJGb3JlaWduS2V5c106IE9iamVjdExpdGVyYWxbXVtdID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJhZ21hUmVjb3Jkcyh0YWJsZVBhdGgsIGB0YWJsZV94aW5mb2ApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUHJhZ21hUmVjb3Jkcyh0YWJsZVBhdGgsIGBpbmRleF9saXN0YCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQcmFnbWFSZWNvcmRzKHRhYmxlUGF0aCwgYGZvcmVpZ25fa2V5X2xpc3RgKSxcbiAgICAgICAgICAgICAgICAgICAgXSlcblxuXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVNxbDogc3RyaW5nID0gZGJUYWJsZVtcInNxbFwiXVxuICAgICAgICAgICAgICAgIGxldCBhdXRvSW5jcmVtZW50SW5kZXggPSB0YWJsZVNxbFxuICAgICAgICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihcIkFVVE9JTkNSRU1FTlRcIilcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luY3JlbWVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9IHRhYmxlU3FsLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWEgPSBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5sYXN0SW5kZXhPZihcIixcIilcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJhY2tldCA9IGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLmxhc3RJbmRleE9mKFwiKFwiKVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWEgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKGNvbW1hKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUubGFzdEluZGV4T2YoJ1wiJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lLnN1YnN0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuaW5kZXhPZignXCInKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJyYWNrZXQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKGJyYWNrZXQpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5sYXN0SW5kZXhPZignXCInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0luY3JlbWVudENvbHVtbk5hbWUuc3Vic3RyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvSW5jcmVtZW50Q29sdW1uTmFtZS5pbmRleE9mKCdcIicpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIHRhYmxlLmNvbHVtbnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5zLm1hcChhc3luYyAoZGJDb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29sdW1uID0gbmV3IFRhYmxlQ29sdW1uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLm5hbWUgPSBkYkNvbHVtbltcIm5hbWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnR5cGUgPSBkYkNvbHVtbltcInR5cGVcIl0udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uZGVmYXVsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJkZmx0X3ZhbHVlXCJdICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJkZmx0X3ZhbHVlXCJdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkYkNvbHVtbltcImRmbHRfdmFsdWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmlzTnVsbGFibGUgPSBkYkNvbHVtbltcIm5vdG51bGxcIl0gPT09IDBcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uaXNQcmltYXJ5ID0gZGJDb2x1bW5bXCJwa1wiXSA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmNvbW1lbnQgPSBcIlwiIC8vIFNRTGl0ZSBkb2VzIG5vdCBzdXBwb3J0IGNvbHVtbiBjb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVDb2x1bW4uaXNHZW5lcmF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9JbmNyZW1lbnRDb2x1bW5OYW1lID09PSBkYkNvbHVtbltcIm5hbWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbHVtbi5pc0dlbmVyYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmdlbmVyYXRpb25TdHJhdGVneSA9IFwiaW5jcmVtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiQ29sdW1uW1wiaGlkZGVuXCJdID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJDb2x1bW5bXCJoaWRkZW5cIl0gPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmdlbmVyYXRlZFR5cGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkNvbHVtbltcImhpZGRlblwiXSA9PT0gMiA/IFwiVklSVFVBTFwiIDogXCJTVE9SRURcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNFeHByZXNzaW9uUXVlcnkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZUNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMucXVlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzRXhwcmVzc2lvblF1ZXJ5LnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc0V4cHJlc3Npb25RdWVyeS5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0c1swXSAmJiByZXN1bHRzWzBdLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmFzRXhwcmVzc2lvbiA9IHJlc3VsdHNbMF0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5hc0V4cHJlc3Npb24gPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVDb2x1bW4udHlwZSA9PT0gXCJ2YXJjaGFyXCIpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudW1NYXRjaCA9IHNxbC5tYXRjaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIignICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi5uYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIilcXFwiIHZhcmNoYXIgQ0hFQ0tcXFxccypcXFxcKFxcXFxzKlxcXCJcXFxcMVxcXCJcXFxccytJTlxcXFxzKlxcXFwoKCdbXiddKycoPzpcXFxccyosXFxcXHMqJ1teJ10rJykrKVxcXFxzKlxcXFwpXFxcXHMqXFxcXClcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudW1NYXRjaCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmVudW0gPSBlbnVtTWF0Y2hbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMSwgZW51bU1hdGNoWzJdLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoXCInLCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBvcyA9IHRhYmxlQ29sdW1uLnR5cGUuaW5kZXhPZihcIihcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbFR5cGUgPSB0YWJsZUNvbHVtbi50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFUeXBlID0gZnVsbFR5cGUuc3Vic3RyKDAsIHBvcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhdGhpcy5kcml2ZXIud2l0aExlbmd0aENvbHVtblR5cGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sKSA9PiBjb2wgPT09IGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsZW4gPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxUeXBlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxUeXBlLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLmxlbmd0aCA9IGxlbi50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi50eXBlID0gZGF0YVR5cGUgLy8gcmVtb3ZlIHRoZSBsZW5ndGggcGFydCBmcm9tIHRoZSBkYXRhdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLmRyaXZlci53aXRoUHJlY2lzaW9uQ29sdW1uVHlwZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wpID0+IGNvbCA9PT0gZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYF4ke2RhdGFUeXBlfVxcXFwoKFxcXFxkKyksP1xcXFxzPyhcXFxcZCspP1xcXFwpYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVsbFR5cGUubWF0Y2gocmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnByZWNpc2lvbiA9ICttYXRjaGVzWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLmRyaXZlci53aXRoU2NhbGVDb2x1bW5UeXBlcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wpID0+IGNvbCA9PT0gZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1syXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1uLnNjYWxlID0gK21hdGNoZXNbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbi50eXBlID0gZGF0YVR5cGUgLy8gcmVtb3ZlIHRoZSBwcmVjaXNpb24vc2NhbGUgcGFydCBmcm9tIHRoZSBkYXRhdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIClcblxuXG4gICAgICAgICAgICAgICAgbGV0IGZrUmVzdWx0XG4gICAgICAgICAgICAgICAgY29uc3QgZmtNYXBwaW5nczoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uczogc3RyaW5nW11cbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogc3RyaW5nXG4gICAgICAgICAgICAgICAgfVtdID0gW11cbiAgICAgICAgICAgICAgICBjb25zdCBma1JlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgL0NPTlNUUkFJTlQgXCIoW15cIl0qKVwiIEZPUkVJR04gS0VZID9cXCgoLio/KVxcKSBSRUZFUkVOQ0VTIFwiKFteXCJdKilcIi9nXG4gICAgICAgICAgICAgICAgd2hpbGUgKChma1Jlc3VsdCA9IGZrUmVnZXguZXhlYyhzcWwpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBma01hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmtSZXN1bHRbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBma1Jlc3VsdFsyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMSwgZmtSZXN1bHRbMl0ubGVuZ3RoIC0gMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoYFwiLCBcImApLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogZmtSZXN1bHRbM10sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUZvcmVpZ25LZXlDb25zdHJhaW50cyA9IE9ybVV0aWxzLnVuaXEoXG4gICAgICAgICAgICAgICAgICAgIGRiRm9yZWlnbktleXMsXG4gICAgICAgICAgICAgICAgICAgIChkYkZvcmVpZ25LZXkpID0+IGRiRm9yZWlnbktleVtcImlkXCJdLFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIHRhYmxlLmZvcmVpZ25LZXlzID0gdGFibGVGb3JlaWduS2V5Q29uc3RyYWludHMubWFwKFxuICAgICAgICAgICAgICAgICAgICAoZm9yZWlnbktleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3duRm9yZWlnbktleXMgPSBkYkZvcmVpZ25LZXlzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJGb3JlaWduS2V5KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYkZvcmVpZ25LZXlbXCJpZFwiXSA9PT0gZm9yZWlnbktleVtcImlkXCJdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRiRm9yZWlnbktleVtcInRhYmxlXCJdID09PSBmb3JlaWduS2V5W1widGFibGVcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5OYW1lcyA9IG93bkZvcmVpZ25LZXlzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJGb3JlaWduS2V5KSA9PiBkYkZvcmVpZ25LZXlbXCJmcm9tXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlZENvbHVtbk5hbWVzID0gb3duRm9yZWlnbktleXMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYkZvcmVpZ25LZXkpID0+IGRiRm9yZWlnbktleVtcInRvXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZrTWFwcGluZyA9IGZrTWFwcGluZ3MuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LnJlZmVyZW5jZWRUYWJsZU5hbWUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduS2V5W1widGFibGVcIl0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuY29sdW1ucy5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMuaW5kZXhPZihjb2x1bW4pICE9PSAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUZvcmVpZ25LZXkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZrTWFwcGluZyEubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczogY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlZFRhYmxlTmFtZTogZm9yZWlnbktleVtcInRhYmxlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZWRDb2x1bW5OYW1lczogcmVmZXJlbmNlZENvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBmb3JlaWduS2V5W1wib25fZGVsZXRlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiBmb3JlaWduS2V5W1wib25fdXBkYXRlXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgICAgIGxldCB1bmlxdWVSZWdleFJlc3VsdFxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXF1ZU1hcHBpbmdzOiB7IG5hbWU6IHN0cmluZzsgY29sdW1uczogc3RyaW5nW10gfVtdID0gW11cbiAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVSZWdleCA9IC9DT05TVFJBSU5UIFwiKFteXCJdKilcIiBVTklRVUUgP1xcKCguKj8pXFwpL2dcbiAgICAgICAgICAgICAgICB3aGlsZSAoKHVuaXF1ZVJlZ2V4UmVzdWx0ID0gdW5pcXVlUmVnZXguZXhlYyhzcWwpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWVNYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHVuaXF1ZVJlZ2V4UmVzdWx0WzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogdW5pcXVlUmVnZXhSZXN1bHRbMl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic3RyKDEsIHVuaXF1ZVJlZ2V4UmVzdWx0WzJdLmxlbmd0aCAtIDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KGBcIiwgXCJgKSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlVW5pcXVlUHJvbWlzZXMgPSBkYkluZGljZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZGJJbmRleCkgPT4gZGJJbmRleFtcIm9yaWdpblwiXSA9PT0gXCJ1XCIpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGRiSW5kZXgpID0+IGRiSW5kZXhbXCJuYW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLm1hcChhc3luYyAoZGJJbmRleE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRiSW5kZXggPSBkYkluZGljZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0gPT09IGRiSW5kZXhOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJbmZvczogT2JqZWN0TGl0ZXJhbFtdID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUFJBR01BIGluZGV4X2luZm8oXCIke2RiSW5kZXghW1wibmFtZVwiXX1cIilgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhDb2x1bW5zID0gaW5kZXhJbmZvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhJbmZvMSwgaW5kZXhJbmZvMikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGluZGV4SW5mbzFbXCJzZXFub1wiXSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXhJbmZvMltcInNlcW5vXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaW5kZXhJbmZvKSA9PiBpbmRleEluZm9bXCJuYW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0YWJsZS5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFpbmRleENvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmRleENvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvbHVtbiA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4pIGNvbHVtbi5pc1VuaXF1ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE1hcHBpbmcgPSB1bmlxdWVNYXBwaW5ncy5maW5kKChtYXBwaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmchLmNvbHVtbnMuZXZlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4pID0+IGluZGV4Q29sdW1ucy5pbmRleE9mKGNvbHVtbikgIT09IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVVbmlxdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZvdW5kTWFwcGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZvdW5kTWFwcGluZy5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXM6IGluZGV4Q29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgdGFibGUudW5pcXVlcyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgdGFibGVVbmlxdWVQcm9taXNlcyxcbiAgICAgICAgICAgICAgICApKSBhcyBUYWJsZVVuaXF1ZVtdXG5cblxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAvQ09OU1RSQUlOVCBcIihbXlwiXSopXCIgQ0hFQ0sgPyhcXCguKj9cXCkpKFssXXxbKV0kKS9nXG4gICAgICAgICAgICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdleHAuZXhlYyhzcWwpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS5jaGVja3MucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBUYWJsZUNoZWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXN1bHRbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogcmVzdWx0WzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXNQcm9taXNlcyA9IGRiSW5kaWNlc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChkYkluZGV4KSA9PiBkYkluZGV4W1wib3JpZ2luXCJdID09PSBcImNcIilcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgKSAvLyB1bnFpdWVcbiAgICAgICAgICAgICAgICAgICAgLm1hcChhc3luYyAoZGJJbmRleE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4RGVmID0gZGJJbmRpY2VzRGVmLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRiSW5kZXhEZWYpID0+IGRiSW5kZXhEZWZbXCJuYW1lXCJdID09PSBkYkluZGV4TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IC9XSEVSRSAoLiopLy5leGVjKGluZGV4RGVmIVtcInNxbFwiXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRiSW5kZXggPSBkYkluZGljZXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJJbmRleCkgPT4gZGJJbmRleFtcIm5hbWVcIl0gPT09IGRiSW5kZXhOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhJbmZvczogT2JqZWN0TGl0ZXJhbFtdID0gYXdhaXQgdGhpcy5xdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgUFJBR01BIGluZGV4X2luZm8oXCIke2RiSW5kZXghW1wibmFtZVwiXX1cIilgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhDb2x1bW5zID0gaW5kZXhJbmZvc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXhJbmZvMSwgaW5kZXhJbmZvMikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGluZGV4SW5mbzFbXCJzZXFub1wiXSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXhJbmZvMltcInNlcW5vXCJdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoaW5kZXhJbmZvKSA9PiBpbmRleEluZm9bXCJuYW1lXCJdKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGJJbmRleFBhdGggPSBgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYlRhYmxlW1wiZGF0YWJhc2VcIl0gPyBgJHtkYlRhYmxlW1wiZGF0YWJhc2VcIl19LmAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9JHtkYkluZGV4IVtcIm5hbWVcIl19YFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1VuaXF1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmRleCFbXCJ1bmlxdWVcIl0gPT09IFwiMVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGJJbmRleCFbXCJ1bmlxdWVcIl0gPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVJbmRleCg8VGFibGVJbmRleE9wdGlvbnM+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBkYkluZGV4UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lczogaW5kZXhDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5pcXVlOiBpc1VuaXF1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZTogY29uZGl0aW9uID8gY29uZGl0aW9uWzFdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoaW5kaWNlc1Byb21pc2VzKVxuICAgICAgICAgICAgICAgIHRhYmxlLmluZGljZXMgPSBpbmRpY2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGluZGV4KSA9PiAhIWluZGV4LFxuICAgICAgICAgICAgICAgICkgYXMgVGFibGVJbmRleFtdXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGNyZWF0ZSB0YWJsZSBzcWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRhYmxlU3FsKFxuICAgICAgICB0YWJsZTogVGFibGUsXG4gICAgICAgIGNyZWF0ZUZvcmVpZ25LZXlzPzogYm9vbGVhbixcbiAgICAgICAgdGVtcG9yYXJ5VGFibGU/OiBib29sZWFuLFxuICAgICk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbHVtbnMgPSB0YWJsZS5jb2x1bW5zLmZpbHRlcihcbiAgICAgICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5pc1ByaW1hcnksXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgaGFzQXV0b0luY3JlbWVudCA9IHByaW1hcnlDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5pc0dlbmVyYXRlZCAmJiBjb2x1bW4uZ2VuZXJhdGlvblN0cmF0ZWd5ID09PSBcImluY3JlbWVudFwiLFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHNraXBQcmltYXJ5ID0gcHJpbWFyeUNvbHVtbnMubGVuZ3RoID4gMVxuICAgICAgICBpZiAoc2tpcFByaW1hcnkgJiYgaGFzQXV0b0luY3JlbWVudClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFNxbGl0ZSBkb2VzIG5vdCBzdXBwb3J0IEFVVE9JTkNSRU1FTlQgb24gY29tcG9zaXRlIHByaW1hcnkga2V5YCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9ucyA9IHRhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gdGhpcy5idWlsZENyZWF0ZUNvbHVtblNxbChjb2x1bW4sIHNraXBQcmltYXJ5KSlcbiAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgY29uc3QgW2RhdGFiYXNlXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGUubmFtZSlcbiAgICAgICAgbGV0IHNxbCA9IGBDUkVBVEUgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICB0YWJsZS5uYW1lLFxuICAgICAgICApfSAoJHtjb2x1bW5EZWZpbml0aW9uc31gXG5cbiAgICAgICAgbGV0IFtkYXRhYmFzZU5ldywgdGFibGVOYW1lXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGUubmFtZSlcbiAgICAgICAgY29uc3QgbmV3VGFibGVOYW1lID0gdGVtcG9yYXJ5VGFibGVcbiAgICAgICAgICAgID8gYCR7ZGF0YWJhc2VOZXcgPyBgJHtkYXRhYmFzZU5ld30uYCA6IFwiXCJ9JHt0YWJsZU5hbWUucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgIC9edGVtcG9yYXJ5Xy8sXG4gICAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgIDogdGFibGUubmFtZVxuXG5cbiAgICAgICAgdGFibGUuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uaXNVbmlxdWUpXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNVbmlxdWVFeGlzdCA9IHRhYmxlLnVuaXF1ZXMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHVuaXF1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lcy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZS5jb2x1bW5OYW1lc1swXSA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmICghaXNVbmlxdWVFeGlzdClcbiAgICAgICAgICAgICAgICAgICAgdGFibGUudW5pcXVlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRhYmxlVW5pcXVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbm5lY3Rpb24ubmFtaW5nU3RyYXRlZ3kudW5pcXVlQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uLm5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXM6IFtjb2x1bW4ubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICBpZiAodGFibGUudW5pcXVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bmlxdWVzU3FsID0gdGFibGUudW5pcXVlc1xuICAgICAgICAgICAgICAgIC5tYXAoKHVuaXF1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVOYW1lID0gdW5pcXVlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdW5pcXVlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LnVuaXF1ZUNvbnN0cmFpbnROYW1lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlLmNvbHVtbk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gdW5pcXVlLmNvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiBgXCIke2NvbHVtbk5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENPTlNUUkFJTlQgXCIke3VuaXF1ZU5hbWV9XCIgVU5JUVVFICgke2NvbHVtbk5hbWVzfSlgXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG5cbiAgICAgICAgICAgIHNxbCArPSBgLCAke3VuaXF1ZXNTcWx9YFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmxlLmNoZWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja3NTcWwgPSB0YWJsZS5jaGVja3NcbiAgICAgICAgICAgICAgICAubWFwKChjaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGVja05hbWUgPSBjaGVjay5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNoZWNrLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25uZWN0aW9uLm5hbWluZ1N0cmF0ZWd5LmNoZWNrQ29uc3RyYWludE5hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjay5leHByZXNzaW9uISxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENPTlNUUkFJTlQgXCIke2NoZWNrTmFtZX1cIiBDSEVDSyAoJHtjaGVjay5leHByZXNzaW9ufSlgXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG5cbiAgICAgICAgICAgIHNxbCArPSBgLCAke2NoZWNrc1NxbH1gXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFibGUuZm9yZWlnbktleXMubGVuZ3RoID4gMCAmJiBjcmVhdGVGb3JlaWduS2V5cykge1xuICAgICAgICAgICAgY29uc3QgZm9yZWlnbktleXNTcWwgPSB0YWJsZS5mb3JlaWduS2V5c1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZWZlcmVuY2VkRGF0YWJhc2VdID0gdGhpcy5zcGxpdFRhYmxlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZrLnJlZmVyZW5jZWRUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWREYXRhYmFzZSAhPT0gZGF0YWJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAubWFwKChmaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCByZWZlcmVuY2VkVGFibGVdID0gdGhpcy5zcGxpdFRhYmxlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIGZrLnJlZmVyZW5jZWRUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZXMgPSBmay5jb2x1bW5OYW1lc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uTmFtZSkgPT4gYFwiJHtjb2x1bW5OYW1lfVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmay5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmsubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5mb3JlaWduS2V5TmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmsuY29sdW1uTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUYWJsZVBhdGgoZmspLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZrLnJlZmVyZW5jZWRDb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlZENvbHVtbk5hbWVzID0gZmsucmVmZXJlbmNlZENvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW5OYW1lKSA9PiBgXCIke2NvbHVtbk5hbWV9XCJgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25zdHJhaW50ID0gYENPTlNUUkFJTlQgXCIke2ZrLm5hbWV9XCIgRk9SRUlHTiBLRVkgKCR7Y29sdW1uTmFtZXN9KSBSRUZFUkVOQ0VTIFwiJHtyZWZlcmVuY2VkVGFibGV9XCIgKCR7cmVmZXJlbmNlZENvbHVtbk5hbWVzfSlgXG4gICAgICAgICAgICAgICAgICAgIGlmIChmay5vbkRlbGV0ZSkgY29uc3RyYWludCArPSBgIE9OIERFTEVURSAke2ZrLm9uRGVsZXRlfWBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZrLm9uVXBkYXRlKSBjb25zdHJhaW50ICs9IGAgT04gVVBEQVRFICR7Zmsub25VcGRhdGV9YFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmsuZGVmZXJyYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQgKz0gYCBERUZFUlJBQkxFICR7ZmsuZGVmZXJyYWJsZX1gXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbnRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcblxuICAgICAgICAgICAgc3FsICs9IGAsICR7Zm9yZWlnbktleXNTcWx9YFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByaW1hcnlDb2x1bW5zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gcHJpbWFyeUNvbHVtbnNcbiAgICAgICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1uLm5hbWV9XCJgKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcbiAgICAgICAgICAgIHNxbCArPSBgLCBQUklNQVJZIEtFWSAoJHtjb2x1bW5OYW1lc30pYFxuICAgICAgICB9XG5cbiAgICAgICAgc3FsICs9IGApYFxuXG4gICAgICAgIGlmICh0YWJsZS53aXRob3V0Um93aWQpIHtcbiAgICAgICAgICAgIHNxbCArPSBcIiBXSVRIT1VUIFJPV0lEXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoc3FsKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBkcm9wIHRhYmxlIHNxbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZHJvcFRhYmxlU3FsKFxuICAgICAgICB0YWJsZU9yTmFtZTogVGFibGUgfCBzdHJpbmcsXG4gICAgICAgIGlmRXhpc3Q/OiBib29sZWFuLFxuICAgICk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3QgdGFibGVOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVGFibGUodGFibGVPck5hbWUpXG4gICAgICAgICAgICA/IHRhYmxlT3JOYW1lLm5hbWVcbiAgICAgICAgICAgIDogdGFibGVPck5hbWVcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpZkV4aXN0XG4gICAgICAgICAgICA/IGBEUk9QIFRBQkxFIElGIEVYSVNUUyAke3RoaXMuZXNjYXBlUGF0aCh0YWJsZU5hbWUpfWBcbiAgICAgICAgICAgIDogYERST1AgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgodGFibGVOYW1lKX1gXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkocXVlcnkpXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVZpZXdTcWwodmlldzogVmlldyk6IFF1ZXJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2aWV3LmV4cHJlc3Npb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUXVlcnkoYENSRUFURSBWSUVXIFwiJHt2aWV3Lm5hbWV9XCIgQVMgJHt2aWV3LmV4cHJlc3Npb259YClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUXVlcnkoXG4gICAgICAgICAgICAgICAgYENSRUFURSBWSUVXIFwiJHt2aWV3Lm5hbWV9XCIgQVMgJHt2aWV3XG4gICAgICAgICAgICAgICAgICAgIC5leHByZXNzaW9uKHRoaXMuY29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmdldFF1ZXJ5KCl9YCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbnNlcnRWaWV3RGVmaW5pdGlvblNxbCh2aWV3OiBWaWV3KTogUXVlcnkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID1cbiAgICAgICAgICAgIHR5cGVvZiB2aWV3LmV4cHJlc3Npb24gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICA/IHZpZXcuZXhwcmVzc2lvbi50cmltKClcbiAgICAgICAgICAgICAgICA6IHZpZXcuZXhwcmVzc2lvbih0aGlzLmNvbm5lY3Rpb24pLmdldFF1ZXJ5KClcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLlZJRVcsXG4gICAgICAgICAgICBuYW1lOiB2aWV3Lm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogZXhwcmVzc2lvbixcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgZHJvcCB2aWV3IHNxbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZHJvcFZpZXdTcWwodmlld09yUGF0aDogVmlldyB8IHN0cmluZyk6IFF1ZXJ5IHtcbiAgICAgICAgY29uc3Qgdmlld05hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNWaWV3KHZpZXdPclBhdGgpXG4gICAgICAgICAgICA/IHZpZXdPclBhdGgubmFtZVxuICAgICAgICAgICAgOiB2aWV3T3JQYXRoXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoYERST1AgVklFVyBcIiR7dmlld05hbWV9XCJgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyByZW1vdmUgdmlldyBzcWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlbGV0ZVZpZXdEZWZpbml0aW9uU3FsKHZpZXdPclBhdGg6IFZpZXcgfCBzdHJpbmcpOiBRdWVyeSB7XG4gICAgICAgIGNvbnN0IHZpZXdOYW1lID0gSW5zdGFuY2VDaGVja2VyLmlzVmlldyh2aWV3T3JQYXRoKVxuICAgICAgICAgICAgPyB2aWV3T3JQYXRoLm5hbWVcbiAgICAgICAgICAgIDogdmlld09yUGF0aFxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuVklFVyxcbiAgICAgICAgICAgIG5hbWU6IHZpZXdOYW1lLFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBjcmVhdGUgaW5kZXggc3FsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVJbmRleFNxbCh0YWJsZTogVGFibGUsIGluZGV4OiBUYWJsZUluZGV4KTogUXVlcnkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gaW5kZXguY29sdW1uTmFtZXNcbiAgICAgICAgICAgIC5tYXAoKGNvbHVtbk5hbWUpID0+IGBcIiR7Y29sdW1uTmFtZX1cImApXG4gICAgICAgICAgICAuam9pbihcIiwgXCIpXG4gICAgICAgIGNvbnN0IFtkYXRhYmFzZSwgdGFibGVOYW1lXSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgodGFibGUubmFtZSlcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeShcbiAgICAgICAgICAgIGBDUkVBVEUgJHtpbmRleC5pc1VuaXF1ZSA/IFwiVU5JUVVFIFwiIDogXCJcIn1JTkRFWCAke1xuICAgICAgICAgICAgICAgIGRhdGFiYXNlID8gYFwiJHtkYXRhYmFzZX1cIi5gIDogXCJcIlxuICAgICAgICAgICAgfSR7dGhpcy5lc2NhcGVQYXRoKGluZGV4Lm5hbWUhKX0gT04gXCIke3RhYmxlTmFtZX1cIiAoJHtjb2x1bW5zfSkgJHtcbiAgICAgICAgICAgICAgICBpbmRleC53aGVyZSA/IFwiV0hFUkUgXCIgKyBpbmRleC53aGVyZSA6IFwiXCJcbiAgICAgICAgICAgIH1gLFxuICAgICAgICApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGRyb3AgaW5kZXggc3FsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkcm9wSW5kZXhTcWwoaW5kZXhPck5hbWU6IFRhYmxlSW5kZXggfCBzdHJpbmcpOiBRdWVyeSB7XG4gICAgICAgIGxldCBpbmRleE5hbWUgPSBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZUluZGV4KGluZGV4T3JOYW1lKVxuICAgICAgICAgICAgPyBpbmRleE9yTmFtZS5uYW1lXG4gICAgICAgICAgICA6IGluZGV4T3JOYW1lXG4gICAgICAgIHJldHVybiBuZXcgUXVlcnkoYERST1AgSU5ERVggJHt0aGlzLmVzY2FwZVBhdGgoaW5kZXhOYW1lISl9YClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYSBxdWVyeSBmb3IgY3JlYXRlIGNvbHVtbi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYnVpbGRDcmVhdGVDb2x1bW5TcWwoXG4gICAgICAgIGNvbHVtbjogVGFibGVDb2x1bW4sXG4gICAgICAgIHNraXBQcmltYXJ5PzogYm9vbGVhbixcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBsZXQgYyA9ICdcIicgKyBjb2x1bW4ubmFtZSArICdcIidcbiAgICAgICAgaWYgKEluc3RhbmNlQ2hlY2tlci5pc0NvbHVtbk1ldGFkYXRhKGNvbHVtbikpIHtcbiAgICAgICAgICAgIGMgKz0gXCIgXCIgKyB0aGlzLmRyaXZlci5ub3JtYWxpemVUeXBlKGNvbHVtbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGMgKz0gXCIgXCIgKyB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLmNyZWF0ZUZ1bGxUeXBlKGNvbHVtbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4uZW51bSlcbiAgICAgICAgICAgIGMgKz1cbiAgICAgICAgICAgICAgICAnIENIRUNLKCBcIicgK1xuICAgICAgICAgICAgICAgIGNvbHVtbi5uYW1lICtcbiAgICAgICAgICAgICAgICAnXCIgSU4gKCcgK1xuICAgICAgICAgICAgICAgIGNvbHVtbi5lbnVtLm1hcCgodmFsKSA9PiBcIidcIiArIHZhbCArIFwiJ1wiKS5qb2luKFwiLFwiKSArXG4gICAgICAgICAgICAgICAgXCIpIClcIlxuICAgICAgICBpZiAoY29sdW1uLmlzUHJpbWFyeSAmJiAhc2tpcFByaW1hcnkpIGMgKz0gXCIgUFJJTUFSWSBLRVlcIlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4uaXNHZW5lcmF0ZWQgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0aW9uU3RyYXRlZ3kgPT09IFwiaW5jcmVtZW50XCJcbiAgICAgICAgKVxuXG4gICAgICAgICAgICBjICs9IFwiIEFVVE9JTkNSRU1FTlRcIlxuICAgICAgICBpZiAoY29sdW1uLmNvbGxhdGlvbikgYyArPSBcIiBDT0xMQVRFIFwiICsgY29sdW1uLmNvbGxhdGlvblxuICAgICAgICBpZiAoY29sdW1uLmlzTnVsbGFibGUgIT09IHRydWUpIGMgKz0gXCIgTk9UIE5VTExcIlxuXG4gICAgICAgIGlmIChjb2x1bW4uYXNFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBjICs9IGAgQVMgKCR7Y29sdW1uLmFzRXhwcmVzc2lvbn0pICR7XG4gICAgICAgICAgICAgICAgY29sdW1uLmdlbmVyYXRlZFR5cGUgPyBjb2x1bW4uZ2VuZXJhdGVkVHlwZSA6IFwiVklSVFVBTFwiXG4gICAgICAgICAgICB9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmRlZmF1bHQgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgYyArPSBcIiBERUZBVUxUIChcIiArIGNvbHVtbi5kZWZhdWx0ICsgXCIpXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHJlY3JlYXRlVGFibGUoXG4gICAgICAgIG5ld1RhYmxlOiBUYWJsZSxcbiAgICAgICAgb2xkVGFibGU6IFRhYmxlLFxuICAgICAgICBtaWdyYXRlRGF0YSA9IHRydWUsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVwUXVlcmllczogUXVlcnlbXSA9IFtdXG4gICAgICAgIGNvbnN0IGRvd25RdWVyaWVzOiBRdWVyeVtdID0gW11cblxuXG4gICAgICAgIG9sZFRhYmxlLmluZGljZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKHRoaXMuZHJvcEluZGV4U3FsKGluZGV4KSlcbiAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbChvbGRUYWJsZSwgaW5kZXgpKVxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbGV0IFtkYXRhYmFzZU5ldywgdGFibGVOYW1lTmV3XSA9IHRoaXMuc3BsaXRUYWJsZVBhdGgobmV3VGFibGUubmFtZSlcbiAgICAgICAgbGV0IFssIHRhYmxlTmFtZU9sZF0gPSB0aGlzLnNwbGl0VGFibGVQYXRoKG9sZFRhYmxlLm5hbWUpXG4gICAgICAgIG5ld1RhYmxlLm5hbWUgPSB0YWJsZU5hbWVOZXcgPSBgJHtcbiAgICAgICAgICAgIGRhdGFiYXNlTmV3ID8gYCR7ZGF0YWJhc2VOZXd9LmAgOiBcIlwiXG4gICAgICAgIH10ZW1wb3JhcnlfJHt0YWJsZU5hbWVOZXd9YFxuXG5cbiAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVUYWJsZVNxbChuZXdUYWJsZSwgdHJ1ZSwgdHJ1ZSkpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5kcm9wVGFibGVTcWwobmV3VGFibGUpKVxuXG5cbiAgICAgICAgaWYgKG1pZ3JhdGVEYXRhKSB7XG4gICAgICAgICAgICBsZXQgbmV3Q29sdW1uTmFtZXMgPSBuZXdUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmdlbmVyYXRlZFR5cGUpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBgXCIke2NvbHVtbi5uYW1lfVwiYClcblxuICAgICAgICAgICAgbGV0IG9sZENvbHVtbk5hbWVzID0gb2xkVGFibGUuY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5nZW5lcmF0ZWRUeXBlKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW4ubmFtZX1cImApXG5cbiAgICAgICAgICAgIGlmIChvbGRDb2x1bW5OYW1lcy5sZW5ndGggPCBuZXdDb2x1bW5OYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXdDb2x1bW5OYW1lcyA9IG5ld1RhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRDb2x1bW4gPSBvbGRUYWJsZS5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMubmFtZSA9PT0gY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkQ29sdW1uICYmIG9sZENvbHVtbi5nZW5lcmF0ZWRUeXBlKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhY29sdW1uLmdlbmVyYXRlZFR5cGUgJiYgb2xkQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4gYFwiJHtjb2x1bW4ubmFtZX1cImApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9sZENvbHVtbk5hbWVzLmxlbmd0aCA+IG5ld0NvbHVtbk5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9sZENvbHVtbk5hbWVzID0gb2xkVGFibGUuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFibGUuY29sdW1ucy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNvbHVtbi5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1uLm5hbWV9XCJgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgUXVlcnkoXG4gICAgICAgICAgICAgICAgICAgIGBJTlNFUlQgSU5UTyAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICl9KCR7bmV3Q29sdW1uTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgKX0pIFNFTEVDVCAke29sZENvbHVtbk5hbWVzLmpvaW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICl9IEZST00gJHt0aGlzLmVzY2FwZVBhdGgob2xkVGFibGUubmFtZSl9YCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgUXVlcnkoXG4gICAgICAgICAgICAgICAgICAgIGBJTlNFUlQgSU5UTyAke3RoaXMuZXNjYXBlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICl9KCR7b2xkQ29sdW1uTmFtZXMuam9pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgICAgICAgICAgICAgKX0pIFNFTEVDVCAke25ld0NvbHVtbk5hbWVzLmpvaW4oXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgXCIsXG4gICAgICAgICAgICAgICAgICAgICl9IEZST00gJHt0aGlzLmVzY2FwZVBhdGgobmV3VGFibGUubmFtZSl9YCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cblxuICAgICAgICB1cFF1ZXJpZXMucHVzaCh0aGlzLmRyb3BUYWJsZVNxbChvbGRUYWJsZSkpXG4gICAgICAgIGRvd25RdWVyaWVzLnB1c2godGhpcy5jcmVhdGVUYWJsZVNxbChvbGRUYWJsZSwgdHJ1ZSkpXG5cblxuICAgICAgICB1cFF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICBgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgKX0gUkVOQU1FIFRPICR7dGhpcy5lc2NhcGVQYXRoKHRhYmxlTmFtZU9sZCl9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgZG93blF1ZXJpZXMucHVzaChcbiAgICAgICAgICAgIG5ldyBRdWVyeShcbiAgICAgICAgICAgICAgICBgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgKX0gUkVOQU1FIFRPICR7dGhpcy5lc2NhcGVQYXRoKHRhYmxlTmFtZU5ldyl9YCxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcblxuICAgICAgICBuZXdUYWJsZS5uYW1lID0gb2xkVGFibGUubmFtZVxuXG5cbiAgICAgICAgbmV3VGFibGUuaW5kaWNlcy5mb3JFYWNoKChpbmRleCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoIWluZGV4Lm5hbWUpXG4gICAgICAgICAgICAgICAgaW5kZXgubmFtZSA9IHRoaXMuY29ubmVjdGlvbi5uYW1pbmdTdHJhdGVneS5pbmRleE5hbWUoXG4gICAgICAgICAgICAgICAgICAgIG5ld1RhYmxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleC5jb2x1bW5OYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgud2hlcmUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2godGhpcy5jcmVhdGVJbmRleFNxbChuZXdUYWJsZSwgaW5kZXgpKVxuICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaCh0aGlzLmRyb3BJbmRleFNxbChpbmRleCkpXG4gICAgICAgIH0pXG5cblxuXG4gICAgICAgIG9sZFRhYmxlLmNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlQ29sdW1uID0gbmV3VGFibGUuY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5uYW1lID09PSBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICApXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hc0V4cHJlc3Npb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKCFuZXdUYWJsZUNvbHVtbiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKCFuZXdUYWJsZUNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIW5ld1RhYmxlQ29sdW1uLmFzRXhwcmVzc2lvbikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVRdWVyeSA9IHRoaXMuZGVsZXRlVHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRRdWVyeSA9IHRoaXMuaW5zZXJ0VHlwZW9ybU1ldGFkYXRhU3FsKHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGU6IG9sZFRhYmxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IE1ldGFkYXRhVGFibGVUeXBlLkdFTkVSQVRFRF9DT0xVTU4sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgdXBRdWVyaWVzLnB1c2goZGVsZXRlUXVlcnkpXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChpbnNlcnRRdWVyeSlcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICBuZXdUYWJsZS5jb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5hc0V4cHJlc3Npb24gJiZcbiAgICAgICAgICAgICAgICAgICAgIW9sZFRhYmxlLmNvbHVtbnMuc29tZSgoYykgPT4gYy5uYW1lID09PSBjb2x1bW4ubmFtZSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSB0aGlzLmluc2VydFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBuZXdUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogbmV3VGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHVwUXVlcmllcy5wdXNoKGluc2VydFF1ZXJ5KVxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2goZGVsZXRlUXVlcnkpXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3VGFibGUuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uZ2VuZXJhdGVkVHlwZSAmJiBjb2x1bW4uYXNFeHByZXNzaW9uKVxuICAgICAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZENvbHVtbiA9IG9sZFRhYmxlLmNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjLm5hbWUgPT09IGNvbHVtbi5uYW1lICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmdlbmVyYXRlZFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZW5lcmF0ZWRUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjLmFzRXhwcmVzc2lvbiAhPT0gY29sdW1uLmFzRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAoIW9sZENvbHVtbikgcmV0dXJuXG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogb2xkQ29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gdGhpcy5pbnNlcnRUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogbmV3VGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4uYXNFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChkZWxldGVRdWVyeSlcbiAgICAgICAgICAgICAgICB1cFF1ZXJpZXMucHVzaChpbnNlcnRRdWVyeSlcblxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJ0SW5zZXJ0UXVlcnkgPSB0aGlzLmluc2VydFR5cGVvcm1NZXRhZGF0YVNxbCh7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiBuZXdUYWJsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXRhZGF0YVRhYmxlVHlwZS5HRU5FUkFURURfQ09MVU1OLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBvbGRDb2x1bW4ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9sZENvbHVtbi5hc0V4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJldmVydERlbGV0ZVF1ZXJ5ID0gdGhpcy5kZWxldGVUeXBlb3JtTWV0YWRhdGFTcWwoe1xuICAgICAgICAgICAgICAgICAgICB0YWJsZTogb2xkVGFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0YWRhdGFUYWJsZVR5cGUuR0VORVJBVEVEX0NPTFVNTixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGRvd25RdWVyaWVzLnB1c2gocmV2ZXJ0SW5zZXJ0UXVlcnkpXG4gICAgICAgICAgICAgICAgZG93blF1ZXJpZXMucHVzaChyZXZlcnREZWxldGVRdWVyeSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlUXVlcmllcyh1cFF1ZXJpZXMsIGRvd25RdWVyaWVzKVxuICAgICAgICB0aGlzLnJlcGxhY2VDYWNoZWRUYWJsZShvbGRUYWJsZSwgbmV3VGFibGUpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGFibGVQYXRoIGUuZy4gXCJteURCLm15VGFibGVcIiwgXCJteVRhYmxlXCJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc3BsaXRUYWJsZVBhdGgodGFibGVQYXRoOiBzdHJpbmcpOiBbc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmddIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRhYmxlUGF0aC5pbmRleE9mKFwiLlwiKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRhYmxlUGF0aC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgICAgICA6IFt1bmRlZmluZWQsIHRhYmxlUGF0aF1cbiAgICAgICAgKSBhcyBbc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHJpbmddXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXNjYXBlcyBnaXZlbiB0YWJsZSBvciB2aWV3IHBhdGguIFRvbGVyYXRlcyBsZWFkaW5nL3RyYWlsaW5nIGRvdHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZXNjYXBlUGF0aChcbiAgICAgICAgdGFyZ2V0OiBUYWJsZSB8IFZpZXcgfCBzdHJpbmcsXG4gICAgICAgIGRpc2FibGVFc2NhcGU/OiBib29sZWFuLFxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9XG4gICAgICAgICAgICBJbnN0YW5jZUNoZWNrZXIuaXNUYWJsZSh0YXJnZXQpIHx8IEluc3RhbmNlQ2hlY2tlci5pc1ZpZXcodGFyZ2V0KVxuICAgICAgICAgICAgICAgID8gdGFyZ2V0Lm5hbWVcbiAgICAgICAgICAgICAgICA6IHRhcmdldFxuICAgICAgICByZXR1cm4gdGFibGVOYW1lXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcLit8XFwuKyQvZywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5tYXAoKGkpID0+IChkaXNhYmxlRXNjYXBlID8gaSA6IGBcIiR7aX1cImApKVxuICAgICAgICAgICAgLmpvaW4oXCIuXCIpXG4gICAgfVxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlb3JtIGxpYi90eXBlb3JtL2RyaXZlci9zcWxpdGUtYWJzdHJhY3QvQWJzdHJhY3RTcWxpdGVRdWVyeVJ1bm5lci50cyJdfQ==
|