taon-typeorm 18.0.23 → 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/shared/shared_folder_info.txt +1 -1
- package/package.json +1 -1
- package/tmp-environment.json +24 -3
- package/browser/esm2022/lib/index.mjs +0 -4
- package/browser/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
- package/browser/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
- package/browser/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
- package/browser/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
- package/browser/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
- package/browser/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
- package/browser/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
- package/browser/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
- package/browser/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
- package/browser/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
- package/browser/esm2022/lib/typeorm/constants.mjs +0 -4
- package/browser/esm2022/lib/typeorm/container.mjs +0 -57
- package/browser/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
- package/browser/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
- package/browser/esm2022/lib/typeorm/data-source/index.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
- package/browser/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
- package/browser/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
- package/browser/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
- package/browser/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
- package/browser/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
- package/browser/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
- package/browser/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
- package/browser/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
- package/browser/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
- package/browser/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
- package/browser/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
- package/browser/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
- package/browser/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
- package/browser/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
- package/browser/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
- package/browser/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
- package/browser/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
- package/browser/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
- package/browser/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
- package/browser/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
- package/browser/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
- package/browser/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
- package/browser/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
- package/browser/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
- package/browser/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
- package/browser/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
- package/browser/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
- package/browser/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
- package/browser/esm2022/lib/typeorm/driver/Query.mjs +0 -13
- package/browser/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
- package/browser/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
- package/browser/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
- package/browser/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
- package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
- package/browser/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
- package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
- package/browser/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
- package/browser/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
- package/browser/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
- package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
- package/browser/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
- package/browser/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
- package/browser/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
- package/browser/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
- package/browser/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
- package/browser/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
- package/browser/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
- package/browser/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
- package/browser/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
- package/browser/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
- package/browser/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
- package/browser/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
- package/browser/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
- package/browser/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
- package/browser/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
- package/browser/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
- package/browser/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
- package/browser/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
- package/browser/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
- package/browser/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
- package/browser/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
- package/browser/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
- package/browser/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
- package/browser/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
- package/browser/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
- package/browser/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
- package/browser/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
- package/browser/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
- package/browser/esm2022/lib/typeorm/error/index.mjs +0 -63
- package/browser/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
- package/browser/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
- package/browser/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
- package/browser/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
- package/browser/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
- package/browser/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
- package/browser/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
- package/browser/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
- package/browser/esm2022/lib/typeorm/globals.mjs +0 -165
- package/browser/esm2022/lib/typeorm/index.mjs +0 -157
- package/browser/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
- package/browser/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
- package/browser/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
- package/browser/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
- package/browser/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
- package/browser/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
- package/browser/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
- package/browser/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
- package/browser/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
- package/browser/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
- package/browser/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
- package/browser/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
- package/browser/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
- package/browser/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
- package/browser/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
- package/browser/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
- package/browser/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
- package/browser/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
- package/browser/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
- package/browser/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
- package/browser/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
- package/browser/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
- package/browser/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
- package/browser/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
- package/browser/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
- package/browser/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
- package/browser/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
- package/browser/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
- package/browser/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
- package/browser/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
- package/browser/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
- package/browser/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
- package/browser/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
- package/browser/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
- package/browser/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
- package/browser/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
- package/browser/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
- package/browser/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
- package/browser/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
- package/browser/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
- package/browser/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
- package/browser/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
- package/browser/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
- package/browser/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
- package/browser/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -346
- package/browser/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
- package/browser/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
- package/browser/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
- package/browser/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
- package/browser/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
- package/browser/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
- package/browser/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
- package/browser/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
- package/browser/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
- package/browser/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
- package/browser/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
- package/browser/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
- package/browser/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
- package/browser/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
- package/browser/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
- package/browser/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
- package/browser/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
- package/browser/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
- package/browser/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
- package/browser/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
- package/browser/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
- package/browser/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
- package/browser/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
- package/browser/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
- package/browser/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
- package/browser/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
- package/browser/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
- package/browser/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
- package/browser/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
- package/browser/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
- package/browser/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
- package/browser/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
- package/browser/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
- package/browser/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
- package/browser/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
- package/browser/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
- package/browser/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
- package/browser/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
- package/browser/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
- package/browser/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
- package/browser/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
- package/browser/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
- package/browser/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
- package/browser/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
- package/browser/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
- package/browser/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
- package/browser/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
- package/browser/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
- package/browser/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
- package/browser/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
- package/browser/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
- package/browser/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
- package/browser/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
- package/browser/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
- package/browser/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
- package/browser/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
- package/browser/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
- package/browser/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
- package/browser/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
- package/browser/esm2022/public-api.mjs +0 -2
- package/browser/esm2022/taon-typeorm.mjs +0 -5
- package/client/esm2022/lib/index.mjs +0 -4
- package/client/esm2022/lib/typeorm/cache/DbQueryResultCache.mjs +0 -251
- package/client/esm2022/lib/typeorm/cache/QueryResultCache.mjs +0 -4
- package/client/esm2022/lib/typeorm/cache/QueryResultCacheFactory.mjs +0 -33
- package/client/esm2022/lib/typeorm/cache/QueryResultCacheOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/cache/RedisQueryResultCache.mjs +0 -185
- package/client/esm2022/lib/typeorm/common/DeepPartial.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/EntityTarget.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/MixedList.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/ObjectLiteral.mjs +0 -4
- package/client/esm2022/lib/typeorm/common/ObjectType.mjs +0 -3
- package/client/esm2022/lib/typeorm/common/RelationType.mjs +0 -3
- package/client/esm2022/lib/typeorm/connection/Connection.mjs +0 -13
- package/client/esm2022/lib/typeorm/connection/ConnectionManager.mjs +0 -57
- package/client/esm2022/lib/typeorm/connection/ConnectionMetadataBuilder.mjs +0 -63
- package/client/esm2022/lib/typeorm/connection/ConnectionOptions.mjs +0 -3
- package/client/esm2022/lib/typeorm/connection/ConnectionOptionsReader.mjs +0 -237
- package/client/esm2022/lib/typeorm/constants.mjs +0 -4
- package/client/esm2022/lib/typeorm/container.mjs +0 -57
- package/client/esm2022/lib/typeorm/data-source/BaseDataSourceOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/data-source/DataSource.mjs +0 -458
- package/client/esm2022/lib/typeorm/data-source/DataSourceOptions.mjs +0 -11
- package/client/esm2022/lib/typeorm/data-source/index.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/Check.mjs +0 -25
- package/client/esm2022/lib/typeorm/decorator/EntityRepository.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/Exclusion.mjs +0 -25
- package/client/esm2022/lib/typeorm/decorator/Generated.mjs +0 -22
- package/client/esm2022/lib/typeorm/decorator/Index.mjs +0 -52
- package/client/esm2022/lib/typeorm/decorator/Unique.mjs +0 -48
- package/client/esm2022/lib/typeorm/decorator/columns/Column.mjs +0 -67
- package/client/esm2022/lib/typeorm/decorator/columns/CreateDateColumn.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/columns/DeleteDateColumn.mjs +0 -18
- package/client/esm2022/lib/typeorm/decorator/columns/ObjectIdColumn.mjs +0 -23
- package/client/esm2022/lib/typeorm/decorator/columns/PrimaryColumn.mjs +0 -54
- package/client/esm2022/lib/typeorm/decorator/columns/PrimaryGeneratedColumn.mjs +0 -52
- package/client/esm2022/lib/typeorm/decorator/columns/UpdateDateColumn.mjs +0 -18
- package/client/esm2022/lib/typeorm/decorator/columns/VersionColumn.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/columns/ViewColumn.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/columns/VirtualColumn.mjs +0 -41
- package/client/esm2022/lib/typeorm/decorator/entity/ChildEntity.mjs +0 -21
- package/client/esm2022/lib/typeorm/decorator/entity/Entity.mjs +0 -28
- package/client/esm2022/lib/typeorm/decorator/entity/TableInheritance.mjs +0 -20
- package/client/esm2022/lib/typeorm/decorator/entity-view/ViewEntity.mjs +0 -30
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterInsert.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterLoad.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterRecover.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterSoftRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/AfterUpdate.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeInsert.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeRecover.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeSoftRemove.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/BeforeUpdate.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/listeners/EventSubscriber.mjs +0 -15
- package/client/esm2022/lib/typeorm/decorator/options/ColumnCommonOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnEmbeddedOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnEnumOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnHstoreOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnNumericOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnWithLengthOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ColumnWithWidthOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/EntityOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/IndexOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/JoinColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/JoinTableMultipleColumnsOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/JoinTableOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnIdentityOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnNumericOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/PrimaryGeneratedColumnUUIDOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/RelationOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/SpatialColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/UniqueOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ValueTransformer.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ViewColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/ViewEntityOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/options/VirtualColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/decorator/relations/JoinColumn.mjs +0 -25
- package/client/esm2022/lib/typeorm/decorator/relations/JoinTable.mjs +0 -31
- package/client/esm2022/lib/typeorm/decorator/relations/ManyToMany.mjs +0 -40
- package/client/esm2022/lib/typeorm/decorator/relations/ManyToOne.mjs +0 -40
- package/client/esm2022/lib/typeorm/decorator/relations/OneToMany.mjs +0 -32
- package/client/esm2022/lib/typeorm/decorator/relations/OneToOne.mjs +0 -39
- package/client/esm2022/lib/typeorm/decorator/relations/RelationCount.mjs +0 -20
- package/client/esm2022/lib/typeorm/decorator/relations/RelationId.mjs +0 -20
- package/client/esm2022/lib/typeorm/decorator/tree/Tree.mjs +0 -19
- package/client/esm2022/lib/typeorm/decorator/tree/TreeChildren.mjs +0 -34
- package/client/esm2022/lib/typeorm/decorator/tree/TreeLevelColumn.mjs +0 -17
- package/client/esm2022/lib/typeorm/decorator/tree/TreeParent.mjs +0 -34
- package/client/esm2022/lib/typeorm/driver/Driver.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/DriverFactory.mjs +0 -99
- package/client/esm2022/lib/typeorm/driver/DriverUtils.mjs +0 -213
- package/client/esm2022/lib/typeorm/driver/Query.mjs +0 -13
- package/client/esm2022/lib/typeorm/driver/SqlInMemory.mjs +0 -12
- package/client/esm2022/lib/typeorm/driver/cordova/CordovaConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/cordova/CordovaDriver.mjs +0 -63
- package/client/esm2022/lib/typeorm/driver/cordova/CordovaQueryRunner.mjs +0 -152
- package/client/esm2022/lib/typeorm/driver/mongodb/typings.mjs +0 -6516
- package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptDriver.mjs +0 -82
- package/client/esm2022/lib/typeorm/driver/nativescript/NativescriptQueryRunner.mjs +0 -82
- package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeDriver.mjs +0 -69
- package/client/esm2022/lib/typeorm/driver/react-native/ReactNativeQueryRunner.mjs +0 -81
- package/client/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.mjs +0 -582
- package/client/esm2022/lib/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.mjs +0 -1421
- package/client/esm2022/lib/typeorm/driver/sqljs/SqljsConnectionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/sqljs/SqljsDriver.mjs +0 -249
- package/client/esm2022/lib/typeorm/driver/sqljs/SqljsQueryRunner.mjs +0 -107
- package/client/esm2022/lib/typeorm/driver/types/ColumnTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/CteCapabilities.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/types/DataTypeDefaults.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/types/DatabaseType.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/IsolationLevel.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/MappedColumnTypes.mjs +0 -4
- package/client/esm2022/lib/typeorm/driver/types/MetadataTableType.mjs +0 -9
- package/client/esm2022/lib/typeorm/driver/types/ReplicationMode.mjs +0 -3
- package/client/esm2022/lib/typeorm/driver/types/UpsertType.mjs +0 -3
- package/client/esm2022/lib/typeorm/entity-manager/EntityManager.mjs +0 -743
- package/client/esm2022/lib/typeorm/entity-manager/EntityManagerFactory.mjs +0 -23
- package/client/esm2022/lib/typeorm/entity-manager/SqljsEntityManager.mjs +0 -35
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchema.mjs +0 -12
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaCheckOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.mjs +0 -5
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaEmbeddedError.mjs +0 -15
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaExclusionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaIndexOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaOptions.mjs +0 -8
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationIdOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaRelationOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaTransformer.mjs +0 -268
- package/client/esm2022/lib/typeorm/entity-schema/EntitySchemaUniqueOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/error/AlreadyHasActiveConnectionError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/CannotAttachTreeChildrenEntityError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/CannotConnectAlreadyConnectedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CannotCreateEntityIdMapError.mjs +0 -18
- package/client/esm2022/lib/typeorm/error/CannotDetermineEntityError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/CannotExecuteNotConnectedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CannotGetEntityManagerNotConnectedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CannotReflectMethodParameterTypeError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/CircularRelationsError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/ColumnTypeUndefinedError.mjs +0 -16
- package/client/esm2022/lib/typeorm/error/ConnectionIsNotSetError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/ConnectionNotFoundError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/CustomRepositoryCannotInheritRepositoryError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/CustomRepositoryDoesNotHaveEntityError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/CustomRepositoryNotFoundError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/DataTypeNotSupportedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/DriverOptionNotSetError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/DriverPackageNotInstalledError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/EntityMetadataNotFoundError.mjs +0 -26
- package/client/esm2022/lib/typeorm/error/EntityNotFoundError.mjs +0 -37
- package/client/esm2022/lib/typeorm/error/EntityPropertyNotFoundError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/FindRelationsNotFoundError.mjs +0 -20
- package/client/esm2022/lib/typeorm/error/InitializedRelationError.mjs +0 -17
- package/client/esm2022/lib/typeorm/error/InsertValuesMissingError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/LimitOnUpdateNotSupportedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/LockNotSupportedOnGivenDriverError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/MetadataAlreadyExistsError.mjs +0 -15
- package/client/esm2022/lib/typeorm/error/MetadataWithSuchNameAlreadyExistsError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/MissingDeleteDateColumnError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/MissingDriverError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/MissingJoinColumnError.mjs +0 -20
- package/client/esm2022/lib/typeorm/error/MissingJoinTableError.mjs +0 -20
- package/client/esm2022/lib/typeorm/error/MissingPrimaryColumnError.mjs +0 -10
- package/client/esm2022/lib/typeorm/error/MustBeEntityError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/NamingStrategyNotFoundError.mjs +0 -18
- package/client/esm2022/lib/typeorm/error/NestedSetMultipleRootError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/NoConnectionForRepositoryError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/NoConnectionOptionError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/NoNeedToReleaseEntityManagerError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/NoVersionOrUpdateDateColumnError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/OffsetWithoutLimitNotSupportedError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/OptimisticLockCanNotBeUsedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/OptimisticLockVersionMismatchError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/PersistedEntityNotFoundError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/PessimisticLockTransactionRequiredError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/PrimaryColumnCannotBeNullableError.mjs +0 -10
- package/client/esm2022/lib/typeorm/error/QueryFailedError.mjs +0 -27
- package/client/esm2022/lib/typeorm/error/QueryRunnerAlreadyReleasedError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/QueryRunnerProviderAlreadyReleasedError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/RepositoryNotTreeError.mjs +0 -29
- package/client/esm2022/lib/typeorm/error/ReturningStatementNotSupportedError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/SubjectRemovedAndUpdatedError.mjs +0 -13
- package/client/esm2022/lib/typeorm/error/SubjectWithoutIdentifierError.mjs +0 -14
- package/client/esm2022/lib/typeorm/error/TransactionAlreadyStartedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/TransactionNotStartedError.mjs +0 -12
- package/client/esm2022/lib/typeorm/error/TreeRepositoryNotSupportedError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/TypeORMError.mjs +0 -18
- package/client/esm2022/lib/typeorm/error/UpdateValuesMissingError.mjs +0 -9
- package/client/esm2022/lib/typeorm/error/UsingJoinColumnIsNotAllowedError.mjs +0 -10
- package/client/esm2022/lib/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/UsingJoinTableIsNotAllowedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.mjs +0 -11
- package/client/esm2022/lib/typeorm/error/index.mjs +0 -63
- package/client/esm2022/lib/typeorm/find-options/EqualOperator.mjs +0 -10
- package/client/esm2022/lib/typeorm/find-options/FindManyOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/FindOneOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/FindOperator.mjs +0 -74
- package/client/esm2022/lib/typeorm/find-options/FindOperatorType.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindOptionsOrder.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindOptionsRelations.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindOptionsSelect.mjs +0 -5
- package/client/esm2022/lib/typeorm/find-options/FindOptionsUtils.mjs +0 -293
- package/client/esm2022/lib/typeorm/find-options/FindOptionsWhere.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/FindTreeOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/JoinOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/find-options/OrderByCondition.mjs +0 -3
- package/client/esm2022/lib/typeorm/find-options/operator/Any.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/ArrayContainedBy.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/ArrayContains.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/ArrayOverlap.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Between.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Equal.mjs +0 -15
- package/client/esm2022/lib/typeorm/find-options/operator/ILike.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/In.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/IsNull.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/LessThan.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/LessThanOrEqual.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Like.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/MoreThan.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/MoreThanOrEqual.mjs +0 -11
- package/client/esm2022/lib/typeorm/find-options/operator/Not.mjs +0 -12
- package/client/esm2022/lib/typeorm/find-options/operator/Raw.mjs +0 -10
- package/client/esm2022/lib/typeorm/globals.mjs +0 -165
- package/client/esm2022/lib/typeorm/index.mjs +0 -157
- package/client/esm2022/lib/typeorm/logger/AdvancedConsoleLogger.mjs +0 -109
- package/client/esm2022/lib/typeorm/logger/DebugLogger.mjs +0 -94
- package/client/esm2022/lib/typeorm/logger/Logger.mjs +0 -4
- package/client/esm2022/lib/typeorm/logger/LoggerFactory.mjs +0 -36
- package/client/esm2022/lib/typeorm/logger/LoggerOptions.mjs +0 -3
- package/client/esm2022/lib/typeorm/logger/SimpleConsoleLogger.mjs +0 -108
- package/client/esm2022/lib/typeorm/metadata/CheckMetadata.mjs +0 -26
- package/client/esm2022/lib/typeorm/metadata/ColumnMetadata.mjs +0 -553
- package/client/esm2022/lib/typeorm/metadata/EmbeddedMetadata.mjs +0 -206
- package/client/esm2022/lib/typeorm/metadata/EntityListenerMetadata.mjs +0 -52
- package/client/esm2022/lib/typeorm/metadata/EntityMetadata.mjs +0 -636
- package/client/esm2022/lib/typeorm/metadata/ExclusionMetadata.mjs +0 -26
- package/client/esm2022/lib/typeorm/metadata/ForeignKeyMetadata.mjs +0 -48
- package/client/esm2022/lib/typeorm/metadata/IndexMetadata.mjs +0 -131
- package/client/esm2022/lib/typeorm/metadata/RelationCountMetadata.mjs +0 -30
- package/client/esm2022/lib/typeorm/metadata/RelationIdMetadata.mjs +0 -50
- package/client/esm2022/lib/typeorm/metadata/RelationMetadata.mjs +0 -398
- package/client/esm2022/lib/typeorm/metadata/UniqueMetadata.mjs +0 -90
- package/client/esm2022/lib/typeorm/metadata/types/ClosureTreeOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata/types/DeferrableType.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/EventListenerTypes.mjs +0 -19
- package/client/esm2022/lib/typeorm/metadata/types/OnDeleteType.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/OnUpdateType.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/PropertyTypeInFunction.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/RelationTypeInFunction.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/RelationTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/TableTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata/types/TreeTypes.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata-args/CheckMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/ColumnMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/DiscriminatorValueMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EmbeddedMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EntityListenerMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EntityRepositoryMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/EntitySubscriberMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/ExclusionMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/GeneratedMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/IndexMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/InheritanceMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/JoinColumnMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/JoinTableMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/MetadataArgsStorage.mjs +0 -217
- package/client/esm2022/lib/typeorm/metadata-args/NamingStrategyMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/RelationCountMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/RelationIdMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/RelationMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TableMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TransactionEntityMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TransactionRepositoryMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/TreeMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/UniqueMetadataArgs.mjs +0 -4
- package/client/esm2022/lib/typeorm/metadata-args/types/ColumnMode.mjs +0 -3
- package/client/esm2022/lib/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.mjs +0 -131
- package/client/esm2022/lib/typeorm/metadata-builder/EntityMetadataBuilder.mjs +0 -678
- package/client/esm2022/lib/typeorm/metadata-builder/EntityMetadataValidator.mjs +0 -183
- package/client/esm2022/lib/typeorm/metadata-builder/JunctionEntityMetadataBuilder.mjs +0 -262
- package/client/esm2022/lib/typeorm/metadata-builder/MetadataUtils.mjs +0 -41
- package/client/esm2022/lib/typeorm/metadata-builder/RelationJoinColumnBuilder.mjs +0 -167
- package/client/esm2022/lib/typeorm/migration/Migration.mjs +0 -14
- package/client/esm2022/lib/typeorm/migration/MigrationExecutor.mjs +0 -454
- package/client/esm2022/lib/typeorm/migration/MigrationInterface.mjs +0 -4
- package/client/esm2022/lib/typeorm/naming-strategy/DefaultNamingStrategy.mjs +0 -140
- package/client/esm2022/lib/typeorm/naming-strategy/NamingStrategyInterface.mjs +0 -4
- package/client/esm2022/lib/typeorm/persistence/EntityPersistExecutor.mjs +0 -125
- package/client/esm2022/lib/typeorm/persistence/Subject.mjs +0 -212
- package/client/esm2022/lib/typeorm/persistence/SubjectChangeMap.mjs +0 -4
- package/client/esm2022/lib/typeorm/persistence/SubjectChangedColumnsComputer.mjs +0 -164
- package/client/esm2022/lib/typeorm/persistence/SubjectDatabaseEntityLoader.mjs +0 -125
- package/client/esm2022/lib/typeorm/persistence/SubjectExecutor.mjs +0 -721
- package/client/esm2022/lib/typeorm/persistence/SubjectTopoligicalSorter.mjs +0 -151
- package/client/esm2022/lib/typeorm/persistence/subject-builder/CascadesSubjectBuilder.mjs +0 -84
- package/client/esm2022/lib/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.mjs +0 -153
- package/client/esm2022/lib/typeorm/persistence/subject-builder/OneToManySubjectBuilder.mjs +0 -117
- package/client/esm2022/lib/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.mjs +0 -95
- package/client/esm2022/lib/typeorm/persistence/tree/ClosureSubjectExecutor.mjs +0 -220
- package/client/esm2022/lib/typeorm/persistence/tree/MaterializedPathSubjectExecutor.mjs +0 -97
- package/client/esm2022/lib/typeorm/persistence/tree/NestedSetSubjectExecutor.mjs +0 -250
- package/client/esm2022/lib/typeorm/platform/PlatformTools.mjs +0 -346
- package/client/esm2022/lib/typeorm/query-builder/Alias.mjs +0 -26
- package/client/esm2022/lib/typeorm/query-builder/Brackets.mjs +0 -16
- package/client/esm2022/lib/typeorm/query-builder/DeleteQueryBuilder.mjs +0 -181
- package/client/esm2022/lib/typeorm/query-builder/InsertOrUpdateOptions.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/InsertQueryBuilder.mjs +0 -651
- package/client/esm2022/lib/typeorm/query-builder/JoinAttribute.mjs +0 -153
- package/client/esm2022/lib/typeorm/query-builder/NotBrackets.mjs +0 -14
- package/client/esm2022/lib/typeorm/query-builder/QueryBuilder.mjs +0 -967
- package/client/esm2022/lib/typeorm/query-builder/QueryBuilderCte.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/QueryBuilderUtils.mjs +0 -22
- package/client/esm2022/lib/typeorm/query-builder/QueryExpressionMap.mjs +0 -309
- package/client/esm2022/lib/typeorm/query-builder/QueryPartialEntity.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/RelationIdLoader.mjs +0 -452
- package/client/esm2022/lib/typeorm/query-builder/RelationLoader.mjs +0 -262
- package/client/esm2022/lib/typeorm/query-builder/RelationQueryBuilder.mjs +0 -147
- package/client/esm2022/lib/typeorm/query-builder/RelationRemover.mjs +0 -130
- package/client/esm2022/lib/typeorm/query-builder/RelationUpdater.mjs +0 -141
- package/client/esm2022/lib/typeorm/query-builder/ReturningResultsEntityUpdator.mjs +0 -141
- package/client/esm2022/lib/typeorm/query-builder/SelectQuery.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/SelectQueryBuilder.mjs +0 -2278
- package/client/esm2022/lib/typeorm/query-builder/SelectQueryBuilderOption.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/SoftDeleteQueryBuilder.mjs +0 -348
- package/client/esm2022/lib/typeorm/query-builder/UpdateQueryBuilder.mjs +0 -510
- package/client/esm2022/lib/typeorm/query-builder/WhereClause.mjs +0 -3
- package/client/esm2022/lib/typeorm/query-builder/WhereExpressionBuilder.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountAttribute.mjs +0 -71
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoadResult.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountLoader.mjs +0 -142
- package/client/esm2022/lib/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.mjs +0 -33
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdAttribute.mjs +0 -79
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoadResult.mjs +0 -4
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdLoader.mjs +0 -247
- package/client/esm2022/lib/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.mjs +0 -33
- package/client/esm2022/lib/typeorm/query-builder/result/DeleteResult.mjs +0 -14
- package/client/esm2022/lib/typeorm/query-builder/result/InsertResult.mjs +0 -25
- package/client/esm2022/lib/typeorm/query-builder/result/UpdateResult.mjs +0 -25
- package/client/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.mjs +0 -101
- package/client/esm2022/lib/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.mjs +0 -67
- package/client/esm2022/lib/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.mjs +0 -366
- package/client/esm2022/lib/typeorm/query-runner/BaseQueryRunner.mjs +0 -392
- package/client/esm2022/lib/typeorm/query-runner/QueryResult.mjs +0 -14
- package/client/esm2022/lib/typeorm/query-runner/QueryRunner.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/AbstractRepository.mjs +0 -80
- package/client/esm2022/lib/typeorm/repository/BaseEntity.mjs +0 -283
- package/client/esm2022/lib/typeorm/repository/FindTreesOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/RemoveOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/Repository.mjs +0 -275
- package/client/esm2022/lib/typeorm/repository/SaveOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/repository/TreeRepository.mjs +0 -254
- package/client/esm2022/lib/typeorm/repository/UpsertOptions.mjs +0 -7
- package/client/esm2022/lib/typeorm/schema-builder/RdbmsSchemaBuilder.mjs +0 -770
- package/client/esm2022/lib/typeorm/schema-builder/SchemaBuilder.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableCheckOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableColumnOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableExclusionOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableForeignKeyOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableIndexOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/TableUniqueOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/options/ViewOptions.mjs +0 -4
- package/client/esm2022/lib/typeorm/schema-builder/table/Table.mjs +0 -274
- package/client/esm2022/lib/typeorm/schema-builder/table/TableCheck.mjs +0 -37
- package/client/esm2022/lib/typeorm/schema-builder/table/TableColumn.mjs +0 -108
- package/client/esm2022/lib/typeorm/schema-builder/table/TableExclusion.mjs +0 -31
- package/client/esm2022/lib/typeorm/schema-builder/table/TableForeignKey.mjs +0 -60
- package/client/esm2022/lib/typeorm/schema-builder/table/TableIndex.mjs +0 -53
- package/client/esm2022/lib/typeorm/schema-builder/table/TableUnique.mjs +0 -38
- package/client/esm2022/lib/typeorm/schema-builder/util/TableUtils.mjs +0 -38
- package/client/esm2022/lib/typeorm/schema-builder/util/ViewUtils.mjs +0 -24
- package/client/esm2022/lib/typeorm/schema-builder/view/View.mjs +0 -43
- package/client/esm2022/lib/typeorm/subscriber/Broadcaster.mjs +0 -596
- package/client/esm2022/lib/typeorm/subscriber/BroadcasterResult.mjs +0 -27
- package/client/esm2022/lib/typeorm/subscriber/EntitySubscriberInterface.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/InsertEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/LoadEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/RecoverEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/RemoveEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/SoftRemoveEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/TransactionCommitEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/TransactionRollbackEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/TransactionStartEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/subscriber/event/UpdateEvent.mjs +0 -4
- package/client/esm2022/lib/typeorm/util/ApplyValueTransformers.mjs +0 -22
- package/client/esm2022/lib/typeorm/util/DateUtils.mjs +0 -216
- package/client/esm2022/lib/typeorm/util/DepGraph.mjs +0 -222
- package/client/esm2022/lib/typeorm/util/DirectoryExportedClassesLoader.mjs +0 -76
- package/client/esm2022/lib/typeorm/util/ImportUtils.mjs +0 -86
- package/client/esm2022/lib/typeorm/util/InstanceChecker.mjs +0 -114
- package/client/esm2022/lib/typeorm/util/ObjectUtils.mjs +0 -38
- package/client/esm2022/lib/typeorm/util/OrmUtils.mjs +0 -310
- package/client/esm2022/lib/typeorm/util/PathUtils.mjs +0 -38
- package/client/esm2022/lib/typeorm/util/RandomGenerator.mjs +0 -150
- package/client/esm2022/lib/typeorm/util/StringUtils.mjs +0 -108
- package/client/esm2022/lib/typeorm/util/TreeRepositoryUtils.mjs +0 -53
- package/client/esm2022/lib/typeorm/util/VersionUtils.mjs +0 -17
- package/client/esm2022/lib/typeorm/util/escapeRegExp.mjs +0 -4
- package/client/esm2022/public-api.mjs +0 -2
- package/client/esm2022/taon-typeorm.mjs +0 -5
- package/taon.jsonc +0 -8
- 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,967 +0,0 @@
|
|
|
1
|
-
import { QueryExpressionMap } from "./QueryExpressionMap";
|
|
2
|
-
import { Brackets } from "./Brackets";
|
|
3
|
-
import { FindOperator } from "../find-options/FindOperator";
|
|
4
|
-
import { In } from "../find-options/operator/In";
|
|
5
|
-
import { TypeORMError } from "../error";
|
|
6
|
-
import { EntityPropertyNotFoundError } from "../error/EntityPropertyNotFoundError";
|
|
7
|
-
/* */
|
|
8
|
-
/* */
|
|
9
|
-
import { InstanceChecker } from "../util/InstanceChecker";
|
|
10
|
-
import { escapeRegExp } from "../util/escapeRegExp";
|
|
11
|
-
import { CLASS } from "typescript-class-helpers/websql";
|
|
12
|
-
/**
|
|
13
|
-
* Allows to build complex sql queries in a fashion way and execute those queries.
|
|
14
|
-
*/
|
|
15
|
-
export class QueryBuilder {
|
|
16
|
-
/**
|
|
17
|
-
* QueryBuilder can be initialized from given Connection and QueryRunner objects or from given other QueryBuilder.
|
|
18
|
-
*/
|
|
19
|
-
constructor(connectionOrQueryBuilder, queryRunner) {
|
|
20
|
-
this["@instanceof"] = Symbol.for("QueryBuilder");
|
|
21
|
-
/**
|
|
22
|
-
* Memo to help keep place of current parameter index for `createParameter`
|
|
23
|
-
*/
|
|
24
|
-
this.parameterIndex = 0;
|
|
25
|
-
if (InstanceChecker.isQueryBuilder(connectionOrQueryBuilder)) {
|
|
26
|
-
this.connection = connectionOrQueryBuilder.connection;
|
|
27
|
-
this.queryRunner = connectionOrQueryBuilder.queryRunner;
|
|
28
|
-
this.expressionMap = connectionOrQueryBuilder.expressionMap.clone();
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.connection = connectionOrQueryBuilder;
|
|
32
|
-
this.queryRunner = queryRunner;
|
|
33
|
-
this.expressionMap = new QueryExpressionMap(this.connection);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Gets the main alias string used in this query builder.
|
|
38
|
-
*/
|
|
39
|
-
get alias() {
|
|
40
|
-
if (!this.expressionMap.mainAlias)
|
|
41
|
-
throw new TypeORMError(`Main alias is not set`); // todo: better exception
|
|
42
|
-
return this.expressionMap.mainAlias.name;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Creates SELECT query and selects given data.
|
|
46
|
-
* Replaces all previous selections if they exist.
|
|
47
|
-
*/
|
|
48
|
-
select(selection, selectionAliasName) {
|
|
49
|
-
this.expressionMap.queryType = "select";
|
|
50
|
-
if (Array.isArray(selection)) {
|
|
51
|
-
this.expressionMap.selects = selection.map((selection) => ({
|
|
52
|
-
selection: selection,
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
else if (selection) {
|
|
56
|
-
this.expressionMap.selects = [
|
|
57
|
-
{ selection: selection, aliasName: selectionAliasName },
|
|
58
|
-
];
|
|
59
|
-
}
|
|
60
|
-
const SelectQueryBuilderCls = CLASS.getBy('SelectQueryBuilder');
|
|
61
|
-
if (InstanceChecker.isSelectQueryBuilder(this))
|
|
62
|
-
return this;
|
|
63
|
-
return new SelectQueryBuilderCls(this);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Creates INSERT query.
|
|
67
|
-
*/
|
|
68
|
-
insert() {
|
|
69
|
-
this.expressionMap.queryType = "insert";
|
|
70
|
-
// loading it dynamically because of circular issue // @ts-ignore
|
|
71
|
-
const InsertQueryBuilderCls = CLASS.getBy('InsertQueryBuilder');
|
|
72
|
-
if (InstanceChecker.isInsertQueryBuilder(this)) {
|
|
73
|
-
return this;
|
|
74
|
-
}
|
|
75
|
-
return new InsertQueryBuilderCls(this);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Creates UPDATE query and applies given update values.
|
|
79
|
-
*/
|
|
80
|
-
update(entityOrTableNameUpdateSet, maybeUpdateSet) {
|
|
81
|
-
const updateSet = maybeUpdateSet
|
|
82
|
-
? maybeUpdateSet
|
|
83
|
-
: entityOrTableNameUpdateSet;
|
|
84
|
-
entityOrTableNameUpdateSet = InstanceChecker.isEntitySchema(entityOrTableNameUpdateSet)
|
|
85
|
-
? entityOrTableNameUpdateSet.options.name
|
|
86
|
-
: entityOrTableNameUpdateSet;
|
|
87
|
-
if (typeof entityOrTableNameUpdateSet === "function" ||
|
|
88
|
-
typeof entityOrTableNameUpdateSet === "string") {
|
|
89
|
-
const mainAlias = this.createFromAlias(entityOrTableNameUpdateSet);
|
|
90
|
-
this.expressionMap.setMainAlias(mainAlias);
|
|
91
|
-
}
|
|
92
|
-
this.expressionMap.queryType = "update";
|
|
93
|
-
this.expressionMap.valuesSet = updateSet;
|
|
94
|
-
const UpdateQueryBuilderCls = CLASS.getBy('UpdateQueryBuilder');
|
|
95
|
-
if (InstanceChecker.isUpdateQueryBuilder(this))
|
|
96
|
-
return this;
|
|
97
|
-
return new UpdateQueryBuilderCls(this);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Creates DELETE query.
|
|
101
|
-
*/
|
|
102
|
-
delete() {
|
|
103
|
-
this.expressionMap.queryType = "delete";
|
|
104
|
-
const DeleteQueryBuilderCls = CLASS.getBy('DeleteQueryBuilder');
|
|
105
|
-
if (InstanceChecker.isDeleteQueryBuilder(this))
|
|
106
|
-
return this;
|
|
107
|
-
return new DeleteQueryBuilderCls(this);
|
|
108
|
-
}
|
|
109
|
-
softDelete() {
|
|
110
|
-
this.expressionMap.queryType = "soft-delete";
|
|
111
|
-
const SoftDeleteQueryBuilderCls = CLASS.getBy('SoftDeleteQueryBuilder');
|
|
112
|
-
if (InstanceChecker.isSoftDeleteQueryBuilder(this))
|
|
113
|
-
return this;
|
|
114
|
-
return new SoftDeleteQueryBuilderCls(this);
|
|
115
|
-
}
|
|
116
|
-
restore() {
|
|
117
|
-
this.expressionMap.queryType = "restore";
|
|
118
|
-
const SoftDeleteQueryBuilderCls = CLASS.getBy('SoftDeleteQueryBuilder');
|
|
119
|
-
if (InstanceChecker.isSoftDeleteQueryBuilder(this))
|
|
120
|
-
return this;
|
|
121
|
-
return new SoftDeleteQueryBuilderCls(this);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Sets entity's relation with which this query builder gonna work.
|
|
125
|
-
*/
|
|
126
|
-
relation(entityTargetOrPropertyPath, maybePropertyPath) {
|
|
127
|
-
const entityTarget = arguments.length === 2 ? entityTargetOrPropertyPath : undefined;
|
|
128
|
-
const propertyPath = arguments.length === 2
|
|
129
|
-
? maybePropertyPath
|
|
130
|
-
: entityTargetOrPropertyPath;
|
|
131
|
-
this.expressionMap.queryType = "relation";
|
|
132
|
-
this.expressionMap.relationPropertyPath = propertyPath;
|
|
133
|
-
if (entityTarget) {
|
|
134
|
-
const mainAlias = this.createFromAlias(entityTarget);
|
|
135
|
-
this.expressionMap.setMainAlias(mainAlias);
|
|
136
|
-
}
|
|
137
|
-
const RelationQueryBuilderCls = CLASS.getBy('RelationQueryBuilder');
|
|
138
|
-
if (InstanceChecker.isRelationQueryBuilder(this))
|
|
139
|
-
return this;
|
|
140
|
-
return new RelationQueryBuilderCls(this);
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Checks if given relation or relations exist in the entity.
|
|
144
|
-
* Returns true if relation exists, false otherwise.
|
|
145
|
-
*
|
|
146
|
-
* todo: move this method to manager? or create a shortcut?
|
|
147
|
-
*/
|
|
148
|
-
hasRelation(target, relation) {
|
|
149
|
-
const entityMetadata = this.connection.getMetadata(target);
|
|
150
|
-
const relations = Array.isArray(relation) ? relation : [relation];
|
|
151
|
-
return relations.every((relation) => {
|
|
152
|
-
return !!entityMetadata.findRelationWithPropertyPath(relation);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Check the existence of a parameter for this query builder.
|
|
157
|
-
*/
|
|
158
|
-
hasParameter(key) {
|
|
159
|
-
return (this.parentQueryBuilder?.hasParameter(key) ||
|
|
160
|
-
key in this.expressionMap.parameters);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Sets parameter name and its value.
|
|
164
|
-
*
|
|
165
|
-
* The key for this parameter may contain numbers, letters, underscores, or periods.
|
|
166
|
-
*/
|
|
167
|
-
setParameter(key, value) {
|
|
168
|
-
if (typeof value === "function") {
|
|
169
|
-
throw new TypeORMError(`Function parameter isn't supported in the parameters. Please check "${key}" parameter.`);
|
|
170
|
-
}
|
|
171
|
-
if (!key.match(/^([A-Za-z0-9_.]+)$/)) {
|
|
172
|
-
throw new TypeORMError("QueryBuilder parameter keys may only contain numbers, letters, underscores, or periods.");
|
|
173
|
-
}
|
|
174
|
-
if (this.parentQueryBuilder) {
|
|
175
|
-
this.parentQueryBuilder.setParameter(key, value);
|
|
176
|
-
}
|
|
177
|
-
this.expressionMap.parameters[key] = value;
|
|
178
|
-
return this;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Adds all parameters from the given object.
|
|
182
|
-
*/
|
|
183
|
-
setParameters(parameters) {
|
|
184
|
-
for (const [key, value] of Object.entries(parameters)) {
|
|
185
|
-
this.setParameter(key, value);
|
|
186
|
-
}
|
|
187
|
-
return this;
|
|
188
|
-
}
|
|
189
|
-
createParameter(value) {
|
|
190
|
-
let parameterName;
|
|
191
|
-
do {
|
|
192
|
-
parameterName = `orm_param_${this.parameterIndex++}`;
|
|
193
|
-
} while (this.hasParameter(parameterName));
|
|
194
|
-
this.setParameter(parameterName, value);
|
|
195
|
-
return `:${parameterName}`;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Adds native parameters from the given object.
|
|
199
|
-
*
|
|
200
|
-
* @deprecated Use `setParameters` instead
|
|
201
|
-
*/
|
|
202
|
-
setNativeParameters(parameters) {
|
|
203
|
-
if (this.parentQueryBuilder) {
|
|
204
|
-
this.parentQueryBuilder.setNativeParameters(parameters);
|
|
205
|
-
}
|
|
206
|
-
Object.keys(parameters).forEach((key) => {
|
|
207
|
-
this.expressionMap.nativeParameters[key] = parameters[key];
|
|
208
|
-
});
|
|
209
|
-
return this;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Gets all parameters.
|
|
213
|
-
*/
|
|
214
|
-
getParameters() {
|
|
215
|
-
const parameters = Object.assign({}, this.expressionMap.parameters);
|
|
216
|
-
if (this.expressionMap.mainAlias &&
|
|
217
|
-
this.expressionMap.mainAlias.hasMetadata) {
|
|
218
|
-
const metadata = this.expressionMap.mainAlias.metadata;
|
|
219
|
-
if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {
|
|
220
|
-
const values = metadata.childEntityMetadatas
|
|
221
|
-
.filter((childMetadata) => childMetadata.discriminatorColumn)
|
|
222
|
-
.map((childMetadata) => childMetadata.discriminatorValue);
|
|
223
|
-
values.push(metadata.discriminatorValue);
|
|
224
|
-
parameters["discriminatorColumnValues"] = values;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
return parameters;
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Prints sql to stdout using console.log.
|
|
231
|
-
*/
|
|
232
|
-
printSql() {
|
|
233
|
-
const [query, parameters] = this.getQueryAndParameters();
|
|
234
|
-
this.connection.logger.logQuery(query, parameters);
|
|
235
|
-
return this;
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* Gets generated sql that will be executed.
|
|
239
|
-
* Parameters in the query are escaped for the currently used driver.
|
|
240
|
-
*/
|
|
241
|
-
getSql() {
|
|
242
|
-
return this.getQueryAndParameters()[0];
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Gets query to be executed with all parameters used in it.
|
|
246
|
-
*/
|
|
247
|
-
getQueryAndParameters() {
|
|
248
|
-
const query = this.getQuery();
|
|
249
|
-
const parameters = this.getParameters();
|
|
250
|
-
return this.connection.driver.escapeQueryWithParameters(query, parameters, this.expressionMap.nativeParameters);
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Executes sql generated by query builder and returns raw database results.
|
|
254
|
-
*/
|
|
255
|
-
async execute() {
|
|
256
|
-
const [sql, parameters] = this.getQueryAndParameters();
|
|
257
|
-
const queryRunner = this.obtainQueryRunner();
|
|
258
|
-
try {
|
|
259
|
-
return await queryRunner.query(sql, parameters); // await is needed here because we are using finally
|
|
260
|
-
}
|
|
261
|
-
finally {
|
|
262
|
-
if (queryRunner !== this.queryRunner) {
|
|
263
|
-
await queryRunner.release();
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Creates a completely new query builder.
|
|
269
|
-
* Uses same query runner as current QueryBuilder.
|
|
270
|
-
*/
|
|
271
|
-
createQueryBuilder() {
|
|
272
|
-
return new this.constructor(this.connection, this.queryRunner);
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Clones query builder as it is.
|
|
276
|
-
* Note: it uses new query runner, if you want query builder that uses exactly same query runner,
|
|
277
|
-
* you can create query builder using its constructor, for example new SelectQueryBuilder(queryBuilder)
|
|
278
|
-
* where queryBuilder is cloned QueryBuilder.
|
|
279
|
-
*/
|
|
280
|
-
clone() {
|
|
281
|
-
return new this.constructor(this);
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Includes a Query comment in the query builder. This is helpful for debugging purposes,
|
|
285
|
-
* such as finding a specific query in the database server's logs, or for categorization using
|
|
286
|
-
* an APM product.
|
|
287
|
-
*/
|
|
288
|
-
comment(comment) {
|
|
289
|
-
this.expressionMap.comment = comment;
|
|
290
|
-
return this;
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Disables escaping.
|
|
294
|
-
*/
|
|
295
|
-
disableEscaping() {
|
|
296
|
-
this.expressionMap.disableEscaping = false;
|
|
297
|
-
return this;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Escapes table name, column name or alias name using current database's escaping character.
|
|
301
|
-
*/
|
|
302
|
-
escape(name) {
|
|
303
|
-
if (!this.expressionMap.disableEscaping)
|
|
304
|
-
return name;
|
|
305
|
-
return this.connection.driver.escape(name);
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Sets or overrides query builder's QueryRunner.
|
|
309
|
-
*/
|
|
310
|
-
setQueryRunner(queryRunner) {
|
|
311
|
-
this.queryRunner = queryRunner;
|
|
312
|
-
return this;
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Indicates if listeners and subscribers must be called before and after query execution.
|
|
316
|
-
* Enabled by default.
|
|
317
|
-
*/
|
|
318
|
-
callListeners(enabled) {
|
|
319
|
-
this.expressionMap.callListeners = enabled;
|
|
320
|
-
return this;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* If set to true the query will be wrapped into a transaction.
|
|
324
|
-
*/
|
|
325
|
-
useTransaction(enabled) {
|
|
326
|
-
this.expressionMap.useTransaction = enabled;
|
|
327
|
-
return this;
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* Adds CTE to query
|
|
331
|
-
*/
|
|
332
|
-
addCommonTableExpression(queryBuilder, alias, options) {
|
|
333
|
-
this.expressionMap.commonTableExpressions.push({
|
|
334
|
-
queryBuilder,
|
|
335
|
-
alias,
|
|
336
|
-
options: options || {},
|
|
337
|
-
});
|
|
338
|
-
return this;
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Gets escaped table name with schema name if SqlServer driver used with custom
|
|
342
|
-
* schema name, otherwise returns escaped table name.
|
|
343
|
-
*/
|
|
344
|
-
getTableName(tablePath) {
|
|
345
|
-
return tablePath
|
|
346
|
-
.split(".")
|
|
347
|
-
.map((i) => {
|
|
348
|
-
if (i === "")
|
|
349
|
-
return i;
|
|
350
|
-
return this.escape(i);
|
|
351
|
-
})
|
|
352
|
-
.join(".");
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Gets name of the table where insert should be performed.
|
|
356
|
-
*/
|
|
357
|
-
getMainTableName() {
|
|
358
|
-
if (!this.expressionMap.mainAlias)
|
|
359
|
-
throw new TypeORMError(`Entity where values should be inserted is not specified. Call "qb.into(entity)" method to specify it.`);
|
|
360
|
-
if (this.expressionMap.mainAlias.hasMetadata)
|
|
361
|
-
return this.expressionMap.mainAlias.metadata.tablePath;
|
|
362
|
-
return this.expressionMap.mainAlias.tablePath;
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Specifies FROM which entity's table select/update/delete will be executed.
|
|
366
|
-
* Also sets a main string alias of the selection data.
|
|
367
|
-
*/
|
|
368
|
-
createFromAlias(entityTarget, aliasName) {
|
|
369
|
-
if (this.connection.hasMetadata(entityTarget)) {
|
|
370
|
-
const metadata = this.connection.getMetadata(entityTarget);
|
|
371
|
-
return this.expressionMap.createAlias({
|
|
372
|
-
type: "from",
|
|
373
|
-
name: aliasName,
|
|
374
|
-
metadata: this.connection.getMetadata(entityTarget),
|
|
375
|
-
tablePath: metadata.tablePath,
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
else {
|
|
379
|
-
if (typeof entityTarget === "string") {
|
|
380
|
-
const isSubquery = entityTarget.substr(0, 1) === "(" &&
|
|
381
|
-
entityTarget.substr(-1) === ")";
|
|
382
|
-
return this.expressionMap.createAlias({
|
|
383
|
-
type: "from",
|
|
384
|
-
name: aliasName,
|
|
385
|
-
tablePath: !isSubquery
|
|
386
|
-
? entityTarget
|
|
387
|
-
: undefined,
|
|
388
|
-
subQuery: isSubquery ? entityTarget : undefined,
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
const subQueryBuilder = entityTarget(this.subQuery());
|
|
392
|
-
this.setParameters(subQueryBuilder.getParameters());
|
|
393
|
-
const subquery = subQueryBuilder.getQuery();
|
|
394
|
-
return this.expressionMap.createAlias({
|
|
395
|
-
type: "from",
|
|
396
|
-
name: aliasName,
|
|
397
|
-
subQuery: subquery,
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Replaces all entity's propertyName to name in the given statement.
|
|
403
|
-
*/
|
|
404
|
-
replacePropertyNames(statement) {
|
|
405
|
-
for (const alias of this.expressionMap.aliases) {
|
|
406
|
-
if (!alias.hasMetadata)
|
|
407
|
-
continue;
|
|
408
|
-
const replaceAliasNamePrefix = this.expressionMap
|
|
409
|
-
.aliasNamePrefixingEnabled
|
|
410
|
-
? `${alias.name}.`
|
|
411
|
-
: "";
|
|
412
|
-
const replacementAliasNamePrefix = this.expressionMap
|
|
413
|
-
.aliasNamePrefixingEnabled
|
|
414
|
-
? `${this.escape(alias.name)}.`
|
|
415
|
-
: "";
|
|
416
|
-
const replacements = {};
|
|
417
|
-
for (const relation of alias.metadata.relations) {
|
|
418
|
-
if (relation.joinColumns.length > 0)
|
|
419
|
-
replacements[relation.propertyPath] =
|
|
420
|
-
relation.joinColumns[0].databaseName;
|
|
421
|
-
}
|
|
422
|
-
for (const relation of alias.metadata.relations) {
|
|
423
|
-
for (const joinColumn of [
|
|
424
|
-
...relation.joinColumns,
|
|
425
|
-
...relation.inverseJoinColumns,
|
|
426
|
-
]) {
|
|
427
|
-
const propertyKey = `${relation.propertyPath}.${joinColumn.referencedColumn.propertyPath}`;
|
|
428
|
-
replacements[propertyKey] = joinColumn.databaseName;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
for (const column of alias.metadata.columns) {
|
|
432
|
-
replacements[column.databaseName] = column.databaseName;
|
|
433
|
-
}
|
|
434
|
-
for (const column of alias.metadata.columns) {
|
|
435
|
-
replacements[column.propertyName] = column.databaseName;
|
|
436
|
-
}
|
|
437
|
-
for (const column of alias.metadata.columns) {
|
|
438
|
-
replacements[column.propertyPath] = column.databaseName;
|
|
439
|
-
}
|
|
440
|
-
statement = statement.replace(new RegExp(`([ =\(]|^.{0})` + // any of ' =(' or start of line
|
|
441
|
-
`${escapeRegExp(replaceAliasNamePrefix)}([^ =\(\)\,]+)` + // a possible property name: sequence of anything but ' =(),'
|
|
442
|
-
`(?=[ =\)\,]|.{0}$)`, "gm"), (match, pre, p) => {
|
|
443
|
-
if (replacements[p]) {
|
|
444
|
-
return `${pre}${replacementAliasNamePrefix}${this.escape(replacements[p])}`;
|
|
445
|
-
}
|
|
446
|
-
return match;
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
return statement;
|
|
450
|
-
}
|
|
451
|
-
createComment() {
|
|
452
|
-
if (!this.expressionMap.comment) {
|
|
453
|
-
return "";
|
|
454
|
-
}
|
|
455
|
-
return `/* ${this.expressionMap.comment.replace("*/", "")} */ `;
|
|
456
|
-
}
|
|
457
|
-
/**
|
|
458
|
-
* Creates "WHERE" expression.
|
|
459
|
-
*/
|
|
460
|
-
createWhereExpression() {
|
|
461
|
-
const conditionsArray = [];
|
|
462
|
-
const whereExpression = this.createWhereClausesExpression(this.expressionMap.wheres);
|
|
463
|
-
if (whereExpression.length > 0 && whereExpression !== "1=1") {
|
|
464
|
-
conditionsArray.push(this.replacePropertyNames(whereExpression));
|
|
465
|
-
}
|
|
466
|
-
if (this.expressionMap.mainAlias.hasMetadata) {
|
|
467
|
-
const metadata = this.expressionMap.mainAlias.metadata;
|
|
468
|
-
if (this.expressionMap.queryType === "select" &&
|
|
469
|
-
!this.expressionMap.withDeleted &&
|
|
470
|
-
metadata.deleteDateColumn) {
|
|
471
|
-
const column = this.expressionMap.aliasNamePrefixingEnabled
|
|
472
|
-
? this.expressionMap.mainAlias.name +
|
|
473
|
-
"." +
|
|
474
|
-
metadata.deleteDateColumn.propertyName
|
|
475
|
-
: metadata.deleteDateColumn.propertyName;
|
|
476
|
-
const condition = `${this.replacePropertyNames(column)} IS NULL`;
|
|
477
|
-
conditionsArray.push(condition);
|
|
478
|
-
}
|
|
479
|
-
if (metadata.discriminatorColumn && metadata.parentEntityMetadata) {
|
|
480
|
-
const column = this.expressionMap.aliasNamePrefixingEnabled
|
|
481
|
-
? this.expressionMap.mainAlias.name +
|
|
482
|
-
"." +
|
|
483
|
-
metadata.discriminatorColumn.databaseName
|
|
484
|
-
: metadata.discriminatorColumn.databaseName;
|
|
485
|
-
const condition = `${this.replacePropertyNames(column)} IN (:...discriminatorColumnValues)`;
|
|
486
|
-
conditionsArray.push(condition);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
if (this.expressionMap.extraAppendedAndWhereCondition) {
|
|
490
|
-
const condition = this.replacePropertyNames(this.expressionMap.extraAppendedAndWhereCondition);
|
|
491
|
-
conditionsArray.push(condition);
|
|
492
|
-
}
|
|
493
|
-
if (!conditionsArray.length) {
|
|
494
|
-
return "";
|
|
495
|
-
}
|
|
496
|
-
else if (conditionsArray.length === 1) {
|
|
497
|
-
return ` WHERE ${conditionsArray[0]}`;
|
|
498
|
-
}
|
|
499
|
-
else {
|
|
500
|
-
return ` WHERE ( ${conditionsArray.join(" ) AND ( ")} )`;
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Creates "RETURNING" / "OUTPUT" expression.
|
|
505
|
-
*/
|
|
506
|
-
createReturningExpression(returningType) {
|
|
507
|
-
const columns = this.getReturningColumns();
|
|
508
|
-
const driver = this.connection.driver;
|
|
509
|
-
if (typeof this.expressionMap.returning !== "string" &&
|
|
510
|
-
this.expressionMap.extraReturningColumns.length > 0 &&
|
|
511
|
-
driver.isReturningSqlSupported(returningType)) {
|
|
512
|
-
columns.push(...this.expressionMap.extraReturningColumns.filter((column) => {
|
|
513
|
-
return columns.indexOf(column) === -1;
|
|
514
|
-
}));
|
|
515
|
-
}
|
|
516
|
-
if (columns.length) {
|
|
517
|
-
let columnsExpression = columns
|
|
518
|
-
.map((column) => {
|
|
519
|
-
const name = this.escape(column.databaseName);
|
|
520
|
-
if (driver.options.type === "mssql") {
|
|
521
|
-
if (this.expressionMap.queryType === "insert" ||
|
|
522
|
-
this.expressionMap.queryType === "update" ||
|
|
523
|
-
this.expressionMap.queryType === "soft-delete" ||
|
|
524
|
-
this.expressionMap.queryType === "restore") {
|
|
525
|
-
return "INSERTED." + name;
|
|
526
|
-
}
|
|
527
|
-
else {
|
|
528
|
-
return (this.escape(this.getMainTableName()) +
|
|
529
|
-
"." +
|
|
530
|
-
name);
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
else {
|
|
534
|
-
return name;
|
|
535
|
-
}
|
|
536
|
-
})
|
|
537
|
-
.join(", ");
|
|
538
|
-
/* */
|
|
539
|
-
/* */
|
|
540
|
-
/* */
|
|
541
|
-
/* */
|
|
542
|
-
/* */
|
|
543
|
-
/* */
|
|
544
|
-
/* */
|
|
545
|
-
/* */
|
|
546
|
-
/* */
|
|
547
|
-
/* */
|
|
548
|
-
/* */
|
|
549
|
-
/* */
|
|
550
|
-
/* */
|
|
551
|
-
/* */
|
|
552
|
-
/* */
|
|
553
|
-
/* */
|
|
554
|
-
/* */
|
|
555
|
-
/* */
|
|
556
|
-
/* */
|
|
557
|
-
/* */
|
|
558
|
-
/* */
|
|
559
|
-
/* */
|
|
560
|
-
/* */
|
|
561
|
-
/* */
|
|
562
|
-
return columnsExpression;
|
|
563
|
-
}
|
|
564
|
-
else if (typeof this.expressionMap.returning === "string") {
|
|
565
|
-
return this.expressionMap.returning;
|
|
566
|
-
}
|
|
567
|
-
return "";
|
|
568
|
-
}
|
|
569
|
-
/**
|
|
570
|
-
* If returning / output cause is set to array of column names,
|
|
571
|
-
* then this method will return all column metadatas of those column names.
|
|
572
|
-
*/
|
|
573
|
-
getReturningColumns() {
|
|
574
|
-
const columns = [];
|
|
575
|
-
if (Array.isArray(this.expressionMap.returning)) {
|
|
576
|
-
;
|
|
577
|
-
this.expressionMap.returning.forEach((columnName) => {
|
|
578
|
-
if (this.expressionMap.mainAlias.hasMetadata) {
|
|
579
|
-
columns.push(...this.expressionMap.mainAlias.metadata.findColumnsWithPropertyPath(columnName));
|
|
580
|
-
}
|
|
581
|
-
});
|
|
582
|
-
}
|
|
583
|
-
return columns;
|
|
584
|
-
}
|
|
585
|
-
createWhereClausesExpression(clauses) {
|
|
586
|
-
return clauses
|
|
587
|
-
.map((clause, index) => {
|
|
588
|
-
const expression = this.createWhereConditionExpression(clause.condition);
|
|
589
|
-
switch (clause.type) {
|
|
590
|
-
case "and":
|
|
591
|
-
return (index > 0 ? "AND " : "") + expression;
|
|
592
|
-
case "or":
|
|
593
|
-
return (index > 0 ? "OR " : "") + expression;
|
|
594
|
-
}
|
|
595
|
-
return expression;
|
|
596
|
-
})
|
|
597
|
-
.join(" ")
|
|
598
|
-
.trim();
|
|
599
|
-
}
|
|
600
|
-
/**
|
|
601
|
-
* Computes given where argument - transforms to a where string all forms it can take.
|
|
602
|
-
*/
|
|
603
|
-
createWhereConditionExpression(condition, alwaysWrap = false) {
|
|
604
|
-
if (typeof condition === "string")
|
|
605
|
-
return condition;
|
|
606
|
-
if (Array.isArray(condition)) {
|
|
607
|
-
if (condition.length === 0) {
|
|
608
|
-
return "1=1";
|
|
609
|
-
}
|
|
610
|
-
if (condition.length === 1 && !alwaysWrap) {
|
|
611
|
-
return this.createWhereClausesExpression(condition);
|
|
612
|
-
}
|
|
613
|
-
return "(" + this.createWhereClausesExpression(condition) + ")";
|
|
614
|
-
}
|
|
615
|
-
const { driver } = this.connection;
|
|
616
|
-
switch (condition.operator) {
|
|
617
|
-
case "lessThan":
|
|
618
|
-
return `${condition.parameters[0]} < ${condition.parameters[1]}`;
|
|
619
|
-
case "lessThanOrEqual":
|
|
620
|
-
return `${condition.parameters[0]} <= ${condition.parameters[1]}`;
|
|
621
|
-
case "arrayContains":
|
|
622
|
-
return `${condition.parameters[0]} @> ${condition.parameters[1]}`;
|
|
623
|
-
case "arrayContainedBy":
|
|
624
|
-
return `${condition.parameters[0]} <@ ${condition.parameters[1]}`;
|
|
625
|
-
case "arrayOverlap":
|
|
626
|
-
return `${condition.parameters[0]} && ${condition.parameters[1]}`;
|
|
627
|
-
case "moreThan":
|
|
628
|
-
return `${condition.parameters[0]} > ${condition.parameters[1]}`;
|
|
629
|
-
case "moreThanOrEqual":
|
|
630
|
-
return `${condition.parameters[0]} >= ${condition.parameters[1]}`;
|
|
631
|
-
case "notEqual":
|
|
632
|
-
return `${condition.parameters[0]} != ${condition.parameters[1]}`;
|
|
633
|
-
case "equal":
|
|
634
|
-
return `${condition.parameters[0]} = ${condition.parameters[1]}`;
|
|
635
|
-
case "ilike":
|
|
636
|
-
if (driver.options.type === "postgres" ||
|
|
637
|
-
driver.options.type === "cockroachdb") {
|
|
638
|
-
return `${condition.parameters[0]} ILIKE ${condition.parameters[1]}`;
|
|
639
|
-
}
|
|
640
|
-
return `UPPER(${condition.parameters[0]}) LIKE UPPER(${condition.parameters[1]})`;
|
|
641
|
-
case "like":
|
|
642
|
-
return `${condition.parameters[0]} LIKE ${condition.parameters[1]}`;
|
|
643
|
-
case "between":
|
|
644
|
-
return `${condition.parameters[0]} BETWEEN ${condition.parameters[1]} AND ${condition.parameters[2]}`;
|
|
645
|
-
case "in":
|
|
646
|
-
if (condition.parameters.length <= 1) {
|
|
647
|
-
return "0=1";
|
|
648
|
-
}
|
|
649
|
-
return `${condition.parameters[0]} IN (${condition.parameters
|
|
650
|
-
.slice(1)
|
|
651
|
-
.join(", ")})`;
|
|
652
|
-
case "any":
|
|
653
|
-
return `${condition.parameters[0]} = ANY(${condition.parameters[1]})`;
|
|
654
|
-
case "isNull":
|
|
655
|
-
return `${condition.parameters[0]} IS NULL`;
|
|
656
|
-
case "not":
|
|
657
|
-
return `NOT(${this.createWhereConditionExpression(condition.condition)})`;
|
|
658
|
-
case "brackets":
|
|
659
|
-
return `${this.createWhereConditionExpression(condition.condition, true)}`;
|
|
660
|
-
}
|
|
661
|
-
throw new TypeError(`Unsupported FindOperator ${FindOperator.constructor.name}`);
|
|
662
|
-
}
|
|
663
|
-
createCteExpression() {
|
|
664
|
-
if (!this.hasCommonTableExpressions()) {
|
|
665
|
-
return "";
|
|
666
|
-
}
|
|
667
|
-
const databaseRequireRecusiveHint = this.connection.driver.cteCapabilities.requiresRecursiveHint;
|
|
668
|
-
const cteStrings = this.expressionMap.commonTableExpressions.map((cte) => {
|
|
669
|
-
const cteBodyExpression = typeof cte.queryBuilder === "string"
|
|
670
|
-
? cte.queryBuilder
|
|
671
|
-
: cte.queryBuilder.getQuery();
|
|
672
|
-
if (typeof cte.queryBuilder !== "string") {
|
|
673
|
-
if (cte.queryBuilder.hasCommonTableExpressions()) {
|
|
674
|
-
throw new TypeORMError(`Nested CTEs aren't supported (CTE: ${cte.alias})`);
|
|
675
|
-
}
|
|
676
|
-
if (!this.connection.driver.cteCapabilities.writable &&
|
|
677
|
-
!InstanceChecker.isSelectQueryBuilder(cte.queryBuilder)) {
|
|
678
|
-
throw new TypeORMError(`Only select queries are supported in CTEs in ${this.connection.options.type} (CTE: ${cte.alias})`);
|
|
679
|
-
}
|
|
680
|
-
this.setParameters(cte.queryBuilder.getParameters());
|
|
681
|
-
}
|
|
682
|
-
let cteHeader = this.escape(cte.alias);
|
|
683
|
-
if (cte.options.columnNames) {
|
|
684
|
-
const escapedColumnNames = cte.options.columnNames.map((column) => this.escape(column));
|
|
685
|
-
if (InstanceChecker.isSelectQueryBuilder(cte.queryBuilder)) {
|
|
686
|
-
if (cte.queryBuilder.expressionMap.selects.length &&
|
|
687
|
-
cte.options.columnNames.length !==
|
|
688
|
-
cte.queryBuilder.expressionMap.selects.length) {
|
|
689
|
-
throw new TypeORMError(`cte.options.columnNames length (${cte.options.columnNames.length}) doesn't match subquery select list length ${cte.queryBuilder.expressionMap.selects.length} (CTE: ${cte.alias})`);
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
cteHeader += `(${escapedColumnNames.join(", ")})`;
|
|
693
|
-
}
|
|
694
|
-
const recursiveClause = cte.options.recursive && databaseRequireRecusiveHint
|
|
695
|
-
? "RECURSIVE"
|
|
696
|
-
: "";
|
|
697
|
-
const materializeClause = cte.options.materialized &&
|
|
698
|
-
this.connection.driver.cteCapabilities.materializedHint
|
|
699
|
-
? "MATERIALIZED"
|
|
700
|
-
: "";
|
|
701
|
-
return [
|
|
702
|
-
recursiveClause,
|
|
703
|
-
cteHeader,
|
|
704
|
-
materializeClause,
|
|
705
|
-
"AS",
|
|
706
|
-
`(${cteBodyExpression})`,
|
|
707
|
-
]
|
|
708
|
-
.filter(Boolean)
|
|
709
|
-
.join(" ");
|
|
710
|
-
});
|
|
711
|
-
return "WITH " + cteStrings.join(", ") + " ";
|
|
712
|
-
}
|
|
713
|
-
/**
|
|
714
|
-
* Creates "WHERE" condition for an in-ids condition.
|
|
715
|
-
*/
|
|
716
|
-
getWhereInIdsCondition(ids) {
|
|
717
|
-
const metadata = this.expressionMap.mainAlias.metadata;
|
|
718
|
-
const normalized = (Array.isArray(ids) ? ids : [ids]).map((id) => metadata.ensureEntityIdMap(id));
|
|
719
|
-
if (!metadata.hasMultiplePrimaryKeys) {
|
|
720
|
-
const primaryColumn = metadata.primaryColumns[0];
|
|
721
|
-
if (!primaryColumn.transformer &&
|
|
722
|
-
!primaryColumn.relationMetadata &&
|
|
723
|
-
!primaryColumn.embeddedMetadata) {
|
|
724
|
-
return {
|
|
725
|
-
[primaryColumn.propertyName]: In(normalized.map((id) => primaryColumn.getEntityValue(id, false))),
|
|
726
|
-
};
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
return new Brackets((qb) => {
|
|
730
|
-
for (const data of normalized) {
|
|
731
|
-
qb.orWhere(new Brackets((qb) => qb.where(data)));
|
|
732
|
-
}
|
|
733
|
-
});
|
|
734
|
-
}
|
|
735
|
-
findColumnsForPropertyPath(propertyPath) {
|
|
736
|
-
let alias = this.expressionMap.mainAlias;
|
|
737
|
-
const root = [];
|
|
738
|
-
const propertyPathParts = propertyPath.split(".");
|
|
739
|
-
while (propertyPathParts.length > 1) {
|
|
740
|
-
const part = propertyPathParts[0];
|
|
741
|
-
if (!alias?.hasMetadata) {
|
|
742
|
-
break;
|
|
743
|
-
}
|
|
744
|
-
if (alias.metadata.hasEmbeddedWithPropertyPath(part)) {
|
|
745
|
-
propertyPathParts.unshift(`${propertyPathParts.shift()}.${propertyPathParts.shift()}`);
|
|
746
|
-
continue;
|
|
747
|
-
}
|
|
748
|
-
if (alias.metadata.hasRelationWithPropertyPath(part)) {
|
|
749
|
-
const joinAttr = this.expressionMap.joinAttributes.find((joinAttr) => joinAttr.relationPropertyPath === part);
|
|
750
|
-
if (!joinAttr?.alias) {
|
|
751
|
-
const fullRelationPath = root.length > 0 ? `${root.join(".")}.${part}` : part;
|
|
752
|
-
throw new Error(`Cannot find alias for relation at ${fullRelationPath}`);
|
|
753
|
-
}
|
|
754
|
-
alias = joinAttr.alias;
|
|
755
|
-
root.push(...part.split("."));
|
|
756
|
-
propertyPathParts.shift();
|
|
757
|
-
continue;
|
|
758
|
-
}
|
|
759
|
-
break;
|
|
760
|
-
}
|
|
761
|
-
if (!alias) {
|
|
762
|
-
throw new Error(`Cannot find alias for property ${propertyPath}`);
|
|
763
|
-
}
|
|
764
|
-
const aliasPropertyPath = propertyPathParts.join(".");
|
|
765
|
-
const columns = alias.metadata.findColumnsWithPropertyPath(aliasPropertyPath);
|
|
766
|
-
if (!columns.length) {
|
|
767
|
-
throw new EntityPropertyNotFoundError(propertyPath, alias.metadata);
|
|
768
|
-
}
|
|
769
|
-
return [alias, root, columns];
|
|
770
|
-
}
|
|
771
|
-
/**
|
|
772
|
-
* Creates a property paths for a given ObjectLiteral.
|
|
773
|
-
*/
|
|
774
|
-
createPropertyPath(metadata, entity, prefix = "") {
|
|
775
|
-
const paths = [];
|
|
776
|
-
for (const key of Object.keys(entity)) {
|
|
777
|
-
const path = prefix ? `${prefix}.${key}` : key;
|
|
778
|
-
if (entity[key] === null ||
|
|
779
|
-
typeof entity[key] !== "object" ||
|
|
780
|
-
InstanceChecker.isFindOperator(entity[key])) {
|
|
781
|
-
paths.push(path);
|
|
782
|
-
continue;
|
|
783
|
-
}
|
|
784
|
-
if (metadata.hasEmbeddedWithPropertyPath(path)) {
|
|
785
|
-
const subPaths = this.createPropertyPath(metadata, entity[key], path);
|
|
786
|
-
paths.push(...subPaths);
|
|
787
|
-
continue;
|
|
788
|
-
}
|
|
789
|
-
if (metadata.hasRelationWithPropertyPath(path)) {
|
|
790
|
-
const relation = metadata.findRelationWithPropertyPath(path);
|
|
791
|
-
if (relation.relationType === "one-to-one" ||
|
|
792
|
-
relation.relationType === "many-to-one") {
|
|
793
|
-
const joinColumns = relation.joinColumns
|
|
794
|
-
.map((j) => j.referencedColumn)
|
|
795
|
-
.filter((j) => !!j);
|
|
796
|
-
const hasAllJoinColumns = joinColumns.length > 0 &&
|
|
797
|
-
joinColumns.every((column) => column.getEntityValue(entity[key], false));
|
|
798
|
-
if (hasAllJoinColumns) {
|
|
799
|
-
paths.push(path);
|
|
800
|
-
continue;
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
if (relation.relationType === "one-to-many" ||
|
|
804
|
-
relation.relationType === "many-to-many") {
|
|
805
|
-
throw new Error(`Cannot query across ${relation.relationType} for property ${path}`);
|
|
806
|
-
}
|
|
807
|
-
const primaryColumns = relation.inverseEntityMetadata.primaryColumns;
|
|
808
|
-
const hasAllPrimaryKeys = primaryColumns.length > 0 &&
|
|
809
|
-
primaryColumns.every((column) => column.getEntityValue(entity[key], false));
|
|
810
|
-
if (hasAllPrimaryKeys) {
|
|
811
|
-
const subPaths = primaryColumns.map((column) => `${path}.${column.propertyPath}`);
|
|
812
|
-
paths.push(...subPaths);
|
|
813
|
-
continue;
|
|
814
|
-
}
|
|
815
|
-
const subPaths = this.createPropertyPath(relation.inverseEntityMetadata, entity[key]).map((p) => `${path}.${p}`);
|
|
816
|
-
paths.push(...subPaths);
|
|
817
|
-
continue;
|
|
818
|
-
}
|
|
819
|
-
paths.push(path);
|
|
820
|
-
}
|
|
821
|
-
return paths;
|
|
822
|
-
}
|
|
823
|
-
*getPredicates(where) {
|
|
824
|
-
if (this.expressionMap.mainAlias.hasMetadata) {
|
|
825
|
-
const propertyPaths = this.createPropertyPath(this.expressionMap.mainAlias.metadata, where);
|
|
826
|
-
for (const propertyPath of propertyPaths) {
|
|
827
|
-
const [alias, aliasPropertyPath, columns] = this.findColumnsForPropertyPath(propertyPath);
|
|
828
|
-
for (const column of columns) {
|
|
829
|
-
let containedWhere = where;
|
|
830
|
-
for (const part of aliasPropertyPath) {
|
|
831
|
-
if (!containedWhere || !(part in containedWhere)) {
|
|
832
|
-
containedWhere = {};
|
|
833
|
-
break;
|
|
834
|
-
}
|
|
835
|
-
containedWhere = containedWhere[part];
|
|
836
|
-
}
|
|
837
|
-
const aliasPath = this.expressionMap
|
|
838
|
-
.aliasNamePrefixingEnabled
|
|
839
|
-
? `${alias.name}.${column.propertyPath}`
|
|
840
|
-
: column.propertyPath;
|
|
841
|
-
const parameterValue = column.getEntityValue(containedWhere, true);
|
|
842
|
-
yield [aliasPath, parameterValue];
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
else {
|
|
847
|
-
for (const key of Object.keys(where)) {
|
|
848
|
-
const parameterValue = where[key];
|
|
849
|
-
const aliasPath = this.expressionMap.aliasNamePrefixingEnabled
|
|
850
|
-
? `${this.alias}.${key}`
|
|
851
|
-
: key;
|
|
852
|
-
yield [aliasPath, parameterValue];
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
}
|
|
856
|
-
getWherePredicateCondition(aliasPath, parameterValue) {
|
|
857
|
-
if (InstanceChecker.isFindOperator(parameterValue)) {
|
|
858
|
-
let parameters = [];
|
|
859
|
-
if (parameterValue.useParameter) {
|
|
860
|
-
if (parameterValue.objectLiteralParameters) {
|
|
861
|
-
this.setParameters(parameterValue.objectLiteralParameters);
|
|
862
|
-
}
|
|
863
|
-
else if (parameterValue.multipleParameters) {
|
|
864
|
-
for (const v of parameterValue.value) {
|
|
865
|
-
parameters.push(this.createParameter(v));
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
else {
|
|
869
|
-
parameters.push(this.createParameter(parameterValue.value));
|
|
870
|
-
}
|
|
871
|
-
}
|
|
872
|
-
if (parameterValue.type === "raw") {
|
|
873
|
-
if (parameterValue.getSql) {
|
|
874
|
-
return parameterValue.getSql(aliasPath);
|
|
875
|
-
}
|
|
876
|
-
else {
|
|
877
|
-
return {
|
|
878
|
-
operator: "equal",
|
|
879
|
-
parameters: [aliasPath, parameterValue.value],
|
|
880
|
-
};
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
else if (parameterValue.type === "not") {
|
|
884
|
-
if (parameterValue.child) {
|
|
885
|
-
return {
|
|
886
|
-
operator: parameterValue.type,
|
|
887
|
-
condition: this.getWherePredicateCondition(aliasPath, parameterValue.child),
|
|
888
|
-
};
|
|
889
|
-
}
|
|
890
|
-
else {
|
|
891
|
-
return {
|
|
892
|
-
operator: "notEqual",
|
|
893
|
-
parameters: [aliasPath, ...parameters],
|
|
894
|
-
};
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
else {
|
|
898
|
-
return {
|
|
899
|
-
operator: parameterValue.type,
|
|
900
|
-
parameters: [aliasPath, ...parameters],
|
|
901
|
-
};
|
|
902
|
-
}
|
|
903
|
-
}
|
|
904
|
-
else {
|
|
905
|
-
return {
|
|
906
|
-
operator: "equal",
|
|
907
|
-
parameters: [aliasPath, this.createParameter(parameterValue)],
|
|
908
|
-
};
|
|
909
|
-
}
|
|
910
|
-
}
|
|
911
|
-
getWhereCondition(where) {
|
|
912
|
-
if (typeof where === "string") {
|
|
913
|
-
return where;
|
|
914
|
-
}
|
|
915
|
-
if (InstanceChecker.isBrackets(where)) {
|
|
916
|
-
const whereQueryBuilder = this.createQueryBuilder();
|
|
917
|
-
whereQueryBuilder.parentQueryBuilder = this;
|
|
918
|
-
whereQueryBuilder.expressionMap.mainAlias =
|
|
919
|
-
this.expressionMap.mainAlias;
|
|
920
|
-
whereQueryBuilder.expressionMap.aliasNamePrefixingEnabled =
|
|
921
|
-
this.expressionMap.aliasNamePrefixingEnabled;
|
|
922
|
-
whereQueryBuilder.expressionMap.parameters =
|
|
923
|
-
this.expressionMap.parameters;
|
|
924
|
-
whereQueryBuilder.expressionMap.nativeParameters =
|
|
925
|
-
this.expressionMap.nativeParameters;
|
|
926
|
-
whereQueryBuilder.expressionMap.wheres = [];
|
|
927
|
-
where.whereFactory(whereQueryBuilder);
|
|
928
|
-
return {
|
|
929
|
-
operator: InstanceChecker.isNotBrackets(where)
|
|
930
|
-
? "not"
|
|
931
|
-
: "brackets",
|
|
932
|
-
condition: whereQueryBuilder.expressionMap.wheres,
|
|
933
|
-
};
|
|
934
|
-
}
|
|
935
|
-
if (typeof where === "function") {
|
|
936
|
-
return where(this);
|
|
937
|
-
}
|
|
938
|
-
const wheres = Array.isArray(where) ? where : [where];
|
|
939
|
-
const clauses = [];
|
|
940
|
-
for (const where of wheres) {
|
|
941
|
-
const conditions = [];
|
|
942
|
-
for (const [aliasPath, parameterValue] of this.getPredicates(where)) {
|
|
943
|
-
conditions.push({
|
|
944
|
-
type: "and",
|
|
945
|
-
condition: this.getWherePredicateCondition(aliasPath, parameterValue),
|
|
946
|
-
});
|
|
947
|
-
}
|
|
948
|
-
clauses.push({ type: "or", condition: conditions });
|
|
949
|
-
}
|
|
950
|
-
if (clauses.length === 1) {
|
|
951
|
-
return clauses[0].condition;
|
|
952
|
-
}
|
|
953
|
-
return clauses;
|
|
954
|
-
}
|
|
955
|
-
/**
|
|
956
|
-
* Creates a query builder used to execute sql queries inside this query builder.
|
|
957
|
-
*/
|
|
958
|
-
obtainQueryRunner() {
|
|
959
|
-
return this.queryRunner || this.connection.createQueryRunner();
|
|
960
|
-
}
|
|
961
|
-
hasCommonTableExpressions() {
|
|
962
|
-
return this.expressionMap.commonTableExpressions.length > 0;
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
|
-
;
|
|
966
|
-
({}); // @--end-of-file-for-module=taon-typeorm lib/typeorm/query-builder/QueryBuilder.ts
|
|
967
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVlcnlCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3Qtd2Vic3FsL3Rhb24tdHlwZW9ybS9wcm9qZWN0cy90YW9uLXR5cGVvcm0vc3JjL2xpYi90eXBlb3JtL3F1ZXJ5LWJ1aWxkZXIvUXVlcnlCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBU3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFJckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBR3ZDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBRWxGLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFpQnZEOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixZQUFZO0lBa0Q5Qjs7T0FFRztJQUNILFlBQ0ksd0JBQXdELEVBQ3hELFdBQXlCO1FBdERwQixtQkFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUE7UUE4Qm5EOztXQUVHO1FBQ0ssbUJBQWMsR0FBRyxDQUFDLENBQUE7UUF1QnRCLElBQUksZUFBZSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxVQUFVLENBQUE7WUFDckQsSUFB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RzNDLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUN4RCxLQUFLLENBQ1IsRUFBRSxDQUFDO2dCQUNBLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQ1osSUFBSSxFQUFFLEtBQUs7b0JBQ1gsU0FBUyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FDdEMsU0FBUyxFQUNULGNBQWMsQ0FDakI7aUJBQ0osQ0FBQyxDQUFBO1lBQ04sQ0FBQztZQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZELENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBQy9CLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQTtJQUNsQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtJQUNsRSxDQUFDO0lBRVMseUJBQXlCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELENBQUM7Q0FDSjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUZBQW1GIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7IE9iamVjdExpdGVyYWwgfSBmcm9tIFwiLi4vY29tbW9uL09iamVjdExpdGVyYWxcIlxuaW1wb3J0IHsgUXVlcnlSdW5uZXIgfSBmcm9tIFwiLi4vcXVlcnktcnVubmVyL1F1ZXJ5UnVubmVyXCJcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vZGF0YS1zb3VyY2UvRGF0YVNvdXJjZVwiXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJDdGVPcHRpb25zIH0gZnJvbSBcIi4vUXVlcnlCdWlsZGVyQ3RlXCJcbmltcG9ydCB7IFF1ZXJ5RXhwcmVzc2lvbk1hcCB9IGZyb20gXCIuL1F1ZXJ5RXhwcmVzc2lvbk1hcFwiXG5pbXBvcnQgdHlwZSB7IFNlbGVjdFF1ZXJ5QnVpbGRlciB9IGZyb20gXCIuL1NlbGVjdFF1ZXJ5QnVpbGRlclwiXG5pbXBvcnQgdHlwZSB7IFVwZGF0ZVF1ZXJ5QnVpbGRlciB9IGZyb20gXCIuL1VwZGF0ZVF1ZXJ5QnVpbGRlclwiXG5pbXBvcnQgdHlwZSB7IERlbGV0ZVF1ZXJ5QnVpbGRlciB9IGZyb20gXCIuL0RlbGV0ZVF1ZXJ5QnVpbGRlclwiXG5pbXBvcnQgdHlwZSB7IFNvZnREZWxldGVRdWVyeUJ1aWxkZXIgfSBmcm9tIFwiLi9Tb2Z0RGVsZXRlUXVlcnlCdWlsZGVyXCJcbmltcG9ydCB0eXBlIHsgSW5zZXJ0UXVlcnlCdWlsZGVyIH0gZnJvbSBcIi4vSW5zZXJ0UXVlcnlCdWlsZGVyXCJcbmltcG9ydCB0eXBlIHsgUmVsYXRpb25RdWVyeUJ1aWxkZXIgfSBmcm9tIFwiLi9SZWxhdGlvblF1ZXJ5QnVpbGRlclwiXG5pbXBvcnQgeyBFbnRpdHlUYXJnZXQgfSBmcm9tIFwiLi4vY29tbW9uL0VudGl0eVRhcmdldFwiXG5pbXBvcnQgeyBBbGlhcyB9IGZyb20gXCIuL0FsaWFzXCJcbmltcG9ydCB7IEJyYWNrZXRzIH0gZnJvbSBcIi4vQnJhY2tldHNcIlxuaW1wb3J0IHsgUXVlcnlEZWVwUGFydGlhbEVudGl0eSB9IGZyb20gXCIuL1F1ZXJ5UGFydGlhbEVudGl0eVwiXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YSB9IGZyb20gXCIuLi9tZXRhZGF0YS9FbnRpdHlNZXRhZGF0YVwiXG5pbXBvcnQgeyBDb2x1bW5NZXRhZGF0YSB9IGZyb20gXCIuLi9tZXRhZGF0YS9Db2x1bW5NZXRhZGF0YVwiXG5pbXBvcnQgeyBGaW5kT3BlcmF0b3IgfSBmcm9tIFwiLi4vZmluZC1vcHRpb25zL0ZpbmRPcGVyYXRvclwiXG5pbXBvcnQgeyBJbiB9IGZyb20gXCIuLi9maW5kLW9wdGlvbnMvb3BlcmF0b3IvSW5cIlxuaW1wb3J0IHsgVHlwZU9STUVycm9yIH0gZnJvbSBcIi4uL2Vycm9yXCJcbmltcG9ydCB7IFdoZXJlQ2xhdXNlLCBXaGVyZUNsYXVzZUNvbmRpdGlvbiB9IGZyb20gXCIuL1doZXJlQ2xhdXNlXCJcbmltcG9ydCB7IE5vdEJyYWNrZXRzIH0gZnJvbSBcIi4vTm90QnJhY2tldHNcIlxuaW1wb3J0IHsgRW50aXR5UHJvcGVydHlOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2Vycm9yL0VudGl0eVByb3BlcnR5Tm90Rm91bmRFcnJvclwiXG5pbXBvcnQgeyBSZXR1cm5pbmdUeXBlIH0gZnJvbSBcIi4uL2RyaXZlci9Ecml2ZXJcIlxuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgSW5zdGFuY2VDaGVja2VyIH0gZnJvbSBcIi4uL3V0aWwvSW5zdGFuY2VDaGVja2VyXCJcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gXCIuLi91dGlsL2VzY2FwZVJlZ0V4cFwiXG5pbXBvcnQgeyBDTEFTUyB9IGZyb20gXCJ0eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvd2Vic3FsXCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBBbGxvd3MgdG8gYnVpbGQgY29tcGxleCBzcWwgcXVlcmllcyBpbiBhIGZhc2hpb24gd2F5IGFuZCBleGVjdXRlIHRob3NlIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBRdWVyeUJ1aWxkZXI8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4ge1xuICAgIHJlYWRvbmx5IFwiQGluc3RhbmNlb2ZcIiA9IFN5bWJvbC5mb3IoXCJRdWVyeUJ1aWxkZXJcIilcblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogQ29ubmVjdGlvbiBvbiB3aGljaCBRdWVyeUJ1aWxkZXIgd2FzIGNyZWF0ZWQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29ubmVjdGlvbjogRGF0YVNvdXJjZVxuXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIFF1ZXJ5QnVpbGRlciB0aGF0IG5lZWRzIHRvIGJlIGJ1aWxkIGEgZmluYWwgcXVlcnkuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZXhwcmVzc2lvbk1hcDogUXVlcnlFeHByZXNzaW9uTWFwXG5cblxuXG5cblxuICAgIC8qKlxuICAgICAqIFF1ZXJ5IHJ1bm5lciB1c2VkIHRvIGV4ZWN1dGUgcXVlcnkgYnVpbGRlciBxdWVyeS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcXVlcnlSdW5uZXI/OiBRdWVyeVJ1bm5lclxuXG4gICAgLyoqXG4gICAgICogSWYgUXVlcnlCdWlsZGVyIHdhcyBjcmVhdGVkIGluIGEgc3VicXVlcnkgbW9kZSB0aGVuIGl0cyBwYXJlbnQgUXVlcnlCdWlsZGVyICh3aG8gY3JlYXRlZCBzdWJxdWVyeSkgd2lsbCBiZSBzdG9yZWQgaGVyZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGFyZW50UXVlcnlCdWlsZGVyOiBRdWVyeUJ1aWxkZXI8YW55PlxuXG4gICAgLyoqXG4gICAgICogTWVtbyB0byBoZWxwIGtlZXAgcGxhY2Ugb2YgY3VycmVudCBwYXJhbWV0ZXIgaW5kZXggZm9yIGBjcmVhdGVQYXJhbWV0ZXJgXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJhbWV0ZXJJbmRleCA9IDBcblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogUXVlcnlCdWlsZGVyIGNhbiBiZSBpbml0aWFsaXplZCBmcm9tIGdpdmVuIENvbm5lY3Rpb24gYW5kIFF1ZXJ5UnVubmVyIG9iamVjdHMgb3IgZnJvbSBnaXZlbiBvdGhlciBRdWVyeUJ1aWxkZXIuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocXVlcnlCdWlsZGVyOiBRdWVyeUJ1aWxkZXI8YW55PilcblxuICAgIC8qKlxuICAgICAqIFF1ZXJ5QnVpbGRlciBjYW4gYmUgaW5pdGlhbGl6ZWQgZnJvbSBnaXZlbiBDb25uZWN0aW9uIGFuZCBRdWVyeVJ1bm5lciBvYmplY3RzIG9yIGZyb20gZ2l2ZW4gb3RoZXIgUXVlcnlCdWlsZGVyLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IERhdGFTb3VyY2UsIHF1ZXJ5UnVubmVyPzogUXVlcnlSdW5uZXIpXG5cbiAgICAvKipcbiAgICAgKiBRdWVyeUJ1aWxkZXIgY2FuIGJlIGluaXRpYWxpemVkIGZyb20gZ2l2ZW4gQ29ubmVjdGlvbiBhbmQgUXVlcnlSdW5uZXIgb2JqZWN0cyBvciBmcm9tIGdpdmVuIG90aGVyIFF1ZXJ5QnVpbGRlci5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgY29ubmVjdGlvbk9yUXVlcnlCdWlsZGVyOiBEYXRhU291cmNlIHwgUXVlcnlCdWlsZGVyPGFueT4sXG4gICAgICAgIHF1ZXJ5UnVubmVyPzogUXVlcnlSdW5uZXIsXG4gICAgKSB7XG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNRdWVyeUJ1aWxkZXIoY29ubmVjdGlvbk9yUXVlcnlCdWlsZGVyKSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbk9yUXVlcnlCdWlsZGVyLmNvbm5lY3Rpb25cbiAgICAgICAgICAgIHRoaXMucXVlcnlSdW5uZXIgPSBjb25uZWN0aW9uT3JRdWVyeUJ1aWxkZXIucXVlcnlSdW5uZXJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcCA9IGNvbm5lY3Rpb25PclF1ZXJ5QnVpbGRlci5leHByZXNzaW9uTWFwLmNsb25lKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25PclF1ZXJ5QnVpbGRlclxuICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lciA9IHF1ZXJ5UnVubmVyXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAgPSBuZXcgUXVlcnlFeHByZXNzaW9uTWFwKHRoaXMuY29ubmVjdGlvbilcbiAgICAgICAgfVxuICAgIH1cblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogR2V0cyBnZW5lcmF0ZWQgU1FMIHF1ZXJ5IHdpdGhvdXQgcGFyYW1ldGVycyBiZWluZyByZXBsYWNlZC5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBnZXRRdWVyeSgpOiBzdHJpbmdcblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWFpbiBhbGlhcyBzdHJpbmcgdXNlZCBpbiB0aGlzIHF1ZXJ5IGJ1aWxkZXIuXG4gICAgICovXG4gICAgZ2V0IGFsaWFzKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5leHByZXNzaW9uTWFwLm1haW5BbGlhcylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoYE1haW4gYWxpYXMgaXMgbm90IHNldGApIC8vIHRvZG86IGJldHRlciBleGNlcHRpb25cblxuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uTWFwLm1haW5BbGlhcy5uYW1lXG4gICAgfVxuXG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIFNFTEVDVCBxdWVyeS5cbiAgICAgKiBSZXBsYWNlcyBhbGwgcHJldmlvdXMgc2VsZWN0aW9ucyBpZiB0aGV5IGV4aXN0LlxuICAgICAqL1xuICAgIHNlbGVjdCgpOiBTZWxlY3RRdWVyeUJ1aWxkZXI8RW50aXR5PlxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBTRUxFQ1QgcXVlcnkgYW5kIHNlbGVjdHMgZ2l2ZW4gZGF0YS5cbiAgICAgKiBSZXBsYWNlcyBhbGwgcHJldmlvdXMgc2VsZWN0aW9ucyBpZiB0aGV5IGV4aXN0LlxuICAgICAqL1xuICAgIHNlbGVjdChcbiAgICAgICAgc2VsZWN0aW9uOiBzdHJpbmcsXG4gICAgICAgIHNlbGVjdGlvbkFsaWFzTmFtZT86IHN0cmluZyxcbiAgICApOiBTZWxlY3RRdWVyeUJ1aWxkZXI8RW50aXR5PlxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBTRUxFQ1QgcXVlcnkgYW5kIHNlbGVjdHMgZ2l2ZW4gZGF0YS5cbiAgICAgKiBSZXBsYWNlcyBhbGwgcHJldmlvdXMgc2VsZWN0aW9ucyBpZiB0aGV5IGV4aXN0LlxuICAgICAqL1xuICAgIHNlbGVjdChzZWxlY3Rpb246IHN0cmluZ1tdKTogU2VsZWN0UXVlcnlCdWlsZGVyPEVudGl0eT5cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgU0VMRUNUIHF1ZXJ5IGFuZCBzZWxlY3RzIGdpdmVuIGRhdGEuXG4gICAgICogUmVwbGFjZXMgYWxsIHByZXZpb3VzIHNlbGVjdGlvbnMgaWYgdGhleSBleGlzdC5cbiAgICAgKi9cbiAgICBzZWxlY3QoXG4gICAgICAgIHNlbGVjdGlvbj86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBzZWxlY3Rpb25BbGlhc05hbWU/OiBzdHJpbmcsXG4gICAgKTogU2VsZWN0UXVlcnlCdWlsZGVyPEVudGl0eT4ge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAucXVlcnlUeXBlID0gXCJzZWxlY3RcIlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAuc2VsZWN0cyA9IHNlbGVjdGlvbi5tYXAoKHNlbGVjdGlvbikgPT4gKHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnNlbGVjdHMgPSBbXG4gICAgICAgICAgICAgICAgeyBzZWxlY3Rpb246IHNlbGVjdGlvbiwgYWxpYXNOYW1lOiBzZWxlY3Rpb25BbGlhc05hbWUgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgU2VsZWN0UXVlcnlCdWlsZGVyQ2xzID0gQ0xBU1MuZ2V0QnkoJ1NlbGVjdFF1ZXJ5QnVpbGRlcicpIGFzIHR5cGVvZiBTZWxlY3RRdWVyeUJ1aWxkZXI7XG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNTZWxlY3RRdWVyeUJ1aWxkZXIodGhpcykpIHJldHVybiB0aGlzIGFzIGFueVxuXG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVyQ2xzKHRoaXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBJTlNFUlQgcXVlcnkuXG4gICAgICovXG4gICAgaW5zZXJ0KCk6IEluc2VydFF1ZXJ5QnVpbGRlcjxFbnRpdHk+IHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9IFwiaW5zZXJ0XCJcblxuICAgICAgICAvLyBsb2FkaW5nIGl0IGR5bmFtaWNhbGx5IGJlY2F1c2Ugb2YgY2lyY3VsYXIgaXNzdWUgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBJbnNlcnRRdWVyeUJ1aWxkZXJDbHMgPSAgQ0xBU1MuZ2V0QnkoJ0luc2VydFF1ZXJ5QnVpbGRlcicpIGFzIHR5cGVvZiBJbnNlcnRRdWVyeUJ1aWxkZXI7XG5cbiAgICAgICAgaWYgKEluc3RhbmNlQ2hlY2tlci5pc0luc2VydFF1ZXJ5QnVpbGRlcih0aGlzKSkge1xuICAgICAgICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyQ2xzKHRoaXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBVUERBVEUgcXVlcnkgYW5kIGFwcGxpZXMgZ2l2ZW4gdXBkYXRlIHZhbHVlcy5cbiAgICAgKi9cbiAgICB1cGRhdGUoKTogVXBkYXRlUXVlcnlCdWlsZGVyPEVudGl0eT5cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgVVBEQVRFIHF1ZXJ5IGFuZCBhcHBsaWVzIGdpdmVuIHVwZGF0ZSB2YWx1ZXMuXG4gICAgICovXG4gICAgdXBkYXRlKFxuICAgICAgICB1cGRhdGVTZXQ6IFF1ZXJ5RGVlcFBhcnRpYWxFbnRpdHk8RW50aXR5PixcbiAgICApOiBVcGRhdGVRdWVyeUJ1aWxkZXI8RW50aXR5PlxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBVUERBVEUgcXVlcnkgZm9yIHRoZSBnaXZlbiBlbnRpdHkgYW5kIGFwcGxpZXMgZ2l2ZW4gdXBkYXRlIHZhbHVlcy5cbiAgICAgKi9cbiAgICB1cGRhdGU8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eTogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIHVwZGF0ZVNldD86IFF1ZXJ5RGVlcFBhcnRpYWxFbnRpdHk8RW50aXR5PixcbiAgICApOiBVcGRhdGVRdWVyeUJ1aWxkZXI8RW50aXR5PlxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBVUERBVEUgcXVlcnkgZm9yIHRoZSBnaXZlbiB0YWJsZSBuYW1lIGFuZCBhcHBsaWVzIGdpdmVuIHVwZGF0ZSB2YWx1ZXMuXG4gICAgICovXG4gICAgdXBkYXRlKFxuICAgICAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICAgICAgdXBkYXRlU2V0PzogUXVlcnlEZWVwUGFydGlhbEVudGl0eTxFbnRpdHk+LFxuICAgICk6IFVwZGF0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHk+XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIFVQREFURSBxdWVyeSBhbmQgYXBwbGllcyBnaXZlbiB1cGRhdGUgdmFsdWVzLlxuICAgICAqL1xuICAgIHVwZGF0ZShcbiAgICAgICAgZW50aXR5T3JUYWJsZU5hbWVVcGRhdGVTZXQ/OiBFbnRpdHlUYXJnZXQ8YW55PiB8IE9iamVjdExpdGVyYWwsXG4gICAgICAgIG1heWJlVXBkYXRlU2V0PzogT2JqZWN0TGl0ZXJhbCxcbiAgICApOiBVcGRhdGVRdWVyeUJ1aWxkZXI8YW55PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVNldCA9IG1heWJlVXBkYXRlU2V0XG4gICAgICAgICAgICA/IG1heWJlVXBkYXRlU2V0XG4gICAgICAgICAgICA6IChlbnRpdHlPclRhYmxlTmFtZVVwZGF0ZVNldCBhcyBPYmplY3RMaXRlcmFsIHwgdW5kZWZpbmVkKVxuICAgICAgICBlbnRpdHlPclRhYmxlTmFtZVVwZGF0ZVNldCA9IEluc3RhbmNlQ2hlY2tlci5pc0VudGl0eVNjaGVtYShcbiAgICAgICAgICAgIGVudGl0eU9yVGFibGVOYW1lVXBkYXRlU2V0LFxuICAgICAgICApXG4gICAgICAgICAgICA/IGVudGl0eU9yVGFibGVOYW1lVXBkYXRlU2V0Lm9wdGlvbnMubmFtZVxuICAgICAgICAgICAgOiBlbnRpdHlPclRhYmxlTmFtZVVwZGF0ZVNldFxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBlbnRpdHlPclRhYmxlTmFtZVVwZGF0ZVNldCA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICB0eXBlb2YgZW50aXR5T3JUYWJsZU5hbWVVcGRhdGVTZXQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBtYWluQWxpYXMgPSB0aGlzLmNyZWF0ZUZyb21BbGlhcyhlbnRpdHlPclRhYmxlTmFtZVVwZGF0ZVNldClcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5zZXRNYWluQWxpYXMobWFpbkFsaWFzKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9IFwidXBkYXRlXCJcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnZhbHVlc1NldCA9IHVwZGF0ZVNldFxuXG5cbiAgICAgICAgY29uc3QgVXBkYXRlUXVlcnlCdWlsZGVyQ2xzID0gQ0xBU1MuZ2V0QnkoJ1VwZGF0ZVF1ZXJ5QnVpbGRlcicpIGFzIHR5cGVvZiBVcGRhdGVRdWVyeUJ1aWxkZXI7XG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNVcGRhdGVRdWVyeUJ1aWxkZXIodGhpcykpIHJldHVybiB0aGlzIGFzIGFueVxuXG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyQ2xzKHRoaXMpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBERUxFVEUgcXVlcnkuXG4gICAgICovXG4gICAgZGVsZXRlKCk6IERlbGV0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHk+IHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9IFwiZGVsZXRlXCJcblxuXG4gICAgICAgIGNvbnN0IERlbGV0ZVF1ZXJ5QnVpbGRlckNscyA9IENMQVNTLmdldEJ5KCdEZWxldGVRdWVyeUJ1aWxkZXInKSBhcyB0eXBlb2YgRGVsZXRlUXVlcnlCdWlsZGVyO1xuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzRGVsZXRlUXVlcnlCdWlsZGVyKHRoaXMpKSByZXR1cm4gdGhpcyBhcyBhbnlcblxuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlckNscyh0aGlzKVxuICAgIH1cblxuICAgIHNvZnREZWxldGUoKTogU29mdERlbGV0ZVF1ZXJ5QnVpbGRlcjxhbnk+IHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9IFwic29mdC1kZWxldGVcIlxuXG5cbiAgICAgICAgY29uc3QgU29mdERlbGV0ZVF1ZXJ5QnVpbGRlckNscyA9IENMQVNTLmdldEJ5KCdTb2Z0RGVsZXRlUXVlcnlCdWlsZGVyJykgYXMgdHlwZW9mIFNvZnREZWxldGVRdWVyeUJ1aWxkZXI7XG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNTb2Z0RGVsZXRlUXVlcnlCdWlsZGVyKHRoaXMpKSByZXR1cm4gdGhpcyBhcyBhbnlcblxuICAgICAgICByZXR1cm4gbmV3IFNvZnREZWxldGVRdWVyeUJ1aWxkZXJDbHModGhpcylcbiAgICB9XG5cbiAgICByZXN0b3JlKCk6IFNvZnREZWxldGVRdWVyeUJ1aWxkZXI8YW55PiB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5xdWVyeVR5cGUgPSBcInJlc3RvcmVcIlxuXG5cbiAgICAgICAgY29uc3QgU29mdERlbGV0ZVF1ZXJ5QnVpbGRlckNscyA9IENMQVNTLmdldEJ5KCdTb2Z0RGVsZXRlUXVlcnlCdWlsZGVyJykgYXMgdHlwZW9mIFNvZnREZWxldGVRdWVyeUJ1aWxkZXI7XG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNTb2Z0RGVsZXRlUXVlcnlCdWlsZGVyKHRoaXMpKSByZXR1cm4gdGhpcyBhcyBhbnlcblxuICAgICAgICByZXR1cm4gbmV3IFNvZnREZWxldGVRdWVyeUJ1aWxkZXJDbHModGhpcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGVudGl0eSdzIHJlbGF0aW9uIHdpdGggd2hpY2ggdGhpcyBxdWVyeSBidWlsZGVyIGdvbm5hIHdvcmsuXG4gICAgICovXG4gICAgcmVsYXRpb24ocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBSZWxhdGlvblF1ZXJ5QnVpbGRlcjxFbnRpdHk+XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGVudGl0eSdzIHJlbGF0aW9uIHdpdGggd2hpY2ggdGhpcyBxdWVyeSBidWlsZGVyIGdvbm5hIHdvcmsuXG4gICAgICovXG4gICAgcmVsYXRpb248VCBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlUYXJnZXQ6IEVudGl0eVRhcmdldDxUPixcbiAgICAgICAgcHJvcGVydHlQYXRoOiBzdHJpbmcsXG4gICAgKTogUmVsYXRpb25RdWVyeUJ1aWxkZXI8VD5cblxuICAgIC8qKlxuICAgICAqIFNldHMgZW50aXR5J3MgcmVsYXRpb24gd2l0aCB3aGljaCB0aGlzIHF1ZXJ5IGJ1aWxkZXIgZ29ubmEgd29yay5cbiAgICAgKi9cbiAgICByZWxhdGlvbihcbiAgICAgICAgZW50aXR5VGFyZ2V0T3JQcm9wZXJ0eVBhdGg6IEZ1bmN0aW9uIHwgc3RyaW5nLFxuICAgICAgICBtYXliZVByb3BlcnR5UGF0aD86IHN0cmluZyxcbiAgICApOiBSZWxhdGlvblF1ZXJ5QnVpbGRlcjxFbnRpdHk+IHtcbiAgICAgICAgY29uc3QgZW50aXR5VGFyZ2V0ID1cbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBlbnRpdHlUYXJnZXRPclByb3BlcnR5UGF0aCA6IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPVxuICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMlxuICAgICAgICAgICAgICAgID8gKG1heWJlUHJvcGVydHlQYXRoIGFzIHN0cmluZylcbiAgICAgICAgICAgICAgICA6IChlbnRpdHlUYXJnZXRPclByb3BlcnR5UGF0aCBhcyBzdHJpbmcpXG5cbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9IFwicmVsYXRpb25cIlxuICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAucmVsYXRpb25Qcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGhcblxuICAgICAgICBpZiAoZW50aXR5VGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBtYWluQWxpYXMgPSB0aGlzLmNyZWF0ZUZyb21BbGlhcyhlbnRpdHlUYXJnZXQpXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAuc2V0TWFpbkFsaWFzKG1haW5BbGlhcylcbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgUmVsYXRpb25RdWVyeUJ1aWxkZXJDbHMgPSBDTEFTUy5nZXRCeSgnUmVsYXRpb25RdWVyeUJ1aWxkZXInKSBhcyB0eXBlb2YgUmVsYXRpb25RdWVyeUJ1aWxkZXI7XG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNSZWxhdGlvblF1ZXJ5QnVpbGRlcih0aGlzKSkgcmV0dXJuIHRoaXMgYXMgYW55XG5cbiAgICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvblF1ZXJ5QnVpbGRlckNscyh0aGlzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBnaXZlbiByZWxhdGlvbiBleGlzdHMgaW4gdGhlIGVudGl0eS5cbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcmVsYXRpb24gZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiB0b2RvOiBtb3ZlIHRoaXMgbWV0aG9kIHRvIG1hbmFnZXI/IG9yIGNyZWF0ZSBhIHNob3J0Y3V0P1xuICAgICAqL1xuICAgIGhhc1JlbGF0aW9uPFQ+KHRhcmdldDogRW50aXR5VGFyZ2V0PFQ+LCByZWxhdGlvbjogc3RyaW5nKTogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGdpdmVuIHJlbGF0aW9ucyBleGlzdCBpbiB0aGUgZW50aXR5LlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiByZWxhdGlvbiBleGlzdHMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIHRvZG86IG1vdmUgdGhpcyBtZXRob2QgdG8gbWFuYWdlcj8gb3IgY3JlYXRlIGEgc2hvcnRjdXQ/XG4gICAgICovXG4gICAgaGFzUmVsYXRpb248VD4odGFyZ2V0OiBFbnRpdHlUYXJnZXQ8VD4sIHJlbGF0aW9uOiBzdHJpbmdbXSk6IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBnaXZlbiByZWxhdGlvbiBvciByZWxhdGlvbnMgZXhpc3QgaW4gdGhlIGVudGl0eS5cbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgcmVsYXRpb24gZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiB0b2RvOiBtb3ZlIHRoaXMgbWV0aG9kIHRvIG1hbmFnZXI/IG9yIGNyZWF0ZSBhIHNob3J0Y3V0P1xuICAgICAqL1xuICAgIGhhc1JlbGF0aW9uPFQ+KFxuICAgICAgICB0YXJnZXQ6IEVudGl0eVRhcmdldDxUPixcbiAgICAgICAgcmVsYXRpb246IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlbnRpdHlNZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YSh0YXJnZXQpXG4gICAgICAgIGNvbnN0IHJlbGF0aW9ucyA9IEFycmF5LmlzQXJyYXkocmVsYXRpb24pID8gcmVsYXRpb24gOiBbcmVsYXRpb25dXG4gICAgICAgIHJldHVybiByZWxhdGlvbnMuZXZlcnkoKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISFlbnRpdHlNZXRhZGF0YS5maW5kUmVsYXRpb25XaXRoUHJvcGVydHlQYXRoKHJlbGF0aW9uKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBwYXJhbWV0ZXIgZm9yIHRoaXMgcXVlcnkgYnVpbGRlci5cbiAgICAgKi9cbiAgICBoYXNQYXJhbWV0ZXIoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucGFyZW50UXVlcnlCdWlsZGVyPy5oYXNQYXJhbWV0ZXIoa2V5KSB8fFxuICAgICAgICAgICAga2V5IGluIHRoaXMuZXhwcmVzc2lvbk1hcC5wYXJhbWV0ZXJzXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHBhcmFtZXRlciBuYW1lIGFuZCBpdHMgdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGUga2V5IGZvciB0aGlzIHBhcmFtZXRlciBtYXkgY29udGFpbiBudW1iZXJzLCBsZXR0ZXJzLCB1bmRlcnNjb3Jlcywgb3IgcGVyaW9kcy5cbiAgICAgKi9cbiAgICBzZXRQYXJhbWV0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBGdW5jdGlvbiBwYXJhbWV0ZXIgaXNuJ3Qgc3VwcG9ydGVkIGluIHRoZSBwYXJhbWV0ZXJzLiBQbGVhc2UgY2hlY2sgXCIke2tleX1cIiBwYXJhbWV0ZXIuYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5Lm1hdGNoKC9eKFtBLVphLXowLTlfLl0rKSQvKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBcIlF1ZXJ5QnVpbGRlciBwYXJhbWV0ZXIga2V5cyBtYXkgb25seSBjb250YWluIG51bWJlcnMsIGxldHRlcnMsIHVuZGVyc2NvcmVzLCBvciBwZXJpb2RzLlwiLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFyZW50UXVlcnlCdWlsZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudFF1ZXJ5QnVpbGRlci5zZXRQYXJhbWV0ZXIoa2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYWxsIHBhcmFtZXRlcnMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0LlxuICAgICAqL1xuICAgIHNldFBhcmFtZXRlcnMocGFyYW1ldGVyczogT2JqZWN0TGl0ZXJhbCk6IHRoaXMge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXIoa2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVBhcmFtZXRlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHBhcmFtZXRlck5hbWVcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJOYW1lID0gYG9ybV9wYXJhbV8ke3RoaXMucGFyYW1ldGVySW5kZXgrK31gXG4gICAgICAgIH0gd2hpbGUgKHRoaXMuaGFzUGFyYW1ldGVyKHBhcmFtZXRlck5hbWUpKVxuXG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVyKHBhcmFtZXRlck5hbWUsIHZhbHVlKVxuXG4gICAgICAgIHJldHVybiBgOiR7cGFyYW1ldGVyTmFtZX1gXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBuYXRpdmUgcGFyYW1ldGVycyBmcm9tIHRoZSBnaXZlbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNldFBhcmFtZXRlcnNgIGluc3RlYWRcbiAgICAgKi9cbiAgICBzZXROYXRpdmVQYXJhbWV0ZXJzKHBhcmFtZXRlcnM6IE9iamVjdExpdGVyYWwpOiB0aGlzIHtcblxuICAgICAgICBpZiAodGhpcy5wYXJlbnRRdWVyeUJ1aWxkZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50UXVlcnlCdWlsZGVyLnNldE5hdGl2ZVBhcmFtZXRlcnMocGFyYW1ldGVycylcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLm5hdGl2ZVBhcmFtZXRlcnNba2V5XSA9IHBhcmFtZXRlcnNba2V5XVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYWxsIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgZ2V0UGFyYW1ldGVycygpOiBPYmplY3RMaXRlcmFsIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogT2JqZWN0TGl0ZXJhbCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5wYXJhbWV0ZXJzLFxuICAgICAgICApXG5cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzICYmXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzLmhhc01ldGFkYXRhXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzIS5tZXRhZGF0YVxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhLmRpc2NyaW1pbmF0b3JDb2x1bW4gJiYgbWV0YWRhdGEucGFyZW50RW50aXR5TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtZXRhZGF0YS5jaGlsZEVudGl0eU1ldGFkYXRhc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoaWxkTWV0YWRhdGEpID0+IGNoaWxkTWV0YWRhdGEuZGlzY3JpbWluYXRvckNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjaGlsZE1ldGFkYXRhKSA9PiBjaGlsZE1ldGFkYXRhLmRpc2NyaW1pbmF0b3JWYWx1ZSlcbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChtZXRhZGF0YS5kaXNjcmltaW5hdG9yVmFsdWUpXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1tcImRpc2NyaW1pbmF0b3JDb2x1bW5WYWx1ZXNcIl0gPSB2YWx1ZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXJzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJpbnRzIHNxbCB0byBzdGRvdXQgdXNpbmcgY29uc29sZS5sb2cuXG4gICAgICovXG4gICAgcHJpbnRTcWwoKTogdGhpcyB7XG5cbiAgICAgICAgY29uc3QgW3F1ZXJ5LCBwYXJhbWV0ZXJzXSA9IHRoaXMuZ2V0UXVlcnlBbmRQYXJhbWV0ZXJzKClcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmxvZ2dlci5sb2dRdWVyeShxdWVyeSwgcGFyYW1ldGVycylcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGdlbmVyYXRlZCBzcWwgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgICAqIFBhcmFtZXRlcnMgaW4gdGhlIHF1ZXJ5IGFyZSBlc2NhcGVkIGZvciB0aGUgY3VycmVudGx5IHVzZWQgZHJpdmVyLlxuICAgICAqL1xuICAgIGdldFNxbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUFuZFBhcmFtZXRlcnMoKVswXVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgcXVlcnkgdG8gYmUgZXhlY3V0ZWQgd2l0aCBhbGwgcGFyYW1ldGVycyB1c2VkIGluIGl0LlxuICAgICAqL1xuICAgIGdldFF1ZXJ5QW5kUGFyYW1ldGVycygpOiBbc3RyaW5nLCBhbnlbXV0ge1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRRdWVyeSgpXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlcnMoKVxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLmRyaXZlci5lc2NhcGVRdWVyeVdpdGhQYXJhbWV0ZXJzKFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLm5hdGl2ZVBhcmFtZXRlcnMsXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBzcWwgZ2VuZXJhdGVkIGJ5IHF1ZXJ5IGJ1aWxkZXIgYW5kIHJldHVybnMgcmF3IGRhdGFiYXNlIHJlc3VsdHMuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBbc3FsLCBwYXJhbWV0ZXJzXSA9IHRoaXMuZ2V0UXVlcnlBbmRQYXJhbWV0ZXJzKClcbiAgICAgICAgY29uc3QgcXVlcnlSdW5uZXIgPSB0aGlzLm9idGFpblF1ZXJ5UnVubmVyKClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyeVJ1bm5lci5xdWVyeShzcWwsIHBhcmFtZXRlcnMpIC8vIGF3YWl0IGlzIG5lZWRlZCBoZXJlIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGZpbmFsbHlcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChxdWVyeVJ1bm5lciAhPT0gdGhpcy5xdWVyeVJ1bm5lcikge1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29tcGxldGVseSBuZXcgcXVlcnkgYnVpbGRlci5cbiAgICAgKiBVc2VzIHNhbWUgcXVlcnkgcnVubmVyIGFzIGN1cnJlbnQgUXVlcnlCdWlsZGVyLlxuICAgICAqL1xuICAgIGNyZWF0ZVF1ZXJ5QnVpbGRlcigpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyAodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpKHRoaXMuY29ubmVjdGlvbiwgdGhpcy5xdWVyeVJ1bm5lcilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgcXVlcnkgYnVpbGRlciBhcyBpdCBpcy5cbiAgICAgKiBOb3RlOiBpdCB1c2VzIG5ldyBxdWVyeSBydW5uZXIsIGlmIHlvdSB3YW50IHF1ZXJ5IGJ1aWxkZXIgdGhhdCB1c2VzIGV4YWN0bHkgc2FtZSBxdWVyeSBydW5uZXIsXG4gICAgICogeW91IGNhbiBjcmVhdGUgcXVlcnkgYnVpbGRlciB1c2luZyBpdHMgY29uc3RydWN0b3IsIGZvciBleGFtcGxlIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXIocXVlcnlCdWlsZGVyKVxuICAgICAqIHdoZXJlIHF1ZXJ5QnVpbGRlciBpcyBjbG9uZWQgUXVlcnlCdWlsZGVyLlxuICAgICAqL1xuICAgIGNsb25lKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkodGhpcylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmNsdWRlcyBhIFF1ZXJ5IGNvbW1lbnQgaW4gdGhlIHF1ZXJ5IGJ1aWxkZXIuICBUaGlzIGlzIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyxcbiAgICAgKiBzdWNoIGFzIGZpbmRpbmcgYSBzcGVjaWZpYyBxdWVyeSBpbiB0aGUgZGF0YWJhc2Ugc2VydmVyJ3MgbG9ncywgb3IgZm9yIGNhdGVnb3JpemF0aW9uIHVzaW5nXG4gICAgICogYW4gQVBNIHByb2R1Y3QuXG4gICAgICovXG4gICAgY29tbWVudChjb21tZW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLmNvbW1lbnQgPSBjb21tZW50XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgZXNjYXBpbmcuXG4gICAgICovXG4gICAgZGlzYWJsZUVzY2FwaW5nKCk6IHRoaXMge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAuZGlzYWJsZUVzY2FwaW5nID0gZmFsc2VcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFc2NhcGVzIHRhYmxlIG5hbWUsIGNvbHVtbiBuYW1lIG9yIGFsaWFzIG5hbWUgdXNpbmcgY3VycmVudCBkYXRhYmFzZSdzIGVzY2FwaW5nIGNoYXJhY3Rlci5cbiAgICAgKi9cbiAgICBlc2NhcGUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cHJlc3Npb25NYXAuZGlzYWJsZUVzY2FwaW5nKSByZXR1cm4gbmFtZVxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLmRyaXZlci5lc2NhcGUobmFtZSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIG92ZXJyaWRlcyBxdWVyeSBidWlsZGVyJ3MgUXVlcnlSdW5uZXIuXG4gICAgICovXG4gICAgc2V0UXVlcnlSdW5uZXIocXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucXVlcnlSdW5uZXIgPSBxdWVyeVJ1bm5lclxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiBsaXN0ZW5lcnMgYW5kIHN1YnNjcmliZXJzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbmQgYWZ0ZXIgcXVlcnkgZXhlY3V0aW9uLlxuICAgICAqIEVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBjYWxsTGlzdGVuZXJzKGVuYWJsZWQ6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLmNhbGxMaXN0ZW5lcnMgPSBlbmFibGVkXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIHRydWUgdGhlIHF1ZXJ5IHdpbGwgYmUgd3JhcHBlZCBpbnRvIGEgdHJhbnNhY3Rpb24uXG4gICAgICovXG4gICAgdXNlVHJhbnNhY3Rpb24oZW5hYmxlZDogYm9vbGVhbik6IHRoaXMge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAudXNlVHJhbnNhY3Rpb24gPSBlbmFibGVkXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBDVEUgdG8gcXVlcnlcbiAgICAgKi9cbiAgICBhZGRDb21tb25UYWJsZUV4cHJlc3Npb24oXG4gICAgICAgIHF1ZXJ5QnVpbGRlcjogUXVlcnlCdWlsZGVyPGFueT4gfCBzdHJpbmcsXG4gICAgICAgIGFsaWFzOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM/OiBRdWVyeUJ1aWxkZXJDdGVPcHRpb25zLFxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAuY29tbW9uVGFibGVFeHByZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHF1ZXJ5QnVpbGRlcixcbiAgICAgICAgICAgIGFsaWFzLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cblxuXG5cblxuICAgIC8qKlxuICAgICAqIEdldHMgZXNjYXBlZCB0YWJsZSBuYW1lIHdpdGggc2NoZW1hIG5hbWUgaWYgU3FsU2VydmVyIGRyaXZlciB1c2VkIHdpdGggY3VzdG9tXG4gICAgICogc2NoZW1hIG5hbWUsIG90aGVyd2lzZSByZXR1cm5zIGVzY2FwZWQgdGFibGUgbmFtZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0VGFibGVOYW1lKHRhYmxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlUGF0aFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLm1hcCgoaSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IFwiXCIpIHJldHVybiBpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXNjYXBlKGkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIuXCIpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBuYW1lIG9mIHRoZSB0YWJsZSB3aGVyZSBpbnNlcnQgc2hvdWxkIGJlIHBlcmZvcm1lZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0TWFpblRhYmxlTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuZXhwcmVzc2lvbk1hcC5tYWluQWxpYXMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBFbnRpdHkgd2hlcmUgdmFsdWVzIHNob3VsZCBiZSBpbnNlcnRlZCBpcyBub3Qgc3BlY2lmaWVkLiBDYWxsIFwicWIuaW50byhlbnRpdHkpXCIgbWV0aG9kIHRvIHNwZWNpZnkgaXQuYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBpZiAodGhpcy5leHByZXNzaW9uTWFwLm1haW5BbGlhcy5oYXNNZXRhZGF0YSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzLm1ldGFkYXRhLnRhYmxlUGF0aFxuXG4gICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzLnRhYmxlUGF0aCFcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgRlJPTSB3aGljaCBlbnRpdHkncyB0YWJsZSBzZWxlY3QvdXBkYXRlL2RlbGV0ZSB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgICAqIEFsc28gc2V0cyBhIG1haW4gc3RyaW5nIGFsaWFzIG9mIHRoZSBzZWxlY3Rpb24gZGF0YS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlRnJvbUFsaWFzKFxuICAgICAgICBlbnRpdHlUYXJnZXQ6XG4gICAgICAgICAgICB8IEVudGl0eVRhcmdldDxhbnk+XG4gICAgICAgICAgICB8ICgocWI6IFNlbGVjdFF1ZXJ5QnVpbGRlcjxhbnk+KSA9PiBTZWxlY3RRdWVyeUJ1aWxkZXI8YW55PiksXG4gICAgICAgIGFsaWFzTmFtZT86IHN0cmluZyxcbiAgICApOiBBbGlhcyB7XG5cblxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmhhc01ldGFkYXRhKGVudGl0eVRhcmdldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jb25uZWN0aW9uLmdldE1ldGFkYXRhKGVudGl0eVRhcmdldClcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbk1hcC5jcmVhdGVBbGlhcyh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJmcm9tXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEoZW50aXR5VGFyZ2V0KSxcbiAgICAgICAgICAgICAgICB0YWJsZVBhdGg6IG1ldGFkYXRhLnRhYmxlUGF0aCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudGl0eVRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3VicXVlcnkgPVxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUYXJnZXQuc3Vic3RyKDAsIDEpID09PSBcIihcIiAmJlxuICAgICAgICAgICAgICAgICAgICBlbnRpdHlUYXJnZXQuc3Vic3RyKC0xKSA9PT0gXCIpXCJcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25NYXAuY3JlYXRlQWxpYXMoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImZyb21cIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZVBhdGg6ICFpc1N1YnF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IChlbnRpdHlUYXJnZXQgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBpc1N1YnF1ZXJ5ID8gZW50aXR5VGFyZ2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YlF1ZXJ5QnVpbGRlcjogU2VsZWN0UXVlcnlCdWlsZGVyPGFueT4gPSAoXG4gICAgICAgICAgICAgICAgZW50aXR5VGFyZ2V0IGFzIGFueVxuICAgICAgICAgICAgKSgodGhpcyBhcyBhbnkgYXMgU2VsZWN0UXVlcnlCdWlsZGVyPGFueT4pLnN1YlF1ZXJ5KCkpXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcnMoc3ViUXVlcnlCdWlsZGVyLmdldFBhcmFtZXRlcnMoKSlcbiAgICAgICAgICAgIGNvbnN0IHN1YnF1ZXJ5ID0gc3ViUXVlcnlCdWlsZGVyLmdldFF1ZXJ5KClcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbk1hcC5jcmVhdGVBbGlhcyh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJmcm9tXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBzdWJxdWVyeSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlcyBhbGwgZW50aXR5J3MgcHJvcGVydHlOYW1lIHRvIG5hbWUgaW4gdGhlIGdpdmVuIHN0YXRlbWVudC5cbiAgICAgKi9cblxuICAgIHByb3RlY3RlZCByZXBsYWNlUHJvcGVydHlOYW1lcyhzdGF0ZW1lbnQ6IHN0cmluZykge1xuICAgICAgICBmb3IgKGNvbnN0IGFsaWFzIG9mIHRoaXMuZXhwcmVzc2lvbk1hcC5hbGlhc2VzKSB7XG4gICAgICAgICAgICBpZiAoIWFsaWFzLmhhc01ldGFkYXRhKSBjb250aW51ZVxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZUFsaWFzTmFtZVByZWZpeCA9IHRoaXMuZXhwcmVzc2lvbk1hcFxuICAgICAgICAgICAgICAgIC5hbGlhc05hbWVQcmVmaXhpbmdFbmFibGVkXG4gICAgICAgICAgICAgICAgPyBgJHthbGlhcy5uYW1lfS5gXG4gICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudEFsaWFzTmFtZVByZWZpeCA9IHRoaXMuZXhwcmVzc2lvbk1hcFxuICAgICAgICAgICAgICAgIC5hbGlhc05hbWVQcmVmaXhpbmdFbmFibGVkXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLmVzY2FwZShhbGlhcy5uYW1lKX0uYFxuICAgICAgICAgICAgICAgIDogXCJcIlxuXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fVxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIGFsaWFzLm1ldGFkYXRhLnJlbGF0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZWxhdGlvbi5qb2luQ29sdW1ucy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbcmVsYXRpb24ucHJvcGVydHlQYXRoXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvbi5qb2luQ29sdW1uc1swXS5kYXRhYmFzZU5hbWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCByZWxhdGlvbiBvZiBhbGlhcy5tZXRhZGF0YS5yZWxhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGpvaW5Db2x1bW4gb2YgW1xuICAgICAgICAgICAgICAgICAgICAuLi5yZWxhdGlvbi5qb2luQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVsYXRpb24uaW52ZXJzZUpvaW5Db2x1bW5zLFxuICAgICAgICAgICAgICAgIF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlLZXkgPSBgJHtyZWxhdGlvbi5wcm9wZXJ0eVBhdGh9LiR7XG4gICAgICAgICAgICAgICAgICAgICAgICBqb2luQ29sdW1uLnJlZmVyZW5jZWRDb2x1bW4hLnByb3BlcnR5UGF0aFxuICAgICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbcHJvcGVydHlLZXldID0gam9pbkNvbHVtbi5kYXRhYmFzZU5hbWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGFsaWFzLm1ldGFkYXRhLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbY29sdW1uLmRhdGFiYXNlTmFtZV0gPSBjb2x1bW4uZGF0YWJhc2VOYW1lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGFsaWFzLm1ldGFkYXRhLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbY29sdW1uLnByb3BlcnR5TmFtZV0gPSBjb2x1bW4uZGF0YWJhc2VOYW1lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGFsaWFzLm1ldGFkYXRhLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbY29sdW1uLnByb3BlcnR5UGF0aF0gPSBjb2x1bW4uZGF0YWJhc2VOYW1lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoXG5cbiAgICAgICAgICAgICAgICAgICAgYChbID1cXChdfF4uezB9KWAgKyAvLyBhbnkgb2YgJyA9KCcgb3Igc3RhcnQgb2YgbGluZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtlc2NhcGVSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUFsaWFzTmFtZVByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9KFteID1cXChcXClcXCxdKylgICsgLy8gYSBwb3NzaWJsZSBwcm9wZXJ0eSBuYW1lOiBzZXF1ZW5jZSBvZiBhbnl0aGluZyBidXQgJyA9KCksJ1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBgKD89WyA9XFwpXFwsXXwuezB9JClgLFxuICAgICAgICAgICAgICAgICAgICBcImdtXCIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAobWF0Y2gsIHByZSwgcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRzW3BdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7cHJlfSR7cmVwbGFjZW1lbnRBbGlhc05hbWVQcmVmaXh9JHt0aGlzLmVzY2FwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudHNbcF0sXG4gICAgICAgICAgICAgICAgICAgICAgICApfWBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlbWVudFxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVDb21tZW50KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5leHByZXNzaW9uTWFwLmNvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiXG4gICAgICAgIH1cblxuXG5cblxuXG5cbiAgICAgICAgcmV0dXJuIGAvKiAke3RoaXMuZXhwcmVzc2lvbk1hcC5jb21tZW50LnJlcGxhY2UoXCIqL1wiLCBcIlwiKX0gKi8gYFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgXCJXSEVSRVwiIGV4cHJlc3Npb24uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVdoZXJlRXhwcmVzc2lvbigpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uc0FycmF5ID0gW11cblxuICAgICAgICBjb25zdCB3aGVyZUV4cHJlc3Npb24gPSB0aGlzLmNyZWF0ZVdoZXJlQ2xhdXNlc0V4cHJlc3Npb24oXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAud2hlcmVzLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKHdoZXJlRXhwcmVzc2lvbi5sZW5ndGggPiAwICYmIHdoZXJlRXhwcmVzc2lvbiAhPT0gXCIxPTFcIikge1xuICAgICAgICAgICAgY29uZGl0aW9uc0FycmF5LnB1c2godGhpcy5yZXBsYWNlUHJvcGVydHlOYW1lcyh3aGVyZUV4cHJlc3Npb24pKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbk1hcC5tYWluQWxpYXMhLmhhc01ldGFkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXhwcmVzc2lvbk1hcC5tYWluQWxpYXMhLm1ldGFkYXRhXG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAucXVlcnlUeXBlID09PSBcInNlbGVjdFwiICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuZXhwcmVzc2lvbk1hcC53aXRoRGVsZXRlZCAmJlxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmRlbGV0ZURhdGVDb2x1bW5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZXhwcmVzc2lvbk1hcC5hbGlhc05hbWVQcmVmaXhpbmdFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5leHByZXNzaW9uTWFwLm1haW5BbGlhcyEubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgXCIuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmRlbGV0ZURhdGVDb2x1bW4ucHJvcGVydHlOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogbWV0YWRhdGEuZGVsZXRlRGF0ZUNvbHVtbi5wcm9wZXJ0eU5hbWVcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IGAke3RoaXMucmVwbGFjZVByb3BlcnR5TmFtZXMoY29sdW1uKX0gSVMgTlVMTGBcbiAgICAgICAgICAgICAgICBjb25kaXRpb25zQXJyYXkucHVzaChjb25kaXRpb24pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5kaXNjcmltaW5hdG9yQ29sdW1uICYmIG1ldGFkYXRhLnBhcmVudEVudGl0eU1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5leHByZXNzaW9uTWFwLmFsaWFzTmFtZVByZWZpeGluZ0VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzIS5uYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICBcIi5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEuZGlzY3JpbWluYXRvckNvbHVtbi5kYXRhYmFzZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiBtZXRhZGF0YS5kaXNjcmltaW5hdG9yQ29sdW1uLmRhdGFiYXNlTmFtZVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7dGhpcy5yZXBsYWNlUHJvcGVydHlOYW1lcyhcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICAgICl9IElOICg6Li4uZGlzY3JpbWluYXRvckNvbHVtblZhbHVlcylgXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uc0FycmF5LnB1c2goY29uZGl0aW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbk1hcC5leHRyYUFwcGVuZGVkQW5kV2hlcmVDb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMucmVwbGFjZVByb3BlcnR5TmFtZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLmV4dHJhQXBwZW5kZWRBbmRXaGVyZUNvbmRpdGlvbixcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbmRpdGlvbnNBcnJheS5wdXNoKGNvbmRpdGlvbilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZGl0aW9uc0FycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25zQXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYCBXSEVSRSAke2NvbmRpdGlvbnNBcnJheVswXX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYCBXSEVSRSAoICR7Y29uZGl0aW9uc0FycmF5LmpvaW4oXCIgKSBBTkQgKCBcIil9IClgXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIFwiUkVUVVJOSU5HXCIgLyBcIk9VVFBVVFwiIGV4cHJlc3Npb24uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVJldHVybmluZ0V4cHJlc3Npb24ocmV0dXJuaW5nVHlwZTogUmV0dXJuaW5nVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldFJldHVybmluZ0NvbHVtbnMoKVxuICAgICAgICBjb25zdCBkcml2ZXIgPSB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyXG5cblxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmV4cHJlc3Npb25NYXAucmV0dXJuaW5nICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAuZXh0cmFSZXR1cm5pbmdDb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGRyaXZlci5pc1JldHVybmluZ1NxbFN1cHBvcnRlZChyZXR1cm5pbmdUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChcbiAgICAgICAgICAgICAgICAuLi50aGlzLmV4cHJlc3Npb25NYXAuZXh0cmFSZXR1cm5pbmdDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmluZGV4T2YoY29sdW1uKSA9PT0gLTFcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGNvbHVtbnNFeHByZXNzaW9uID0gY29sdW1uc1xuICAgICAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5lc2NhcGUoY29sdW1uLmRhdGFiYXNlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwibXNzcWxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5xdWVyeVR5cGUgPT09IFwiaW5zZXJ0XCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAucXVlcnlUeXBlID09PSBcInVwZGF0ZVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9PT0gXCJzb2Z0LWRlbGV0ZVwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnF1ZXJ5VHlwZSA9PT0gXCJyZXN0b3JlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIklOU0VSVEVELlwiICsgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVzY2FwZSh0aGlzLmdldE1haW5UYWJsZU5hbWUoKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5cbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zRXhwcmVzc2lvblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmV4cHJlc3Npb25NYXAucmV0dXJuaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uTWFwLnJldHVybmluZ1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiByZXR1cm5pbmcgLyBvdXRwdXQgY2F1c2UgaXMgc2V0IHRvIGFycmF5IG9mIGNvbHVtbiBuYW1lcyxcbiAgICAgKiB0aGVuIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGFsbCBjb2x1bW4gbWV0YWRhdGFzIG9mIHRob3NlIGNvbHVtbiBuYW1lcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0UmV0dXJuaW5nQ29sdW1ucygpOiBDb2x1bW5NZXRhZGF0YVtdIHtcbiAgICAgICAgY29uc3QgY29sdW1uczogQ29sdW1uTWV0YWRhdGFbXSA9IFtdXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZXhwcmVzc2lvbk1hcC5yZXR1cm5pbmcpKSB7XG4gICAgICAgICAgICA7KHRoaXMuZXhwcmVzc2lvbk1hcC5yZXR1cm5pbmcgYXMgc3RyaW5nW10pLmZvckVhY2goXG4gICAgICAgICAgICAgICAgKGNvbHVtbk5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbk1hcC5tYWluQWxpYXMhLmhhc01ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5leHByZXNzaW9uTWFwLm1haW5BbGlhcyEubWV0YWRhdGEuZmluZENvbHVtbnNXaXRoUHJvcGVydHlQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW5zXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVdoZXJlQ2xhdXNlc0V4cHJlc3Npb24oY2xhdXNlczogV2hlcmVDbGF1c2VbXSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBjbGF1c2VzXG4gICAgICAgICAgICAubWFwKChjbGF1c2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuY3JlYXRlV2hlcmVDb25kaXRpb25FeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBjbGF1c2UuY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY2xhdXNlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImFuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbmRleCA+IDAgPyBcIkFORCBcIiA6IFwiXCIpICsgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwib3JcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW5kZXggPiAwID8gXCJPUiBcIiA6IFwiXCIpICsgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBleHByZXNzaW9uXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgXCIpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgZ2l2ZW4gd2hlcmUgYXJndW1lbnQgLSB0cmFuc2Zvcm1zIHRvIGEgd2hlcmUgc3RyaW5nIGFsbCBmb3JtcyBpdCBjYW4gdGFrZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlV2hlcmVDb25kaXRpb25FeHByZXNzaW9uKFxuICAgICAgICBjb25kaXRpb246IFdoZXJlQ2xhdXNlQ29uZGl0aW9uLFxuICAgICAgICBhbHdheXNXcmFwOiBib29sZWFuID0gZmFsc2UsXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24gPT09IFwic3RyaW5nXCIpIHJldHVybiBjb25kaXRpb25cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25kaXRpb24pKSB7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIjE9MVwiXG4gICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uLmxlbmd0aCA9PT0gMSAmJiAhYWx3YXlzV3JhcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdoZXJlQ2xhdXNlc0V4cHJlc3Npb24oY29uZGl0aW9uKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gXCIoXCIgKyB0aGlzLmNyZWF0ZVdoZXJlQ2xhdXNlc0V4cHJlc3Npb24oY29uZGl0aW9uKSArIFwiKVwiXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRyaXZlciB9ID0gdGhpcy5jb25uZWN0aW9uXG5cbiAgICAgICAgc3dpdGNoIChjb25kaXRpb24ub3BlcmF0b3IpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsZXNzVGhhblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24ucGFyYW1ldGVyc1swXX0gPCAke2NvbmRpdGlvbi5wYXJhbWV0ZXJzWzFdfWBcbiAgICAgICAgICAgIGNhc2UgXCJsZXNzVGhhbk9yRXF1YWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19IDw9ICR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMV19YFxuICAgICAgICAgICAgY2FzZSBcImFycmF5Q29udGFpbnNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19IEA+ICR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMV19YFxuICAgICAgICAgICAgY2FzZSBcImFycmF5Q29udGFpbmVkQnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19IDxAICR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMV19YFxuICAgICAgICAgICAgY2FzZSBcImFycmF5T3ZlcmxhcFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24ucGFyYW1ldGVyc1swXX0gJiYgJHtjb25kaXRpb24ucGFyYW1ldGVyc1sxXX1gXG4gICAgICAgICAgICBjYXNlIFwibW9yZVRoYW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19ID4gJHtjb25kaXRpb24ucGFyYW1ldGVyc1sxXX1gXG4gICAgICAgICAgICBjYXNlIFwibW9yZVRoYW5PckVxdWFsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbmRpdGlvbi5wYXJhbWV0ZXJzWzBdfSA+PSAke2NvbmRpdGlvbi5wYXJhbWV0ZXJzWzFdfWBcbiAgICAgICAgICAgIGNhc2UgXCJub3RFcXVhbFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24ucGFyYW1ldGVyc1swXX0gIT0gJHtjb25kaXRpb24ucGFyYW1ldGVyc1sxXX1gXG4gICAgICAgICAgICBjYXNlIFwiZXF1YWxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19ID0gJHtjb25kaXRpb24ucGFyYW1ldGVyc1sxXX1gXG4gICAgICAgICAgICBjYXNlIFwiaWxpa2VcIjpcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRyaXZlci5vcHRpb25zLnR5cGUgPT09IFwicG9zdGdyZXNcIiB8fFxuICAgICAgICAgICAgICAgICAgICBkcml2ZXIub3B0aW9ucy50eXBlID09PSBcImNvY2tyb2FjaGRiXCJcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbmRpdGlvbi5wYXJhbWV0ZXJzWzBdfSBJTElLRSAke2NvbmRpdGlvbi5wYXJhbWV0ZXJzWzFdfWBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYFVQUEVSKCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19KSBMSUtFIFVQUEVSKCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMV19KWBcbiAgICAgICAgICAgIGNhc2UgXCJsaWtlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NvbmRpdGlvbi5wYXJhbWV0ZXJzWzBdfSBMSUtFICR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMV19YFxuICAgICAgICAgICAgY2FzZSBcImJldHdlZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19IEJFVFdFRU4gJHtjb25kaXRpb24ucGFyYW1ldGVyc1sxXX0gQU5EICR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMl19YFxuICAgICAgICAgICAgY2FzZSBcImluXCI6XG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIjA9MVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24ucGFyYW1ldGVyc1swXX0gSU4gKCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9KWBcbiAgICAgICAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19ID0gQU5ZKCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMV19KWBcbiAgICAgICAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y29uZGl0aW9uLnBhcmFtZXRlcnNbMF19IElTIE5VTExgXG5cbiAgICAgICAgICAgIGNhc2UgXCJub3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5PVCgke3RoaXMuY3JlYXRlV2hlcmVDb25kaXRpb25FeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24uY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICl9KWBcbiAgICAgICAgICAgIGNhc2UgXCJicmFja2V0c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNyZWF0ZVdoZXJlQ29uZGl0aW9uRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLmNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICApfWBcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgICBgVW5zdXBwb3J0ZWQgRmluZE9wZXJhdG9yICR7RmluZE9wZXJhdG9yLmNvbnN0cnVjdG9yLm5hbWV9YCxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVDdGVFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5oYXNDb21tb25UYWJsZUV4cHJlc3Npb25zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YWJhc2VSZXF1aXJlUmVjdXNpdmVIaW50ID1cbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIuY3RlQ2FwYWJpbGl0aWVzLnJlcXVpcmVzUmVjdXJzaXZlSGludFxuXG4gICAgICAgIGNvbnN0IGN0ZVN0cmluZ3MgPSB0aGlzLmV4cHJlc3Npb25NYXAuY29tbW9uVGFibGVFeHByZXNzaW9ucy5tYXAoXG4gICAgICAgICAgICAoY3RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3RlQm9keUV4cHJlc3Npb24gPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3RlLnF1ZXJ5QnVpbGRlciA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjdGUucXVlcnlCdWlsZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGN0ZS5xdWVyeUJ1aWxkZXIuZ2V0UXVlcnkoKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3RlLnF1ZXJ5QnVpbGRlciAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3RlLnF1ZXJ5QnVpbGRlci5oYXNDb21tb25UYWJsZUV4cHJlc3Npb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYE5lc3RlZCBDVEVzIGFyZW4ndCBzdXBwb3J0ZWQgKENURTogJHtjdGUuYWxpYXN9KWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY29ubmVjdGlvbi5kcml2ZXIuY3RlQ2FwYWJpbGl0aWVzLndyaXRhYmxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhSW5zdGFuY2VDaGVja2VyLmlzU2VsZWN0UXVlcnlCdWlsZGVyKGN0ZS5xdWVyeUJ1aWxkZXIpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgT25seSBzZWxlY3QgcXVlcmllcyBhcmUgc3VwcG9ydGVkIGluIENURXMgaW4gJHt0aGlzLmNvbm5lY3Rpb24ub3B0aW9ucy50eXBlfSAoQ1RFOiAke2N0ZS5hbGlhc30pYCxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmFtZXRlcnMoY3RlLnF1ZXJ5QnVpbGRlci5nZXRQYXJhbWV0ZXJzKCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjdGVIZWFkZXIgPSB0aGlzLmVzY2FwZShjdGUuYWxpYXMpXG4gICAgICAgICAgICAgICAgaWYgKGN0ZS5vcHRpb25zLmNvbHVtbk5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVzY2FwZWRDb2x1bW5OYW1lcyA9IGN0ZS5vcHRpb25zLmNvbHVtbk5hbWVzLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb2x1bW4pID0+IHRoaXMuZXNjYXBlKGNvbHVtbiksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFuY2VDaGVja2VyLmlzU2VsZWN0UXVlcnlCdWlsZGVyKGN0ZS5xdWVyeUJ1aWxkZXIpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZS5xdWVyeUJ1aWxkZXIuZXhwcmVzc2lvbk1hcC5zZWxlY3RzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZS5vcHRpb25zLmNvbHVtbk5hbWVzLmxlbmd0aCAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RlLnF1ZXJ5QnVpbGRlci5leHByZXNzaW9uTWFwLnNlbGVjdHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY3RlLm9wdGlvbnMuY29sdW1uTmFtZXMgbGVuZ3RoICgke2N0ZS5vcHRpb25zLmNvbHVtbk5hbWVzLmxlbmd0aH0pIGRvZXNuJ3QgbWF0Y2ggc3VicXVlcnkgc2VsZWN0IGxpc3QgbGVuZ3RoICR7Y3RlLnF1ZXJ5QnVpbGRlci5leHByZXNzaW9uTWFwLnNlbGVjdHMubGVuZ3RofSAoQ1RFOiAke2N0ZS5hbGlhc30pYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3RlSGVhZGVyICs9IGAoJHtlc2NhcGVkQ29sdW1uTmFtZXMuam9pbihcIiwgXCIpfSlgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3Vyc2l2ZUNsYXVzZSA9XG4gICAgICAgICAgICAgICAgICAgIGN0ZS5vcHRpb25zLnJlY3Vyc2l2ZSAmJiBkYXRhYmFzZVJlcXVpcmVSZWN1c2l2ZUhpbnRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gXCJSRUNVUlNJVkVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWxpemVDbGF1c2UgPVxuICAgICAgICAgICAgICAgICAgICBjdGUub3B0aW9ucy5tYXRlcmlhbGl6ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRyaXZlci5jdGVDYXBhYmlsaXRpZXMubWF0ZXJpYWxpemVkSGludFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIk1BVEVSSUFMSVpFRFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcblxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZUNsYXVzZSxcbiAgICAgICAgICAgICAgICAgICAgY3RlSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZUNsYXVzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJBU1wiLFxuICAgICAgICAgICAgICAgICAgICBgKCR7Y3RlQm9keUV4cHJlc3Npb259KWAsXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiBcIldJVEggXCIgKyBjdGVTdHJpbmdzLmpvaW4oXCIsIFwiKSArIFwiIFwiXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBcIldIRVJFXCIgY29uZGl0aW9uIGZvciBhbiBpbi1pZHMgY29uZGl0aW9uLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRXaGVyZUluSWRzQ29uZGl0aW9uKFxuICAgICAgICBpZHM6IGFueSB8IGFueVtdLFxuICAgICk6IE9iamVjdExpdGVyYWwgfCBCcmFja2V0cyB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5leHByZXNzaW9uTWFwLm1haW5BbGlhcyEubWV0YWRhdGFcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IChBcnJheS5pc0FycmF5KGlkcykgPyBpZHMgOiBbaWRzXSkubWFwKChpZCkgPT5cbiAgICAgICAgICAgIG1ldGFkYXRhLmVuc3VyZUVudGl0eUlkTWFwKGlkKSxcbiAgICAgICAgKVxuXG5cbiAgICAgICAgaWYgKCFtZXRhZGF0YS5oYXNNdWx0aXBsZVByaW1hcnlLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmltYXJ5Q29sdW1uID0gbWV0YWRhdGEucHJpbWFyeUNvbHVtbnNbMF1cblxuXG5cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFwcmltYXJ5Q29sdW1uLnRyYW5zZm9ybWVyICYmXG4gICAgICAgICAgICAgICAgIXByaW1hcnlDb2x1bW4ucmVsYXRpb25NZXRhZGF0YSAmJlxuICAgICAgICAgICAgICAgICFwcmltYXJ5Q29sdW1uLmVtYmVkZGVkTWV0YWRhdGFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtwcmltYXJ5Q29sdW1uLnByb3BlcnR5TmFtZV06IEluKFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZC5tYXAoKGlkKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlDb2x1bW4uZ2V0RW50aXR5VmFsdWUoaWQsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBCcmFja2V0cygocWIpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBub3JtYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgcWIub3JXaGVyZShuZXcgQnJhY2tldHMoKHFiKSA9PiBxYi53aGVyZShkYXRhKSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ29sdW1uc0ZvclByb3BlcnR5UGF0aChcbiAgICAgICAgcHJvcGVydHlQYXRoOiBzdHJpbmcsXG4gICAgKTogW0FsaWFzLCBzdHJpbmdbXSwgQ29sdW1uTWV0YWRhdGFbXV0ge1xuXG5cblxuXG4gICAgICAgIGxldCBhbGlhcyA9IHRoaXMuZXhwcmVzc2lvbk1hcC5tYWluQWxpYXNcbiAgICAgICAgY29uc3Qgcm9vdDogc3RyaW5nW10gPSBbXVxuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGhQYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi5cIilcblxuICAgICAgICB3aGlsZSAocHJvcGVydHlQYXRoUGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHByb3BlcnR5UGF0aFBhcnRzWzBdXG5cbiAgICAgICAgICAgIGlmICghYWxpYXM/Lmhhc01ldGFkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbGlhcy5tZXRhZGF0YS5oYXNFbWJlZGRlZFdpdGhQcm9wZXJ0eVBhdGgocGFydCkpIHtcblxuXG5cbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVBhdGhQYXJ0cy51bnNoaWZ0KFxuICAgICAgICAgICAgICAgICAgICBgJHtwcm9wZXJ0eVBhdGhQYXJ0cy5zaGlmdCgpfS4ke3Byb3BlcnR5UGF0aFBhcnRzLnNoaWZ0KCl9YCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFsaWFzLm1ldGFkYXRhLmhhc1JlbGF0aW9uV2l0aFByb3BlcnR5UGF0aChwYXJ0KSkge1xuXG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvaW5BdHRyID0gdGhpcy5leHByZXNzaW9uTWFwLmpvaW5BdHRyaWJ1dGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChqb2luQXR0cikgPT4gam9pbkF0dHIucmVsYXRpb25Qcm9wZXJ0eVBhdGggPT09IHBhcnQsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgaWYgKCFqb2luQXR0cj8uYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVsbFJlbGF0aW9uUGF0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICByb290Lmxlbmd0aCA+IDAgPyBgJHtyb290LmpvaW4oXCIuXCIpfS4ke3BhcnR9YCA6IHBhcnRcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgYENhbm5vdCBmaW5kIGFsaWFzIGZvciByZWxhdGlvbiBhdCAke2Z1bGxSZWxhdGlvblBhdGh9YCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFsaWFzID0gam9pbkF0dHIuYWxpYXNcbiAgICAgICAgICAgICAgICByb290LnB1c2goLi4ucGFydC5zcGxpdChcIi5cIikpXG4gICAgICAgICAgICAgICAgcHJvcGVydHlQYXRoUGFydHMuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFsaWFzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGFsaWFzIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5UGF0aH1gKVxuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBhbGlhc1Byb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aFBhcnRzLmpvaW4oXCIuXCIpXG5cbiAgICAgICAgY29uc3QgY29sdW1ucyA9XG4gICAgICAgICAgICBhbGlhcy5tZXRhZGF0YS5maW5kQ29sdW1uc1dpdGhQcm9wZXJ0eVBhdGgoYWxpYXNQcm9wZXJ0eVBhdGgpXG5cbiAgICAgICAgaWYgKCFjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVudGl0eVByb3BlcnR5Tm90Rm91bmRFcnJvcihwcm9wZXJ0eVBhdGgsIGFsaWFzLm1ldGFkYXRhKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFthbGlhcywgcm9vdCwgY29sdW1uc11cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcHJvcGVydHkgcGF0aHMgZm9yIGEgZ2l2ZW4gT2JqZWN0TGl0ZXJhbC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlUHJvcGVydHlQYXRoKFxuICAgICAgICBtZXRhZGF0YTogRW50aXR5TWV0YWRhdGEsXG4gICAgICAgIGVudGl0eTogT2JqZWN0TGl0ZXJhbCxcbiAgICAgICAgcHJlZml4OiBzdHJpbmcgPSBcIlwiLFxuICAgICkge1xuICAgICAgICBjb25zdCBwYXRoczogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVudGl0eSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBwcmVmaXggPyBgJHtwcmVmaXh9LiR7a2V5fWAgOiBrZXlcblxuXG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbnRpdHlba2V5XSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiBlbnRpdHlba2V5XSAhPT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgICAgIEluc3RhbmNlQ2hlY2tlci5pc0ZpbmRPcGVyYXRvcihlbnRpdHlba2V5XSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocGF0aClcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWV0YWRhdGEuaGFzRW1iZWRkZWRXaXRoUHJvcGVydHlQYXRoKHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViUGF0aHMgPSB0aGlzLmNyZWF0ZVByb3BlcnR5UGF0aChcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eVtrZXldLFxuICAgICAgICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBwYXRocy5wdXNoKC4uLnN1YlBhdGhzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5oYXNSZWxhdGlvbldpdGhQcm9wZXJ0eVBhdGgocGF0aCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbiA9IG1ldGFkYXRhLmZpbmRSZWxhdGlvbldpdGhQcm9wZXJ0eVBhdGgocGF0aCkhXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBcIm9uZS10by1vbmVcIiB8fFxuICAgICAgICAgICAgICAgICAgICByZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFwibWFueS10by1vbmVcIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqb2luQ29sdW1ucyA9IHJlbGF0aW9uLmpvaW5Db2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChqKSA9PiBqLnJlZmVyZW5jZWRDb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChqKTogaiBpcyBDb2x1bW5NZXRhZGF0YSA9PiAhIWopXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzQWxsSm9pbkNvbHVtbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgam9pbkNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgam9pbkNvbHVtbnMuZXZlcnkoKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZ2V0RW50aXR5VmFsdWUoZW50aXR5W2tleV0sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQWxsSm9pbkNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gXCJvbmUtdG8tbWFueVwiIHx8XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gXCJtYW55LXRvLW1hbnlcIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgQ2Fubm90IHF1ZXJ5IGFjcm9zcyAke3JlbGF0aW9uLnJlbGF0aW9uVHlwZX0gZm9yIHByb3BlcnR5ICR7cGF0aH1gLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuXG5cblxuXG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IHByaW1hcnlDb2x1bW5zID1cbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb24uaW52ZXJzZUVudGl0eU1ldGFkYXRhLnByaW1hcnlDb2x1bW5zXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzQWxsUHJpbWFyeUtleXMgPVxuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5Q29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnlDb2x1bW5zLmV2ZXJ5KChjb2x1bW4pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZ2V0RW50aXR5VmFsdWUoZW50aXR5W2tleV0sIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0FsbFByaW1hcnlLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlBhdGhzID0gcHJpbWFyeUNvbHVtbnMubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbHVtbikgPT4gYCR7cGF0aH0uJHtjb2x1bW4ucHJvcGVydHlQYXRofWAsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaCguLi5zdWJQYXRocylcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlBhdGhzID0gdGhpcy5jcmVhdGVQcm9wZXJ0eVBhdGgoXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uLmludmVyc2VFbnRpdHlNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5W2tleV0sXG4gICAgICAgICAgICAgICAgKS5tYXAoKHApID0+IGAke3BhdGh9LiR7cH1gKVxuICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goLi4uc3ViUGF0aHMpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGhzXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkICpnZXRQcmVkaWNhdGVzKHdoZXJlOiBPYmplY3RMaXRlcmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzIS5oYXNNZXRhZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlQYXRocyA9IHRoaXMuY3JlYXRlUHJvcGVydHlQYXRoKFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5tYWluQWxpYXMhLm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5UGF0aCBvZiBwcm9wZXJ0eVBhdGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2FsaWFzLCBhbGlhc1Byb3BlcnR5UGF0aCwgY29sdW1uc10gPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb2x1bW5zRm9yUHJvcGVydHlQYXRoKHByb3BlcnR5UGF0aClcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lZFdoZXJlID0gd2hlcmVcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYWxpYXNQcm9wZXJ0eVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGFpbmVkV2hlcmUgfHwgIShwYXJ0IGluIGNvbnRhaW5lZFdoZXJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZFdoZXJlID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWRXaGVyZSA9IGNvbnRhaW5lZFdoZXJlW3BhcnRdXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsaWFzUGF0aCA9IHRoaXMuZXhwcmVzc2lvbk1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgLmFsaWFzTmFtZVByZWZpeGluZ0VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7YWxpYXMubmFtZX0uJHtjb2x1bW4ucHJvcGVydHlQYXRofWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLnByb3BlcnR5UGF0aFxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gY29sdW1uLmdldEVudGl0eVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkV2hlcmUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgeWllbGQgW2FsaWFzUGF0aCwgcGFyYW1ldGVyVmFsdWVdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVyVmFsdWUgPSB3aGVyZVtrZXldXG4gICAgICAgICAgICAgICAgY29uc3QgYWxpYXNQYXRoID0gdGhpcy5leHByZXNzaW9uTWFwLmFsaWFzTmFtZVByZWZpeGluZ0VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLmFsaWFzfS4ke2tleX1gXG4gICAgICAgICAgICAgICAgICAgIDoga2V5XG5cbiAgICAgICAgICAgICAgICB5aWVsZCBbYWxpYXNQYXRoLCBwYXJhbWV0ZXJWYWx1ZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRXaGVyZVByZWRpY2F0ZUNvbmRpdGlvbihcbiAgICAgICAgYWxpYXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIHBhcmFtZXRlclZhbHVlOiBhbnksXG4gICAgKTogV2hlcmVDbGF1c2VDb25kaXRpb24ge1xuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzRmluZE9wZXJhdG9yKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IHBhcmFtZXRlcnM6IGFueVtdID0gW11cbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS51c2VQYXJhbWV0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUub2JqZWN0TGl0ZXJhbFBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlclZhbHVlLm9iamVjdExpdGVyYWxQYXJhbWV0ZXJzKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyVmFsdWUubXVsdGlwbGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHRoaXMuY3JlYXRlUGFyYW1ldGVyKHYpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHRoaXMuY3JlYXRlUGFyYW1ldGVyKHBhcmFtZXRlclZhbHVlLnZhbHVlKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS50eXBlID09PSBcInJhd1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmdldFNxbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyVmFsdWUuZ2V0U3FsKGFsaWFzUGF0aClcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwiZXF1YWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IFthbGlhc1BhdGgsIHBhcmFtZXRlclZhbHVlLnZhbHVlXSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gXCJub3RcIikge1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5jaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHBhcmFtZXRlclZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IHRoaXMuZ2V0V2hlcmVQcmVkaWNhdGVDb25kaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJub3RFcXVhbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogW2FsaWFzUGF0aCwgLi4ucGFyYW1ldGVyc10sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBwYXJhbWV0ZXJWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbYWxpYXNQYXRoLCAuLi5wYXJhbWV0ZXJzXSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuXG5cblxuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IFwiZXF1YWxcIixcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbYWxpYXNQYXRoLCB0aGlzLmNyZWF0ZVBhcmFtZXRlcihwYXJhbWV0ZXJWYWx1ZSldLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFdoZXJlQ29uZGl0aW9uKFxuICAgICAgICB3aGVyZTpcbiAgICAgICAgICAgIHwgc3RyaW5nXG4gICAgICAgICAgICB8ICgocWI6IHRoaXMpID0+IHN0cmluZylcbiAgICAgICAgICAgIHwgQnJhY2tldHNcbiAgICAgICAgICAgIHwgTm90QnJhY2tldHNcbiAgICAgICAgICAgIHwgT2JqZWN0TGl0ZXJhbFxuICAgICAgICAgICAgfCBPYmplY3RMaXRlcmFsW10sXG4gICAgKTogV2hlcmVDbGF1c2VDb25kaXRpb24ge1xuICAgICAgICBpZiAodHlwZW9mIHdoZXJlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChJbnN0YW5jZUNoZWNrZXIuaXNCcmFja2V0cyh3aGVyZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlUXVlcnlCdWlsZGVyID0gdGhpcy5jcmVhdGVRdWVyeUJ1aWxkZXIoKVxuXG4gICAgICAgICAgICB3aGVyZVF1ZXJ5QnVpbGRlci5wYXJlbnRRdWVyeUJ1aWxkZXIgPSB0aGlzXG5cbiAgICAgICAgICAgIHdoZXJlUXVlcnlCdWlsZGVyLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzID1cbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25NYXAubWFpbkFsaWFzXG4gICAgICAgICAgICB3aGVyZVF1ZXJ5QnVpbGRlci5leHByZXNzaW9uTWFwLmFsaWFzTmFtZVByZWZpeGluZ0VuYWJsZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5hbGlhc05hbWVQcmVmaXhpbmdFbmFibGVkXG4gICAgICAgICAgICB3aGVyZVF1ZXJ5QnVpbGRlci5leHByZXNzaW9uTWFwLnBhcmFtZXRlcnMgPVxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5wYXJhbWV0ZXJzXG4gICAgICAgICAgICB3aGVyZVF1ZXJ5QnVpbGRlci5leHByZXNzaW9uTWFwLm5hdGl2ZVBhcmFtZXRlcnMgPVxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbk1hcC5uYXRpdmVQYXJhbWV0ZXJzXG5cbiAgICAgICAgICAgIHdoZXJlUXVlcnlCdWlsZGVyLmV4cHJlc3Npb25NYXAud2hlcmVzID0gW11cblxuICAgICAgICAgICAgd2hlcmUud2hlcmVGYWN0b3J5KHdoZXJlUXVlcnlCdWlsZGVyIGFzIGFueSlcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogSW5zdGFuY2VDaGVja2VyLmlzTm90QnJhY2tldHMod2hlcmUpXG4gICAgICAgICAgICAgICAgICAgID8gXCJub3RcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiYnJhY2tldHNcIixcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IHdoZXJlUXVlcnlCdWlsZGVyLmV4cHJlc3Npb25NYXAud2hlcmVzLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aGVyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmUodGhpcylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlczogT2JqZWN0TGl0ZXJhbFtdID0gQXJyYXkuaXNBcnJheSh3aGVyZSkgPyB3aGVyZSA6IFt3aGVyZV1cbiAgICAgICAgY29uc3QgY2xhdXNlczogV2hlcmVDbGF1c2VbXSA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB3aGVyZSBvZiB3aGVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnM6IFdoZXJlQ2xhdXNlQ29uZGl0aW9uID0gW11cblxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFthbGlhc1BhdGgsIHBhcmFtZXRlclZhbHVlXSBvZiB0aGlzLmdldFByZWRpY2F0ZXMoXG4gICAgICAgICAgICAgICAgd2hlcmUsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhbmRcIixcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLmdldFdoZXJlUHJlZGljYXRlQ29uZGl0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xhdXNlcy5wdXNoKHsgdHlwZTogXCJvclwiLCBjb25kaXRpb246IGNvbmRpdGlvbnMgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGF1c2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsYXVzZXNbMF0uY29uZGl0aW9uXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xhdXNlc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBxdWVyeSBidWlsZGVyIHVzZWQgdG8gZXhlY3V0ZSBzcWwgcXVlcmllcyBpbnNpZGUgdGhpcyBxdWVyeSBidWlsZGVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvYnRhaW5RdWVyeVJ1bm5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnlSdW5uZXIgfHwgdGhpcy5jb25uZWN0aW9uLmNyZWF0ZVF1ZXJ5UnVubmVyKClcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFzQ29tbW9uVGFibGVFeHByZXNzaW9ucygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbk1hcC5jb21tb25UYWJsZUV4cHJlc3Npb25zLmxlbmd0aCA+IDBcbiAgICB9XG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uLXR5cGVvcm0gbGliL3R5cGVvcm0vcXVlcnktYnVpbGRlci9RdWVyeUJ1aWxkZXIudHMiXX0=
|