@aws-cdk/toolkit-lib 0.3.1 → 0.3.3
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/README.md +1 -1
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/bootstrap/index.d.ts +1 -1
- package/lib/actions/bootstrap/index.js +5 -5
- package/lib/actions/deploy/index.d.ts +1 -1
- package/lib/actions/deploy/index.js +1 -1
- package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
- package/lib/actions/deploy/private/deploy-options.js +1 -1
- package/lib/actions/deploy/private/helpers.d.ts +3 -2
- package/lib/actions/deploy/private/helpers.js +3 -3
- package/lib/actions/diff/private/helpers.d.ts +5 -9
- package/lib/actions/diff/private/helpers.js +6 -23
- package/lib/api/aws-auth/account-cache.d.ts +41 -0
- package/lib/api/aws-auth/account-cache.js +108 -0
- package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
- package/lib/api/aws-auth/awscli-compatible.js +250 -0
- package/lib/api/aws-auth/cached.d.ts +11 -0
- package/lib/api/aws-auth/cached.js +26 -0
- package/lib/api/aws-auth/credential-plugins.d.ts +38 -0
- package/lib/api/aws-auth/credential-plugins.js +154 -0
- package/lib/api/aws-auth/private/index.d.ts +11 -0
- package/lib/api/aws-auth/private/index.js +37 -0
- package/lib/api/aws-auth/provider-caching.d.ts +13 -0
- package/lib/api/aws-auth/provider-caching.js +24 -0
- package/lib/api/aws-auth/proxy-agent.d.ts +13 -0
- package/lib/api/aws-auth/proxy-agent.js +54 -0
- package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
- package/lib/api/aws-auth/sdk-logger.js +128 -0
- package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
- package/lib/api/aws-auth/sdk-provider.js +373 -0
- package/lib/api/aws-auth/sdk.d.ts +235 -0
- package/lib/api/aws-auth/sdk.js +391 -0
- package/lib/api/aws-auth/tracing.d.ts +11 -0
- package/lib/api/aws-auth/tracing.js +60 -0
- package/lib/api/aws-auth/types.d.ts +79 -1
- package/lib/api/aws-auth/types.js +74 -1
- package/lib/api/aws-auth/user-agent.d.ts +7 -0
- package/lib/api/aws-auth/user-agent.js +20 -0
- package/lib/api/aws-auth/util.d.ts +6 -0
- package/lib/api/aws-auth/util.js +21 -0
- package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
- package/lib/api/bootstrap/bootstrap-environment.js +323 -0
- package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
- package/lib/api/bootstrap/bootstrap-props.js +14 -0
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
- package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
- package/lib/api/bootstrap/index.d.ts +3 -0
- package/lib/api/bootstrap/index.js +23 -0
- package/lib/api/bootstrap/legacy-template.d.ts +2 -0
- package/lib/api/bootstrap/legacy-template.js +82 -0
- package/lib/api/cloud-assembly/environment.d.ts +43 -0
- package/lib/api/cloud-assembly/environment.js +127 -0
- package/lib/api/cloud-assembly/index.d.ts +1 -1
- package/lib/api/cloud-assembly/index.js +3 -3
- package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
- package/lib/api/cloud-assembly/private/context-aware-source.js +5 -5
- package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
- package/lib/api/cloud-assembly/private/prepare-source.js +14 -12
- package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
- package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
- package/lib/api/cloud-assembly/private/source-builder.js +10 -8
- package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
- package/lib/api/cloud-assembly/private/stack-assembly.js +10 -9
- package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
- package/lib/api/cloud-assembly/stack-assembly.js +139 -0
- package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
- package/lib/api/cloud-assembly/stack-collection.js +112 -0
- package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
- package/lib/api/cloud-assembly/stack-selector.js +62 -5
- package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
- package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
- package/lib/api/cloudformation/index.d.ts +4 -0
- package/lib/api/cloudformation/index.js +21 -0
- package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
- package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
- package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
- package/lib/api/cloudformation/stack-helpers.js +163 -0
- package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
- package/lib/api/cloudformation/template-body-parameter.js +104 -0
- package/lib/api/context.d.ts +40 -0
- package/lib/api/context.js +84 -0
- package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
- package/lib/api/deployments/asset-manifest-builder.js +33 -0
- package/lib/api/deployments/asset-publishing.d.ts +60 -0
- package/lib/api/deployments/asset-publishing.js +144 -0
- package/lib/api/deployments/assets.d.ts +11 -0
- package/lib/api/deployments/assets.js +109 -0
- package/lib/api/deployments/cfn-api.d.ts +145 -0
- package/lib/api/deployments/cfn-api.js +444 -0
- package/lib/api/deployments/checks.d.ts +9 -0
- package/lib/api/deployments/checks.js +72 -0
- package/lib/api/deployments/deploy-stack.d.ts +164 -0
- package/lib/api/deployments/deploy-stack.js +490 -0
- package/lib/api/deployments/deployment-method.d.ts +24 -0
- package/lib/api/deployments/deployment-method.js +3 -0
- package/lib/api/deployments/deployment-result.d.ts +21 -0
- package/lib/api/deployments/deployment-result.js +10 -0
- package/lib/api/deployments/deployments.d.ts +289 -0
- package/lib/api/deployments/deployments.js +355 -0
- package/lib/api/deployments/index.d.ts +6 -0
- package/lib/api/deployments/index.js +27 -0
- package/lib/api/diff/diff-formatter.d.ts +147 -0
- package/lib/api/diff/diff-formatter.js +225 -0
- package/lib/api/diff/index.d.ts +1 -0
- package/lib/api/diff/index.js +18 -0
- package/lib/api/environment/environment-access.d.ts +139 -0
- package/lib/api/environment/environment-access.js +205 -0
- package/lib/api/environment/environment-resources.d.ts +75 -0
- package/lib/api/environment/environment-resources.js +213 -0
- package/lib/api/environment/index.d.ts +3 -0
- package/lib/api/environment/index.js +20 -0
- package/lib/api/environment/placeholders.d.ts +10 -0
- package/lib/api/environment/placeholders.js +23 -0
- package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
- package/lib/api/garbage-collection/garbage-collector.js +614 -0
- package/lib/api/garbage-collection/index.d.ts +3 -0
- package/lib/api/garbage-collection/index.js +21 -0
- package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
- package/lib/api/garbage-collection/progress-printer.js +80 -0
- package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
- package/lib/api/garbage-collection/stack-refresh.js +152 -0
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
- package/lib/api/hotswap/code-build-projects.d.ts +4 -0
- package/lib/api/hotswap/code-build-projects.js +62 -0
- package/lib/api/hotswap/common.d.ts +89 -0
- package/lib/api/hotswap/common.js +137 -0
- package/lib/api/hotswap/ecs-services.d.ts +4 -0
- package/lib/api/hotswap/ecs-services.js +159 -0
- package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
- package/lib/api/hotswap/hotswap-deployments.js +441 -0
- package/lib/api/hotswap/index.d.ts +2 -0
- package/lib/api/hotswap/index.js +19 -0
- package/lib/api/hotswap/lambda-functions.d.ts +4 -0
- package/lib/api/hotswap/lambda-functions.js +297 -0
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
- package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
- package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
- package/lib/api/index.d.ts +25 -0
- package/lib/api/index.js +42 -0
- package/lib/api/io/index.d.ts +3 -1
- package/lib/api/io/index.js +18 -1
- package/lib/api/io/io-host.d.ts +15 -0
- package/lib/api/io/io-host.js +3 -0
- package/lib/api/io/io-message.d.ts +76 -0
- package/lib/api/io/io-message.js +3 -0
- package/lib/api/io/private/index.d.ts +7 -1
- package/lib/api/io/private/index.js +8 -5
- package/lib/api/io/private/io-default-messages.d.ts +21 -0
- package/lib/api/io/private/io-default-messages.js +59 -0
- package/lib/api/io/private/io-helper.d.ts +32 -0
- package/lib/api/io/private/io-helper.js +51 -0
- package/lib/api/io/private/level-priority.d.ts +11 -0
- package/lib/api/io/private/level-priority.js +33 -0
- package/lib/api/io/private/message-maker.d.ts +89 -0
- package/lib/api/io/private/message-maker.js +60 -0
- package/lib/api/io/private/messages.d.ts +178 -0
- package/lib/api/io/private/messages.js +534 -0
- package/lib/api/io/private/span.d.ts +93 -0
- package/lib/api/io/private/span.js +87 -0
- package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
- package/lib/api/io/private/testing/fake-io-host.js +41 -0
- package/lib/api/io/private/testing/index.d.ts +2 -0
- package/lib/api/io/private/testing/index.js +19 -0
- package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
- package/lib/api/io/private/testing/test-io-host.js +61 -0
- package/lib/api/io/private/types.d.ts +4 -0
- package/lib/api/io/private/types.js +3 -0
- package/lib/api/io/toolkit-action.d.ts +4 -0
- package/lib/api/io/toolkit-action.js +3 -0
- package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
- package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
- package/lib/api/logs-monitor/index.d.ts +2 -0
- package/lib/api/logs-monitor/index.js +19 -0
- package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
- package/lib/api/logs-monitor/logs-monitor.js +194 -0
- package/lib/api/notices.d.ts +210 -0
- package/lib/api/notices.js +430 -0
- package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
- package/lib/api/plugin/context-provider-plugin.js +7 -0
- package/lib/api/plugin/index.d.ts +3 -0
- package/lib/api/plugin/index.js +20 -0
- package/lib/api/plugin/mode.d.ts +4 -0
- package/lib/api/plugin/mode.js +9 -0
- package/lib/api/plugin/plugin.d.ts +72 -0
- package/lib/api/plugin/plugin.js +132 -0
- package/lib/api/private.d.ts +1 -0
- package/lib/api/private.js +18 -0
- package/lib/api/refactoring/cloudformation.d.ts +15 -0
- package/lib/api/refactoring/cloudformation.js +3 -0
- package/lib/api/refactoring/digest.d.ts +26 -0
- package/lib/api/refactoring/digest.js +175 -0
- package/lib/api/refactoring/index.d.ts +51 -0
- package/lib/api/refactoring/index.js +223 -0
- package/lib/api/require-approval.d.ts +17 -0
- package/lib/api/require-approval.js +22 -0
- package/lib/api/resource-import/importer.d.ts +216 -0
- package/lib/api/resource-import/importer.js +331 -0
- package/lib/api/resource-import/index.d.ts +2 -0
- package/lib/api/resource-import/index.js +19 -0
- package/lib/api/resource-import/migrator.d.ts +26 -0
- package/lib/api/resource-import/migrator.js +73 -0
- package/lib/api/resource-metadata/index.d.ts +1 -0
- package/lib/api/resource-metadata/index.js +18 -0
- package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
- package/lib/api/resource-metadata/resource-metadata.js +42 -0
- package/lib/api/rwlock.d.ts +60 -0
- package/lib/api/rwlock.js +204 -0
- package/lib/api/settings.d.ts +26 -0
- package/lib/api/settings.js +107 -0
- package/lib/api/shared-private.d.ts +8 -5
- package/lib/api/shared-private.js +2921 -9246
- package/lib/api/shared-private.js.map +4 -4
- package/lib/api/shared-public.d.ts +179 -37
- package/lib/api/shared-public.js +3106 -16
- package/lib/api/shared-public.js.map +4 -4
- package/lib/api/stack-events/index.d.ts +4 -0
- package/lib/api/stack-events/index.js +23 -0
- package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
- package/lib/api/stack-events/stack-activity-monitor.js +164 -0
- package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
- package/lib/api/stack-events/stack-event-poller.js +130 -0
- package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
- package/lib/api/stack-events/stack-progress-monitor.js +98 -0
- package/lib/api/stack-events/stack-status.d.ts +42 -0
- package/lib/api/stack-events/stack-status.js +90 -0
- package/lib/api/streams.d.ts +7 -0
- package/lib/api/streams.js +24 -0
- package/lib/api/tags.d.ts +9 -0
- package/lib/api/tags.js +10 -0
- package/lib/api/toolkit-error.d.ts +86 -0
- package/lib/api/toolkit-error.js +132 -0
- package/lib/api/toolkit-info.d.ts +52 -0
- package/lib/api/toolkit-info.js +157 -0
- package/lib/api/tree.d.ts +31 -0
- package/lib/api/tree.js +37 -0
- package/lib/api/work-graph/index.d.ts +3 -0
- package/lib/api/work-graph/index.js +20 -0
- package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
- package/lib/api/work-graph/work-graph-builder.js +172 -0
- package/lib/api/work-graph/work-graph-types.d.ts +50 -0
- package/lib/api/work-graph/work-graph-types.js +13 -0
- package/lib/api/work-graph/work-graph.d.ts +72 -0
- package/lib/api/work-graph/work-graph.js +349 -0
- package/lib/context-providers/ami.d.ts +13 -0
- package/lib/context-providers/ami.js +52 -0
- package/lib/context-providers/availability-zones.d.ts +13 -0
- package/lib/context-providers/availability-zones.js +29 -0
- package/lib/context-providers/cc-api-provider.d.ts +30 -0
- package/lib/context-providers/cc-api-provider.js +145 -0
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
- package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
- package/lib/context-providers/hosted-zones.d.ts +12 -0
- package/lib/context-providers/hosted-zones.js +69 -0
- package/lib/context-providers/index.d.ts +44 -0
- package/lib/context-providers/index.js +128 -0
- package/lib/context-providers/keys.d.ts +13 -0
- package/lib/context-providers/keys.js +54 -0
- package/lib/context-providers/load-balancers.d.ts +20 -0
- package/lib/context-providers/load-balancers.js +161 -0
- package/lib/context-providers/security-groups.d.ts +9 -0
- package/lib/context-providers/security-groups.js +69 -0
- package/lib/context-providers/ssm-parameters.d.ts +25 -0
- package/lib/context-providers/ssm-parameters.js +61 -0
- package/lib/context-providers/vpcs.d.ts +13 -0
- package/lib/context-providers/vpcs.js +291 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index_bg.wasm +0 -0
- package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
- package/lib/payloads/bootstrap-environment-progress.js +3 -0
- package/lib/payloads/context.d.ts +9 -0
- package/lib/payloads/context.js +3 -0
- package/lib/payloads/deploy.d.ts +43 -0
- package/lib/payloads/deploy.js +3 -0
- package/lib/payloads/destroy.d.ts +23 -0
- package/lib/payloads/destroy.js +3 -0
- package/lib/payloads/diff.d.ts +31 -0
- package/lib/payloads/diff.js +22 -0
- package/lib/payloads/hotswap.d.ts +211 -0
- package/lib/payloads/hotswap.js +43 -0
- package/lib/payloads/index.d.ts +17 -0
- package/lib/payloads/index.js +34 -0
- package/lib/payloads/list.d.ts +4 -0
- package/lib/payloads/list.js +3 -0
- package/lib/payloads/logs-monitor.d.ts +33 -0
- package/lib/payloads/logs-monitor.js +3 -0
- package/lib/payloads/progress.d.ts +14 -0
- package/lib/payloads/progress.js +3 -0
- package/lib/payloads/refactor.d.ts +14 -0
- package/lib/payloads/refactor.js +3 -0
- package/lib/payloads/rollback.d.ts +17 -0
- package/lib/payloads/rollback.js +3 -0
- package/lib/payloads/sdk-trace.d.ts +20 -0
- package/lib/payloads/sdk-trace.js +3 -0
- package/lib/payloads/stack-activity.d.ts +53 -0
- package/lib/payloads/stack-activity.js +3 -0
- package/lib/payloads/stack-details.d.ts +17 -0
- package/lib/payloads/stack-details.js +3 -0
- package/lib/payloads/synth.d.ts +7 -0
- package/lib/payloads/synth.js +3 -0
- package/lib/payloads/types.d.ts +95 -0
- package/lib/payloads/types.js +3 -0
- package/lib/payloads/watch.d.ts +27 -0
- package/lib/payloads/watch.js +3 -0
- package/lib/private/activity-printer/base.d.ts +50 -0
- package/lib/private/activity-printer/base.js +120 -0
- package/lib/private/activity-printer/current.d.ts +26 -0
- package/lib/private/activity-printer/current.js +122 -0
- package/lib/private/activity-printer/display.d.ts +13 -0
- package/lib/private/activity-printer/display.js +81 -0
- package/lib/private/activity-printer/history.d.ts +32 -0
- package/lib/private/activity-printer/history.js +109 -0
- package/lib/private/activity-printer/index.d.ts +3 -0
- package/lib/private/activity-printer/index.js +20 -0
- package/lib/private/index.d.ts +1 -0
- package/lib/private/index.js +18 -0
- package/lib/private/util.d.ts +1 -1
- package/lib/private/util.js +22 -22
- package/lib/private/util.js.map +2 -2
- package/lib/toolkit/private/index.d.ts +2 -0
- package/lib/toolkit/private/index.js +1 -1
- package/lib/toolkit/toolkit.d.ts +16 -0
- package/lib/toolkit/toolkit.js +158 -124
- package/lib/toolkit/types.d.ts +0 -55
- package/lib/toolkit/types.js +1 -1
- package/lib/util/archive.d.ts +1 -0
- package/lib/util/archive.js +86 -0
- package/lib/util/arrays.d.ts +14 -0
- package/lib/util/arrays.js +36 -0
- package/lib/util/bool.d.ts +7 -0
- package/lib/util/bool.js +13 -0
- package/lib/util/bytes.d.ts +8 -0
- package/lib/util/bytes.js +21 -0
- package/lib/util/cloudformation.d.ts +16 -0
- package/lib/util/cloudformation.js +36 -0
- package/lib/util/content-hash.d.ts +5 -0
- package/lib/util/content-hash.js +43 -0
- package/lib/util/directories.d.ts +22 -0
- package/lib/util/directories.js +59 -0
- package/lib/util/format-error.d.ts +9 -0
- package/lib/util/format-error.js +22 -0
- package/lib/util/index.d.ts +18 -0
- package/lib/util/index.js +35 -0
- package/lib/util/json.d.ts +48 -0
- package/lib/util/json.js +68 -0
- package/lib/util/objects.d.ts +65 -0
- package/lib/util/objects.js +230 -0
- package/lib/util/package-info.d.ts +3 -0
- package/lib/util/package-info.js +22 -0
- package/lib/util/parallel.d.ts +6 -0
- package/lib/util/parallel.js +48 -0
- package/lib/util/serialize.d.ts +27 -0
- package/lib/util/serialize.js +86 -0
- package/lib/util/string-manipulation.d.ts +18 -0
- package/lib/util/string-manipulation.js +46 -0
- package/lib/util/type-brands.d.ts +39 -0
- package/lib/util/type-brands.js +39 -0
- package/lib/util/types.d.ts +27 -0
- package/lib/util/types.js +25 -0
- package/lib/util/version-range.d.ts +2 -0
- package/lib/util/version-range.js +36 -0
- package/lib/util/yaml-cfn.d.ts +15 -0
- package/lib/util/yaml-cfn.js +58 -0
- package/package.json +12 -13
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This gets the values of the jsonObject at the paths specified in propertiesToReturn.
|
|
3
|
+
*
|
|
4
|
+
* For example, jsonObject = {
|
|
5
|
+
* key1: 'abc',
|
|
6
|
+
* key2: {
|
|
7
|
+
* foo: 'qwerty',
|
|
8
|
+
* bar: 'data',
|
|
9
|
+
* }
|
|
10
|
+
* }
|
|
11
|
+
*
|
|
12
|
+
* propertiesToReturn = ['key1', 'key2.foo'];
|
|
13
|
+
*
|
|
14
|
+
* The returned object is:
|
|
15
|
+
*
|
|
16
|
+
* ```
|
|
17
|
+
* {
|
|
18
|
+
* key1: 'abc',
|
|
19
|
+
* 'key2.foo': 'qwerty',
|
|
20
|
+
* Identifier: identifier
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function getResultObj(jsonObject: any, identifier: string, propertiesToReturn: string[]): {
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* This finds the value of the jsonObject at the path. Path is delimited by '.'.
|
|
29
|
+
*
|
|
30
|
+
* For example, jsonObject = {
|
|
31
|
+
* key1: 'abc',
|
|
32
|
+
* key2: {
|
|
33
|
+
* foo: 'qwerty',
|
|
34
|
+
* bar: 'data',
|
|
35
|
+
* }
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* If path is 'key1', then it will return 'abc'.
|
|
39
|
+
* If path is 'key2.foo', then it will return 'qwerty'.
|
|
40
|
+
* If path is 'key2', then it will return the object:
|
|
41
|
+
* {
|
|
42
|
+
* foo: 'qwerty',
|
|
43
|
+
* bar: 'data',
|
|
44
|
+
* }
|
|
45
|
+
*
|
|
46
|
+
* If the path is not found, an Error will be thrown stating which token is missing.
|
|
47
|
+
*/
|
|
48
|
+
export declare function findJsonValue(jsonObject: any, path: string): any;
|
package/lib/util/json.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getResultObj = getResultObj;
|
|
4
|
+
exports.findJsonValue = findJsonValue;
|
|
5
|
+
/**
|
|
6
|
+
* This gets the values of the jsonObject at the paths specified in propertiesToReturn.
|
|
7
|
+
*
|
|
8
|
+
* For example, jsonObject = {
|
|
9
|
+
* key1: 'abc',
|
|
10
|
+
* key2: {
|
|
11
|
+
* foo: 'qwerty',
|
|
12
|
+
* bar: 'data',
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* propertiesToReturn = ['key1', 'key2.foo'];
|
|
17
|
+
*
|
|
18
|
+
* The returned object is:
|
|
19
|
+
*
|
|
20
|
+
* ```
|
|
21
|
+
* {
|
|
22
|
+
* key1: 'abc',
|
|
23
|
+
* 'key2.foo': 'qwerty',
|
|
24
|
+
* Identifier: identifier
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
function getResultObj(jsonObject, identifier, propertiesToReturn) {
|
|
29
|
+
const propsObj = {};
|
|
30
|
+
propertiesToReturn.forEach((propName) => {
|
|
31
|
+
Object.assign(propsObj, { [propName]: findJsonValue(jsonObject, propName) });
|
|
32
|
+
});
|
|
33
|
+
Object.assign(propsObj, { ['Identifier']: identifier });
|
|
34
|
+
return propsObj;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* This finds the value of the jsonObject at the path. Path is delimited by '.'.
|
|
38
|
+
*
|
|
39
|
+
* For example, jsonObject = {
|
|
40
|
+
* key1: 'abc',
|
|
41
|
+
* key2: {
|
|
42
|
+
* foo: 'qwerty',
|
|
43
|
+
* bar: 'data',
|
|
44
|
+
* }
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* If path is 'key1', then it will return 'abc'.
|
|
48
|
+
* If path is 'key2.foo', then it will return 'qwerty'.
|
|
49
|
+
* If path is 'key2', then it will return the object:
|
|
50
|
+
* {
|
|
51
|
+
* foo: 'qwerty',
|
|
52
|
+
* bar: 'data',
|
|
53
|
+
* }
|
|
54
|
+
*
|
|
55
|
+
* If the path is not found, an Error will be thrown stating which token is missing.
|
|
56
|
+
*/
|
|
57
|
+
function findJsonValue(jsonObject, path) {
|
|
58
|
+
const paths = path.split('.');
|
|
59
|
+
let obj = jsonObject;
|
|
60
|
+
paths.forEach(p => {
|
|
61
|
+
obj = obj[p];
|
|
62
|
+
if (obj === undefined) {
|
|
63
|
+
throw new TypeError(`Cannot read field ${path}. ${p} is not found.`);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return obj;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsb0NBT0M7QUF1QkQsc0NBVUM7QUEvREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFnQixZQUFZLENBQUMsVUFBZSxFQUFFLFVBQWtCLEVBQUUsa0JBQTRCO0lBQzVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFVBQWUsRUFBRSxJQUFZO0lBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDO0lBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGdldHMgdGhlIHZhbHVlcyBvZiB0aGUganNvbk9iamVjdCBhdCB0aGUgcGF0aHMgc3BlY2lmaWVkIGluIHByb3BlcnRpZXNUb1JldHVybi5cbiAqXG4gKiBGb3IgZXhhbXBsZSwganNvbk9iamVjdCA9IHtcbiAqICAga2V5MTogJ2FiYycsXG4gKiAgIGtleTI6IHtcbiAqICAgICBmb286ICdxd2VydHknLFxuICogICAgIGJhcjogJ2RhdGEnLFxuICogICB9XG4gKiB9XG4gKlxuICogcHJvcGVydGllc1RvUmV0dXJuID0gWydrZXkxJywgJ2tleTIuZm9vJ107XG4gKlxuICogVGhlIHJldHVybmVkIG9iamVjdCBpczpcbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAga2V5MTogJ2FiYycsXG4gKiAgICdrZXkyLmZvbyc6ICdxd2VydHknLFxuICogICBJZGVudGlmaWVyOiBpZGVudGlmaWVyXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdE9iaihqc29uT2JqZWN0OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZywgcHJvcGVydGllc1RvUmV0dXJuOiBzdHJpbmdbXSk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgY29uc3QgcHJvcHNPYmogPSB7fTtcbiAgcHJvcGVydGllc1RvUmV0dXJuLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG4gICAgT2JqZWN0LmFzc2lnbihwcm9wc09iaiwgeyBbcHJvcE5hbWVdOiBmaW5kSnNvblZhbHVlKGpzb25PYmplY3QsIHByb3BOYW1lKSB9KTtcbiAgfSk7XG4gIE9iamVjdC5hc3NpZ24ocHJvcHNPYmosIHsgWydJZGVudGlmaWVyJ106IGlkZW50aWZpZXIgfSk7XG4gIHJldHVybiBwcm9wc09iajtcbn1cblxuLyoqXG4gKiBUaGlzIGZpbmRzIHRoZSB2YWx1ZSBvZiB0aGUganNvbk9iamVjdCBhdCB0aGUgcGF0aC4gIFBhdGggaXMgZGVsaW1pdGVkIGJ5ICcuJy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwganNvbk9iamVjdCA9IHtcbiAqICAga2V5MTogJ2FiYycsXG4gKiAgIGtleTI6IHtcbiAqICAgICBmb286ICdxd2VydHknLFxuICogICAgIGJhcjogJ2RhdGEnLFxuICogICB9XG4gKiB9XG4gKlxuICogSWYgcGF0aCBpcyAna2V5MScsIHRoZW4gaXQgd2lsbCByZXR1cm4gJ2FiYycuXG4gKiBJZiBwYXRoIGlzICdrZXkyLmZvbycsIHRoZW4gaXQgd2lsbCByZXR1cm4gJ3F3ZXJ0eScuXG4gKiBJZiBwYXRoIGlzICdrZXkyJywgdGhlbiBpdCB3aWxsIHJldHVybiB0aGUgb2JqZWN0OlxuICoge1xuICogICBmb286ICdxd2VydHknLFxuICogICBiYXI6ICdkYXRhJyxcbiAqIH1cbiAqXG4gKiBJZiB0aGUgcGF0aCBpcyBub3QgZm91bmQsIGFuIEVycm9yIHdpbGwgYmUgdGhyb3duIHN0YXRpbmcgd2hpY2ggdG9rZW4gaXMgbWlzc2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRKc29uVmFsdWUoanNvbk9iamVjdDogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgbGV0IG9iaiA9IGpzb25PYmplY3Q7XG4gIHBhdGhzLmZvckVhY2gocCA9PiB7XG4gICAgb2JqID0gb2JqW3BdO1xuICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHJlYWQgZmllbGQgJHtwYXRofS4gJHtwfSBpcyBub3QgZm91bmQuYCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9iajtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Obj } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Return a new object by adding missing keys into another object
|
|
4
|
+
*/
|
|
5
|
+
export declare function applyDefaults(hash: any, defaults: any): any;
|
|
6
|
+
/**
|
|
7
|
+
* Return whether the given parameter is an empty object or empty list.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isEmpty(x: any): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Deep clone a tree of objects, lists or scalars
|
|
12
|
+
*
|
|
13
|
+
* Does not support cycles.
|
|
14
|
+
*/
|
|
15
|
+
export declare function deepClone(x: any): any;
|
|
16
|
+
/**
|
|
17
|
+
* Map over an object, treating it as a dictionary
|
|
18
|
+
*/
|
|
19
|
+
export declare function mapObject<T, U>(x: Obj<T>, fn: (key: string, value: T) => U): U[];
|
|
20
|
+
/**
|
|
21
|
+
* Construct an object from a list of (k, v) pairs
|
|
22
|
+
*/
|
|
23
|
+
export declare function makeObject<T>(pairs: Array<[string, T]>): Obj<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Deep get a value from a tree of nested objects
|
|
26
|
+
*
|
|
27
|
+
* Returns undefined if any part of the path was unset or
|
|
28
|
+
* not an object.
|
|
29
|
+
*/
|
|
30
|
+
export declare function deepGet(x: any, path: string[]): any;
|
|
31
|
+
/**
|
|
32
|
+
* Deep set a value in a tree of nested objects
|
|
33
|
+
*
|
|
34
|
+
* Throws an error if any part of the path is not an object.
|
|
35
|
+
*/
|
|
36
|
+
export declare function deepSet(x: any, path: string[], value: any): void;
|
|
37
|
+
/**
|
|
38
|
+
* Recursively merge objects together
|
|
39
|
+
*
|
|
40
|
+
* The leftmost object is mutated and returned. Arrays are not merged
|
|
41
|
+
* but overwritten just like scalars.
|
|
42
|
+
*
|
|
43
|
+
* If an object is merged into a non-object, the non-object is lost.
|
|
44
|
+
*/
|
|
45
|
+
export declare function deepMerge(...objects: Array<Obj<any> | undefined>): Obj<any>;
|
|
46
|
+
/**
|
|
47
|
+
* Splits the given object into two, such that:
|
|
48
|
+
*
|
|
49
|
+
* 1. The size of the first object (after stringified in UTF-8) is less than or equal to the provided size limit.
|
|
50
|
+
* 2. Merging the two objects results in the original one.
|
|
51
|
+
*/
|
|
52
|
+
export declare function splitBySize(data: any, maxSizeBytes: number): [any, any];
|
|
53
|
+
type Exclude = {
|
|
54
|
+
[key: string]: Exclude | true;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* This function transforms all keys (recursively) in the provided `val` object.
|
|
58
|
+
*
|
|
59
|
+
* @param val The object whose keys need to be transformed.
|
|
60
|
+
* @param transform The function that will be applied to each key.
|
|
61
|
+
* @param exclude The keys that will not be transformed and copied to output directly
|
|
62
|
+
* @returns A new object with the same values as `val`, but with all keys transformed according to `transform`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function transformObjectKeys(val: any, transform: (str: string) => string, exclude?: Exclude): any;
|
|
65
|
+
export {};
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyDefaults = applyDefaults;
|
|
4
|
+
exports.isEmpty = isEmpty;
|
|
5
|
+
exports.deepClone = deepClone;
|
|
6
|
+
exports.mapObject = mapObject;
|
|
7
|
+
exports.makeObject = makeObject;
|
|
8
|
+
exports.deepGet = deepGet;
|
|
9
|
+
exports.deepSet = deepSet;
|
|
10
|
+
exports.deepMerge = deepMerge;
|
|
11
|
+
exports.splitBySize = splitBySize;
|
|
12
|
+
exports.transformObjectKeys = transformObjectKeys;
|
|
13
|
+
const types_1 = require("./types");
|
|
14
|
+
const toolkit_error_1 = require("../api/toolkit-error");
|
|
15
|
+
/**
|
|
16
|
+
* Return a new object by adding missing keys into another object
|
|
17
|
+
*/
|
|
18
|
+
function applyDefaults(hash, defaults) {
|
|
19
|
+
const result = {};
|
|
20
|
+
Object.keys(hash).forEach(k => result[k] = hash[k]);
|
|
21
|
+
Object.keys(defaults)
|
|
22
|
+
.filter(k => !(k in result))
|
|
23
|
+
.forEach(k => result[k] = defaults[k]);
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Return whether the given parameter is an empty object or empty list.
|
|
28
|
+
*/
|
|
29
|
+
function isEmpty(x) {
|
|
30
|
+
if (x == null) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if ((0, types_1.isArray)(x)) {
|
|
34
|
+
return x.length === 0;
|
|
35
|
+
}
|
|
36
|
+
return Object.keys(x).length === 0;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Deep clone a tree of objects, lists or scalars
|
|
40
|
+
*
|
|
41
|
+
* Does not support cycles.
|
|
42
|
+
*/
|
|
43
|
+
function deepClone(x) {
|
|
44
|
+
if (typeof x === 'undefined') {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
if (x === null) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
if ((0, types_1.isArray)(x)) {
|
|
51
|
+
return x.map(deepClone);
|
|
52
|
+
}
|
|
53
|
+
if ((0, types_1.isObject)(x)) {
|
|
54
|
+
return makeObject(mapObject(x, (k, v) => [k, deepClone(v)]));
|
|
55
|
+
}
|
|
56
|
+
return x;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Map over an object, treating it as a dictionary
|
|
60
|
+
*/
|
|
61
|
+
function mapObject(x, fn) {
|
|
62
|
+
const ret = [];
|
|
63
|
+
Object.keys(x).forEach(key => {
|
|
64
|
+
ret.push(fn(key, x[key]));
|
|
65
|
+
});
|
|
66
|
+
return ret;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Construct an object from a list of (k, v) pairs
|
|
70
|
+
*/
|
|
71
|
+
function makeObject(pairs) {
|
|
72
|
+
const ret = {};
|
|
73
|
+
for (const pair of pairs) {
|
|
74
|
+
ret[pair[0]] = pair[1];
|
|
75
|
+
}
|
|
76
|
+
return ret;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Deep get a value from a tree of nested objects
|
|
80
|
+
*
|
|
81
|
+
* Returns undefined if any part of the path was unset or
|
|
82
|
+
* not an object.
|
|
83
|
+
*/
|
|
84
|
+
function deepGet(x, path) {
|
|
85
|
+
path = path.slice();
|
|
86
|
+
while (path.length > 0 && (0, types_1.isObject)(x)) {
|
|
87
|
+
const key = path.shift();
|
|
88
|
+
x = x[key];
|
|
89
|
+
}
|
|
90
|
+
return path.length === 0 ? x : undefined;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Deep set a value in a tree of nested objects
|
|
94
|
+
*
|
|
95
|
+
* Throws an error if any part of the path is not an object.
|
|
96
|
+
*/
|
|
97
|
+
function deepSet(x, path, value) {
|
|
98
|
+
path = path.slice();
|
|
99
|
+
if (path.length === 0) {
|
|
100
|
+
throw new toolkit_error_1.ToolkitError('Path may not be empty');
|
|
101
|
+
}
|
|
102
|
+
while (path.length > 1 && (0, types_1.isObject)(x)) {
|
|
103
|
+
const key = path.shift();
|
|
104
|
+
if (isPrototypePollutingKey(key)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (!(key in x)) {
|
|
108
|
+
x[key] = {};
|
|
109
|
+
}
|
|
110
|
+
x = x[key];
|
|
111
|
+
}
|
|
112
|
+
if (!(0, types_1.isObject)(x)) {
|
|
113
|
+
throw new toolkit_error_1.ToolkitError(`Expected an object, got '${x}'`);
|
|
114
|
+
}
|
|
115
|
+
const finalKey = path[0];
|
|
116
|
+
if (isPrototypePollutingKey(finalKey)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (value !== undefined) {
|
|
120
|
+
x[finalKey] = value;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
delete x[finalKey];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Helper to detect prototype polluting keys
|
|
128
|
+
*
|
|
129
|
+
* A key matching this, MUST NOT be used in an assignment.
|
|
130
|
+
* Use this to check user-input.
|
|
131
|
+
*/
|
|
132
|
+
function isPrototypePollutingKey(key) {
|
|
133
|
+
return key === '__proto__' || key === 'constructor' || key === 'prototype';
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Recursively merge objects together
|
|
137
|
+
*
|
|
138
|
+
* The leftmost object is mutated and returned. Arrays are not merged
|
|
139
|
+
* but overwritten just like scalars.
|
|
140
|
+
*
|
|
141
|
+
* If an object is merged into a non-object, the non-object is lost.
|
|
142
|
+
*/
|
|
143
|
+
function deepMerge(...objects) {
|
|
144
|
+
function mergeOne(target, source) {
|
|
145
|
+
for (const key of Object.keys(source)) {
|
|
146
|
+
if (isPrototypePollutingKey(key)) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const value = source[key];
|
|
150
|
+
if ((0, types_1.isObject)(value)) {
|
|
151
|
+
if (!(0, types_1.isObject)(target[key])) {
|
|
152
|
+
target[key] = {};
|
|
153
|
+
} // Overwrite on purpose
|
|
154
|
+
mergeOne(target[key], value);
|
|
155
|
+
}
|
|
156
|
+
else if (typeof value !== 'undefined') {
|
|
157
|
+
target[key] = value;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const others = objects.filter(x => x != null);
|
|
162
|
+
if (others.length === 0) {
|
|
163
|
+
return {};
|
|
164
|
+
}
|
|
165
|
+
const into = others.splice(0, 1)[0];
|
|
166
|
+
others.forEach(other => mergeOne(into, other));
|
|
167
|
+
return into;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Splits the given object into two, such that:
|
|
171
|
+
*
|
|
172
|
+
* 1. The size of the first object (after stringified in UTF-8) is less than or equal to the provided size limit.
|
|
173
|
+
* 2. Merging the two objects results in the original one.
|
|
174
|
+
*/
|
|
175
|
+
function splitBySize(data, maxSizeBytes) {
|
|
176
|
+
if (maxSizeBytes < 2) {
|
|
177
|
+
// It's impossible to fit anything in the first object
|
|
178
|
+
return [undefined, data];
|
|
179
|
+
}
|
|
180
|
+
const entries = Object.entries(data);
|
|
181
|
+
return recurse(0, 0);
|
|
182
|
+
function recurse(index, runningTotalSize) {
|
|
183
|
+
if (index >= entries.length) {
|
|
184
|
+
// Everything fits in the first object
|
|
185
|
+
return [data, undefined];
|
|
186
|
+
}
|
|
187
|
+
const size = runningTotalSize + entrySize(entries[index]);
|
|
188
|
+
return (size > maxSizeBytes) ? cutAt(index) : recurse(index + 1, size);
|
|
189
|
+
}
|
|
190
|
+
function entrySize(entry) {
|
|
191
|
+
return Buffer.byteLength(JSON.stringify(Object.fromEntries([entry])));
|
|
192
|
+
}
|
|
193
|
+
function cutAt(index) {
|
|
194
|
+
return [
|
|
195
|
+
Object.fromEntries(entries.slice(0, index)),
|
|
196
|
+
Object.fromEntries(entries.slice(index)),
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* This function transforms all keys (recursively) in the provided `val` object.
|
|
202
|
+
*
|
|
203
|
+
* @param val The object whose keys need to be transformed.
|
|
204
|
+
* @param transform The function that will be applied to each key.
|
|
205
|
+
* @param exclude The keys that will not be transformed and copied to output directly
|
|
206
|
+
* @returns A new object with the same values as `val`, but with all keys transformed according to `transform`.
|
|
207
|
+
*/
|
|
208
|
+
function transformObjectKeys(val, transform, exclude = {}) {
|
|
209
|
+
if (val == null || typeof val !== 'object') {
|
|
210
|
+
return val;
|
|
211
|
+
}
|
|
212
|
+
if (Array.isArray(val)) {
|
|
213
|
+
// For arrays we just pass parent's exclude object directly
|
|
214
|
+
// since it makes no sense to specify different exclude options for each array element
|
|
215
|
+
return val.map((input) => transformObjectKeys(input, transform, exclude));
|
|
216
|
+
}
|
|
217
|
+
const ret = {};
|
|
218
|
+
for (const [k, v] of Object.entries(val)) {
|
|
219
|
+
const childExclude = exclude[k];
|
|
220
|
+
if (childExclude === true) {
|
|
221
|
+
// we don't transform this object if the key is specified in exclude
|
|
222
|
+
ret[transform(k)] = v;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
ret[transform(k)] = transformObjectKeys(v, transform, childExclude);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return ret;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxzQ0FVQztBQUtELDBCQVFDO0FBT0QsOEJBY0M7QUFLRCw4QkFNQztBQUtELGdDQU1DO0FBUUQsMEJBUUM7QUFPRCwwQkFtQ0M7QUFvQkQsOEJBNkJDO0FBUUQsa0NBNEJDO0FBWUQsa0RBb0JDO0FBdlBELG1DQUE0QztBQUM1Qyx3REFBb0Q7QUFFcEQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsSUFBUyxFQUFFLFFBQWE7SUFDcEQsTUFBTSxNQUFNLEdBQVEsRUFBRyxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7U0FDM0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxDQUFNO0lBQzVCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxJQUFBLGVBQU8sRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxD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UUFBUSxFQUFFLENBQUM7UUFDM0MsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsMkRBQTJEO1FBQzNELHNGQUFzRjtRQUN0RixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQixvRUFBb0U7WUFDcEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPYmogfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi9hcGkvdG9vbGtpdC1lcnJvcic7XG5cbi8qKlxuICogUmV0dXJuIGEgbmV3IG9iamVjdCBieSBhZGRpbmcgbWlzc2luZyBrZXlzIGludG8gYW5vdGhlciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RGVmYXVsdHMoaGFzaDogYW55LCBkZWZhdWx0czogYW55KSB7XG4gIGNvbnN0IHJlc3VsdDogYW55ID0geyB9O1xuXG4gIE9iamVjdC5rZXlzKGhhc2gpLmZvckVhY2goayA9PiByZXN1bHRba10gPSBoYXNoW2tdKTtcblxuICBPYmplY3Qua2V5cyhkZWZhdWx0cylcbiAgICAuZmlsdGVyKGsgPT4gIShrIGluIHJlc3VsdCkpXG4gICAgLmZvckVhY2goayA9PiByZXN1bHRba10gPSBkZWZhdWx0c1trXSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGlzIGFuIGVtcHR5IG9iamVjdCBvciBlbXB0eSBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh4OiBhbnkpIHtcbiAgaWYgKHggPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMDtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAwO1xufVxuXG4vKipcbiAqIERlZXAgY2xvbmUgYSB0cmVlIG9mIG9iamVjdHMsIGxpc3RzIG9yIHNjYWxhcnNcbiAqXG4gKiBEb2VzIG5vdCBzdXBwb3J0IGN5Y2xlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDbG9uZSh4OiBhbnkpOiBhbnkge1xuICBpZiAodHlwZW9mIHggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoeCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChpc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGRlZXBDbG9uZSk7XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHgpKSB7XG4gICAgcmV0dXJuIG1ha2VPYmplY3QobWFwT2JqZWN0KHgsIChrLCB2KSA9PiBbaywgZGVlcENsb25lKHYpXSBhcyBbc3RyaW5nLCBhbnldKSk7XG4gIH1cbiAgcmV0dXJuIHg7XG59XG5cbi8qKlxuICogTWFwIG92ZXIgYW4gb2JqZWN0LCB0cmVhdGluZyBpdCBhcyBhIGRpY3Rpb25hcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcE9iamVjdDxULCBVPih4OiBPYmo8VD4sIGZuOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKSA9PiBVKTogVVtdIHtcbiAgY29uc3QgcmV0OiBVW10gPSBbXTtcbiAgT2JqZWN0LmtleXMoeCkuZm9yRWFjaChrZXkgPT4ge1xuICAgIHJldC5wdXNoKGZuKGtleSwgeFtrZXldKSk7XG4gIH0pO1xuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBhbiBvYmplY3QgZnJvbSBhIGxpc3Qgb2YgKGssIHYpIHBhaXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlT2JqZWN0PFQ+KHBhaXJzOiBBcnJheTxbc3RyaW5nLCBUXT4pOiBPYmo8VD4ge1xuICBjb25zdCByZXQ6IE9iajxUPiA9IHt9O1xuICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICByZXRbcGFpclswXV0gPSBwYWlyWzFdO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogRGVlcCBnZXQgYSB2YWx1ZSBmcm9tIGEgdHJlZSBvZiBuZXN0ZWQgb2JqZWN0c1xuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIGlmIGFueSBwYXJ0IG9mIHRoZSBwYXRoIHdhcyB1bnNldCBvclxuICogbm90IGFuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBHZXQoeDogYW55LCBwYXRoOiBzdHJpbmdbXSk6IGFueSB7XG4gIHBhdGggPSBwYXRoLnNsaWNlKCk7XG5cbiAgd2hpbGUgKHBhdGgubGVuZ3RoID4gMCAmJiBpc09iamVjdCh4KSkge1xuICAgIGNvbnN0IGtleSA9IHBhdGguc2hpZnQoKSE7XG4gICAgeCA9IHhba2V5XTtcbiAgfVxuICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyB4IDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERlZXAgc2V0IGEgdmFsdWUgaW4gYSB0cmVlIG9mIG5lc3RlZCBvYmplY3RzXG4gKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGFueSBwYXJ0IG9mIHRoZSBwYXRoIGlzIG5vdCBhbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwU2V0KHg6IGFueSwgcGF0aDogc3RyaW5nW10sIHZhbHVlOiBhbnkpIHtcbiAgcGF0aCA9IHBhdGguc2xpY2UoKTtcblxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdQYXRoIG1heSBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIHdoaWxlIChwYXRoLmxlbmd0aCA+IDEgJiYgaXNPYmplY3QoeCkpIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoLnNoaWZ0KCkhO1xuXG4gICAgaWYgKGlzUHJvdG90eXBlUG9sbHV0aW5nS2V5KGtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghKGtleSBpbiB4KSkge1xuICAgICAgeFtrZXldID0ge307XG4gICAgfVxuICAgIHggPSB4W2tleV07XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KHgpKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgRXhwZWN0ZWQgYW4gb2JqZWN0LCBnb3QgJyR7eH0nYCk7XG4gIH1cblxuICBjb25zdCBmaW5hbEtleSA9IHBhdGhbMF07XG5cbiAgaWYgKGlzUHJvdG90eXBlUG9sbHV0aW5nS2V5KGZpbmFsS2V5KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgeFtmaW5hbEtleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgeFtmaW5hbEtleV07XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gZGV0ZWN0IHByb3RvdHlwZSBwb2xsdXRpbmcga2V5c1xuICpcbiAqIEEga2V5IG1hdGNoaW5nIHRoaXMsIE1VU1QgTk9UIGJlIHVzZWQgaW4gYW4gYXNzaWdubWVudC5cbiAqIFVzZSB0aGlzIHRvIGNoZWNrIHVzZXItaW5wdXQuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlUG9sbHV0aW5nS2V5KGtleTogc3RyaW5nKSB7XG4gIHJldHVybiBrZXkgPT09ICdfX3Byb3RvX18nIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCBrZXkgPT09ICdwcm90b3R5cGUnO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgdG9nZXRoZXJcbiAqXG4gKiBUaGUgbGVmdG1vc3Qgb2JqZWN0IGlzIG11dGF0ZWQgYW5kIHJldHVybmVkLiBBcnJheXMgYXJlIG5vdCBtZXJnZWRcbiAqIGJ1dCBvdmVyd3JpdHRlbiBqdXN0IGxpa2Ugc2NhbGFycy5cbiAqXG4gKiBJZiBhbiBvYmplY3QgaXMgbWVyZ2VkIGludG8gYSBub24tb2JqZWN0LCB0aGUgbm9uLW9iamVjdCBpcyBsb3N0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcE1lcmdlKC4uLm9iamVjdHM6IEFycmF5PE9iajxhbnk+IHwgdW5kZWZpbmVkPikge1xuICBmdW5jdGlvbiBtZXJnZU9uZSh0YXJnZXQ6IE9iajxhbnk+LCBzb3VyY2U6IE9iajxhbnk+KSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc291cmNlKSkge1xuICAgICAgaWYgKGlzUHJvdG90eXBlUG9sbHV0aW5nS2V5KGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0YXJnZXRba2V5XSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHt9O1xuICAgICAgICB9IC8vIE92ZXJ3cml0ZSBvbiBwdXJwb3NlXG4gICAgICAgIG1lcmdlT25lKHRhcmdldFtrZXldLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBvdGhlcnMgPSBvYmplY3RzLmZpbHRlcih4ID0+IHggIT0gbnVsbCkgYXMgQXJyYXk8T2JqPGFueT4+O1xuXG4gIGlmIChvdGhlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGNvbnN0IGludG8gPSBvdGhlcnMuc3BsaWNlKDAsIDEpWzBdO1xuXG4gIG90aGVycy5mb3JFYWNoKG90aGVyID0+IG1lcmdlT25lKGludG8sIG90aGVyKSk7XG4gIHJldHVybiBpbnRvO1xufVxuXG4vKipcbiAqIFNwbGl0cyB0aGUgZ2l2ZW4gb2JqZWN0IGludG8gdHdvLCBzdWNoIHRoYXQ6XG4gKlxuICogMS4gVGhlIHNpemUgb2YgdGhlIGZpcnN0IG9iamVjdCAoYWZ0ZXIgc3RyaW5naWZpZWQgaW4gVVRGLTgpIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcHJvdmlkZWQgc2l6ZSBsaW1pdC5cbiAqIDIuIE1lcmdpbmcgdGhlIHR3byBvYmplY3RzIHJlc3VsdHMgaW4gdGhlIG9yaWdpbmFsIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QnlTaXplKGRhdGE6IGFueSwgbWF4U2l6ZUJ5dGVzOiBudW1iZXIpOiBbYW55LCBhbnldIHtcbiAgaWYgKG1heFNpemVCeXRlcyA8IDIpIHtcbiAgICAvLyBJdCdzIGltcG9zc2libGUgdG8gZml0IGFueXRoaW5nIGluIHRoZSBmaXJzdCBvYmplY3RcbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgZGF0YV07XG4gIH1cbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGRhdGEpO1xuICByZXR1cm4gcmVjdXJzZSgwLCAwKTtcblxuICBmdW5jdGlvbiByZWN1cnNlKGluZGV4OiBudW1iZXIsIHJ1bm5pbmdUb3RhbFNpemU6IG51bWJlcik6IFthbnksIGFueV0ge1xuICAgIGlmIChpbmRleCA+PSBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgLy8gRXZlcnl0aGluZyBmaXRzIGluIHRoZSBmaXJzdCBvYmplY3RcbiAgICAgIHJldHVybiBbZGF0YSwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBjb25zdCBzaXplID0gcnVubmluZ1RvdGFsU2l6ZSArIGVudHJ5U2l6ZShlbnRyaWVzW2luZGV4XSk7XG4gICAgcmV0dXJuIChzaXplID4gbWF4U2l6ZUJ5dGVzKSA/IGN1dEF0KGluZGV4KSA6IHJlY3Vyc2UoaW5kZXggKyAxLCBzaXplKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVudHJ5U2l6ZShlbnRyeTogW3N0cmluZywgdW5rbm93bl0pIHtcbiAgICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmZyb21FbnRyaWVzKFtlbnRyeV0pKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjdXRBdChpbmRleDogbnVtYmVyKTogW2FueSwgYW55XSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLnNsaWNlKDAsIGluZGV4KSksXG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5zbGljZShpbmRleCkpLFxuICAgIF07XG4gIH1cbn1cblxudHlwZSBFeGNsdWRlID0geyBba2V5OiBzdHJpbmddOiBFeGNsdWRlIHwgdHJ1ZSB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gdHJhbnNmb3JtcyBhbGwga2V5cyAocmVjdXJzaXZlbHkpIGluIHRoZSBwcm92aWRlZCBgdmFsYCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHZhbCBUaGUgb2JqZWN0IHdob3NlIGtleXMgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZC5cbiAqIEBwYXJhbSB0cmFuc2Zvcm0gVGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2gga2V5LlxuICogQHBhcmFtIGV4Y2x1ZGUgVGhlIGtleXMgdGhhdCB3aWxsIG5vdCBiZSB0cmFuc2Zvcm1lZCBhbmQgY29waWVkIHRvIG91dHB1dCBkaXJlY3RseVxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWVzIGFzIGB2YWxgLCBidXQgd2l0aCBhbGwga2V5cyB0cmFuc2Zvcm1lZCBhY2NvcmRpbmcgdG8gYHRyYW5zZm9ybWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1PYmplY3RLZXlzKHZhbDogYW55LCB0cmFuc2Zvcm06IChzdHI6IHN0cmluZykgPT4gc3RyaW5nLCBleGNsdWRlOiBFeGNsdWRlID0ge30pOiBhbnkge1xuICBpZiAodmFsID09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAvLyBGb3IgYXJyYXlzIHdlIGp1c3QgcGFzcyBwYXJlbnQncyBleGNsdWRlIG9iamVjdCBkaXJlY3RseVxuICAgIC8vIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHNwZWNpZnkgZGlmZmVyZW50IGV4Y2x1ZGUgb3B0aW9ucyBmb3IgZWFjaCBhcnJheSBlbGVtZW50XG4gICAgcmV0dXJuIHZhbC5tYXAoKGlucHV0OiBhbnkpID0+IHRyYW5zZm9ybU9iamVjdEtleXMoaW5wdXQsIHRyYW5zZm9ybSwgZXhjbHVkZSkpO1xuICB9XG4gIGNvbnN0IHJldDogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsKSkge1xuICAgIGNvbnN0IGNoaWxkRXhjbHVkZSA9IGV4Y2x1ZGVba107XG4gICAgaWYgKGNoaWxkRXhjbHVkZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gd2UgZG9uJ3QgdHJhbnNmb3JtIHRoaXMgb2JqZWN0IGlmIHRoZSBrZXkgaXMgc3BlY2lmaWVkIGluIGV4Y2x1ZGVcbiAgICAgIHJldFt0cmFuc2Zvcm0oayldID0gdjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W3RyYW5zZm9ybShrKV0gPSB0cmFuc2Zvcm1PYmplY3RLZXlzKHYsIHRyYW5zZm9ybSwgY2hpbGRFeGNsdWRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.displayVersion = displayVersion;
|
|
4
|
+
exports.isDeveloperBuild = isDeveloperBuild;
|
|
5
|
+
exports.versionNumber = versionNumber;
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const directories_1 = require("./directories");
|
|
8
|
+
function displayVersion() {
|
|
9
|
+
return `${versionNumber()} (build ${commit()})`;
|
|
10
|
+
}
|
|
11
|
+
function isDeveloperBuild() {
|
|
12
|
+
return versionNumber() === '0.0.0';
|
|
13
|
+
}
|
|
14
|
+
function versionNumber() {
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
16
|
+
return require(path.join((0, directories_1.bundledPackageRootDir)(__dirname), 'package.json')).version.replace(/\+[0-9a-f]+$/, '');
|
|
17
|
+
}
|
|
18
|
+
function commit() {
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
20
|
+
return require(path.join((0, directories_1.bundledPackageRootDir)(__dirname), 'build-info.json')).commit;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFja2FnZS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esd0NBRUM7QUFFRCw0Q0FFQztBQUVELHNDQUdDO0FBZEQsNkJBQTZCO0FBQzdCLCtDQUFzRDtBQUV0RCxTQUFnQixjQUFjO0lBQzVCLE9BQU8sR0FBRyxhQUFhLEVBQUUsV0FBVyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFnQixnQkFBZ0I7SUFDOUIsT0FBTyxhQUFhLEVBQUUsS0FBSyxPQUFPLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQWdCLGFBQWE7SUFDM0IsaUVBQWlFO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSxtQ0FBcUIsRUFBQyxTQUFTLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xILENBQUM7QUFFRCxTQUFTLE1BQU07SUFDYixpRUFBaUU7SUFDakUsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLG1DQUFxQixFQUFDLFNBQVMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBidW5kbGVkUGFja2FnZVJvb3REaXIgfSBmcm9tICcuL2RpcmVjdG9yaWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlWZXJzaW9uKCkge1xuICByZXR1cm4gYCR7dmVyc2lvbk51bWJlcigpfSAoYnVpbGQgJHtjb21taXQoKX0pYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGV2ZWxvcGVyQnVpbGQoKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJzaW9uTnVtYmVyKCkgPT09ICcwLjAuMCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJzaW9uTnVtYmVyKCk6IHN0cmluZyB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gIHJldHVybiByZXF1aXJlKHBhdGguam9pbihidW5kbGVkUGFja2FnZVJvb3REaXIoX19kaXJuYW1lKSwgJ3BhY2thZ2UuanNvbicpKS52ZXJzaW9uLnJlcGxhY2UoL1xcK1swLTlhLWZdKyQvLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdCgpOiBzdHJpbmcge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICByZXR1cm4gcmVxdWlyZShwYXRoLmpvaW4oYnVuZGxlZFBhY2thZ2VSb290RGlyKF9fZGlybmFtZSksICdidWlsZC1pbmZvLmpzb24nKSkuY29tbWl0O1xufVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parallelPromises = parallelPromises;
|
|
4
|
+
/**
|
|
5
|
+
* Run a number of promise generators with max parallelism
|
|
6
|
+
*
|
|
7
|
+
* Order is not maintained between the input and output.
|
|
8
|
+
*/
|
|
9
|
+
async function parallelPromises(n, promises) {
|
|
10
|
+
const ret = new Array();
|
|
11
|
+
let count = 0;
|
|
12
|
+
let error;
|
|
13
|
+
const queue = [...promises];
|
|
14
|
+
return new Promise((ok, ko) => {
|
|
15
|
+
tick();
|
|
16
|
+
function tick() {
|
|
17
|
+
if (count === 0 && error) {
|
|
18
|
+
ko(error);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (count === 0 && queue.length === 0) {
|
|
22
|
+
ok(ret);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
while (count < n && queue.length > 0 && !error) {
|
|
26
|
+
const next = queue.shift();
|
|
27
|
+
if (next !== undefined) {
|
|
28
|
+
start(next);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function start(fn) {
|
|
33
|
+
count += 1;
|
|
34
|
+
fn()
|
|
35
|
+
.then((result) => {
|
|
36
|
+
ret.push(result);
|
|
37
|
+
})
|
|
38
|
+
.catch((e) => {
|
|
39
|
+
error = e;
|
|
40
|
+
})
|
|
41
|
+
.finally(() => {
|
|
42
|
+
count -= 1;
|
|
43
|
+
tick();
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwYXJhbGxlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLDRDQTBDQztBQS9DRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUFJLENBQVMsRUFBRSxRQUFpQztJQUNwRixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFDO0lBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksS0FBd0IsQ0FBQztJQUM3QixNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFFNUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUM1QixJQUFJLEVBQUUsQ0FBQztRQUVQLFNBQVMsSUFBSTtZQUNYLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNWLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDUixPQUFPO1lBQ1QsQ0FBQztZQUVELE9BQU8sS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsU0FBUyxLQUFLLENBQUMsRUFBb0I7WUFDakMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNYLEVBQUUsRUFBRTtpQkFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDZixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDWCxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ1osQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDWCxJQUFJLEVBQUUsQ0FBQztZQUNULENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuIGEgbnVtYmVyIG9mIHByb21pc2UgZ2VuZXJhdG9ycyB3aXRoIG1heCBwYXJhbGxlbGlzbVxuICpcbiAqIE9yZGVyIGlzIG5vdCBtYWludGFpbmVkIGJldHdlZW4gdGhlIGlucHV0IGFuZCBvdXRwdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJhbGxlbFByb21pc2VzPEE+KG46IG51bWJlciwgcHJvbWlzZXM6IEFycmF5PCgpID0+IFByb21pc2U8QT4+KTogUHJvbWlzZTxBcnJheTxBPj4ge1xuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8QT4oKTtcbiAgbGV0IGNvdW50ID0gMDtcbiAgbGV0IGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgY29uc3QgcXVldWUgPSBbLi4ucHJvbWlzZXNdO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2ssIGtvKSA9PiB7XG4gICAgdGljaygpO1xuXG4gICAgZnVuY3Rpb24gdGljaygpIHtcbiAgICAgIGlmIChjb3VudCA9PT0gMCAmJiBlcnJvcikge1xuICAgICAgICBrbyhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb3VudCA9PT0gMCAmJiBxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgb2socmV0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY291bnQgPCBuICYmIHF1ZXVlLmxlbmd0aCA+IDAgJiYgIWVycm9yKSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RhcnQobmV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydChmbjogKCkgPT4gUHJvbWlzZTxBPikge1xuICAgICAgY291bnQgKz0gMTtcbiAgICAgIGZuKClcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJldC5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGNvdW50IC09IDE7XG4gICAgICAgICAgdGljaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stringify to YAML
|
|
3
|
+
*/
|
|
4
|
+
export declare function toYAML(obj: any): string;
|
|
5
|
+
/**
|
|
6
|
+
* Parse either YAML or JSON
|
|
7
|
+
*/
|
|
8
|
+
export declare function deserializeStructure(str: string): any;
|
|
9
|
+
/**
|
|
10
|
+
* Serialize to either YAML or JSON
|
|
11
|
+
*/
|
|
12
|
+
export declare function serializeStructure(object: any, json: boolean): string;
|
|
13
|
+
/**
|
|
14
|
+
* Load a YAML or JSON file from disk
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadStructuredFile(fileName: string): Promise<any>;
|
|
17
|
+
/**
|
|
18
|
+
* Remove any template elements that we don't want to show users.
|
|
19
|
+
*/
|
|
20
|
+
export declare function obscureTemplate(template?: any): any;
|
|
21
|
+
/**
|
|
22
|
+
* A JSON.stringify() replacer that converts Buffers into a string with information
|
|
23
|
+
* Use this if you plan to print out JSON stringified objects that may contain a Buffer.
|
|
24
|
+
* Without this, large buffers (think: Megabytes) will completely fill up the output
|
|
25
|
+
* and even crash the system.
|
|
26
|
+
*/
|
|
27
|
+
export declare function replacerBufferWithInfo(_key: any, value: any): any;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toYAML = toYAML;
|
|
4
|
+
exports.deserializeStructure = deserializeStructure;
|
|
5
|
+
exports.serializeStructure = serializeStructure;
|
|
6
|
+
exports.loadStructuredFile = loadStructuredFile;
|
|
7
|
+
exports.obscureTemplate = obscureTemplate;
|
|
8
|
+
exports.replacerBufferWithInfo = replacerBufferWithInfo;
|
|
9
|
+
const fs = require("fs/promises");
|
|
10
|
+
const bytes_1 = require("./bytes");
|
|
11
|
+
const yaml_cfn = require("./yaml-cfn");
|
|
12
|
+
/**
|
|
13
|
+
* Stringify to YAML
|
|
14
|
+
*/
|
|
15
|
+
function toYAML(obj) {
|
|
16
|
+
return yaml_cfn.serialize(obj);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse either YAML or JSON
|
|
20
|
+
*/
|
|
21
|
+
function deserializeStructure(str) {
|
|
22
|
+
return yaml_cfn.deserialize(str);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Serialize to either YAML or JSON
|
|
26
|
+
*/
|
|
27
|
+
function serializeStructure(object, json) {
|
|
28
|
+
if (json) {
|
|
29
|
+
return JSON.stringify(object, undefined, 2);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return toYAML(object);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load a YAML or JSON file from disk
|
|
37
|
+
*/
|
|
38
|
+
async function loadStructuredFile(fileName) {
|
|
39
|
+
const contents = await fs.readFile(fileName, { encoding: 'utf-8' });
|
|
40
|
+
return deserializeStructure(contents);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Remove any template elements that we don't want to show users.
|
|
44
|
+
*/
|
|
45
|
+
function obscureTemplate(template = {}) {
|
|
46
|
+
if (template.Rules) {
|
|
47
|
+
// see https://github.com/aws/aws-cdk/issues/17942
|
|
48
|
+
if (template.Rules.CheckBootstrapVersion) {
|
|
49
|
+
if (Object.keys(template.Rules).length > 1) {
|
|
50
|
+
delete template.Rules.CheckBootstrapVersion;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
delete template.Rules;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return template;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Detects a buffer that has been converted to a JSON-like object
|
|
61
|
+
* In Node, `Buffer`s have `toJSON()` method that converts the buffer
|
|
62
|
+
* into a JS object that can be JSON stringified.
|
|
63
|
+
* Unfortunately this conversion happens before the replacer is called,
|
|
64
|
+
* so normal means of detecting a `Buffer` objet don't work anymore.
|
|
65
|
+
* @see https://github.com/nodejs/node-v0.x-archive/issues/5110
|
|
66
|
+
*/
|
|
67
|
+
function isJsonBuffer(value) {
|
|
68
|
+
return typeof value === 'object'
|
|
69
|
+
&& 'type' in value
|
|
70
|
+
&& value.type === 'Buffer'
|
|
71
|
+
&& 'data' in value
|
|
72
|
+
&& Array.isArray(value.data);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A JSON.stringify() replacer that converts Buffers into a string with information
|
|
76
|
+
* Use this if you plan to print out JSON stringified objects that may contain a Buffer.
|
|
77
|
+
* Without this, large buffers (think: Megabytes) will completely fill up the output
|
|
78
|
+
* and even crash the system.
|
|
79
|
+
*/
|
|
80
|
+
function replacerBufferWithInfo(_key, value) {
|
|
81
|
+
if (isJsonBuffer(value)) {
|
|
82
|
+
return `<Buffer: ${(0, bytes_1.formatBytes)(value.data.length)}>`;
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2VyaWFsaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0JBRUM7QUFLRCxvREFFQztBQUtELGdEQU1DO0FBS0QsZ0RBR0M7QUFLRCwwQ0FhQztBQTJCRCx3REFLQztBQXJGRCxrQ0FBa0M7QUFDbEMsbUNBQXNDO0FBQ3RDLHVDQUF1QztBQUV2Qzs7R0FFRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxHQUFRO0lBQzdCLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxHQUFXO0lBQzlDLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsSUFBYTtJQUMzRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGtCQUFrQixDQUFDLFFBQWdCO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxXQUFnQixFQUFFO0lBQ2hELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLGtEQUFrRDtRQUNsRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDO1lBQzlDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFVO0lBSTlCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUTtXQUMzQixNQUFNLElBQUksS0FBSztXQUNmLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtXQUN2QixNQUFNLElBQUksS0FBSztXQUNmLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLElBQVMsRUFBRSxLQUFVO0lBQzFELElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEIsT0FBTyxZQUFZLElBQUEsbUJBQVcsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDdkQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCB7IGZvcm1hdEJ5dGVzIH0gZnJvbSAnLi9ieXRlcyc7XG5pbXBvcnQgKiBhcyB5YW1sX2NmbiBmcm9tICcuL3lhbWwtY2ZuJztcblxuLyoqXG4gKiBTdHJpbmdpZnkgdG8gWUFNTFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9ZQU1MKG9iajogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIHlhbWxfY2ZuLnNlcmlhbGl6ZShvYmopO1xufVxuXG4vKipcbiAqIFBhcnNlIGVpdGhlciBZQU1MIG9yIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplU3RydWN0dXJlKHN0cjogc3RyaW5nKTogYW55IHtcbiAgcmV0dXJuIHlhbWxfY2ZuLmRlc2VyaWFsaXplKHN0cik7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHRvIGVpdGhlciBZQU1MIG9yIEpTT05cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVN0cnVjdHVyZShvYmplY3Q6IGFueSwganNvbjogYm9vbGVhbikge1xuICBpZiAoanNvbikge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmplY3QsIHVuZGVmaW5lZCwgMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRvWUFNTChvYmplY3QpO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBhIFlBTUwgb3IgSlNPTiBmaWxlIGZyb20gZGlza1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFN0cnVjdHVyZWRGaWxlKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgY29udGVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlTmFtZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgcmV0dXJuIGRlc2VyaWFsaXplU3RydWN0dXJlKGNvbnRlbnRzKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYW55IHRlbXBsYXRlIGVsZW1lbnRzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBzaG93IHVzZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JzY3VyZVRlbXBsYXRlKHRlbXBsYXRlOiBhbnkgPSB7fSkge1xuICBpZiAodGVtcGxhdGUuUnVsZXMpIHtcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzk0MlxuICAgIGlmICh0ZW1wbGF0ZS5SdWxlcy5DaGVja0Jvb3RzdHJhcFZlcnNpb24pIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0ZW1wbGF0ZS5SdWxlcykubGVuZ3RoID4gMSkge1xuICAgICAgICBkZWxldGUgdGVtcGxhdGUuUnVsZXMuQ2hlY2tCb290c3RyYXBWZXJzaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRlbXBsYXRlLlJ1bGVzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0ZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIGEgYnVmZmVyIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgSlNPTi1saWtlIG9iamVjdFxuICogSW4gTm9kZSwgYEJ1ZmZlcmBzIGhhdmUgYHRvSlNPTigpYCBtZXRob2QgdGhhdCBjb252ZXJ0cyB0aGUgYnVmZmVyXG4gKiBpbnRvIGEgSlMgb2JqZWN0IHRoYXQgY2FuIGJlIEpTT04gc3RyaW5naWZpZWQuXG4gKiBVbmZvcnR1bmF0ZWx5IHRoaXMgY29udmVyc2lvbiBoYXBwZW5zIGJlZm9yZSB0aGUgcmVwbGFjZXIgaXMgY2FsbGVkLFxuICogc28gbm9ybWFsIG1lYW5zIG9mIGRldGVjdGluZyBhIGBCdWZmZXJgIG9iamV0IGRvbid0IHdvcmsgYW55bW9yZS5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlLXYwLngtYXJjaGl2ZS9pc3N1ZXMvNTExMFxuICovXG5mdW5jdGlvbiBpc0pzb25CdWZmZXIodmFsdWU6IGFueSk6IHZhbHVlIGlzIHtcbiAgdHlwZTogJ0J1ZmZlcic7XG4gIGRhdGE6IG51bWJlcltdO1xufSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgJ3R5cGUnIGluIHZhbHVlXG4gICAgJiYgdmFsdWUudHlwZSA9PT0gJ0J1ZmZlcidcbiAgICAmJiAnZGF0YScgaW4gdmFsdWVcbiAgICAmJiBBcnJheS5pc0FycmF5KHZhbHVlLmRhdGEpO1xufVxuXG4vKipcbiAqIEEgSlNPTi5zdHJpbmdpZnkoKSByZXBsYWNlciB0aGF0IGNvbnZlcnRzIEJ1ZmZlcnMgaW50byBhIHN0cmluZyB3aXRoIGluZm9ybWF0aW9uXG4gKiBVc2UgdGhpcyBpZiB5b3UgcGxhbiB0byBwcmludCBvdXQgSlNPTiBzdHJpbmdpZmllZCBvYmplY3RzIHRoYXQgbWF5IGNvbnRhaW4gYSBCdWZmZXIuXG4gKiBXaXRob3V0IHRoaXMsIGxhcmdlIGJ1ZmZlcnMgKHRoaW5rOiBNZWdhYnl0ZXMpIHdpbGwgY29tcGxldGVseSBmaWxsIHVwIHRoZSBvdXRwdXRcbiAqIGFuZCBldmVuIGNyYXNoIHRoZSBzeXN0ZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlckJ1ZmZlcldpdGhJbmZvKF9rZXk6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG4gIGlmIChpc0pzb25CdWZmZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIGA8QnVmZmVyOiAke2Zvcm1hdEJ5dGVzKHZhbHVlLmRhdGEubGVuZ3RoKX0+YDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=
|