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,743 +0,0 @@
|
|
|
1
|
-
import { EntityNotFoundError } from "../error/EntityNotFoundError";
|
|
2
|
-
import { QueryRunnerProviderAlreadyReleasedError } from "../error/QueryRunnerProviderAlreadyReleasedError";
|
|
3
|
-
import { NoNeedToReleaseEntityManagerError } from "../error/NoNeedToReleaseEntityManagerError";
|
|
4
|
-
/* */
|
|
5
|
-
/* */
|
|
6
|
-
import { TreeRepository } from "../repository/TreeRepository";
|
|
7
|
-
import { Repository } from "../repository/Repository";
|
|
8
|
-
import { FindOptionsUtils } from "../find-options/FindOptionsUtils";
|
|
9
|
-
import { PlainObjectToNewEntityTransformer } from "../query-builder/transformer/PlainObjectToNewEntityTransformer";
|
|
10
|
-
import { PlainObjectToDatabaseEntityTransformer } from "../query-builder/transformer/PlainObjectToDatabaseEntityTransformer";
|
|
11
|
-
import { CustomRepositoryCannotInheritRepositoryError, CustomRepositoryNotFoundError, TreeRepositoryNotSupportedError, TypeORMError, } from "../error"; /* */
|
|
12
|
-
/* */
|
|
13
|
-
/* */
|
|
14
|
-
/* */
|
|
15
|
-
/* */
|
|
16
|
-
import { AbstractRepository } from "../repository/AbstractRepository";
|
|
17
|
-
import { EntityPersistExecutor } from "../persistence/EntityPersistExecutor";
|
|
18
|
-
import { ObjectUtils } from "../util/ObjectUtils";
|
|
19
|
-
import { getMetadataArgsStorage } from "../globals";
|
|
20
|
-
import { InstanceChecker } from "../util/InstanceChecker";
|
|
21
|
-
/**
|
|
22
|
-
* Entity manager supposed to work with any entity, automatically find its repository and call its methods,
|
|
23
|
-
* whatever entity type are you passing.
|
|
24
|
-
*/
|
|
25
|
-
export class EntityManager {
|
|
26
|
-
constructor(connection, queryRunner) {
|
|
27
|
-
this["@instanceof"] = Symbol.for("EntityManager");
|
|
28
|
-
/**
|
|
29
|
-
* Once created and then reused by repositories.
|
|
30
|
-
*/
|
|
31
|
-
this.repositories = [];
|
|
32
|
-
/**
|
|
33
|
-
* Once created and then reused by repositories.
|
|
34
|
-
*/
|
|
35
|
-
this.treeRepositories = [];
|
|
36
|
-
/**
|
|
37
|
-
* Plain to object transformer used in create and merge operations.
|
|
38
|
-
*/
|
|
39
|
-
this.plainObjectToEntityTransformer = new PlainObjectToNewEntityTransformer();
|
|
40
|
-
this.connection = connection;
|
|
41
|
-
if (queryRunner) {
|
|
42
|
-
this.queryRunner = queryRunner;
|
|
43
|
-
ObjectUtils.assign(this.queryRunner, { manager: this });
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Wraps given function execution (and all operations made there) in a transaction.
|
|
48
|
-
* All database operations must be executed using provided entity manager.
|
|
49
|
-
*/
|
|
50
|
-
async transaction(isolationOrRunInTransaction, runInTransactionParam) {
|
|
51
|
-
const isolation = typeof isolationOrRunInTransaction === "string"
|
|
52
|
-
? isolationOrRunInTransaction
|
|
53
|
-
: undefined;
|
|
54
|
-
const runInTransaction = typeof isolationOrRunInTransaction === "function"
|
|
55
|
-
? isolationOrRunInTransaction
|
|
56
|
-
: runInTransactionParam;
|
|
57
|
-
if (!runInTransaction) {
|
|
58
|
-
throw new TypeORMError(`Transaction method requires callback in second parameter if isolation level is supplied.`);
|
|
59
|
-
}
|
|
60
|
-
if (this.queryRunner && this.queryRunner.isReleased)
|
|
61
|
-
throw new QueryRunnerProviderAlreadyReleasedError();
|
|
62
|
-
const queryRunner = this.queryRunner || this.connection.createQueryRunner();
|
|
63
|
-
try {
|
|
64
|
-
await queryRunner.startTransaction(isolation);
|
|
65
|
-
const result = await runInTransaction(queryRunner.manager);
|
|
66
|
-
await queryRunner.commitTransaction();
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
try {
|
|
71
|
-
await queryRunner.rollbackTransaction();
|
|
72
|
-
}
|
|
73
|
-
catch (rollbackError) { }
|
|
74
|
-
throw err;
|
|
75
|
-
}
|
|
76
|
-
finally {
|
|
77
|
-
if (!this.queryRunner)
|
|
78
|
-
await queryRunner.release();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Executes raw SQL query and returns raw database results.
|
|
83
|
-
*/
|
|
84
|
-
async query(query, parameters) {
|
|
85
|
-
return this.connection.query(query, parameters, this.queryRunner);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Creates a new query builder that can be used to build a SQL query.
|
|
89
|
-
*/
|
|
90
|
-
createQueryBuilder(entityClass, alias, queryRunner) {
|
|
91
|
-
if (alias) {
|
|
92
|
-
return this.connection.createQueryBuilder(entityClass, alias, queryRunner || this.queryRunner);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
return this.connection.createQueryBuilder(entityClass ||
|
|
96
|
-
queryRunner ||
|
|
97
|
-
this.queryRunner);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Checks if entity has an id by its Function type or schema name.
|
|
102
|
-
*/
|
|
103
|
-
hasId(targetOrEntity, maybeEntity) {
|
|
104
|
-
const target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;
|
|
105
|
-
const entity = arguments.length === 2 ? maybeEntity : targetOrEntity;
|
|
106
|
-
const metadata = this.connection.getMetadata(target);
|
|
107
|
-
return metadata.hasId(entity);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Gets entity mixed id.
|
|
111
|
-
*/
|
|
112
|
-
getId(targetOrEntity, maybeEntity) {
|
|
113
|
-
const target = arguments.length === 2 ? targetOrEntity : targetOrEntity.constructor;
|
|
114
|
-
const entity = arguments.length === 2 ? maybeEntity : targetOrEntity;
|
|
115
|
-
const metadata = this.connection.getMetadata(target);
|
|
116
|
-
return metadata.getEntityIdMixedMap(entity);
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Creates a new entity instance or instances.
|
|
120
|
-
* Can copy properties from the given object into new entities.
|
|
121
|
-
*/
|
|
122
|
-
create(entityClass, plainObjectOrObjects) {
|
|
123
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
124
|
-
if (!plainObjectOrObjects)
|
|
125
|
-
return metadata.create(this.queryRunner);
|
|
126
|
-
if (Array.isArray(plainObjectOrObjects))
|
|
127
|
-
return plainObjectOrObjects.map((plainEntityLike) => this.create(entityClass, plainEntityLike));
|
|
128
|
-
const mergeIntoEntity = metadata.create(this.queryRunner);
|
|
129
|
-
this.plainObjectToEntityTransformer.transform(mergeIntoEntity, plainObjectOrObjects, metadata, true);
|
|
130
|
-
return mergeIntoEntity;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Merges two entities into one new entity.
|
|
134
|
-
*/
|
|
135
|
-
merge(entityClass, mergeIntoEntity, ...entityLikes) {
|
|
136
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
137
|
-
entityLikes.forEach((object) => this.plainObjectToEntityTransformer.transform(mergeIntoEntity, object, metadata));
|
|
138
|
-
return mergeIntoEntity;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Creates a new entity from the given plain javascript object. If entity already exist in the database, then
|
|
142
|
-
* it loads it (and everything related to it), replaces all values with the new ones from the given object
|
|
143
|
-
* and returns this new entity. This new entity is actually a loaded from the db entity with all properties
|
|
144
|
-
* replaced from the new object.
|
|
145
|
-
*/
|
|
146
|
-
async preload(entityClass, entityLike) {
|
|
147
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
148
|
-
const plainObjectToDatabaseEntityTransformer = new PlainObjectToDatabaseEntityTransformer(this.connection.manager);
|
|
149
|
-
const transformedEntity = await plainObjectToDatabaseEntityTransformer.transform(entityLike, metadata);
|
|
150
|
-
if (transformedEntity)
|
|
151
|
-
return this.merge(entityClass, transformedEntity, entityLike);
|
|
152
|
-
return undefined;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Saves a given entity in the database.
|
|
156
|
-
*/
|
|
157
|
-
save(targetOrEntity, maybeEntityOrOptions, maybeOptions) {
|
|
158
|
-
let target = arguments.length > 1 &&
|
|
159
|
-
(typeof targetOrEntity === "function" ||
|
|
160
|
-
InstanceChecker.isEntitySchema(targetOrEntity) ||
|
|
161
|
-
typeof targetOrEntity === "string")
|
|
162
|
-
? targetOrEntity
|
|
163
|
-
: undefined;
|
|
164
|
-
const entity = target
|
|
165
|
-
? maybeEntityOrOptions
|
|
166
|
-
: targetOrEntity;
|
|
167
|
-
const options = target
|
|
168
|
-
? maybeOptions
|
|
169
|
-
: maybeEntityOrOptions;
|
|
170
|
-
if (InstanceChecker.isEntitySchema(target))
|
|
171
|
-
target = target.options.name;
|
|
172
|
-
if (Array.isArray(entity) && entity.length === 0)
|
|
173
|
-
return Promise.resolve(entity);
|
|
174
|
-
return new EntityPersistExecutor(this.connection, this.queryRunner, "save", target, entity, options)
|
|
175
|
-
.execute()
|
|
176
|
-
.then(() => entity);
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Removes a given entity from the database.
|
|
180
|
-
*/
|
|
181
|
-
remove(targetOrEntity, maybeEntityOrOptions, maybeOptions) {
|
|
182
|
-
const target = arguments.length > 1 &&
|
|
183
|
-
(typeof targetOrEntity === "function" ||
|
|
184
|
-
InstanceChecker.isEntitySchema(targetOrEntity) ||
|
|
185
|
-
typeof targetOrEntity === "string")
|
|
186
|
-
? targetOrEntity
|
|
187
|
-
: undefined;
|
|
188
|
-
const entity = target
|
|
189
|
-
? maybeEntityOrOptions
|
|
190
|
-
: targetOrEntity;
|
|
191
|
-
const options = target
|
|
192
|
-
? maybeOptions
|
|
193
|
-
: maybeEntityOrOptions;
|
|
194
|
-
if (Array.isArray(entity) && entity.length === 0)
|
|
195
|
-
return Promise.resolve(entity);
|
|
196
|
-
return new EntityPersistExecutor(this.connection, this.queryRunner, "remove", target, entity, options)
|
|
197
|
-
.execute()
|
|
198
|
-
.then(() => entity);
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Records the delete date of one or many given entities.
|
|
202
|
-
*/
|
|
203
|
-
softRemove(targetOrEntity, maybeEntityOrOptions, maybeOptions) {
|
|
204
|
-
let target = arguments.length > 1 &&
|
|
205
|
-
(typeof targetOrEntity === "function" ||
|
|
206
|
-
InstanceChecker.isEntitySchema(targetOrEntity) ||
|
|
207
|
-
typeof targetOrEntity === "string")
|
|
208
|
-
? targetOrEntity
|
|
209
|
-
: undefined;
|
|
210
|
-
const entity = target
|
|
211
|
-
? maybeEntityOrOptions
|
|
212
|
-
: targetOrEntity;
|
|
213
|
-
const options = target
|
|
214
|
-
? maybeOptions
|
|
215
|
-
: maybeEntityOrOptions;
|
|
216
|
-
if (InstanceChecker.isEntitySchema(target))
|
|
217
|
-
target = target.options.name;
|
|
218
|
-
if (Array.isArray(entity) && entity.length === 0)
|
|
219
|
-
return Promise.resolve(entity);
|
|
220
|
-
return new EntityPersistExecutor(this.connection, this.queryRunner, "soft-remove", target, entity, options)
|
|
221
|
-
.execute()
|
|
222
|
-
.then(() => entity);
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Recovers one or many given entities.
|
|
226
|
-
*/
|
|
227
|
-
recover(targetOrEntity, maybeEntityOrOptions, maybeOptions) {
|
|
228
|
-
let target = arguments.length > 1 &&
|
|
229
|
-
(typeof targetOrEntity === "function" ||
|
|
230
|
-
InstanceChecker.isEntitySchema(targetOrEntity) ||
|
|
231
|
-
typeof targetOrEntity === "string")
|
|
232
|
-
? targetOrEntity
|
|
233
|
-
: undefined;
|
|
234
|
-
const entity = target
|
|
235
|
-
? maybeEntityOrOptions
|
|
236
|
-
: targetOrEntity;
|
|
237
|
-
const options = target
|
|
238
|
-
? maybeOptions
|
|
239
|
-
: maybeEntityOrOptions;
|
|
240
|
-
if (InstanceChecker.isEntitySchema(target))
|
|
241
|
-
target = target.options.name;
|
|
242
|
-
if (Array.isArray(entity) && entity.length === 0)
|
|
243
|
-
return Promise.resolve(entity);
|
|
244
|
-
return new EntityPersistExecutor(this.connection, this.queryRunner, "recover", target, entity, options)
|
|
245
|
-
.execute()
|
|
246
|
-
.then(() => entity);
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* Inserts a given entity into the database.
|
|
250
|
-
* Unlike save method executes a primitive operation without cascades, relations and other operations included.
|
|
251
|
-
* Executes fast and efficient INSERT query.
|
|
252
|
-
* Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.
|
|
253
|
-
* You can execute bulk inserts using this method.
|
|
254
|
-
*/
|
|
255
|
-
async insert(target, entity) {
|
|
256
|
-
return this.createQueryBuilder()
|
|
257
|
-
.insert()
|
|
258
|
-
.into(target)
|
|
259
|
-
.values(entity)
|
|
260
|
-
.execute();
|
|
261
|
-
}
|
|
262
|
-
async upsert(target, entityOrEntities, conflictPathsOrOptions) {
|
|
263
|
-
const metadata = this.connection.getMetadata(target);
|
|
264
|
-
let options;
|
|
265
|
-
if (Array.isArray(conflictPathsOrOptions)) {
|
|
266
|
-
options = {
|
|
267
|
-
conflictPaths: conflictPathsOrOptions,
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
options = conflictPathsOrOptions;
|
|
272
|
-
}
|
|
273
|
-
let entities;
|
|
274
|
-
if (!Array.isArray(entityOrEntities)) {
|
|
275
|
-
entities = [entityOrEntities];
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
entities = entityOrEntities;
|
|
279
|
-
}
|
|
280
|
-
const conflictColumns = metadata.mapPropertyPathsToColumns(options.conflictPaths);
|
|
281
|
-
const overwriteColumns = metadata.columns.filter((col) => !conflictColumns.includes(col) &&
|
|
282
|
-
entities.some((entity) => typeof col.getEntityValue(entity) !== "undefined"));
|
|
283
|
-
return this.createQueryBuilder()
|
|
284
|
-
.insert()
|
|
285
|
-
.into(target)
|
|
286
|
-
.values(entities)
|
|
287
|
-
.orUpdate([...conflictColumns, ...overwriteColumns].map((col) => col.databaseName), conflictColumns.map((col) => col.databaseName), {
|
|
288
|
-
skipUpdateIfNoValuesChanged: options.skipUpdateIfNoValuesChanged,
|
|
289
|
-
})
|
|
290
|
-
.execute();
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Updates entity partially. Entity can be found by a given condition(s).
|
|
294
|
-
* Unlike save method executes a primitive operation without cascades, relations and other operations included.
|
|
295
|
-
* Executes fast and efficient UPDATE query.
|
|
296
|
-
* Does not check if entity exist in the database.
|
|
297
|
-
* Condition(s) cannot be empty.
|
|
298
|
-
*/
|
|
299
|
-
update(target, criteria, partialEntity) {
|
|
300
|
-
if (criteria === undefined ||
|
|
301
|
-
criteria === null ||
|
|
302
|
-
criteria === "" ||
|
|
303
|
-
(Array.isArray(criteria) && criteria.length === 0)) {
|
|
304
|
-
return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the update method.`));
|
|
305
|
-
}
|
|
306
|
-
if (typeof criteria === "string" ||
|
|
307
|
-
typeof criteria === "number" ||
|
|
308
|
-
criteria instanceof Date ||
|
|
309
|
-
Array.isArray(criteria)) {
|
|
310
|
-
return this.createQueryBuilder()
|
|
311
|
-
.update(target)
|
|
312
|
-
.set(partialEntity)
|
|
313
|
-
.whereInIds(criteria)
|
|
314
|
-
.execute();
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
return this.createQueryBuilder()
|
|
318
|
-
.update(target)
|
|
319
|
-
.set(partialEntity)
|
|
320
|
-
.where(criteria)
|
|
321
|
-
.execute();
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Deletes entities by a given condition(s).
|
|
326
|
-
* Unlike save method executes a primitive operation without cascades, relations and other operations included.
|
|
327
|
-
* Executes fast and efficient DELETE query.
|
|
328
|
-
* Does not check if entity exist in the database.
|
|
329
|
-
* Condition(s) cannot be empty.
|
|
330
|
-
*/
|
|
331
|
-
delete(targetOrEntity, criteria) {
|
|
332
|
-
if (criteria === undefined ||
|
|
333
|
-
criteria === null ||
|
|
334
|
-
criteria === "" ||
|
|
335
|
-
(Array.isArray(criteria) && criteria.length === 0)) {
|
|
336
|
-
return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));
|
|
337
|
-
}
|
|
338
|
-
if (typeof criteria === "string" ||
|
|
339
|
-
typeof criteria === "number" ||
|
|
340
|
-
criteria instanceof Date ||
|
|
341
|
-
Array.isArray(criteria)) {
|
|
342
|
-
return this.createQueryBuilder()
|
|
343
|
-
.delete()
|
|
344
|
-
.from(targetOrEntity)
|
|
345
|
-
.whereInIds(criteria)
|
|
346
|
-
.execute();
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
return this.createQueryBuilder()
|
|
350
|
-
.delete()
|
|
351
|
-
.from(targetOrEntity)
|
|
352
|
-
.where(criteria)
|
|
353
|
-
.execute();
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* Records the delete date of entities by a given condition(s).
|
|
358
|
-
* Unlike save method executes a primitive operation without cascades, relations and other operations included.
|
|
359
|
-
* Executes fast and efficient DELETE query.
|
|
360
|
-
* Does not check if entity exist in the database.
|
|
361
|
-
* Condition(s) cannot be empty.
|
|
362
|
-
*/
|
|
363
|
-
softDelete(targetOrEntity, criteria) {
|
|
364
|
-
if (criteria === undefined ||
|
|
365
|
-
criteria === null ||
|
|
366
|
-
criteria === "" ||
|
|
367
|
-
(Array.isArray(criteria) && criteria.length === 0)) {
|
|
368
|
-
return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));
|
|
369
|
-
}
|
|
370
|
-
if (typeof criteria === "string" ||
|
|
371
|
-
typeof criteria === "number" ||
|
|
372
|
-
criteria instanceof Date ||
|
|
373
|
-
Array.isArray(criteria)) {
|
|
374
|
-
return this.createQueryBuilder()
|
|
375
|
-
.softDelete()
|
|
376
|
-
.from(targetOrEntity)
|
|
377
|
-
.whereInIds(criteria)
|
|
378
|
-
.execute();
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
return this.createQueryBuilder()
|
|
382
|
-
.softDelete()
|
|
383
|
-
.from(targetOrEntity)
|
|
384
|
-
.where(criteria)
|
|
385
|
-
.execute();
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
/**
|
|
389
|
-
* Restores entities by a given condition(s).
|
|
390
|
-
* Unlike save method executes a primitive operation without cascades, relations and other operations included.
|
|
391
|
-
* Executes fast and efficient DELETE query.
|
|
392
|
-
* Does not check if entity exist in the database.
|
|
393
|
-
* Condition(s) cannot be empty.
|
|
394
|
-
*/
|
|
395
|
-
restore(targetOrEntity, criteria) {
|
|
396
|
-
if (criteria === undefined ||
|
|
397
|
-
criteria === null ||
|
|
398
|
-
criteria === "" ||
|
|
399
|
-
(Array.isArray(criteria) && criteria.length === 0)) {
|
|
400
|
-
return Promise.reject(new TypeORMError(`Empty criteria(s) are not allowed for the delete method.`));
|
|
401
|
-
}
|
|
402
|
-
if (typeof criteria === "string" ||
|
|
403
|
-
typeof criteria === "number" ||
|
|
404
|
-
criteria instanceof Date ||
|
|
405
|
-
Array.isArray(criteria)) {
|
|
406
|
-
return this.createQueryBuilder()
|
|
407
|
-
.restore()
|
|
408
|
-
.from(targetOrEntity)
|
|
409
|
-
.whereInIds(criteria)
|
|
410
|
-
.execute();
|
|
411
|
-
}
|
|
412
|
-
else {
|
|
413
|
-
return this.createQueryBuilder()
|
|
414
|
-
.restore()
|
|
415
|
-
.from(targetOrEntity)
|
|
416
|
-
.where(criteria)
|
|
417
|
-
.execute();
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* Counts entities that match given options.
|
|
422
|
-
* Useful for pagination.
|
|
423
|
-
*/
|
|
424
|
-
count(entityClass, options) {
|
|
425
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
426
|
-
return this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(options) ||
|
|
427
|
-
metadata.name)
|
|
428
|
-
.setFindOptions(options || {})
|
|
429
|
-
.getCount();
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Counts entities that match given conditions.
|
|
433
|
-
* Useful for pagination.
|
|
434
|
-
*/
|
|
435
|
-
countBy(entityClass, where) {
|
|
436
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
437
|
-
return this.createQueryBuilder(entityClass, metadata.name)
|
|
438
|
-
.setFindOptions({ where })
|
|
439
|
-
.getCount();
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Finds entities that match given find options.
|
|
443
|
-
*/
|
|
444
|
-
async find(entityClass, options) {
|
|
445
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
446
|
-
return this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(options) ||
|
|
447
|
-
metadata.name)
|
|
448
|
-
.setFindOptions(options || {})
|
|
449
|
-
.getMany();
|
|
450
|
-
}
|
|
451
|
-
/**
|
|
452
|
-
* Finds entities that match given find options.
|
|
453
|
-
*/
|
|
454
|
-
async findBy(entityClass, where) {
|
|
455
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
456
|
-
return this.createQueryBuilder(entityClass, metadata.name)
|
|
457
|
-
.setFindOptions({ where: where })
|
|
458
|
-
.getMany();
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* Finds entities that match given find options.
|
|
462
|
-
* Also counts all entities that match given conditions,
|
|
463
|
-
* but ignores pagination settings (from and take options).
|
|
464
|
-
*/
|
|
465
|
-
findAndCount(entityClass, options) {
|
|
466
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
467
|
-
return this.createQueryBuilder(entityClass, FindOptionsUtils.extractFindManyOptionsAlias(options) ||
|
|
468
|
-
metadata.name)
|
|
469
|
-
.setFindOptions(options || {})
|
|
470
|
-
.getManyAndCount();
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* Finds entities that match given WHERE conditions.
|
|
474
|
-
* Also counts all entities that match given conditions,
|
|
475
|
-
* but ignores pagination settings (from and take options).
|
|
476
|
-
*/
|
|
477
|
-
findAndCountBy(entityClass, where) {
|
|
478
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
479
|
-
return this.createQueryBuilder(entityClass, metadata.name)
|
|
480
|
-
.setFindOptions({ where })
|
|
481
|
-
.getManyAndCount();
|
|
482
|
-
}
|
|
483
|
-
/**
|
|
484
|
-
* Finds entities with ids.
|
|
485
|
-
* Optionally find options or conditions can be applied.
|
|
486
|
-
*
|
|
487
|
-
* @deprecated use `findBy` method instead in conjunction with `In` operator, for example:
|
|
488
|
-
*
|
|
489
|
-
* .findBy({
|
|
490
|
-
* id: In([1, 2, 3])
|
|
491
|
-
* })
|
|
492
|
-
*/
|
|
493
|
-
async findByIds(entityClass, ids) {
|
|
494
|
-
if (!ids.length)
|
|
495
|
-
return Promise.resolve([]);
|
|
496
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
497
|
-
return this.createQueryBuilder(entityClass, metadata.name)
|
|
498
|
-
.andWhereInIds(ids)
|
|
499
|
-
.getMany();
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Finds first entity by a given find options.
|
|
503
|
-
* If entity was not found in the database - returns null.
|
|
504
|
-
*/
|
|
505
|
-
async findOne(entityClass, options) {
|
|
506
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
507
|
-
let alias = metadata.name;
|
|
508
|
-
if (options && options.join) {
|
|
509
|
-
alias = options.join.alias;
|
|
510
|
-
}
|
|
511
|
-
if (!options.where) {
|
|
512
|
-
throw new Error(`You must provide selection conditions in order to find a single row.`);
|
|
513
|
-
}
|
|
514
|
-
return this.createQueryBuilder(entityClass, alias)
|
|
515
|
-
.setFindOptions({
|
|
516
|
-
...options,
|
|
517
|
-
take: 1,
|
|
518
|
-
})
|
|
519
|
-
.getOne();
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Finds first entity that matches given where condition.
|
|
523
|
-
* If entity was not found in the database - returns null.
|
|
524
|
-
*/
|
|
525
|
-
async findOneBy(entityClass, where) {
|
|
526
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
527
|
-
return this.createQueryBuilder(entityClass, metadata.name)
|
|
528
|
-
.setFindOptions({
|
|
529
|
-
where,
|
|
530
|
-
take: 1,
|
|
531
|
-
})
|
|
532
|
-
.getOne();
|
|
533
|
-
}
|
|
534
|
-
/**
|
|
535
|
-
* Finds first entity that matches given id.
|
|
536
|
-
* If entity was not found in the database - returns null.
|
|
537
|
-
*
|
|
538
|
-
* @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:
|
|
539
|
-
*
|
|
540
|
-
* .findOneBy({
|
|
541
|
-
* id: 1 // where "id" is your primary column name
|
|
542
|
-
* })
|
|
543
|
-
*/
|
|
544
|
-
async findOneById(entityClass, id) {
|
|
545
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
546
|
-
return this.createQueryBuilder(entityClass, metadata.name)
|
|
547
|
-
.setFindOptions({
|
|
548
|
-
take: 1,
|
|
549
|
-
})
|
|
550
|
-
.whereInIds(metadata.ensureEntityIdMap(id))
|
|
551
|
-
.getOne();
|
|
552
|
-
}
|
|
553
|
-
/**
|
|
554
|
-
* Finds first entity by a given find options.
|
|
555
|
-
* If entity was not found in the database - rejects with error.
|
|
556
|
-
*/
|
|
557
|
-
async findOneOrFail(entityClass, options) {
|
|
558
|
-
return this.findOne(entityClass, options).then((value) => {
|
|
559
|
-
if (value === null) {
|
|
560
|
-
return Promise.reject(new EntityNotFoundError(entityClass, options));
|
|
561
|
-
}
|
|
562
|
-
return Promise.resolve(value);
|
|
563
|
-
});
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Finds first entity that matches given where condition.
|
|
567
|
-
* If entity was not found in the database - rejects with error.
|
|
568
|
-
*/
|
|
569
|
-
async findOneByOrFail(entityClass, where) {
|
|
570
|
-
return this.findOneBy(entityClass, where).then((value) => {
|
|
571
|
-
if (value === null) {
|
|
572
|
-
return Promise.reject(new EntityNotFoundError(entityClass, where));
|
|
573
|
-
}
|
|
574
|
-
return Promise.resolve(value);
|
|
575
|
-
});
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Clears all the data from the given table (truncates/drops it).
|
|
579
|
-
*
|
|
580
|
-
* Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.
|
|
581
|
-
* @see https://stackoverflow.com/a/5972738/925151
|
|
582
|
-
*/
|
|
583
|
-
async clear(entityClass) {
|
|
584
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
585
|
-
const queryRunner = this.queryRunner || this.connection.createQueryRunner();
|
|
586
|
-
try {
|
|
587
|
-
return await queryRunner.clearTable(metadata.tablePath); // await is needed here because we are using finally
|
|
588
|
-
}
|
|
589
|
-
finally {
|
|
590
|
-
if (!this.queryRunner)
|
|
591
|
-
await queryRunner.release();
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
/**
|
|
595
|
-
* Increments some column by provided value of the entities matched given conditions.
|
|
596
|
-
*/
|
|
597
|
-
async increment(entityClass, conditions, propertyPath, value) {
|
|
598
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
599
|
-
const column = metadata.findColumnWithPropertyPath(propertyPath);
|
|
600
|
-
if (!column)
|
|
601
|
-
throw new TypeORMError(`Column ${propertyPath} was not found in ${metadata.targetName} entity.`);
|
|
602
|
-
if (isNaN(Number(value)))
|
|
603
|
-
throw new TypeORMError(`Value "${value}" is not a number.`);
|
|
604
|
-
const values = propertyPath
|
|
605
|
-
.split(".")
|
|
606
|
-
.reduceRight((value, key) => ({ [key]: value }), () => this.connection.driver.escape(column.databaseName) +
|
|
607
|
-
" + " +
|
|
608
|
-
value);
|
|
609
|
-
return this.createQueryBuilder(entityClass, "entity")
|
|
610
|
-
.update(entityClass)
|
|
611
|
-
.set(values)
|
|
612
|
-
.where(conditions)
|
|
613
|
-
.execute();
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* Decrements some column by provided value of the entities matched given conditions.
|
|
617
|
-
*/
|
|
618
|
-
async decrement(entityClass, conditions, propertyPath, value) {
|
|
619
|
-
const metadata = this.connection.getMetadata(entityClass);
|
|
620
|
-
const column = metadata.findColumnWithPropertyPath(propertyPath);
|
|
621
|
-
if (!column)
|
|
622
|
-
throw new TypeORMError(`Column ${propertyPath} was not found in ${metadata.targetName} entity.`);
|
|
623
|
-
if (isNaN(Number(value)))
|
|
624
|
-
throw new TypeORMError(`Value "${value}" is not a number.`);
|
|
625
|
-
const values = propertyPath
|
|
626
|
-
.split(".")
|
|
627
|
-
.reduceRight((value, key) => ({ [key]: value }), () => this.connection.driver.escape(column.databaseName) +
|
|
628
|
-
" - " +
|
|
629
|
-
value);
|
|
630
|
-
return this.createQueryBuilder(entityClass, "entity")
|
|
631
|
-
.update(entityClass)
|
|
632
|
-
.set(values)
|
|
633
|
-
.where(conditions)
|
|
634
|
-
.execute();
|
|
635
|
-
}
|
|
636
|
-
/**
|
|
637
|
-
* Gets repository for the given entity class or name.
|
|
638
|
-
* If single database connection mode is used, then repository is obtained from the
|
|
639
|
-
* repository aggregator, where each repository is individually created for this entity manager.
|
|
640
|
-
* When single database connection is not used, repository is being obtained from the connection.
|
|
641
|
-
*/
|
|
642
|
-
getRepository(target) {
|
|
643
|
-
const repository = this.repositories.find((repository) => repository.target === target);
|
|
644
|
-
if (repository)
|
|
645
|
-
return repository;
|
|
646
|
-
if (this.connection.driver.options.type === "mongodb") {
|
|
647
|
-
/* */
|
|
648
|
-
/* */
|
|
649
|
-
/* */
|
|
650
|
-
/* */
|
|
651
|
-
/* */
|
|
652
|
-
/* */
|
|
653
|
-
/* */
|
|
654
|
-
/* */
|
|
655
|
-
return (void 0);
|
|
656
|
-
}
|
|
657
|
-
else {
|
|
658
|
-
const newRepository = new Repository(target, this, this.queryRunner);
|
|
659
|
-
this.repositories.push(newRepository);
|
|
660
|
-
return newRepository;
|
|
661
|
-
}
|
|
662
|
-
}
|
|
663
|
-
/**
|
|
664
|
-
* Gets tree repository for the given entity class or name.
|
|
665
|
-
* If single database connection mode is used, then repository is obtained from the
|
|
666
|
-
* repository aggregator, where each repository is individually created for this entity manager.
|
|
667
|
-
* When single database connection is not used, repository is being obtained from the connection.
|
|
668
|
-
*/
|
|
669
|
-
getTreeRepository(target) {
|
|
670
|
-
if (this.connection.driver.treeSupport === false)
|
|
671
|
-
throw new TreeRepositoryNotSupportedError(this.connection.driver);
|
|
672
|
-
const repository = this.treeRepositories.find((repository) => repository.target === target);
|
|
673
|
-
if (repository)
|
|
674
|
-
return repository;
|
|
675
|
-
const newRepository = new TreeRepository(target, this, this.queryRunner);
|
|
676
|
-
this.treeRepositories.push(newRepository);
|
|
677
|
-
return newRepository;
|
|
678
|
-
}
|
|
679
|
-
/* */
|
|
680
|
-
/* */
|
|
681
|
-
/* */
|
|
682
|
-
/* */
|
|
683
|
-
/* */
|
|
684
|
-
/* */
|
|
685
|
-
/* */
|
|
686
|
-
/* */
|
|
687
|
-
/* */
|
|
688
|
-
/**
|
|
689
|
-
* Creates a new repository instance out of a given Repository and
|
|
690
|
-
* sets current EntityManager instance to it. Used to work with custom repositories
|
|
691
|
-
* in transactions.
|
|
692
|
-
*/
|
|
693
|
-
withRepository(repository) {
|
|
694
|
-
const repositoryConstructor = repository.constructor;
|
|
695
|
-
const { target, manager, queryRunner, ...otherRepositoryProperties } = repository;
|
|
696
|
-
return Object.assign(new repositoryConstructor(repository.target, this), {
|
|
697
|
-
...otherRepositoryProperties,
|
|
698
|
-
});
|
|
699
|
-
}
|
|
700
|
-
/**
|
|
701
|
-
* Gets custom entity repository marked with @EntityRepository decorator.
|
|
702
|
-
*
|
|
703
|
-
* @deprecated use Repository.extend to create custom repositories
|
|
704
|
-
*/
|
|
705
|
-
getCustomRepository(customRepository) {
|
|
706
|
-
const entityRepositoryMetadataArgs = getMetadataArgsStorage().entityRepositories.find((repository) => {
|
|
707
|
-
return (repository.target ===
|
|
708
|
-
(typeof customRepository === "function"
|
|
709
|
-
? customRepository
|
|
710
|
-
: customRepository.constructor));
|
|
711
|
-
});
|
|
712
|
-
if (!entityRepositoryMetadataArgs)
|
|
713
|
-
throw new CustomRepositoryNotFoundError(customRepository);
|
|
714
|
-
const entityMetadata = entityRepositoryMetadataArgs.entity
|
|
715
|
-
? this.connection.getMetadata(entityRepositoryMetadataArgs.entity)
|
|
716
|
-
: undefined;
|
|
717
|
-
const entityRepositoryInstance = new entityRepositoryMetadataArgs.target(this, entityMetadata);
|
|
718
|
-
if (entityRepositoryInstance instanceof AbstractRepository) {
|
|
719
|
-
if (!entityRepositoryInstance["manager"])
|
|
720
|
-
entityRepositoryInstance["manager"] = this;
|
|
721
|
-
}
|
|
722
|
-
else {
|
|
723
|
-
if (!entityMetadata)
|
|
724
|
-
throw new CustomRepositoryCannotInheritRepositoryError(customRepository);
|
|
725
|
-
entityRepositoryInstance["manager"] = this;
|
|
726
|
-
entityRepositoryInstance["metadata"] = entityMetadata;
|
|
727
|
-
}
|
|
728
|
-
return entityRepositoryInstance;
|
|
729
|
-
}
|
|
730
|
-
/**
|
|
731
|
-
* Releases all resources used by entity manager.
|
|
732
|
-
* This is used when entity manager is created with a single query runner,
|
|
733
|
-
* and this single query runner needs to be released after job with entity manager is done.
|
|
734
|
-
*/
|
|
735
|
-
async release() {
|
|
736
|
-
if (!this.queryRunner)
|
|
737
|
-
throw new NoNeedToReleaseEntityManagerError();
|
|
738
|
-
return this.queryRunner.release();
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
;
|
|
742
|
-
({}); // @--end-of-file-for-module=taon-typeorm lib/typeorm/entity-manager/EntityManager.ts
|
|
743
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50aXR5TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0LXdlYnNxbC90YW9uLXR5cGVvcm0vcHJvamVjdHMvdGFvbi10eXBlb3JtL3NyYy9saWIvdHlwZW9ybS9lbnRpdHktbWFuYWdlci9FbnRpdHlNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQ2xFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLGtEQUFrRCxDQUFBO0FBSzFHLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDRDQUE0QyxDQUFBO0FBQzlGLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUNuRSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQTtBQUNsSCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQTtBQUM1SCxPQUFPLEVBQU0sNENBQTRDLEVBQU0sNkJBQTZCLEVBQU0sK0JBQStCLEVBQU0sWUFBWSxHQUFHLE1BQU0sVUFBVSxDQUFBLENBQUEsS0FBSztBQUMzSyxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFJckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFPNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVu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SUFBSSw0Q0FBNEMsQ0FDbEQsZ0JBQWdCLENBQ25CLENBQ0o7WUFBQyx3QkFBZ0MsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQ25EO1lBQUMsd0JBQWdDLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFBO1FBQ25FLENBQUM7UUFFRCxPQUFPLHdCQUF3QixDQUFBO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksaUNBQWlDLEVBQUUsQ0FBQTtRQUVwRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDckMsQ0FBQztDQUNKO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxxRkFBcUYiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gXCIuLi9kYXRhLXNvdXJjZS9EYXRhU291cmNlXCJcbmltcG9ydCB7IEZpbmRNYW55T3B0aW9ucyB9IGZyb20gXCIuLi9maW5kLW9wdGlvbnMvRmluZE1hbnlPcHRpb25zXCJcbmltcG9ydCB7IEVudGl0eVRhcmdldCB9IGZyb20gXCIuLi9jb21tb24vRW50aXR5VGFyZ2V0XCJcbmltcG9ydCB7IE9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL09iamVjdFR5cGVcIlxuaW1wb3J0IHsgRW50aXR5Tm90Rm91bmRFcnJvciB9IGZyb20gXCIuLi9lcnJvci9FbnRpdHlOb3RGb3VuZEVycm9yXCJcbmltcG9ydCB7IFF1ZXJ5UnVubmVyUHJvdmlkZXJBbHJlYWR5UmVsZWFzZWRFcnJvciB9IGZyb20gXCIuLi9lcnJvci9RdWVyeVJ1bm5lclByb3ZpZGVyQWxyZWFkeVJlbGVhc2VkRXJyb3JcIlxuaW1wb3J0IHsgRmluZE9uZU9wdGlvbnMgfSBmcm9tIFwiLi4vZmluZC1vcHRpb25zL0ZpbmRPbmVPcHRpb25zXCJcbmltcG9ydCB7IERlZXBQYXJ0aWFsIH0gZnJvbSBcIi4uL2NvbW1vbi9EZWVwUGFydGlhbFwiXG5pbXBvcnQgeyBSZW1vdmVPcHRpb25zIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVtb3ZlT3B0aW9uc1wiXG5pbXBvcnQgeyBTYXZlT3B0aW9ucyB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1NhdmVPcHRpb25zXCJcbmltcG9ydCB7IE5vTmVlZFRvUmVsZWFzZUVudGl0eU1hbmFnZXJFcnJvciB9IGZyb20gXCIuLi9lcnJvci9Ob05lZWRUb1JlbGVhc2VFbnRpdHlNYW5hZ2VyRXJyb3JcIlxuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgVHJlZVJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9UcmVlUmVwb3NpdG9yeVwiXG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvUmVwb3NpdG9yeVwiXG5pbXBvcnQgeyBGaW5kT3B0aW9uc1V0aWxzIH0gZnJvbSBcIi4uL2ZpbmQtb3B0aW9ucy9GaW5kT3B0aW9uc1V0aWxzXCJcbmltcG9ydCB7IFBsYWluT2JqZWN0VG9OZXdFbnRpdHlUcmFuc2Zvcm1lciB9IGZyb20gXCIuLi9xdWVyeS1idWlsZGVyL3RyYW5zZm9ybWVyL1BsYWluT2JqZWN0VG9OZXdFbnRpdHlUcmFuc2Zvcm1lclwiXG5pbXBvcnQgeyBQbGFpbk9iamVjdFRvRGF0YWJhc2VFbnRpdHlUcmFuc2Zvcm1lciB9IGZyb20gXCIuLi9xdWVyeS1idWlsZGVyL3RyYW5zZm9ybWVyL1BsYWluT2JqZWN0VG9EYXRhYmFzZUVudGl0eVRyYW5zZm9ybWVyXCJcbmltcG9ydCB7ICAgICBDdXN0b21SZXBvc2l0b3J5Q2Fubm90SW5oZXJpdFJlcG9zaXRvcnlFcnJvciwgICAgIEN1c3RvbVJlcG9zaXRvcnlOb3RGb3VuZEVycm9yLCAgICAgVHJlZVJlcG9zaXRvcnlOb3RTdXBwb3J0ZWRFcnJvciwgICAgIFR5cGVPUk1FcnJvciwgfSBmcm9tIFwiLi4vZXJyb3JcIi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9BYnN0cmFjdFJlcG9zaXRvcnlcIlxuaW1wb3J0IHsgUXVlcnlSdW5uZXIgfSBmcm9tIFwiLi4vcXVlcnktcnVubmVyL1F1ZXJ5UnVubmVyXCJcbmltcG9ydCB7IFNlbGVjdFF1ZXJ5QnVpbGRlciB9IGZyb20gXCIuLi9xdWVyeS1idWlsZGVyL1NlbGVjdFF1ZXJ5QnVpbGRlclwiXG5pbXBvcnQgeyBRdWVyeURlZXBQYXJ0aWFsRW50aXR5IH0gZnJvbSBcIi4uL3F1ZXJ5LWJ1aWxkZXIvUXVlcnlQYXJ0aWFsRW50aXR5XCJcbmltcG9ydCB7IEVudGl0eVBlcnNpc3RFeGVjdXRvciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9FbnRpdHlQZXJzaXN0RXhlY3V0b3JcIlxuaW1wb3J0IHsgT2JqZWN0SUQgfSBmcm9tIFwiLi4vZHJpdmVyL21vbmdvZGIvdHlwaW5nc1wiXG5pbXBvcnQgeyBJbnNlcnRSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnktYnVpbGRlci9yZXN1bHQvSW5zZXJ0UmVzdWx0XCJcbmltcG9ydCB7IFVwZGF0ZVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeS1idWlsZGVyL3Jlc3VsdC9VcGRhdGVSZXN1bHRcIlxuaW1wb3J0IHsgRGVsZXRlUmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5LWJ1aWxkZXIvcmVzdWx0L0RlbGV0ZVJlc3VsdFwiXG5pbXBvcnQgeyBGaW5kT3B0aW9uc1doZXJlIH0gZnJvbSBcIi4uL2ZpbmQtb3B0aW9ucy9GaW5kT3B0aW9uc1doZXJlXCJcbmltcG9ydCB7IElzb2xhdGlvbkxldmVsIH0gZnJvbSBcIi4uL2RyaXZlci90eXBlcy9Jc29sYXRpb25MZXZlbFwiXG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gXCIuLi91dGlsL09iamVjdFV0aWxzXCJcbmltcG9ydCB7IGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UgfSBmcm9tIFwiLi4vZ2xvYmFsc1wiXG5pbXBvcnQgeyBVcHNlcnRPcHRpb25zIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvVXBzZXJ0T3B0aW9uc1wiXG5pbXBvcnQgeyBJbnN0YW5jZUNoZWNrZXIgfSBmcm9tIFwiLi4vdXRpbC9JbnN0YW5jZUNoZWNrZXJcIlxuaW1wb3J0IHsgT2JqZWN0TGl0ZXJhbCB9IGZyb20gXCIuLi9jb21tb24vT2JqZWN0TGl0ZXJhbFwiXG5cbi8qKlxuICogRW50aXR5IG1hbmFnZXIgc3VwcG9zZWQgdG8gd29yayB3aXRoIGFueSBlbnRpdHksIGF1dG9tYXRpY2FsbHkgZmluZCBpdHMgcmVwb3NpdG9yeSBhbmQgY2FsbCBpdHMgbWV0aG9kcyxcbiAqIHdoYXRldmVyIGVudGl0eSB0eXBlIGFyZSB5b3UgcGFzc2luZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eU1hbmFnZXIge1xuICAgIHJlYWRvbmx5IFwiQGluc3RhbmNlb2ZcIiA9IFN5bWJvbC5mb3IoXCJFbnRpdHlNYW5hZ2VyXCIpXG5cblxuXG5cblxuICAgIC8qKlxuICAgICAqIENvbm5lY3Rpb24gdXNlZCBieSB0aGlzIGVudGl0eSBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGNvbm5lY3Rpb246IERhdGFTb3VyY2VcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBxdWVyeSBydW5uZXIgdG8gYmUgdXNlZCBmb3Igb3BlcmF0aW9ucyBpbiB0aGlzIGVudGl0eSBtYW5hZ2VyLlxuICAgICAqIFVzZWQgb25seSBpbiBub24tZ2xvYmFsIGVudGl0eSBtYW5hZ2VyLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHF1ZXJ5UnVubmVyPzogUXVlcnlSdW5uZXJcblxuXG5cblxuXG4gICAgLyoqXG4gICAgICogT25jZSBjcmVhdGVkIGFuZCB0aGVuIHJldXNlZCBieSByZXBvc2l0b3JpZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlcG9zaXRvcmllczogUmVwb3NpdG9yeTxhbnk+W10gPSBbXVxuXG4gICAgLyoqXG4gICAgICogT25jZSBjcmVhdGVkIGFuZCB0aGVuIHJldXNlZCBieSByZXBvc2l0b3JpZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRyZWVSZXBvc2l0b3JpZXM6IFRyZWVSZXBvc2l0b3J5PGFueT5bXSA9IFtdXG5cbiAgICAvKipcbiAgICAgKiBQbGFpbiB0byBvYmplY3QgdHJhbnNmb3JtZXIgdXNlZCBpbiBjcmVhdGUgYW5kIG1lcmdlIG9wZXJhdGlvbnMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBsYWluT2JqZWN0VG9FbnRpdHlUcmFuc2Zvcm1lciA9XG4gICAgICAgIG5ldyBQbGFpbk9iamVjdFRvTmV3RW50aXR5VHJhbnNmb3JtZXIoKVxuXG5cblxuXG5cbiAgICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBEYXRhU291cmNlLCBxdWVyeVJ1bm5lcj86IFF1ZXJ5UnVubmVyKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25cbiAgICAgICAgaWYgKHF1ZXJ5UnVubmVyKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyID0gcXVlcnlSdW5uZXJcblxuICAgICAgICAgICAgT2JqZWN0VXRpbHMuYXNzaWduKHRoaXMucXVlcnlSdW5uZXIsIHsgbWFuYWdlcjogdGhpcyB9KVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuXG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyBnaXZlbiBmdW5jdGlvbiBleGVjdXRpb24gKGFuZCBhbGwgb3BlcmF0aW9ucyBtYWRlIHRoZXJlKSBpbiBhIHRyYW5zYWN0aW9uLlxuICAgICAqIEFsbCBkYXRhYmFzZSBvcGVyYXRpb25zIG11c3QgYmUgZXhlY3V0ZWQgdXNpbmcgcHJvdmlkZWQgZW50aXR5IG1hbmFnZXIuXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNhY3Rpb248VD4oXG4gICAgICAgIHJ1bkluVHJhbnNhY3Rpb246IChlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyKSA9PiBQcm9taXNlPFQ+LFxuICAgICk6IFByb21pc2U8VD5cblxuICAgIC8qKlxuICAgICAqIFdyYXBzIGdpdmVuIGZ1bmN0aW9uIGV4ZWN1dGlvbiAoYW5kIGFsbCBvcGVyYXRpb25zIG1hZGUgdGhlcmUpIGluIGEgdHJhbnNhY3Rpb24uXG4gICAgICogQWxsIGRhdGFiYXNlIG9wZXJhdGlvbnMgbXVzdCBiZSBleGVjdXRlZCB1c2luZyBwcm92aWRlZCBlbnRpdHkgbWFuYWdlci5cbiAgICAgKi9cbiAgICBhc3luYyB0cmFuc2FjdGlvbjxUPihcbiAgICAgICAgaXNvbGF0aW9uTGV2ZWw6IElzb2xhdGlvbkxldmVsLFxuICAgICAgICBydW5JblRyYW5zYWN0aW9uOiAoZW50aXR5TWFuYWdlcjogRW50aXR5TWFuYWdlcikgPT4gUHJvbWlzZTxUPixcbiAgICApOiBQcm9taXNlPFQ+XG5cbiAgICAvKipcbiAgICAgKiBXcmFwcyBnaXZlbiBmdW5jdGlvbiBleGVjdXRpb24gKGFuZCBhbGwgb3BlcmF0aW9ucyBtYWRlIHRoZXJlKSBpbiBhIHRyYW5zYWN0aW9uLlxuICAgICAqIEFsbCBkYXRhYmFzZSBvcGVyYXRpb25zIG11c3QgYmUgZXhlY3V0ZWQgdXNpbmcgcHJvdmlkZWQgZW50aXR5IG1hbmFnZXIuXG4gICAgICovXG4gICAgYXN5bmMgdHJhbnNhY3Rpb248VD4oXG4gICAgICAgIGlzb2xhdGlvbk9yUnVuSW5UcmFuc2FjdGlvbjpcbiAgICAgICAgICAgIHwgSXNvbGF0aW9uTGV2ZWxcbiAgICAgICAgICAgIHwgKChlbnRpdHlNYW5hZ2VyOiBFbnRpdHlNYW5hZ2VyKSA9PiBQcm9taXNlPFQ+KSxcbiAgICAgICAgcnVuSW5UcmFuc2FjdGlvblBhcmFtPzogKGVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIpID0+IFByb21pc2U8VD4sXG4gICAgKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IGlzb2xhdGlvbiA9XG4gICAgICAgICAgICB0eXBlb2YgaXNvbGF0aW9uT3JSdW5JblRyYW5zYWN0aW9uID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBpc29sYXRpb25PclJ1bkluVHJhbnNhY3Rpb25cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBydW5JblRyYW5zYWN0aW9uID1cbiAgICAgICAgICAgIHR5cGVvZiBpc29sYXRpb25PclJ1bkluVHJhbnNhY3Rpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgID8gaXNvbGF0aW9uT3JSdW5JblRyYW5zYWN0aW9uXG4gICAgICAgICAgICAgICAgOiBydW5JblRyYW5zYWN0aW9uUGFyYW1cblxuICAgICAgICBpZiAoIXJ1bkluVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgYFRyYW5zYWN0aW9uIG1ldGhvZCByZXF1aXJlcyBjYWxsYmFjayBpbiBzZWNvbmQgcGFyYW1ldGVyIGlmIGlzb2xhdGlvbiBsZXZlbCBpcyBzdXBwbGllZC5gLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucXVlcnlSdW5uZXIgJiYgdGhpcy5xdWVyeVJ1bm5lci5pc1JlbGVhc2VkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5UnVubmVyUHJvdmlkZXJBbHJlYWR5UmVsZWFzZWRFcnJvcigpXG5cblxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UnVubmVyID1cbiAgICAgICAgICAgIHRoaXMucXVlcnlSdW5uZXIgfHwgdGhpcy5jb25uZWN0aW9uLmNyZWF0ZVF1ZXJ5UnVubmVyKClcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuc3RhcnRUcmFuc2FjdGlvbihpc29sYXRpb24pXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5JblRyYW5zYWN0aW9uKHF1ZXJ5UnVubmVyLm1hbmFnZXIpXG4gICAgICAgICAgICBhd2FpdCBxdWVyeVJ1bm5lci5jb21taXRUcmFuc2FjdGlvbigpXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKVxuICAgICAgICAgICAgfSBjYXRjaCAocm9sbGJhY2tFcnJvcikge31cbiAgICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5UnVubmVyKVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyByYXcgU1FMIHF1ZXJ5IGFuZCByZXR1cm5zIHJhdyBkYXRhYmFzZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGFzeW5jIHF1ZXJ5KHF1ZXJ5OiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBhbnlbXSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucXVlcnkocXVlcnksIHBhcmFtZXRlcnMsIHRoaXMucXVlcnlSdW5uZXIpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBxdWVyeSBidWlsZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQgYSBTUUwgcXVlcnkuXG4gICAgICovXG4gICAgY3JlYXRlUXVlcnlCdWlsZGVyPEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIGFsaWFzOiBzdHJpbmcsXG4gICAgICAgIHF1ZXJ5UnVubmVyPzogUXVlcnlSdW5uZXIsXG4gICAgKTogU2VsZWN0UXVlcnlCdWlsZGVyPEVudGl0eT5cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcXVlcnkgYnVpbGRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIGEgU1FMIHF1ZXJ5LlxuICAgICAqL1xuICAgIGNyZWF0ZVF1ZXJ5QnVpbGRlcihxdWVyeVJ1bm5lcj86IFF1ZXJ5UnVubmVyKTogU2VsZWN0UXVlcnlCdWlsZGVyPGFueT5cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcXVlcnkgYnVpbGRlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIGEgU1FMIHF1ZXJ5LlxuICAgICAqL1xuICAgIGNyZWF0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgZW50aXR5Q2xhc3M/OiBFbnRpdHlUYXJnZXQ8RW50aXR5PiB8IFF1ZXJ5UnVubmVyLFxuICAgICAgICBhbGlhcz86IHN0cmluZyxcbiAgICAgICAgcXVlcnlSdW5uZXI/OiBRdWVyeVJ1bm5lcixcbiAgICApOiBTZWxlY3RRdWVyeUJ1aWxkZXI8RW50aXR5PiB7XG4gICAgICAgIGlmIChhbGlhcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5jcmVhdGVRdWVyeUJ1aWxkZXIoXG4gICAgICAgICAgICAgICAgZW50aXR5Q2xhc3MgYXMgRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgICAgICAgICAgYWxpYXMsXG4gICAgICAgICAgICAgICAgcXVlcnlSdW5uZXIgfHwgdGhpcy5xdWVyeVJ1bm5lcixcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlUXVlcnlCdWlsZGVyKFxuICAgICAgICAgICAgICAgIChlbnRpdHlDbGFzcyBhcyBRdWVyeVJ1bm5lciB8IHVuZGVmaW5lZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSdW5uZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lcixcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBlbnRpdHkgaGFzIGFuIGlkLlxuICAgICAqL1xuICAgIGhhc0lkKGVudGl0eTogYW55KTogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGVudGl0eSBvZiBnaXZlbiBzY2hlbWEgbmFtZSBoYXMgYW4gaWQuXG4gICAgICovXG4gICAgaGFzSWQodGFyZ2V0OiBGdW5jdGlvbiB8IHN0cmluZywgZW50aXR5OiBhbnkpOiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgZW50aXR5IGhhcyBhbiBpZCBieSBpdHMgRnVuY3Rpb24gdHlwZSBvciBzY2hlbWEgbmFtZS5cbiAgICAgKi9cbiAgICBoYXNJZCh0YXJnZXRPckVudGl0eTogYW55IHwgRnVuY3Rpb24gfCBzdHJpbmcsIG1heWJlRW50aXR5PzogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gdGFyZ2V0T3JFbnRpdHkgOiB0YXJnZXRPckVudGl0eS5jb25zdHJ1Y3RvclxuICAgICAgICBjb25zdCBlbnRpdHkgPSBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gbWF5YmVFbnRpdHkgOiB0YXJnZXRPckVudGl0eVxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YSh0YXJnZXQpXG4gICAgICAgIHJldHVybiBtZXRhZGF0YS5oYXNJZChlbnRpdHkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBlbnRpdHkgbWl4ZWQgaWQuXG4gICAgICovXG4gICAgZ2V0SWQoZW50aXR5OiBhbnkpOiBhbnlcblxuICAgIC8qKlxuICAgICAqIEdldHMgZW50aXR5IG1peGVkIGlkLlxuICAgICAqL1xuICAgIGdldElkKHRhcmdldDogRW50aXR5VGFyZ2V0PGFueT4sIGVudGl0eTogYW55KTogYW55XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGVudGl0eSBtaXhlZCBpZC5cbiAgICAgKi9cbiAgICBnZXRJZCh0YXJnZXRPckVudGl0eTogYW55IHwgRW50aXR5VGFyZ2V0PGFueT4sIG1heWJlRW50aXR5PzogYW55KTogYW55IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID1cbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyB0YXJnZXRPckVudGl0eSA6IHRhcmdldE9yRW50aXR5LmNvbnN0cnVjdG9yXG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBtYXliZUVudGl0eSA6IHRhcmdldE9yRW50aXR5XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jb25uZWN0aW9uLmdldE1ldGFkYXRhKHRhcmdldClcbiAgICAgICAgcmV0dXJuIG1ldGFkYXRhLmdldEVudGl0eUlkTWl4ZWRNYXAoZW50aXR5KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZW50aXR5IGluc3RhbmNlIGFuZCBjb3BpZXMgYWxsIGVudGl0eSBwcm9wZXJ0aWVzIGZyb20gdGhpcyBvYmplY3QgaW50byBhIG5ldyBlbnRpdHkuXG4gICAgICogTm90ZSB0aGF0IGl0IGNvcGllcyBvbmx5IHByb3BlcnRpZXMgdGhhdCBwcmVzZW50IGluIGVudGl0eSBzY2hlbWEuXG4gICAgICovXG4gICAgY3JlYXRlPEVudGl0eT4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgcGxhaW5PYmplY3Q/OiBEZWVwUGFydGlhbDxFbnRpdHk+LFxuICAgICk6IEVudGl0eVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBlbnRpdGllcyBhbmQgY29waWVzIGFsbCBlbnRpdHkgcHJvcGVydGllcyBmcm9tIGdpdmVuIG9iamVjdHMgaW50byB0aGVpciBuZXcgZW50aXRpZXMuXG4gICAgICogTm90ZSB0aGF0IGl0IGNvcGllcyBvbmx5IHByb3BlcnRpZXMgdGhhdCBwcmVzZW50IGluIGVudGl0eSBzY2hlbWEuXG4gICAgICovXG4gICAgY3JlYXRlPEVudGl0eT4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgcGxhaW5PYmplY3RzPzogRGVlcFBhcnRpYWw8RW50aXR5PltdLFxuICAgICk6IEVudGl0eVtdXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGVudGl0eSBpbnN0YW5jZSBvciBpbnN0YW5jZXMuXG4gICAgICogQ2FuIGNvcHkgcHJvcGVydGllcyBmcm9tIHRoZSBnaXZlbiBvYmplY3QgaW50byBuZXcgZW50aXRpZXMuXG4gICAgICovXG4gICAgY3JlYXRlPEVudGl0eT4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgcGxhaW5PYmplY3RPck9iamVjdHM/OiBEZWVwUGFydGlhbDxFbnRpdHk+IHwgRGVlcFBhcnRpYWw8RW50aXR5PltdLFxuICAgICk6IEVudGl0eSB8IEVudGl0eVtdIHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEoZW50aXR5Q2xhc3MpXG5cbiAgICAgICAgaWYgKCFwbGFpbk9iamVjdE9yT2JqZWN0cykgcmV0dXJuIG1ldGFkYXRhLmNyZWF0ZSh0aGlzLnF1ZXJ5UnVubmVyKVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBsYWluT2JqZWN0T3JPYmplY3RzKSlcbiAgICAgICAgICAgIHJldHVybiAocGxhaW5PYmplY3RPck9iamVjdHMgYXMgRGVlcFBhcnRpYWw8RW50aXR5PltdKS5tYXAoXG4gICAgICAgICAgICAgICAgKHBsYWluRW50aXR5TGlrZSkgPT4gdGhpcy5jcmVhdGUoZW50aXR5Q2xhc3MsIHBsYWluRW50aXR5TGlrZSksXG4gICAgICAgICAgICApXG5cbiAgICAgICAgY29uc3QgbWVyZ2VJbnRvRW50aXR5ID0gbWV0YWRhdGEuY3JlYXRlKHRoaXMucXVlcnlSdW5uZXIpXG4gICAgICAgIHRoaXMucGxhaW5PYmplY3RUb0VudGl0eVRyYW5zZm9ybWVyLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG1lcmdlSW50b0VudGl0eSxcbiAgICAgICAgICAgIHBsYWluT2JqZWN0T3JPYmplY3RzLFxuICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiBtZXJnZUludG9FbnRpdHlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdHdvIGVudGl0aWVzIGludG8gb25lIG5ldyBlbnRpdHkuXG4gICAgICovXG4gICAgbWVyZ2U8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgbWVyZ2VJbnRvRW50aXR5OiBFbnRpdHksXG4gICAgICAgIC4uLmVudGl0eUxpa2VzOiBEZWVwUGFydGlhbDxFbnRpdHk+W11cbiAgICApOiBFbnRpdHkge1xuXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jb25uZWN0aW9uLmdldE1ldGFkYXRhKGVudGl0eUNsYXNzKVxuICAgICAgICBlbnRpdHlMaWtlcy5mb3JFYWNoKChvYmplY3QpID0+XG4gICAgICAgICAgICB0aGlzLnBsYWluT2JqZWN0VG9FbnRpdHlUcmFuc2Zvcm1lci50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgbWVyZ2VJbnRvRW50aXR5LFxuICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIG1lcmdlSW50b0VudGl0eVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgZW50aXR5IGZyb20gdGhlIGdpdmVuIHBsYWluIGphdmFzY3JpcHQgb2JqZWN0LiBJZiBlbnRpdHkgYWxyZWFkeSBleGlzdCBpbiB0aGUgZGF0YWJhc2UsIHRoZW5cbiAgICAgKiBpdCBsb2FkcyBpdCAoYW5kIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byBpdCksIHJlcGxhY2VzIGFsbCB2YWx1ZXMgd2l0aCB0aGUgbmV3IG9uZXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0XG4gICAgICogYW5kIHJldHVybnMgdGhpcyBuZXcgZW50aXR5LiBUaGlzIG5ldyBlbnRpdHkgaXMgYWN0dWFsbHkgYSBsb2FkZWQgZnJvbSB0aGUgZGIgZW50aXR5IHdpdGggYWxsIHByb3BlcnRpZXNcbiAgICAgKiByZXBsYWNlZCBmcm9tIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGFzeW5jIHByZWxvYWQ8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgZW50aXR5TGlrZTogRGVlcFBhcnRpYWw8RW50aXR5PixcbiAgICApOiBQcm9taXNlPEVudGl0eSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgY29uc3QgcGxhaW5PYmplY3RUb0RhdGFiYXNlRW50aXR5VHJhbnNmb3JtZXIgPVxuICAgICAgICAgICAgbmV3IFBsYWluT2JqZWN0VG9EYXRhYmFzZUVudGl0eVRyYW5zZm9ybWVyKHRoaXMuY29ubmVjdGlvbi5tYW5hZ2VyKVxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEVudGl0eSA9XG4gICAgICAgICAgICBhd2FpdCBwbGFpbk9iamVjdFRvRGF0YWJhc2VFbnRpdHlUcmFuc2Zvcm1lci50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgZW50aXR5TGlrZSxcbiAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgIClcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVkRW50aXR5KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVyZ2UoXG4gICAgICAgICAgICAgICAgZW50aXR5Q2xhc3MgYXMgYW55LFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkRW50aXR5IGFzIEVudGl0eSxcbiAgICAgICAgICAgICAgICBlbnRpdHlMaWtlLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyBhbGwgZ2l2ZW4gZW50aXRpZXMgaW4gdGhlIGRhdGFiYXNlLlxuICAgICAqIElmIGVudGl0aWVzIGRvIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgdGhlbiBpbnNlcnRzLCBvdGhlcndpc2UgdXBkYXRlcy5cbiAgICAgKi9cbiAgICBzYXZlPEVudGl0eT4oZW50aXRpZXM6IEVudGl0eVtdLCBvcHRpb25zPzogU2F2ZU9wdGlvbnMpOiBQcm9taXNlPEVudGl0eVtdPlxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgYWxsIGdpdmVuIGVudGl0aWVzIGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBJZiBlbnRpdGllcyBkbyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHRoZW4gaW5zZXJ0cywgb3RoZXJ3aXNlIHVwZGF0ZXMuXG4gICAgICovXG4gICAgc2F2ZTxFbnRpdHk+KGVudGl0eTogRW50aXR5LCBvcHRpb25zPzogU2F2ZU9wdGlvbnMpOiBQcm9taXNlPEVudGl0eT5cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGFsbCBnaXZlbiBlbnRpdGllcyBpbiB0aGUgZGF0YWJhc2UuXG4gICAgICogSWYgZW50aXRpZXMgZG8gbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB0aGVuIGluc2VydHMsIG90aGVyd2lzZSB1cGRhdGVzLlxuICAgICAqL1xuICAgIHNhdmU8RW50aXR5LCBUIGV4dGVuZHMgRGVlcFBhcnRpYWw8RW50aXR5Pj4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgZW50aXRpZXM6IFRbXSxcbiAgICAgICAgb3B0aW9uczogU2F2ZU9wdGlvbnMgJiB7IHJlbG9hZDogZmFsc2UgfSxcbiAgICApOiBQcm9taXNlPFRbXT5cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGFsbCBnaXZlbiBlbnRpdGllcyBpbiB0aGUgZGF0YWJhc2UuXG4gICAgICogSWYgZW50aXRpZXMgZG8gbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB0aGVuIGluc2VydHMsIG90aGVyd2lzZSB1cGRhdGVzLlxuICAgICAqL1xuICAgIHNhdmU8RW50aXR5LCBUIGV4dGVuZHMgRGVlcFBhcnRpYWw8RW50aXR5Pj4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgZW50aXRpZXM6IFRbXSxcbiAgICAgICAgb3B0aW9ucz86IFNhdmVPcHRpb25zLFxuICAgICk6IFByb21pc2U8KFQgJiBFbnRpdHkpW10+XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyBhIGdpdmVuIGVudGl0eSBpbiB0aGUgZGF0YWJhc2UuXG4gICAgICogSWYgZW50aXR5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB0aGVuIGluc2VydHMsIG90aGVyd2lzZSB1cGRhdGVzLlxuICAgICAqL1xuICAgIHNhdmU8RW50aXR5LCBUIGV4dGVuZHMgRGVlcFBhcnRpYWw8RW50aXR5Pj4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgZW50aXR5OiBULFxuICAgICAgICBvcHRpb25zOiBTYXZlT3B0aW9ucyAmIHsgcmVsb2FkOiBmYWxzZSB9LFxuICAgICk6IFByb21pc2U8VD5cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgZ2l2ZW4gZW50aXR5IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBJZiBlbnRpdHkgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHRoZW4gaW5zZXJ0cywgb3RoZXJ3aXNlIHVwZGF0ZXMuXG4gICAgICovXG4gICAgc2F2ZTxFbnRpdHksIFQgZXh0ZW5kcyBEZWVwUGFydGlhbDxFbnRpdHk+PihcbiAgICAgICAgdGFyZ2V0T3JFbnRpdHk6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBlbnRpdHk6IFQsXG4gICAgICAgIG9wdGlvbnM/OiBTYXZlT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPFQgJiBFbnRpdHk+XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyBhIGdpdmVuIGVudGl0eSBpbiB0aGUgZGF0YWJhc2UuXG4gICAgICovXG4gICAgc2F2ZTxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsLCBUIGV4dGVuZHMgRGVlcFBhcnRpYWw8RW50aXR5Pj4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiAoVCB8IFRbXSkgfCBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgbWF5YmVFbnRpdHlPck9wdGlvbnM/OiBUIHwgVFtdLFxuICAgICAgICBtYXliZU9wdGlvbnM/OiBTYXZlT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPFQgfCBUW10+IHtcblxuICAgICAgICBsZXQgdGFyZ2V0ID1cbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAodHlwZW9mIHRhcmdldE9yRW50aXR5ID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICAgICAgICBJbnN0YW5jZUNoZWNrZXIuaXNFbnRpdHlTY2hlbWEodGFyZ2V0T3JFbnRpdHkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRhcmdldE9yRW50aXR5ID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgID8gKHRhcmdldE9yRW50aXR5IGFzIEZ1bmN0aW9uIHwgc3RyaW5nKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IGVudGl0eTogVCB8IFRbXSA9IHRhcmdldFxuICAgICAgICAgICAgPyAobWF5YmVFbnRpdHlPck9wdGlvbnMgYXMgVCB8IFRbXSlcbiAgICAgICAgICAgIDogKHRhcmdldE9yRW50aXR5IGFzIFQgfCBUW10pXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0YXJnZXRcbiAgICAgICAgICAgID8gbWF5YmVPcHRpb25zXG4gICAgICAgICAgICA6IChtYXliZUVudGl0eU9yT3B0aW9ucyBhcyBTYXZlT3B0aW9ucylcblxuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzRW50aXR5U2NoZW1hKHRhcmdldCkpIHRhcmdldCA9IHRhcmdldC5vcHRpb25zLm5hbWVcblxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudGl0eSkgJiYgZW50aXR5Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50aXR5KVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBFbnRpdHlQZXJzaXN0RXhlY3V0b3IoXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24sXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyLFxuICAgICAgICAgICAgXCJzYXZlXCIsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApXG4gICAgICAgICAgICAuZXhlY3V0ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiBlbnRpdHkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGdpdmVuIGVudGl0eSBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICByZW1vdmU8RW50aXR5PihlbnRpdHk6IEVudGl0eSwgb3B0aW9ucz86IFJlbW92ZU9wdGlvbnMpOiBQcm9taXNlPEVudGl0eT5cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBnaXZlbiBlbnRpdHkgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAgICovXG4gICAgcmVtb3ZlPEVudGl0eT4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgZW50aXR5OiBFbnRpdHksXG4gICAgICAgIG9wdGlvbnM/OiBSZW1vdmVPcHRpb25zLFxuICAgICk6IFByb21pc2U8RW50aXR5PlxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGdpdmVuIGVudGl0eSBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICByZW1vdmU8RW50aXR5PihlbnRpdHk6IEVudGl0eVtdLCBvcHRpb25zPzogUmVtb3ZlT3B0aW9ucyk6IFByb21pc2U8RW50aXR5PlxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGdpdmVuIGVudGl0eSBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICByZW1vdmU8RW50aXR5PihcbiAgICAgICAgdGFyZ2V0T3JFbnRpdHk6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBlbnRpdHk6IEVudGl0eVtdLFxuICAgICAgICBvcHRpb25zPzogUmVtb3ZlT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEVudGl0eVtdPlxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIGdpdmVuIGVudGl0eSBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICAgKi9cbiAgICByZW1vdmU8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiAoRW50aXR5IHwgRW50aXR5W10pIHwgRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIG1heWJlRW50aXR5T3JPcHRpb25zPzogRW50aXR5IHwgRW50aXR5W10sXG4gICAgICAgIG1heWJlT3B0aW9ucz86IFJlbW92ZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxFbnRpdHkgfCBFbnRpdHlbXT4ge1xuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9XG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0YXJnZXRPckVudGl0eSA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgSW5zdGFuY2VDaGVja2VyLmlzRW50aXR5U2NoZW1hKHRhcmdldE9yRW50aXR5KSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0YXJnZXRPckVudGl0eSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICA/ICh0YXJnZXRPckVudGl0eSBhcyBGdW5jdGlvbiB8IHN0cmluZylcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBlbnRpdHk6IEVudGl0eSB8IEVudGl0eVtdID0gdGFyZ2V0XG4gICAgICAgICAgICA/IChtYXliZUVudGl0eU9yT3B0aW9ucyBhcyBFbnRpdHkgfCBFbnRpdHlbXSlcbiAgICAgICAgICAgIDogKHRhcmdldE9yRW50aXR5IGFzIEVudGl0eSB8IEVudGl0eVtdKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGFyZ2V0XG4gICAgICAgICAgICA/IG1heWJlT3B0aW9uc1xuICAgICAgICAgICAgOiAobWF5YmVFbnRpdHlPck9wdGlvbnMgYXMgU2F2ZU9wdGlvbnMpXG5cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRpdHkpICYmIGVudGl0eS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudGl0eSlcblxuXG4gICAgICAgIHJldHVybiBuZXcgRW50aXR5UGVyc2lzdEV4ZWN1dG9yKFxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLFxuICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lcixcbiAgICAgICAgICAgIFwicmVtb3ZlXCIsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApXG4gICAgICAgICAgICAuZXhlY3V0ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiBlbnRpdHkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjb3JkcyB0aGUgZGVsZXRlIGRhdGUgb2YgYWxsIGdpdmVuIGVudGl0aWVzLlxuICAgICAqL1xuICAgIHNvZnRSZW1vdmU8RW50aXR5PihcbiAgICAgICAgZW50aXRpZXM6IEVudGl0eVtdLFxuICAgICAgICBvcHRpb25zPzogU2F2ZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxFbnRpdHlbXT5cblxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgdGhlIGRlbGV0ZSBkYXRlIG9mIGEgZ2l2ZW4gZW50aXR5LlxuICAgICAqL1xuICAgIHNvZnRSZW1vdmU8RW50aXR5PihlbnRpdHk6IEVudGl0eSwgb3B0aW9ucz86IFNhdmVPcHRpb25zKTogUHJvbWlzZTxFbnRpdHk+XG5cbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIHRoZSBkZWxldGUgZGF0ZSBvZiBhbGwgZ2l2ZW4gZW50aXRpZXMuXG4gICAgICovXG4gICAgc29mdFJlbW92ZTxFbnRpdHksIFQgZXh0ZW5kcyBEZWVwUGFydGlhbDxFbnRpdHk+PihcbiAgICAgICAgdGFyZ2V0T3JFbnRpdHk6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBlbnRpdGllczogVFtdLFxuICAgICAgICBvcHRpb25zPzogU2F2ZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxUW10+XG5cbiAgICAvKipcbiAgICAgKiBSZWNvcmRzIHRoZSBkZWxldGUgZGF0ZSBvZiBhIGdpdmVuIGVudGl0eS5cbiAgICAgKi9cbiAgICBzb2Z0UmVtb3ZlPEVudGl0eSwgVCBleHRlbmRzIERlZXBQYXJ0aWFsPEVudGl0eT4+KFxuICAgICAgICB0YXJnZXRPckVudGl0eTogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIGVudGl0eTogVCxcbiAgICAgICAgb3B0aW9ucz86IFNhdmVPcHRpb25zLFxuICAgICk6IFByb21pc2U8VD5cblxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgdGhlIGRlbGV0ZSBkYXRlIG9mIG9uZSBvciBtYW55IGdpdmVuIGVudGl0aWVzLlxuICAgICAqL1xuICAgIHNvZnRSZW1vdmU8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbCwgVCBleHRlbmRzIERlZXBQYXJ0aWFsPEVudGl0eT4+KFxuICAgICAgICB0YXJnZXRPckVudGl0eTogKFQgfCBUW10pIHwgRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIG1heWJlRW50aXR5T3JPcHRpb25zPzogVCB8IFRbXSxcbiAgICAgICAgbWF5YmVPcHRpb25zPzogU2F2ZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxUIHwgVFtdPiB7XG5cbiAgICAgICAgbGV0IHRhcmdldCA9XG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgKHR5cGVvZiB0YXJnZXRPckVudGl0eSA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgICAgICAgSW5zdGFuY2VDaGVja2VyLmlzRW50aXR5U2NoZW1hKHRhcmdldE9yRW50aXR5KSB8fFxuICAgICAgICAgICAgICAgIHR5cGVvZiB0YXJnZXRPckVudGl0eSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICA/ICh0YXJnZXRPckVudGl0eSBhcyBGdW5jdGlvbiB8IHN0cmluZylcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBlbnRpdHk6IFQgfCBUW10gPSB0YXJnZXRcbiAgICAgICAgICAgID8gKG1heWJlRW50aXR5T3JPcHRpb25zIGFzIFQgfCBUW10pXG4gICAgICAgICAgICA6ICh0YXJnZXRPckVudGl0eSBhcyBUIHwgVFtdKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGFyZ2V0XG4gICAgICAgICAgICA/IG1heWJlT3B0aW9uc1xuICAgICAgICAgICAgOiAobWF5YmVFbnRpdHlPck9wdGlvbnMgYXMgU2F2ZU9wdGlvbnMpXG5cbiAgICAgICAgaWYgKEluc3RhbmNlQ2hlY2tlci5pc0VudGl0eVNjaGVtYSh0YXJnZXQpKSB0YXJnZXQgPSB0YXJnZXQub3B0aW9ucy5uYW1lXG5cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRpdHkpICYmIGVudGl0eS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVudGl0eSlcblxuXG4gICAgICAgIHJldHVybiBuZXcgRW50aXR5UGVyc2lzdEV4ZWN1dG9yKFxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLFxuICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lcixcbiAgICAgICAgICAgIFwic29mdC1yZW1vdmVcIixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIClcbiAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IGVudGl0eSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWNvdmVycyBhbGwgZ2l2ZW4gZW50aXRpZXMuXG4gICAgICovXG4gICAgcmVjb3ZlcjxFbnRpdHk+KFxuICAgICAgICBlbnRpdGllczogRW50aXR5W10sXG4gICAgICAgIG9wdGlvbnM/OiBTYXZlT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEVudGl0eVtdPlxuXG4gICAgLyoqXG4gICAgICogUmVjb3ZlcnMgYSBnaXZlbiBlbnRpdHkuXG4gICAgICovXG4gICAgcmVjb3ZlcjxFbnRpdHk+KGVudGl0eTogRW50aXR5LCBvcHRpb25zPzogU2F2ZU9wdGlvbnMpOiBQcm9taXNlPEVudGl0eT5cblxuICAgIC8qKlxuICAgICAqIFJlY292ZXJzIGFsbCBnaXZlbiBlbnRpdGllcy5cbiAgICAgKi9cbiAgICByZWNvdmVyPEVudGl0eSwgVCBleHRlbmRzIERlZXBQYXJ0aWFsPEVudGl0eT4+KFxuICAgICAgICB0YXJnZXRPckVudGl0eTogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIGVudGl0aWVzOiBUW10sXG4gICAgICAgIG9wdGlvbnM/OiBTYXZlT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPFRbXT5cblxuICAgIC8qKlxuICAgICAqIFJlY292ZXJzIGEgZ2l2ZW4gZW50aXR5LlxuICAgICAqL1xuICAgIHJlY292ZXI8RW50aXR5LCBUIGV4dGVuZHMgRGVlcFBhcnRpYWw8RW50aXR5Pj4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgZW50aXR5OiBULFxuICAgICAgICBvcHRpb25zPzogU2F2ZU9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxUPlxuXG4gICAgLyoqXG4gICAgICogUmVjb3ZlcnMgb25lIG9yIG1hbnkgZ2l2ZW4gZW50aXRpZXMuXG4gICAgICovXG4gICAgcmVjb3ZlcjxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsLCBUIGV4dGVuZHMgRGVlcFBhcnRpYWw8RW50aXR5Pj4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiAoVCB8IFRbXSkgfCBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgbWF5YmVFbnRpdHlPck9wdGlvbnM/OiBUIHwgVFtdLFxuICAgICAgICBtYXliZU9wdGlvbnM/OiBTYXZlT3B0aW9ucyxcbiAgICApOiBQcm9taXNlPFQgfCBUW10+IHtcblxuICAgICAgICBsZXQgdGFyZ2V0ID1cbiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgICAodHlwZW9mIHRhcmdldE9yRW50aXR5ID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgICAgICAgICBJbnN0YW5jZUNoZWNrZXIuaXNFbnRpdHlTY2hlbWEodGFyZ2V0T3JFbnRpdHkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRhcmdldE9yRW50aXR5ID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgID8gKHRhcmdldE9yRW50aXR5IGFzIEZ1bmN0aW9uIHwgc3RyaW5nKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IGVudGl0eTogVCB8IFRbXSA9IHRhcmdldFxuICAgICAgICAgICAgPyAobWF5YmVFbnRpdHlPck9wdGlvbnMgYXMgVCB8IFRbXSlcbiAgICAgICAgICAgIDogKHRhcmdldE9yRW50aXR5IGFzIFQgfCBUW10pXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0YXJnZXRcbiAgICAgICAgICAgID8gbWF5YmVPcHRpb25zXG4gICAgICAgICAgICA6IChtYXliZUVudGl0eU9yT3B0aW9ucyBhcyBTYXZlT3B0aW9ucylcblxuICAgICAgICBpZiAoSW5zdGFuY2VDaGVja2VyLmlzRW50aXR5U2NoZW1hKHRhcmdldCkpIHRhcmdldCA9IHRhcmdldC5vcHRpb25zLm5hbWVcblxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVudGl0eSkgJiYgZW50aXR5Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50aXR5KVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBFbnRpdHlQZXJzaXN0RXhlY3V0b3IoXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24sXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UnVubmVyLFxuICAgICAgICAgICAgXCJyZWNvdmVyXCIsXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApXG4gICAgICAgICAgICAuZXhlY3V0ZSgpXG4gICAgICAgICAgICAudGhlbigoKSA9PiBlbnRpdHkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0cyBhIGdpdmVuIGVudGl0eSBpbnRvIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBVbmxpa2Ugc2F2ZSBtZXRob2QgZXhlY3V0ZXMgYSBwcmltaXRpdmUgb3BlcmF0aW9uIHdpdGhvdXQgY2FzY2FkZXMsIHJlbGF0aW9ucyBhbmQgb3RoZXIgb3BlcmF0aW9ucyBpbmNsdWRlZC5cbiAgICAgKiBFeGVjdXRlcyBmYXN0IGFuZCBlZmZpY2llbnQgSU5TRVJUIHF1ZXJ5LlxuICAgICAqIERvZXMgbm90IGNoZWNrIGlmIGVudGl0eSBleGlzdCBpbiB0aGUgZGF0YWJhc2UsIHNvIHF1ZXJ5IHdpbGwgZmFpbCBpZiBkdXBsaWNhdGUgZW50aXR5IGlzIGJlaW5nIGluc2VydGVkLlxuICAgICAqIFlvdSBjYW4gZXhlY3V0ZSBidWxrIGluc2VydHMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAgICovXG4gICAgYXN5bmMgaW5zZXJ0PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICB0YXJnZXQ6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBlbnRpdHk6XG4gICAgICAgICAgICB8IFF1ZXJ5RGVlcFBhcnRpYWxFbnRpdHk8RW50aXR5PlxuICAgICAgICAgICAgfCBRdWVyeURlZXBQYXJ0aWFsRW50aXR5PEVudGl0eT5bXSxcbiAgICApOiBQcm9taXNlPEluc2VydFJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVyeUJ1aWxkZXIoKVxuICAgICAgICAgICAgLmluc2VydCgpXG4gICAgICAgICAgICAuaW50byh0YXJnZXQpXG4gICAgICAgICAgICAudmFsdWVzKGVudGl0eSlcbiAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICB9XG5cbiAgICBhc3luYyB1cHNlcnQ8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIHRhcmdldDogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIGVudGl0eU9yRW50aXRpZXM6XG4gICAgICAgICAgICB8IFF1ZXJ5RGVlcFBhcnRpYWxFbnRpdHk8RW50aXR5PlxuICAgICAgICAgICAgfCBRdWVyeURlZXBQYXJ0aWFsRW50aXR5PEVudGl0eT5bXSxcbiAgICAgICAgY29uZmxpY3RQYXRoc09yT3B0aW9uczogc3RyaW5nW10gfCBVcHNlcnRPcHRpb25zPEVudGl0eT4sXG4gICAgKTogUHJvbWlzZTxJbnNlcnRSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEodGFyZ2V0KVxuXG4gICAgICAgIGxldCBvcHRpb25zOiBVcHNlcnRPcHRpb25zPEVudGl0eT5cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25mbGljdFBhdGhzT3JPcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBjb25mbGljdFBhdGhzOiBjb25mbGljdFBhdGhzT3JPcHRpb25zLFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGNvbmZsaWN0UGF0aHNPck9wdGlvbnNcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbnRpdGllczogUXVlcnlEZWVwUGFydGlhbEVudGl0eTxFbnRpdHk+W11cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZW50aXR5T3JFbnRpdGllcykpIHtcbiAgICAgICAgICAgIGVudGl0aWVzID0gW2VudGl0eU9yRW50aXRpZXNdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnRpdGllcyA9IGVudGl0eU9yRW50aXRpZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZsaWN0Q29sdW1ucyA9IG1ldGFkYXRhLm1hcFByb3BlcnR5UGF0aHNUb0NvbHVtbnMoXG4gICAgICAgICAgICBvcHRpb25zLmNvbmZsaWN0UGF0aHMsXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBvdmVyd3JpdGVDb2x1bW5zID0gbWV0YWRhdGEuY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgICAoY29sKSA9PlxuICAgICAgICAgICAgICAgICFjb25mbGljdENvbHVtbnMuaW5jbHVkZXMoY29sKSAmJlxuICAgICAgICAgICAgICAgIGVudGl0aWVzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChlbnRpdHkpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY29sLmdldEVudGl0eVZhbHVlKGVudGl0eSkgIT09IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAgICAgICAuaW5zZXJ0KClcbiAgICAgICAgICAgIC5pbnRvKHRhcmdldClcbiAgICAgICAgICAgIC52YWx1ZXMoZW50aXRpZXMpXG4gICAgICAgICAgICAub3JVcGRhdGUoXG4gICAgICAgICAgICAgICAgWy4uLmNvbmZsaWN0Q29sdW1ucywgLi4ub3ZlcndyaXRlQ29sdW1uc10ubWFwKFxuICAgICAgICAgICAgICAgICAgICAoY29sKSA9PiBjb2wuZGF0YWJhc2VOYW1lLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgY29uZmxpY3RDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF0YWJhc2VOYW1lKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNraXBVcGRhdGVJZk5vVmFsdWVzQ2hhbmdlZDpcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2tpcFVwZGF0ZUlmTm9WYWx1ZXNDaGFuZ2VkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZXhlY3V0ZSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBlbnRpdHkgcGFydGlhbGx5LiBFbnRpdHkgY2FuIGJlIGZvdW5kIGJ5IGEgZ2l2ZW4gY29uZGl0aW9uKHMpLlxuICAgICAqIFVubGlrZSBzYXZlIG1ldGhvZCBleGVjdXRlcyBhIHByaW1pdGl2ZSBvcGVyYXRpb24gd2l0aG91dCBjYXNjYWRlcywgcmVsYXRpb25zIGFuZCBvdGhlciBvcGVyYXRpb25zIGluY2x1ZGVkLlxuICAgICAqIEV4ZWN1dGVzIGZhc3QgYW5kIGVmZmljaWVudCBVUERBVEUgcXVlcnkuXG4gICAgICogRG9lcyBub3QgY2hlY2sgaWYgZW50aXR5IGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBDb25kaXRpb24ocykgY2Fubm90IGJlIGVtcHR5LlxuICAgICAqL1xuICAgIHVwZGF0ZTxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgdGFyZ2V0OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgY3JpdGVyaWE6XG4gICAgICAgICAgICB8IHN0cmluZ1xuICAgICAgICAgICAgfCBzdHJpbmdbXVxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgIHwgbnVtYmVyW11cbiAgICAgICAgICAgIHwgRGF0ZVxuICAgICAgICAgICAgfCBEYXRlW11cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICAgICAgICB8IGFueSxcbiAgICAgICAgcGFydGlhbEVudGl0eTogUXVlcnlEZWVwUGFydGlhbEVudGl0eTxFbnRpdHk+LFxuICAgICk6IFByb21pc2U8VXBkYXRlUmVzdWx0PiB7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY3JpdGVyaWEgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgY3JpdGVyaWEgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGNyaXRlcmlhID09PSBcIlwiIHx8XG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheShjcml0ZXJpYSkgJiYgY3JpdGVyaWEubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICAgICAgICBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRW1wdHkgY3JpdGVyaWEocykgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGUgdXBkYXRlIG1ldGhvZC5gLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgY3JpdGVyaWEgPT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjcml0ZXJpYSA9PT0gXCJudW1iZXJcIiB8fFxuICAgICAgICAgICAgY3JpdGVyaWEgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGNyaXRlcmlhKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSh0YXJnZXQpXG4gICAgICAgICAgICAgICAgLnNldChwYXJ0aWFsRW50aXR5KVxuICAgICAgICAgICAgICAgIC53aGVyZUluSWRzKGNyaXRlcmlhKVxuICAgICAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZSh0YXJnZXQpXG4gICAgICAgICAgICAgICAgLnNldChwYXJ0aWFsRW50aXR5KVxuICAgICAgICAgICAgICAgIC53aGVyZShjcml0ZXJpYSlcbiAgICAgICAgICAgICAgICAuZXhlY3V0ZSgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGVzIGVudGl0aWVzIGJ5IGEgZ2l2ZW4gY29uZGl0aW9uKHMpLlxuICAgICAqIFVubGlrZSBzYXZlIG1ldGhvZCBleGVjdXRlcyBhIHByaW1pdGl2ZSBvcGVyYXRpb24gd2l0aG91dCBjYXNjYWRlcywgcmVsYXRpb25zIGFuZCBvdGhlciBvcGVyYXRpb25zIGluY2x1ZGVkLlxuICAgICAqIEV4ZWN1dGVzIGZhc3QgYW5kIGVmZmljaWVudCBERUxFVEUgcXVlcnkuXG4gICAgICogRG9lcyBub3QgY2hlY2sgaWYgZW50aXR5IGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBDb25kaXRpb24ocykgY2Fubm90IGJlIGVtcHR5LlxuICAgICAqL1xuICAgIGRlbGV0ZTxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgdGFyZ2V0T3JFbnRpdHk6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBjcml0ZXJpYTpcbiAgICAgICAgICAgIHwgc3RyaW5nXG4gICAgICAgICAgICB8IHN0cmluZ1tdXG4gICAgICAgICAgICB8IG51bWJlclxuICAgICAgICAgICAgfCBudW1iZXJbXVxuICAgICAgICAgICAgfCBEYXRlXG4gICAgICAgICAgICB8IERhdGVbXVxuICAgICAgICAgICAgfCBPYmplY3RJRFxuICAgICAgICAgICAgfCBPYmplY3RJRFtdXG4gICAgICAgICAgICB8IGFueSxcbiAgICApOiBQcm9taXNlPERlbGV0ZVJlc3VsdD4ge1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNyaXRlcmlhID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIGNyaXRlcmlhID09PSBudWxsIHx8XG4gICAgICAgICAgICBjcml0ZXJpYSA9PT0gXCJcIiB8fFxuICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3JpdGVyaWEpICYmIGNyaXRlcmlhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICAgICAgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVtcHR5IGNyaXRlcmlhKHMpIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhlIGRlbGV0ZSBtZXRob2QuYCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGNyaXRlcmlhID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICB0eXBlb2YgY3JpdGVyaWEgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgIGNyaXRlcmlhIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheShjcml0ZXJpYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVyeUJ1aWxkZXIoKVxuICAgICAgICAgICAgICAgIC5kZWxldGUoKVxuICAgICAgICAgICAgICAgIC5mcm9tKHRhcmdldE9yRW50aXR5KVxuICAgICAgICAgICAgICAgIC53aGVyZUluSWRzKGNyaXRlcmlhKVxuICAgICAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLmRlbGV0ZSgpXG4gICAgICAgICAgICAgICAgLmZyb20odGFyZ2V0T3JFbnRpdHkpXG4gICAgICAgICAgICAgICAgLndoZXJlKGNyaXRlcmlhKVxuICAgICAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY29yZHMgdGhlIGRlbGV0ZSBkYXRlIG9mIGVudGl0aWVzIGJ5IGEgZ2l2ZW4gY29uZGl0aW9uKHMpLlxuICAgICAqIFVubGlrZSBzYXZlIG1ldGhvZCBleGVjdXRlcyBhIHByaW1pdGl2ZSBvcGVyYXRpb24gd2l0aG91dCBjYXNjYWRlcywgcmVsYXRpb25zIGFuZCBvdGhlciBvcGVyYXRpb25zIGluY2x1ZGVkLlxuICAgICAqIEV4ZWN1dGVzIGZhc3QgYW5kIGVmZmljaWVudCBERUxFVEUgcXVlcnkuXG4gICAgICogRG9lcyBub3QgY2hlY2sgaWYgZW50aXR5IGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBDb25kaXRpb24ocykgY2Fubm90IGJlIGVtcHR5LlxuICAgICAqL1xuICAgIHNvZnREZWxldGU8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgY3JpdGVyaWE6XG4gICAgICAgICAgICB8IHN0cmluZ1xuICAgICAgICAgICAgfCBzdHJpbmdbXVxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgIHwgbnVtYmVyW11cbiAgICAgICAgICAgIHwgRGF0ZVxuICAgICAgICAgICAgfCBEYXRlW11cbiAgICAgICAgICAgIHwgT2JqZWN0SURcbiAgICAgICAgICAgIHwgT2JqZWN0SURbXVxuICAgICAgICAgICAgfCBhbnksXG4gICAgKTogUHJvbWlzZTxVcGRhdGVSZXN1bHQ+IHtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjcml0ZXJpYSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBjcml0ZXJpYSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3JpdGVyaWEgPT09IFwiXCIgfHxcbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGNyaXRlcmlhKSAmJiBjcml0ZXJpYS5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFbXB0eSBjcml0ZXJpYShzKSBhcmUgbm90IGFsbG93ZWQgZm9yIHRoZSBkZWxldGUgbWV0aG9kLmAsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjcml0ZXJpYSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGNyaXRlcmlhID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICBjcml0ZXJpYSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY3JpdGVyaWEpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyKClcbiAgICAgICAgICAgICAgICAuc29mdERlbGV0ZSgpXG4gICAgICAgICAgICAgICAgLmZyb20odGFyZ2V0T3JFbnRpdHkpXG4gICAgICAgICAgICAgICAgLndoZXJlSW5JZHMoY3JpdGVyaWEpXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyKClcbiAgICAgICAgICAgICAgICAuc29mdERlbGV0ZSgpXG4gICAgICAgICAgICAgICAgLmZyb20odGFyZ2V0T3JFbnRpdHkpXG4gICAgICAgICAgICAgICAgLndoZXJlKGNyaXRlcmlhKVxuICAgICAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGVudGl0aWVzIGJ5IGEgZ2l2ZW4gY29uZGl0aW9uKHMpLlxuICAgICAqIFVubGlrZSBzYXZlIG1ldGhvZCBleGVjdXRlcyBhIHByaW1pdGl2ZSBvcGVyYXRpb24gd2l0aG91dCBjYXNjYWRlcywgcmVsYXRpb25zIGFuZCBvdGhlciBvcGVyYXRpb25zIGluY2x1ZGVkLlxuICAgICAqIEV4ZWN1dGVzIGZhc3QgYW5kIGVmZmljaWVudCBERUxFVEUgcXVlcnkuXG4gICAgICogRG9lcyBub3QgY2hlY2sgaWYgZW50aXR5IGV4aXN0IGluIHRoZSBkYXRhYmFzZS5cbiAgICAgKiBDb25kaXRpb24ocykgY2Fubm90IGJlIGVtcHR5LlxuICAgICAqL1xuICAgIHJlc3RvcmU8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIHRhcmdldE9yRW50aXR5OiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgY3JpdGVyaWE6XG4gICAgICAgICAgICB8IHN0cmluZ1xuICAgICAgICAgICAgfCBzdHJpbmdbXVxuICAgICAgICAgICAgfCBudW1iZXJcbiAgICAgICAgICAgIHwgbnVtYmVyW11cbiAgICAgICAgICAgIHwgRGF0ZVxuICAgICAgICAgICAgfCBEYXRlW11cbiAgICAgICAgICAgIHwgT2JqZWN0SURcbiAgICAgICAgICAgIHwgT2JqZWN0SURbXVxuICAgICAgICAgICAgfCBhbnksXG4gICAgKTogUHJvbWlzZTxVcGRhdGVSZXN1bHQ+IHtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjcml0ZXJpYSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICBjcml0ZXJpYSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgY3JpdGVyaWEgPT09IFwiXCIgfHxcbiAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGNyaXRlcmlhKSAmJiBjcml0ZXJpYS5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBUeXBlT1JNRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFbXB0eSBjcml0ZXJpYShzKSBhcmUgbm90IGFsbG93ZWQgZm9yIHRoZSBkZWxldGUgbWV0aG9kLmAsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBjcml0ZXJpYSA9PT0gXCJzdHJpbmdcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGNyaXRlcmlhID09PSBcIm51bWJlclwiIHx8XG4gICAgICAgICAgICBjcml0ZXJpYSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY3JpdGVyaWEpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyKClcbiAgICAgICAgICAgICAgICAucmVzdG9yZSgpXG4gICAgICAgICAgICAgICAgLmZyb20odGFyZ2V0T3JFbnRpdHkpXG4gICAgICAgICAgICAgICAgLndoZXJlSW5JZHMoY3JpdGVyaWEpXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyKClcbiAgICAgICAgICAgICAgICAucmVzdG9yZSgpXG4gICAgICAgICAgICAgICAgLmZyb20odGFyZ2V0T3JFbnRpdHkpXG4gICAgICAgICAgICAgICAgLndoZXJlKGNyaXRlcmlhKVxuICAgICAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvdW50cyBlbnRpdGllcyB0aGF0IG1hdGNoIGdpdmVuIG9wdGlvbnMuXG4gICAgICogVXNlZnVsIGZvciBwYWdpbmF0aW9uLlxuICAgICAqL1xuICAgIGNvdW50PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnM8RW50aXR5PixcbiAgICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyKFxuICAgICAgICAgICAgZW50aXR5Q2xhc3MsXG4gICAgICAgICAgICBGaW5kT3B0aW9uc1V0aWxzLmV4dHJhY3RGaW5kTWFueU9wdGlvbnNBbGlhcyhvcHRpb25zKSB8fFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLm5hbWUsXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXRGaW5kT3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgLmdldENvdW50KClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3VudHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBjb25kaXRpb25zLlxuICAgICAqIFVzZWZ1bCBmb3IgcGFnaW5hdGlvbi5cbiAgICAgKi9cbiAgICBjb3VudEJ5PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIHdoZXJlOiBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT4gfCBGaW5kT3B0aW9uc1doZXJlPEVudGl0eT5bXSxcbiAgICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyKGVudGl0eUNsYXNzLCBtZXRhZGF0YS5uYW1lKVxuICAgICAgICAgICAgLnNldEZpbmRPcHRpb25zKHsgd2hlcmUgfSlcbiAgICAgICAgICAgIC5nZXRDb3VudCgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBmaW5kIG9wdGlvbnMuXG4gICAgICovXG4gICAgYXN5bmMgZmluZDxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgZW50aXR5Q2xhc3M6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBvcHRpb25zPzogRmluZE1hbnlPcHRpb25zPEVudGl0eT4sXG4gICAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyPEVudGl0eT4oXG4gICAgICAgICAgICBlbnRpdHlDbGFzcyBhcyBhbnksXG4gICAgICAgICAgICBGaW5kT3B0aW9uc1V0aWxzLmV4dHJhY3RGaW5kTWFueU9wdGlvbnNBbGlhcyhvcHRpb25zKSB8fFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLm5hbWUsXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXRGaW5kT3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgLmdldE1hbnkoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGVudGl0aWVzIHRoYXQgbWF0Y2ggZ2l2ZW4gZmluZCBvcHRpb25zLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRCeTxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgZW50aXR5Q2xhc3M6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICB3aGVyZTogRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+IHwgRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+W10sXG4gICAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyPEVudGl0eT4oXG4gICAgICAgICAgICBlbnRpdHlDbGFzcyBhcyBhbnksXG4gICAgICAgICAgICBtZXRhZGF0YS5uYW1lLFxuICAgICAgICApXG4gICAgICAgICAgICAuc2V0RmluZE9wdGlvbnMoeyB3aGVyZTogd2hlcmUgfSlcbiAgICAgICAgICAgIC5nZXRNYW55KClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBlbnRpdGllcyB0aGF0IG1hdGNoIGdpdmVuIGZpbmQgb3B0aW9ucy5cbiAgICAgKiBBbHNvIGNvdW50cyBhbGwgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBjb25kaXRpb25zLFxuICAgICAqIGJ1dCBpZ25vcmVzIHBhZ2luYXRpb24gc2V0dGluZ3MgKGZyb20gYW5kIHRha2Ugb3B0aW9ucykuXG4gICAgICovXG4gICAgZmluZEFuZENvdW50PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnM8RW50aXR5PixcbiAgICApOiBQcm9taXNlPFtFbnRpdHlbXSwgbnVtYmVyXT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyPEVudGl0eT4oXG4gICAgICAgICAgICBlbnRpdHlDbGFzcyBhcyBhbnksXG4gICAgICAgICAgICBGaW5kT3B0aW9uc1V0aWxzLmV4dHJhY3RGaW5kTWFueU9wdGlvbnNBbGlhcyhvcHRpb25zKSB8fFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLm5hbWUsXG4gICAgICAgIClcbiAgICAgICAgICAgIC5zZXRGaW5kT3B0aW9ucyhvcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgLmdldE1hbnlBbmRDb3VudCgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgZW50aXRpZXMgdGhhdCBtYXRjaCBnaXZlbiBXSEVSRSBjb25kaXRpb25zLlxuICAgICAqIEFsc28gY291bnRzIGFsbCBlbnRpdGllcyB0aGF0IG1hdGNoIGdpdmVuIGNvbmRpdGlvbnMsXG4gICAgICogYnV0IGlnbm9yZXMgcGFnaW5hdGlvbiBzZXR0aW5ncyAoZnJvbSBhbmQgdGFrZSBvcHRpb25zKS5cbiAgICAgKi9cbiAgICBmaW5kQW5kQ291bnRCeTxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgZW50aXR5Q2xhc3M6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICB3aGVyZTogRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+IHwgRmluZE9wdGlvbnNXaGVyZTxFbnRpdHk+W10sXG4gICAgKTogUHJvbWlzZTxbRW50aXR5W10sIG51bWJlcl0+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEoZW50aXR5Q2xhc3MpXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHk+KFxuICAgICAgICAgICAgZW50aXR5Q2xhc3MgYXMgYW55LFxuICAgICAgICAgICAgbWV0YWRhdGEubmFtZSxcbiAgICAgICAgKVxuICAgICAgICAgICAgLnNldEZpbmRPcHRpb25zKHsgd2hlcmUgfSlcbiAgICAgICAgICAgIC5nZXRNYW55QW5kQ291bnQoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGVudGl0aWVzIHdpdGggaWRzLlxuICAgICAqIE9wdGlvbmFsbHkgZmluZCBvcHRpb25zIG9yIGNvbmRpdGlvbnMgY2FuIGJlIGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgYGZpbmRCeWAgbWV0aG9kIGluc3RlYWQgaW4gY29uanVuY3Rpb24gd2l0aCBgSW5gIG9wZXJhdG9yLCBmb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqIC5maW5kQnkoe1xuICAgICAqICAgICBpZDogSW4oWzEsIDIsIDNdKVxuICAgICAqIH0pXG4gICAgICovXG4gICAgYXN5bmMgZmluZEJ5SWRzPEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIGlkczogYW55W10sXG4gICAgKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuXG4gICAgICAgIGlmICghaWRzLmxlbmd0aCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSlcblxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUXVlcnlCdWlsZGVyPEVudGl0eT4oXG4gICAgICAgICAgICBlbnRpdHlDbGFzcyBhcyBhbnksXG4gICAgICAgICAgICBtZXRhZGF0YS5uYW1lLFxuICAgICAgICApXG4gICAgICAgICAgICAuYW5kV2hlcmVJbklkcyhpZHMpXG4gICAgICAgICAgICAuZ2V0TWFueSgpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZHMgZmlyc3QgZW50aXR5IGJ5IGEgZ2l2ZW4gZmluZCBvcHRpb25zLlxuICAgICAqIElmIGVudGl0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybnMgbnVsbC5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kT25lPEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIG9wdGlvbnM6IEZpbmRPbmVPcHRpb25zPEVudGl0eT4sXG4gICAgKTogUHJvbWlzZTxFbnRpdHkgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jb25uZWN0aW9uLmdldE1ldGFkYXRhKGVudGl0eUNsYXNzKVxuXG5cbiAgICAgICAgbGV0IGFsaWFzOiBzdHJpbmcgPSBtZXRhZGF0YS5uYW1lXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuam9pbikge1xuICAgICAgICAgICAgYWxpYXMgPSBvcHRpb25zLmpvaW4uYWxpYXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy53aGVyZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBZb3UgbXVzdCBwcm92aWRlIHNlbGVjdGlvbiBjb25kaXRpb25zIGluIG9yZGVyIHRvIGZpbmQgYSBzaW5nbGUgcm93LmAsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHk+KGVudGl0eUNsYXNzLCBhbGlhcylcbiAgICAgICAgICAgIC5zZXRGaW5kT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB0YWtlOiAxLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5nZXRPbmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGZpcnN0IGVudGl0eSB0aGF0IG1hdGNoZXMgZ2l2ZW4gd2hlcmUgY29uZGl0aW9uLlxuICAgICAqIElmIGVudGl0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSAtIHJldHVybnMgbnVsbC5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kT25lQnk8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgd2hlcmU6IEZpbmRPcHRpb25zV2hlcmU8RW50aXR5PiB8IEZpbmRPcHRpb25zV2hlcmU8RW50aXR5PltdLFxuICAgICk6IFByb21pc2U8RW50aXR5IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcblxuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHk+KGVudGl0eUNsYXNzLCBtZXRhZGF0YS5uYW1lKVxuICAgICAgICAgICAgLnNldEZpbmRPcHRpb25zKHtcbiAgICAgICAgICAgICAgICB3aGVyZSxcbiAgICAgICAgICAgICAgICB0YWtlOiAxLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5nZXRPbmUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGZpcnN0IGVudGl0eSB0aGF0IG1hdGNoZXMgZ2l2ZW4gaWQuXG4gICAgICogSWYgZW50aXR5IHdhcyBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIC0gcmV0dXJucyBudWxsLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGBmaW5kT25lQnlgIG1ldGhvZCBpbnN0ZWFkIGluIGNvbmp1bmN0aW9uIHdpdGggYEluYCBvcGVyYXRvciwgZm9yIGV4YW1wbGU6XG4gICAgICpcbiAgICAgKiAuZmluZE9uZUJ5KHtcbiAgICAgKiAgICAgaWQ6IDEgLy8gd2hlcmUgXCJpZFwiIGlzIHlvdXIgcHJpbWFyeSBjb2x1bW4gbmFtZVxuICAgICAqIH0pXG4gICAgICovXG4gICAgYXN5bmMgZmluZE9uZUJ5SWQ8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgaWQ6IG51bWJlciB8IHN0cmluZyB8IERhdGUgfCBPYmplY3RJRCxcbiAgICApOiBQcm9taXNlPEVudGl0eSB8IG51bGw+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEoZW50aXR5Q2xhc3MpXG5cblxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVyeUJ1aWxkZXI8RW50aXR5PihlbnRpdHlDbGFzcywgbWV0YWRhdGEubmFtZSlcbiAgICAgICAgICAgIC5zZXRGaW5kT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGFrZTogMSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2hlcmVJbklkcyhtZXRhZGF0YS5lbnN1cmVFbnRpdHlJZE1hcChpZCkpXG4gICAgICAgICAgICAuZ2V0T25lKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBmaXJzdCBlbnRpdHkgYnkgYSBnaXZlbiBmaW5kIG9wdGlvbnMuXG4gICAgICogSWYgZW50aXR5IHdhcyBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlIC0gcmVqZWN0cyB3aXRoIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGZpbmRPbmVPckZhaWw8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgb3B0aW9uczogRmluZE9uZU9wdGlvbnM8RW50aXR5PixcbiAgICApOiBQcm9taXNlPEVudGl0eT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kT25lPEVudGl0eT4oZW50aXR5Q2xhc3MgYXMgYW55LCBvcHRpb25zKS50aGVuKFxuICAgICAgICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlOb3RGb3VuZEVycm9yKGVudGl0eUNsYXNzLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGZpcnN0IGVudGl0eSB0aGF0IG1hdGNoZXMgZ2l2ZW4gd2hlcmUgY29uZGl0aW9uLlxuICAgICAqIElmIGVudGl0eSB3YXMgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZSAtIHJlamVjdHMgd2l0aCBlcnJvci5cbiAgICAgKi9cbiAgICBhc3luYyBmaW5kT25lQnlPckZhaWw8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5PixcbiAgICAgICAgd2hlcmU6IEZpbmRPcHRpb25zV2hlcmU8RW50aXR5PiB8IEZpbmRPcHRpb25zV2hlcmU8RW50aXR5PltdLFxuICAgICk6IFByb21pc2U8RW50aXR5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmVCeTxFbnRpdHk+KGVudGl0eUNsYXNzIGFzIGFueSwgd2hlcmUpLnRoZW4oXG4gICAgICAgICAgICAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVudGl0eU5vdEZvdW5kRXJyb3IoZW50aXR5Q2xhc3MsIHdoZXJlKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgdGhlIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gdGFibGUgKHRydW5jYXRlcy9kcm9wcyBpdCkuXG4gICAgICpcbiAgICAgKiBOb3RlOiB0aGlzIG1ldGhvZCB1c2VzIFRSVU5DQVRFIGFuZCBtYXkgbm90IHdvcmsgYXMgeW91IGV4cGVjdCBpbiB0cmFuc2FjdGlvbnMgb24gc29tZSBwbGF0Zm9ybXMuXG4gICAgICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTk3MjczOC85MjUxNTFcbiAgICAgKi9cbiAgICBhc3luYyBjbGVhcjxFbnRpdHk+KGVudGl0eUNsYXNzOiBFbnRpdHlUYXJnZXQ8RW50aXR5Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY29ubmVjdGlvbi5nZXRNZXRhZGF0YShlbnRpdHlDbGFzcylcbiAgICAgICAgY29uc3QgcXVlcnlSdW5uZXIgPVxuICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lciB8fCB0aGlzLmNvbm5lY3Rpb24uY3JlYXRlUXVlcnlSdW5uZXIoKVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJ5UnVubmVyLmNsZWFyVGFibGUobWV0YWRhdGEudGFibGVQYXRoKSAvLyBhd2FpdCBpcyBuZWVkZWQgaGVyZSBiZWNhdXNlIHdlIGFyZSB1c2luZyBmaW5hbGx5XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucXVlcnlSdW5uZXIpIGF3YWl0IHF1ZXJ5UnVubmVyLnJlbGVhc2UoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyBzb21lIGNvbHVtbiBieSBwcm92aWRlZCB2YWx1ZSBvZiB0aGUgZW50aXRpZXMgbWF0Y2hlZCBnaXZlbiBjb25kaXRpb25zLlxuICAgICAqL1xuICAgIGFzeW5jIGluY3JlbWVudDxFbnRpdHkgZXh0ZW5kcyBPYmplY3RMaXRlcmFsPihcbiAgICAgICAgZW50aXR5Q2xhc3M6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICAgICBjb25kaXRpb25zOiBhbnksXG4gICAgICAgIHByb3BlcnR5UGF0aDogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLFxuICAgICk6IFByb21pc2U8VXBkYXRlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jb25uZWN0aW9uLmdldE1ldGFkYXRhKGVudGl0eUNsYXNzKVxuICAgICAgICBjb25zdCBjb2x1bW4gPSBtZXRhZGF0YS5maW5kQ29sdW1uV2l0aFByb3BlcnR5UGF0aChwcm9wZXJ0eVBhdGgpXG4gICAgICAgIGlmICghY29sdW1uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihcbiAgICAgICAgICAgICAgICBgQ29sdW1uICR7cHJvcGVydHlQYXRofSB3YXMgbm90IGZvdW5kIGluICR7bWV0YWRhdGEudGFyZ2V0TmFtZX0gZW50aXR5LmAsXG4gICAgICAgICAgICApXG5cbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcih2YWx1ZSkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVPUk1FcnJvcihgVmFsdWUgXCIke3ZhbHVlfVwiIGlzIG5vdCBhIG51bWJlci5gKVxuXG5cbiAgICAgICAgY29uc3QgdmFsdWVzOiBRdWVyeURlZXBQYXJ0aWFsRW50aXR5PEVudGl0eT4gPSBwcm9wZXJ0eVBhdGhcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5yZWR1Y2VSaWdodChcbiAgICAgICAgICAgICAgICAodmFsdWUsIGtleSkgPT4gKHsgW2tleV06IHZhbHVlIH0gYXMgYW55KSxcbiAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLmVzY2FwZShjb2x1bW4uZGF0YWJhc2VOYW1lKSArXG4gICAgICAgICAgICAgICAgICAgIFwiICsgXCIgK1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIClcblxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVyeUJ1aWxkZXI8RW50aXR5PihlbnRpdHlDbGFzcyBhcyBhbnksIFwiZW50aXR5XCIpXG4gICAgICAgICAgICAudXBkYXRlKGVudGl0eUNsYXNzKVxuICAgICAgICAgICAgLnNldCh2YWx1ZXMpXG4gICAgICAgICAgICAud2hlcmUoY29uZGl0aW9ucylcbiAgICAgICAgICAgIC5leGVjdXRlKClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNyZW1lbnRzIHNvbWUgY29sdW1uIGJ5IHByb3ZpZGVkIHZhbHVlIG9mIHRoZSBlbnRpdGllcyBtYXRjaGVkIGdpdmVuIGNvbmRpdGlvbnMuXG4gICAgICovXG4gICAgYXN5bmMgZGVjcmVtZW50PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICBlbnRpdHlDbGFzczogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgICAgIGNvbmRpdGlvbnM6IGFueSxcbiAgICAgICAgcHJvcGVydHlQYXRoOiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxVcGRhdGVSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEoZW50aXR5Q2xhc3MpXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IG1ldGFkYXRhLmZpbmRDb2x1bW5XaXRoUHJvcGVydHlQYXRoKHByb3BlcnR5UGF0aClcbiAgICAgICAgaWYgKCFjb2x1bW4pXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKFxuICAgICAgICAgICAgICAgIGBDb2x1bW4gJHtwcm9wZXJ0eVBhdGh9IHdhcyBub3QgZm91bmQgaW4gJHttZXRhZGF0YS50YXJnZXROYW1lfSBlbnRpdHkuYCxcbiAgICAgICAgICAgIClcblxuICAgICAgICBpZiAoaXNOYU4oTnVtYmVyKHZhbHVlKSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZU9STUVycm9yKGBWYWx1ZSBcIiR7dmFsdWV9XCIgaXMgbm90IGEgbnVtYmVyLmApXG5cblxuICAgICAgICBjb25zdCB2YWx1ZXM6IFF1ZXJ5RGVlcFBhcnRpYWxFbnRpdHk8RW50aXR5PiA9IHByb3BlcnR5UGF0aFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnJlZHVjZVJpZ2h0KFxuICAgICAgICAgICAgICAgICh2YWx1ZSwga2V5KSA9PiAoeyBba2V5XTogdmFsdWUgfSBhcyBhbnkpLFxuICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5kcml2ZXIuZXNjYXBlKGNvbHVtbi5kYXRhYmFzZU5hbWUpICtcbiAgICAgICAgICAgICAgICAgICAgXCIgLSBcIiArXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVF1ZXJ5QnVpbGRlcjxFbnRpdHk+KGVudGl0eUNsYXNzIGFzIGFueSwgXCJlbnRpdHlcIilcbiAgICAgICAgICAgIC51cGRhdGUoZW50aXR5Q2xhc3MpXG4gICAgICAgICAgICAuc2V0KHZhbHVlcylcbiAgICAgICAgICAgIC53aGVyZShjb25kaXRpb25zKVxuICAgICAgICAgICAgLmV4ZWN1dGUoKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgcmVwb3NpdG9yeSBmb3IgdGhlIGdpdmVuIGVudGl0eSBjbGFzcyBvciBuYW1lLlxuICAgICAqIElmIHNpbmdsZSBkYXRhYmFzZSBjb25uZWN0aW9uIG1vZGUgaXMgdXNlZCwgdGhlbiByZXBvc2l0b3J5IGlzIG9idGFpbmVkIGZyb20gdGhlXG4gICAgICogcmVwb3NpdG9yeSBhZ2dyZWdhdG9yLCB3aGVyZSBlYWNoIHJlcG9zaXRvcnkgaXMgaW5kaXZpZHVhbGx5IGNyZWF0ZWQgZm9yIHRoaXMgZW50aXR5IG1hbmFnZXIuXG4gICAgICogV2hlbiBzaW5nbGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBub3QgdXNlZCwgcmVwb3NpdG9yeSBpcyBiZWluZyBvYnRhaW5lZCBmcm9tIHRoZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGdldFJlcG9zaXRvcnk8RW50aXR5IGV4dGVuZHMgT2JqZWN0TGl0ZXJhbD4oXG4gICAgICAgIHRhcmdldDogRW50aXR5VGFyZ2V0PEVudGl0eT4sXG4gICAgKTogUmVwb3NpdG9yeTxFbnRpdHk+IHtcblxuICAgICAgICBjb25zdCByZXBvc2l0b3J5ID0gdGhpcy5yZXBvc2l0b3JpZXMuZmluZChcbiAgICAgICAgICAgIChyZXBvc2l0b3J5KSA9PiByZXBvc2l0b3J5LnRhcmdldCA9PT0gdGFyZ2V0LFxuICAgICAgICApXG4gICAgICAgIGlmIChyZXBvc2l0b3J5KSByZXR1cm4gcmVwb3NpdG9yeVxuXG5cbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5kcml2ZXIub3B0aW9ucy50eXBlID09PSBcIm1vbmdvZGJcIikge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgICAgICAgcmV0dXJuICh2b2lkIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3UmVwb3NpdG9yeSA9IG5ldyBSZXBvc2l0b3J5PGFueT4oXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJ1bm5lcixcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yaWVzLnB1c2gobmV3UmVwb3NpdG9yeSlcbiAgICAgICAgICAgIHJldHVybiBuZXdSZXBvc2l0b3J5XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRyZWUgcmVwb3NpdG9yeSBmb3IgdGhlIGdpdmVuIGVudGl0eSBjbGFzcyBvciBuYW1lLlxuICAgICAqIElmIHNpbmdsZSBkYXRhYmFzZSBjb25uZWN0aW9uIG1vZGUgaXMgdXNlZCwgdGhlbiByZXBvc2l0b3J5IGlzIG9idGFpbmVkIGZyb20gdGhlXG4gICAgICogcmVwb3NpdG9yeSBhZ2dyZWdhdG9yLCB3aGVyZSBlYWNoIHJlcG9zaXRvcnkgaXMgaW5kaXZpZHVhbGx5IGNyZWF0ZWQgZm9yIHRoaXMgZW50aXR5IG1hbmFnZXIuXG4gICAgICogV2hlbiBzaW5nbGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBub3QgdXNlZCwgcmVwb3NpdG9yeSBpcyBiZWluZyBvYnRhaW5lZCBmcm9tIHRoZSBjb25uZWN0aW9uLlxuICAgICAqL1xuICAgIGdldFRyZWVSZXBvc2l0b3J5PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWw+KFxuICAgICAgICB0YXJnZXQ6IEVudGl0eVRhcmdldDxFbnRpdHk+LFxuICAgICk6IFRyZWVSZXBvc2l0b3J5PEVudGl0eT4ge1xuXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uZHJpdmVyLnRyZWVTdXBwb3J0ID09PSBmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBUcmVlUmVwb3NpdG9yeU5vdFN1cHBvcnRlZEVycm9yKHRoaXMuY29ubmVjdGlvbi5kcml2ZXIpXG5cblxuICAgICAgICBjb25zdCByZXBvc2l0b3J5ID0gdGhpcy50cmVlUmVwb3NpdG9yaWVzLmZpbmQoXG4gICAgICAgICAgICAocmVwb3NpdG9yeSkgPT4gcmVwb3NpdG9yeS50YXJnZXQgPT09IHRhcmdldCxcbiAgICAgICAgKVxuICAgICAgICBpZiAocmVwb3NpdG9yeSkgcmV0dXJuIHJlcG9zaXRvcnlcblxuXG4gICAgICAgIGNvbnN0IG5ld1JlcG9zaXRvcnkgPSBuZXcgVHJlZVJlcG9zaXRvcnkodGFyZ2V0LCB0aGlzLCB0aGlzLnF1ZXJ5UnVubmVyKVxuICAgICAgICB0aGlzLnRyZWVSZXBvc2l0b3JpZXMucHVzaChuZXdSZXBvc2l0b3J5KVxuICAgICAgICByZXR1cm4gbmV3UmVwb3NpdG9yeVxuICAgIH1cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcmVwb3NpdG9yeSBpbnN0YW5jZSBvdXQgb2YgYSBnaXZlbiBSZXBvc2l0b3J5IGFuZFxuICAgICAqIHNldHMgY3VycmVudCBFbnRpdHlNYW5hZ2VyIGluc3RhbmNlIHRvIGl0LiBVc2VkIHRvIHdvcmsgd2l0aCBjdXN0b20gcmVwb3NpdG9yaWVzXG4gICAgICogaW4gdHJhbnNhY3Rpb25zLlxuICAgICAqL1xuICAgIHdpdGhSZXBvc2l0b3J5PEVudGl0eSBleHRlbmRzIE9iamVjdExpdGVyYWwsIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PGFueT4+KFxuICAgICAgICByZXBvc2l0b3J5OiBSICYgUmVwb3NpdG9yeTxFbnRpdHk+LFxuICAgICk6IFIge1xuICAgICAgICBjb25zdCByZXBvc2l0b3J5Q29uc3RydWN0b3IgPVxuICAgICAgICAgICAgcmVwb3NpdG9yeS5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgUmVwb3NpdG9yeVxuICAgICAgICBjb25zdCB7IHRhcmdldCwgbWFuYWdlciwgcXVlcnlSdW5uZXIsIC4uLm90aGVyUmVwb3NpdG9yeVByb3BlcnRpZXMgfSA9XG4gICAgICAgICAgICByZXBvc2l0b3J5XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgbmV3IHJlcG9zaXRvcnlDb25zdHJ1Y3RvcihyZXBvc2l0b3J5LnRhcmdldCwgdGhpcykgYXMgUixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlclJlcG9zaXRvcnlQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgY3VzdG9tIGVudGl0eSByZXBvc2l0b3J5IG1hcmtlZCB3aXRoIEBFbnRpdHlSZXBvc2l0b3J5IGRlY29yYXRvci5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBSZXBvc2l0b3J5LmV4dGVuZCB0byBjcmVhdGUgY3VzdG9tIHJlcG9zaXRvcmllc1xuICAgICAqL1xuICAgIGdldEN1c3RvbVJlcG9zaXRvcnk8VD4oY3VzdG9tUmVwb3NpdG9yeTogT2JqZWN0VHlwZTxUPik6IFQge1xuICAgICAgICBjb25zdCBlbnRpdHlSZXBvc2l0b3J5TWV0YWRhdGFBcmdzID1cbiAgICAgICAgICAgIGdldE1ldGFkYXRhQXJnc1N0b3JhZ2UoKS5lbnRpdHlSZXBvc2l0b3JpZXMuZmluZCgocmVwb3NpdG9yeSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkudGFyZ2V0ID09PVxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGN1c3RvbVJlcG9zaXRvcnkgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXN0b21SZXBvc2l0b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IChjdXN0b21SZXBvc2l0b3J5IGFzIGFueSkuY29uc3RydWN0b3IpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgaWYgKCFlbnRpdHlSZXBvc2l0b3J5TWV0YWRhdGFBcmdzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEN1c3RvbVJlcG9zaXRvcnlOb3RGb3VuZEVycm9yKGN1c3RvbVJlcG9zaXRvcnkpXG5cbiAgICAgICAgY29uc3QgZW50aXR5TWV0YWRhdGEgPSBlbnRpdHlSZXBvc2l0b3J5TWV0YWRhdGFBcmdzLmVudGl0eVxuICAgICAgICAgICAgPyB0aGlzLmNvbm5lY3Rpb24uZ2V0TWV0YWRhdGEoZW50aXR5UmVwb3NpdG9yeU1ldGFkYXRhQXJncy5lbnRpdHkpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICBjb25zdCBlbnRpdHlSZXBvc2l0b3J5SW5zdGFuY2UgPVxuICAgICAgICAgICAgbmV3IChlbnRpdHlSZXBvc2l0b3J5TWV0YWRhdGFBcmdzLnRhcmdldCBhcyBhbnkpKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgZW50aXR5TWV0YWRhdGEsXG4gICAgICAgICAgICApXG5cblxuXG4gICAgICAgIGlmIChlbnRpdHlSZXBvc2l0b3J5SW5zdGFuY2UgaW5zdGFuY2VvZiBBYnN0cmFjdFJlcG9zaXRvcnkpIHtcbiAgICAgICAgICAgIGlmICghKGVudGl0eVJlcG9zaXRvcnlJbnN0YW5jZSBhcyBhbnkpW1wibWFuYWdlclwiXSlcbiAgICAgICAgICAgICAgICAoZW50aXR5UmVwb3NpdG9yeUluc3RhbmNlIGFzIGFueSlbXCJtYW5hZ2VyXCJdID0gdGhpc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFlbnRpdHlNZXRhZGF0YSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ3VzdG9tUmVwb3NpdG9yeUNhbm5vdEluaGVyaXRSZXBvc2l0b3J5RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbVJlcG9zaXRvcnksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOyhlbnRpdHlSZXBvc2l0b3J5SW5zdGFuY2UgYXMgYW55KVtcIm1hbmFnZXJcIl0gPSB0aGlzXG4gICAgICAgICAgICA7KGVudGl0eVJlcG9zaXRvcnlJbnN0YW5jZSBhcyBhbnkpW1wibWV0YWRhdGFcIl0gPSBlbnRpdHlNZXRhZGF0YVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudGl0eVJlcG9zaXRvcnlJbnN0YW5jZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgdXNlZCBieSBlbnRpdHkgbWFuYWdlci5cbiAgICAgKiBUaGlzIGlzIHVzZWQgd2hlbiBlbnRpdHkgbWFuYWdlciBpcyBjcmVhdGVkIHdpdGggYSBzaW5nbGUgcXVlcnkgcnVubmVyLFxuICAgICAqIGFuZCB0aGlzIHNpbmdsZSBxdWVyeSBydW5uZXIgbmVlZHMgdG8gYmUgcmVsZWFzZWQgYWZ0ZXIgam9iIHdpdGggZW50aXR5IG1hbmFnZXIgaXMgZG9uZS5cbiAgICAgKi9cbiAgICBhc3luYyByZWxlYXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXRoaXMucXVlcnlSdW5uZXIpIHRocm93IG5ldyBOb05lZWRUb1JlbGVhc2VFbnRpdHlNYW5hZ2VyRXJyb3IoKVxuXG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UnVubmVyLnJlbGVhc2UoKVxuICAgIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24tdHlwZW9ybSBsaWIvdHlwZW9ybS9lbnRpdHktbWFuYWdlci9FbnRpdHlNYW5hZ2VyLnRzIl19
|