@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,199 @@
|
|
|
1
|
+
import { handlerFunction } from "./resource-common";
|
|
2
|
+
class ResourceMethod {
|
|
3
|
+
/**
|
|
4
|
+
* @param oConfiguration Initial configuration object.
|
|
5
|
+
* @param controller The HttpController instance.
|
|
6
|
+
* @param resource The parent Resource instance.
|
|
7
|
+
* @param mappings The parent ResourceMappings instance.
|
|
8
|
+
* @returns {ResourceMethod}
|
|
9
|
+
*/
|
|
10
|
+
constructor(oConfiguration, controller, resource, mappings) {
|
|
11
|
+
this.cfg = oConfiguration || {};
|
|
12
|
+
this._resource = resource;
|
|
13
|
+
this.controller = controller;
|
|
14
|
+
if (mappings) {
|
|
15
|
+
this.resource = mappings.resource.bind(mappings);
|
|
16
|
+
this.resourcePath = this.path = this.resource;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Delegates to the HttpController's execute function to process the request.
|
|
21
|
+
*/
|
|
22
|
+
execute() {
|
|
23
|
+
this.controller?.execute?.(...arguments);
|
|
24
|
+
}
|
|
25
|
+
// --- Delegation to Resource HTTP Methods for Chaining ---
|
|
26
|
+
/**
|
|
27
|
+
* Delegates to the parent Resource's 'get' method.
|
|
28
|
+
*/
|
|
29
|
+
get() {
|
|
30
|
+
return this._resource?.["get"]?.(...arguments);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Delegates to the parent Resource's 'post' method.
|
|
34
|
+
*/
|
|
35
|
+
post() {
|
|
36
|
+
return this._resource?.["post"]?.(...arguments);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Delegates to the parent Resource's 'put' method.
|
|
40
|
+
*/
|
|
41
|
+
put() {
|
|
42
|
+
return this._resource?.["put"]?.(...arguments);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Delegates to the parent Resource's 'delete' method.
|
|
46
|
+
*/
|
|
47
|
+
delete() {
|
|
48
|
+
return this._resource?.["delete"]?.(...arguments);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Delegates to the parent Resource's 'remove' method.
|
|
52
|
+
*/
|
|
53
|
+
remove() {
|
|
54
|
+
return this._resource?.["remove"]?.(...arguments);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Delegates to the parent Resource's 'method' method.
|
|
58
|
+
*/
|
|
59
|
+
method() {
|
|
60
|
+
return this._resource?.["method"]?.(...arguments);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns the configuration object for this ResourceMethod instance.
|
|
64
|
+
*
|
|
65
|
+
* @returns The configuration object.
|
|
66
|
+
*/
|
|
67
|
+
configuration() {
|
|
68
|
+
return this.cfg;
|
|
69
|
+
}
|
|
70
|
+
// --- Handler Definition Methods ---
|
|
71
|
+
/**
|
|
72
|
+
* Applies a callback function for the **before** phase of processing a matched resource request.
|
|
73
|
+
*
|
|
74
|
+
* @param fHandler Callback function for the before phase.
|
|
75
|
+
* @returns The ResourceMethod instance for method chaining.
|
|
76
|
+
*/
|
|
77
|
+
before(fHandler) {
|
|
78
|
+
return handlerFunction(this, this.configuration(), "before", fHandler);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Applies a callback function for processing a matched resource request (**serve** phase).
|
|
82
|
+
*
|
|
83
|
+
* @param fHandler Callback function for the serve phase.
|
|
84
|
+
* @returns The ResourceMethod instance for method chaining.
|
|
85
|
+
*/
|
|
86
|
+
serve(fHandler) {
|
|
87
|
+
return handlerFunction(this, this.configuration(), "serve", fHandler);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Applies a callback function for the **catch** errors phase of processing a matched resource request.
|
|
91
|
+
*
|
|
92
|
+
* @param fHandler Callback function for the catch phase.
|
|
93
|
+
* @returns The ResourceMethod instance for method chaining.
|
|
94
|
+
*/
|
|
95
|
+
catch(fHandler) {
|
|
96
|
+
return handlerFunction(this, this.configuration(), "catch", fHandler);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Applies a callback function for the **finally** phase of processing a matched resource request.
|
|
100
|
+
*
|
|
101
|
+
* @param fHandler Callback function for the finally phase.
|
|
102
|
+
* @returns The ResourceMethod instance for method chaining.
|
|
103
|
+
*/
|
|
104
|
+
finally(fHandler) {
|
|
105
|
+
return handlerFunction(this, this.configuration(), "finally", fHandler);
|
|
106
|
+
}
|
|
107
|
+
// --- MIME Type Configuration Methods ---
|
|
108
|
+
/**
|
|
109
|
+
* Defines the content MIME type(s), which this ResourceMethod expects as input (**consumes**).
|
|
110
|
+
*
|
|
111
|
+
* @param mimeTypes Sets the mime types that this ResourceMethod is capable to consume.
|
|
112
|
+
* @returns The ResourceMethod instance for method chaining.
|
|
113
|
+
*/
|
|
114
|
+
consumes(mimeTypes) {
|
|
115
|
+
return this.mimeSetting("consumes", mimeTypes);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Defines the HTTP response payload MIME type(s), which this ResourceMethod request processing function outputs, i.e.
|
|
119
|
+
* those that it 'produces'. At runtime, the Accept request header will be matched for compatibility with this setting
|
|
120
|
+
* to elicit request processing functions.
|
|
121
|
+
* Note that the matching is performed by compatibility, not strict equality, i.e. the MIME type format wildcards are
|
|
122
|
+
* considered too. For example, a request Accept header "*\/json" will match a produces setting "application\/json".
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* ```js
|
|
126
|
+
* rs.service()
|
|
127
|
+
* .resource("")
|
|
128
|
+
* .get(function(){})
|
|
129
|
+
* .produces(["application\/json"])
|
|
130
|
+
* .execute();
|
|
131
|
+
* .
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* Take care to make sure that the produces constraint correctly describes the response contenty MIME types that the request
|
|
135
|
+
* processing function can produce so that only client request that can accept them land there.
|
|
136
|
+
*
|
|
137
|
+
* A note about method argument multiplicity (string vs array of strings).
|
|
138
|
+
* One of the arguments of the produce method will translate to the response Content-Type property, which is known to be a
|
|
139
|
+
* single value header by [specification](https://tools.ietf.org/html/rfc7231#section-3.1.1.5). There are two reasons why
|
|
140
|
+
* the method accepts array and not a single value only:
|
|
141
|
+
*
|
|
142
|
+
* 1. Normally, when matched, content types are evaluated for semantic compatibility and not strict equality on both sides
|
|
143
|
+
* - client and server. Providing a range of compatible MIME types instead of single value, increases the range of acceptable
|
|
144
|
+
* requests for procesing, while reducing the stricness of the requirements on the client making the request. For example,
|
|
145
|
+
* declaring ["text/json,"application/json"] as produced types makes requests with any of these accept headers (or a combination
|
|
146
|
+
* of them) acceptable for processing: "*\/json", "text/json", "application/json", "*\/*".
|
|
147
|
+
*
|
|
148
|
+
* 2. Although in most cases a handler function will produce payload in single format (media type), it is quite possible to
|
|
149
|
+
* desgin it also as a controller that produces alternative payload in different formats. In these cases you need produces
|
|
150
|
+
* that declares all supported media types so that the request with a relaxed Accept header matching any of them can land
|
|
151
|
+
* in this function. That makes the routing a bit less transparent and dependent on the client, but may prove valuable for
|
|
152
|
+
* certian cases.
|
|
153
|
+
*
|
|
154
|
+
* In any case it is responsibility of the request processing function to set the correct Content-Type header.
|
|
155
|
+
*
|
|
156
|
+
* @param mimeTypes Sets the mime type(s) that this ResourceMethod may produce.
|
|
157
|
+
* @returns The ResourceMethod instance for method chaining.
|
|
158
|
+
*/
|
|
159
|
+
produces(mimeTypes) {
|
|
160
|
+
return this.mimeSetting("produces", mimeTypes);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Commmon function for initializng the 'consumes' and 'produces' arrays in the ResourceMethod instances.
|
|
164
|
+
* Before finalizing the configuration setup the function will remove duplicates with exact match filtering.
|
|
165
|
+
*
|
|
166
|
+
* @param mimeSettingName must be either 'consumes' or 'produces'.
|
|
167
|
+
* @param mimeTypes An array of strings formatted as mime types (type/subtype) or a single string.
|
|
168
|
+
* @returns The ResourceMethod instance to which the function is bound.
|
|
169
|
+
* @private
|
|
170
|
+
*/
|
|
171
|
+
mimeSetting(mimeSettingName, mimeTypes) {
|
|
172
|
+
let arrMimeTypes;
|
|
173
|
+
if (typeof mimeTypes === "string") {
|
|
174
|
+
arrMimeTypes = [mimeTypes];
|
|
175
|
+
} else if (Array.isArray(mimeTypes)) {
|
|
176
|
+
arrMimeTypes = mimeTypes;
|
|
177
|
+
} else {
|
|
178
|
+
throw new Error("Invalid argument: " + mimeSettingName + " mime type argument must be valid MIME type string or array of such strings, but instead is " + typeof mimeTypes);
|
|
179
|
+
}
|
|
180
|
+
arrMimeTypes.forEach((mimeType) => {
|
|
181
|
+
const mt = mimeType.split("/");
|
|
182
|
+
if (mt.length !== 2 || !mt[0] || !mt[1])
|
|
183
|
+
throw new Error("Invalid argument. Not a valid MIME type format type/subtype: " + mimeType);
|
|
184
|
+
});
|
|
185
|
+
if (!this.cfg[mimeSettingName]) {
|
|
186
|
+
this.cfg[mimeSettingName] = [];
|
|
187
|
+
}
|
|
188
|
+
const existingMimes = this.cfg[mimeSettingName];
|
|
189
|
+
const newMimeTypes = arrMimeTypes.filter((mimeType) => {
|
|
190
|
+
return existingMimes.indexOf(mimeType) < 0;
|
|
191
|
+
});
|
|
192
|
+
this.cfg[mimeSettingName] = existingMimes.concat(newMimeTypes);
|
|
193
|
+
return this;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export {
|
|
197
|
+
ResourceMethod
|
|
198
|
+
};
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UtbWV0aG9kLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBoYW5kbGVyRnVuY3Rpb24gfSBmcm9tIFwiLi9yZXNvdXJjZS1jb21tb25cIjtcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9iamVjdCBvZiBhIFJlc291cmNlTWV0aG9kLlxuICovXG5pbnRlcmZhY2UgUmVzb3VyY2VNZXRob2RDb25maWcge1xuICAgIGNvbnN1bWVzPzogc3RyaW5nW107XG4gICAgcHJvZHVjZXM/OiBzdHJpbmdbXTtcbiAgICBiZWZvcmU/OiBGdW5jdGlvbjtcbiAgICBzZXJ2ZT86IEZ1bmN0aW9uOyAvLyBDb3VsZCBhbHNvIGJlIG5hbWVkICdoYW5kbGVyJ1xuICAgIGNhdGNoPzogRnVuY3Rpb247XG4gICAgZmluYWxseT86IEZ1bmN0aW9uO1xuICAgIC8vIEFkZCBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXMgdGhleSBiZWNvbWUga25vd25cbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogQ29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIFJlc291cmNlTWV0aG9kIGluc3RhbmNlcy5cbiAqIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgZmx1ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGEgc2luZ2xlIEhUVFAgbWV0aG9kIGhhbmRsZXIgKGUuZy4sIEdFVClcbiAqIGF0dGFjaGVkIHRvIGEgUmVzb3VyY2UuXG4gKiBcbiAqIC8qKlxuICogQ29uc3RydWN0b3IgZnVuY3Rpb24gZm9yIFJlc291cmNlTWV0aG9kIGluc3RhbmNlcy5cbiAqIEFsbCBwYXJhbWV0ZXJzIG9mIHRoZSBmdW5jdGlvbiBhcmUgb3B0aW9uYWwuXG4gKlxuICogUHJvdmlkaW5nIG9Db25maWd1cmF0aW9uIHdpbGwgaW5pdGlhbGl6ZSB0aGlzIGluc3RhbmNlIHdpdGggc29tZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBzdGFydGluZ1xuICogZW50aXJlbHkgZnJvbSBzY3JhdGNoLiBOb3RlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHNjaGVtYSBtdXN0IGJlIGNvbXBsaWFudCB3aXRoIHRoZSBvbmUgcHJvZHVjZWQgYnlcbiAqIHRoZSBSZXNvdXJjZU1ldGhvZCBpdHNlbGYuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG9taXRlZCwgc2V0dXAgd2lsbCBzdGFydCBmcm9tIHNjcmF0Y2guXG4gKlxuICogUHJvdmlzaW9uaW5nIGNvbnRyb2xsZXIsIHdpbGwgaW5qZWN0IGEgcmVmZXJlbmNlIHRvIHRoZSBleGVjdXRlIG1ldGhvZCBvZiB0aGUgY29udHJvbGxlciBzbyB0aGF0IGl0IGNhbiBiZVxuICogZmx1ZW50bHkgaW52b2tlZCBpbiB0aGUgc2NvcGUgb2YgdGhpcyBSZXNvdXJjZU1laHRvZCBpbnN0YW5jZSBhcyBwYXJ0IG9mIHRoZSBtZXRob2QgY2hhaW5pbmcgZmxvdy4gVGhlIGV4ZWN1dGVcbiAqIGZ1bmN0aW9uIHNjb3BlIGlzIGJvdW5kIHRvIHRoZSBjb250cm9sbGVyIGluc3RhbmNlIGZvciB0aGlzIFJlc291cmNlTWV0aG9kLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogcnMuc2VydmljZSgpXG4gKiAgLnJlc291cmNlKCcnKVxuICogXHRcdC5nZXQoKVxuICogXHQuZXhlY3V0ZSgpO1xuICogYGBgXG4gKlxuICogUHJvdmlzaW9uaW5nIHJlc291cmNlLCB3aWxsIGluamVjdCBhIHJlZmVyZW5jZSBvdCB0aGUgSFRUUCBtZXRob2QgZnVuY3Rpb25zIG9mIHRoZSBSZXNvdXJjZSBjbGFzcyAoZ2V0LCBwb3N0LFxuICogcHV0LCBkZWxldGUsIHJlbW92ZSwgbWV0aG9kKSBzbyB0aGF0IHRoZXkgY2FuIGJlIGZsdWVudGx5IGludm9rZWQgaW4gdGhlIHNjb3BlIG9mIHRoaXMgUmVzb3VyY2VNZXRob2QgaW5zdGFuY2VcbiAqIGFzIHBhcnQgb2YgdGhlIG1ldGhvZCBjaGFpbmluZyBmbG93LiBUaGUgZnVuY3Rpb25zIGFyZSBib3VuZCB0byB0aGUgcmVzb3VyY2UgaW5zdGFuY2UgZm9yIHRoaXMgUmVzb3VyY2VNZXRob2QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBycy5zZXJ2aWNlKClcbiAqICAucmVzb3VyY2UoJycpXG4gKiBcdFx0LmdldChmdW5jdGlvbigpe30pXG4gKiBcdFx0LnBvc3QoZnVuY3Rpb24oKXt9KVxuICogXHRcdC5wdXQoZnVuY3Rpb24oKXt9KVxuICogXHRcdC5yZW1vdmUoZnVuY3Rpb24oKXt9KVxuICogLmV4ZWN1dGUoKTtcbiAqIGBgYFxuICpcbiAqIFByb3Zpc2lvbmluZyBtYXBwaW5ncywgd2lsbCBpbmplY3QgYSByZWZlcmVuY2Ugb3QgdGhlIHJlc291cmNlIG1ldGhvZCBvZiB0aGUgUmVzb3VyY2VNYXBwaW5ncyBjbGFzcyBzbyB0aGF0XG4gKiBpdCBjYW4gYmUgZmx1ZW50bHkgaW52b2tlZCBpbiB0aGUgc2NvcGUgb2YgdGhpcyBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZSBhcyBwYXJ0IG9mIHRoZSBtZXRob2QgY2hhaW5pbmcgZmxvdy5cbiAqIFRoZSBmdW5jdGlvbiBpcyBib3VuZCB0byB0aGUgbWFwcGluZ3MgaW5zdGFuY2UgZm9yIHRoaXMgUmVzb3VyY2VNZXRob2QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBycy5zZXJ2aWNlKClcbiAqICAucmVzb3VyY2UoJycpXG4gKiBcdFx0LmdldChmdW5jdGlvbigpe30pXG4gKiBcdC5yZXNvdXJjZSgne2lkfScpXG4gKiBcdFx0LmdldChmdW5jdGlvbigpe30pXG4gKiAuZXhlY3V0ZSgpO1xuICogYGBcbiAqIFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNZXRob2Qge1xuICAgIGNmZzogUmVzb3VyY2VNZXRob2RDb25maWc7XG4gICAgX3Jlc291cmNlOiBhbnk7IC8vIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IFJlc291cmNlIGluc3RhbmNlXG4gICAgY29udHJvbGxlcjogYW55OyAvLyBSZWZlcmVuY2UgdG8gdGhlIEh0dHBDb250cm9sbGVyIGluc3RhbmNlXG5cbiAgICAvLyBGbHVlbnQgQVBJIGFsaWFzZXMvZGVsZWdhdGVzIGJvdW5kIHRvIFJlc291cmNlTWFwcGluZ3MvUmVzb3VyY2VcbiAgICByZXNvdXJjZTogRnVuY3Rpb247XG4gICAgcmVzb3VyY2VQYXRoOiBGdW5jdGlvbjtcbiAgICBwYXRoOiBGdW5jdGlvbjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBvQ29uZmlndXJhdGlvbiBJbml0aWFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBjb250cm9sbGVyIFRoZSBIdHRwQ29udHJvbGxlciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgVGhlIHBhcmVudCBSZXNvdXJjZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbWFwcGluZ3MgVGhlIHBhcmVudCBSZXNvdXJjZU1hcHBpbmdzIGluc3RhbmNlLlxuICAgICAqIEByZXR1cm5zIHtSZXNvdXJjZU1ldGhvZH1cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvQ29uZmlndXJhdGlvbjogYW55LCBjb250cm9sbGVyOiBhbnksIHJlc291cmNlOiBhbnksIG1hcHBpbmdzOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jZmcgPSBvQ29uZmlndXJhdGlvbiB8fCB7fTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcblxuICAgICAgICBpZiAobWFwcGluZ3MpIHtcbiAgICAgICAgICAgIC8vIEJpbmQgdGhlIHJlc291cmNlL3BhdGggbWV0aG9kcyBmcm9tIFJlc291cmNlTWFwcGluZ3MgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG1hcHBpbmdzLnJlc291cmNlLmJpbmQobWFwcGluZ3MpO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVBhdGggPSB0aGlzLnBhdGggPSB0aGlzLnJlc291cmNlOyAvLyBhbGlhc2VzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxlZ2F0ZXMgdG8gdGhlIEh0dHBDb250cm9sbGVyJ3MgZXhlY3V0ZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LlxuICAgICAqL1xuICAgIGV4ZWN1dGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFVzZSBvcHRpb25hbCBjaGFpbmluZyBhcyBjb250cm9sbGVyIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gYWxsIHNldHVwc1xuICAgICAgICB0aGlzLmNvbnRyb2xsZXI/LmV4ZWN1dGU/LiguLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIC0tLSBEZWxlZ2F0aW9uIHRvIFJlc291cmNlIEhUVFAgTWV0aG9kcyBmb3IgQ2hhaW5pbmcgLS0tXG5cbiAgICAvKipcbiAgICAgKiBEZWxlZ2F0ZXMgdG8gdGhlIHBhcmVudCBSZXNvdXJjZSdzICdnZXQnIG1ldGhvZC5cbiAgICAgKi9cbiAgICBnZXQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlPy5bXCJnZXRcIl0/LiguLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGVnYXRlcyB0byB0aGUgcGFyZW50IFJlc291cmNlJ3MgJ3Bvc3QnIG1ldGhvZC5cbiAgICAgKi9cbiAgICBwb3N0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZT8uW1wicG9zdFwiXT8uKC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZWdhdGVzIHRvIHRoZSBwYXJlbnQgUmVzb3VyY2UncyAncHV0JyBtZXRob2QuXG4gICAgICovXG4gICAgcHV0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZT8uW1wicHV0XCJdPy4oLi4uYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxlZ2F0ZXMgdG8gdGhlIHBhcmVudCBSZXNvdXJjZSdzICdkZWxldGUnIG1ldGhvZC5cbiAgICAgKi9cbiAgICBkZWxldGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlPy5bXCJkZWxldGVcIl0/LiguLi5hcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGVnYXRlcyB0byB0aGUgcGFyZW50IFJlc291cmNlJ3MgJ3JlbW92ZScgbWV0aG9kLlxuICAgICAqL1xuICAgIHJlbW92ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U/LltcInJlbW92ZVwiXT8uKC4uLmFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZWdhdGVzIHRvIHRoZSBwYXJlbnQgUmVzb3VyY2UncyAnbWV0aG9kJyBtZXRob2QuXG4gICAgICovXG4gICAgbWV0aG9kKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZT8uW1wibWV0aG9kXCJdPy4oLi4uYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhpcyBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25maWd1cmF0aW9uKCk6IFJlc291cmNlTWV0aG9kQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2ZnO1xuICAgIH07XG5cbiAgICAvLyAtLS0gSGFuZGxlciBEZWZpbml0aW9uIE1ldGhvZHMgLS0tXG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSAqKmJlZm9yZSoqIHBoYXNlIG9mIHByb2Nlc3NpbmcgYSBtYXRjaGVkIHJlc291cmNlIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZkhhbmRsZXIgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBiZWZvcmUgcGhhc2UuXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWV0aG9kIGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgICovXG4gICAgYmVmb3JlKGZIYW5kbGVyOiBGdW5jdGlvbik6IFJlc291cmNlTWV0aG9kIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXJGdW5jdGlvbih0aGlzLCB0aGlzLmNvbmZpZ3VyYXRpb24oKSwgJ2JlZm9yZScsIGZIYW5kbGVyKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGEgbWF0Y2hlZCByZXNvdXJjZSByZXF1ZXN0ICgqKnNlcnZlKiogcGhhc2UpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZIYW5kbGVyIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgc2VydmUgcGhhc2UuXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWV0aG9kIGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgICovXG4gICAgc2VydmUoZkhhbmRsZXI6IEZ1bmN0aW9uKTogUmVzb3VyY2VNZXRob2Qge1xuICAgICAgICByZXR1cm4gaGFuZGxlckZ1bmN0aW9uKHRoaXMsIHRoaXMuY29uZmlndXJhdGlvbigpLCAnc2VydmUnLCBmSGFuZGxlcik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlICoqY2F0Y2gqKiBlcnJvcnMgcGhhc2Ugb2YgcHJvY2Vzc2luZyBhIG1hdGNoZWQgcmVzb3VyY2UgcmVxdWVzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmSGFuZGxlciBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGNhdGNoIHBoYXNlLlxuICAgICAqIEByZXR1cm5zIFRoZSBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgICAqL1xuICAgIGNhdGNoKGZIYW5kbGVyOiBGdW5jdGlvbik6IFJlc291cmNlTWV0aG9kIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXJGdW5jdGlvbih0aGlzLCB0aGlzLmNvbmZpZ3VyYXRpb24oKSwgJ2NhdGNoJywgZkhhbmRsZXIpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSAqKmZpbmFsbHkqKiBwaGFzZSBvZiBwcm9jZXNzaW5nIGEgbWF0Y2hlZCByZXNvdXJjZSByZXF1ZXN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZIYW5kbGVyIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgZmluYWxseSBwaGFzZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgUmVzb3VyY2VNZXRob2QgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBmaW5hbGx5KGZIYW5kbGVyOiBGdW5jdGlvbik6IFJlc291cmNlTWV0aG9kIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZXJGdW5jdGlvbih0aGlzLCB0aGlzLmNvbmZpZ3VyYXRpb24oKSwgJ2ZpbmFsbHknLCBmSGFuZGxlcik7XG4gICAgfTtcblxuICAgIC8vIC0tLSBNSU1FIFR5cGUgQ29uZmlndXJhdGlvbiBNZXRob2RzIC0tLVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgY29udGVudCBNSU1FIHR5cGUocyksIHdoaWNoIHRoaXMgUmVzb3VyY2VNZXRob2QgZXhwZWN0cyBhcyBpbnB1dCAoKipjb25zdW1lcyoqKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtaW1lVHlwZXMgU2V0cyB0aGUgbWltZSB0eXBlcyB0aGF0IHRoaXMgUmVzb3VyY2VNZXRob2QgaXMgY2FwYWJsZSB0byBjb25zdW1lLlxuICAgICAqIEByZXR1cm5zIFRoZSBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgICAqL1xuICAgIGNvbnN1bWVzKG1pbWVUeXBlczogc3RyaW5nIHwgc3RyaW5nW10pOiBSZXNvdXJjZU1ldGhvZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbWVTZXR0aW5nKCdjb25zdW1lcycsIG1pbWVUeXBlcyk7XG4gICAgfTtcblxuICAgIC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBIVFRQIHJlc3BvbnNlIHBheWxvYWQgTUlNRSB0eXBlKHMpLCB3aGljaCB0aGlzIFJlc291cmNlTWV0aG9kIHJlcXVlc3QgcHJvY2Vzc2luZyBmdW5jdGlvbiBvdXRwdXRzLCBpLmUuXG5cdCAqIHRob3NlIHRoYXQgaXQgJ3Byb2R1Y2VzJy4gQXQgcnVudGltZSwgdGhlIEFjY2VwdCByZXF1ZXN0IGhlYWRlciB3aWxsIGJlIG1hdGNoZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGlzIHNldHRpbmdcblx0ICogdG8gZWxpY2l0IHJlcXVlc3QgcHJvY2Vzc2luZyBmdW5jdGlvbnMuXG5cdCAqIE5vdGUgdGhhdCB0aGUgbWF0Y2hpbmcgaXMgcGVyZm9ybWVkIGJ5IGNvbXBhdGliaWxpdHksIG5vdCBzdHJpY3QgZXF1YWxpdHksIGkuZS4gdGhlIE1JTUUgdHlwZSBmb3JtYXQgd2lsZGNhcmRzIGFyZVxuXHQgKiBjb25zaWRlcmVkIHRvby4gRm9yIGV4YW1wbGUsIGEgcmVxdWVzdCBBY2NlcHQgaGVhZGVyIFwiKlxcL2pzb25cIiB3aWxsIG1hdGNoIGEgcHJvZHVjZXMgc2V0dGluZyBcImFwcGxpY2F0aW9uXFwvanNvblwiLlxuXHQgKiBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogcnMuc2VydmljZSgpXG4gICAgICpcdC5yZXNvdXJjZShcIlwiKVxuICAgICAqIFx0XHQuZ2V0KGZ1bmN0aW9uKCl7fSlcbiAgICAgKiBcdFx0XHQucHJvZHVjZXMoW1wiYXBwbGljYXRpb25cXC9qc29uXCJdKVxuICAgICAqIC5leGVjdXRlKCk7XG4gICAgICogXHQuXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUYWtlIGNhcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHByb2R1Y2VzIGNvbnN0cmFpbnQgY29ycmVjdGx5IGRlc2NyaWJlcyB0aGUgcmVzcG9uc2UgY29udGVudHkgTUlNRSB0eXBlcyB0aGF0IHRoZSByZXF1ZXN0XG4gICAgICogcHJvY2Vzc2luZyBmdW5jdGlvbiBjYW4gcHJvZHVjZSBzbyB0aGF0IG9ubHkgY2xpZW50IHJlcXVlc3QgdGhhdCBjYW4gYWNjZXB0IHRoZW0gbGFuZCB0aGVyZS5cbiAgICAgKlxuICAgICAqIEEgbm90ZSBhYm91dCBtZXRob2QgYXJndW1lbnQgbXVsdGlwbGljaXR5IChzdHJpbmcgdnMgYXJyYXkgb2Ygc3RyaW5ncykuXG4gICAgICogT25lIG9mIHRoZSBhcmd1bWVudHMgb2YgdGhlIHByb2R1Y2UgbWV0aG9kIHdpbGwgdHJhbnNsYXRlIHRvIHRoZSByZXNwb25zZSBDb250ZW50LVR5cGUgcHJvcGVydHksIHdoaWNoIGlzIGtub3duIHRvIGJlIGFcbiAgICAgKiBzaW5nbGUgdmFsdWUgaGVhZGVyIGJ5IFtzcGVjaWZpY2F0aW9uXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTMuMS4xLjUpLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgd2h5XG4gICAgICogdGhlIG1ldGhvZCBhY2NlcHRzIGFycmF5IGFuZCBub3QgYSBzaW5nbGUgdmFsdWUgb25seTpcbiAgICAgKlxuICAgICAqIDEuIE5vcm1hbGx5LCB3aGVuIG1hdGNoZWQsIGNvbnRlbnQgdHlwZXMgYXJlIGV2YWx1YXRlZCBmb3Igc2VtYW50aWMgY29tcGF0aWJpbGl0eSBhbmQgbm90IHN0cmljdCBlcXVhbGl0eSBvbiBib3RoIHNpZGVzXG4gICAgICogIC0gY2xpZW50IGFuZCBzZXJ2ZXIuIFByb3ZpZGluZyBhIHJhbmdlIG9mIGNvbXBhdGlibGUgTUlNRSB0eXBlcyBpbnN0ZWFkIG9mIHNpbmdsZSB2YWx1ZSwgaW5jcmVhc2VzIHRoZSByYW5nZSBvZiBhY2NlcHRhYmxlXG4gICAgICogcmVxdWVzdHMgZm9yIHByb2Nlc2luZywgd2hpbGUgcmVkdWNpbmcgdGhlIHN0cmljbmVzcyBvZiB0aGUgcmVxdWlyZW1lbnRzIG9uIHRoZSBjbGllbnQgbWFraW5nIHRoZSByZXF1ZXN0LiBGb3IgZXhhbXBsZSxcbiAgICAgKiBkZWNsYXJpbmcgW1widGV4dC9qc29uLFwiYXBwbGljYXRpb24vanNvblwiXSBhcyBwcm9kdWNlZCB0eXBlcyBtYWtlcyByZXF1ZXN0cyB3aXRoIGFueSBvZiB0aGVzZSBhY2NlcHQgaGVhZGVycyAob3IgYSBjb21iaW5hdGlvblxuICAgICAqIG9mIHRoZW0pIGFjY2VwdGFibGUgZm9yIHByb2Nlc3Npbmc6IFwiKlxcL2pzb25cIiwgXCJ0ZXh0L2pzb25cIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIsIFwiKlxcLypcIi5cbiAgICAgKlxuICAgICAqIDIuIEFsdGhvdWdoIGluIG1vc3QgY2FzZXMgYSBoYW5kbGVyIGZ1bmN0aW9uIHdpbGwgcHJvZHVjZSBwYXlsb2FkIGluIHNpbmdsZSBmb3JtYXQgKG1lZGlhIHR5cGUpLCBpdCBpcyBxdWl0ZSBwb3NzaWJsZSB0b1xuICAgICAqIGRlc2dpbiBpdCBhbHNvIGFzIGEgY29udHJvbGxlciB0aGF0IHByb2R1Y2VzIGFsdGVybmF0aXZlIHBheWxvYWQgaW4gZGlmZmVyZW50IGZvcm1hdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBuZWVkIHByb2R1Y2VzXG4gICAgICogdGhhdCBkZWNsYXJlcyBhbGwgc3VwcG9ydGVkIG1lZGlhIHR5cGVzIHNvIHRoYXQgdGhlIHJlcXVlc3Qgd2l0aCBhIHJlbGF4ZWQgQWNjZXB0IGhlYWRlciBtYXRjaGluZyBhbnkgb2YgdGhlbSBjYW4gbGFuZFxuICAgICAqIGluIHRoaXMgZnVuY3Rpb24uIFRoYXQgbWFrZXMgdGhlIHJvdXRpbmcgYSBiaXQgbGVzcyB0cmFuc3BhcmVudCBhbmQgZGVwZW5kZW50IG9uIHRoZSBjbGllbnQsIGJ1dCBtYXkgcHJvdmUgdmFsdWFibGUgZm9yXG4gICAgICogY2VydGlhbiBjYXNlcy5cbiAgICAgKlxuICAgICAqIEluIGFueSBjYXNlIGl0IGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSByZXF1ZXN0IHByb2Nlc3NpbmcgZnVuY3Rpb24gdG8gc2V0IHRoZSBjb3JyZWN0IENvbnRlbnQtVHlwZSBoZWFkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWltZVR5cGVzIFNldHMgdGhlIG1pbWUgdHlwZShzKSB0aGF0IHRoaXMgUmVzb3VyY2VNZXRob2QgbWF5IHByb2R1Y2UuXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWV0aG9kIGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAgICovXG4gICAgcHJvZHVjZXMobWltZVR5cGVzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFJlc291cmNlTWV0aG9kIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWltZVNldHRpbmcoJ3Byb2R1Y2VzJywgbWltZVR5cGVzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ29tbW1vbiBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6bmcgdGhlICdjb25zdW1lcycgYW5kICdwcm9kdWNlcycgYXJyYXlzIGluIHRoZSBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZXMuXG4gICAgICogQmVmb3JlIGZpbmFsaXppbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dXAgdGhlIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlIGR1cGxpY2F0ZXMgd2l0aCBleGFjdCBtYXRjaCBmaWx0ZXJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWltZVNldHRpbmdOYW1lIG11c3QgYmUgZWl0aGVyICdjb25zdW1lcycgb3IgJ3Byb2R1Y2VzJy5cbiAgICAgKiBAcGFyYW0gbWltZVR5cGVzIEFuIGFycmF5IG9mIHN0cmluZ3MgZm9ybWF0dGVkIGFzIG1pbWUgdHlwZXMgKHR5cGUvc3VidHlwZSkgb3IgYSBzaW5nbGUgc3RyaW5nLlxuICAgICAqIEByZXR1cm5zIFRoZSBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZSB0byB3aGljaCB0aGUgZnVuY3Rpb24gaXMgYm91bmQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIG1pbWVTZXR0aW5nKG1pbWVTZXR0aW5nTmFtZTogJ2NvbnN1bWVzJyB8ICdwcm9kdWNlcycsIG1pbWVUeXBlczogc3RyaW5nIHwgc3RyaW5nW10pOiBSZXNvdXJjZU1ldGhvZCB7XG5cbiAgICAgICAgbGV0IGFyck1pbWVUeXBlczogc3RyaW5nW107XG5cbiAgICAgICAgaWYgKHR5cGVvZiBtaW1lVHlwZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBhcnJNaW1lVHlwZXMgPSBbbWltZVR5cGVzXTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG1pbWVUeXBlcykpIHtcbiAgICAgICAgICAgIGFyck1pbWVUeXBlcyA9IG1pbWVUeXBlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudDogJyArIG1pbWVTZXR0aW5nTmFtZSArICcgbWltZSB0eXBlIGFyZ3VtZW50IG11c3QgYmUgdmFsaWQgTUlNRSB0eXBlIHN0cmluZyBvciBhcnJheSBvZiBzdWNoIHN0cmluZ3MsIGJ1dCBpbnN0ZWFkIGlzICcgKyAodHlwZW9mIG1pbWVUeXBlcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyTWltZVR5cGVzLmZvckVhY2goKG1pbWVUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtdCA9IG1pbWVUeXBlLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBpZiAobXQubGVuZ3RoICE9PSAyIHx8ICFtdFswXSB8fCAhbXRbMV0pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50LiBOb3QgYSB2YWxpZCBNSU1FIHR5cGUgZm9ybWF0IHR5cGUvc3VidHlwZTogJyArIG1pbWVUeXBlKTtcbiAgICAgICAgICAgIC8vIEJhc2ljIGZvcm1hdCBjaGVjayBpcyBzdWZmaWNpZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5jZmdbbWltZVNldHRpbmdOYW1lXSkge1xuICAgICAgICAgICAgdGhpcy5jZmdbbWltZVNldHRpbmdOYW1lXSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVkdXBsaWNhdGUgZW50cmllcyBiZWZvcmUgY29uY2F0ZW5hdGlvblxuICAgICAgICBjb25zdCBleGlzdGluZ01pbWVzOiBzdHJpbmdbXSA9IHRoaXMuY2ZnW21pbWVTZXR0aW5nTmFtZV07XG4gICAgICAgIGNvbnN0IG5ld01pbWVUeXBlcyA9IGFyck1pbWVUeXBlcy5maWx0ZXIoKG1pbWVUeXBlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdNaW1lcy5pbmRleE9mKG1pbWVUeXBlKSA8IDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2ZnW21pbWVTZXR0aW5nTmFtZV0gPSBleGlzdGluZ01pbWVzLmNvbmNhdChuZXdNaW1lVHlwZXMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLHVCQUF1QjtBQXVFekIsTUFBTSxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWlCeEIsWUFBWSxnQkFBcUIsWUFBaUIsVUFBZSxVQUFlO0FBQzVFLFNBQUssTUFBTSxrQkFBa0IsQ0FBQztBQUM5QixTQUFLLFlBQVk7QUFDakIsU0FBSyxhQUFhO0FBRWxCLFFBQUksVUFBVTtBQUVWLFdBQUssV0FBVyxTQUFTLFNBQVMsS0FBSyxRQUFRO0FBQy9DLFdBQUssZUFBZSxLQUFLLE9BQU8sS0FBSztBQUFBLElBQ3pDO0FBQUEsRUFDSjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsVUFBZ0I7QUFFWixTQUFLLFlBQVksVUFBVSxHQUFHLFNBQVM7QUFBQSxF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
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { handlerFunction } from "./resource-common";
|
|
2
|
+
import { ResourceMethod } from "./resource-method";
|
|
3
|
+
function arrayEquals(source, target) {
|
|
4
|
+
if (source === target)
|
|
5
|
+
return true;
|
|
6
|
+
if (!Array.isArray(source) || !Array.isArray(target))
|
|
7
|
+
return false;
|
|
8
|
+
if (source !== void 0 && target === void 0 || source === void 0 && target !== void 0)
|
|
9
|
+
return false;
|
|
10
|
+
if (source.length !== target.length)
|
|
11
|
+
return false;
|
|
12
|
+
for (let i = 0; i < source.length; i++) {
|
|
13
|
+
if (source[i] !== target[i])
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
class Resource {
|
|
19
|
+
/**
|
|
20
|
+
* @param sPath The base URL path for the resource.
|
|
21
|
+
* @param oConfiguration Optional configuration object (map of method handlers).
|
|
22
|
+
* @param controller Optional controller instance containing an execute method.
|
|
23
|
+
* @param mappings Optional object for resource mappings.
|
|
24
|
+
*/
|
|
25
|
+
constructor(sPath, oConfiguration, controller, mappings) {
|
|
26
|
+
this.sPath = sPath;
|
|
27
|
+
this.cfg = oConfiguration || {};
|
|
28
|
+
if (controller) {
|
|
29
|
+
this.controller = controller;
|
|
30
|
+
this.execute = controller.execute.bind(controller);
|
|
31
|
+
}
|
|
32
|
+
if (mappings) {
|
|
33
|
+
this.mappings = mappings;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets the URL path for this resource, overriding the one specified upon its construction,
|
|
38
|
+
* if a path string is provided as argument ot the method (i.e. acts as setter),
|
|
39
|
+
* or returns the path set for this resource, if the method is invoked without arguments (i.e. acts as getter).
|
|
40
|
+
*
|
|
41
|
+
* @param sPath The path property to be set for this resource.
|
|
42
|
+
* @returns The resource instance for method chaining (setter mode), or the path set for this resource (getter mode).
|
|
43
|
+
*/
|
|
44
|
+
path(sPath) {
|
|
45
|
+
if (arguments.length === 0)
|
|
46
|
+
return this.sPath;
|
|
47
|
+
this.sPath = sPath;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a new HTTP method handling specification.
|
|
52
|
+
*
|
|
53
|
+
* @param sHttpMethod The HTTP method (method) (e.g., "GET").
|
|
54
|
+
* @param oConfiguration The handler specification(s) for this HTTP method. Can be a single object or array.
|
|
55
|
+
* @returns The ResourceMethod instance, or an array of ResourceMethod instances.
|
|
56
|
+
*/
|
|
57
|
+
method(sHttpMethod, oConfiguration) {
|
|
58
|
+
if (sHttpMethod === void 0)
|
|
59
|
+
throw new Error("Illegal sHttpMethod argument: " + sHttpMethod);
|
|
60
|
+
const method = sHttpMethod.toLowerCase();
|
|
61
|
+
if (!this.cfg[method])
|
|
62
|
+
this.cfg[method] = [];
|
|
63
|
+
let arrConfig = oConfiguration || {};
|
|
64
|
+
if (!Array.isArray(arrConfig)) {
|
|
65
|
+
arrConfig = [arrConfig];
|
|
66
|
+
}
|
|
67
|
+
const handlers = [];
|
|
68
|
+
arrConfig.forEach((handlerSpec) => {
|
|
69
|
+
const consumes = handlerSpec.consumes;
|
|
70
|
+
const produces = handlerSpec.produces;
|
|
71
|
+
const _h = this.find(sHttpMethod, consumes, produces);
|
|
72
|
+
if (!_h) {
|
|
73
|
+
this.cfg[method].push(handlerSpec);
|
|
74
|
+
} else {
|
|
75
|
+
const existingSpec = this.cfg[method].find(
|
|
76
|
+
(spec) => arrayEquals(spec.consumes, consumes) && arrayEquals(spec.produces, produces)
|
|
77
|
+
);
|
|
78
|
+
if (existingSpec) {
|
|
79
|
+
for (const propName in handlerSpec) {
|
|
80
|
+
if (Object.prototype.hasOwnProperty.call(handlerSpec, propName)) {
|
|
81
|
+
existingSpec[propName] = handlerSpec[propName];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const finalHandlerSpec = this.cfg[method].find(
|
|
87
|
+
(spec) => arrayEquals(spec.consumes, consumes) && arrayEquals(spec.produces, produces)
|
|
88
|
+
);
|
|
89
|
+
if (finalHandlerSpec) {
|
|
90
|
+
handlers.push(new ResourceMethod(finalHandlerSpec, this.controller, this, this.mappings));
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
return handlers.length > 1 ? handlers : handlers[0];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Internal utility method to handle the logic for HTTP verb shortcut methods (get, post, etc.).
|
|
97
|
+
*
|
|
98
|
+
* @param sMethodName The HTTP method name (e.g., 'get').
|
|
99
|
+
* @param args The arguments passed to the shortcut method.
|
|
100
|
+
* @returns The ResourceMethod instance or an array of instances.
|
|
101
|
+
*/
|
|
102
|
+
buildMethod(sMethodName, ...args) {
|
|
103
|
+
if (args.length > 0) {
|
|
104
|
+
if (typeof args[0] === "function") {
|
|
105
|
+
return this.method(sMethodName).serve(args[0]);
|
|
106
|
+
} else if (typeof args[0] === "object" && args[0] !== null) {
|
|
107
|
+
return this.method(sMethodName, args[0]);
|
|
108
|
+
} else {
|
|
109
|
+
throw new Error(`Invalid argument: Resource.${sMethodName} method first argument must be valid javascript function or configuration object, but instead is ${typeof args[0]} ${args[0]}`);
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
return this.method(sMethodName);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
get() {
|
|
116
|
+
return this.buildMethod("get", ...arguments);
|
|
117
|
+
}
|
|
118
|
+
post() {
|
|
119
|
+
return this.buildMethod("post", ...arguments);
|
|
120
|
+
}
|
|
121
|
+
put() {
|
|
122
|
+
return this.buildMethod("put", ...arguments);
|
|
123
|
+
}
|
|
124
|
+
delete() {
|
|
125
|
+
return this.buildMethod("delete", ...arguments);
|
|
126
|
+
}
|
|
127
|
+
remove() {
|
|
128
|
+
return this.buildMethod("delete", ...arguments);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Finds a ResourceMethod with the given constraints.
|
|
132
|
+
*
|
|
133
|
+
* @param sVerb The name of the method property of the ResourceMethod in search (e.g., "GET").
|
|
134
|
+
* @param arrConsumesMimeTypeStrings The consumes constraint property of the ResourceMethod in search.
|
|
135
|
+
* @param arrProducesMimeTypeStrings The produces constraint property of the ResourceMethod in search.
|
|
136
|
+
* @returns The found ResourceMethod instance, or undefined if not found.
|
|
137
|
+
*/
|
|
138
|
+
find(sVerb, arrConsumesMimeTypeStrings, arrProducesMimeTypeStrings) {
|
|
139
|
+
let hit;
|
|
140
|
+
const sVerbLower = sVerb.toLowerCase();
|
|
141
|
+
Object.keys(this.cfg).filter((sVerbName) => sVerbName === sVerbLower).forEach((sVerbName) => {
|
|
142
|
+
this.cfg[sVerbName].forEach((verbHandlerSpec) => {
|
|
143
|
+
if (arrayEquals(verbHandlerSpec.consumes, arrConsumesMimeTypeStrings) && arrayEquals(verbHandlerSpec.produces, arrProducesMimeTypeStrings)) {
|
|
144
|
+
hit = new ResourceMethod(verbHandlerSpec, this.controller, this, this.mappings);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
if (hit)
|
|
149
|
+
return;
|
|
150
|
+
});
|
|
151
|
+
return hit;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Returns the configuration of this resource.
|
|
155
|
+
*
|
|
156
|
+
* @returns The resource configuration object.
|
|
157
|
+
*/
|
|
158
|
+
configuration() {
|
|
159
|
+
return this.cfg;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Instructs redirection of the request base don the parameter. If it is a stirng representing URI, the request will be
|
|
163
|
+
* redirected to this URI for any method. If it's a function it will be invoked and epxected to return a URI string to redirect to.
|
|
164
|
+
*
|
|
165
|
+
* @param fRedirector The function or string URI to redirect to.
|
|
166
|
+
* @returns The resource instance for method chaining.
|
|
167
|
+
*/
|
|
168
|
+
redirect(fRedirector) {
|
|
169
|
+
if (typeof fRedirector === "string") {
|
|
170
|
+
const redirectUri = fRedirector;
|
|
171
|
+
fRedirector = function() {
|
|
172
|
+
return redirectUri;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return handlerFunction(this, this.configuration(), "redirect", fRedirector);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Disables the ResourceMethods that match the given constraints
|
|
179
|
+
*
|
|
180
|
+
* @param sVerb The HTTP verb (e.g., "GET").
|
|
181
|
+
* @param arrConsumesTypeStrings The consumes constraint property of the ResourceMethod in search.
|
|
182
|
+
* @param arrProducesTypeStrings The produces constraint property of the ResourceMethod in search.
|
|
183
|
+
* @returns The resource instance for method chaining.
|
|
184
|
+
*/
|
|
185
|
+
disable(sVerb, arrConsumesTypeStrings, arrProducesTypeStrings) {
|
|
186
|
+
Object.keys(this.cfg).filter((sVerbName) => sVerb === void 0 || sVerb && sVerb.toLowerCase() === sVerbName).forEach((sVerbName) => {
|
|
187
|
+
for (let i = this.cfg[sVerbName].length - 1; i >= 0; i--) {
|
|
188
|
+
const verbHandlerSpec = this.cfg[sVerbName][i];
|
|
189
|
+
if (arrayEquals(verbHandlerSpec.consumes, arrConsumesTypeStrings) && arrayEquals(verbHandlerSpec.produces, arrProducesTypeStrings)) {
|
|
190
|
+
this.cfg[sVerbName].splice(i, 1);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
return this;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Disables all but 'read' HTTP methods in this resource (GET, HEAD, TRACE).
|
|
198
|
+
*
|
|
199
|
+
* @returns The resource instance for method chaining.
|
|
200
|
+
*/
|
|
201
|
+
readonly() {
|
|
202
|
+
Object.keys(this.cfg).forEach((method) => {
|
|
203
|
+
if (!["get", "head", "trace"].includes(method)) {
|
|
204
|
+
delete this.cfg[method];
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return this;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
export {
|
|
211
|
+
Resource
|
|
212
|
+
};
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2h0dHAvcnMvcmVzb3VyY2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGhhbmRsZXJGdW5jdGlvbiB9IGZyb20gXCIuL3Jlc291cmNlLWNvbW1vblwiO1xuaW1wb3J0IHsgUmVzb3VyY2VNZXRob2QgfSBmcm9tIFwiLi9yZXNvdXJjZS1tZXRob2RcIjtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYXJyYXlzIGZvciBlcXVhbGl0eSBieSBpbnNwZWN0aW5nIGlmIHRoZXkgYXJlIGFycmF5cywgcmVmZXIgdG8gdGhlIHNhbWUgaW5zdGFuY2UsXG4gKiBoYXZlIHNhbWUgbGVuZ3RoIGFuZCBjb250YWluIGVxdWFsIGNvbXBvbmVudHMgaW4gdGhlIHNhbWUgb3JkZXIuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGFycmF5IHRvIGNvbXBhcmUgdG8uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgYXJyYXkgdG8gY29tcGFyZSB3aXRoLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXlzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBhcnJheUVxdWFscyhzb3VyY2U6IGFueVtdIHwgdW5kZWZpbmVkLCB0YXJnZXQ6IGFueVtdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdGlmIChzb3VyY2UgPT09IHRhcmdldClcblx0XHRyZXR1cm4gdHJ1ZTtcblx0aWYgKCFBcnJheS5pc0FycmF5KHNvdXJjZSkgfHwgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSlcblx0XHRyZXR1cm4gZmFsc2U7XG5cdGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCBzb3VyY2UgPT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm4gZmFsc2U7XG5cdGlmIChzb3VyY2UubGVuZ3RoICE9PSB0YXJnZXQubGVuZ3RoKVxuXHRcdHJldHVybiBmYWxzZTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoc291cmNlW2ldICE9PSB0YXJnZXRbaV0pXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBSZXNvdXJjZSBpbnN0YW5jZSwgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgc3VwcGxpZWQgcGF0aCBwYXJhbWV0ZXIgYW5kIG9wdGlvbmFsbHkgd2l0aCB0aGUgc2Vjb25kLCBjb25maWd1cmF0aW9uIG9iamVjdCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZSB7XG4gICAgLyoqIFRoZSBVUkwgcGF0aCBmb3IgdGhpcyByZXNvdXJjZS4gKi9cblx0c1BhdGg6IHN0cmluZztcbiAgICAvKiogVGhlIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gbWFwcGluZyBtZXRob2RzIHRvIGhhbmRsZXIgc3BlY2lmaWNhdGlvbnMuICovXG5cdGNmZzogYW55O1xuICAgIC8qKiBUaGUgb3B0aW9uYWwgY29udHJvbGxlciBpbnN0YW5jZS4gKi9cblx0Y29udHJvbGxlcjogYW55O1xuICAgIC8qKiBCb3VuZCBleGVjdXRlIGZ1bmN0aW9uIGZyb20gdGhlIGNvbnRyb2xsZXIuICovXG5cdGV4ZWN1dGU6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICAgIC8qKiBBZGRpdGlvbmFsIG1hcHBpbmdzIG9iamVjdC4gKi9cblx0bWFwcGluZ3M6IGFueTtcblxuXHQvKipcbiAgICAgKiBAcGFyYW0gc1BhdGggVGhlIGJhc2UgVVJMIHBhdGggZm9yIHRoZSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0gb0NvbmZpZ3VyYXRpb24gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgKG1hcCBvZiBtZXRob2QgaGFuZGxlcnMpLlxuICAgICAqIEBwYXJhbSBjb250cm9sbGVyIE9wdGlvbmFsIGNvbnRyb2xsZXIgaW5zdGFuY2UgY29udGFpbmluZyBhbiBleGVjdXRlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gbWFwcGluZ3MgT3B0aW9uYWwgb2JqZWN0IGZvciByZXNvdXJjZSBtYXBwaW5ncy5cbiAgICAgKi9cblx0Y29uc3RydWN0b3Ioc1BhdGg6IHN0cmluZywgb0NvbmZpZ3VyYXRpb24/OiBhbnksIGNvbnRyb2xsZXI/OiBhbnksIG1hcHBpbmdzPzogYW55KSB7XG5cdFx0dGhpcy5zUGF0aCA9IHNQYXRoO1xuXHRcdHRoaXMuY2ZnID0gb0NvbmZpZ3VyYXRpb24gfHwge307XG5cblx0XHRpZiAoY29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlcjtcblx0XHRcdC8vIEJpbmQgdGhlIGNvbnRyb2xsZXIncyBleGVjdXRlIGZ1bmN0aW9uXG5cdFx0XHR0aGlzLmV4ZWN1dGUgPSBjb250cm9sbGVyLmV4ZWN1dGUuYmluZChjb250cm9sbGVyKTtcblx0XHR9XG5cdFx0aWYgKG1hcHBpbmdzKSB7XG5cdFx0XHR0aGlzLm1hcHBpbmdzID0gbWFwcGluZ3M7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG4gICAgICogU2V0cyB0aGUgVVJMIHBhdGggZm9yIHRoaXMgcmVzb3VyY2UsIG92ZXJyaWRpbmcgdGhlIG9uZSBzcGVjaWZpZWQgdXBvbiBpdHMgY29uc3RydWN0aW9uLFxuICAgICAqIGlmIGEgcGF0aCBzdHJpbmcgaXMgcHJvdmlkZWQgYXMgYXJndW1lbnQgb3QgdGhlIG1ldGhvZCAoaS5lLiBhY3RzIGFzIHNldHRlciksXG4gICAgICogb3IgcmV0dXJucyB0aGUgcGF0aCBzZXQgZm9yIHRoaXMgcmVzb3VyY2UsIGlmIHRoZSBtZXRob2QgaXMgaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cyAoaS5lLiBhY3RzIGFzIGdldHRlcikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc1BhdGggVGhlIHBhdGggcHJvcGVydHkgdG8gYmUgc2V0IGZvciB0aGlzIHJlc291cmNlLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNvdXJjZSBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nIChzZXR0ZXIgbW9kZSksIG9yIHRoZSBwYXRoIHNldCBmb3IgdGhpcyByZXNvdXJjZSAoZ2V0dGVyIG1vZGUpLlxuICAgICAqL1xuXHRwYXRoKHNQYXRoPzogc3RyaW5nKTogUmVzb3VyY2UgfCBzdHJpbmcge1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMuc1BhdGg7XG5cdFx0dGhpcy5zUGF0aCA9IHNQYXRoITtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IEhUVFAgbWV0aG9kIGhhbmRsaW5nIHNwZWNpZmljYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBzSHR0cE1ldGhvZCBUaGUgSFRUUCBtZXRob2QgKG1ldGhvZCkgKGUuZy4sIFwiR0VUXCIpLlxuXHQgKiBAcGFyYW0gb0NvbmZpZ3VyYXRpb24gVGhlIGhhbmRsZXIgc3BlY2lmaWNhdGlvbihzKSBmb3IgdGhpcyBIVFRQIG1ldGhvZC4gQ2FuIGJlIGEgc2luZ2xlIG9iamVjdCBvciBhcnJheS5cblx0ICogQHJldHVybnMgVGhlIFJlc291cmNlTWV0aG9kIGluc3RhbmNlLCBvciBhbiBhcnJheSBvZiBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZXMuXG5cdCAqL1xuXHRtZXRob2Qoc0h0dHBNZXRob2Q6IHN0cmluZywgb0NvbmZpZ3VyYXRpb24/OiBhbnkgfCBhbnlbXSk6IFJlc291cmNlTWV0aG9kIHwgUmVzb3VyY2VNZXRob2RbXSB7XG5cdFx0aWYgKHNIdHRwTWV0aG9kID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgc0h0dHBNZXRob2QgYXJndW1lbnQ6ICcgKyBzSHR0cE1ldGhvZCk7XG5cblx0XHRjb25zdCBtZXRob2QgPSBzSHR0cE1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCF0aGlzLmNmZ1ttZXRob2RdKVxuXHRcdFx0dGhpcy5jZmdbbWV0aG9kXSA9IFtdO1xuXG5cdFx0bGV0IGFyckNvbmZpZzogYW55W10gPSBvQ29uZmlndXJhdGlvbiB8fCB7fTtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXJyQ29uZmlnKSkge1xuXHRcdFx0YXJyQ29uZmlnID0gW2FyckNvbmZpZ107XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGFuZGxlcnM6IFJlc291cmNlTWV0aG9kW10gPSBbXTtcblxuXHRcdGFyckNvbmZpZy5mb3JFYWNoKChoYW5kbGVyU3BlYykgPT4ge1xuXHRcdFx0Ly8gVHlwZSBjYXN0aW5nIHRvIGhhbmRsZSBvYmplY3QgcHJvcGVydHkgYWNjZXNzIGZvciBjb25zdW1lcy9wcm9kdWNlc1xuXHRcdFx0Y29uc3QgY29uc3VtZXMgPSAoaGFuZGxlclNwZWMgYXMgeyBjb25zdW1lcz86IHN0cmluZ1tdIH0pLmNvbnN1bWVzO1xuXHRcdFx0Y29uc3QgcHJvZHVjZXMgPSAoaGFuZGxlclNwZWMgYXMgeyBwcm9kdWNlcz86IHN0cmluZ1tdIH0pLnByb2R1Y2VzO1xuXG5cdFx0XHRjb25zdCBfaCA9IHRoaXMuZmluZChzSHR0cE1ldGhvZCwgY29uc3VtZXMsIHByb2R1Y2VzKTtcblx0XHRcdGlmICghX2gpIHtcblx0XHRcdFx0Ly8gY3JlYXRlIG5ld1xuXHRcdFx0XHR0aGlzLmNmZ1ttZXRob2RdLnB1c2goaGFuZGxlclNwZWMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gdXBkYXRlIGV4aXN0aW5nIHNwZWMgaW4gY2ZnXG5cdFx0XHRcdGNvbnN0IGV4aXN0aW5nU3BlYyA9IHRoaXMuY2ZnW21ldGhvZF0uZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHNwZWM6IGFueSkgPT4gYXJyYXlFcXVhbHMoc3BlYy5jb25zdW1lcywgY29uc3VtZXMpICYmIGFycmF5RXF1YWxzKHNwZWMucHJvZHVjZXMsIHByb2R1Y2VzKVxuICAgICAgICAgICAgICAgICk7XG5cdFx0XHRcdGlmIChleGlzdGluZ1NwZWMpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHByb3BOYW1lIGluIGhhbmRsZXJTcGVjKSB7XG5cdFx0XHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhhbmRsZXJTcGVjLCBwcm9wTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0ZXhpc3RpbmdTcGVjW3Byb3BOYW1lXSA9IGhhbmRsZXJTcGVjW3Byb3BOYW1lXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IFJlc291cmNlTWV0aG9kIGluc3RhbmNlIGZvciB0aGUgKHBvdGVudGlhbGx5IHVwZGF0ZWQpIHNwZWNcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsSGFuZGxlclNwZWMgPSB0aGlzLmNmZ1ttZXRob2RdLmZpbmQoXG4gICAgICAgICAgICAgICAgKHNwZWM6IGFueSkgPT4gYXJyYXlFcXVhbHMoc3BlYy5jb25zdW1lcywgY29uc3VtZXMpICYmIGFycmF5RXF1YWxzKHNwZWMucHJvZHVjZXMsIHByb2R1Y2VzKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGZpbmFsSGFuZGxlclNwZWMpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKG5ldyBSZXNvdXJjZU1ldGhvZChmaW5hbEhhbmRsZXJTcGVjLCB0aGlzLmNvbnRyb2xsZXIsIHRoaXMsIHRoaXMubWFwcGluZ3MpKTtcbiAgICAgICAgICAgIH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBoYW5kbGVycy5sZW5ndGggPiAxID8gaGFuZGxlcnMgOiBoYW5kbGVyc1swXTtcblx0fTtcblxuXHQvKipcbiAgICAgKiBJbnRlcm5hbCB1dGlsaXR5IG1ldGhvZCB0byBoYW5kbGUgdGhlIGxvZ2ljIGZvciBIVFRQIHZlcmIgc2hvcnRjdXQgbWV0aG9kcyAoZ2V0LCBwb3N0LCBldGMuKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzTWV0aG9kTmFtZSBUaGUgSFRUUCBtZXRob2QgbmFtZSAoZS5nLiwgJ2dldCcpLlxuICAgICAqIEBwYXJhbSBhcmdzIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBzaG9ydGN1dCBtZXRob2QuXG4gICAgICogQHJldHVybnMgVGhlIFJlc291cmNlTWV0aG9kIGluc3RhbmNlIG9yIGFuIGFycmF5IG9mIGluc3RhbmNlcy5cbiAgICAgKi9cblx0cHJpdmF0ZSBidWlsZE1ldGhvZChzTWV0aG9kTmFtZTogc3RyaW5nLCAuLi5hcmdzOiAoRnVuY3Rpb24gfCBhbnkpW10pOiBSZXNvdXJjZU1ldGhvZCB8IFJlc291cmNlTWV0aG9kW10ge1xuXHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHQvLyAuZ2V0KGZ1bmN0aW9uKSAtPiAubWV0aG9kKCdnZXQnKS5zZXJ2ZShmdW5jdGlvbilcbiAgICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBuZWVkIHRvIGNhc3QgdGhlIHJlc3VsdCBvZiBtZXRob2QoKSB0byBhY2Nlc3Mgc2VydmUoKSBhcyBpdCByZXR1cm5zIGEgUmVzb3VyY2VNZXRob2QuXG5cdFx0XHRcdHJldHVybiAodGhpcy5tZXRob2Qoc01ldGhvZE5hbWUpIGFzIFJlc291cmNlTWV0aG9kKS5zZXJ2ZShhcmdzWzBdKTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwpIHtcblx0XHRcdFx0Ly8gLmdldCh7Y29uZmlnfSkgLT4gLm1ldGhvZCgnZ2V0Jywge2NvbmZpZ30pXG5cdFx0XHRcdHJldHVybiB0aGlzLm1ldGhvZChzTWV0aG9kTmFtZSwgYXJnc1swXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXJndW1lbnQ6IFJlc291cmNlLiR7c01ldGhvZE5hbWV9IG1ldGhvZCBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIHZhbGlkIGphdmFzY3JpcHQgZnVuY3Rpb24gb3IgY29uZmlndXJhdGlvbiBvYmplY3QsIGJ1dCBpbnN0ZWFkIGlzICR7dHlwZW9mIGFyZ3NbMF19ICR7YXJnc1swXX1gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gLmdldCgpIC0+IC5tZXRob2QoJ2dldCcpXG5cdFx0XHRyZXR1cm4gdGhpcy5tZXRob2Qoc01ldGhvZE5hbWUpIGFzIFJlc291cmNlTWV0aG9kO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGhhbmRsaW5nIHNwZWNpZmljYXRpb24gZm9yIHRoZSBIVFRQIG1ldGhvZCBcIkdFVFwiLlxuXHQgKiBAcGFyYW0gZlNlcnZlQ2J8b0NvbmZpZ3VyYXRpb24gU2VydmUgZnVuY3Rpb24gY2FsbGJhY2sgb3IgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgbWV0aG9kLlxuXHQgKiBAcmV0dXJucyBUaGUgUmVzb3VyY2VNZXRob2QgaW5zdGFuY2Ugb3IgYXJyYXkuXG5cdCAqL1xuXHRnZXQoZlNlcnZlQ2I6IEZ1bmN0aW9uKTogUmVzb3VyY2VNZXRob2Q7XG4gICAgZ2V0KG9Db25maWd1cmF0aW9uOiBhbnkpOiBSZXNvdXJjZU1ldGhvZCB8IFJlc291cmNlTWV0aG9kW107XG4gICAgZ2V0KCk6IFJlc291cmNlTWV0aG9kO1xuXHRnZXQoKTogUmVzb3VyY2VNZXRob2QgfCBSZXNvdXJjZU1ldGhvZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5idWlsZE1ldGhvZCgnZ2V0JywgLi4uYXJndW1lbnRzKTtcblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGhhbmRsaW5nIHNwZWNpZmljYXRpb24gZm9yIHRoZSBIVFRQIG1ldGhvZCBcIlBPU1RcIi5cblx0ICogQHBhcmFtIGZTZXJ2ZUNifG9Db25maWd1cmF0aW9uIFNlcnZlIGZ1bmN0aW9uIGNhbGxiYWNrIG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGluaXRpYWxpemUgdGhlIG1ldGhvZC5cblx0ICogQHJldHVybnMgVGhlIFJlc291cmNlTWV0aG9kIGluc3RhbmNlIG9yIGFycmF5LlxuXHQgKi9cblx0cG9zdChmU2VydmVDYjogRnVuY3Rpb24pOiBSZXNvdXJjZU1ldGhvZDtcbiAgICBwb3N0KG9Db25maWd1cmF0aW9uOiBhbnkpOiBSZXNvdXJjZU1ldGhvZCB8IFJlc291cmNlTWV0aG9kW107XG4gICAgcG9zdCgpOiBSZXNvdXJjZU1ldGhvZDtcblx0cG9zdCgpOiBSZXNvdXJjZU1ldGhvZCB8IFJlc291cmNlTWV0aG9kW10ge1xuXHRcdHJldHVybiB0aGlzLmJ1aWxkTWV0aG9kKCdwb3N0JywgLi4uYXJndW1lbnRzKTtcblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGhhbmRsaW5nIHNwZWNpZmljYXRpb24gZm9yIHRoZSBIVFRQIG1ldGhvZCBcIlBVVFwiLlxuXHQgKiBAcGFyYW0gZlNlcnZlQ2J8b0NvbmZpZ3VyYXRpb24gU2VydmUgZnVuY3Rpb24gY2FsbGJhY2sgb3IgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgbWV0aG9kLlxuXHQgKiBAcmV0dXJucyBUaGUgUmVzb3VyY2VNZXRob2QgaW5zdGFuY2Ugb3IgYXJyYXkuXG5cdCAqL1xuXHRwdXQoZlNlcnZlQ2I6IEZ1bmN0aW9uKTogUmVzb3VyY2VNZXRob2Q7XG4gICAgcHV0KG9Db25maWd1cmF0aW9uOiBhbnkpOiBSZXNvdXJjZU1ldGhvZCB8IFJlc291cmNlTWV0aG9kW107XG4gICAgcHV0KCk6IFJlc291cmNlTWV0aG9kO1xuXHRwdXQoKTogUmVzb3VyY2VNZXRob2QgfCBSZXNvdXJjZU1ldGhvZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5idWlsZE1ldGhvZCgncHV0JywgLi4uYXJndW1lbnRzKTtcblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGhhbmRsaW5nIHNwZWNpZmljYXRpb24gZm9yIHRoZSBIVFRQIG1ldGhvZCBcIkRFTEVURVwiLlxuXHQgKiBAcGFyYW0gZlNlcnZlQ2J8b0NvbmZpZ3VyYXRpb24gU2VydmUgZnVuY3Rpb24gY2FsbGJhY2sgb3IgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgbWV0aG9kLlxuXHQgKiBAcmV0dXJucyBUaGUgUmVzb3VyY2VNZXRob2QgaW5zdGFuY2Ugb3IgYXJyYXkuXG5cdCAqL1xuXHRkZWxldGUoZlNlcnZlQ2I6IEZ1bmN0aW9uKTogUmVzb3VyY2VNZXRob2Q7XG4gICAgZGVsZXRlKG9Db25maWd1cmF0aW9uOiBhbnkpOiBSZXNvdXJjZU1ldGhvZCB8IFJlc291cmNlTWV0aG9kW107XG4gICAgZGVsZXRlKCk6IFJlc291cmNlTWV0aG9kO1xuXHRkZWxldGUoKTogUmVzb3VyY2VNZXRob2QgfCBSZXNvdXJjZU1ldGhvZFtdIHtcblx0XHRyZXR1cm4gdGhpcy5idWlsZE1ldGhvZCgnZGVsZXRlJywgLi4uYXJndW1lbnRzKTtcblx0fTtcblxuICAgIC8qKlxuXHQgKiBDcmVhdGVzIGEgaGFuZGxpbmcgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIEhUVFAgbWV0aG9kIFwiREVMRVRFXCIgKGFsaWFzIGZvciBkZWxldGUoKSkuXG5cdCAqIEBwYXJhbSBmU2VydmVDYnxvQ29uZmlndXJhdGlvbiBTZXJ2ZSBmdW5jdGlvbiBjYWxsYmFjayBvciBjb25maWd1cmF0aW9uIG9iamVjdCB0byBpbml0aWFsaXplIHRoZSBtZXRob2QuXG5cdCAqIEByZXR1cm5zIFRoZSBSZXNvdXJjZU1ldGhvZCBpbnN0YW5jZSBvciBhcnJheS5cblx0ICovXG4gICAgcmVtb3ZlKGZTZXJ2ZUNiOiBGdW5jdGlvbik6IFJlc291cmNlTWV0aG9kO1xuICAgIHJlbW92ZShvQ29uZmlndXJhdGlvbjogYW55KTogUmVzb3VyY2VNZXRob2QgfCBSZXNvdXJjZU1ldGhvZFtdO1xuICAgIHJlbW92ZSgpOiBSZXNvdXJjZU1ldGhvZDtcblx0cmVtb3ZlKCk6IFJlc291cmNlTWV0aG9kIHwgUmVzb3VyY2VNZXRob2RbXSB7XG5cdFx0cmV0dXJuIHRoaXMuYnVpbGRNZXRob2QoJ2RlbGV0ZScsIC4uLmFyZ3VtZW50cyk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgYSBSZXNvdXJjZU1ldGhvZCB3aXRoIHRoZSBnaXZlbiBjb25zdHJhaW50cy5cblx0ICpcblx0ICogQHBhcmFtIHNWZXJiIFRoZSBuYW1lIG9mIHRoZSBtZXRob2QgcHJvcGVydHkgb2YgdGhlIFJlc291cmNlTWV0aG9kIGluIHNlYXJjaCAoZS5nLiwgXCJHRVRcIikuXG5cdCAqIEBwYXJhbSBhcnJDb25zdW1lc01pbWVUeXBlU3RyaW5ncyBUaGUgY29uc3VtZXMgY29uc3RyYWludCBwcm9wZXJ0eSBvZiB0aGUgUmVzb3VyY2VNZXRob2QgaW4gc2VhcmNoLlxuXHQgKiBAcGFyYW0gYXJyUHJvZHVjZXNNaW1lVHlwZVN0cmluZ3MgVGhlIHByb2R1Y2VzIGNvbnN0cmFpbnQgcHJvcGVydHkgb2YgdGhlIFJlc291cmNlTWV0aG9kIGluIHNlYXJjaC5cblx0ICogQHJldHVybnMgVGhlIGZvdW5kIFJlc291cmNlTWV0aG9kIGluc3RhbmNlLCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kLlxuXHQgKi9cblx0ZmluZChzVmVyYjogc3RyaW5nLCBhcnJDb25zdW1lc01pbWVUeXBlU3RyaW5ncz86IHN0cmluZ1tdLCBhcnJQcm9kdWNlc01pbWVUeXBlU3RyaW5ncz86IHN0cmluZ1tdKTogUmVzb3VyY2VNZXRob2QgfCB1bmRlZmluZWQge1xuXHRcdGxldCBoaXQ6IFJlc291cmNlTWV0aG9kIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHNWZXJiTG93ZXIgPSBzVmVyYi50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0T2JqZWN0LmtleXModGhpcy5jZmcpXG4gICAgICAgICAgICAuZmlsdGVyKChzVmVyYk5hbWUpID0+IHNWZXJiTmFtZSA9PT0gc1ZlcmJMb3dlcilcbiAgICAgICAgICAgIC5mb3JFYWNoKChzVmVyYk5hbWUpID0+IHtcblx0XHRcdCAgICB0aGlzLmNmZ1tzVmVyYk5hbWVdLmZvckVhY2goKHZlcmJIYW5kbGVyU3BlYzogYW55KSA9PiB7XG5cdFx0XHRcdCAgICBpZiAoYXJyYXlFcXVhbHModmVyYkhhbmRsZXJTcGVjLmNvbnN1bWVzLCBhcnJDb25zdW1lc01pbWVUeXBlU3RyaW5ncykgJiYgYXJyYXlFcXVhbHModmVyYkhhbmRsZXJTcGVjLnByb2R1Y2VzLCBhcnJQcm9kdWNlc01pbWVUeXBlU3RyaW5ncykpIHtcblx0XHRcdFx0XHQgICAgaGl0ID0gbmV3IFJlc291cmNlTWV0aG9kKHZlcmJIYW5kbGVyU3BlYywgdGhpcy5jb250cm9sbGVyLCB0aGlzLCB0aGlzLm1hcHBpbmdzKTtcblx0XHRcdFx0XHQgICAgcmV0dXJuO1xuXHRcdFx0XHQgICAgfVxuXHRcdFx0ICAgIH0pO1xuXHRcdFx0ICAgIGlmIChoaXQpXG5cdFx0XHRcdCAgICByZXR1cm47XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGhpdDtcblx0fTtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGlzIHJlc291cmNlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2UgY29uZmlndXJhdGlvbiBvYmplY3QuXG5cdCAqL1xuXHRjb25maWd1cmF0aW9uKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMuY2ZnO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBJbnN0cnVjdHMgcmVkaXJlY3Rpb24gb2YgdGhlIHJlcXVlc3QgYmFzZSBkb24gdGhlIHBhcmFtZXRlci4gSWYgaXQgaXMgYSBzdGlybmcgcmVwcmVzZW50aW5nIFVSSSwgdGhlIHJlcXVlc3Qgd2lsbCBiZVxuXHQgKiByZWRpcmVjdGVkIHRvIHRoaXMgVVJJIGZvciBhbnkgbWV0aG9kLiBJZiBpdCdzIGEgZnVuY3Rpb24gaXQgd2lsbCBiZSBpbnZva2VkIGFuZCBlcHhlY3RlZCB0byByZXR1cm4gYSBVUkkgc3RyaW5nIHRvIHJlZGlyZWN0IHRvLlxuXHQgKlxuXHQgKiBAcGFyYW0gZlJlZGlyZWN0b3IgVGhlIGZ1bmN0aW9uIG9yIHN0cmluZyBVUkkgdG8gcmVkaXJlY3QgdG8uXG4gICAgICogQHJldHVybnMgVGhlIHJlc291cmNlIGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG5cdCAqL1xuXHRyZWRpcmVjdChmUmVkaXJlY3Rvcjogc3RyaW5nIHwgRnVuY3Rpb24pOiBSZXNvdXJjZSB7XG5cdFx0aWYgKHR5cGVvZiBmUmVkaXJlY3RvciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGNvbnN0IHJlZGlyZWN0VXJpID0gZlJlZGlyZWN0b3I7XG5cdFx0XHRmUmVkaXJlY3RvciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHJlZGlyZWN0VXJpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBUaGUgaW1wb3J0ZWQgaGFuZGxlckZ1bmN0aW9uIGlzIHVzZWQgaGVyZVxuXHRcdHJldHVybiBoYW5kbGVyRnVuY3Rpb24odGhpcywgdGhpcy5jb25maWd1cmF0aW9uKCksICdyZWRpcmVjdCcsIGZSZWRpcmVjdG9yKTtcblx0fTtcblxuXHQvKipcblx0ICogRGlzYWJsZXMgdGhlIFJlc291cmNlTWV0aG9kcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBjb25zdHJhaW50c1xuICAgICAqXG4gICAgICogQHBhcmFtIHNWZXJiIFRoZSBIVFRQIHZlcmIgKGUuZy4sIFwiR0VUXCIpLlxuXHQgKiBAcGFyYW0gYXJyQ29uc3VtZXNUeXBlU3RyaW5ncyBUaGUgY29uc3VtZXMgY29uc3RyYWludCBwcm9wZXJ0eSBvZiB0aGUgUmVzb3VyY2VNZXRob2QgaW4gc2VhcmNoLlxuXHQgKiBAcGFyYW0gYXJyUHJvZHVjZXNUeXBlU3RyaW5ncyBUaGUgcHJvZHVjZXMgY29uc3RyYWludCBwcm9wZXJ0eSBvZiB0aGUgUmVzb3VyY2VNZXRob2QgaW4gc2VhcmNoLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNvdXJjZSBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuXHQgKi9cblx0ZGlzYWJsZShzVmVyYj86IHN0cmluZywgYXJyQ29uc3VtZXNUeXBlU3RyaW5ncz86IHN0cmluZ1tdLCBhcnJQcm9kdWNlc1R5cGVTdHJpbmdzPzogc3RyaW5nW10pOiBSZXNvdXJjZSB7XG5cdFx0T2JqZWN0LmtleXModGhpcy5jZmcpXG4gICAgICAgICAgICAuZmlsdGVyKChzVmVyYk5hbWUpID0+IHNWZXJiID09PSB1bmRlZmluZWQgfHwgKHNWZXJiICYmIHNWZXJiLnRvTG93ZXJDYXNlKCkgPT09IHNWZXJiTmFtZSkpXG4gICAgICAgICAgICAuZm9yRWFjaCgoc1ZlcmJOYW1lKSA9PiB7XG5cdFx0XHQgICAgLy8gVXNlIGEgcmV2ZXJzZSBsb29wIGZvciBzYWZlIHNwbGljaW5nXG5cdFx0XHQgICAgZm9yIChsZXQgaSA9IHRoaXMuY2ZnW3NWZXJiTmFtZV0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVyYkhhbmRsZXJTcGVjID0gdGhpcy5jZmdbc1ZlcmJOYW1lXVtpXTtcblx0XHRcdFx0ICAgIGlmIChhcnJheUVxdWFscyh2ZXJiSGFuZGxlclNwZWMuY29uc3VtZXMsIGFyckNvbnN1bWVzVHlwZVN0cmluZ3MpICYmIGFycmF5RXF1YWxzKHZlcmJIYW5kbGVyU3BlYy5wcm9kdWNlcywgYXJyUHJvZHVjZXNUeXBlU3RyaW5ncykpIHtcblx0XHRcdFx0XHQgICAgdGhpcy5jZmdbc1ZlcmJOYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIERpc2FibGVzIGFsbCBidXQgJ3JlYWQnIEhUVFAgbWV0aG9kcyBpbiB0aGlzIHJlc291cmNlIChHRVQsIEhFQUQsIFRSQUNFKS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSByZXNvdXJjZSBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuXHQgKi9cblx0cmVhZG9ubHkoKTogUmVzb3VyY2Uge1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuY2ZnKS5mb3JFYWNoKChtZXRob2QpID0+IHtcblx0XHRcdGlmICghWydnZXQnLCAnaGVhZCcsICd0cmFjZSddLmluY2x1ZGVzKG1ldGhvZCkpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuY2ZnW21ldGhvZF07XG4gICAgICAgICAgICB9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG59Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxzQkFBc0I7QUFVL0IsU0FBUyxZQUFZLFFBQTJCLFFBQW9DO0FBQ25GLE1BQUksV0FBVztBQUNkLFdBQU87QUFDUixNQUFJLENBQUMsTUFBTSxRQUFRLE1BQU0sS0FBSyxDQUFDLE1BQU0sUUFBUSxNQUFNO0FBQ2xELFdBQU87QUFDUixNQUFJLFdBQVcsVUFBYSxXQUFXLFVBQWEsV0FBVyxVQUFhLFdBQVc7QUFDdEYsV0FBTztBQUNSLE1BQUksT0FBTyxXQUFXLE9BQU87QUFDNUIsV0FBTztBQUNSLFdBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxRQUFRLEtBQUs7QUFDdkMsUUFBSSxPQUFPLENBQUMsTUFBTSxPQUFPLENBQUM7QUFDekIsYUFBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPO0FBQ1I7QUFLTyxNQUFNLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWtCckIsWUFBWSxPQUFlLGdCQUFzQixZQUFrQixVQUFnQjtBQUNsRixTQUFLLFFBQVE7QUFDYixTQUFLLE1BQU0sa0JBQWtCLENBQUM7QUFFOUIsUUFBSSxZQUFZO0FBQ2YsV0FBSyxhQUFhO0FBRWxCLFdBQUssVUFBVSxXQUFXLFFBQVEsS0FBSyxVQUFVO0FBQUEsSUFDbEQ7QUFDQSxRQUFJLFVBQVU7QUFDYixXQUFLLFdBQVc7QUFBQSxJQUNqQjtBQUFBLEVBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxLQUFLLE9BQW1DO0FBQ3ZDLFFBQUksVUFB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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { service, HttpController } from "./rs/resource-http-controller";
|
|
2
|
+
import { ResourceMethod } from "./rs/resource-method";
|
|
3
|
+
import { ResourceMappings } from "./rs/resource-mappings";
|
|
4
|
+
import { Resource } from "./rs/resource";
|
|
5
|
+
export {
|
|
6
|
+
HttpController,
|
|
7
|
+
Resource,
|
|
8
|
+
ResourceMappings,
|
|
9
|
+
ResourceMethod,
|
|
10
|
+
service
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvcnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCB7IHNlcnZpY2UsIEh0dHBDb250cm9sbGVyIH0gZnJvbSBcIi4vcnMvcmVzb3VyY2UtaHR0cC1jb250cm9sbGVyXCI7XG5leHBvcnQgeyBSZXNvdXJjZU1ldGhvZCB9IGZyb20gXCIuL3JzL3Jlc291cmNlLW1ldGhvZFwiO1xuZXhwb3J0IHsgUmVzb3VyY2VNYXBwaW5ncyB9IGZyb20gXCIuL3JzL3Jlc291cmNlLW1hcHBpbmdzXCI7XG5leHBvcnQgeyBSZXNvdXJjZSB9IGZyb20gXCIuL3JzL3Jlc291cmNlXCI7Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxTQUFTLHNCQUFzQjtBQUN4QyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGdCQUFnQjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const HttpSessionFacade = Java.type("org.eclipse.dirigible.components.api.http.HttpSessionFacade");
|
|
2
|
+
class Session {
|
|
3
|
+
/**
|
|
4
|
+
* Checks if a session is currently valid and active for the request context.
|
|
5
|
+
* @returns True if the session is valid, false otherwise (e.g., if it has been invalidated or timed out).
|
|
6
|
+
*/
|
|
7
|
+
static isValid() {
|
|
8
|
+
return HttpSessionFacade.isValid();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Retrieves the value of a named attribute stored in the session.
|
|
12
|
+
* Note: The underlying Java facade typically stores strings, but the value may represent
|
|
13
|
+
* serialized data that should be parsed if complex.
|
|
14
|
+
* @param name The name of the attribute.
|
|
15
|
+
* @returns The attribute value as a string, or null/undefined if not found.
|
|
16
|
+
*/
|
|
17
|
+
static getAttribute(name) {
|
|
18
|
+
return HttpSessionFacade.getAttribute(name);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Retrieves an array of all attribute names currently stored in the session.
|
|
22
|
+
* The names are retrieved as a JSON string from the facade and then parsed.
|
|
23
|
+
* @returns An array of attribute names (strings), or an empty array if no attributes are present.
|
|
24
|
+
*/
|
|
25
|
+
static getAttributeNames() {
|
|
26
|
+
const attrNames = HttpSessionFacade.getAttributeNamesJson();
|
|
27
|
+
return attrNames ? JSON.parse(attrNames) : [];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns the time at which this session was created, converted to a JavaScript Date object.
|
|
31
|
+
* @returns A Date object representing the session's creation time.
|
|
32
|
+
*/
|
|
33
|
+
static getCreationTime() {
|
|
34
|
+
return new Date(HttpSessionFacade.getCreationTime());
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns the unique identifier assigned to this session.
|
|
38
|
+
* @returns The session ID string.
|
|
39
|
+
*/
|
|
40
|
+
static getId() {
|
|
41
|
+
return HttpSessionFacade.getId();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Returns the last time the client accessed this session, converted to a JavaScript Date object.
|
|
45
|
+
* Access includes requests that retrieve or set session attributes.
|
|
46
|
+
* @returns A Date object representing the last access time.
|
|
47
|
+
*/
|
|
48
|
+
static getLastAccessedTime() {
|
|
49
|
+
return new Date(HttpSessionFacade.getLastAccessedTime());
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the maximum time interval, in seconds, that the server should keep this session open
|
|
53
|
+
* between client requests. After this interval, the session will be invalidated.
|
|
54
|
+
* @returns The maximum inactive interval in seconds.
|
|
55
|
+
*/
|
|
56
|
+
static getMaxInactiveInterval() {
|
|
57
|
+
return HttpSessionFacade.getMaxInactiveInterval();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Invalidates this session, unbinding any objects bound to it.
|
|
61
|
+
* After this call, the session is no longer valid.
|
|
62
|
+
*/
|
|
63
|
+
static invalidate() {
|
|
64
|
+
HttpSessionFacade.invalidate();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Checks if the client does not yet know about the session, typically meaning
|
|
68
|
+
* the server has not yet returned the session ID via a cookie or encoded URL.
|
|
69
|
+
* @returns True if the session is new (not yet used in a response), false otherwise.
|
|
70
|
+
*/
|
|
71
|
+
static isNew() {
|
|
72
|
+
return HttpSessionFacade.isNew();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Binds an object to this session, using the specified name.
|
|
76
|
+
* This is the primary way to store data in the user's session.
|
|
77
|
+
* @param name The name to bind the object under.
|
|
78
|
+
* @param value The value/object to store in the session.
|
|
79
|
+
*/
|
|
80
|
+
static setAttribute(name, value) {
|
|
81
|
+
HttpSessionFacade.setAttribute(name, value);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Removes the attribute with the given name from the session.
|
|
85
|
+
* @param name The name of the attribute to remove.
|
|
86
|
+
*/
|
|
87
|
+
static removeAttribute(name) {
|
|
88
|
+
HttpSessionFacade.removeAttribute(name);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Specifies the maximum time interval, in seconds, that the server should keep this session open
|
|
92
|
+
* between client requests before automatically invalidating it.
|
|
93
|
+
* @param interval The new interval in seconds.
|
|
94
|
+
*/
|
|
95
|
+
static setMaxInactiveInterval(interval) {
|
|
96
|
+
HttpSessionFacade.setMaxInactiveInterval(interval);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (typeof module !== "undefined") {
|
|
100
|
+
module.exports = Session;
|
|
101
|
+
}
|
|
102
|
+
export {
|
|
103
|
+
Session
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvc2Vzc2lvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBQcm92aWRlcyBhIHN0YXRpYyBmYVx1MDBFN2FkZSAoYFNlc3Npb25gIGNsYXNzKSBmb3IgYWNjZXNzaW5nIGFuZCBtYW5pcHVsYXRpbmdcbiAqIHRoZSBIVFRQIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHJlcXVlc3QuIFRoaXMgbW9kdWxlIGlzIG9mdGVuIHVzZWRcbiAqIHRvIHN0b3JlIHVzZXItc3BlY2lmaWMgZGF0YSBkdXJpbmcgdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwbGljYXRpb24uXG4gKi9cblxuY29uc3QgSHR0cFNlc3Npb25GYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkuaHR0cC5IdHRwU2Vzc2lvbkZhY2FkZVwiKTtcblxuLyoqXG4gKiBUaGUgc3RhdGljIFNlc3Npb24gY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyB0byBpbnRlcmFjdCB3aXRoIHRoZSBjdXJyZW50IHVzZXIgc2Vzc2lvblxuICogKGUuZy4sIHN0b3JpbmcgYXR0cmlidXRlcywgY2hlY2tpbmcgc3RhdHVzLCBtYW5hZ2luZyBsaWZldGltZSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXNzaW9uIHtcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgc2Vzc2lvbiBpcyBjdXJyZW50bHkgdmFsaWQgYW5kIGFjdGl2ZSBmb3IgdGhlIHJlcXVlc3QgY29udGV4dC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2Vzc2lvbiBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlIChlLmcuLCBpZiBpdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCBvciB0aW1lZCBvdXQpLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBIdHRwU2Vzc2lvbkZhY2FkZS5pc1ZhbGlkKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIG5hbWVkIGF0dHJpYnV0ZSBzdG9yZWQgaW4gdGhlIHNlc3Npb24uXG5cdCAqIE5vdGU6IFRoZSB1bmRlcmx5aW5nIEphdmEgZmFjYWRlIHR5cGljYWxseSBzdG9yZXMgc3RyaW5ncywgYnV0IHRoZSB2YWx1ZSBtYXkgcmVwcmVzZW50XG4gICAgICogc2VyaWFsaXplZCBkYXRhIHRoYXQgc2hvdWxkIGJlIHBhcnNlZCBpZiBjb21wbGV4LlxuXHQgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuXHQgKiBAcmV0dXJucyBUaGUgYXR0cmlidXRlIHZhbHVlIGFzIGEgc3RyaW5nLCBvciBudWxsL3VuZGVmaW5lZCBpZiBub3QgZm91bmQuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBIdHRwU2Vzc2lvbkZhY2FkZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFuIGFycmF5IG9mIGFsbCBhdHRyaWJ1dGUgbmFtZXMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgc2Vzc2lvbi5cblx0ICogVGhlIG5hbWVzIGFyZSByZXRyaWV2ZWQgYXMgYSBKU09OIHN0cmluZyBmcm9tIHRoZSBmYWNhZGUgYW5kIHRoZW4gcGFyc2VkLlxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhdHRyaWJ1dGUgbmFtZXMgKHN0cmluZ3MpLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRBdHRyaWJ1dGVOYW1lcygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgYXR0ck5hbWVzID0gSHR0cFNlc3Npb25GYWNhZGUuZ2V0QXR0cmlidXRlTmFtZXNKc29uKCk7XG5cdFx0cmV0dXJuIGF0dHJOYW1lcyA/IEpTT04ucGFyc2UoYXR0ck5hbWVzKSA6IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRpbWUgYXQgd2hpY2ggdGhpcyBzZXNzaW9uIHdhcyBjcmVhdGVkLCBjb252ZXJ0ZWQgdG8gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBBIERhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2Vzc2lvbidzIGNyZWF0aW9uIHRpbWUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldENyZWF0aW9uVGltZSgpOiBEYXRlIHtcblx0XHQvLyBUaGUgZmFjYWRlIHJldHVybnMgdGltZSBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoLCB3aGljaCBEYXRlKCkgYWNjZXB0cy5cblx0XHRyZXR1cm4gbmV3IERhdGUoSHR0cFNlc3Npb25GYWNhZGUuZ2V0Q3JlYXRpb25UaW1lKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIHRvIHRoaXMgc2Vzc2lvbi5cblx0ICogQHJldHVybnMgVGhlIHNlc3Npb24gSUQgc3RyaW5nLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiBIdHRwU2Vzc2lvbkZhY2FkZS5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxhc3QgdGltZSB0aGUgY2xpZW50IGFjY2Vzc2VkIHRoaXMgc2Vzc2lvbiwgY29udmVydGVkIHRvIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC5cblx0ICogQWNjZXNzIGluY2x1ZGVzIHJlcXVlc3RzIHRoYXQgcmV0cmlldmUgb3Igc2V0IHNlc3Npb24gYXR0cmlidXRlcy5cblx0ICogQHJldHVybnMgQSBEYXRlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGxhc3QgYWNjZXNzIHRpbWUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldExhc3RBY2Nlc3NlZFRpbWUoKTogRGF0ZSB7XG5cdFx0Ly8gVGhlIGZhY2FkZSByZXR1cm5zIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC5cblx0XHRyZXR1cm4gbmV3IERhdGUoSHR0cFNlc3Npb25GYWNhZGUuZ2V0TGFzdEFjY2Vzc2VkVGltZSgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHRpbWUgaW50ZXJ2YWwsIGluIHNlY29uZHMsIHRoYXQgdGhlIHNlcnZlciBzaG91bGQga2VlcCB0aGlzIHNlc3Npb24gb3BlblxuXHQgKiBiZXR3ZWVuIGNsaWVudCByZXF1ZXN0cy4gQWZ0ZXIgdGhpcyBpbnRlcnZhbCwgdGhlIHNlc3Npb24gd2lsbCBiZSBpbnZhbGlkYXRlZC5cblx0ICogQHJldHVybnMgVGhlIG1heGltdW0gaW5hY3RpdmUgaW50ZXJ2YWwgaW4gc2Vjb25kcy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0TWF4SW5hY3RpdmVJbnRlcnZhbCgpOiBudW1iZXIge1xuXHRcdHJldHVybiBIdHRwU2Vzc2lvbkZhY2FkZS5nZXRNYXhJbmFjdGl2ZUludGVydmFsKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW52YWxpZGF0ZXMgdGhpcyBzZXNzaW9uLCB1bmJpbmRpbmcgYW55IG9iamVjdHMgYm91bmQgdG8gaXQuXG5cdCAqIEFmdGVyIHRoaXMgY2FsbCwgdGhlIHNlc3Npb24gaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBpbnZhbGlkYXRlKCk6IHZvaWQge1xuXHRcdEh0dHBTZXNzaW9uRmFjYWRlLmludmFsaWRhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGNsaWVudCBkb2VzIG5vdCB5ZXQga25vdyBhYm91dCB0aGUgc2Vzc2lvbiwgdHlwaWNhbGx5IG1lYW5pbmdcblx0ICogdGhlIHNlcnZlciBoYXMgbm90IHlldCByZXR1cm5lZCB0aGUgc2Vzc2lvbiBJRCB2aWEgYSBjb29raWUgb3IgZW5jb2RlZCBVUkwuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHNlc3Npb24gaXMgbmV3IChub3QgeWV0IHVzZWQgaW4gYSByZXNwb25zZSksIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgaXNOZXcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIEh0dHBTZXNzaW9uRmFjYWRlLmlzTmV3KCk7XG5cdH1cblxuXHQvKipcblx0ICogQmluZHMgYW4gb2JqZWN0IHRvIHRoaXMgc2Vzc2lvbiwgdXNpbmcgdGhlIHNwZWNpZmllZCBuYW1lLlxuXHQgKiBUaGlzIGlzIHRoZSBwcmltYXJ5IHdheSB0byBzdG9yZSBkYXRhIGluIHRoZSB1c2VyJ3Mgc2Vzc2lvbi5cblx0ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gYmluZCB0aGUgb2JqZWN0IHVuZGVyLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlL29iamVjdCB0byBzdG9yZSBpbiB0aGUgc2Vzc2lvbi5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdEh0dHBTZXNzaW9uRmFjYWRlLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSB0aGUgc2Vzc2lvbi5cblx0ICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byByZW1vdmUuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHJlbW92ZUF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRIdHRwU2Vzc2lvbkZhY2FkZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHRpbWUgaW50ZXJ2YWwsIGluIHNlY29uZHMsIHRoYXQgdGhlIHNlcnZlciBzaG91bGQga2VlcCB0aGlzIHNlc3Npb24gb3BlblxuXHQgKiBiZXR3ZWVuIGNsaWVudCByZXF1ZXN0cyBiZWZvcmUgYXV0b21hdGljYWxseSBpbnZhbGlkYXRpbmcgaXQuXG5cdCAqIEBwYXJhbSBpbnRlcnZhbCBUaGUgbmV3IGludGVydmFsIGluIHNlY29uZHMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIHNldE1heEluYWN0aXZlSW50ZXJ2YWwoaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xuXHRcdEh0dHBTZXNzaW9uRmFjYWRlLnNldE1heEluYWN0aXZlSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gU2Vzc2lvbjtcbn0iXSwKICAibWFwcGluZ3MiOiAiQUFNQSxNQUFNLG9CQUFvQixLQUFLLEtBQUssNkRBQTZEO0FBTTFGLE1BQU0sUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNcEIsT0FBYyxVQUFtQjtBQUNoQyxXQUFPLGtCQUFrQixRQUFRO0FBQUEsRUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsT0FBYyxhQUFhLE1BQXNCO0FBQ2hELFdBQU8sa0JBQWtCLGFBQWEsSUFBSTtBQUFBLEVBQzNDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxvQkFBOEI7QUFDM0MsVUFBTSxZQUFZLGtCQUFrQixzQkFBc0I7QUFDMUQsV0FBTyxZQUFZLEtBQUssTUFBTSxTQUFTLElBQUksQ0FBQztBQUFBLEVBQzdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE9BQWMsa0JBQXdCO0FBRXJDLFdBQU8sSUFBSSxLQUFLLGtCQUFrQixnQkFBZ0IsQ0FBQztBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1BLE9BQWMsUUFBZ0I7QUFDN0IsV0FBTyxrQkFBa0IsTUFBTTtBQUFBLEVBQ2hDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxzQkFBNEI7QUFFekMsV0FBTyxJQUFJLEtBQUssa0JBQWtCLG9CQUFvQixDQUFDO0FBQUEsRUFDeEQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLHlCQUFpQztBQUM5QyxXQUFPLGtCQUFrQix1QkFBdUI7QUFBQSxFQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNQSxPQUFjLGFBQW1CO0FBQ2hDLHNCQUFrQixXQUFXO0FBQUEsRUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLFFBQWlCO0FBQzlCLFdBQU8sa0JBQWtCLE1BQU07QUFBQSxFQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsT0FBYyxhQUFhLE1BQWMsT0FBa0I7QUFDMUQsc0JBQWtCLGFBQWEsTUFBTSxLQUFLO0FBQUEsRUFDM0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTUEsT0FBYyxnQkFBZ0IsTUFBb0I7QUFDakQsc0JBQWtCLGdCQUFnQixJQUFJO0FBQUEsRUFDdkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLHVCQUF1QixVQUF3QjtBQUM1RCxzQkFBa0IsdUJBQXVCLFFBQVE7QUFBQSxFQUNsRDtBQUNEO0FBR0EsSUFBSSxPQUFPLFdBQVcsYUFBYTtBQUVsQyxTQUFPLFVBQVU7QUFDbEI7IiwKICAibmFtZXMiOiBbXQp9Cg==
|