@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,689 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
var cmis_exports = {};
|
|
29
|
+
__export(cmis_exports, {
|
|
30
|
+
Cmis: () => Cmis,
|
|
31
|
+
Document: () => Document,
|
|
32
|
+
Folder: () => Folder
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(cmis_exports);
|
|
35
|
+
var streams = __toESM(require("@aerokit/sdk/io/streams"));
|
|
36
|
+
const CmisFacade = Java.type("org.eclipse.dirigible.components.api.cms.CmisFacade");
|
|
37
|
+
const Gson = Java.type("com.google.gson.Gson");
|
|
38
|
+
const HashMap = Java.type("java.util.HashMap");
|
|
39
|
+
class Cmis {
|
|
40
|
+
static {
|
|
41
|
+
// CONSTANTS
|
|
42
|
+
/**
|
|
43
|
+
* CMIS method constant for read operations.
|
|
44
|
+
*/
|
|
45
|
+
this.METHOD_READ = "READ";
|
|
46
|
+
}
|
|
47
|
+
static {
|
|
48
|
+
/**
|
|
49
|
+
* CMIS method constant for write operations.
|
|
50
|
+
*/
|
|
51
|
+
this.METHOD_WRITE = "WRITE";
|
|
52
|
+
}
|
|
53
|
+
static {
|
|
54
|
+
// ---- Base CMIS Properties ----
|
|
55
|
+
/** CMIS property: Object name. */
|
|
56
|
+
this.NAME = "cmis:name";
|
|
57
|
+
}
|
|
58
|
+
static {
|
|
59
|
+
/** CMIS property: Unique object identifier. */
|
|
60
|
+
this.OBJECT_ID = "cmis:objectId";
|
|
61
|
+
}
|
|
62
|
+
static {
|
|
63
|
+
/** CMIS property: Object type identifier. */
|
|
64
|
+
this.OBJECT_TYPE_ID = "cmis:objectTypeId";
|
|
65
|
+
}
|
|
66
|
+
static {
|
|
67
|
+
/** CMIS property: Base object type identifier. */
|
|
68
|
+
this.BASE_TYPE_ID = "cmis:baseTypeId";
|
|
69
|
+
}
|
|
70
|
+
static {
|
|
71
|
+
/** CMIS property: User who created the object. */
|
|
72
|
+
this.CREATED_BY = "cmis:createdBy";
|
|
73
|
+
}
|
|
74
|
+
static {
|
|
75
|
+
/** CMIS property: Timestamp of object creation. */
|
|
76
|
+
this.CREATION_DATE = "cmis:creationDate";
|
|
77
|
+
}
|
|
78
|
+
static {
|
|
79
|
+
/** CMIS property: User who last modified the object. */
|
|
80
|
+
this.LAST_MODIFIED_BY = "cmis:lastModifiedBy";
|
|
81
|
+
}
|
|
82
|
+
static {
|
|
83
|
+
/** CMIS property: Timestamp of last modification. */
|
|
84
|
+
this.LAST_MODIFICATION_DATE = "cmis:lastModificationDate";
|
|
85
|
+
}
|
|
86
|
+
static {
|
|
87
|
+
/** CMIS property: Change token for object change tracking. */
|
|
88
|
+
this.CHANGE_TOKEN = "cmis:changeToken";
|
|
89
|
+
}
|
|
90
|
+
static {
|
|
91
|
+
// ---- Document CMIS Properties ----
|
|
92
|
+
/** CMIS property: Indicates if the document is immutable. */
|
|
93
|
+
this.IS_IMMUTABLE = "cmis:isImmutable";
|
|
94
|
+
}
|
|
95
|
+
static {
|
|
96
|
+
/** CMIS property: Indicates if the document is the latest version in the version series. */
|
|
97
|
+
this.IS_LATEST_VERSION = "cmis:isLatestVersion";
|
|
98
|
+
}
|
|
99
|
+
static {
|
|
100
|
+
/** CMIS property: Indicates if the document is a major version. */
|
|
101
|
+
this.IS_MAJOR_VERSION = "cmis:isMajorVersion";
|
|
102
|
+
}
|
|
103
|
+
static {
|
|
104
|
+
/** CMIS property: Indicates if the document is the latest major version. */
|
|
105
|
+
this.IS_LATEST_MAJOR_VERSION = "cmis:isLatestMajorVersion";
|
|
106
|
+
}
|
|
107
|
+
static {
|
|
108
|
+
/** CMIS property: Label of the document version. */
|
|
109
|
+
this.VERSION_LABEL = "cmis:versionLabel";
|
|
110
|
+
}
|
|
111
|
+
static {
|
|
112
|
+
/** CMIS property: ID of the version series. */
|
|
113
|
+
this.VERSION_SERIES_ID = "cmis:versionSeriesId";
|
|
114
|
+
}
|
|
115
|
+
static {
|
|
116
|
+
/** CMIS property: Indicates if the version series is checked out. */
|
|
117
|
+
this.IS_VERSION_SERIES_CHECKED_OUT = "cmis:isVersionSeriesCheckedOut";
|
|
118
|
+
}
|
|
119
|
+
static {
|
|
120
|
+
/** CMIS property: User who checked out the version series. */
|
|
121
|
+
this.VERSION_SERIES_CHECKED_OUT_BY = "cmis:versionSeriesCheckedOutBy";
|
|
122
|
+
}
|
|
123
|
+
static {
|
|
124
|
+
/** CMIS property: ID of the checked-out document object. */
|
|
125
|
+
this.VERSION_SERIES_CHECKED_OUT_ID = "cmis:versionSeriesCheckedOutId";
|
|
126
|
+
}
|
|
127
|
+
static {
|
|
128
|
+
/** CMIS property: Comment associated with the check-in operation. */
|
|
129
|
+
this.CHECKIN_COMMENT = "cmis:checkinComment";
|
|
130
|
+
}
|
|
131
|
+
static {
|
|
132
|
+
/** CMIS property: Length of the content stream in bytes. */
|
|
133
|
+
this.CONTENT_STREAM_LENGTH = "cmis:contentStreamLength";
|
|
134
|
+
}
|
|
135
|
+
static {
|
|
136
|
+
/** CMIS property: MIME type of the content stream. */
|
|
137
|
+
this.CONTENT_STREAM_MIME_TYPE = "cmis:contentStreamMimeType";
|
|
138
|
+
}
|
|
139
|
+
static {
|
|
140
|
+
/** CMIS property: Original file name of the content stream. */
|
|
141
|
+
this.CONTENT_STREAM_FILE_NAME = "cmis:contentStreamFileName";
|
|
142
|
+
}
|
|
143
|
+
static {
|
|
144
|
+
/** CMIS property: ID of the content stream. */
|
|
145
|
+
this.CONTENT_STREAM_ID = "cmis:contentStreamId";
|
|
146
|
+
}
|
|
147
|
+
static {
|
|
148
|
+
// ---- Folder CMIS Properties ----
|
|
149
|
+
/** CMIS property: Object ID of the parent folder. */
|
|
150
|
+
this.PARENT_ID = "cmis:parentId";
|
|
151
|
+
}
|
|
152
|
+
static {
|
|
153
|
+
/** CMIS property: List of allowed object type IDs for children. */
|
|
154
|
+
this.ALLOWED_CHILD_OBJECT_TYPE_IDS = "cmis:allowedChildObjectTypeIds";
|
|
155
|
+
}
|
|
156
|
+
static {
|
|
157
|
+
/** CMIS property: Path of the folder in the repository. */
|
|
158
|
+
this.PATH = "cmis:path";
|
|
159
|
+
}
|
|
160
|
+
static {
|
|
161
|
+
// ---- Relationship CMIS Properties ----
|
|
162
|
+
/** CMIS property: Object ID of the relationship source. */
|
|
163
|
+
this.SOURCE_ID = "cmis:sourceId";
|
|
164
|
+
}
|
|
165
|
+
static {
|
|
166
|
+
/** CMIS property: Object ID of the relationship target. */
|
|
167
|
+
this.TARGET_ID = "cmis:targetId";
|
|
168
|
+
}
|
|
169
|
+
static {
|
|
170
|
+
// ---- Policy CMIS Properties ----
|
|
171
|
+
/** CMIS property: Text content of the policy. */
|
|
172
|
+
this.POLICY_TEXT = "cmis:policyText";
|
|
173
|
+
}
|
|
174
|
+
static {
|
|
175
|
+
// ---- Versioning States ----
|
|
176
|
+
/** CMIS Versioning State: No versioning. */
|
|
177
|
+
this.VERSIONING_STATE_NONE = "none";
|
|
178
|
+
}
|
|
179
|
+
static {
|
|
180
|
+
/** CMIS Versioning State: Create a new major version. */
|
|
181
|
+
this.VERSIONING_STATE_MAJOR = "major";
|
|
182
|
+
}
|
|
183
|
+
static {
|
|
184
|
+
/** CMIS Versioning State: Create a new minor version. */
|
|
185
|
+
this.VERSIONING_STATE_MINOR = "minor";
|
|
186
|
+
}
|
|
187
|
+
static {
|
|
188
|
+
/** CMIS Versioning State: Document is checked out. */
|
|
189
|
+
this.VERSIONING_STATE_CHECKEDOUT = "checkedout";
|
|
190
|
+
}
|
|
191
|
+
static {
|
|
192
|
+
// ---- Object Types ----
|
|
193
|
+
/** CMIS Object Type ID: Document. */
|
|
194
|
+
this.OBJECT_TYPE_DOCUMENT = "cmis:document";
|
|
195
|
+
}
|
|
196
|
+
static {
|
|
197
|
+
/** CMIS Object Type ID: Folder. */
|
|
198
|
+
this.OBJECT_TYPE_FOLDER = "cmis:folder";
|
|
199
|
+
}
|
|
200
|
+
static {
|
|
201
|
+
/** CMIS Object Type ID: Relationship. */
|
|
202
|
+
this.OBJECT_TYPE_RELATIONSHIP = "cmis:relationship";
|
|
203
|
+
}
|
|
204
|
+
static {
|
|
205
|
+
/** CMIS Object Type ID: Policy. */
|
|
206
|
+
this.OBJECT_TYPE_POLICY = "cmis:policy";
|
|
207
|
+
}
|
|
208
|
+
static {
|
|
209
|
+
/** CMIS Object Type ID: Item. */
|
|
210
|
+
this.OBJECT_TYPE_ITEM = "cmis:item";
|
|
211
|
+
}
|
|
212
|
+
static {
|
|
213
|
+
/** CMIS Object Type ID: Secondary. */
|
|
214
|
+
this.OBJECT_TYPE_SECONDARY = "cmis:secondary";
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Gets a new CMIS session instance to interact with the repository.
|
|
218
|
+
* @returns A new {@link Session} instance.
|
|
219
|
+
*/
|
|
220
|
+
static getSession() {
|
|
221
|
+
const native = CmisFacade.getSession();
|
|
222
|
+
return new Session(native);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Retrieves access control definitions for a specific path and method.
|
|
226
|
+
* @param path The path of the CMIS object.
|
|
227
|
+
* @param method The operation method (e.g., {@link Cmis.METHOD_READ}, {@link Cmis.METHOD_WRITE}).
|
|
228
|
+
* @returns A list of access definitions.
|
|
229
|
+
*/
|
|
230
|
+
static getAccessDefinitions(path, method) {
|
|
231
|
+
const accessDefinitions = CmisFacade.getAccessDefinitions(path, method);
|
|
232
|
+
return JSON.parse(new Gson().toJson(accessDefinitions));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
class Session {
|
|
236
|
+
constructor(native) {
|
|
237
|
+
this.native = native;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Gets information about the repository this session is connected to.
|
|
241
|
+
* @returns Repository metadata.
|
|
242
|
+
*/
|
|
243
|
+
getRepositoryInfo() {
|
|
244
|
+
const native = this.native.getRepositoryInfo();
|
|
245
|
+
return new RepositoryInfo(native);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Gets the root folder of the repository.
|
|
249
|
+
* @returns The root {@link Folder} object.
|
|
250
|
+
*/
|
|
251
|
+
getRootFolder() {
|
|
252
|
+
const native = this.native.getRootFolder();
|
|
253
|
+
return new Folder(native, null);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Gets the object factory for creating new CMIS objects like ContentStream.
|
|
257
|
+
* @returns An {@link ObjectFactory} instance.
|
|
258
|
+
*/
|
|
259
|
+
getObjectFactory() {
|
|
260
|
+
const native = this.native.getObjectFactory();
|
|
261
|
+
return new ObjectFactory(native);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Retrieves a CMIS object (Document or Folder) by its unique ID.
|
|
265
|
+
* @param objectId The unique ID of the object.
|
|
266
|
+
* @returns A {@link Document} or {@link Folder} instance.
|
|
267
|
+
* @throws Error if the object type is unsupported.
|
|
268
|
+
*/
|
|
269
|
+
getObject(objectId) {
|
|
270
|
+
const objectInstance = this.native.getObject(objectId);
|
|
271
|
+
const objectInstanceType = objectInstance.getType();
|
|
272
|
+
const objectInstanceTypeId = objectInstanceType.getId();
|
|
273
|
+
if (objectInstanceTypeId === Cmis.OBJECT_TYPE_DOCUMENT) {
|
|
274
|
+
return new Document(objectInstance, null);
|
|
275
|
+
} else if (objectInstanceTypeId === Cmis.OBJECT_TYPE_FOLDER) {
|
|
276
|
+
return new Folder(objectInstance, null);
|
|
277
|
+
}
|
|
278
|
+
throw new Error("Unsupported CMIS object type: " + objectInstanceTypeId);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Retrieves a CMIS object (Document or Folder) by its path.
|
|
282
|
+
* @param path The path of the object in the repository (e.g., "/path/to/object").
|
|
283
|
+
* @returns A {@link Document} or {@link Folder} instance.
|
|
284
|
+
* @throws Error if read access is not allowed or the object type is unsupported.
|
|
285
|
+
*/
|
|
286
|
+
getObjectByPath(path) {
|
|
287
|
+
const allowed = CmisFacade.isAllowed(path, Cmis.METHOD_READ);
|
|
288
|
+
if (!allowed) {
|
|
289
|
+
throw new Error("Read access not allowed on: " + path);
|
|
290
|
+
}
|
|
291
|
+
const objectInstance = this.native.getObjectByPath(path);
|
|
292
|
+
const objectInstanceType = objectInstance.getType();
|
|
293
|
+
const objectInstanceTypeId = objectInstanceType.getId();
|
|
294
|
+
if (objectInstanceTypeId === Cmis.OBJECT_TYPE_DOCUMENT) {
|
|
295
|
+
return new Document(objectInstance, path);
|
|
296
|
+
} else if (objectInstanceTypeId === Cmis.OBJECT_TYPE_FOLDER) {
|
|
297
|
+
return new Folder(objectInstance, path);
|
|
298
|
+
}
|
|
299
|
+
throw new Error("Unsupported CMIS object type: " + objectInstanceTypeId);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Creates a folder structure recursively based on a path. This is a convenience method that
|
|
303
|
+
* creates all non-existent parent folders.
|
|
304
|
+
* Example: `createFolder("/new/path/structure")`
|
|
305
|
+
* @param location The path of the folder to create.
|
|
306
|
+
* @returns The newly created (or existing) innermost {@link Folder} object.
|
|
307
|
+
*/
|
|
308
|
+
createFolder(location) {
|
|
309
|
+
if (location.startsWith("/")) {
|
|
310
|
+
location = location.substring(1, location.length);
|
|
311
|
+
}
|
|
312
|
+
if (location.endsWith("/")) {
|
|
313
|
+
location = location.substring(0, location.length - 1);
|
|
314
|
+
}
|
|
315
|
+
const segments = location.split("/");
|
|
316
|
+
let folder = this.getRootFolder();
|
|
317
|
+
for (const next of segments) {
|
|
318
|
+
const properties = {
|
|
319
|
+
[Cmis.OBJECT_TYPE_ID]: Cmis.OBJECT_TYPE_FOLDER,
|
|
320
|
+
[Cmis.NAME]: next
|
|
321
|
+
};
|
|
322
|
+
folder = folder.createFolder(properties);
|
|
323
|
+
}
|
|
324
|
+
return folder;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Creates a new document at the specified location. This method ensures the parent folder structure exists.
|
|
328
|
+
* @param location The path of the parent folder (e.g., "/path/to/folder").
|
|
329
|
+
* @param properties A map of CMIS properties for the new document (must include {@link Cmis.NAME}).
|
|
330
|
+
* @param contentStream The content stream containing the document's binary data.
|
|
331
|
+
* @param versioningState The versioning state (e.g., {@link Cmis.VERSIONING_STATE_MAJOR}).
|
|
332
|
+
* @returns The newly created {@link Document} object.
|
|
333
|
+
*/
|
|
334
|
+
createDocument(location, properties, contentStream, versioningState) {
|
|
335
|
+
const folder = this.createFolder(location);
|
|
336
|
+
return folder.createDocument(properties, contentStream, versioningState);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
class RepositoryInfo {
|
|
340
|
+
constructor(native) {
|
|
341
|
+
this.native = native;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Gets the unique identifier of the repository.
|
|
345
|
+
* @returns The repository ID.
|
|
346
|
+
*/
|
|
347
|
+
getId() {
|
|
348
|
+
return this.native.getId();
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Gets the name of the repository.
|
|
352
|
+
* @returns The repository name.
|
|
353
|
+
*/
|
|
354
|
+
getName() {
|
|
355
|
+
return this.native.getName();
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
class Folder {
|
|
359
|
+
constructor(native, path) {
|
|
360
|
+
this.native = native;
|
|
361
|
+
this.path = path;
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Gets the unique identifier of the folder.
|
|
365
|
+
* @returns The folder ID.
|
|
366
|
+
*/
|
|
367
|
+
getId() {
|
|
368
|
+
return this.native.getId();
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Gets the name of the folder.
|
|
372
|
+
* @returns The folder name.
|
|
373
|
+
*/
|
|
374
|
+
getName() {
|
|
375
|
+
return this.native.getName();
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Creates a new folder within this folder.
|
|
379
|
+
* @param properties A map of CMIS properties for the new folder (must include {@link Cmis.NAME}).
|
|
380
|
+
* @returns The newly created {@link Folder} object.
|
|
381
|
+
* @throws Error if write access is not allowed.
|
|
382
|
+
*/
|
|
383
|
+
createFolder(properties) {
|
|
384
|
+
var allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
385
|
+
if (!allowed) {
|
|
386
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
387
|
+
}
|
|
388
|
+
var mapInstance = new HashMap();
|
|
389
|
+
for (var property in properties) {
|
|
390
|
+
if (properties.hasOwnProperty(property)) {
|
|
391
|
+
mapInstance.put(property, properties[property]);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
var native = this.native.createFolder(mapInstance);
|
|
395
|
+
var folder = new Folder(native, null);
|
|
396
|
+
return folder;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Creates a new document within this folder.
|
|
400
|
+
* @param properties A map of CMIS properties for the new document (must include {@link Cmis.NAME}).
|
|
401
|
+
* @param contentStream The content stream containing the document's binary data.
|
|
402
|
+
* @param versioningState The versioning state (e.g., {@link Cmis.VERSIONING_STATE_MAJOR}).
|
|
403
|
+
* @returns The newly created {@link Document} object.
|
|
404
|
+
* @throws Error if write access is not allowed.
|
|
405
|
+
*/
|
|
406
|
+
createDocument(properties, contentStream, versioningState) {
|
|
407
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
408
|
+
if (!allowed) {
|
|
409
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
410
|
+
}
|
|
411
|
+
const mapInstance = new HashMap();
|
|
412
|
+
for (const property in properties) {
|
|
413
|
+
if (properties.hasOwnProperty(property)) {
|
|
414
|
+
mapInstance.put(property, properties[property]);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
const state = CmisFacade.getVersioningState(versioningState);
|
|
418
|
+
const native = this.native.createDocument(mapInstance, contentStream.native, state);
|
|
419
|
+
return new Document(native, null);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Retrieves the children of this folder.
|
|
423
|
+
* @returns A list of generic {@link CmisObject} wrappers for the children.
|
|
424
|
+
* @throws Error if read access is not allowed.
|
|
425
|
+
*/
|
|
426
|
+
getChildren() {
|
|
427
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_READ);
|
|
428
|
+
if (!allowed) {
|
|
429
|
+
throw new Error("Read access not allowed on: " + this.getPath());
|
|
430
|
+
}
|
|
431
|
+
const children = [];
|
|
432
|
+
const childrenInstance = this.native.getChildren();
|
|
433
|
+
const childrenInstanceIterator = childrenInstance.iterator();
|
|
434
|
+
while (childrenInstanceIterator.hasNext()) {
|
|
435
|
+
const cmisObjectInstance = childrenInstanceIterator.next();
|
|
436
|
+
const cmisObject = new CmisObject(cmisObjectInstance);
|
|
437
|
+
children.push(cmisObject);
|
|
438
|
+
}
|
|
439
|
+
return children;
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Gets the path of the folder.
|
|
443
|
+
* @returns The folder path.
|
|
444
|
+
*/
|
|
445
|
+
getPath() {
|
|
446
|
+
return this.path;
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Checks if this folder is the root folder of the repository.
|
|
450
|
+
* @returns True if it is the root folder, false otherwise.
|
|
451
|
+
*/
|
|
452
|
+
isRootFolder() {
|
|
453
|
+
return this.native.isRootFolder();
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Gets the parent folder of this folder.
|
|
457
|
+
* @returns The parent {@link Folder} object.
|
|
458
|
+
*/
|
|
459
|
+
getFolderParent() {
|
|
460
|
+
const native = this.native.getFolderParent();
|
|
461
|
+
return new Folder(native, null);
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Deletes this folder (must be empty to succeed).
|
|
465
|
+
* @throws Error if write access is not allowed.
|
|
466
|
+
*/
|
|
467
|
+
delete() {
|
|
468
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
469
|
+
if (!allowed) {
|
|
470
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
471
|
+
}
|
|
472
|
+
this.native.delete();
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Renames this folder.
|
|
476
|
+
* @param newName The new name for the folder.
|
|
477
|
+
* @throws Error if write access is not allowed.
|
|
478
|
+
*/
|
|
479
|
+
rename(newName) {
|
|
480
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
481
|
+
if (!allowed) {
|
|
482
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
483
|
+
}
|
|
484
|
+
this.native.rename(newName);
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Deletes this folder and all its contents recursively.
|
|
488
|
+
* @throws Error if write access is not allowed.
|
|
489
|
+
*/
|
|
490
|
+
deleteTree() {
|
|
491
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
492
|
+
if (!allowed) {
|
|
493
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
494
|
+
}
|
|
495
|
+
const unifiedObjectDelete = CmisFacade.getUnifiedObjectDelete();
|
|
496
|
+
this.native.deleteTree(true, unifiedObjectDelete, true);
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Gets the type definition of the folder.
|
|
500
|
+
* @returns The folder's {@link TypeDefinition}.
|
|
501
|
+
*/
|
|
502
|
+
getType() {
|
|
503
|
+
const native = this.native.getType();
|
|
504
|
+
return new TypeDefinition(native);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
class CmisObject {
|
|
508
|
+
constructor(native) {
|
|
509
|
+
this.native = native;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Gets the unique identifier of the object.
|
|
513
|
+
* @returns The object ID.
|
|
514
|
+
*/
|
|
515
|
+
getId() {
|
|
516
|
+
return this.native.getId();
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Gets the name of the object.
|
|
520
|
+
* @returns The object name.
|
|
521
|
+
*/
|
|
522
|
+
getName() {
|
|
523
|
+
return this.native.getName();
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Gets the path of the CMIS object. Handles differences in native CMIS implementations.
|
|
527
|
+
* @returns The object path.
|
|
528
|
+
* @throws Error if the path cannot be determined.
|
|
529
|
+
*/
|
|
530
|
+
getPath() {
|
|
531
|
+
if (this.native.getPath) {
|
|
532
|
+
return this.native.getPath();
|
|
533
|
+
}
|
|
534
|
+
if (this.native.getPaths) {
|
|
535
|
+
return this.native.getPaths()[0];
|
|
536
|
+
}
|
|
537
|
+
throw new Error(`Path not found for CmisObject with id ${this.getId()}`);
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Gets the type definition of the object.
|
|
541
|
+
* @returns The object's {@link TypeDefinition}.
|
|
542
|
+
*/
|
|
543
|
+
getType() {
|
|
544
|
+
const native = this.native.getType();
|
|
545
|
+
return new TypeDefinition(native);
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Deletes the CMIS object.
|
|
549
|
+
*/
|
|
550
|
+
delete() {
|
|
551
|
+
this.native.delete();
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Renames the CMIS object.
|
|
555
|
+
* @param newName The new name for the object.
|
|
556
|
+
*/
|
|
557
|
+
rename(newName) {
|
|
558
|
+
this.native.rename(newName);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
class ObjectFactory {
|
|
562
|
+
constructor(native) {
|
|
563
|
+
this.native = native;
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* Creates a new content stream instance that can be used to create or update document content.
|
|
567
|
+
* @param filename The name of the file.
|
|
568
|
+
* @param length The size of the content stream in bytes.
|
|
569
|
+
* @param mimetype The MIME type of the content.
|
|
570
|
+
* @param inputStream The input stream containing the data.
|
|
571
|
+
* @returns A new {@link ContentStream} object.
|
|
572
|
+
*/
|
|
573
|
+
createContentStream(filename, length, mimetype, inputStream) {
|
|
574
|
+
const native = this.native.createContentStream(filename, length, mimetype, inputStream.native);
|
|
575
|
+
return new ContentStream(native);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
class ContentStream {
|
|
579
|
+
constructor(native) {
|
|
580
|
+
this.native = native;
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Gets the Java-backed input stream for reading the content.
|
|
584
|
+
* @returns An {@link streams.InputStream} wrapper.
|
|
585
|
+
*/
|
|
586
|
+
getStream() {
|
|
587
|
+
const native = this.native.getStream();
|
|
588
|
+
return new streams.InputStream(native);
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Gets the MIME type of the content stream.
|
|
592
|
+
* @returns The MIME type string.
|
|
593
|
+
*/
|
|
594
|
+
getMimeType() {
|
|
595
|
+
return this.native.getMimeType();
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
class Document {
|
|
599
|
+
constructor(native, path) {
|
|
600
|
+
this.native = native;
|
|
601
|
+
this.path = path;
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Gets the unique identifier of the document.
|
|
605
|
+
* @returns The document ID.
|
|
606
|
+
*/
|
|
607
|
+
getId() {
|
|
608
|
+
return this.native.getId();
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Gets the name of the document.
|
|
612
|
+
* @returns The document name.
|
|
613
|
+
*/
|
|
614
|
+
getName() {
|
|
615
|
+
return this.native.getName();
|
|
616
|
+
}
|
|
617
|
+
/**
|
|
618
|
+
* Gets the type definition of the document.
|
|
619
|
+
* @returns The document's {@link TypeDefinition}.
|
|
620
|
+
*/
|
|
621
|
+
getType() {
|
|
622
|
+
const native = this.native.getType();
|
|
623
|
+
return new TypeDefinition(native);
|
|
624
|
+
}
|
|
625
|
+
/**
|
|
626
|
+
* Gets the path of the document.
|
|
627
|
+
* @returns The document path.
|
|
628
|
+
*/
|
|
629
|
+
getPath() {
|
|
630
|
+
return this.path;
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Deletes this document.
|
|
634
|
+
* @throws Error if write access is not allowed.
|
|
635
|
+
*/
|
|
636
|
+
delete() {
|
|
637
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
638
|
+
if (!allowed) {
|
|
639
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
640
|
+
}
|
|
641
|
+
return this.native.delete(true);
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Gets the binary content stream of the document.
|
|
645
|
+
* @returns The {@link ContentStream} object, or `null` if the document has no content.
|
|
646
|
+
*/
|
|
647
|
+
getContentStream() {
|
|
648
|
+
const native = this.native.getContentStream();
|
|
649
|
+
if (native !== null) {
|
|
650
|
+
return new ContentStream(native);
|
|
651
|
+
}
|
|
652
|
+
return null;
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* Gets the size of the document's content stream in bytes.
|
|
656
|
+
* @returns The size in bytes.
|
|
657
|
+
*/
|
|
658
|
+
getSize() {
|
|
659
|
+
return this.native.getSize();
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Renames this document.
|
|
663
|
+
* @param newName The new name for the document.
|
|
664
|
+
* @throws Error if write access is not allowed.
|
|
665
|
+
*/
|
|
666
|
+
rename(newName) {
|
|
667
|
+
const allowed = CmisFacade.isAllowed(this.getPath(), Cmis.METHOD_WRITE);
|
|
668
|
+
if (!allowed) {
|
|
669
|
+
throw new Error("Write access not allowed on: " + this.getPath());
|
|
670
|
+
}
|
|
671
|
+
this.native.rename(newName);
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
class TypeDefinition {
|
|
675
|
+
constructor(native) {
|
|
676
|
+
this.native = native;
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* Gets the unique ID of the object type (e.g., 'cmis:document').
|
|
680
|
+
* @returns The type ID.
|
|
681
|
+
*/
|
|
682
|
+
getId() {
|
|
683
|
+
return this.native.getId();
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
if (typeof module !== "undefined") {
|
|
687
|
+
module.exports = Cmis;
|
|
688
|
+
}
|
|
689
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Ntcy9jbWlzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBDTUlTXG4gKiAqIE5vdGU6IFRoaXMgbW9kdWxlIGlzIHN1cHBvcnRlZCBvbmx5IHdpdGggdGhlIE1vemlsbGEgUmhpbm8gZW5naW5lXG4gKiAqIFByb3ZpZGVzIHN0YXRpYyBhY2Nlc3MgdG8gdGhlIENNSVMgKENvbnRlbnQgTWFuYWdlbWVudCBJbnRlcm9wZXJhYmlsaXR5IFNlcnZpY2VzKSByZXBvc2l0b3J5IHNlc3Npb24gYW5kIHV0aWxpdHkgY29uc3RhbnRzLlxuICovXG5cbmltcG9ydCAqIGFzIHN0cmVhbXMgZnJvbSBcIkBhZXJva2l0L3Nkay9pby9zdHJlYW1zXCI7XG5jb25zdCBDbWlzRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLmNtcy5DbWlzRmFjYWRlXCIpO1xuY29uc3QgR3NvbiA9IEphdmEudHlwZShcImNvbS5nb29nbGUuZ3Nvbi5Hc29uXCIpO1xuY29uc3QgSGFzaE1hcCA9IEphdmEudHlwZShcImphdmEudXRpbC5IYXNoTWFwXCIpO1xuXG5leHBvcnQgY2xhc3MgQ21pcyB7XG5cblx0Ly8gQ09OU1RBTlRTXG5cdC8qKlxuXHQgKiBDTUlTIG1ldGhvZCBjb25zdGFudCBmb3IgcmVhZCBvcGVyYXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBNRVRIT0RfUkVBRCA9IFwiUkVBRFwiO1xuXHQvKipcblx0ICogQ01JUyBtZXRob2QgY29uc3RhbnQgZm9yIHdyaXRlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1FVEhPRF9XUklURSA9IFwiV1JJVEVcIjtcblxuXHQvLyAtLS0tIEJhc2UgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IE9iamVjdCBuYW1lLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5BTUUgPSBcImNtaXM6bmFtZVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9JRCA9IFwiY21pczpvYmplY3RJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9JRCA9IFwiY21pczpvYmplY3RUeXBlSWRcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEJhc2Ugb2JqZWN0IHR5cGUgaWRlbnRpZmllci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBCQVNFX1RZUEVfSUQgPSBcImNtaXM6YmFzZVR5cGVJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVXNlciB3aG8gY3JlYXRlZCB0aGUgb2JqZWN0LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFURURfQlkgPSBcImNtaXM6Y3JlYXRlZEJ5XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBUaW1lc3RhbXAgb2Ygb2JqZWN0IGNyZWF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENSRUFUSU9OX0RBVEUgPSBcImNtaXM6Y3JlYXRpb25EYXRlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBsYXN0IG1vZGlmaWVkIHRoZSBvYmplY3QuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTEFTVF9NT0RJRklFRF9CWSA9IFwiY21pczpsYXN0TW9kaWZpZWRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogVGltZXN0YW1wIG9mIGxhc3QgbW9kaWZpY2F0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBU1RfTU9ESUZJQ0FUSU9OX0RBVEUgPSBcImNtaXM6bGFzdE1vZGlmaWNhdGlvbkRhdGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IENoYW5nZSB0b2tlbiBmb3Igb2JqZWN0IGNoYW5nZSB0cmFja2luZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDSEFOR0VfVE9LRU4gPSBcImNtaXM6Y2hhbmdlVG9rZW5cIjtcblxuXHQvLyAtLS0tIERvY3VtZW50IENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGltbXV0YWJsZS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19JTU1VVEFCTEUgPSBcImNtaXM6aXNJbW11dGFibGVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCB2ZXJzaW9uIGluIHRoZSB2ZXJzaW9uIHNlcmllcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19MQVRFU1RfVkVSU0lPTiA9IFwiY21pczppc0xhdGVzdFZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX01BSk9SX1ZFUlNJT04gPSBcImNtaXM6aXNNYWpvclZlcnNpb25cIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IEluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgdGhlIGxhdGVzdCBtYWpvciB2ZXJzaW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElTX0xBVEVTVF9NQUpPUl9WRVJTSU9OID0gXCJjbWlzOmlzTGF0ZXN0TWFqb3JWZXJzaW9uXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBMYWJlbCBvZiB0aGUgZG9jdW1lbnQgdmVyc2lvbi4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX0xBQkVMID0gXCJjbWlzOnZlcnNpb25MYWJlbFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIHZlcnNpb24gc2VyaWVzLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZFUlNJT05fU0VSSUVTX0lEID0gXCJjbWlzOnZlcnNpb25TZXJpZXNJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSW5kaWNhdGVzIGlmIHRoZSB2ZXJzaW9uIHNlcmllcyBpcyBjaGVja2VkIG91dC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBJU19WRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVCA9IFwiY21pczppc1ZlcnNpb25TZXJpZXNDaGVja2VkT3V0XCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBVc2VyIHdobyBjaGVja2VkIG91dCB0aGUgdmVyc2lvbiBzZXJpZXMuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTl9TRVJJRVNfQ0hFQ0tFRF9PVVRfQlkgPSBcImNtaXM6dmVyc2lvblNlcmllc0NoZWNrZWRPdXRCeVwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogSUQgb2YgdGhlIGNoZWNrZWQtb3V0IGRvY3VtZW50IG9iamVjdC4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OX1NFUklFU19DSEVDS0VEX09VVF9JRCA9IFwiY21pczp2ZXJzaW9uU2VyaWVzQ2hlY2tlZE91dElkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBDb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hlY2staW4gb3BlcmF0aW9uLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENIRUNLSU5fQ09NTUVOVCA9IFwiY21pczpjaGVja2luQ29tbWVudFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGVuZ3RoIG9mIHRoZSBjb250ZW50IHN0cmVhbSBpbiBieXRlcy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9MRU5HVEggPSBcImNtaXM6Y29udGVudFN0cmVhbUxlbmd0aFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9NSU1FX1RZUEUgPSBcImNtaXM6Y29udGVudFN0cmVhbU1pbWVUeXBlXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPcmlnaW5hbCBmaWxlIG5hbWUgb2YgdGhlIGNvbnRlbnQgc3RyZWFtLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENPTlRFTlRfU1RSRUFNX0ZJTEVfTkFNRSA9IFwiY21pczpjb250ZW50U3RyZWFtRmlsZU5hbWVcIjtcblx0LyoqIENNSVMgcHJvcGVydHk6IElEIG9mIHRoZSBjb250ZW50IHN0cmVhbS4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBDT05URU5UX1NUUkVBTV9JRCA9IFwiY21pczpjb250ZW50U3RyZWFtSWRcIjtcblxuXHQvLyAtLS0tIEZvbGRlciBDTUlTIFByb3BlcnRpZXMgLS0tLVxuXHQvKiogQ01JUyBwcm9wZXJ0eTogT2JqZWN0IElEIG9mIHRoZSBwYXJlbnQgZm9sZGVyLiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBUkVOVF9JRCA9IFwiY21pczpwYXJlbnRJZFwiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogTGlzdCBvZiBhbGxvd2VkIG9iamVjdCB0eXBlIElEcyBmb3IgY2hpbGRyZW4uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMT1dFRF9DSElMRF9PQkpFQ1RfVFlQRV9JRFMgPSBcImNtaXM6YWxsb3dlZENoaWxkT2JqZWN0VHlwZUlkc1wiO1xuXHQvKiogQ01JUyBwcm9wZXJ0eTogUGF0aCBvZiB0aGUgZm9sZGVyIGluIHRoZSByZXBvc2l0b3J5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBVEggPSBcImNtaXM6cGF0aFwiO1xuXG5cdC8vIC0tLS0gUmVsYXRpb25zaGlwIENNSVMgUHJvcGVydGllcyAtLS0tXG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCBzb3VyY2UuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU09VUkNFX0lEID0gXCJjbWlzOnNvdXJjZUlkXCI7XG5cdC8qKiBDTUlTIHByb3BlcnR5OiBPYmplY3QgSUQgb2YgdGhlIHJlbGF0aW9uc2hpcCB0YXJnZXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVEFSR0VUX0lEID0gXCJjbWlzOnRhcmdldElkXCI7XG5cblx0Ly8gLS0tLSBQb2xpY3kgQ01JUyBQcm9wZXJ0aWVzIC0tLS1cblx0LyoqIENNSVMgcHJvcGVydHk6IFRleHQgY29udGVudCBvZiB0aGUgcG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBPTElDWV9URVhUID0gXCJjbWlzOnBvbGljeVRleHRcIjtcblxuXHQvLyAtLS0tIFZlcnNpb25pbmcgU3RhdGVzIC0tLS1cblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogTm8gdmVyc2lvbmluZy4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBWRVJTSU9OSU5HX1NUQVRFX05PTkUgPSBcIm5vbmVcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1ham9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NQUpPUiA9IFwibWFqb3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogQ3JlYXRlIGEgbmV3IG1pbm9yIHZlcnNpb24uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9NSU5PUiA9IFwibWlub3JcIjtcblx0LyoqIENNSVMgVmVyc2lvbmluZyBTdGF0ZTogRG9jdW1lbnQgaXMgY2hlY2tlZCBvdXQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVkVSU0lPTklOR19TVEFURV9DSEVDS0VET1VUID0gXCJjaGVja2Vkb3V0XCI7XG5cblx0Ly8gLS0tLSBPYmplY3QgVHlwZXMgLS0tLVxuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogRG9jdW1lbnQuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfRE9DVU1FTlQgPSBcImNtaXM6ZG9jdW1lbnRcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEZvbGRlci4gKi9cblx0cHVibGljIHN0YXRpYyByZWFkb25seSBPQkpFQ1RfVFlQRV9GT0xERVIgPSBcImNtaXM6Zm9sZGVyXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBSZWxhdGlvbnNoaXAuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfUkVMQVRJT05TSElQID0gXCJjbWlzOnJlbGF0aW9uc2hpcFwiO1xuXHQvKiogQ01JUyBPYmplY3QgVHlwZSBJRDogUG9saWN5LiAqL1xuXHRwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9CSkVDVF9UWVBFX1BPTElDWSA9IFwiY21pczpwb2xpY3lcIjtcblx0LyoqIENNSVMgT2JqZWN0IFR5cGUgSUQ6IEl0ZW0uICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfSVRFTSA9IFwiY21pczppdGVtXCI7XG5cdC8qKiBDTUlTIE9iamVjdCBUeXBlIElEOiBTZWNvbmRhcnkuICovXG5cdHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT0JKRUNUX1RZUEVfU0VDT05EQVJZID0gXCJjbWlzOnNlY29uZGFyeVwiO1xuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IENNSVMgc2Vzc2lvbiBpbnN0YW5jZSB0byBpbnRlcmFjdCB3aXRoIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgU2Vzc2lvbn0gaW5zdGFuY2UuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFNlc3Npb24oKTogU2Vzc2lvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gQ21pc0ZhY2FkZS5nZXRTZXNzaW9uKCk7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFjY2VzcyBjb250cm9sIGRlZmluaXRpb25zIGZvciBhIHNwZWNpZmljIHBhdGggYW5kIG1ldGhvZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggb2YgdGhlIENNSVMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbWV0aG9kIFRoZSBvcGVyYXRpb24gbWV0aG9kIChlLmcuLCB7QGxpbmsgQ21pcy5NRVRIT0RfUkVBRH0sIHtAbGluayBDbWlzLk1FVEhPRF9XUklURX0pLlxuXHQgKiBAcmV0dXJucyBBIGxpc3Qgb2YgYWNjZXNzIGRlZmluaXRpb25zLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRBY2Nlc3NEZWZpbml0aW9ucyhwYXRoOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nKTogQWNjZXNzRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBhY2Nlc3NEZWZpbml0aW9ucyA9IENtaXNGYWNhZGUuZ2V0QWNjZXNzRGVmaW5pdGlvbnMocGF0aCwgbWV0aG9kKTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShuZXcgR3NvbigpLnRvSnNvbihhY2Nlc3NEZWZpbml0aW9ucykpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBhY2Nlc3MgY29udHJvbCBlbnRyeSAoQUNFKSBmb3IgYSBDTUlTIG9iamVjdCwgZGV0YWlsaW5nXG4gKiB3aG8gaGFzIHdoYXQgcGVybWlzc2lvbnMgb24gYSBwYXRoLlxuICovXG5pbnRlcmZhY2UgQWNjZXNzRGVmaW5pdGlvbiB7XG5cdC8qKiBHZXRzIHRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFjY2VzcyBkZWZpbml0aW9uLiAqL1xuXHRnZXRJZCgpOiBzdHJpbmc7XG5cdC8qKiBHZXRzIHRoZSBzY29wZSBvZiB0aGUgZGVmaW5pdGlvbiAoZS5nLiwgJ3VzZXInLCAnZ3JvdXAnKS4gKi9cblx0Z2V0U2NvcGUoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgcGF0aCBvZiB0aGUgQ01JUyBvYmplY3QgdGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8uICovXG5cdGdldFBhdGgoKTogc3RyaW5nO1xuXHQvKiogR2V0cyB0aGUgbWV0aG9kL29wZXJhdGlvbiB0aGlzIGRlZmluaXRpb24gYXBwbGllcyB0byAoZS5nLiwgJ1JFQUQnLCAnV1JJVEUnKS4gKi9cblx0Z2V0TWV0aG9kKCk6IHN0cmluZztcblx0LyoqIEdldHMgdGhlIHNlY3VyaXR5IHJvbGUgKGUuZy4sICdBZG1pbmlzdHJhdG9yJywgJ1ZpZXdlcicpLiAqL1xuXHRnZXRSb2xlKCk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZXNzaW9uIG9iamVjdFxuICogKiBSZXByZXNlbnRzIGFuIGFjdGl2ZSBjb25uZWN0aW9uIHRvIGEgQ01JUyByZXBvc2l0b3J5LCB1c2VkIGFzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBDTUlTIG9wZXJhdGlvbnMuXG4gKi9cbmNsYXNzIFNlc3Npb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IHRoaXMgc2Vzc2lvbiBpcyBjb25uZWN0ZWQgdG8uXG5cdCAqIEByZXR1cm5zIFJlcG9zaXRvcnkgbWV0YWRhdGEuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0UmVwb3NpdG9yeUluZm8oKTogUmVwb3NpdG9yeUluZm8ge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJlcG9zaXRvcnlJbmZvKCk7XG5cdFx0cmV0dXJuIG5ldyBSZXBvc2l0b3J5SW5mbyhuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUaGUgcm9vdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Um9vdEZvbGRlcigpOiBGb2xkZXIge1xuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldFJvb3RGb2xkZXIoKTtcblx0XHRyZXR1cm4gbmV3IEZvbGRlcihuYXRpdmUsIG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG9iamVjdCBmYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgQ01JUyBvYmplY3RzIGxpa2UgQ29udGVudFN0cmVhbS5cblx0ICogQHJldHVybnMgQW4ge0BsaW5rIE9iamVjdEZhY3Rvcnl9IGluc3RhbmNlLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEZhY3RvcnkoKTogT2JqZWN0RmFjdG9yeSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0RmFjdG9yeSgpO1xuXHRcdHJldHVybiBuZXcgT2JqZWN0RmFjdG9yeShuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhIENNSVMgb2JqZWN0IChEb2N1bWVudCBvciBGb2xkZXIpIGJ5IGl0cyB1bmlxdWUgSUQuXG5cdCAqIEBwYXJhbSBvYmplY3RJZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIEEge0BsaW5rIERvY3VtZW50fSBvciB7QGxpbmsgRm9sZGVyfSBpbnN0YW5jZS5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgb2JqZWN0IHR5cGUgaXMgdW5zdXBwb3J0ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T2JqZWN0KG9iamVjdElkOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3Qgb2JqZWN0SW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRPYmplY3Qob2JqZWN0SWQpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgbnVsbCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBudWxsKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGEgQ01JUyBvYmplY3QgKERvY3VtZW50IG9yIEZvbGRlcikgYnkgaXRzIHBhdGguXG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBvYmplY3QgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4sIFwiL3BhdGgvdG8vb2JqZWN0XCIpLlxuXHQgKiBAcmV0dXJucyBBIHtAbGluayBEb2N1bWVudH0gb3Ige0BsaW5rIEZvbGRlcn0gaW5zdGFuY2UuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgcmVhZCBhY2Nlc3MgaXMgbm90IGFsbG93ZWQgb3IgdGhlIG9iamVjdCB0eXBlIGlzIHVuc3VwcG9ydGVkLlxuXHQgKi9cblx0cHVibGljIGdldE9iamVjdEJ5UGF0aChwYXRoOiBzdHJpbmcpOiBGb2xkZXIgfCBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHBhdGgsIENtaXMuTUVUSE9EX1JFQUQpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmVhZCBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgcGF0aCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0T2JqZWN0QnlQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IG9iamVjdEluc3RhbmNlVHlwZSA9IG9iamVjdEluc3RhbmNlLmdldFR5cGUoKTtcblx0XHRjb25zdCBvYmplY3RJbnN0YW5jZVR5cGVJZCA9IG9iamVjdEluc3RhbmNlVHlwZS5nZXRJZCgpO1xuXHRcdGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9ET0NVTUVOVCkge1xuXHRcdFx0cmV0dXJuIG5ldyBEb2N1bWVudChvYmplY3RJbnN0YW5jZSwgcGF0aCk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RJbnN0YW5jZVR5cGVJZCA9PT0gQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIpIHtcblx0XHRcdHJldHVybiBuZXcgRm9sZGVyKG9iamVjdEluc3RhbmNlLCBwYXRoKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgQ01JUyBvYmplY3QgdHlwZTogXCIgKyBvYmplY3RJbnN0YW5jZVR5cGVJZCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZvbGRlciBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkgYmFzZWQgb24gYSBwYXRoLiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXRcblx0ICogY3JlYXRlcyBhbGwgbm9uLWV4aXN0ZW50IHBhcmVudCBmb2xkZXJzLlxuXHQgKiBFeGFtcGxlOiBgY3JlYXRlRm9sZGVyKFwiL25ldy9wYXRoL3N0cnVjdHVyZVwiKWBcblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCAob3IgZXhpc3RpbmcpIGlubmVybW9zdCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRm9sZGVyKGxvY2F0aW9uOiBzdHJpbmcpOiBGb2xkZXIge1xuXHRcdGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMSwgbG9jYXRpb24ubGVuZ3RoKTtcblx0XHR9XG5cdFx0aWYgKGxvY2F0aW9uLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0bG9jYXRpb24gPSBsb2NhdGlvbi5zdWJzdHJpbmcoMCwgbG9jYXRpb24ubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNlZ21lbnRzID0gbG9jYXRpb24uc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBmb2xkZXIgPSB0aGlzLmdldFJvb3RGb2xkZXIoKTtcblx0XHRmb3IgKGNvbnN0IG5leHQgb2Ygc2VnbWVudHMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdFtDbWlzLk9CSkVDVF9UWVBFX0lEXTogQ21pcy5PQkpFQ1RfVFlQRV9GT0xERVIsXG5cdFx0XHRcdFtDbWlzLk5BTUVdOiBuZXh0XG5cdFx0XHR9O1xuXHRcdFx0Zm9sZGVyID0gZm9sZGVyLmNyZWF0ZUZvbGRlcihwcm9wZXJ0aWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhlIHBhcmVudCBmb2xkZXIgc3RydWN0dXJlIGV4aXN0cy5cblx0ICogQHBhcmFtIGxvY2F0aW9uIFRoZSBwYXRoIG9mIHRoZSBwYXJlbnQgZm9sZGVyIChlLmcuLCBcIi9wYXRoL3RvL2ZvbGRlclwiKS5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVEb2N1bWVudChsb2NhdGlvbjogc3RyaW5nLCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjb250ZW50U3RyZWFtOiBDb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGU6IHN0cmluZyk6IERvY3VtZW50IHtcblx0XHRjb25zdCBmb2xkZXIgPSB0aGlzLmNyZWF0ZUZvbGRlcihsb2NhdGlvbik7XG5cdFx0cmV0dXJuIGZvbGRlci5jcmVhdGVEb2N1bWVudChwcm9wZXJ0aWVzLCBjb250ZW50U3RyZWFtLCB2ZXJzaW9uaW5nU3RhdGUpO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5SW5mbyBvYmplY3RcbiAqICogUHJvdmlkZXMgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbm5lY3RlZCBDTUlTIHJlcG9zaXRvcnkuXG4gKi9cbmNsYXNzIFJlcG9zaXRvcnlJbmZvIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcG9zaXRvcnkuXG5cdCAqIEByZXR1cm5zIFRoZSByZXBvc2l0b3J5IElELlxuXHQgKi9cblx0cHVibGljIGdldElkKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldElkKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeS5cblx0ICogQHJldHVybnMgVGhlIHJlcG9zaXRvcnkgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxufVxuXG4vKipcbiAqIEZvbGRlciBvYmplY3RcbiAqICogUmVwcmVzZW50cyBhIENNSVMgZm9sZGVyIG9iamVjdCwgYWxsb3dpbmcgb3BlcmF0aW9ucyBsaWtlIGNyZWF0aW5nIGNoaWxkcmVuLCBkZWxldGluZywgYW5kIHJlbmFtaW5nLlxuICovXG5leHBvcnQgY2xhc3MgRm9sZGVyIHtcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlciBuYW1lLlxuXHQgKi9cblx0cHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgZm9sZGVyIHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGZvbGRlciAobXVzdCBpbmNsdWRlIHtAbGluayBDbWlzLk5BTUV9KS5cblx0ICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQge0BsaW5rIEZvbGRlcn0gb2JqZWN0LlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHdyaXRlIGFjY2VzcyBpcyBub3QgYWxsb3dlZC5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVGb2xkZXIocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IEZvbGRlciB7XG5cdFx0dmFyIGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dmFyIG1hcEluc3RhbmNlID0gbmV3IEhhc2hNYXAoKTtcblx0XHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVGb2xkZXIobWFwSW5zdGFuY2UpO1xuXHRcdHZhciBmb2xkZXIgPSBuZXcgRm9sZGVyKG5hdGl2ZSwgbnVsbCk7XG5cdFx0cmV0dXJuIGZvbGRlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGRvY3VtZW50IHdpdGhpbiB0aGlzIGZvbGRlci5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgQSBtYXAgb2YgQ01JUyBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IGRvY3VtZW50IChtdXN0IGluY2x1ZGUge0BsaW5rIENtaXMuTkFNRX0pLlxuXHQgKiBAcGFyYW0gY29udGVudFN0cmVhbSBUaGUgY29udGVudCBzdHJlYW0gY29udGFpbmluZyB0aGUgZG9jdW1lbnQncyBiaW5hcnkgZGF0YS5cblx0ICogQHBhcmFtIHZlcnNpb25pbmdTdGF0ZSBUaGUgdmVyc2lvbmluZyBzdGF0ZSAoZS5nLiwge0BsaW5rIENtaXMuVkVSU0lPTklOR19TVEFURV9NQUpPUn0pLlxuXHQgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB7QGxpbmsgRG9jdW1lbnR9IG9iamVjdC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlRG9jdW1lbnQocHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY29udGVudFN0cmVhbTogQ29udGVudFN0cmVhbSwgdmVyc2lvbmluZ1N0YXRlOiBzdHJpbmcpOiBEb2N1bWVudCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCBtYXBJbnN0YW5jZSA9IG5ldyBIYXNoTWFwKCk7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0bWFwSW5zdGFuY2UucHV0KHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHN0YXRlID0gQ21pc0ZhY2FkZS5nZXRWZXJzaW9uaW5nU3RhdGUodmVyc2lvbmluZ1N0YXRlKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5jcmVhdGVEb2N1bWVudChtYXBJbnN0YW5jZSwgY29udGVudFN0cmVhbS5uYXRpdmUsIHN0YXRlKTtcblx0XHRyZXR1cm4gbmV3IERvY3VtZW50KG5hdGl2ZSwgbnVsbCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY2hpbGRyZW4gb2YgdGhpcyBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBvZiBnZW5lcmljIHtAbGluayBDbWlzT2JqZWN0fSB3cmFwcGVycyBmb3IgdGhlIGNoaWxkcmVuLlxuXHQgKiBAdGhyb3dzIEVycm9yIGlmIHJlYWQgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGdldENoaWxkcmVuKCk6IENtaXNPYmplY3RbXSB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9SRUFEKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlJlYWQgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBbXTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRyZW4oKTtcblx0XHRjb25zdCBjaGlsZHJlbkluc3RhbmNlSXRlcmF0b3IgPSBjaGlsZHJlbkluc3RhbmNlLml0ZXJhdG9yKCk7XG5cdFx0d2hpbGUgKGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5oYXNOZXh0KCkpIHtcblx0XHRcdGNvbnN0IGNtaXNPYmplY3RJbnN0YW5jZSA9IGNoaWxkcmVuSW5zdGFuY2VJdGVyYXRvci5uZXh0KCk7XG5cdFx0XHRjb25zdCBjbWlzT2JqZWN0ID0gbmV3IENtaXNPYmplY3QoY21pc09iamVjdEluc3RhbmNlKTtcblx0XHRcdGNoaWxkcmVuLnB1c2goY21pc09iamVjdCk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGlsZHJlbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBmb2xkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhpcyBmb2xkZXIgaXMgdGhlIHJvb3QgZm9sZGVyIG9mIHRoZSByZXBvc2l0b3J5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGl0IGlzIHRoZSByb290IGZvbGRlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzUm9vdEZvbGRlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSb290Rm9sZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGFyZW50IGZvbGRlciBvZiB0aGlzIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIHBhcmVudCB7QGxpbmsgRm9sZGVyfSBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Rm9sZGVyUGFyZW50KCk6IEZvbGRlciB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Rm9sZGVyUGFyZW50KCk7XG5cdFx0cmV0dXJuIG5ldyBGb2xkZXIobmF0aXZlLCBudWxsKTtcblx0fTtcblxuXHQvKipcblx0ICogRGVsZXRlcyB0aGlzIGZvbGRlciAobXVzdCBiZSBlbXB0eSB0byBzdWNjZWVkKS5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgZGVsZXRlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJlbmFtZXMgdGhpcyBmb2xkZXIuXG5cdCAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGZvbGRlci5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhpcyBmb2xkZXIgYW5kIGFsbCBpdHMgY29udGVudHMgcmVjdXJzaXZlbHkuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZVRyZWUoKTogdm9pZCB7XG5cdFx0Y29uc3QgYWxsb3dlZCA9IENtaXNGYWNhZGUuaXNBbGxvd2VkKHRoaXMuZ2V0UGF0aCgpLCBDbWlzLk1FVEhPRF9XUklURSk7XG5cdFx0aWYgKCFhbGxvd2VkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJXcml0ZSBhY2Nlc3Mgbm90IGFsbG93ZWQgb246IFwiICsgdGhpcy5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRjb25zdCB1bmlmaWVkT2JqZWN0RGVsZXRlID0gQ21pc0ZhY2FkZS5nZXRVbmlmaWVkT2JqZWN0RGVsZXRlKCk7XG5cdFx0dGhpcy5uYXRpdmUuZGVsZXRlVHJlZSh0cnVlLCB1bmlmaWVkT2JqZWN0RGVsZXRlLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0eXBlIGRlZmluaXRpb24gb2YgdGhlIGZvbGRlci5cblx0ICogQHJldHVybnMgVGhlIGZvbGRlcidzIHtAbGluayBUeXBlRGVmaW5pdGlvbn0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHlwZSgpOiBUeXBlRGVmaW5pdGlvbiB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0VHlwZSgpO1xuXHRcdHJldHVybiBuZXcgVHlwZURlZmluaXRpb24obmF0aXZlKTtcblx0fVxufVxuXG4vKipcbiAqIENtaXNPYmplY3Qgb2JqZWN0XG4gKiAqIEEgZ2VuZXJpYyB3cmFwcGVyIGZvciBDTUlTIG9iamVjdHMsIHVzZWQgcHJpbWFyaWx5IGZvciBjaGlsZHJlbiBsaXN0cy5cbiAqL1xuY2xhc3MgQ21pc09iamVjdCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgbmFtZS5cblx0ICovXG5cdHB1YmxpYyBnZXROYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5hbWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwYXRoIG9mIHRoZSBDTUlTIG9iamVjdC4gSGFuZGxlcyBkaWZmZXJlbmNlcyBpbiBuYXRpdmUgQ01JUyBpbXBsZW1lbnRhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBvYmplY3QgcGF0aC5cblx0ICogQHRocm93cyBFcnJvciBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Ly90aGlzIGlzIGNhdXNlZCBieSBoYXZpbmcgZGlmZmVyZW50IHVuZGVybHlpbmcgbmF0aXZlIG9iamVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy5cblx0XHRpZiAodGhpcy5uYXRpdmUuZ2V0UGF0aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGgoKTtcblx0XHR9XG5cblx0XHQvL0FwYWNoZSBDaGVtaXN0cnkgQ21pc09iamVjdCBoYXMgbm8gZ2V0UGF0aCgpIGJ1dCBnZXRQYXRocygpIC0gaHR0cHM6Ly9jaGVtaXN0cnkuYXBhY2hlLm9yZy9kb2NzL2NtaXMtc2FtcGxlcy9zYW1wbGVzL3JldHJpZXZlLW9iamVjdHMvaW5kZXguaHRtbFxuXHRcdGlmICh0aGlzLm5hdGl2ZS5nZXRQYXRocykge1xuXHRcdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhdGhzKClbMF07XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBQYXRoIG5vdCBmb3VuZCBmb3IgQ21pc09iamVjdCB3aXRoIGlkICR7dGhpcy5nZXRJZCgpfWApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHR5cGUgZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBUaGUgb2JqZWN0J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgdGhlIENNSVMgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5kZWxldGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW5hbWVzIHRoZSBDTUlTIG9iamVjdC5cblx0ICogQHBhcmFtIG5ld05hbWUgVGhlIG5ldyBuYW1lIGZvciB0aGUgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZW5hbWUobmV3TmFtZSk7XG5cdH1cblxufVxuXG4vKipcbiAqIE9iamVjdEZhY3Rvcnkgb2JqZWN0XG4gKiAqIFByb3ZpZGVzIG1ldGhvZHMgdG8gY3JlYXRlIGNvbnRlbnQgc3RyZWFtcy5cbiAqL1xuY2xhc3MgT2JqZWN0RmFjdG9yeSB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgY29udGVudCBzdHJlYW0gaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgb3IgdXBkYXRlIGRvY3VtZW50IGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cblx0ICogQHBhcmFtIGxlbmd0aCBUaGUgc2l6ZSBvZiB0aGUgY29udGVudCBzdHJlYW0gaW4gYnl0ZXMuXG5cdCAqIEBwYXJhbSBtaW1ldHlwZSBUaGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIGlucHV0IHN0cmVhbSBjb250YWluaW5nIHRoZSBkYXRhLlxuXHQgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgQ29udGVudFN0cmVhbX0gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIsIG1pbWV0eXBlOiBzdHJpbmcsIGlucHV0U3RyZWFtOiBzdHJlYW1zLklucHV0U3RyZWFtKTogQ29udGVudFN0cmVhbSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmNyZWF0ZUNvbnRlbnRTdHJlYW0oZmlsZW5hbWUsIGxlbmd0aCwgbWltZXR5cGUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG5ldyBDb250ZW50U3RyZWFtKG5hdGl2ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBDb250ZW50U3RyZWFtIG9iamVjdFxuICogKiBSZXByZXNlbnRzIHRoZSBiaW5hcnkgY29udGVudCBzdHJlYW0gb2YgYSBDTUlTIERvY3VtZW50LlxuICovXG5jbGFzcyBDb250ZW50U3RyZWFtIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgSmF2YS1iYWNrZWQgaW5wdXQgc3RyZWFtIGZvciByZWFkaW5nIHRoZSBjb250ZW50LlxuXHQgKiBAcmV0dXJucyBBbiB7QGxpbmsgc3RyZWFtcy5JbnB1dFN0cmVhbX0gd3JhcHBlci5cblx0ICovXG5cdHB1YmxpYyBnZXRTdHJlYW0oKTogc3RyZWFtcy5JbnB1dFN0cmVhbSB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0U3RyZWFtKCk7XG5cdFx0cmV0dXJuIG5ldyBzdHJlYW1zLklucHV0U3RyZWFtKG5hdGl2ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBjb250ZW50IHN0cmVhbS5cblx0ICogQHJldHVybnMgVGhlIE1JTUUgdHlwZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TWltZVR5cGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWltZVR5cGUoKTtcblx0fVxufVxuXG4vKipcbiAqIERvY3VtZW50IG9iamVjdFxuICogKiBSZXByZXNlbnRzIGEgQ01JUyBkb2N1bWVudCBvYmplY3QsIGFsbG93aW5nIG9wZXJhdGlvbnMgbGlrZSByZWFkaW5nIGNvbnRlbnQsIGRlbGV0aW5nLCBhbmQgcmVuYW1pbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblx0cHJpdmF0ZSBwYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnksIHBhdGg6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgSUQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50IG5hbWUuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROYW1lKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgdHlwZSBkZWZpbml0aW9uIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIGRvY3VtZW50J3Mge0BsaW5rIFR5cGVEZWZpbml0aW9ufS5cblx0ICovXG5cdHB1YmxpYyBnZXRUeXBlKCk6IFR5cGVEZWZpbml0aW9uIHtcblx0XHRjb25zdCBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXRUeXBlKCk7XG5cdFx0cmV0dXJuIG5ldyBUeXBlRGVmaW5pdGlvbihuYXRpdmUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGRvY3VtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgZG9jdW1lbnQgcGF0aC5cblx0ICovXG5cdHB1YmxpYyBnZXRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMucGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIHRoaXMgZG9jdW1lbnQuXG5cdCAqIEB0aHJvd3MgRXJyb3IgaWYgd3JpdGUgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLlxuXHQgKi9cblx0cHVibGljIGRlbGV0ZSgpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxvd2VkID0gQ21pc0ZhY2FkZS5pc0FsbG93ZWQodGhpcy5nZXRQYXRoKCksIENtaXMuTUVUSE9EX1dSSVRFKTtcblx0XHRpZiAoIWFsbG93ZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIldyaXRlIGFjY2VzcyBub3QgYWxsb3dlZCBvbjogXCIgKyB0aGlzLmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5kZWxldGUodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYmluYXJ5IGNvbnRlbnQgc3RyZWFtIG9mIHRoZSBkb2N1bWVudC5cblx0ICogQHJldHVybnMgVGhlIHtAbGluayBDb250ZW50U3RyZWFtfSBvYmplY3QsIG9yIGBudWxsYCBpZiB0aGUgZG9jdW1lbnQgaGFzIG5vIGNvbnRlbnQuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q29udGVudFN0cmVhbSgpOiBDb250ZW50U3RyZWFtIHwgbnVsbCB7XG5cdFx0Y29uc3QgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0Q29udGVudFN0cmVhbSgpO1xuXHRcdGlmIChuYXRpdmUgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBuZXcgQ29udGVudFN0cmVhbShuYXRpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQncyBjb250ZW50IHN0cmVhbSBpbiBieXRlcy5cblx0ICogQHJldHVybnMgVGhlIHNpemUgaW4gYnl0ZXMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0U2l6ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaXplKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVuYW1lcyB0aGlzIGRvY3VtZW50LlxuXHQgKiBAcGFyYW0gbmV3TmFtZSBUaGUgbmV3IG5hbWUgZm9yIHRoZSBkb2N1bWVudC5cblx0ICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBhY2Nlc3MgaXMgbm90IGFsbG93ZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVuYW1lKG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbG93ZWQgPSBDbWlzRmFjYWRlLmlzQWxsb3dlZCh0aGlzLmdldFBhdGgoKSwgQ21pcy5NRVRIT0RfV1JJVEUpO1xuXHRcdGlmICghYWxsb3dlZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiV3JpdGUgYWNjZXNzIG5vdCBhbGxvd2VkIG9uOiBcIiArIHRoaXMuZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0dGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuXHR9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZGVmaW5pdGlvbiBvZiBhIENNSVMgb2JqZWN0IHR5cGUgKGUuZy4sIGNtaXM6ZG9jdW1lbnQsIGNtaXM6Zm9sZGVyKS5cbiAqL1xuY2xhc3MgVHlwZURlZmluaXRpb24ge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB1bmlxdWUgSUQgb2YgdGhlIG9iamVjdCB0eXBlIChlLmcuLCAnY21pczpkb2N1bWVudCcpLlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBJRC5cblx0ICovXG5cdHB1YmxpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJZCgpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gQ21pcztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsY0FBeUI7QUFDekIsTUFBTSxhQUFhLEtBQUssS0FBSyxxREFBcUQ7QUFDbEYsTUFBTSxPQUFPLEtBQUssS0FBSyxzQkFBc0I7QUFDN0MsTUFBTSxVQUFVLEtBQUssS0FBSyxtQkFBbUI7QUFFdEMsTUFBTSxLQUFLO0FBQUEsRUFNakI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQXVCLGNBQWM7QUFBQTtBQUFBLEVBSXJDO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBdUIsZUFBZTtBQUFBO0FBQUEsRUFJdEM7QUFBQTtBQUFBO0FBQUEsU0FBdUIsT0FBTztBQUFBO0FBQUEsRUFFOUI7QUFBQTtBQUFBLFNBQXVCLFlBQVk7QUFBQTtBQUFBLEVBRW5DO0FBQUE7QUFBQSxTQUF1QixpQkFBaUI7QUFBQTtBQUFBLEVBRXhDO0FBQUE7QUFBQSxTQUF1QixlQUFlO0FBQUE7QUFBQSxFQUV0QztBQUFBO0FBQUEsU0FBdUIsYUFBYTtBQUFBO0FBQUEsRUFFcEM7QUFBQTtBQUFBLFNBQXVCLGdCQUFnQjtBQUFBO0FBQUEsRUFFdkM7QUFBQTtBQUFBLFNBQXVCLG1CQUFtQjtBQUFBO0FBQUEsRUFFMUM7QUFBQTtBQUFBLFNBQXVCLHlCQUF5QjtBQUFBO0FBQUEsRUFFaEQ7QUFBQTtBQUFBLFNBQXVCLGVBQWU7QUFBQTtBQUFBLEVBSXRDO0FBQUE7QUFBQTtBQUFBLFNB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
|