@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,470 @@
|
|
|
1
|
+
const globalEval = eval;
|
|
2
|
+
const allowedResultTypes = ["value", "path", "pointer", "parent", "parentProperty", "all"];
|
|
3
|
+
const { hasOwnProperty: hasOwnProp } = Object.prototype;
|
|
4
|
+
const moveToAnotherArray = function(source, target, conditionCb) {
|
|
5
|
+
const il = source.length;
|
|
6
|
+
for (let i = 0; i < il; i++) {
|
|
7
|
+
const item = source[i];
|
|
8
|
+
if (conditionCb(item)) {
|
|
9
|
+
target.push(source.splice(i--, 1)[0]);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const vm = {
|
|
14
|
+
/**
|
|
15
|
+
* @param {string} expr Expression to evaluate
|
|
16
|
+
* @param {Object} context Object whose items will be added to evaluation
|
|
17
|
+
* @returns {*} Result of evaluated code
|
|
18
|
+
*/
|
|
19
|
+
runInNewContext(expr, context) {
|
|
20
|
+
const keys = Object.keys(context);
|
|
21
|
+
const funcs = [];
|
|
22
|
+
moveToAnotherArray(keys, funcs, (key) => {
|
|
23
|
+
return typeof context[key] === "function";
|
|
24
|
+
});
|
|
25
|
+
const code = funcs.reduce((s, func) => {
|
|
26
|
+
let fString = context[func].toString();
|
|
27
|
+
if (!/function/.exec(fString)) {
|
|
28
|
+
fString = "function " + fString;
|
|
29
|
+
}
|
|
30
|
+
return "var " + func + "=" + fString + ";" + s;
|
|
31
|
+
}, "") + keys.reduce((s, vr) => {
|
|
32
|
+
return "var " + vr + "=" + JSON.stringify(context[vr]).replace(
|
|
33
|
+
// http://www.thespanner.co.uk/2011/07/25/the-json-specification-is-now-wrong/
|
|
34
|
+
/\u2028|\u2029/g,
|
|
35
|
+
(m) => {
|
|
36
|
+
return "\\u202" + (m === "\u2028" ? "8" : "9");
|
|
37
|
+
}
|
|
38
|
+
) + ";" + s;
|
|
39
|
+
}, expr);
|
|
40
|
+
return globalEval(code);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
function push(arr, item) {
|
|
44
|
+
arr = arr.slice();
|
|
45
|
+
arr.push(item);
|
|
46
|
+
return arr;
|
|
47
|
+
}
|
|
48
|
+
function unshift(item, arr) {
|
|
49
|
+
arr = arr.slice();
|
|
50
|
+
arr.unshift(item);
|
|
51
|
+
return arr;
|
|
52
|
+
}
|
|
53
|
+
var NewError = function(value) {
|
|
54
|
+
const error = Error.call(this, 'JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)');
|
|
55
|
+
this.message = error.message;
|
|
56
|
+
this.stack = error.stack;
|
|
57
|
+
this.avoidNew = true;
|
|
58
|
+
this.value = value;
|
|
59
|
+
this.name = "NewError";
|
|
60
|
+
};
|
|
61
|
+
NewError.prototype = Object.create(Error.prototype);
|
|
62
|
+
NewError.prototype.constructor = NewError;
|
|
63
|
+
function JSONPath(opts, expr, obj, callback, otherTypeCallback) {
|
|
64
|
+
if (!(this instanceof JSONPath)) {
|
|
65
|
+
try {
|
|
66
|
+
return new JSONPath(opts, expr, obj, callback, otherTypeCallback);
|
|
67
|
+
} catch (e) {
|
|
68
|
+
if (!e.avoidNew) {
|
|
69
|
+
throw e;
|
|
70
|
+
}
|
|
71
|
+
return e.value;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (typeof opts === "string") {
|
|
75
|
+
otherTypeCallback = callback;
|
|
76
|
+
callback = obj;
|
|
77
|
+
obj = expr;
|
|
78
|
+
expr = opts;
|
|
79
|
+
opts = {};
|
|
80
|
+
}
|
|
81
|
+
opts = opts || {};
|
|
82
|
+
const objArgs = hasOwnProp.call(opts, "json") && hasOwnProp.call(opts, "path");
|
|
83
|
+
this.json = opts.json || obj;
|
|
84
|
+
this.path = opts.path || expr;
|
|
85
|
+
this.resultType = opts.resultType && opts.resultType.toLowerCase() || "value";
|
|
86
|
+
this.flatten = opts.flatten || false;
|
|
87
|
+
this.wrap = hasOwnProp.call(opts, "wrap") ? opts.wrap : true;
|
|
88
|
+
this.sandbox = opts.sandbox || {};
|
|
89
|
+
this.preventEval = opts.preventEval || false;
|
|
90
|
+
this.parent = opts.parent || null;
|
|
91
|
+
this.parentProperty = opts.parentProperty || null;
|
|
92
|
+
this.callback = opts.callback || callback || null;
|
|
93
|
+
this.otherTypeCallback = opts.otherTypeCallback || otherTypeCallback || function() {
|
|
94
|
+
throw new Error("You must supply an otherTypeCallback callback option with the @other() operator.");
|
|
95
|
+
};
|
|
96
|
+
if (opts.autostart !== false) {
|
|
97
|
+
const ret = this.evaluate({
|
|
98
|
+
path: objArgs ? opts.path : expr,
|
|
99
|
+
json: objArgs ? opts.json : obj
|
|
100
|
+
});
|
|
101
|
+
if (!ret || typeof ret !== "object") {
|
|
102
|
+
throw new NewError(ret);
|
|
103
|
+
}
|
|
104
|
+
return ret;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
JSONPath.prototype = Object.create(Object.prototype);
|
|
108
|
+
JSONPath.prototype.constructor = JSONPath;
|
|
109
|
+
JSONPath.prototype.evaluate = function(expr, json, callback, otherTypeCallback) {
|
|
110
|
+
const that = this;
|
|
111
|
+
let currParent = this.parent, currParentProperty = this.parentProperty;
|
|
112
|
+
let { flatten, wrap } = this;
|
|
113
|
+
this.currResultType = this.resultType;
|
|
114
|
+
this.currPreventEval = this.preventEval;
|
|
115
|
+
this.currSandbox = this.sandbox;
|
|
116
|
+
callback = callback || this.callback;
|
|
117
|
+
this.currOtherTypeCallback = otherTypeCallback || this.otherTypeCallback;
|
|
118
|
+
json = json || this.json;
|
|
119
|
+
expr = expr || this.path;
|
|
120
|
+
if (expr && typeof expr === "object") {
|
|
121
|
+
if (!expr.path) {
|
|
122
|
+
throw new Error('You must supply a "path" property when providing an object argument to JSONPath.evaluate().');
|
|
123
|
+
}
|
|
124
|
+
json = hasOwnProp.call(expr, "json") ? expr.json : json;
|
|
125
|
+
flatten = hasOwnProp.call(expr, "flatten") ? expr.flatten : flatten;
|
|
126
|
+
this.currResultType = hasOwnProp.call(expr, "resultType") ? expr.resultType : this.currResultType;
|
|
127
|
+
this.currSandbox = hasOwnProp.call(expr, "sandbox") ? expr.sandbox : this.currSandbox;
|
|
128
|
+
wrap = hasOwnProp.call(expr, "wrap") ? expr.wrap : wrap;
|
|
129
|
+
this.currPreventEval = hasOwnProp.call(expr, "preventEval") ? expr.preventEval : this.currPreventEval;
|
|
130
|
+
callback = hasOwnProp.call(expr, "callback") ? expr.callback : callback;
|
|
131
|
+
this.currOtherTypeCallback = hasOwnProp.call(expr, "otherTypeCallback") ? expr.otherTypeCallback : this.currOtherTypeCallback;
|
|
132
|
+
currParent = hasOwnProp.call(expr, "parent") ? expr.parent : currParent;
|
|
133
|
+
currParentProperty = hasOwnProp.call(expr, "parentProperty") ? expr.parentProperty : currParentProperty;
|
|
134
|
+
expr = expr.path;
|
|
135
|
+
}
|
|
136
|
+
currParent = currParent || null;
|
|
137
|
+
currParentProperty = currParentProperty || null;
|
|
138
|
+
if (Array.isArray(expr)) {
|
|
139
|
+
expr = JSONPath.toPathString(expr);
|
|
140
|
+
}
|
|
141
|
+
if (!expr || !json || allowedResultTypes.indexOf(this.currResultType) < 0) {
|
|
142
|
+
return void 0;
|
|
143
|
+
}
|
|
144
|
+
this._obj = json;
|
|
145
|
+
const exprList = JSONPath.toPathArray(expr);
|
|
146
|
+
if (exprList[0] === "$" && exprList.length > 1) {
|
|
147
|
+
exprList.shift();
|
|
148
|
+
}
|
|
149
|
+
this._hasParentSelector = null;
|
|
150
|
+
const result = this._trace(exprList, json, ["$"], currParent, currParentProperty, callback).filter(function(ea) {
|
|
151
|
+
return ea && !ea.isParentSelector;
|
|
152
|
+
});
|
|
153
|
+
if (!result.length) {
|
|
154
|
+
return wrap ? [] : void 0;
|
|
155
|
+
}
|
|
156
|
+
if (result.length === 1 && !wrap && !Array.isArray(result[0].value)) {
|
|
157
|
+
return this._getPreferredOutput(result[0]);
|
|
158
|
+
}
|
|
159
|
+
return result.reduce(function(rslt, ea) {
|
|
160
|
+
const valOrPath = that._getPreferredOutput(ea);
|
|
161
|
+
if (flatten && Array.isArray(valOrPath)) {
|
|
162
|
+
rslt = rslt.concat(valOrPath);
|
|
163
|
+
} else {
|
|
164
|
+
rslt.push(valOrPath);
|
|
165
|
+
}
|
|
166
|
+
return rslt;
|
|
167
|
+
}, []);
|
|
168
|
+
};
|
|
169
|
+
JSONPath.prototype._getPreferredOutput = function(ea) {
|
|
170
|
+
const resultType = this.currResultType;
|
|
171
|
+
switch (resultType) {
|
|
172
|
+
default:
|
|
173
|
+
throw new TypeError("Unknown result type");
|
|
174
|
+
case "all":
|
|
175
|
+
ea.pointer = JSONPath.toPointer(ea.path);
|
|
176
|
+
ea.path = typeof ea.path === "string" ? ea.path : JSONPath.toPathString(ea.path);
|
|
177
|
+
return ea;
|
|
178
|
+
case "value":
|
|
179
|
+
case "parent":
|
|
180
|
+
case "parentProperty":
|
|
181
|
+
return ea[resultType];
|
|
182
|
+
case "path":
|
|
183
|
+
return JSONPath.toPathString(ea[resultType]);
|
|
184
|
+
case "pointer":
|
|
185
|
+
return JSONPath.toPointer(ea.path);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
JSONPath.prototype._handleCallback = function(fullRetObj, callback, type) {
|
|
189
|
+
if (callback) {
|
|
190
|
+
const preferredOutput = this._getPreferredOutput(fullRetObj);
|
|
191
|
+
fullRetObj.path = typeof fullRetObj.path === "string" ? fullRetObj.path : JSONPath.toPathString(fullRetObj.path);
|
|
192
|
+
callback(preferredOutput, type, fullRetObj);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
JSONPath.prototype._trace = function(expr, val, path, parent, parentPropName, callback, literalPriority) {
|
|
196
|
+
let retObj;
|
|
197
|
+
const that = this;
|
|
198
|
+
if (!expr.length) {
|
|
199
|
+
retObj = { path, value: val, parent, parentProperty: parentPropName };
|
|
200
|
+
this._handleCallback(retObj, callback, "value");
|
|
201
|
+
return retObj;
|
|
202
|
+
}
|
|
203
|
+
const loc = expr[0], x = expr.slice(1);
|
|
204
|
+
const ret = [];
|
|
205
|
+
function addRet(elems) {
|
|
206
|
+
if (Array.isArray(elems)) {
|
|
207
|
+
elems.forEach((t) => {
|
|
208
|
+
ret.push(t);
|
|
209
|
+
});
|
|
210
|
+
} else {
|
|
211
|
+
ret.push(elems);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if ((typeof loc !== "string" || literalPriority) && val && hasOwnProp.call(val, loc)) {
|
|
215
|
+
addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback));
|
|
216
|
+
} else if (loc === "*") {
|
|
217
|
+
this._walk(loc, x, val, path, parent, parentPropName, callback, function(m, l, x2, v, p, par, pr, cb) {
|
|
218
|
+
addRet(that._trace(unshift(m, x2), v, p, par, pr, cb, true));
|
|
219
|
+
});
|
|
220
|
+
} else if (loc === "..") {
|
|
221
|
+
addRet(this._trace(x, val, path, parent, parentPropName, callback));
|
|
222
|
+
this._walk(loc, x, val, path, parent, parentPropName, callback, function(m, l, x2, v, p, par, pr, cb) {
|
|
223
|
+
if (typeof v[m] === "object") {
|
|
224
|
+
addRet(that._trace(unshift(l, x2), v[m], push(p, m), v, m, cb));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
} else if (loc === "^") {
|
|
228
|
+
this._hasParentSelector = true;
|
|
229
|
+
return path.length ? {
|
|
230
|
+
path: path.slice(0, -1),
|
|
231
|
+
expr: x,
|
|
232
|
+
isParentSelector: true
|
|
233
|
+
} : [];
|
|
234
|
+
} else if (loc === "~") {
|
|
235
|
+
retObj = { path: push(path, loc), value: parentPropName, parent, parentProperty: null };
|
|
236
|
+
this._handleCallback(retObj, callback, "property");
|
|
237
|
+
return retObj;
|
|
238
|
+
} else if (loc === "$") {
|
|
239
|
+
addRet(this._trace(x, val, path, null, null, callback));
|
|
240
|
+
} else if (/^(-?\d*):(-?\d*):?(\d*)$/.test(loc)) {
|
|
241
|
+
addRet(this._slice(loc, x, val, path, parent, parentPropName, callback));
|
|
242
|
+
} else if (loc.indexOf("?(") === 0) {
|
|
243
|
+
if (this.currPreventEval) {
|
|
244
|
+
throw new Error("Eval [?(expr)] prevented in JSONPath expression.");
|
|
245
|
+
}
|
|
246
|
+
this._walk(loc, x, val, path, parent, parentPropName, callback, function(m, l, x2, v, p, par, pr, cb) {
|
|
247
|
+
if (that._eval(l.replace(/^\?\((.*?)\)$/, "$1"), v[m], m, p, par, pr)) {
|
|
248
|
+
addRet(that._trace(unshift(m, x2), v, p, par, pr, cb));
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
} else if (loc[0] === "(") {
|
|
252
|
+
if (this.currPreventEval) {
|
|
253
|
+
throw new Error("Eval [(expr)] prevented in JSONPath expression.");
|
|
254
|
+
}
|
|
255
|
+
addRet(this._trace(unshift(
|
|
256
|
+
this._eval(loc, val, path[path.length - 1], path.slice(0, -1), parent, parentPropName),
|
|
257
|
+
x
|
|
258
|
+
), val, path, parent, parentPropName, callback));
|
|
259
|
+
} else if (loc[0] === "@") {
|
|
260
|
+
let addType = false;
|
|
261
|
+
const valueType = loc.slice(1, -2);
|
|
262
|
+
switch (valueType) {
|
|
263
|
+
default:
|
|
264
|
+
throw new TypeError("Unknown value type " + valueType);
|
|
265
|
+
case "scalar":
|
|
266
|
+
if (!val || ["object", "function"].indexOf(typeof val) < 0) {
|
|
267
|
+
addType = true;
|
|
268
|
+
}
|
|
269
|
+
break;
|
|
270
|
+
case "boolean":
|
|
271
|
+
case "string":
|
|
272
|
+
case "undefined":
|
|
273
|
+
case "function":
|
|
274
|
+
if (typeof val === valueType) {
|
|
275
|
+
addType = true;
|
|
276
|
+
}
|
|
277
|
+
break;
|
|
278
|
+
case "number":
|
|
279
|
+
if (typeof val === valueType && isFinite(val)) {
|
|
280
|
+
addType = true;
|
|
281
|
+
}
|
|
282
|
+
break;
|
|
283
|
+
case "nonFinite":
|
|
284
|
+
if (typeof val === "number" && !isFinite(val)) {
|
|
285
|
+
addType = true;
|
|
286
|
+
}
|
|
287
|
+
break;
|
|
288
|
+
case "object":
|
|
289
|
+
if (val && typeof val === valueType) {
|
|
290
|
+
addType = true;
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
293
|
+
case "array":
|
|
294
|
+
if (Array.isArray(val)) {
|
|
295
|
+
addType = true;
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
case "other":
|
|
299
|
+
addType = this.currOtherTypeCallback(val, path, parent, parentPropName);
|
|
300
|
+
break;
|
|
301
|
+
case "integer":
|
|
302
|
+
if (val === Number(val) && isFinite(val) && !(val % 1)) {
|
|
303
|
+
addType = true;
|
|
304
|
+
}
|
|
305
|
+
break;
|
|
306
|
+
case "null":
|
|
307
|
+
if (val === null) {
|
|
308
|
+
addType = true;
|
|
309
|
+
}
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
if (addType) {
|
|
313
|
+
retObj = { path, value: val, parent, parentProperty: parentPropName };
|
|
314
|
+
this._handleCallback(retObj, callback, "value");
|
|
315
|
+
return retObj;
|
|
316
|
+
}
|
|
317
|
+
} else if (loc[0] === "`" && val && hasOwnProp.call(val, loc.slice(1))) {
|
|
318
|
+
const locProp = loc.slice(1);
|
|
319
|
+
addRet(this._trace(x, val[locProp], push(path, locProp), val, locProp, callback, true));
|
|
320
|
+
} else if (loc.indexOf(",") > -1) {
|
|
321
|
+
const parts = loc.split(",");
|
|
322
|
+
parts.forEach(function(part) {
|
|
323
|
+
addRet(this._trace(unshift(part, x), val, path, parent, parentPropName, callback));
|
|
324
|
+
}.bind(this));
|
|
325
|
+
} else if (!literalPriority && val && hasOwnProp.call(val, loc)) {
|
|
326
|
+
addRet(this._trace(x, val[loc], push(path, loc), val, loc, callback, true));
|
|
327
|
+
}
|
|
328
|
+
if (this._hasParentSelector) {
|
|
329
|
+
for (let t = 0; t < ret.length; t++) {
|
|
330
|
+
const rett = ret[t];
|
|
331
|
+
if (rett.isParentSelector) {
|
|
332
|
+
const tmp = that._trace(
|
|
333
|
+
rett.expr,
|
|
334
|
+
val,
|
|
335
|
+
rett.path,
|
|
336
|
+
parent,
|
|
337
|
+
parentPropName,
|
|
338
|
+
callback
|
|
339
|
+
);
|
|
340
|
+
if (Array.isArray(tmp)) {
|
|
341
|
+
ret[t] = tmp[0];
|
|
342
|
+
const tl = tmp.length;
|
|
343
|
+
for (let tt = 1; tt < tl; tt++) {
|
|
344
|
+
t++;
|
|
345
|
+
ret.splice(t, 0, tmp[tt]);
|
|
346
|
+
}
|
|
347
|
+
} else {
|
|
348
|
+
ret[t] = tmp;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return ret;
|
|
354
|
+
};
|
|
355
|
+
JSONPath.prototype._walk = function(loc, expr, val, path, parent, parentPropName, callback, f) {
|
|
356
|
+
if (Array.isArray(val)) {
|
|
357
|
+
const n = val.length;
|
|
358
|
+
for (let i = 0; i < n; i++) {
|
|
359
|
+
f(i, loc, expr, val, path, parent, parentPropName, callback);
|
|
360
|
+
}
|
|
361
|
+
} else if (typeof val === "object") {
|
|
362
|
+
for (var m in val) {
|
|
363
|
+
if (hasOwnProp.call(val, m)) {
|
|
364
|
+
f(m, loc, expr, val, path, parent, parentPropName, callback);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
JSONPath.prototype._slice = function(loc, expr, val, path, parent, parentPropName, callback) {
|
|
370
|
+
if (!Array.isArray(val)) {
|
|
371
|
+
return void 0;
|
|
372
|
+
}
|
|
373
|
+
const len = val.length, parts = loc.split(":"), step = parts[2] && parseInt(parts[2]) || 1;
|
|
374
|
+
let start = parts[0] && parseInt(parts[0]) || 0, end = parts[1] && parseInt(parts[1]) || len;
|
|
375
|
+
start = start < 0 ? Math.max(0, start + len) : Math.min(len, start);
|
|
376
|
+
end = end < 0 ? Math.max(0, end + len) : Math.min(len, end);
|
|
377
|
+
const ret = [];
|
|
378
|
+
for (let i = start; i < end; i += step) {
|
|
379
|
+
let tmp = this._trace(unshift(i, expr), val, path, parent, parentPropName, callback);
|
|
380
|
+
if (Array.isArray(tmp)) {
|
|
381
|
+
tmp.forEach((t) => {
|
|
382
|
+
ret.push(t);
|
|
383
|
+
});
|
|
384
|
+
} else {
|
|
385
|
+
ret.push(tmp);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return ret;
|
|
389
|
+
};
|
|
390
|
+
JSONPath.prototype._eval = function(code, _v, _vname, path, parent, parentPropName) {
|
|
391
|
+
if (!this._obj || !_v) {
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
if (code.indexOf("@parentProperty") > -1) {
|
|
395
|
+
this.currSandbox._$_parentProperty = parentPropName;
|
|
396
|
+
code = code.replace(/@parentProperty/g, "_$_parentProperty");
|
|
397
|
+
}
|
|
398
|
+
if (code.indexOf("@parent") > -1) {
|
|
399
|
+
this.currSandbox._$_parent = parent;
|
|
400
|
+
code = code.replace(/@parent/g, "_$_parent");
|
|
401
|
+
}
|
|
402
|
+
if (code.indexOf("@property") > -1) {
|
|
403
|
+
this.currSandbox._$_property = _vname;
|
|
404
|
+
code = code.replace(/@property/g, "_$_property");
|
|
405
|
+
}
|
|
406
|
+
if (code.indexOf("@path") > -1) {
|
|
407
|
+
this.currSandbox._$_path = JSONPath.toPathString(path.concat([_vname]));
|
|
408
|
+
code = code.replace(/@path/g, "_$_path");
|
|
409
|
+
}
|
|
410
|
+
if (code.match(/@([.\s)[])/)) {
|
|
411
|
+
this.currSandbox._$_v = _v;
|
|
412
|
+
code = code.replace(/@([.\s)[])/g, "_$_v$1");
|
|
413
|
+
}
|
|
414
|
+
try {
|
|
415
|
+
return vm.runInNewContext(code, this.currSandbox);
|
|
416
|
+
} catch (e) {
|
|
417
|
+
console.log(e);
|
|
418
|
+
throw new Error("jsonPath: " + e.message + ": " + code);
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
JSONPath.cache = {};
|
|
422
|
+
JSONPath.toPathString = function(pathArr) {
|
|
423
|
+
const x = pathArr, n = x.length;
|
|
424
|
+
let p = "$";
|
|
425
|
+
for (let i = 1; i < n; i++) {
|
|
426
|
+
if (!/^(~|\^|@.*?\(\))$/.test(x[i])) {
|
|
427
|
+
p += /^[0-9*]+$/.test(x[i]) ? "[" + x[i] + "]" : "['" + x[i] + "']";
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return p;
|
|
431
|
+
};
|
|
432
|
+
JSONPath.toPointer = function(pointer) {
|
|
433
|
+
const x = pointer, n = x.length;
|
|
434
|
+
let p = "";
|
|
435
|
+
for (let i = 1; i < n; i++) {
|
|
436
|
+
if (!/^(~|\^|@.*?\(\))$/.test(x[i])) {
|
|
437
|
+
p += "/" + x[i].toString().replace(/~/g, "~0").replace(/\//g, "~1");
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return p;
|
|
441
|
+
};
|
|
442
|
+
JSONPath.toPathArray = function(expr) {
|
|
443
|
+
const { cache } = JSONPath;
|
|
444
|
+
if (cache[expr]) {
|
|
445
|
+
return cache[expr].concat();
|
|
446
|
+
}
|
|
447
|
+
const subx = [];
|
|
448
|
+
const normalized = expr.replace(
|
|
449
|
+
/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\(\)/g,
|
|
450
|
+
";$&;"
|
|
451
|
+
).replace(/[['](\??\(.*?\))[\]']/g, function($0, $1) {
|
|
452
|
+
return "[#" + (subx.push($1) - 1) + "]";
|
|
453
|
+
}).replace(/\['([^'\]]*)'\]/g, function($0, prop) {
|
|
454
|
+
return "['" + prop.replace(/\./g, "%@%").replace(/~/g, "%%@@%%") + "']";
|
|
455
|
+
}).replace(/~/g, ";~;").replace(/'?\.'?(?![^[]*\])|\['?/g, ";").replace(/%@%/g, ".").replace(/%%@@%%/g, "~").replace(/(?:;)?(\^+)(?:;)?/g, function($0, ups) {
|
|
456
|
+
return ";" + ups.split("").join(";") + ";";
|
|
457
|
+
}).replace(/;;;|;;/g, ";..;").replace(/;$|'?\]|'$/g, "");
|
|
458
|
+
const exprList = normalized.split(";").map(function(exp) {
|
|
459
|
+
const match = exp.match(/#(\d+)/);
|
|
460
|
+
return !match || !match[1] ? exp : subx[match[1]];
|
|
461
|
+
});
|
|
462
|
+
cache[expr] = exprList;
|
|
463
|
+
return cache[expr];
|
|
464
|
+
};
|
|
465
|
+
var jsonpath_default = JSONPath;
|
|
466
|
+
export {
|
|
467
|
+
JSONPath,
|
|
468
|
+
jsonpath_default as default
|
|
469
|
+
};
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWxzL2pzb25wYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuKiBGb3JrZWQgZnJvbSBzb3VyY2UgcHVibGlzaGVkIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9zM3Ugd2l0aCBNSVRcbiogbGljZW5zZSBhcyBvZiA1LzMwLzIwMTkgYW5kIGFkYXB0ZWQgZm9yIERpcmlnaWJsZVxuKiBDb250cmlidXRvcnM6XG4qICAgczN1IChodHRwczovL2dpdGh1Yi5jb20vczN1KSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuKiAgIFNBUCAtIGFkYXB0ZWQgZm9yIERpcmlnaWJsZVxuKi9cbmNvbnN0IGdsb2JhbEV2YWwgPSBldmFsO1xuY29uc3QgYWxsb3dlZFJlc3VsdFR5cGVzID0gWyd2YWx1ZScsICdwYXRoJywgJ3BvaW50ZXInLCAncGFyZW50JywgJ3BhcmVudFByb3BlcnR5JywgJ2FsbCddO1xuY29uc3Qge2hhc093blByb3BlcnR5OiBoYXNPd25Qcm9wfSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ29weSBpdGVtcyBvdXQgb2Ygb25lIGFycmF5IGludG8gYW5vdGhlci5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBBcnJheSB3aXRoIGl0ZW1zIHRvIGNvcHlcbiAqIEBwYXJhbSB7QXJyYXl9IHRhcmdldCBBcnJheSB0byB3aGljaCB0byBjb3B5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25kaXRpb25DYiBDYWxsYmFjayBwYXNzZWQgdGhlIGN1cnJlbnQgaXRlbTsgd2lsbCBtb3ZlXG4gKiBpdGVtIGlmIGV2YWx1YXRlcyB0byBgdHJ1ZWBcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKi9cbmNvbnN0IG1vdmVUb0Fub3RoZXJBcnJheSA9IGZ1bmN0aW9uIChzb3VyY2UsIHRhcmdldCwgY29uZGl0aW9uQ2IpIHtcbiAgICBjb25zdCBpbCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzb3VyY2VbaV07XG4gICAgICAgIGlmIChjb25kaXRpb25DYihpdGVtKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlLnNwbGljZShpLS0sIDEpWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHZtID0ge1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgRXhwcmVzc2lvbiB0byBldmFsdWF0ZVxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCBPYmplY3Qgd2hvc2UgaXRlbXMgd2lsbCBiZSBhZGRlZCB0byBldmFsdWF0aW9uXG4gICAgICAgICAqIEByZXR1cm5zIHsqfSBSZXN1bHQgb2YgZXZhbHVhdGVkIGNvZGVcbiAgICAgICAgICovXG4gICAgICAgIHJ1bkluTmV3Q29udGV4dCAoZXhwciwgY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc3QgZnVuY3MgPSBbXTtcbiAgICAgICAgICAgIG1vdmVUb0Fub3RoZXJBcnJheShrZXlzLCBmdW5jcywgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29udGV4dFtrZXldID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gZnVuY3MucmVkdWNlKChzLCBmdW5jKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZTdHJpbmcgPSBjb250ZXh0W2Z1bmNdLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoL2Z1bmN0aW9uLykuZXhlYyhmU3RyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBmU3RyaW5nID0gJ2Z1bmN0aW9uICcgKyBmU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhciAnICsgZnVuYyArICc9JyArIGZTdHJpbmcgKyAnOycgKyBzO1xuICAgICAgICAgICAgfSwgJycpICsga2V5cy5yZWR1Y2UoKHMsIHZyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YXIgJyArIHZyICsgJz0nICsgSlNPTi5zdHJpbmdpZnkoY29udGV4dFt2cl0pLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDExLzA3LzI1L3RoZS1qc29uLXNwZWNpZmljYXRpb24taXMtbm93LXdyb25nL1xuICAgICAgICAgICAgICAgICAgICAvXFx1MjAyOHxcXHUyMDI5L2csIChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcXFx1MjAyJyArIChtID09PSAnXFx1MjAyOCcgPyAnOCcgOiAnOScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSArICc7JyArIHM7XG4gICAgICAgICAgICB9LCBleHByKTtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxFdmFsKGNvZGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuLyoqXG4gKiBDb3BpZXMgYXJyYXkgYW5kIHRoZW4gcHVzaGVzIGl0ZW0gaW50byBpdC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyciBBcnJheSB0byBjb3B5IGFuZCBpbnRvIHdoaWNoIHRvIHB1c2hcbiAqIEBwYXJhbSB7Kn0gaXRlbSBBcnJheSBpdGVtIHRvIGFkZCAodG8gZW5kKVxuICogQHJldHVybnMge0FycmF5fSBDb3B5IG9mIHRoZSBvcmlnaW5hbCBhcnJheVxuICovXG5mdW5jdGlvbiBwdXNoIChhcnIsIGl0ZW0pIHtcbiAgICBhcnIgPSBhcnIuc2xpY2UoKTtcbiAgICBhcnIucHVzaChpdGVtKTtcbiAgICByZXR1cm4gYXJyO1xufVxuLyoqXG4gKiBDb3BpZXMgYXJyYXkgYW5kIHRoZW4gdW5zaGlmdHMgaXRlbSBpbnRvIGl0LlxuICogQHBhcmFtIHsqfSBpdGVtIEFycmF5IGl0ZW0gdG8gYWRkICh0byBiZWdpbm5pbmcpXG4gKiBAcGFyYW0ge0FycmF5fSBhcnIgQXJyYXkgdG8gY29weSBhbmQgaW50byB3aGljaCB0byB1bnNoaWZ0XG4gKiBAcmV0dXJucyB7QXJyYXl9IENvcHkgb2YgdGhlIG9yaWdpbmFsIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHVuc2hpZnQgKGl0ZW0sIGFycikge1xuICAgIGFyciA9IGFyci5zbGljZSgpO1xuICAgIGFyci51bnNoaWZ0KGl0ZW0pO1xuICAgIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2F1Z2h0IHdoZW4gSlNPTlBhdGggaXMgdXNlZCB3aXRob3V0IGBuZXdgIGJ1dCByZXRocm93biBpZiB3aXRoIGBuZXdgXG4gKiBAZXh0ZW5kcyBFcnJvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgZXZhbHVhdGVkIHNjYWxhciB2YWx1ZVxuICovXG52YXIgTmV3RXJyb3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBjb25zdCBlcnJvciA9IEVycm9yLmNhbGwodGhpcywgJ0pTT05QYXRoIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggXCJuZXdcIiAoaXQgcHJldmVudHMgcmV0dXJuIG9mICh1bndyYXBwZWQpIHNjYWxhciB2YWx1ZXMpJyk7XG4gICAgdGhpcy5tZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgdGhpcy5hdm9pZE5ldyA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubmFtZSA9ICdOZXdFcnJvcic7XG59XG5OZXdFcnJvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5OZXdFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOZXdFcnJvcjtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIElmIHByZXNlbnQsIG11c3QgYmUgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwciBKU09OIHBhdGggdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSB7SlNPTn0gb2JqIEpTT04gb2JqZWN0IHRvIGV2YWx1YXRlIGFnYWluc3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFBhc3NlZCAzIGFyZ3VtZW50czogMSkgZGVzaXJlZCBwYXlsb2FkIHBlciBgcmVzdWx0VHlwZWAsXG4gKiAgICAgMikgYFwidmFsdWVcInxcInByb3BlcnR5XCJgLCAzKSBGdWxsIHJldHVybmVkIG9iamVjdCB3aXRoIGFsbCBwYXlsb2Fkc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gb3RoZXJUeXBlQ2FsbGJhY2sgSWYgYEBvdGhlcigpYCBpcyBhdCB0aGUgZW5kIG9mIG9uZSdzIHF1ZXJ5LCB0aGlzXG4gKiAgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBpdGVtLCBpdHMgcGF0aCwgaXRzIHBhcmVudCwgYW5kIGl0cyBwYXJlbnQnc1xuICogIHByb3BlcnR5IG5hbWUsIGFuZCBpdCBzaG91bGQgcmV0dXJuIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN1cHBsaWVkIHZhbHVlXG4gKiAgYmVsb25ncyB0byB0aGUgXCJvdGhlclwiIHR5cGUgb3Igbm90IChvciBpdCBtYXkgaGFuZGxlIHRyYW5zZm9ybWF0aW9ucyBhbmQgcmV0dXJuIGBmYWxzZWApLlxuICogQHJldHVybnMge0pTT05QYXRofVxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBKU09OUGF0aCAob3B0cywgZXhwciwgb2JqLCBjYWxsYmFjaywgb3RoZXJUeXBlQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSlNPTlBhdGgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEpTT05QYXRoKG9wdHMsIGV4cHIsIG9iaiwgY2FsbGJhY2ssIG90aGVyVHlwZUNhbGxiYWNrKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCFlLmF2b2lkTmV3KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgICBvdGhlclR5cGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICBjYWxsYmFjayA9IG9iajtcbiAgICAgICAgb2JqID0gZXhwcjtcbiAgICAgICAgZXhwciA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgY29uc3Qgb2JqQXJncyA9IGhhc093blByb3AuY2FsbChvcHRzLCAnanNvbicpICYmIGhhc093blByb3AuY2FsbChvcHRzLCAncGF0aCcpO1xuICAgIHRoaXMuanNvbiA9IG9wdHMuanNvbiB8fCBvYmo7XG4gICAgdGhpcy5wYXRoID0gb3B0cy5wYXRoIHx8IGV4cHI7XG4gICAgdGhpcy5yZXN1bHRUeXBlID0gKG9wdHMucmVzdWx0VHlwZSAmJiBvcHRzLnJlc3VsdFR5cGUudG9Mb3dlckNhc2UoKSkgfHwgJ3ZhbHVlJztcbiAgICB0aGlzLmZsYXR0ZW4gPSBvcHRzLmZsYXR0ZW4gfHwgZmFsc2U7XG4gICAgdGhpcy53cmFwID0gaGFzT3duUHJvcC5jYWxsKG9wdHMsICd3cmFwJykgPyBvcHRzLndyYXAgOiB0cnVlO1xuICAgIHRoaXMuc2FuZGJveCA9IG9wdHMuc2FuZGJveCB8fCB7fTtcbiAgICB0aGlzLnByZXZlbnRFdmFsID0gb3B0cy5wcmV2ZW50RXZhbCB8fCBmYWxzZTtcbiAgICB0aGlzLnBhcmVudCA9IG9wdHMucGFyZW50IHx8IG51bGw7XG4gICAgdGhpcy5wYXJlbnRQcm9wZXJ0eSA9IG9wdHMucGFyZW50UHJvcGVydHkgfHwgbnVsbDtcbiAgICB0aGlzLmNhbGxiYWNrID0gb3B0cy5jYWxsYmFjayB8fCBjYWxsYmFjayB8fCBudWxsO1xuICAgIHRoaXMub3RoZXJUeXBlQ2FsbGJhY2sgPSBvcHRzLm90aGVyVHlwZUNhbGxiYWNrIHx8IG90aGVyVHlwZUNhbGxiYWNrIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYW4gb3RoZXJUeXBlQ2FsbGJhY2sgY2FsbGJhY2sgb3B0aW9uIHdpdGggdGhlIEBvdGhlcigpIG9wZXJhdG9yLicpO1xuICAgIH07XG5cbiAgICBpZiAob3B0cy5hdXRvc3RhcnQgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXMuZXZhbHVhdGUoe1xuICAgICAgICAgICAgcGF0aDogKG9iakFyZ3MgPyBvcHRzLnBhdGggOiBleHByKSxcbiAgICAgICAgICAgIGpzb246IChvYmpBcmdzID8gb3B0cy5qc29uIDogb2JqKVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXQgfHwgdHlwZW9mIHJldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOZXdFcnJvcihyZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufVxuSlNPTlBhdGgucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlKTtcbkpTT05QYXRoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEpTT05QYXRoO1xuXG4vLyBQVUJMSUMgTUVUSE9EU1xuSlNPTlBhdGgucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKGV4cHIsIGpzb24sIGNhbGxiYWNrLCBvdGhlclR5cGVDYWxsYmFjaykge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGxldCBjdXJyUGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICAgIGN1cnJQYXJlbnRQcm9wZXJ0eSA9IHRoaXMucGFyZW50UHJvcGVydHk7XG4gICAgbGV0IHtmbGF0dGVuLCB3cmFwfSA9IHRoaXM7XG5cbiAgICB0aGlzLmN1cnJSZXN1bHRUeXBlID0gdGhpcy5yZXN1bHRUeXBlO1xuICAgIHRoaXMuY3VyclByZXZlbnRFdmFsID0gdGhpcy5wcmV2ZW50RXZhbDtcbiAgICB0aGlzLmN1cnJTYW5kYm94ID0gdGhpcy5zYW5kYm94O1xuICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgdGhpcy5jYWxsYmFjaztcbiAgICB0aGlzLmN1cnJPdGhlclR5cGVDYWxsYmFjayA9IG90aGVyVHlwZUNhbGxiYWNrIHx8IHRoaXMub3RoZXJUeXBlQ2FsbGJhY2s7XG5cbiAgICBqc29uID0ganNvbiB8fCB0aGlzLmpzb247XG4gICAgZXhwciA9IGV4cHIgfHwgdGhpcy5wYXRoO1xuICAgIGlmIChleHByICYmIHR5cGVvZiBleHByID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWV4cHIucGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBcInBhdGhcIiBwcm9wZXJ0eSB3aGVuIHByb3ZpZGluZyBhbiBvYmplY3QgYXJndW1lbnQgdG8gSlNPTlBhdGguZXZhbHVhdGUoKS4nKTtcbiAgICAgICAgfVxuICAgICAgICBqc29uID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdqc29uJykgPyBleHByLmpzb24gOiBqc29uO1xuICAgICAgICBmbGF0dGVuID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdmbGF0dGVuJykgPyBleHByLmZsYXR0ZW4gOiBmbGF0dGVuO1xuICAgICAgICB0aGlzLmN1cnJSZXN1bHRUeXBlID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdyZXN1bHRUeXBlJykgPyBleHByLnJlc3VsdFR5cGUgOiB0aGlzLmN1cnJSZXN1bHRUeXBlO1xuICAgICAgICB0aGlzLmN1cnJTYW5kYm94ID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdzYW5kYm94JykgPyBleHByLnNhbmRib3ggOiB0aGlzLmN1cnJTYW5kYm94O1xuICAgICAgICB3cmFwID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICd3cmFwJykgPyBleHByLndyYXAgOiB3cmFwO1xuICAgICAgICB0aGlzLmN1cnJQcmV2ZW50RXZhbCA9IGhhc093blByb3AuY2FsbChleHByLCAncHJldmVudEV2YWwnKSA/IGV4cHIucHJldmVudEV2YWwgOiB0aGlzLmN1cnJQcmV2ZW50RXZhbDtcbiAgICAgICAgY2FsbGJhY2sgPSBoYXNPd25Qcm9wLmNhbGwoZXhwciwgJ2NhbGxiYWNrJykgPyBleHByLmNhbGxiYWNrIDogY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuY3Vyck90aGVyVHlwZUNhbGxiYWNrID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdvdGhlclR5cGVDYWxsYmFjaycpID8gZXhwci5vdGhlclR5cGVDYWxsYmFjayA6IHRoaXMuY3Vyck90aGVyVHlwZUNhbGxiYWNrO1xuICAgICAgICBjdXJyUGFyZW50ID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdwYXJlbnQnKSA/IGV4cHIucGFyZW50IDogY3VyclBhcmVudDtcbiAgICAgICAgY3VyclBhcmVudFByb3BlcnR5ID0gaGFzT3duUHJvcC5jYWxsKGV4cHIsICdwYXJlbnRQcm9wZXJ0eScpID8gZXhwci5wYXJlbnRQcm9wZXJ0eSA6IGN1cnJQYXJlbnRQcm9wZXJ0eTtcbiAgICAgICAgZXhwciA9IGV4cHIucGF0aDtcbiAgICB9XG4gICAgY3VyclBhcmVudCA9IGN1cnJQYXJlbnQgfHwgbnVsbDtcbiAgICBjdXJyUGFyZW50UHJvcGVydHkgPSBjdXJyUGFyZW50UHJvcGVydHkgfHwgbnVsbDtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHIpKSB7XG4gICAgICAgIGV4cHIgPSBKU09OUGF0aC50b1BhdGhTdHJpbmcoZXhwcik7XG4gICAgfVxuICAgIGlmICghZXhwciB8fCAhanNvbiB8fCBhbGxvd2VkUmVzdWx0VHlwZXMuaW5kZXhPZih0aGlzLmN1cnJSZXN1bHRUeXBlKTwwKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuX29iaiA9IGpzb247XG5cbiAgICBjb25zdCBleHByTGlzdCA9IEpTT05QYXRoLnRvUGF0aEFycmF5KGV4cHIpO1xuICAgIGlmIChleHByTGlzdFswXSA9PT0gJyQnICYmIGV4cHJMaXN0Lmxlbmd0aCA+IDEpIHsgZXhwckxpc3Quc2hpZnQoKTsgfVxuICAgIHRoaXMuX2hhc1BhcmVudFNlbGVjdG9yID0gbnVsbDtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzXG4gICAgICAgIC5fdHJhY2UoZXhwckxpc3QsIGpzb24sIFsnJCddLCBjdXJyUGFyZW50LCBjdXJyUGFyZW50UHJvcGVydHksIGNhbGxiYWNrKVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChlYSkgeyByZXR1cm4gZWEgJiYgIWVhLmlzUGFyZW50U2VsZWN0b3I7IH0pO1xuXG4gICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7IHJldHVybiB3cmFwID8gW10gOiB1bmRlZmluZWQ7IH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSAmJiAhd3JhcCAmJiAhQXJyYXkuaXNBcnJheShyZXN1bHRbMF0udmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRQcmVmZXJyZWRPdXRwdXQocmVzdWx0WzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5yZWR1Y2UoZnVuY3Rpb24gKHJzbHQsIGVhKSB7XG4gICAgICAgIGNvbnN0IHZhbE9yUGF0aCA9IHRoYXQuX2dldFByZWZlcnJlZE91dHB1dChlYSk7XG4gICAgICAgIGlmIChmbGF0dGVuICYmIEFycmF5LmlzQXJyYXkodmFsT3JQYXRoKSkge1xuICAgICAgICAgICAgcnNsdCA9IHJzbHQuY29uY2F0KHZhbE9yUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByc2x0LnB1c2godmFsT3JQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnNsdDtcbiAgICB9LCBbXSk7XG59O1xuXG4vLyBQUklWQVRFIE1FVEhPRFNcblxuSlNPTlBhdGgucHJvdG90eXBlLl9nZXRQcmVmZXJyZWRPdXRwdXQgPSBmdW5jdGlvbiAoZWEpIHtcbiAgICBjb25zdCByZXN1bHRUeXBlID0gdGhpcy5jdXJyUmVzdWx0VHlwZTtcbiAgICBzd2l0Y2ggKHJlc3VsdFR5cGUpIHtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIHJlc3VsdCB0eXBlJyk7XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgICAgZWEucG9pbnRlciA9IEpTT05QYXRoLnRvUG9pbnRlcihlYS5wYXRoKTtcbiAgICAgICAgZWEucGF0aCA9IHR5cGVvZiBlYS5wYXRoID09PSAnc3RyaW5nJyA/IGVhLnBhdGggOiBKU09OUGF0aC50b1BhdGhTdHJpbmcoZWEucGF0aCk7XG4gICAgICAgIHJldHVybiBlYTtcbiAgICBjYXNlICd2YWx1ZSc6IGNhc2UgJ3BhcmVudCc6IGNhc2UgJ3BhcmVudFByb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGVhW3Jlc3VsdFR5cGVdO1xuICAgIGNhc2UgJ3BhdGgnOlxuICAgICAgICByZXR1cm4gSlNPTlBhdGgudG9QYXRoU3RyaW5nKGVhW3Jlc3VsdFR5cGVdKTtcbiAgICBjYXNlICdwb2ludGVyJzpcbiAgICAgICAgcmV0dXJuIEpTT05QYXRoLnRvUG9pbnRlcihlYS5wYXRoKTtcbiAgICB9XG59O1xuXG5KU09OUGF0aC5wcm90b3R5cGUuX2hhbmRsZUNhbGxiYWNrID0gZnVuY3Rpb24gKGZ1bGxSZXRPYmosIGNhbGxiYWNrLCB0eXBlKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHByZWZlcnJlZE91dHB1dCA9IHRoaXMuX2dldFByZWZlcnJlZE91dHB1dChmdWxsUmV0T2JqKTtcbiAgICAgICAgZnVsbFJldE9iai5wYXRoID0gdHlwZW9mIGZ1bGxSZXRPYmoucGF0aCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gZnVsbFJldE9iai5wYXRoXG4gICAgICAgICAgICA6IEpTT05QYXRoLnRvUGF0aFN0cmluZyhmdWxsUmV0T2JqLnBhdGgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FsbGJhY2stcmV0dXJuXG4gICAgICAgIGNhbGxiYWNrKHByZWZlcnJlZE91dHB1dCwgdHlwZSwgZnVsbFJldE9iaik7XG4gICAgfVxufTtcblxuSlNPTlBhdGgucHJvdG90eXBlLl90cmFjZSA9IGZ1bmN0aW9uIChcbiAgICBleHByLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBsaXRlcmFsUHJpb3JpdHlcbikge1xuICAgIC8vIE5vIGV4cHIgdG8gZm9sbG93PyByZXR1cm4gcGF0aCBhbmQgdmFsdWUgYXMgdGhlIHJlc3VsdCBvZiB0aGlzIHRyYWNlIGJyYW5jaFxuICAgIGxldCByZXRPYmo7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgaWYgKCFleHByLmxlbmd0aCkge1xuICAgICAgICByZXRPYmogPSB7cGF0aDogcGF0aCwgdmFsdWU6IHZhbCwgcGFyZW50OiBwYXJlbnQsIHBhcmVudFByb3BlcnR5OiBwYXJlbnRQcm9wTmFtZX07XG4gICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKHJldE9iaiwgY2FsbGJhY2ssICd2YWx1ZScpO1xuICAgICAgICByZXR1cm4gcmV0T2JqO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYyA9IGV4cHJbMF0sIHggPSBleHByLnNsaWNlKDEpO1xuXG4gICAgLy8gV2UgbmVlZCB0byBnYXRoZXIgdGhlIHJldHVybiB2YWx1ZSBvZiByZWN1cnNpdmUgdHJhY2UgY2FsbHMgaW4gb3JkZXIgdG9cbiAgICAvLyBkbyB0aGUgcGFyZW50IHNlbCBjb21wdXRhdGlvbi5cbiAgICBjb25zdCByZXQgPSBbXTtcbiAgICBmdW5jdGlvbiBhZGRSZXQgKGVsZW1zKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1zKSkge1xuICAgICAgICAgICAgLy8gVGhpcyB3YXMgY2F1c2luZyBleGNlc3NpdmUgc3RhY2sgc2l6ZSBpbiBOb2RlICh3aXRoIG9yIHdpdGhvdXQgQmFiZWwpIGFnYWluc3Qgb3VyIHBlcmZvcm1hbmNlIHRlc3Q6IGByZXQucHVzaCguLi5lbGVtcyk7YFxuICAgICAgICAgICAgZWxlbXMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQucHVzaChlbGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKHR5cGVvZiBsb2MgIT09ICdzdHJpbmcnIHx8IGxpdGVyYWxQcmlvcml0eSkgJiYgdmFsICYmXG4gICAgICAgIGhhc093blByb3AuY2FsbCh2YWwsIGxvYylcbiAgICApIHsgLy8gc2ltcGxlIGNhc2UtLWRpcmVjdGx5IGZvbGxvdyBwcm9wZXJ0eVxuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UoeCwgdmFsW2xvY10sIHB1c2gocGF0aCwgbG9jKSwgdmFsLCBsb2MsIGNhbGxiYWNrKSk7XG4gICAgfSBlbHNlIGlmIChsb2MgPT09ICcqJykgeyAvLyBhbGwgY2hpbGQgcHJvcGVydGllc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIHRoaXMuX3dhbGsobG9jLCB4LCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBmdW5jdGlvbiAobSwgbCwgeCwgdiwgcCwgcGFyLCBwciwgY2IpIHtcbiAgICAgICAgICAgIGFkZFJldCh0aGF0Ll90cmFjZSh1bnNoaWZ0KG0sIHgpLCB2LCBwLCBwYXIsIHByLCBjYiwgdHJ1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGxvYyA9PT0gJy4uJykgeyAvLyBhbGwgZGVzY2VuZGVudCBwYXJlbnQgcHJvcGVydGllc1xuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UoeCwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjaykpOyAvLyBDaGVjayByZW1haW5pbmcgZXhwcmVzc2lvbiB3aXRoIHZhbCdzIGltbWVkaWF0ZSBjaGlsZHJlblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIHRoaXMuX3dhbGsobG9jLCB4LCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBmdW5jdGlvbiAobSwgbCwgeCwgdiwgcCwgcGFyLCBwciwgY2IpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGpvaW4gbSBhbmQgeCBoZXJlIGJlY2F1c2Ugd2Ugb25seSB3YW50IHBhcmVudHMsIG5vdCBzY2FsYXIgdmFsdWVzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZbbV0gPT09ICdvYmplY3QnKSB7IC8vIEtlZXAgZ29pbmcgd2l0aCByZWN1cnNpdmUgZGVzY2VudCBvbiB2YWwncyBvYmplY3QgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBhZGRSZXQodGhhdC5fdHJhY2UodW5zaGlmdChsLCB4KSwgdlttXSwgcHVzaChwLCBtKSwgdiwgbSwgY2IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgLy8gVGhlIHBhcmVudCBzZWwgY29tcHV0YXRpb24gaXMgaGFuZGxlZCBpbiB0aGUgZnJhbWUgYWJvdmUgdXNpbmcgdGhlXG4gICAgLy8gYW5jZXN0b3Igb2JqZWN0IG9mIHZhbFxuICAgIH0gZWxzZSBpZiAobG9jID09PSAnXicpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBub3QgYSBmaW5hbCBlbmRwb2ludCwgc28gd2UgZG8gbm90IGludm9rZSB0aGUgY2FsbGJhY2sgaGVyZVxuICAgICAgICB0aGlzLl9oYXNQYXJlbnRTZWxlY3RvciA9IHRydWU7XG4gICAgICAgIHJldHVybiBwYXRoLmxlbmd0aFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcGF0aDogcGF0aC5zbGljZSgwLCAtMSksXG4gICAgICAgICAgICAgICAgZXhwcjogeCxcbiAgICAgICAgICAgICAgICBpc1BhcmVudFNlbGVjdG9yOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IFtdO1xuICAgIH0gZWxzZSBpZiAobG9jID09PSAnficpIHsgLy8gcHJvcGVydHkgbmFtZVxuICAgICAgICByZXRPYmogPSB7cGF0aDogcHVzaChwYXRoLCBsb2MpLCB2YWx1ZTogcGFyZW50UHJvcE5hbWUsIHBhcmVudDpwYXJlbnQsIHBhcmVudFByb3BlcnR5OiBudWxsfTtcbiAgICAgICAgdGhpcy5faGFuZGxlQ2FsbGJhY2socmV0T2JqLCBjYWxsYmFjaywgJ3Byb3BlcnR5Jyk7XG4gICAgICAgIHJldHVybiByZXRPYmo7XG4gICAgfSBlbHNlIGlmIChsb2MgPT09ICckJykgeyAvLyByb290IG9ubHlcbiAgICAgICAgYWRkUmV0KHRoaXMuX3RyYWNlKHgsIHZhbCwgcGF0aCwgbnVsbCwgbnVsbCwgY2FsbGJhY2spKTtcbiAgICB9IGVsc2UgaWYgKCgvXigtP1xcZCopOigtP1xcZCopOj8oXFxkKikkLykudGVzdChsb2MpKSB7IC8vIFtzdGFydDplbmQ6c3RlcF0gIFB5dGhvbiBzbGljZSBzeW50YXhcbiAgICAgICAgYWRkUmV0KHRoaXMuX3NsaWNlKGxvYywgeCwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjaykpO1xuICAgIH0gZWxzZSBpZiAobG9jLmluZGV4T2YoJz8oJykgPT09IDApIHsgLy8gWz8oZXhwcildIChmaWx0ZXJpbmcpXG4gICAgICAgIGlmICh0aGlzLmN1cnJQcmV2ZW50RXZhbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFdmFsIFs/KGV4cHIpXSBwcmV2ZW50ZWQgaW4gSlNPTlBhdGggZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gICAgICAgIHRoaXMuX3dhbGsobG9jLCB4LCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrLCBmdW5jdGlvbiAobSwgbCwgeCwgdiwgcCwgcGFyLCBwciwgY2IpIHtcbiAgICAgICAgICAgIGlmICh0aGF0Ll9ldmFsKGwucmVwbGFjZSgvXlxcP1xcKCguKj8pXFwpJC8sICckMScpLCB2W21dLCBtLCBwLCBwYXIsIHByKSkge1xuICAgICAgICAgICAgICAgIGFkZFJldCh0aGF0Ll90cmFjZSh1bnNoaWZ0KG0sIHgpLCB2LCBwLCBwYXIsIHByLCBjYikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGxvY1swXSA9PT0gJygnKSB7IC8vIFsoZXhwcildIChkeW5hbWljIHByb3BlcnR5L2luZGV4KVxuICAgICAgICBpZiAodGhpcy5jdXJyUHJldmVudEV2YWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXZhbCBbKGV4cHIpXSBwcmV2ZW50ZWQgaW4gSlNPTlBhdGggZXhwcmVzc2lvbi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBcyB0aGlzIHdpbGwgcmVzb2x2ZSB0byBhIHByb3BlcnR5IG5hbWUgKGJ1dCB3ZSBkb24ndCBrbm93IGl0IHlldCksIHByb3BlcnR5IGFuZCBwYXJlbnQgaW5mb3JtYXRpb24gaXMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBvZiB0aGUgcHJvcGVydHkgdG8gd2hpY2ggdGhpcyBleHByZXNzaW9uIHdpbGwgcmVzb2x2ZVxuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UodW5zaGlmdChcbiAgICAgICAgICAgIHRoaXMuX2V2YWwobG9jLCB2YWwsIHBhdGhbcGF0aC5sZW5ndGggLSAxXSwgcGF0aC5zbGljZSgwLCAtMSksIHBhcmVudCwgcGFyZW50UHJvcE5hbWUpLFxuICAgICAgICAgICAgeFxuICAgICAgICApLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrKSk7XG4gICAgfSBlbHNlIGlmIChsb2NbMF0gPT09ICdAJykgeyAvLyB2YWx1ZSB0eXBlOiBAYm9vbGVhbigpLCBldGMuXG4gICAgICAgIGxldCBhZGRUeXBlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IGxvYy5zbGljZSgxLCAtMik7XG4gICAgICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIHZhbHVlIHR5cGUgJyArIHZhbHVlVHlwZSk7XG4gICAgICAgIGNhc2UgJ3NjYWxhcic6XG4gICAgICAgICAgICBpZiAoIXZhbCB8fCAoWydvYmplY3QnLCAnZnVuY3Rpb24nXS5pbmRleE9mKHR5cGVvZiB2YWwpPDApKSB7XG4gICAgICAgICAgICAgICAgYWRkVHlwZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6IGNhc2UgJ3N0cmluZyc6IGNhc2UgJ3VuZGVmaW5lZCc6IGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSB2YWx1ZVR5cGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSB2YWxpZC10eXBlb2ZcbiAgICAgICAgICAgICAgICBhZGRUeXBlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IHZhbHVlVHlwZSAmJiBpc0Zpbml0ZSh2YWwpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgdmFsaWQtdHlwZW9mXG4gICAgICAgICAgICAgICAgYWRkVHlwZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbm9uRmluaXRlJzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUodmFsKSkge1xuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09IHZhbHVlVHlwZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHZhbGlkLXR5cGVvZlxuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgICAgICAgICBhZGRUeXBlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvdGhlcic6XG4gICAgICAgICAgICBhZGRUeXBlID0gdGhpcy5jdXJyT3RoZXJUeXBlQ2FsbGJhY2sodmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgICAgIGlmICh2YWwgPT09IE51bWJlcih2YWwpICYmIGlzRmluaXRlKHZhbCkgJiYgISh2YWwgJSAxKSkge1xuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFkZFR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZFR5cGUpIHtcbiAgICAgICAgICAgIHJldE9iaiA9IHtwYXRoOiBwYXRoLCB2YWx1ZTogdmFsLCBwYXJlbnQ6IHBhcmVudCwgcGFyZW50UHJvcGVydHk6IHBhcmVudFByb3BOYW1lfTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbGxiYWNrKHJldE9iaiwgY2FsbGJhY2ssICd2YWx1ZScpO1xuICAgICAgICAgICAgcmV0dXJuIHJldE9iajtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAobG9jWzBdID09PSAnYCcgJiYgdmFsICYmIGhhc093blByb3AuY2FsbCh2YWwsIGxvYy5zbGljZSgxKSkpIHsgLy8gYC1lc2NhcGVkIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IGxvY1Byb3AgPSBsb2Muc2xpY2UoMSk7XG4gICAgICAgIGFkZFJldCh0aGlzLl90cmFjZSh4LCB2YWxbbG9jUHJvcF0sIHB1c2gocGF0aCwgbG9jUHJvcCksIHZhbCwgbG9jUHJvcCwgY2FsbGJhY2ssIHRydWUpKTtcbiAgICB9IGVsc2UgaWYgKGxvYy5pbmRleE9mKCcsJyk+LTEpIHsgLy8gW25hbWUxLG5hbWUyLC4uLl1cbiAgICAgICAgY29uc3QgcGFydHMgPSBsb2Muc3BsaXQoJywnKTtcbiAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbihwYXJ0KXtcbiAgICAgICAgICAgIGFkZFJldCh0aGlzLl90cmFjZSh1bnNoaWZ0KHBhcnQsIHgpLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrKSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9IGVsc2UgaWYgKCFsaXRlcmFsUHJpb3JpdHkgJiYgdmFsICYmIGhhc093blByb3AuY2FsbCh2YWwsIGxvYykpIHsgLy8gc2ltcGxlIGNhc2UtLWRpcmVjdGx5IGZvbGxvdyBwcm9wZXJ0eVxuICAgICAgICBhZGRSZXQodGhpcy5fdHJhY2UoeCwgdmFsW2xvY10sIHB1c2gocGF0aCwgbG9jKSwgdmFsLCBsb2MsIGNhbGxiYWNrLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gV2UgY2hlY2sgdGhlIHJlc3VsdGluZyB2YWx1ZXMgZm9yIHBhcmVudCBzZWxlY3Rpb25zLiBGb3IgcGFyZW50XG4gICAgLy8gc2VsZWN0aW9ucyB3ZSBkaXNjYXJkIHRoZSB2YWx1ZSBvYmplY3QgYW5kIGNvbnRpbnVlIHRoZSB0cmFjZSB3aXRoIHRoZVxuICAgIC8vIGN1cnJlbnQgdmFsIG9iamVjdFxuICAgIGlmICh0aGlzLl9oYXNQYXJlbnRTZWxlY3Rvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1mb3ItbG9vcFxuICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHJldC5sZW5ndGg7IHQrKykge1xuICAgICAgICAgICAgY29uc3QgcmV0dCA9IHJldFt0XTtcbiAgICAgICAgICAgIGlmIChyZXR0LmlzUGFyZW50U2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGF0Ll90cmFjZShcbiAgICAgICAgICAgICAgICAgICAgcmV0dC5leHByLCB2YWwsIHJldHQucGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSwgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRtcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0W3RdID0gdG1wWzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bCA9IHRtcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHR0ID0gMTsgdHQgPCB0bDsgdHQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZSh0LCAwLCB0bXBbdHRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldFt0XSA9IHRtcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufTtcblxuSlNPTlBhdGgucHJvdG90eXBlLl93YWxrID0gZnVuY3Rpb24gKGxvYywgZXhwciwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjaywgZikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgY29uc3QgbiA9IHZhbC5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBmKGksIGxvYywgZXhwciwgdmFsLCBwYXRoLCBwYXJlbnQsIHBhcmVudFByb3BOYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIG0gaW4gdmFsKSB7IC8vIG9yaWdpbmFsbHkgbSBkZWNsYXJlZCBhcyBgY29uc3RgLCBidXQgdGhpcyBpcyBub3QgYWxsb3dlZCBpbiBSaGlub1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AuY2FsbCh2YWwsIG0pKSB7XG4gICAgICAgICAgICAgICAgZihtLCBsb2MsIGV4cHIsIHZhbCwgcGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSwgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuSlNPTlBhdGgucHJvdG90eXBlLl9zbGljZSA9IGZ1bmN0aW9uIChsb2MsIGV4cHIsIHZhbCwgcGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgY29uc3QgbGVuID0gdmFsLmxlbmd0aCwgcGFydHMgPSBsb2Muc3BsaXQoJzonKSxcbiAgICAgICAgc3RlcCA9IChwYXJ0c1syXSAmJiBwYXJzZUludChwYXJ0c1syXSkpIHx8IDE7XG4gICAgbGV0IHN0YXJ0ID0gKHBhcnRzWzBdICYmIHBhcnNlSW50KHBhcnRzWzBdKSkgfHwgMCxcbiAgICAgICAgZW5kID0gKHBhcnRzWzFdICYmIHBhcnNlSW50KHBhcnRzWzFdKSkgfHwgbGVuO1xuICAgIHN0YXJ0ID0gKHN0YXJ0IDwgMCkgPyBNYXRoLm1heCgwLCBzdGFydCArIGxlbikgOiBNYXRoLm1pbihsZW4sIHN0YXJ0KTtcbiAgICBlbmQgPSAoZW5kIDwgMCkgPyBNYXRoLm1heCgwLCBlbmQgKyBsZW4pIDogTWF0aC5taW4obGVuLCBlbmQpO1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBzdGVwKSB7XG4gICAgICAgIGxldCB0bXAgPSB0aGlzLl90cmFjZSh1bnNoaWZ0KGksIGV4cHIpLCB2YWwsIHBhdGgsIHBhcmVudCwgcGFyZW50UHJvcE5hbWUsIGNhbGxiYWNrKTsvLyBvcmlnaW5hbGx5IGRlY2xhcmVkIGFzIGBjb25zdGAsIHRoaXMgZG9lc24ndCB3b3JrIGluIFJoaW5vXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRtcCkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd2FzIGNhdXNpbmcgZXhjZXNzaXZlIHN0YWNrIHNpemUgaW4gTm9kZSAod2l0aCBvciB3aXRob3V0IEJhYmVsKSBhZ2FpbnN0IG91ciBwZXJmb3JtYW5jZSB0ZXN0OiBgcmV0LnB1c2goLi4udG1wKTtgXG4gICAgICAgICAgICB0bXAuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldC5wdXNoKHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQucHVzaCh0bXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5KU09OUGF0aC5wcm90b3R5cGUuX2V2YWwgPSBmdW5jdGlvbiAoY29kZSwgX3YsIF92bmFtZSwgcGF0aCwgcGFyZW50LCBwYXJlbnRQcm9wTmFtZSkge1xuICAgIGlmICghdGhpcy5fb2JqIHx8ICFfdikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAoY29kZS5pbmRleE9mKCdAcGFyZW50UHJvcGVydHknKT4tMSkge1xuICAgICAgICB0aGlzLmN1cnJTYW5kYm94Ll8kX3BhcmVudFByb3BlcnR5ID0gcGFyZW50UHJvcE5hbWU7XG4gICAgICAgIGNvZGUgPSBjb2RlLnJlcGxhY2UoL0BwYXJlbnRQcm9wZXJ0eS9nLCAnXyRfcGFyZW50UHJvcGVydHknKTtcbiAgICB9XG4gICAgaWYgKGNvZGUuaW5kZXhPZignQHBhcmVudCcpPi0xKSB7XG4gICAgICAgIHRoaXMuY3VyclNhbmRib3guXyRfcGFyZW50ID0gcGFyZW50O1xuICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9AcGFyZW50L2csICdfJF9wYXJlbnQnKTtcbiAgICB9XG4gICAgaWYgKGNvZGUuaW5kZXhPZignQHByb3BlcnR5Jyk+LTEpIHtcbiAgICAgICAgdGhpcy5jdXJyU2FuZGJveC5fJF9wcm9wZXJ0eSA9IF92bmFtZTtcbiAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvQHByb3BlcnR5L2csICdfJF9wcm9wZXJ0eScpO1xuICAgIH1cbiAgICBpZiAoY29kZS5pbmRleE9mKCdAcGF0aCcpPi0xKSB7XG4gICAgICAgIHRoaXMuY3VyclNhbmRib3guXyRfcGF0aCA9IEpTT05QYXRoLnRvUGF0aFN0cmluZyhwYXRoLmNvbmNhdChbX3ZuYW1lXSkpO1xuICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9AcGF0aC9nLCAnXyRfcGF0aCcpO1xuICAgIH1cbiAgICBpZiAoY29kZS5tYXRjaCgvQChbLlxccylbXSkvKSkge1xuICAgICAgICB0aGlzLmN1cnJTYW5kYm94Ll8kX3YgPSBfdjtcbiAgICAgICAgY29kZSA9IGNvZGUucmVwbGFjZSgvQChbLlxccylbXSkvZywgJ18kX3YkMScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gdm0ucnVuSW5OZXdDb250ZXh0KGNvZGUsIHRoaXMuY3VyclNhbmRib3gpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignanNvblBhdGg6ICcgKyBlLm1lc3NhZ2UgKyAnOiAnICsgY29kZSk7XG4gICAgfVxufTtcblxuLy8gUFVCTElDIENMQVNTIFBST1BFUlRJRVMgQU5EIE1FVEhPRFNcblxuLy8gQ291bGQgc3RvcmUgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGZcbkpTT05QYXRoLmNhY2hlID0ge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aEFyciBBcnJheSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCBzdHJpbmdcbiAqL1xuSlNPTlBhdGgudG9QYXRoU3RyaW5nID0gZnVuY3Rpb24gKHBhdGhBcnIpIHtcbiAgICBjb25zdCB4ID0gcGF0aEFyciwgbiA9IHgubGVuZ3RoO1xuICAgIGxldCBwID0gJyQnO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGlmICghKC9eKH58XFxefEAuKj9cXChcXCkpJC8pLnRlc3QoeFtpXSkpIHtcbiAgICAgICAgICAgIHAgKz0gKC9eWzAtOSpdKyQvKS50ZXN0KHhbaV0pID8gKCdbJyArIHhbaV0gKyAnXScpIDogKFwiWydcIiArIHhbaV0gKyBcIiddXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcG9pbnRlciBKU09OIFBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEpTT04gUG9pbnRlclxuICovXG5KU09OUGF0aC50b1BvaW50ZXIgPSBmdW5jdGlvbiAocG9pbnRlcikge1xuICAgIGNvbnN0IHggPSBwb2ludGVyLCBuID0geC5sZW5ndGg7XG4gICAgbGV0IHAgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgICBpZiAoISgvXih+fFxcXnxALio/XFwoXFwpKSQvKS50ZXN0KHhbaV0pKSB7XG4gICAgICAgICAgICBwICs9ICcvJyArIHhbaV0udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9+L2csICd+MCcpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnfjEnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgRXhwcmVzc2lvbiB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nW119XG4gKi9cbkpTT05QYXRoLnRvUGF0aEFycmF5ID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICBjb25zdCB7Y2FjaGV9ID0gSlNPTlBhdGg7XG4gICAgaWYgKGNhY2hlW2V4cHJdKSB7IHJldHVybiBjYWNoZVtleHByXS5jb25jYXQoKTsgfVxuICAgIGNvbnN0IHN1YnggPSBbXTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gZXhwclxuICAgICAgICAvLyBQcm9wZXJ0aWVzXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgL0AoPzpudWxsfGJvb2xlYW58bnVtYmVyfHN0cmluZ3xpbnRlZ2VyfHVuZGVmaW5lZHxub25GaW5pdGV8c2NhbGFyfGFycmF5fG9iamVjdHxmdW5jdGlvbnxvdGhlcilcXChcXCkvZyxcbiAgICAgICAgICAgICc7JCY7J1xuICAgICAgICApXG4gICAgICAgIC8vIFBhcmVudGhldGljYWwgZXZhbHVhdGlvbnMgKGZpbHRlcmluZyBhbmQgb3RoZXJ3aXNlKSwgZGlyZWN0bHlcbiAgICAgICAgLy8gICB3aXRoaW4gYnJhY2tldHMgb3Igc2luZ2xlIHF1b3Rlc1xuICAgICAgICAucmVwbGFjZSgvW1snXShcXD8/XFwoLio/XFwpKVtcXF0nXS9nLCBmdW5jdGlvbiAoJDAsICQxKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1sjJyArIChzdWJ4LnB1c2goJDEpIC0gMSkgKyAnXSc7XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEVzY2FwZSBwZXJpb2RzIGFuZCB0aWxkZXMgd2l0aGluIHByb3BlcnRpZXNcbiAgICAgICAgLnJlcGxhY2UoL1xcWycoW14nXFxdXSopJ1xcXS9nLCBmdW5jdGlvbiAoJDAsIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBcIlsnXCIgKyBwcm9wXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLi9nLCAnJUAlJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvfi9nLCAnJSVAQCUlJykgK1xuICAgICAgICAgICAgICAgIFwiJ11cIjtcbiAgICAgICAgfSlcbiAgICAgICAgLy8gUHJvcGVydGllcyBvcGVyYXRvclxuICAgICAgICAucmVwbGFjZSgvfi9nLCAnO347JylcbiAgICAgICAgLy8gU3BsaXQgYnkgcHJvcGVydHkgYm91bmRhcmllc1xuICAgICAgICAucmVwbGFjZSgvJz9cXC4nPyg/IVteW10qXFxdKXxcXFsnPy9nLCAnOycpXG4gICAgICAgIC8vIFJlaW5zZXJ0IHBlcmlvZHMgd2l0aGluIHByb3BlcnRpZXNcbiAgICAgICAgLnJlcGxhY2UoLyVAJS9nLCAnLicpXG4gICAgICAgIC8vIFJlaW5zZXJ0IHRpbGRlcyB3aXRoaW4gcHJvcGVydGllc1xuICAgICAgICAucmVwbGFjZSgvJSVAQCUlL2csICd+JylcbiAgICAgICAgLy8gUGFyZW50XG4gICAgICAgIC5yZXBsYWNlKC8oPzo7KT8oXFxeKykoPzo7KT8vZywgZnVuY3Rpb24gKCQwLCB1cHMpIHtcbiAgICAgICAgICAgIHJldHVybiAnOycgKyB1cHMuc3BsaXQoJycpLmpvaW4oJzsnKSArICc7JztcbiAgICAgICAgfSlcbiAgICAgICAgLy8gRGVzY2VuZGVudHNcbiAgICAgICAgLnJlcGxhY2UoLzs7O3w7Oy9nLCAnOy4uOycpXG4gICAgICAgIC8vIFJlbW92ZSB0cmFpbGluZ1xuICAgICAgICAucmVwbGFjZSgvOyR8Jz9cXF18JyQvZywgJycpO1xuXG4gICAgY29uc3QgZXhwckxpc3QgPSBub3JtYWxpemVkLnNwbGl0KCc7JykubWFwKGZ1bmN0aW9uIChleHApIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBleHAubWF0Y2goLyMoXFxkKykvKTtcbiAgICAgICAgcmV0dXJuICFtYXRjaCB8fCAhbWF0Y2hbMV0gPyBleHAgOiBzdWJ4W21hdGNoWzFdXTtcbiAgICB9KTtcbiAgICBjYWNoZVtleHByXSA9IGV4cHJMaXN0O1xuICAgIHJldHVybiBjYWNoZVtleHByXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEpTT05QYXRoO1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBT0EsTUFBTSxhQUFhO0FBQ25CLE1BQU0scUJBQXFCLENBQUMsU0FBUyxRQUFRLFdBQVcsVUFBVSxrQkFBa0IsS0FBSztBQUN6RixNQUFNLEVBQUMsZ0JBQWdCLFdBQVUsSUFBSSxPQUFPO0FBVTVDLE1BQU0scUJBQXFCLFNBQVUsUUFBUSxRQUFRLGFBQWE7QUFDOUQsUUFBTSxLQUFLLE9BQU87QUFDbEIsV0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLEtBQUs7QUFDekIsVUFBTSxPQUFPLE9BQU8sQ0FBQztBQUNyQixRQUFJLFlBQVksSUFBSSxHQUFHO0FBQ25CLGFBQU8sS0FBSyxPQUFPLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDeEM7QUFBQSxFQUNKO0FBQ0o7QUFFQSxNQUFNLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNSCxnQkFBaUIsTUFBTSxTQUFTO0FBQzVCLFVBQU0sT0FBTyxPQUFPLEtBQUssT0FBTztBQUNoQyxVQUFNLFFBQVEsQ0FBQztBQUNmLHVCQUFtQixNQUFNLE9BQU8sQ0FBQyxRQUFRO0FBQ3JDLGFBQU8sT0FBTyxRQUFRLEdBQUcsTUFBTTtBQUFBLElBQ25DLENBQUM7QUFDRCxVQUFNLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxTQUFTO0FBQ25DLFVBQUksVUFBVSxRQUFRLElBQUksRUFB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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Bytes } from "@aerokit/sdk/io/bytes";
|
|
2
|
+
const QRCodeFacade = Java.type("org.eclipse.dirigible.components.api.utils.QRCodeFacade");
|
|
3
|
+
class QRCode {
|
|
4
|
+
/**
|
|
5
|
+
* Generates a QR code image byte array from the given text.
|
|
6
|
+
* The returned byte array represents the image data (e.g., PNG or JPEG format,
|
|
7
|
+
* depending on the native implementation's default output).
|
|
8
|
+
*
|
|
9
|
+
* @param text The string content to be encoded in the QR code.
|
|
10
|
+
* @returns A **JavaScript byte array (any[])** containing the raw QR code image data.
|
|
11
|
+
*/
|
|
12
|
+
static generateQRCode(text) {
|
|
13
|
+
return Bytes.toJavaScriptBytes(QRCodeFacade.generateQRCode(text));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (typeof module !== "undefined") {
|
|
17
|
+
module.exports = QRCode;
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
QRCode
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWxzL3FyY29kZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQnl0ZXMgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2lvL2J5dGVzXCI7XG5jb25zdCBRUkNvZGVGYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkudXRpbHMuUVJDb2RlRmFjYWRlXCIpO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGdlbmVyYXRpbmcgUVIgY29kZXMuXG4gKiBJdCB1c2VzIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBKYXZhIFFSQ29kZUZhY2FkZSB0byBjb252ZXJ0IHRleHQgaW50b1xuICogYSBRUiBjb2RlIGltYWdlIHJlcHJlc2VudGVkIGFzIGEgcmF3IGJ5dGUgYXJyYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRUkNvZGUge1xuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgUVIgY29kZSBpbWFnZSBieXRlIGFycmF5IGZyb20gdGhlIGdpdmVuIHRleHQuXG4gICAgICogVGhlIHJldHVybmVkIGJ5dGUgYXJyYXkgcmVwcmVzZW50cyB0aGUgaW1hZ2UgZGF0YSAoZS5nLiwgUE5HIG9yIEpQRUcgZm9ybWF0LFxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uJ3MgZGVmYXVsdCBvdXRwdXQpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQgVGhlIHN0cmluZyBjb250ZW50IHRvIGJlIGVuY29kZWQgaW4gdGhlIFFSIGNvZGUuXG4gICAgICogQHJldHVybnMgQSAqKkphdmFTY3JpcHQgYnl0ZSBhcnJheSAoYW55W10pKiogY29udGFpbmluZyB0aGUgcmF3IFFSIGNvZGUgaW1hZ2UgZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlUVJDb2RlKHRleHQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKFFSQ29kZUZhY2FkZS5nZW5lcmF0ZVFSQ29kZSh0ZXh0KSk7XG4gICAgfVxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBRUkNvZGU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGFBQWE7QUFDdEIsTUFBTSxlQUFlLEtBQUssS0FBSyx5REFBeUQ7QUFPakYsTUFBTSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVWhCLE9BQWMsZUFBZSxNQUFxQjtBQUM5QyxXQUFPLE1BQU0sa0JBQWtCLGFBQWEsZUFBZSxJQUFJLENBQUM7QUFBQSxFQUNwRTtBQUNKO0FBR0EsSUFBSSxPQUFPLFdBQVcsYUFBYTtBQUUvQixTQUFPLFVBQVU7QUFDckI7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
const UrlFacade = Java.type("org.eclipse.dirigible.components.api.utils.UrlFacade");
|
|
2
|
+
class URL {
|
|
3
|
+
/**
|
|
4
|
+
* URL-encodes the input string, typically used for encoding query parameter values.
|
|
5
|
+
*
|
|
6
|
+
* @param input The string to be encoded.
|
|
7
|
+
* @param charset The character set (e.g., 'UTF-8', 'ISO-8859-1') to use for encoding. Defaults to the system's preferred encoding if omitted.
|
|
8
|
+
* @returns The URL-encoded string.
|
|
9
|
+
*/
|
|
10
|
+
static encode(input, charset) {
|
|
11
|
+
return UrlFacade.encode(input, charset);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* URL-decodes the input string, typically used for decoding query parameter values.
|
|
15
|
+
*
|
|
16
|
+
* @param input The string to be decoded.
|
|
17
|
+
* @param charset The character set (e.g., 'UTF-8', 'ISO-8859-1') that was used for encoding. Defaults to the system's preferred encoding if omitted.
|
|
18
|
+
* @returns The URL-decoded string.
|
|
19
|
+
*/
|
|
20
|
+
static decode(input, charset) {
|
|
21
|
+
return UrlFacade.decode(input, charset);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Escapes the input string using general URL escaping rules.
|
|
25
|
+
* This is typically equivalent to `encodeURIComponent` and is suitable for
|
|
26
|
+
* encoding query parameter *values*.
|
|
27
|
+
*
|
|
28
|
+
* @param input The string to escape.
|
|
29
|
+
* @returns The escaped string.
|
|
30
|
+
*/
|
|
31
|
+
static escape(input) {
|
|
32
|
+
return UrlFacade.escape(input);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Escapes the input string specifically for use as a **URL path segment**.
|
|
36
|
+
* It typically preserves path delimiters like `/` that might otherwise be escaped
|
|
37
|
+
* in standard URL encoding.
|
|
38
|
+
*
|
|
39
|
+
* @param input The path string to escape.
|
|
40
|
+
* @returns The escaped path string.
|
|
41
|
+
*/
|
|
42
|
+
static escapePath(input) {
|
|
43
|
+
return UrlFacade.escapePath(input);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Escapes the input string according to the rules for **HTML Form Data**
|
|
47
|
+
* (application/x-www-form-urlencoded). This typically replaces spaces with `+`
|
|
48
|
+
* instead of `%20`.
|
|
49
|
+
*
|
|
50
|
+
* @param input The form data string to escape.
|
|
51
|
+
* @returns The escaped form data string.
|
|
52
|
+
*/
|
|
53
|
+
static escapeForm(input) {
|
|
54
|
+
return UrlFacade.escapeForm(input);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (typeof module !== "undefined") {
|
|
58
|
+
module.exports = URL;
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
URL
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3V0aWxzL3VybC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiY29uc3QgVXJsRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLnV0aWxzLlVybEZhY2FkZVwiKTtcblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIGZvciBwZXJmb3JtaW5nIHZhcmlvdXMgZm9ybXMgb2YgVVJMIGVuY29kaW5nIGFuZCBkZWNvZGluZy5cbiAqIEl0IHdyYXBzIG5hdGl2ZSBKYXZhIFVSTCB1dGlsaXR5IG1ldGhvZHMgZm9yIGhhbmRsaW5nIHF1ZXJ5IHBhcmFtZXRlcnMsXG4gKiBwYXRoIHNlZ21lbnRzLCBhbmQgZm9ybSBkYXRhLlxuICovXG5leHBvcnQgY2xhc3MgVVJMIHtcblxuXHQvKipcblx0ICogVVJMLWVuY29kZXMgdGhlIGlucHV0IHN0cmluZywgdHlwaWNhbGx5IHVzZWQgZm9yIGVuY29kaW5nIHF1ZXJ5IHBhcmFtZXRlciB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbnB1dCBUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQuXG5cdCAqIEBwYXJhbSBjaGFyc2V0IFRoZSBjaGFyYWN0ZXIgc2V0IChlLmcuLCAnVVRGLTgnLCAnSVNPLTg4NTktMScpIHRvIHVzZSBmb3IgZW5jb2RpbmcuIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBwcmVmZXJyZWQgZW5jb2RpbmcgaWYgb21pdHRlZC5cblx0ICogQHJldHVybnMgVGhlIFVSTC1lbmNvZGVkIHN0cmluZy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZW5jb2RlKGlucHV0OiBzdHJpbmcsIGNoYXJzZXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBVcmxGYWNhZGUuZW5jb2RlKGlucHV0LCBjaGFyc2V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVUkwtZGVjb2RlcyB0aGUgaW5wdXQgc3RyaW5nLCB0eXBpY2FsbHkgdXNlZCBmb3IgZGVjb2RpbmcgcXVlcnkgcGFyYW1ldGVyIHZhbHVlcy5cblx0ICpcblx0ICogQHBhcmFtIGlucHV0IFRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZC5cblx0ICogQHBhcmFtIGNoYXJzZXQgVGhlIGNoYXJhY3RlciBzZXQgKGUuZy4sICdVVEYtOCcsICdJU08tODg1OS0xJykgdGhhdCB3YXMgdXNlZCBmb3IgZW5jb2RpbmcuIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBwcmVmZXJyZWQgZW5jb2RpbmcgaWYgb21pdHRlZC5cblx0ICogQHJldHVybnMgVGhlIFVSTC1kZWNvZGVkIHN0cmluZy5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZGVjb2RlKGlucHV0OiBzdHJpbmcsIGNoYXJzZXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBVcmxGYWNhZGUuZGVjb2RlKGlucHV0LCBjaGFyc2V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFc2NhcGVzIHRoZSBpbnB1dCBzdHJpbmcgdXNpbmcgZ2VuZXJhbCBVUkwgZXNjYXBpbmcgcnVsZXMuXG5cdCAqIFRoaXMgaXMgdHlwaWNhbGx5IGVxdWl2YWxlbnQgdG8gYGVuY29kZVVSSUNvbXBvbmVudGAgYW5kIGlzIHN1aXRhYmxlIGZvclxuXHQgKiBlbmNvZGluZyBxdWVyeSBwYXJhbWV0ZXIgKnZhbHVlcyouXG5cdCAqXG5cdCAqIEBwYXJhbSBpbnB1dCBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cblx0ICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBlc2NhcGUoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFVybEZhY2FkZS5lc2NhcGUoaW5wdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVzY2FwZXMgdGhlIGlucHV0IHN0cmluZyBzcGVjaWZpY2FsbHkgZm9yIHVzZSBhcyBhICoqVVJMIHBhdGggc2VnbWVudCoqLlxuXHQgKiBJdCB0eXBpY2FsbHkgcHJlc2VydmVzIHBhdGggZGVsaW1pdGVycyBsaWtlIGAvYCB0aGF0IG1pZ2h0IG90aGVyd2lzZSBiZSBlc2NhcGVkXG5cdCAqIGluIHN0YW5kYXJkIFVSTCBlbmNvZGluZy5cblx0ICpcblx0ICogQHBhcmFtIGlucHV0IFRoZSBwYXRoIHN0cmluZyB0byBlc2NhcGUuXG5cdCAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHBhdGggc3RyaW5nLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBlc2NhcGVQYXRoKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBVcmxGYWNhZGUuZXNjYXBlUGF0aChpbnB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogRXNjYXBlcyB0aGUgaW5wdXQgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yICoqSFRNTCBGb3JtIERhdGEqKlxuXHQgKiAoYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkKS4gVGhpcyB0eXBpY2FsbHkgcmVwbGFjZXMgc3BhY2VzIHdpdGggYCtgXG5cdCAqIGluc3RlYWQgb2YgYCUyMGAuXG5cdCAqXG5cdCAqIEBwYXJhbSBpbnB1dCBUaGUgZm9ybSBkYXRhIHN0cmluZyB0byBlc2NhcGUuXG5cdCAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIGZvcm0gZGF0YSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGVzY2FwZUZvcm0oaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFVybEZhY2FkZS5lc2NhcGVGb3JtKGlucHV0KTtcblx0fVxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRtb2R1bGUuZXhwb3J0cyA9IFVSTDtcbn0iXSwKICAibWFwcGluZ3MiOiAiQUFBQSxNQUFNLFlBQVksS0FBSyxLQUFLLHNEQUFzRDtBQU8zRSxNQUFNLElBQUk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU2hCLE9BQWMsT0FBTyxPQUFlLFNBQTBCO0FBQzdELFdBQU8sVUFBVSxPQUFPLE9BQU8sT0FBTztBQUFBLEVBQ3ZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVNBLE9BQWMsT0FBTyxPQUFlLFNBQTBCO0FBQzdELFdBQU8sVUFBVSxPQUFPLE9BQU8sT0FBTztBQUFBLEVBQ3ZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVUEsT0FBYyxPQUFPLE9BQXVCO0FBQzNDLFdBQU8sVUFBVSxPQUFPLEtBQUs7QUFBQSxFQUM5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVVBLE9BQWMsV0FBVyxPQUF1QjtBQUMvQyxXQUFPLFVBQVUsV0FBVyxLQUFLO0FBQUEsRUFDbEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFVQSxPQUFjLFdBQVcsT0FBdUI7QUFDL0MsV0FBTyxVQUFVLFdBQVcsS0FBSztBQUFBLEVBQ2xDO0FBQ0Q7QUFHQSxJQUFJLE9BQU8sV0FBVyxhQUFhO0FBRWxDLFNBQU8sVUFBVTtBQUNsQjsiLAogICJuYW1lcyI6IFtdCn0K
|