@aerokit/sdk 12.44.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/LICENSE +277 -0
- package/README.md +170 -0
- package/dist/cjs/bpm/deployer.js +57 -0
- package/dist/cjs/bpm/index.js +35 -0
- package/dist/cjs/bpm/process.js +636 -0
- package/dist/cjs/bpm/tasks.js +973 -0
- package/dist/cjs/bpm/values.js +82 -0
- package/dist/cjs/cache/cache.js +64 -0
- package/dist/cjs/cache/index.js +26 -0
- package/dist/cjs/cms/cmis.js +689 -0
- package/dist/cjs/cms/index.js +26 -0
- package/dist/cjs/component/decorators.js +126 -0
- package/dist/cjs/component/index.js +36 -0
- package/dist/cjs/core/configurations.js +110 -0
- package/dist/cjs/core/context.js +47 -0
- package/dist/cjs/core/env.js +45 -0
- package/dist/cjs/core/globals.js +54 -0
- package/dist/cjs/core/index.js +35 -0
- package/dist/cjs/db/dao.js +795 -0
- package/dist/cjs/db/database.js +904 -0
- package/dist/cjs/db/decorators.js +167 -0
- package/dist/cjs/db/index.js +72 -0
- package/dist/cjs/db/insert.js +51 -0
- package/dist/cjs/db/orm.js +245 -0
- package/dist/cjs/db/ormstatements.js +243 -0
- package/dist/cjs/db/procedure.js +112 -0
- package/dist/cjs/db/query.js +57 -0
- package/dist/cjs/db/repository.js +148 -0
- package/dist/cjs/db/sequence.js +59 -0
- package/dist/cjs/db/sql.js +516 -0
- package/dist/cjs/db/store.js +172 -0
- package/dist/cjs/db/translator.js +100 -0
- package/dist/cjs/db/update.js +43 -0
- package/dist/cjs/etcd/client.js +174 -0
- package/dist/cjs/etcd/index.js +26 -0
- package/dist/cjs/extensions/decorators.js +40 -0
- package/dist/cjs/extensions/extensions.js +108 -0
- package/dist/cjs/extensions/index.js +39 -0
- package/dist/cjs/git/client.js +277 -0
- package/dist/cjs/git/index.js +26 -0
- package/dist/cjs/http/client-async.js +224 -0
- package/dist/cjs/http/client.js +145 -0
- package/dist/cjs/http/decorators.js +76 -0
- package/dist/cjs/http/errors/ForbiddenError.js +41 -0
- package/dist/cjs/http/errors/ValidationError.js +41 -0
- package/dist/cjs/http/errors.js +26 -0
- package/dist/cjs/http/index.js +59 -0
- package/dist/cjs/http/request.js +281 -0
- package/dist/cjs/http/response.js +452 -0
- package/dist/cjs/http/rs/resource-common.js +32 -0
- package/dist/cjs/http/rs/resource-http-controller.js +306 -0
- package/dist/cjs/http/rs/resource-mappings.js +130 -0
- package/dist/cjs/http/rs/resource-method.js +218 -0
- package/dist/cjs/http/rs/resource.js +232 -0
- package/dist/cjs/http/rs.js +31 -0
- package/dist/cjs/http/session.js +124 -0
- package/dist/cjs/http/upload.js +144 -0
- package/dist/cjs/http/utils.js +106 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/indexing/index.js +29 -0
- package/dist/cjs/indexing/searcher.js +70 -0
- package/dist/cjs/indexing/writer.js +45 -0
- package/dist/cjs/integrations/index.js +26 -0
- package/dist/cjs/integrations/integrations.js +55 -0
- package/dist/cjs/io/bytes.js +101 -0
- package/dist/cjs/io/files.js +344 -0
- package/dist/cjs/io/image.js +43 -0
- package/dist/cjs/io/index.js +38 -0
- package/dist/cjs/io/streams.js +243 -0
- package/dist/cjs/io/zip.js +251 -0
- package/dist/cjs/job/decorators.js +40 -0
- package/dist/cjs/job/index.js +39 -0
- package/dist/cjs/job/scheduler.js +347 -0
- package/dist/cjs/junit/index.js +18 -0
- package/dist/cjs/junit/junit.js +67 -0
- package/dist/cjs/kafka/consumer.js +70 -0
- package/dist/cjs/kafka/index.js +29 -0
- package/dist/cjs/kafka/producer.js +70 -0
- package/dist/cjs/log/index.js +26 -0
- package/dist/cjs/log/logging.js +174 -0
- package/dist/cjs/mail/client.js +153 -0
- package/dist/cjs/mail/index.js +26 -0
- package/dist/cjs/messaging/consumer.js +83 -0
- package/dist/cjs/messaging/decorators.js +40 -0
- package/dist/cjs/messaging/index.js +42 -0
- package/dist/cjs/messaging/producer.js +81 -0
- package/dist/cjs/mongodb/client.js +627 -0
- package/dist/cjs/mongodb/dao.js +390 -0
- package/dist/cjs/mongodb/index.js +36 -0
- package/dist/cjs/net/decorators.js +40 -0
- package/dist/cjs/net/index.js +42 -0
- package/dist/cjs/net/soap.js +228 -0
- package/dist/cjs/net/websockets.js +151 -0
- package/dist/cjs/net/wrappers/onClose.js +2 -0
- package/dist/cjs/net/wrappers/onError.js +2 -0
- package/dist/cjs/net/wrappers/onMessage.js +2 -0
- package/dist/cjs/net/wrappers/onOpen.js +2 -0
- package/dist/cjs/pdf/index.js +26 -0
- package/dist/cjs/pdf/pdf.js +160 -0
- package/dist/cjs/platform/command.js +47 -0
- package/dist/cjs/platform/engines.js +70 -0
- package/dist/cjs/platform/index.js +47 -0
- package/dist/cjs/platform/lifecycle.js +49 -0
- package/dist/cjs/platform/os.js +51 -0
- package/dist/cjs/platform/problems.js +127 -0
- package/dist/cjs/platform/registry.js +319 -0
- package/dist/cjs/platform/repository.js +498 -0
- package/dist/cjs/platform/workspace.js +574 -0
- package/dist/cjs/qldb/index.js +26 -0
- package/dist/cjs/qldb/qldb.js +24 -0
- package/dist/cjs/rabbitmq/consumer.js +50 -0
- package/dist/cjs/rabbitmq/index.js +29 -0
- package/dist/cjs/rabbitmq/producer.js +38 -0
- package/dist/cjs/redis/client.js +190 -0
- package/dist/cjs/redis/index.js +26 -0
- package/dist/cjs/security/decorators.js +48 -0
- package/dist/cjs/security/index.js +40 -0
- package/dist/cjs/security/oauth.js +75 -0
- package/dist/cjs/security/user.js +88 -0
- package/dist/cjs/template/engines.js +139 -0
- package/dist/cjs/template/index.js +26 -0
- package/dist/cjs/utils/alphanumeric.js +107 -0
- package/dist/cjs/utils/base64.js +104 -0
- package/dist/cjs/utils/converter.js +78 -0
- package/dist/cjs/utils/digest.js +167 -0
- package/dist/cjs/utils/escape.js +160 -0
- package/dist/cjs/utils/hex.js +104 -0
- package/dist/cjs/utils/index.js +68 -0
- package/dist/cjs/utils/jsonpath.js +489 -0
- package/dist/cjs/utils/qrcode.js +41 -0
- package/dist/cjs/utils/url.js +82 -0
- package/dist/cjs/utils/utf8.js +61 -0
- package/dist/cjs/utils/uuid.js +48 -0
- package/dist/cjs/utils/xml.js +57 -0
- package/dist/dts/bpm/deployer.d.ts +29 -0
- package/dist/dts/bpm/index.d.ts +8 -0
- package/dist/dts/bpm/process.d.ts +433 -0
- package/dist/dts/bpm/tasks.d.ts +2022 -0
- package/dist/dts/bpm/values.d.ts +38 -0
- package/dist/dts/cache/cache.d.ts +30 -0
- package/dist/dts/cache/index.d.ts +2 -0
- package/dist/dts/cms/cmis.d.ts +413 -0
- package/dist/dts/cms/index.d.ts +2 -0
- package/dist/dts/component/decorators.d.ts +52 -0
- package/dist/dts/component/index.d.ts +2 -0
- package/dist/dts/core/configurations.d.ts +65 -0
- package/dist/dts/core/context.d.ts +19 -0
- package/dist/dts/core/env.d.ts +23 -0
- package/dist/dts/core/globals.d.ts +30 -0
- package/dist/dts/core/index.d.ts +8 -0
- package/dist/dts/db/dao.d.ts +8 -0
- package/dist/dts/db/database.d.ts +507 -0
- package/dist/dts/db/decorators.d.ts +89 -0
- package/dist/dts/db/index.d.ts +25 -0
- package/dist/dts/db/insert.d.ts +32 -0
- package/dist/dts/db/orm.d.ts +44 -0
- package/dist/dts/db/ormstatements.d.ts +4 -0
- package/dist/dts/db/procedure.d.ts +25 -0
- package/dist/dts/db/query.d.ts +48 -0
- package/dist/dts/db/repository.d.ts +64 -0
- package/dist/dts/db/sequence.d.ts +34 -0
- package/dist/dts/db/sql.d.ts +267 -0
- package/dist/dts/db/store.d.ts +138 -0
- package/dist/dts/db/translator.d.ts +26 -0
- package/dist/dts/db/update.d.ts +21 -0
- package/dist/dts/etcd/client.d.ts +92 -0
- package/dist/dts/etcd/index.d.ts +2 -0
- package/dist/dts/extensions/decorators.d.ts +11 -0
- package/dist/dts/extensions/extensions.d.ts +41 -0
- package/dist/dts/extensions/index.d.ts +4 -0
- package/dist/dts/git/client.d.ts +478 -0
- package/dist/dts/git/index.d.ts +2 -0
- package/dist/dts/http/client-async.d.ts +158 -0
- package/dist/dts/http/client.d.ts +180 -0
- package/dist/dts/http/decorators.d.ts +11 -0
- package/dist/dts/http/errors/ForbiddenError.d.ts +20 -0
- package/dist/dts/http/errors/ValidationError.d.ts +20 -0
- package/dist/dts/http/errors.d.ts +2 -0
- package/dist/dts/http/index.d.ts +16 -0
- package/dist/dts/http/request.d.ts +158 -0
- package/dist/dts/http/response.d.ts +281 -0
- package/dist/dts/http/rs/resource-common.d.ts +11 -0
- package/dist/dts/http/rs/resource-http-controller.d.ts +43 -0
- package/dist/dts/http/rs/resource-mappings.d.ts +70 -0
- package/dist/dts/http/rs/resource-method.d.ts +206 -0
- package/dist/dts/http/rs/resource.d.ts +126 -0
- package/dist/dts/http/rs.d.ts +4 -0
- package/dist/dts/http/session.d.ts +81 -0
- package/dist/dts/http/upload.d.ts +100 -0
- package/dist/dts/http/utils.d.ts +54 -0
- package/dist/dts/index.d.ts +0 -0
- package/dist/dts/indexing/index.d.ts +4 -0
- package/dist/dts/indexing/searcher.d.ts +47 -0
- package/dist/dts/indexing/writer.d.ts +22 -0
- package/dist/dts/integrations/index.d.ts +2 -0
- package/dist/dts/integrations/integrations.d.ts +118 -0
- package/dist/dts/io/bytes.d.ts +56 -0
- package/dist/dts/io/files.d.ts +261 -0
- package/dist/dts/io/image.d.ts +22 -0
- package/dist/dts/io/index.d.ts +10 -0
- package/dist/dts/io/streams.d.ts +172 -0
- package/dist/dts/io/zip.d.ts +178 -0
- package/dist/dts/job/decorators.d.ts +11 -0
- package/dist/dts/job/index.d.ts +4 -0
- package/dist/dts/job/scheduler.d.ts +250 -0
- package/dist/dts/junit/index.d.ts +1 -0
- package/dist/dts/junit/junit.d.ts +50 -0
- package/dist/dts/kafka/consumer.d.ts +48 -0
- package/dist/dts/kafka/index.d.ts +4 -0
- package/dist/dts/kafka/producer.d.ts +50 -0
- package/dist/dts/log/index.d.ts +2 -0
- package/dist/dts/log/logging.d.ts +102 -0
- package/dist/dts/mail/client.d.ts +90 -0
- package/dist/dts/mail/index.d.ts +2 -0
- package/dist/dts/messaging/consumer.d.ts +61 -0
- package/dist/dts/messaging/decorators.d.ts +11 -0
- package/dist/dts/messaging/index.d.ts +6 -0
- package/dist/dts/messaging/producer.d.ts +59 -0
- package/dist/dts/mongodb/client.d.ts +367 -0
- package/dist/dts/mongodb/dao.d.ts +24 -0
- package/dist/dts/mongodb/index.d.ts +2 -0
- package/dist/dts/net/decorators.d.ts +11 -0
- package/dist/dts/net/index.d.ts +6 -0
- package/dist/dts/net/soap.d.ts +115 -0
- package/dist/dts/net/websockets.d.ts +100 -0
- package/dist/dts/net/wrappers/onClose.d.ts +0 -0
- package/dist/dts/net/wrappers/onError.d.ts +0 -0
- package/dist/dts/net/wrappers/onMessage.d.ts +0 -0
- package/dist/dts/net/wrappers/onOpen.d.ts +0 -0
- package/dist/dts/pdf/index.d.ts +2 -0
- package/dist/dts/pdf/pdf.d.ts +72 -0
- package/dist/dts/platform/command.d.ts +41 -0
- package/dist/dts/platform/engines.d.ts +35 -0
- package/dist/dts/platform/index.d.ts +16 -0
- package/dist/dts/platform/lifecycle.d.ts +22 -0
- package/dist/dts/platform/os.d.ts +23 -0
- package/dist/dts/platform/problems.d.ts +114 -0
- package/dist/dts/platform/registry.d.ts +227 -0
- package/dist/dts/platform/repository.d.ts +354 -0
- package/dist/dts/platform/workspace.d.ts +421 -0
- package/dist/dts/qldb/index.d.ts +2 -0
- package/dist/dts/qldb/qldb.d.ts +1 -0
- package/dist/dts/rabbitmq/consumer.d.ts +25 -0
- package/dist/dts/rabbitmq/index.d.ts +4 -0
- package/dist/dts/rabbitmq/producer.d.ts +15 -0
- package/dist/dts/redis/client.d.ts +134 -0
- package/dist/dts/redis/index.d.ts +2 -0
- package/dist/dts/security/decorators.d.ts +4 -0
- package/dist/dts/security/index.d.ts +5 -0
- package/dist/dts/security/oauth.d.ts +39 -0
- package/dist/dts/security/user.d.ts +51 -0
- package/dist/dts/template/engines.d.ts +98 -0
- package/dist/dts/template/index.d.ts +2 -0
- package/dist/dts/utils/alphanumeric.d.ts +39 -0
- package/dist/dts/utils/base64.d.ts +48 -0
- package/dist/dts/utils/converter.d.ts +44 -0
- package/dist/dts/utils/digest.d.ts +50 -0
- package/dist/dts/utils/escape.d.ts +110 -0
- package/dist/dts/utils/hex.d.ts +48 -0
- package/dist/dts/utils/index.d.ts +23 -0
- package/dist/dts/utils/jsonpath.d.ts +22 -0
- package/dist/dts/utils/qrcode.d.ts +16 -0
- package/dist/dts/utils/url.d.ts +50 -0
- package/dist/dts/utils/utf8.d.ts +33 -0
- package/dist/dts/utils/uuid.d.ts +21 -0
- package/dist/dts/utils/xml.d.ts +22 -0
- package/dist/esm/bpm/deployer.mjs +38 -0
- package/dist/esm/bpm/index.mjs +15 -0
- package/dist/esm/bpm/process.mjs +617 -0
- package/dist/esm/bpm/tasks.mjs +954 -0
- package/dist/esm/bpm/values.mjs +63 -0
- package/dist/esm/cache/cache.mjs +45 -0
- package/dist/esm/cache/index.mjs +6 -0
- package/dist/esm/cms/cmis.mjs +660 -0
- package/dist/esm/cms/index.mjs +6 -0
- package/dist/esm/component/decorators.mjs +107 -0
- package/dist/esm/component/index.mjs +6 -0
- package/dist/esm/core/configurations.mjs +91 -0
- package/dist/esm/core/context.mjs +28 -0
- package/dist/esm/core/env.mjs +26 -0
- package/dist/esm/core/globals.mjs +35 -0
- package/dist/esm/core/index.mjs +15 -0
- package/dist/esm/db/dao.mjs +775 -0
- package/dist/esm/db/database.mjs +885 -0
- package/dist/esm/db/decorators.mjs +148 -0
- package/dist/esm/db/index.mjs +42 -0
- package/dist/esm/db/insert.mjs +32 -0
- package/dist/esm/db/orm.mjs +225 -0
- package/dist/esm/db/ormstatements.mjs +223 -0
- package/dist/esm/db/procedure.mjs +93 -0
- package/dist/esm/db/query.mjs +38 -0
- package/dist/esm/db/repository.mjs +129 -0
- package/dist/esm/db/sequence.mjs +40 -0
- package/dist/esm/db/sql.mjs +497 -0
- package/dist/esm/db/store.mjs +153 -0
- package/dist/esm/db/translator.mjs +81 -0
- package/dist/esm/db/update.mjs +24 -0
- package/dist/esm/etcd/client.mjs +155 -0
- package/dist/esm/etcd/index.mjs +6 -0
- package/dist/esm/extensions/decorators.mjs +21 -0
- package/dist/esm/extensions/extensions.mjs +89 -0
- package/dist/esm/extensions/index.mjs +9 -0
- package/dist/esm/git/client.mjs +258 -0
- package/dist/esm/git/index.mjs +6 -0
- package/dist/esm/http/client-async.mjs +205 -0
- package/dist/esm/http/client.mjs +126 -0
- package/dist/esm/http/decorators.mjs +47 -0
- package/dist/esm/http/errors/ForbiddenError.mjs +22 -0
- package/dist/esm/http/errors/ValidationError.mjs +22 -0
- package/dist/esm/http/errors.mjs +7 -0
- package/dist/esm/http/index.mjs +29 -0
- package/dist/esm/http/request.mjs +262 -0
- package/dist/esm/http/response.mjs +433 -0
- package/dist/esm/http/rs/resource-common.mjs +13 -0
- package/dist/esm/http/rs/resource-http-controller.mjs +287 -0
- package/dist/esm/http/rs/resource-mappings.mjs +111 -0
- package/dist/esm/http/rs/resource-method.mjs +199 -0
- package/dist/esm/http/rs/resource.mjs +213 -0
- package/dist/esm/http/rs.mjs +12 -0
- package/dist/esm/http/session.mjs +105 -0
- package/dist/esm/http/upload.mjs +125 -0
- package/dist/esm/http/utils.mjs +87 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/indexing/index.mjs +9 -0
- package/dist/esm/indexing/searcher.mjs +51 -0
- package/dist/esm/indexing/writer.mjs +26 -0
- package/dist/esm/integrations/index.mjs +6 -0
- package/dist/esm/integrations/integrations.mjs +36 -0
- package/dist/esm/io/bytes.mjs +82 -0
- package/dist/esm/io/files.mjs +325 -0
- package/dist/esm/io/image.mjs +24 -0
- package/dist/esm/io/index.mjs +18 -0
- package/dist/esm/io/streams.mjs +224 -0
- package/dist/esm/io/zip.mjs +232 -0
- package/dist/esm/job/decorators.mjs +21 -0
- package/dist/esm/job/index.mjs +9 -0
- package/dist/esm/job/scheduler.mjs +328 -0
- package/dist/esm/junit/index.mjs +2 -0
- package/dist/esm/junit/junit.mjs +48 -0
- package/dist/esm/kafka/consumer.mjs +51 -0
- package/dist/esm/kafka/index.mjs +9 -0
- package/dist/esm/kafka/producer.mjs +51 -0
- package/dist/esm/log/index.mjs +6 -0
- package/dist/esm/log/logging.mjs +155 -0
- package/dist/esm/mail/client.mjs +134 -0
- package/dist/esm/mail/index.mjs +6 -0
- package/dist/esm/messaging/consumer.mjs +64 -0
- package/dist/esm/messaging/decorators.mjs +21 -0
- package/dist/esm/messaging/index.mjs +12 -0
- package/dist/esm/messaging/producer.mjs +62 -0
- package/dist/esm/mongodb/client.mjs +608 -0
- package/dist/esm/mongodb/dao.mjs +360 -0
- package/dist/esm/mongodb/index.mjs +7 -0
- package/dist/esm/net/decorators.mjs +21 -0
- package/dist/esm/net/index.mjs +12 -0
- package/dist/esm/net/soap.mjs +209 -0
- package/dist/esm/net/websockets.mjs +132 -0
- package/dist/esm/net/wrappers/onClose.mjs +2 -0
- package/dist/esm/net/wrappers/onError.mjs +2 -0
- package/dist/esm/net/wrappers/onMessage.mjs +2 -0
- package/dist/esm/net/wrappers/onOpen.mjs +2 -0
- package/dist/esm/pdf/index.mjs +6 -0
- package/dist/esm/pdf/pdf.mjs +141 -0
- package/dist/esm/platform/command.mjs +28 -0
- package/dist/esm/platform/engines.mjs +51 -0
- package/dist/esm/platform/index.mjs +27 -0
- package/dist/esm/platform/lifecycle.mjs +30 -0
- package/dist/esm/platform/os.mjs +32 -0
- package/dist/esm/platform/problems.mjs +108 -0
- package/dist/esm/platform/registry.mjs +300 -0
- package/dist/esm/platform/repository.mjs +479 -0
- package/dist/esm/platform/workspace.mjs +555 -0
- package/dist/esm/qldb/index.mjs +6 -0
- package/dist/esm/qldb/qldb.mjs +5 -0
- package/dist/esm/rabbitmq/consumer.mjs +31 -0
- package/dist/esm/rabbitmq/index.mjs +9 -0
- package/dist/esm/rabbitmq/producer.mjs +19 -0
- package/dist/esm/redis/client.mjs +171 -0
- package/dist/esm/redis/index.mjs +6 -0
- package/dist/esm/security/decorators.mjs +29 -0
- package/dist/esm/security/index.mjs +10 -0
- package/dist/esm/security/oauth.mjs +56 -0
- package/dist/esm/security/user.mjs +69 -0
- package/dist/esm/template/engines.mjs +120 -0
- package/dist/esm/template/index.mjs +6 -0
- package/dist/esm/utils/alphanumeric.mjs +88 -0
- package/dist/esm/utils/base64.mjs +85 -0
- package/dist/esm/utils/converter.mjs +59 -0
- package/dist/esm/utils/digest.mjs +148 -0
- package/dist/esm/utils/escape.mjs +141 -0
- package/dist/esm/utils/hex.mjs +85 -0
- package/dist/esm/utils/index.mjs +38 -0
- package/dist/esm/utils/jsonpath.mjs +470 -0
- package/dist/esm/utils/qrcode.mjs +22 -0
- package/dist/esm/utils/url.mjs +63 -0
- package/dist/esm/utils/utf8.mjs +42 -0
- package/dist/esm/utils/uuid.mjs +29 -0
- package/dist/esm/utils/xml.mjs +38 -0
- package/package.json +58 -0
|
@@ -0,0 +1,627 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var client_exports = {};
|
|
19
|
+
__export(client_exports, {
|
|
20
|
+
Client: () => Client,
|
|
21
|
+
DB: () => DB,
|
|
22
|
+
DBCollection: () => DBCollection,
|
|
23
|
+
DBCursor: () => DBCursor,
|
|
24
|
+
DBObject: () => DBObject,
|
|
25
|
+
createBasicDBObject: () => createBasicDBObject
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(client_exports);
|
|
28
|
+
var import_uuid = require("@aerokit/sdk/utils/uuid");
|
|
29
|
+
const MongoDBFacade = Java.type("org.eclipse.dirigible.components.api.mongodb.MongoDBFacade");
|
|
30
|
+
const TimeUnit = Java.type("java.util.concurrent.TimeUnit");
|
|
31
|
+
class DBObject {
|
|
32
|
+
/**
|
|
33
|
+
* Constructs a new DBObject instance.
|
|
34
|
+
* @param native The native MongoDB object (e.g., com.mongodb.DBObject)
|
|
35
|
+
*/
|
|
36
|
+
constructor(native) {
|
|
37
|
+
this.native = native;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Appends a key-value pair to the DBObject.
|
|
41
|
+
* @param key The field name.
|
|
42
|
+
* @param value The value to append.
|
|
43
|
+
* @returns The current DBObject instance for chaining.
|
|
44
|
+
*/
|
|
45
|
+
append(key, value) {
|
|
46
|
+
this.native.append(key, value);
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Converts the DBObject to a standard JavaScript object representation (JSON).
|
|
51
|
+
* @returns A plain JavaScript object.
|
|
52
|
+
*/
|
|
53
|
+
toJson() {
|
|
54
|
+
return this.native.toJson();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Marks the object as a partial object (used internally by MongoDB driver).
|
|
58
|
+
*/
|
|
59
|
+
markAsPartialObject() {
|
|
60
|
+
this.native.markAsPartialObject();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Checks if the object is a partial object.
|
|
64
|
+
* @returns True if partial, false otherwise.
|
|
65
|
+
*/
|
|
66
|
+
isPartialObject() {
|
|
67
|
+
return this.native.isPartialObject();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Checks if the DBObject contains a field with the specified key.
|
|
71
|
+
* @param key The field name.
|
|
72
|
+
* @returns True if the field exists, false otherwise.
|
|
73
|
+
*/
|
|
74
|
+
containsField(key) {
|
|
75
|
+
return this.native.containsField(key);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Gets the value associated with the given key.
|
|
79
|
+
* @param key The field name.
|
|
80
|
+
* @returns The field value.
|
|
81
|
+
*/
|
|
82
|
+
get(key) {
|
|
83
|
+
return this.native.get(key);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Puts a key-value pair into the DBObject.
|
|
87
|
+
* @param key The field name.
|
|
88
|
+
* @param value The value to put.
|
|
89
|
+
* @returns The previous value associated with the key, or null.
|
|
90
|
+
*/
|
|
91
|
+
put(key, value) {
|
|
92
|
+
return this.native.put(key, value);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Removes a field from the DBObject.
|
|
96
|
+
* @param key The field name to remove.
|
|
97
|
+
* @returns The removed field value.
|
|
98
|
+
*/
|
|
99
|
+
removeField(key) {
|
|
100
|
+
return this.native.removeField(key);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
function extract(dbObject) {
|
|
104
|
+
if (!dbObject.native) {
|
|
105
|
+
return {};
|
|
106
|
+
}
|
|
107
|
+
var extracted = JSON.parse(dbObject.native.toJson());
|
|
108
|
+
for (var propertyName in extracted) {
|
|
109
|
+
dbObject[propertyName] = extracted[propertyName];
|
|
110
|
+
}
|
|
111
|
+
return extracted;
|
|
112
|
+
}
|
|
113
|
+
function implicit(object) {
|
|
114
|
+
if (!object) {
|
|
115
|
+
return void 0;
|
|
116
|
+
}
|
|
117
|
+
if (object.native) {
|
|
118
|
+
return object;
|
|
119
|
+
}
|
|
120
|
+
var dbObject = createBasicDBObject();
|
|
121
|
+
for (var propertyName in object) {
|
|
122
|
+
dbObject.append(propertyName, object[propertyName]);
|
|
123
|
+
}
|
|
124
|
+
return dbObject;
|
|
125
|
+
}
|
|
126
|
+
function createBasicDBObject() {
|
|
127
|
+
const dbObject = new DBObject(MongoDBFacade.createBasicDBObject());
|
|
128
|
+
extract(dbObject);
|
|
129
|
+
return dbObject;
|
|
130
|
+
}
|
|
131
|
+
class Client {
|
|
132
|
+
/**
|
|
133
|
+
* Constructs a new MongoDB Client instance.
|
|
134
|
+
* @param uri The MongoDB connection URI.
|
|
135
|
+
* @param user The username for authentication.
|
|
136
|
+
* @param password The password for authentication.
|
|
137
|
+
*/
|
|
138
|
+
constructor(uri, user, password) {
|
|
139
|
+
this.native = MongoDBFacade.getClient(uri, user, password);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Retrieves a database instance.
|
|
143
|
+
* @param name Optional name of the database. If not provided, the default database name is used.
|
|
144
|
+
* @returns A DB instance.
|
|
145
|
+
*/
|
|
146
|
+
getDB(name) {
|
|
147
|
+
let native = null;
|
|
148
|
+
if (name) {
|
|
149
|
+
native = this.native.getDB(name);
|
|
150
|
+
} else {
|
|
151
|
+
const defaultDB = MongoDBFacade.getDefaultDatabaseName();
|
|
152
|
+
native = this.native.getDB(defaultDB);
|
|
153
|
+
}
|
|
154
|
+
return new DB(native);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
class DB {
|
|
158
|
+
/**
|
|
159
|
+
* Constructs a new DB instance.
|
|
160
|
+
* @param native The native MongoDB DB object.
|
|
161
|
+
*/
|
|
162
|
+
constructor(native) {
|
|
163
|
+
this.native = native;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Retrieves a collection instance from the database.
|
|
167
|
+
* @param name The name of the collection.
|
|
168
|
+
* @returns A DBCollection instance.
|
|
169
|
+
*/
|
|
170
|
+
getCollection(name) {
|
|
171
|
+
const native = this.native.getCollection(name);
|
|
172
|
+
return new DBCollection(native);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
class DBCollection {
|
|
176
|
+
/**
|
|
177
|
+
* Constructs a new DBCollection instance.
|
|
178
|
+
* @param native The native MongoDB DBCollection object.
|
|
179
|
+
*/
|
|
180
|
+
constructor(native) {
|
|
181
|
+
this.native = native;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Inserts a document into the collection.
|
|
185
|
+
* @param dbObject The document to insert (can be a plain JS object or DBObject).
|
|
186
|
+
*/
|
|
187
|
+
insert(dbObject) {
|
|
188
|
+
const dbo = implicit(dbObject);
|
|
189
|
+
if (dbo) {
|
|
190
|
+
this.native.insert(dbo.native);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Finds documents matching the query.
|
|
195
|
+
* @param query The query specification (can be a plain JS object or DBObject).
|
|
196
|
+
* @param projection The fields to include or exclude (can be a plain JS object or DBObject).
|
|
197
|
+
* @returns A DBCursor for iterating over results.
|
|
198
|
+
*/
|
|
199
|
+
find(query, projection) {
|
|
200
|
+
const q = implicit(query);
|
|
201
|
+
const p = implicit(projection);
|
|
202
|
+
var native = null;
|
|
203
|
+
if (q) {
|
|
204
|
+
if (p) {
|
|
205
|
+
native = this.native.find(q.native, p.native);
|
|
206
|
+
} else {
|
|
207
|
+
native = this.native.find(q.native);
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
native = this.native.find();
|
|
211
|
+
}
|
|
212
|
+
return new DBCursor(native);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Finds a single document matching the query.
|
|
216
|
+
* @param query The query specification.
|
|
217
|
+
* @param projection The fields to include or exclude.
|
|
218
|
+
* @param sort The sorting specification.
|
|
219
|
+
* @returns The found document as a DBObject.
|
|
220
|
+
*/
|
|
221
|
+
findOne(query, projection, sort) {
|
|
222
|
+
const q = implicit(query);
|
|
223
|
+
const p = implicit(projection);
|
|
224
|
+
const s = implicit(sort);
|
|
225
|
+
var dbObject = createBasicDBObject();
|
|
226
|
+
var native = null;
|
|
227
|
+
if (q) {
|
|
228
|
+
if (p) {
|
|
229
|
+
if (s) {
|
|
230
|
+
native = this.native.findOne(q.native, p.native, s.native);
|
|
231
|
+
} else {
|
|
232
|
+
native = this.native.findOne(q.native, p.native);
|
|
233
|
+
}
|
|
234
|
+
} else {
|
|
235
|
+
native = this.native.findOne(q.native);
|
|
236
|
+
}
|
|
237
|
+
} else {
|
|
238
|
+
native = this.native.findOne();
|
|
239
|
+
}
|
|
240
|
+
dbObject.native = native;
|
|
241
|
+
extract(dbObject);
|
|
242
|
+
return dbObject;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Finds a single document by its string ID.
|
|
246
|
+
* @param id The string ID of the document.
|
|
247
|
+
* @param projection The fields to include or exclude.
|
|
248
|
+
* @returns The found document as a DBObject.
|
|
249
|
+
*/
|
|
250
|
+
findOneById(id, projection) {
|
|
251
|
+
const p = implicit(projection);
|
|
252
|
+
const dbObject = createBasicDBObject();
|
|
253
|
+
let native = null;
|
|
254
|
+
if (p) {
|
|
255
|
+
native = this.native.findOne(id, p.native);
|
|
256
|
+
} else {
|
|
257
|
+
native = this.native.findOne(id);
|
|
258
|
+
}
|
|
259
|
+
dbObject.native = native;
|
|
260
|
+
extract(dbObject);
|
|
261
|
+
return dbObject;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Counts the number of documents in the collection, optionally filtered by a query.
|
|
265
|
+
* @param query Optional query to filter the count.
|
|
266
|
+
* @returns The number of documents.
|
|
267
|
+
*/
|
|
268
|
+
count(query) {
|
|
269
|
+
const q = implicit(query);
|
|
270
|
+
if (q) {
|
|
271
|
+
return this.native.count(q.native);
|
|
272
|
+
}
|
|
273
|
+
return this.native.count();
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Gets the count of documents (alias for count).
|
|
277
|
+
* @param query Optional query to filter the count.
|
|
278
|
+
* @returns The number of documents.
|
|
279
|
+
*/
|
|
280
|
+
getCount(query) {
|
|
281
|
+
const q = implicit(query);
|
|
282
|
+
if (q) {
|
|
283
|
+
return this.native.getCount(q.native);
|
|
284
|
+
}
|
|
285
|
+
return this.native.getCount();
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Creates an index on the collection.
|
|
289
|
+
* @param keys The index key specification.
|
|
290
|
+
* @param options Optional index options.
|
|
291
|
+
*/
|
|
292
|
+
createIndex(keys, options) {
|
|
293
|
+
const k = implicit(keys);
|
|
294
|
+
const o = implicit(options);
|
|
295
|
+
if (k) {
|
|
296
|
+
if (o) {
|
|
297
|
+
this.native.createIndex(k.native, o.native);
|
|
298
|
+
} else {
|
|
299
|
+
this.native.createIndex(k.native);
|
|
300
|
+
}
|
|
301
|
+
} else {
|
|
302
|
+
throw new Error("At least Keys parameter must be provided");
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Creates an index on a single field by name.
|
|
307
|
+
* @param name The name of the field to index.
|
|
308
|
+
*/
|
|
309
|
+
createIndexForField(name) {
|
|
310
|
+
if (name) {
|
|
311
|
+
this.native.createIndex(name);
|
|
312
|
+
} else {
|
|
313
|
+
throw new Error("The filed name must be provided");
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Retrieves the distinct values for a specified field across a collection.
|
|
318
|
+
* NOTE: The signature in the original code seems slightly off compared to typical MongoDB drivers.
|
|
319
|
+
* This implementation follows the original structure using `keys.native` if `keys` is provided.
|
|
320
|
+
* @param name The field name.
|
|
321
|
+
* @param query Optional query to filter results.
|
|
322
|
+
* @param keys Optional keys to use for distinct (replaces 'name' if provided and query exists).
|
|
323
|
+
*/
|
|
324
|
+
distinct(name, query, keys) {
|
|
325
|
+
const q = implicit(query);
|
|
326
|
+
const k = implicit(keys);
|
|
327
|
+
if (name) {
|
|
328
|
+
if (q) {
|
|
329
|
+
this.native.distinct(k ? k.native : name, q.native);
|
|
330
|
+
} else {
|
|
331
|
+
this.native.distinct(name);
|
|
332
|
+
}
|
|
333
|
+
} else {
|
|
334
|
+
throw new Error("At least the filed name parameter must be provided");
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Drops a specified index.
|
|
339
|
+
* @param index The name of the index or the DBObject representing the index keys.
|
|
340
|
+
*/
|
|
341
|
+
dropIndex(index) {
|
|
342
|
+
if (typeof index === "string") {
|
|
343
|
+
this.native.dropIndex(index);
|
|
344
|
+
} else {
|
|
345
|
+
const dbo = implicit(index);
|
|
346
|
+
if (dbo) {
|
|
347
|
+
this.native.dropIndex(dbo.native);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Drops a specified index by name.
|
|
353
|
+
* @param name The name of the index.
|
|
354
|
+
*/
|
|
355
|
+
dropIndexByName(name) {
|
|
356
|
+
this.native.dropIndex(name);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Drops all indexes on the collection.
|
|
360
|
+
*/
|
|
361
|
+
dropIndexes() {
|
|
362
|
+
this.native.dropIndexes();
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Removes documents from the collection matching the query.
|
|
366
|
+
* @param query The deletion query specification.
|
|
367
|
+
*/
|
|
368
|
+
remove(query) {
|
|
369
|
+
const q = implicit(query);
|
|
370
|
+
if (q) {
|
|
371
|
+
this.native.remove(q.native);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Renames the collection.
|
|
376
|
+
* @param newName The new name for the collection.
|
|
377
|
+
*/
|
|
378
|
+
rename(newName) {
|
|
379
|
+
this.native.rename(newName);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Saves a document to the collection. If the document has an `_id`, it performs an update;
|
|
383
|
+
* otherwise, it performs an insert.
|
|
384
|
+
* @param dbObject The document to save.
|
|
385
|
+
*/
|
|
386
|
+
save(dbObject) {
|
|
387
|
+
const dbo = implicit(dbObject);
|
|
388
|
+
if (dbo) {
|
|
389
|
+
this.native.save(dbo.native);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Updates documents in the collection matching the query.
|
|
394
|
+
* @param query The update query specification.
|
|
395
|
+
* @param update The update operation specification (e.g., {$set: {...}}).
|
|
396
|
+
* @param upsert If true, creates a new document if no documents match the query.
|
|
397
|
+
* @param multi If true, updates all documents matching the query; otherwise, only one.
|
|
398
|
+
*/
|
|
399
|
+
update(query, update, upsert, multi) {
|
|
400
|
+
const q = implicit(query);
|
|
401
|
+
const u = implicit(update);
|
|
402
|
+
if (q) {
|
|
403
|
+
if (u) {
|
|
404
|
+
if (upsert) {
|
|
405
|
+
if (multi) {
|
|
406
|
+
this.native.update(q.native, u.native, upsert, multi);
|
|
407
|
+
} else {
|
|
408
|
+
this.native.update(q.native, u.native, upsert);
|
|
409
|
+
}
|
|
410
|
+
} else {
|
|
411
|
+
this.native.update(q.native, u.native);
|
|
412
|
+
}
|
|
413
|
+
} else {
|
|
414
|
+
throw new Error("The update parameter must be provided");
|
|
415
|
+
}
|
|
416
|
+
} else {
|
|
417
|
+
throw new Error("The query parameter must be provided");
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Updates multiple documents in the collection matching the query.
|
|
422
|
+
* (Equivalent to calling `update` with `multi=true` and `upsert=true` implicitly).
|
|
423
|
+
* @param query The update query specification.
|
|
424
|
+
* @param update The update operation specification.
|
|
425
|
+
*/
|
|
426
|
+
updateMulti(query, update) {
|
|
427
|
+
const q = implicit(query);
|
|
428
|
+
const u = implicit(update);
|
|
429
|
+
if (q) {
|
|
430
|
+
if (u) {
|
|
431
|
+
this.native.update(q.native, u.native, true, true);
|
|
432
|
+
} else {
|
|
433
|
+
throw new Error("The update parameter must be provided");
|
|
434
|
+
}
|
|
435
|
+
} else {
|
|
436
|
+
throw new Error("The query parameter must be provided");
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Calculates the next sequential ID based on the largest existing `_id` in the collection.
|
|
441
|
+
* Assumes `_id` is a numeric field.
|
|
442
|
+
* @returns The next available sequential ID (starting at 1 if collection is empty).
|
|
443
|
+
*/
|
|
444
|
+
getNextId() {
|
|
445
|
+
var cursor = this.find({}, { "_id": 1 }).sort({ "_id": -1 }).limit(1);
|
|
446
|
+
if (!cursor.hasNext()) {
|
|
447
|
+
return 1;
|
|
448
|
+
} else {
|
|
449
|
+
return cursor.next()["_id"] + 1;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Generates a new random UUID (Universally Unique Identifier).
|
|
454
|
+
* @returns A string representing the UUID.
|
|
455
|
+
*/
|
|
456
|
+
generateUUID() {
|
|
457
|
+
return import_uuid.UUID.random();
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
class DBCursor {
|
|
461
|
+
/**
|
|
462
|
+
* Constructs a new DBCursor instance.
|
|
463
|
+
* @param native The native MongoDB DBCursor object.
|
|
464
|
+
*/
|
|
465
|
+
constructor(native) {
|
|
466
|
+
this.native = native;
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Returns the single result from the cursor.
|
|
470
|
+
* @returns A DBObject representing the document.
|
|
471
|
+
*/
|
|
472
|
+
one() {
|
|
473
|
+
const dbObject = new DBObject(this.native.one());
|
|
474
|
+
extract(dbObject);
|
|
475
|
+
return dbObject;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Sets the batch size for the cursor.
|
|
479
|
+
* @param numberOfElements The batch size.
|
|
480
|
+
* @returns The DBCursor instance for chaining.
|
|
481
|
+
*/
|
|
482
|
+
batchSize(numberOfElements) {
|
|
483
|
+
this.native.batchSize(numberOfElements);
|
|
484
|
+
return this;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Gets the current batch size.
|
|
488
|
+
* @returns The batch size.
|
|
489
|
+
*/
|
|
490
|
+
getBatchSize() {
|
|
491
|
+
return this.native.getBatchSize();
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Gets the collection associated with this cursor.
|
|
495
|
+
* @returns The DBCollection instance.
|
|
496
|
+
*/
|
|
497
|
+
getCollection() {
|
|
498
|
+
return new DBCollection(this.native.getCollection());
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Gets the cursor ID.
|
|
502
|
+
* @returns The cursor ID string.
|
|
503
|
+
*/
|
|
504
|
+
getCursorId() {
|
|
505
|
+
return this.native.getCursorId();
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Gets the projection object (fields wanted) used in the query.
|
|
509
|
+
* @returns The projection DBObject.
|
|
510
|
+
*/
|
|
511
|
+
getKeysWanted() {
|
|
512
|
+
const dbObject = new DBObject(this.native.getKeysWanted());
|
|
513
|
+
extract(dbObject);
|
|
514
|
+
return dbObject;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Gets the limit set on the cursor.
|
|
518
|
+
* @returns The limit number.
|
|
519
|
+
*/
|
|
520
|
+
getLimit() {
|
|
521
|
+
return this.native.getLimit();
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Closes the cursor.
|
|
525
|
+
*/
|
|
526
|
+
close() {
|
|
527
|
+
this.native.close();
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Checks if there is a next document in the cursor.
|
|
531
|
+
* @returns True if there is a next document, false otherwise.
|
|
532
|
+
*/
|
|
533
|
+
hasNext() {
|
|
534
|
+
return this.native.hasNext();
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Retrieves the next document in the cursor.
|
|
538
|
+
* @returns The next document as a DBObject.
|
|
539
|
+
*/
|
|
540
|
+
next() {
|
|
541
|
+
const dbObject = new DBObject(this.native.next());
|
|
542
|
+
extract(dbObject);
|
|
543
|
+
return dbObject;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Gets the query object used to create this cursor.
|
|
547
|
+
* @returns The query DBObject.
|
|
548
|
+
*/
|
|
549
|
+
getQuery() {
|
|
550
|
+
const dbObject = new DBObject(this.native.getQuery());
|
|
551
|
+
extract(dbObject);
|
|
552
|
+
return dbObject;
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Gets the number of documents matched by the query.
|
|
556
|
+
* @returns The total number of documents.
|
|
557
|
+
*/
|
|
558
|
+
length() {
|
|
559
|
+
return this.native.length();
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Specifies the order in which the query returns the results.
|
|
563
|
+
* @param orderBy The sorting specification (e.g., {field: 1} for ascending).
|
|
564
|
+
* @returns The DBCursor instance for chaining.
|
|
565
|
+
*/
|
|
566
|
+
sort(orderBy) {
|
|
567
|
+
const dbo = implicit(orderBy);
|
|
568
|
+
if (!dbo) {
|
|
569
|
+
throw new Error("The orderBy parameter must be provided");
|
|
570
|
+
}
|
|
571
|
+
this.native.sort(dbo.native);
|
|
572
|
+
return this;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Limits the number of results to be returned.
|
|
576
|
+
* @param limit The maximum number of documents to return.
|
|
577
|
+
* @returns The DBCursor instance for chaining.
|
|
578
|
+
*/
|
|
579
|
+
limit(limit) {
|
|
580
|
+
this.native.limit(limit);
|
|
581
|
+
return this;
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Specifies the exclusive upper bound for a specific index.
|
|
585
|
+
* @param min The minimum value.
|
|
586
|
+
* @returns The DBCursor instance for chaining.
|
|
587
|
+
*/
|
|
588
|
+
min(min) {
|
|
589
|
+
this.native.min(min);
|
|
590
|
+
return this;
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Specifies the exclusive upper bound for a specific index.
|
|
594
|
+
* @param max The maximum value.
|
|
595
|
+
* @returns The DBCursor instance for chaining.
|
|
596
|
+
*/
|
|
597
|
+
max(max) {
|
|
598
|
+
this.native.max(max);
|
|
599
|
+
return this;
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Sets a timeout for the server to execute the query.
|
|
603
|
+
* @param maxTime The maximum time in milliseconds.
|
|
604
|
+
* @returns The DBCursor instance for chaining.
|
|
605
|
+
*/
|
|
606
|
+
maxTime(maxTime) {
|
|
607
|
+
this.native.maxTime(maxTime, TimeUnit.MILLISECONDS);
|
|
608
|
+
return this;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Gets the size of the result set.
|
|
612
|
+
* @returns The size number.
|
|
613
|
+
*/
|
|
614
|
+
size() {
|
|
615
|
+
return this.native.size();
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* Skips the specified number of documents.
|
|
619
|
+
* @param numberOfElements The number of documents to skip.
|
|
620
|
+
* @returns The DBCursor instance for chaining.
|
|
621
|
+
*/
|
|
622
|
+
skip(numberOfElements) {
|
|
623
|
+
this.native.skip(numberOfElements);
|
|
624
|
+
return this;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvY2xpZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBNb25nb0RCRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLm1vbmdvZGIuTW9uZ29EQkZhY2FkZVwiKTtcbmNvbnN0IFRpbWVVbml0ID0gSmF2YS50eXBlKFwiamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRcIik7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSBcIkBhZXJva2l0L3Nkay91dGlscy91dWlkXCI7XG5cbi8qKlxuICogRGVmaW5lIGEgY29tbW9uIHR5cGUgZm9yIGlucHV0IHRvIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBlaXRoZXIgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxuICogKHdoaWNoIHdpbGwgYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gREJPYmplY3QpIG9yIGFuIGV4aXN0aW5nIERCT2JqZWN0IHdyYXBwZXIgaW5zdGFuY2UuXG4gKi9cbnR5cGUgREJJbnB1dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBEQk9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbi8qKlxuICogREJPYmplY3Qgb2JqZWN0IHJlcHJlc2VudHMgYSBCU09OIGRvY3VtZW50IHVzZWQgZm9yIHF1ZXJpZXMsIGluc2VydGlvbnMsIGFuZCB1cGRhdGVzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgREJPYmplY3Qge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQlNPTiBkb2N1bWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJPYmplY3QgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgb2JqZWN0IChlLmcuLCBjb20ubW9uZ29kYi5EQk9iamVjdClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEga2V5LXZhbHVlIHBhaXIgdG8gdGhlIERCT2JqZWN0LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgREJPYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEQk9iamVjdCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIERCT2JqZWN0IHRvIGEgc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gKEpTT04pLlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvSnNvbigpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnRvSnNvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBvYmplY3QgYXMgYSBwYXJ0aWFsIG9iamVjdCAodXNlZCBpbnRlcm5hbGx5IGJ5IE1vbmdvREIgZHJpdmVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFya0FzUGFydGlhbE9iamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWFya0FzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGEgcGFydGlhbCBvYmplY3QuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBwYXJ0aWFsLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzUGFydGlhbE9iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmlzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgREJPYmplY3QgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnRhaW5zRmllbGQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmNvbnRhaW5zRmllbGQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEByZXR1cm5zIFRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1dHMgYSBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBEQk9iamVjdC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHV0LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnB1dChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgZmllbGQgZnJvbSB0aGUgREJPYmplY3QuXG4gICAgICogQHBhcmFtIGtleSBUaGUgZmllbGQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgZmllbGQgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnJlbW92ZUZpZWxkKGtleSk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIG5hdGl2ZSBNb25nb0RCIG9iamVjdCdzIEpTT04gcmVwcmVzZW50YXRpb25cbiAqIG9udG8gdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0IGFjY2VzcyBsaWtlIGBkYk9iamVjdC5maWVsZE5hbWVgLlxuICogQHBhcmFtIGRiT2JqZWN0IFRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBwcm9wZXJ0aWVzIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdChkYk9iamVjdDogREJPYmplY3QpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIWRiT2JqZWN0Lm5hdGl2ZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8vIFBhcnNlIHRoZSBuYXRpdmUgb2JqZWN0J3MgSlNPTiByZXByZXNlbnRhdGlvblxuICAgIHZhciBleHRyYWN0ZWQgPSBKU09OLnBhcnNlKGRiT2JqZWN0Lm5hdGl2ZS50b0pzb24oKSk7XG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllcyB0byB0aGUgd3JhcHBlciBpbnN0YW5jZVxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBleHRyYWN0ZWQpIHtcbiAgICAgICAgZGJPYmplY3RbcHJvcGVydHlOYW1lXSA9IGV4dHJhY3RlZFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gZXh0cmFjdGVkO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBpbXBsaWNpdGx5IGNvbnZlcnQgYSBwbGFpbiBKUyBvYmplY3QgdG8gYSBEQk9iamVjdCxcbiAqIG9yIHJldHVybiB0aGUgZXhpc3RpbmcgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IElucHV0IG9iamVjdCB3aGljaCBjYW4gYmUgYSBwbGFpbiBvYmplY3QsIERCT2JqZWN0LCBvciB1bmRlZmluZWQvbnVsbC5cbiAqIEByZXR1cm5zIERCT2JqZWN0IG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gaW1wbGljaXQob2JqZWN0OiBEQklucHV0KTogREJPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIEV4cGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBpZiBpbnB1dCBpcyBmYWxzeVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBpdCBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIHByb3BlcnR5IChhc3N1bWVzIGl0J3MgYSBEQk9iamVjdCBvciBzaW1pbGFyIHdyYXBwZXIpXG4gICAgaWYgKChvYmplY3QgYXMgYW55KS5uYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBEQk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHBsYWluIG9iamVjdCB0byBEQk9iamVjdFxuICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcblxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgZGJPYmplY3QuYXBwZW5kKHByb3BlcnR5TmFtZSwgb2JqZWN0W3Byb3BlcnR5TmFtZV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIG5ldyBEQk9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2ljREJPYmplY3QoKTogREJPYmplY3Qge1xuICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KE1vbmdvREJGYWNhZGUuY3JlYXRlQmFzaWNEQk9iamVjdCgpKTtcbiAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ2xpZW50IG9iamVjdCB3cmFwcGVyIGZvciBjb25uZWN0aW5nIHRvIE1vbmdvREIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgY2xpZW50IG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vbmdvREIgQ2xpZW50IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIE1vbmdvREIgY29ubmVjdGlvbiBVUkkuXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gTW9uZ29EQkZhY2FkZS5nZXRDbGllbnQodXJpLCB1c2VyLCBwYXNzd29yZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIG9mIHRoZSBkYXRhYmFzZS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBkYXRhYmFzZSBuYW1lIGlzIHVzZWQuXG4gICAgICogQHJldHVybnMgQSBEQiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0REIobmFtZT86IHN0cmluZyk6IERCIHtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXREQihuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHREQiA9IE1vbmdvREJGYWNhZGUuZ2V0RGVmYXVsdERhdGFiYXNlTmFtZSgpO1xuICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0REIoZGVmYXVsdERCKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREIobmF0aXZlKTtcbiAgICB9XG59XG5cbi8qKlxuICogREIgb2JqZWN0IHdyYXBwZXIgZm9yIGEgTW9uZ29EQiBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERCIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYXRpdmUgVGhlIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBjb2xsZWN0aW9uIGluc3RhbmNlIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgREJDb2xsZWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb2xsZWN0aW9uKG5hbWU6IHN0cmluZyk6IERCQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldENvbGxlY3Rpb24obmFtZSk7XG4gICAgICAgIHJldHVybiBuZXcgREJDb2xsZWN0aW9uKG5hdGl2ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIERCQ29sbGVjdGlvbiBvYmplY3Qgd3JhcHBlciBmb3IgYSBNb25nb0RCIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEQkNvbGxlY3Rpb24ge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDb2xsZWN0aW9uIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmF0aXZlIFRoZSBuYXRpdmUgTW9uZ29EQiBEQkNvbGxlY3Rpb24gb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgYSBkb2N1bWVudCBpbnRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYk9iamVjdCBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0IChjYW4gYmUgYSBwbGFpbiBKUyBvYmplY3Qgb3IgREJPYmplY3QpLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnQoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5pbnNlcnQoZGJvLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgc3BlY2lmaWNhdGlvbiAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBUaGUgZmllbGRzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcmV0dXJucyBBIERCQ3Vyc29yIGZvciBpdGVyYXRpbmcgb3ZlciByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kKHF1ZXJ5PzogREJJbnB1dCwgcHJvamVjdGlvbj86IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcblxuICAgICAgICB2YXIgbmF0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZChxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kKHEubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREJDdXJzb3IobmF0aXZlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIHNpbmdsZSBkb2N1bWVudCBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEBwYXJhbSBzb3J0IFRoZSBzb3J0aW5nIHNwZWNpZmljYXRpb24uXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGRvY3VtZW50IGFzIGEgREJPYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGZpbmRPbmUocXVlcnk6IERCSW5wdXQsIHByb2plY3Rpb246IERCSW5wdXQsIHNvcnQ6IERCSW5wdXQpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcyA9IGltcGxpY2l0KHNvcnQpO1xuXG4gICAgICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgdmFyIG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmRPbmUocS5uYXRpdmUsIHAubmF0aXZlLCBzLm5hdGl2ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGJPYmplY3QubmF0aXZlID0gbmF0aXZlO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGEgc2luZ2xlIGRvY3VtZW50IGJ5IGl0cyBzdHJpbmcgSUQuXG4gICAgICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgSUQgb2YgdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIFRoZSBmb3VuZCBkb2N1bWVudCBhcyBhIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT25lQnlJZChpZDogc3RyaW5nLCBwcm9qZWN0aW9uPzogREJJbnB1dCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcCA9IGltcGxpY2l0KHByb2plY3Rpb24pO1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkLCBwLm5hdGl2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBkYk9iamVjdC5uYXRpdmUgPSBuYXRpdmU7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IE9wdGlvbmFsIHF1ZXJ5IHRvIGZpbHRlciB0aGUgY291bnQuXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICovXG4gICAgcHVibGljIGNvdW50KHF1ZXJ5PzogREJJbnB1dCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY291bnQocS5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5jb3VudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIGRvY3VtZW50cyAoYWxpYXMgZm9yIGNvdW50KS5cbiAgICAgKiBAcGFyYW0gcXVlcnkgT3B0aW9uYWwgcXVlcnkgdG8gZmlsdGVyIHRoZSBjb3VudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q291bnQocXVlcnk6IERCSW5wdXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldENvdW50KHEubmF0aXZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Q291bnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluZGV4IG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlzIFRoZSBpbmRleCBrZXkgc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBpbmRleCBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVJbmRleChrZXlzOiBEQklucHV0LCBvcHRpb25zOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGsgPSBpbXBsaWNpdChrZXlzKTtcbiAgICAgICAgY29uc3QgbyA9IGltcGxpY2l0KG9wdGlvbnMpO1xuICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgaWYgKG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSwgby5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBLZXlzIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbmRleCBvbiBhIHNpbmdsZSBmaWVsZCBieSBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW5kZXhGb3JGaWVsZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLmNyZWF0ZUluZGV4KG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGZpbGVkIG5hbWUgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBmaWVsZCBhY3Jvc3MgYSBjb2xsZWN0aW9uLlxuICAgICAqIE5PVEU6IFRoZSBzaWduYXR1cmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgc2xpZ2h0bHkgb2ZmIGNvbXBhcmVkIHRvIHR5cGljYWwgTW9uZ29EQiBkcml2ZXJzLlxuICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlIHVzaW5nIGBrZXlzLm5hdGl2ZWAgaWYgYGtleXNgIGlzIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSBxdWVyeSBPcHRpb25hbCBxdWVyeSB0byBmaWx0ZXIgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbCBrZXlzIHRvIHVzZSBmb3IgZGlzdGluY3QgKHJlcGxhY2VzICduYW1lJyBpZiBwcm92aWRlZCBhbmQgcXVlcnkgZXhpc3RzKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzdGluY3QobmFtZTogc3RyaW5nLCBxdWVyeTogREJJbnB1dCwga2V5czogREJJbnB1dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCBrID0gaW1wbGljaXQoa2V5cyk7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHF1ZXJ5IGlzIHByb3ZpZGVkLCB1c2Uga2V5cyBmb3IgdGhlIGZpZWxkIG5hbWUgaWYgayBpcyBwcmVzZW50LCBvdGhlcndpc2UgdXNlICduYW1lJ1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRpc3RpbmN0KGsgPyBrLm5hdGl2ZSA6IG5hbWUsIHEubmF0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUuZGlzdGluY3QobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCB0aGUgZmlsZWQgbmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgbmFtZSBvZiB0aGUgaW5kZXggb3IgdGhlIERCT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5kZXgga2V5cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4KGluZGV4OiBzdHJpbmcgfCBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5kcm9wSW5kZXgoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGRibykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChkYm8ubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4IGJ5IG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAqL1xuICAgIHB1YmxpYyBkcm9wSW5kZXhCeU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbGwgaW5kZXhlcyBvbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkb2N1bWVudHMgZnJvbSB0aGUgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBkZWxldGlvbiBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmUocXVlcnk6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcSA9IGltcGxpY2l0KHF1ZXJ5KTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLnJlbW92ZShxLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgZG9jdW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gYF9pZGAsIGl0IHBlcmZvcm1zIGFuIHVwZGF0ZTtcbiAgICAgKiBvdGhlcndpc2UsIGl0IHBlcmZvcm1zIGFuIGluc2VydC5cbiAgICAgKiBAcGFyYW0gZGJPYmplY3QgVGhlIGRvY3VtZW50IHRvIHNhdmUuXG4gICAgICovXG4gICAgcHVibGljIHNhdmUoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5zYXZlKGRiby5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uIChlLmcuLCB7JHNldDogey4uLn19KS5cbiAgICAgKiBAcGFyYW0gdXBzZXJ0IElmIHRydWUsIGNyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaWYgbm8gZG9jdW1lbnRzIG1hdGNoIHRoZSBxdWVyeS5cbiAgICAgKiBAcGFyYW0gbXVsdGkgSWYgdHJ1ZSwgdXBkYXRlcyBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBxdWVyeTsgb3RoZXJ3aXNlLCBvbmx5IG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKHF1ZXJ5OiBEQklucHV0LCB1cGRhdGU6IERCSW5wdXQsIHVwc2VydD86IGJvb2xlYW4sIG11bHRpPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCB1ID0gaW1wbGljaXQodXBkYXRlKTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwc2VydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUsIHVwc2VydCwgbXVsdGkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUudXBkYXRlKHEubmF0aXZlLCB1Lm5hdGl2ZSwgdXBzZXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgbXVsdGlwbGUgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICAgKiAoRXF1aXZhbGVudCB0byBjYWxsaW5nIGB1cGRhdGVgIHdpdGggYG11bHRpPXRydWVgIGFuZCBgdXBzZXJ0PXRydWVgIGltcGxpY2l0bHkpLlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVNdWx0aShxdWVyeTogREJJbnB1dCwgdXBkYXRlOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHUgPSBpbXBsaWNpdCh1cGRhdGUpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS51cGRhdGUocS5uYXRpdmUsIHUubmF0aXZlLCB0cnVlLCB0cnVlKTsgLy8gQXNzdW1pbmcgdXBkYXRlTXVsdGkgbWVhbnMgdXBzZXJ0PXRydWUgYW5kIG11bHRpPXRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBuZXh0IHNlcXVlbnRpYWwgSUQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZXhpc3RpbmcgYF9pZGAgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQXNzdW1lcyBgX2lkYCBpcyBhIG51bWVyaWMgZmllbGQuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHNlcXVlbnRpYWwgSUQgKHN0YXJ0aW5nIGF0IDEgaWYgY29sbGVjdGlvbiBpcyBlbXB0eSkuXG4gICAgICovXG4gICAgcHVibGljIGdldE5leHRJZCgpOiBudW1iZXIge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5maW5kKHt9LCB7IFwiX2lkXCI6IDEgfSkuc29ydCh7IFwiX2lkXCI6IC0xIH0pLmxpbWl0KDEpO1xuICAgICAgICBpZiAoIWN1cnNvci5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnNvci5uZXh0KClbXCJfaWRcIl0gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHJhbmRvbSBVVUlEIChVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcikuXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVVUlELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFVVSUQucmFuZG9tKCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogREJDdXJzb3Igb2JqZWN0IHdyYXBwZXIgZm9yIGl0ZXJhdGluZyBvdmVyIHJlc3VsdHMgb2YgYSBNb25nb0RCIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgREJDdXJzb3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJDdXJzb3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNpbmdsZSByZXN1bHQgZnJvbSB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIEEgREJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25lKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUub25lKCkpO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhdGNoIHNpemUgZm9yIHRoZSBjdXJzb3IuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIGJhdGNoIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGdldEJhdGNoU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmF0Y2hTaXplKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sbGVjdGlvbigpOiBEQkNvbGxlY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IERCQ29sbGVjdGlvbih0aGlzLm5hdGl2ZS5nZXRDb2xsZWN0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnNvciBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3Vyc29yIElEIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3Vyc29ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldEN1cnNvcklkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvamVjdGlvbiBvYmplY3QgKGZpZWxkcyB3YW50ZWQpIHVzZWQgaW4gdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcm9qZWN0aW9uIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRLZXlzV2FudGVkKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUuZ2V0S2V5c1dhbnRlZCgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaW1pdCBzZXQgb24gdGhlIGN1cnNvci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbGltaXQgbnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TGltaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGN1cnNvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBkb2N1bWVudCBpbiB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlcmUgaXMgYSBuZXh0IGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGhhc05leHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5oYXNOZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBuZXh0IGRvY3VtZW50IGluIHRoZSBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgZG9jdW1lbnQgYXMgYSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dCgpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KHRoaXMubmF0aXZlLm5leHQoKSk7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcXVlcnkgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoaXMgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRoZSBxdWVyeSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogREJPYmplY3Qge1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IG5ldyBEQk9iamVjdCh0aGlzLm5hdGl2ZS5nZXRRdWVyeSgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIG1hdGNoZWQgYnkgdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmxlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHF1ZXJ5IHJldHVybnMgdGhlIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIG9yZGVyQnkgVGhlIHNvcnRpbmcgc3BlY2lmaWNhdGlvbiAoZS5nLiwge2ZpZWxkOiAxfSBmb3IgYXNjZW5kaW5nKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0KG9yZGVyQnk6IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IGRibyA9IGltcGxpY2l0KG9yZGVyQnkpO1xuICAgICAgICBpZiAoIWRibykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIG9yZGVyQnkgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmUuc29ydChkYm8ubmF0aXZlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGltaXQobGltaXQ6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubGltaXQobGltaXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV4Y2x1c2l2ZSB1cHBlciBib3VuZCBmb3IgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBEQkN1cnNvciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAgICovXG4gICAgcHVibGljIG1pbihtaW46IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWluKG1pbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXhjbHVzaXZlIHVwcGVyIGJvdW5kIGZvciBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4KG1heDogbnVtYmVyKTogREJDdXJzb3Ige1xuICAgICAgICB0aGlzLm5hdGl2ZS5tYXgobWF4KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIG1heFRpbWUgVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4VGltZShtYXhUaW1lOiBudW1iZXIpOiBEQkN1cnNvciB7XG4gICAgICAgIHRoaXMubmF0aXZlLm1heFRpbWUobWF4VGltZSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnNpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBza2lwKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuc2tpcChudW1iZXJPZkVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsa0JBQXFCO0FBRnJCLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyw0REFBNEQ7QUFDNUYsTUFBTSxXQUFXLEtBQUssS0FBSywrQkFBK0I7QUFhbkQsTUFBTSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVlsQixZQUFZLFFBQWE7QUFDckIsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLE9BQU8sS0FBYSxPQUFzQjtBQUM3QyxTQUFLLE9BQU8sT0FBTyxLQUFLLEtBQUs7QUFDN0IsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sU0FBaUM7QUFDcEMsV0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLTyxzQkFBNEI7QUFDL0IsU0FBSyxPQUFPLG9CQUFvQjtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLGtCQUEyQjtBQUM5QixXQUFPLEtBQUssT0FBTyxnQkFBZ0I7QUFBQSxFQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLGNBQWMsS0FBc0I7QUFDdkMsV0FBTyxLQUFLLE9BQU8sY0FBYyxHQUFHO0FBQUEsRUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxJQUFJLEtBQWtCO0FBQ3pCLFdBQU8sS0FBSyxPQUFPLElBQUksR0FBRztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEs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
|