@aws-cdk/toolkit-lib 0.3.2 → 0.3.4

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.
Files changed (392) hide show
  1. package/api-extractor.json +3 -0
  2. package/build-info.json +2 -2
  3. package/db.json.gz +0 -0
  4. package/lib/actions/bootstrap/index.d.ts +1 -1
  5. package/lib/actions/bootstrap/index.js +5 -5
  6. package/lib/actions/bootstrap/private/helpers.js +3 -3
  7. package/lib/actions/deploy/index.d.ts +1 -1
  8. package/lib/actions/deploy/index.js +1 -1
  9. package/lib/actions/deploy/private/deploy-options.d.ts +1 -1
  10. package/lib/actions/deploy/private/deploy-options.js +1 -1
  11. package/lib/actions/deploy/private/helpers.d.ts +3 -2
  12. package/lib/actions/deploy/private/helpers.js +3 -3
  13. package/lib/actions/diff/index.d.ts +1 -1
  14. package/lib/actions/diff/index.js +1 -1
  15. package/lib/actions/diff/private/helpers.d.ts +5 -9
  16. package/lib/actions/diff/private/helpers.js +13 -30
  17. package/lib/actions/refactor/index.d.ts +12 -0
  18. package/lib/actions/refactor/index.js +1 -1
  19. package/lib/api/aws-auth/account-cache.d.ts +41 -0
  20. package/lib/api/aws-auth/account-cache.js +108 -0
  21. package/lib/api/aws-auth/awscli-compatible.d.ts +70 -0
  22. package/lib/api/aws-auth/awscli-compatible.js +250 -0
  23. package/lib/api/aws-auth/cached.d.ts +11 -0
  24. package/lib/api/aws-auth/cached.js +26 -0
  25. package/lib/api/aws-auth/credential-plugins.d.ts +38 -0
  26. package/lib/api/aws-auth/credential-plugins.js +154 -0
  27. package/lib/api/aws-auth/private/index.d.ts +11 -0
  28. package/lib/api/aws-auth/private/index.js +37 -0
  29. package/lib/api/aws-auth/provider-caching.d.ts +13 -0
  30. package/lib/api/aws-auth/provider-caching.js +24 -0
  31. package/lib/api/aws-auth/proxy-agent.d.ts +13 -0
  32. package/lib/api/aws-auth/proxy-agent.js +54 -0
  33. package/lib/api/aws-auth/sdk-logger.d.ts +69 -0
  34. package/lib/api/aws-auth/sdk-logger.js +128 -0
  35. package/lib/api/aws-auth/sdk-provider.d.ts +195 -0
  36. package/lib/api/aws-auth/sdk-provider.js +373 -0
  37. package/lib/api/aws-auth/sdk.d.ts +235 -0
  38. package/lib/api/aws-auth/sdk.js +391 -0
  39. package/lib/api/aws-auth/tracing.d.ts +11 -0
  40. package/lib/api/aws-auth/tracing.js +60 -0
  41. package/lib/api/aws-auth/user-agent.d.ts +7 -0
  42. package/lib/api/aws-auth/user-agent.js +20 -0
  43. package/lib/api/aws-auth/util.d.ts +6 -0
  44. package/lib/api/aws-auth/util.js +21 -0
  45. package/lib/api/bootstrap/bootstrap-environment.d.ts +35 -0
  46. package/lib/api/bootstrap/bootstrap-environment.js +323 -0
  47. package/lib/api/bootstrap/bootstrap-props.d.ts +130 -0
  48. package/lib/api/bootstrap/bootstrap-props.js +14 -0
  49. package/lib/api/bootstrap/deploy-bootstrap.d.ts +39 -0
  50. package/lib/api/bootstrap/deploy-bootstrap.js +147 -0
  51. package/lib/api/bootstrap/index.d.ts +3 -0
  52. package/lib/api/bootstrap/index.js +23 -0
  53. package/lib/api/bootstrap/legacy-template.d.ts +2 -0
  54. package/lib/api/bootstrap/legacy-template.js +82 -0
  55. package/lib/api/cloud-assembly/environment.d.ts +43 -0
  56. package/lib/api/cloud-assembly/environment.js +127 -0
  57. package/lib/api/cloud-assembly/index.d.ts +1 -1
  58. package/lib/api/cloud-assembly/index.js +5 -4
  59. package/lib/api/cloud-assembly/private/context-aware-source.d.ts +1 -1
  60. package/lib/api/cloud-assembly/private/context-aware-source.js +7 -7
  61. package/lib/api/cloud-assembly/private/exec.js +3 -3
  62. package/lib/api/cloud-assembly/private/prepare-source.d.ts +2 -1
  63. package/lib/api/cloud-assembly/private/prepare-source.js +17 -15
  64. package/lib/api/cloud-assembly/private/readable-assembly.d.ts +1 -1
  65. package/lib/api/cloud-assembly/private/readable-assembly.js +1 -1
  66. package/lib/api/cloud-assembly/private/source-builder.d.ts +10 -8
  67. package/lib/api/cloud-assembly/private/source-builder.js +43 -24
  68. package/lib/api/cloud-assembly/private/stack-assembly.d.ts +2 -1
  69. package/lib/api/cloud-assembly/private/stack-assembly.js +16 -15
  70. package/lib/api/cloud-assembly/source-builder.d.ts +19 -0
  71. package/lib/api/cloud-assembly/source-builder.js +1 -1
  72. package/lib/api/cloud-assembly/stack-assembly.d.ts +55 -0
  73. package/lib/api/cloud-assembly/stack-assembly.js +139 -0
  74. package/lib/api/cloud-assembly/stack-collection.d.ts +27 -0
  75. package/lib/api/cloud-assembly/stack-collection.js +112 -0
  76. package/lib/api/cloud-assembly/stack-selector.d.ts +81 -2
  77. package/lib/api/cloud-assembly/stack-selector.js +62 -5
  78. package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +85 -0
  79. package/lib/api/cloudformation/evaluate-cloudformation-template.js +456 -0
  80. package/lib/api/cloudformation/index.d.ts +4 -0
  81. package/lib/api/cloudformation/index.js +21 -0
  82. package/lib/api/cloudformation/nested-stack-helpers.d.ts +25 -0
  83. package/lib/api/cloudformation/nested-stack-helpers.js +86 -0
  84. package/lib/api/cloudformation/stack-helpers.d.ts +96 -0
  85. package/lib/api/cloudformation/stack-helpers.js +163 -0
  86. package/lib/api/cloudformation/template-body-parameter.d.ts +22 -0
  87. package/lib/api/cloudformation/template-body-parameter.js +104 -0
  88. package/lib/api/context.d.ts +40 -0
  89. package/lib/api/context.js +84 -0
  90. package/lib/api/deployments/asset-manifest-builder.d.ts +8 -0
  91. package/lib/api/deployments/asset-manifest-builder.js +33 -0
  92. package/lib/api/deployments/asset-publishing.d.ts +60 -0
  93. package/lib/api/deployments/asset-publishing.js +144 -0
  94. package/lib/api/deployments/assets.d.ts +11 -0
  95. package/lib/api/deployments/assets.js +108 -0
  96. package/lib/api/deployments/cfn-api.d.ts +145 -0
  97. package/lib/api/deployments/cfn-api.js +444 -0
  98. package/lib/api/deployments/checks.d.ts +9 -0
  99. package/lib/api/deployments/checks.js +72 -0
  100. package/lib/api/deployments/deploy-stack.d.ts +164 -0
  101. package/lib/api/deployments/deploy-stack.js +490 -0
  102. package/lib/api/deployments/deployment-method.d.ts +24 -0
  103. package/lib/api/deployments/deployment-method.js +3 -0
  104. package/lib/api/deployments/deployment-result.d.ts +21 -0
  105. package/lib/api/deployments/deployment-result.js +10 -0
  106. package/lib/api/deployments/deployments.d.ts +289 -0
  107. package/lib/api/deployments/deployments.js +355 -0
  108. package/lib/api/deployments/index.d.ts +6 -0
  109. package/lib/api/deployments/index.js +27 -0
  110. package/lib/api/diff/diff-formatter.d.ts +147 -0
  111. package/lib/api/diff/diff-formatter.js +225 -0
  112. package/lib/api/diff/index.d.ts +1 -0
  113. package/lib/api/diff/index.js +18 -0
  114. package/lib/api/environment/environment-access.d.ts +139 -0
  115. package/lib/api/environment/environment-access.js +205 -0
  116. package/lib/api/environment/environment-resources.d.ts +75 -0
  117. package/lib/api/environment/environment-resources.js +213 -0
  118. package/lib/api/environment/index.d.ts +3 -0
  119. package/lib/api/environment/index.js +20 -0
  120. package/lib/api/environment/placeholders.d.ts +10 -0
  121. package/lib/api/environment/placeholders.js +23 -0
  122. package/lib/api/garbage-collection/garbage-collector.d.ts +158 -0
  123. package/lib/api/garbage-collection/garbage-collector.js +614 -0
  124. package/lib/api/garbage-collection/index.d.ts +3 -0
  125. package/lib/api/garbage-collection/index.js +21 -0
  126. package/lib/api/garbage-collection/progress-printer.d.ts +23 -0
  127. package/lib/api/garbage-collection/progress-printer.js +80 -0
  128. package/lib/api/garbage-collection/stack-refresh.d.ts +49 -0
  129. package/lib/api/garbage-collection/stack-refresh.js +152 -0
  130. package/lib/api/hotswap/appsync-mapping-templates.d.ts +4 -0
  131. package/lib/api/hotswap/appsync-mapping-templates.js +162 -0
  132. package/lib/api/hotswap/code-build-projects.d.ts +4 -0
  133. package/lib/api/hotswap/code-build-projects.js +62 -0
  134. package/lib/api/hotswap/common.d.ts +89 -0
  135. package/lib/api/hotswap/common.js +137 -0
  136. package/lib/api/hotswap/ecs-services.d.ts +4 -0
  137. package/lib/api/hotswap/ecs-services.js +159 -0
  138. package/lib/api/hotswap/hotswap-deployments.d.ts +17 -0
  139. package/lib/api/hotswap/hotswap-deployments.js +441 -0
  140. package/lib/api/hotswap/index.d.ts +2 -0
  141. package/lib/api/hotswap/index.js +19 -0
  142. package/lib/api/hotswap/lambda-functions.d.ts +4 -0
  143. package/lib/api/hotswap/lambda-functions.js +297 -0
  144. package/lib/api/hotswap/s3-bucket-deployments.d.ts +5 -0
  145. package/lib/api/hotswap/s3-bucket-deployments.js +117 -0
  146. package/lib/api/hotswap/stepfunctions-state-machines.d.ts +4 -0
  147. package/lib/api/hotswap/stepfunctions-state-machines.js +48 -0
  148. package/lib/api/index.d.ts +24 -0
  149. package/lib/api/index.js +41 -0
  150. package/lib/api/io/index.d.ts +3 -1
  151. package/lib/api/io/index.js +18 -1
  152. package/lib/api/io/io-host.d.ts +15 -0
  153. package/lib/api/io/io-host.js +3 -0
  154. package/lib/api/io/io-message.d.ts +76 -0
  155. package/lib/api/io/io-message.js +3 -0
  156. package/lib/api/io/private/index.d.ts +7 -1
  157. package/lib/api/io/private/index.js +8 -5
  158. package/lib/api/io/private/io-default-messages.d.ts +21 -0
  159. package/lib/api/io/private/io-default-messages.js +59 -0
  160. package/lib/api/io/private/io-helper.d.ts +32 -0
  161. package/lib/api/io/private/io-helper.js +51 -0
  162. package/lib/api/io/private/level-priority.d.ts +11 -0
  163. package/lib/api/io/private/level-priority.js +33 -0
  164. package/lib/api/io/private/message-maker.d.ts +89 -0
  165. package/lib/api/io/private/message-maker.js +60 -0
  166. package/lib/api/io/private/messages.d.ts +178 -0
  167. package/lib/api/io/private/messages.js +534 -0
  168. package/lib/api/io/private/sdk-logger.d.ts +1 -1
  169. package/lib/api/io/private/sdk-logger.js +6 -6
  170. package/lib/api/io/private/span.d.ts +93 -0
  171. package/lib/api/io/private/span.js +87 -0
  172. package/lib/api/io/private/testing/fake-io-host.d.ts +28 -0
  173. package/lib/api/io/private/testing/fake-io-host.js +41 -0
  174. package/lib/api/io/private/testing/index.d.ts +2 -0
  175. package/lib/api/io/private/testing/index.js +19 -0
  176. package/lib/api/io/private/testing/test-io-host.d.ts +27 -0
  177. package/lib/api/io/private/testing/test-io-host.js +61 -0
  178. package/lib/api/io/private/types.d.ts +4 -0
  179. package/lib/api/io/private/types.js +3 -0
  180. package/lib/api/io/toolkit-action.d.ts +4 -0
  181. package/lib/api/io/toolkit-action.js +3 -0
  182. package/lib/api/logs-monitor/find-cloudwatch-logs.d.ts +25 -0
  183. package/lib/api/logs-monitor/find-cloudwatch-logs.js +95 -0
  184. package/lib/api/logs-monitor/index.d.ts +2 -0
  185. package/lib/api/logs-monitor/index.js +19 -0
  186. package/lib/api/logs-monitor/logs-monitor.d.ts +76 -0
  187. package/lib/api/logs-monitor/logs-monitor.js +194 -0
  188. package/lib/api/notices/cached-data-source.d.ts +13 -0
  189. package/lib/api/notices/cached-data-source.js +77 -0
  190. package/lib/api/notices/filter.d.ts +59 -0
  191. package/lib/api/notices/filter.js +189 -0
  192. package/lib/api/notices/index.d.ts +1 -0
  193. package/lib/api/notices/index.js +18 -0
  194. package/lib/api/notices/notices.d.ts +111 -0
  195. package/lib/api/notices/notices.js +131 -0
  196. package/lib/api/notices/types.d.ts +37 -0
  197. package/lib/api/notices/types.js +3 -0
  198. package/lib/api/notices/web-data-source.d.ts +9 -0
  199. package/lib/api/notices/web-data-source.js +70 -0
  200. package/lib/api/plugin/context-provider-plugin.d.ts +6 -0
  201. package/lib/api/plugin/context-provider-plugin.js +7 -0
  202. package/lib/api/plugin/index.d.ts +3 -0
  203. package/lib/api/plugin/index.js +20 -0
  204. package/lib/api/plugin/mode.d.ts +4 -0
  205. package/lib/api/plugin/mode.js +9 -0
  206. package/lib/api/plugin/plugin.d.ts +70 -0
  207. package/lib/api/plugin/plugin.js +127 -0
  208. package/lib/api/private.d.ts +1 -0
  209. package/lib/api/private.js +18 -0
  210. package/lib/api/refactoring/cloudformation.d.ts +38 -0
  211. package/lib/api/refactoring/cloudformation.js +56 -0
  212. package/lib/api/refactoring/digest.d.ts +26 -0
  213. package/lib/api/refactoring/digest.js +175 -0
  214. package/lib/api/refactoring/exclude.d.ts +29 -0
  215. package/lib/api/refactoring/exclude.js +94 -0
  216. package/lib/api/refactoring/index.d.ts +32 -0
  217. package/lib/api/refactoring/index.js +191 -0
  218. package/lib/api/require-approval.d.ts +17 -0
  219. package/lib/api/require-approval.js +22 -0
  220. package/lib/api/resource-import/importer.d.ts +216 -0
  221. package/lib/api/resource-import/importer.js +331 -0
  222. package/lib/api/resource-import/index.d.ts +2 -0
  223. package/lib/api/resource-import/index.js +19 -0
  224. package/lib/api/resource-import/migrator.d.ts +26 -0
  225. package/lib/api/resource-import/migrator.js +73 -0
  226. package/lib/api/resource-metadata/index.d.ts +1 -0
  227. package/lib/api/resource-metadata/index.js +18 -0
  228. package/lib/api/resource-metadata/resource-metadata.d.ts +24 -0
  229. package/lib/api/resource-metadata/resource-metadata.js +42 -0
  230. package/lib/api/rwlock.d.ts +60 -0
  231. package/lib/api/rwlock.js +204 -0
  232. package/lib/api/settings.d.ts +26 -0
  233. package/lib/api/settings.js +107 -0
  234. package/lib/api/shared-private.d.ts +8 -6
  235. package/lib/api/shared-private.js +31 -12561
  236. package/lib/api/stack-events/index.d.ts +4 -0
  237. package/lib/api/stack-events/index.js +23 -0
  238. package/lib/api/stack-events/stack-activity-monitor.d.ts +100 -0
  239. package/lib/api/stack-events/stack-activity-monitor.js +164 -0
  240. package/lib/api/stack-events/stack-event-poller.d.ts +69 -0
  241. package/lib/api/stack-events/stack-event-poller.js +130 -0
  242. package/lib/api/stack-events/stack-progress-monitor.d.ts +48 -0
  243. package/lib/api/stack-events/stack-progress-monitor.js +98 -0
  244. package/lib/api/stack-events/stack-status.d.ts +42 -0
  245. package/lib/api/stack-events/stack-status.js +90 -0
  246. package/lib/api/streams.d.ts +7 -0
  247. package/lib/api/streams.js +24 -0
  248. package/lib/api/tags.d.ts +9 -0
  249. package/lib/api/tags.js +10 -0
  250. package/lib/api/toolkit-info.d.ts +52 -0
  251. package/lib/api/toolkit-info.js +157 -0
  252. package/lib/api/tree.d.ts +31 -0
  253. package/lib/api/tree.js +37 -0
  254. package/lib/api/work-graph/index.d.ts +3 -0
  255. package/lib/api/work-graph/index.js +20 -0
  256. package/lib/api/work-graph/work-graph-builder.d.ts +34 -0
  257. package/lib/api/work-graph/work-graph-builder.js +172 -0
  258. package/lib/api/work-graph/work-graph-types.d.ts +50 -0
  259. package/lib/api/work-graph/work-graph-types.js +13 -0
  260. package/lib/api/work-graph/work-graph.d.ts +72 -0
  261. package/lib/api/work-graph/work-graph.js +349 -0
  262. package/lib/context-providers/ami.d.ts +13 -0
  263. package/lib/context-providers/ami.js +52 -0
  264. package/lib/context-providers/availability-zones.d.ts +13 -0
  265. package/lib/context-providers/availability-zones.js +29 -0
  266. package/lib/context-providers/cc-api-provider.d.ts +30 -0
  267. package/lib/context-providers/cc-api-provider.js +145 -0
  268. package/lib/context-providers/endpoint-service-availability-zones.d.ts +13 -0
  269. package/lib/context-providers/endpoint-service-availability-zones.js +35 -0
  270. package/lib/context-providers/hosted-zones.d.ts +12 -0
  271. package/lib/context-providers/hosted-zones.js +69 -0
  272. package/lib/context-providers/index.d.ts +44 -0
  273. package/lib/context-providers/index.js +128 -0
  274. package/lib/context-providers/keys.d.ts +13 -0
  275. package/lib/context-providers/keys.js +54 -0
  276. package/lib/context-providers/load-balancers.d.ts +20 -0
  277. package/lib/context-providers/load-balancers.js +161 -0
  278. package/lib/context-providers/security-groups.d.ts +9 -0
  279. package/lib/context-providers/security-groups.js +69 -0
  280. package/lib/context-providers/ssm-parameters.d.ts +25 -0
  281. package/lib/context-providers/ssm-parameters.js +61 -0
  282. package/lib/context-providers/vpcs.d.ts +13 -0
  283. package/lib/context-providers/vpcs.js +291 -0
  284. package/lib/index.d.ts +4 -1
  285. package/lib/index.js +5 -2
  286. package/lib/index_bg.wasm +0 -0
  287. package/lib/payloads/bootstrap-environment-progress.d.ts +17 -0
  288. package/lib/payloads/bootstrap-environment-progress.js +3 -0
  289. package/lib/payloads/context.d.ts +9 -0
  290. package/lib/payloads/context.js +3 -0
  291. package/lib/payloads/deploy.d.ts +50 -0
  292. package/lib/payloads/deploy.js +3 -0
  293. package/lib/payloads/destroy.d.ts +23 -0
  294. package/lib/payloads/destroy.js +3 -0
  295. package/lib/payloads/diff.d.ts +31 -0
  296. package/lib/payloads/diff.js +22 -0
  297. package/lib/payloads/hotswap.d.ts +212 -0
  298. package/lib/payloads/hotswap.js +43 -0
  299. package/lib/payloads/index.d.ts +17 -0
  300. package/lib/payloads/index.js +34 -0
  301. package/lib/payloads/list.d.ts +4 -0
  302. package/lib/payloads/list.js +3 -0
  303. package/lib/payloads/logs-monitor.d.ts +33 -0
  304. package/lib/payloads/logs-monitor.js +3 -0
  305. package/lib/payloads/progress.d.ts +14 -0
  306. package/lib/payloads/progress.js +3 -0
  307. package/lib/payloads/refactor.d.ts +14 -0
  308. package/lib/payloads/refactor.js +3 -0
  309. package/lib/payloads/rollback.d.ts +17 -0
  310. package/lib/payloads/rollback.js +3 -0
  311. package/lib/payloads/sdk-trace.d.ts +20 -0
  312. package/lib/payloads/sdk-trace.js +3 -0
  313. package/lib/payloads/stack-activity.d.ts +53 -0
  314. package/lib/payloads/stack-activity.js +3 -0
  315. package/lib/payloads/stack-details.d.ts +17 -0
  316. package/lib/payloads/stack-details.js +3 -0
  317. package/lib/payloads/synth.d.ts +7 -0
  318. package/lib/payloads/synth.js +3 -0
  319. package/lib/payloads/types.d.ts +95 -0
  320. package/lib/payloads/types.js +3 -0
  321. package/lib/payloads/watch.d.ts +27 -0
  322. package/lib/payloads/watch.js +3 -0
  323. package/lib/private/activity-printer/base.d.ts +50 -0
  324. package/lib/private/activity-printer/base.js +120 -0
  325. package/lib/private/activity-printer/current.d.ts +26 -0
  326. package/lib/private/activity-printer/current.js +122 -0
  327. package/lib/private/activity-printer/display.d.ts +13 -0
  328. package/lib/private/activity-printer/display.js +81 -0
  329. package/lib/private/activity-printer/history.d.ts +32 -0
  330. package/lib/private/activity-printer/history.js +109 -0
  331. package/lib/private/activity-printer/index.d.ts +3 -0
  332. package/lib/private/activity-printer/index.js +20 -0
  333. package/lib/private/index.d.ts +1 -0
  334. package/lib/private/index.js +18 -0
  335. package/lib/toolkit/non-interactive-io-host.js +5 -4
  336. package/lib/toolkit/private/index.d.ts +2 -1
  337. package/lib/toolkit/private/index.js +1 -1
  338. package/lib/toolkit/toolkit-error.d.ts +86 -0
  339. package/lib/toolkit/toolkit-error.js +132 -0
  340. package/lib/toolkit/toolkit.d.ts +2 -2
  341. package/lib/toolkit/toolkit.js +161 -130
  342. package/lib/toolkit/types.d.ts +0 -55
  343. package/lib/toolkit/types.js +1 -1
  344. package/lib/util/archive.d.ts +1 -0
  345. package/lib/util/archive.js +86 -0
  346. package/lib/util/arrays.d.ts +14 -0
  347. package/lib/util/arrays.js +36 -0
  348. package/lib/util/bool.d.ts +7 -0
  349. package/lib/util/bool.js +13 -0
  350. package/lib/util/bytes.d.ts +8 -0
  351. package/lib/util/bytes.js +21 -0
  352. package/lib/util/cloudformation.d.ts +16 -0
  353. package/lib/util/cloudformation.js +36 -0
  354. package/lib/util/content-hash.d.ts +5 -0
  355. package/lib/util/content-hash.js +43 -0
  356. package/lib/util/directories.d.ts +22 -0
  357. package/lib/util/directories.js +59 -0
  358. package/lib/util/format-error.d.ts +9 -0
  359. package/lib/util/format-error.js +22 -0
  360. package/lib/util/index.d.ts +19 -0
  361. package/lib/util/index.js +36 -0
  362. package/lib/util/json.d.ts +48 -0
  363. package/lib/util/json.js +68 -0
  364. package/lib/util/net.d.ts +9 -0
  365. package/lib/util/net.js +60 -0
  366. package/lib/util/objects.d.ts +65 -0
  367. package/lib/util/objects.js +230 -0
  368. package/lib/util/package-info.d.ts +3 -0
  369. package/lib/util/package-info.js +22 -0
  370. package/lib/util/parallel.d.ts +6 -0
  371. package/lib/util/parallel.js +48 -0
  372. package/lib/util/serialize.d.ts +27 -0
  373. package/lib/util/serialize.js +86 -0
  374. package/lib/util/string-manipulation.d.ts +18 -0
  375. package/lib/util/string-manipulation.js +46 -0
  376. package/lib/util/type-brands.d.ts +39 -0
  377. package/lib/util/type-brands.js +39 -0
  378. package/lib/util/types.d.ts +27 -0
  379. package/lib/util/types.js +25 -0
  380. package/lib/util/version-range.d.ts +2 -0
  381. package/lib/util/version-range.js +36 -0
  382. package/lib/util/yaml-cfn.d.ts +15 -0
  383. package/lib/util/yaml-cfn.js +58 -0
  384. package/package.json +26 -28
  385. package/tsdoc.json +15 -0
  386. package/lib/api/shared-private.js.map +0 -7
  387. package/lib/api/shared-public.d.ts +0 -2159
  388. package/lib/api/shared-public.js +0 -1110
  389. package/lib/api/shared-public.js.map +0 -7
  390. package/lib/private/util.d.ts +0 -1
  391. package/lib/private/util.js +0 -787
  392. package/lib/private/util.js.map +0 -7
@@ -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;
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImpzb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1QkEsb0NBT0M7QUF1QkQsc0NBVUM7QUEvREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxTQUFnQixZQUFZLENBQUMsVUFBZSxFQUFFLFVBQWtCLEVBQUUsa0JBQTRCO0lBQzVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNwQixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsYUFBYSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4RCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFVBQWUsRUFBRSxJQUFZO0lBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsSUFBSSxHQUFHLEdBQUcsVUFBVSxDQUFDO0lBQ3JCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxTQUFTLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGdldHMgdGhlIHZhbHVlcyBvZiB0aGUganNvbk9iamVjdCBhdCB0aGUgcGF0aHMgc3BlY2lmaWVkIGluIHByb3BlcnRpZXNUb1JldHVybi5cbiAqXG4gKiBGb3IgZXhhbXBsZSwganNvbk9iamVjdCA9IHtcbiAqICAga2V5MTogJ2FiYycsXG4gKiAgIGtleTI6IHtcbiAqICAgICBmb286ICdxd2VydHknLFxuICogICAgIGJhcjogJ2RhdGEnLFxuICogICB9XG4gKiB9XG4gKlxuICogcHJvcGVydGllc1RvUmV0dXJuID0gWydrZXkxJywgJ2tleTIuZm9vJ107XG4gKlxuICogVGhlIHJldHVybmVkIG9iamVjdCBpczpcbiAqXG4gKiBgYGBcbiAqIHtcbiAqICAga2V5MTogJ2FiYycsXG4gKiAgICdrZXkyLmZvbyc6ICdxd2VydHknLFxuICogICBJZGVudGlmaWVyOiBpZGVudGlmaWVyXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3VsdE9iaihqc29uT2JqZWN0OiBhbnksIGlkZW50aWZpZXI6IHN0cmluZywgcHJvcGVydGllc1RvUmV0dXJuOiBzdHJpbmdbXSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICBjb25zdCBwcm9wc09iaiA9IHt9O1xuICBwcm9wZXJ0aWVzVG9SZXR1cm4uZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcbiAgICBPYmplY3QuYXNzaWduKHByb3BzT2JqLCB7IFtwcm9wTmFtZV06IGZpbmRKc29uVmFsdWUoanNvbk9iamVjdCwgcHJvcE5hbWUpIH0pO1xuICB9KTtcbiAgT2JqZWN0LmFzc2lnbihwcm9wc09iaiwgeyBbJ0lkZW50aWZpZXInXTogaWRlbnRpZmllciB9KTtcbiAgcmV0dXJuIHByb3BzT2JqO1xufVxuXG4vKipcbiAqIFRoaXMgZmluZHMgdGhlIHZhbHVlIG9mIHRoZSBqc29uT2JqZWN0IGF0IHRoZSBwYXRoLiAgUGF0aCBpcyBkZWxpbWl0ZWQgYnkgJy4nLlxuICpcbiAqIEZvciBleGFtcGxlLCBqc29uT2JqZWN0ID0ge1xuICogICBrZXkxOiAnYWJjJyxcbiAqICAga2V5Mjoge1xuICogICAgIGZvbzogJ3F3ZXJ0eScsXG4gKiAgICAgYmFyOiAnZGF0YScsXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBJZiBwYXRoIGlzICdrZXkxJywgdGhlbiBpdCB3aWxsIHJldHVybiAnYWJjJy5cbiAqIElmIHBhdGggaXMgJ2tleTIuZm9vJywgdGhlbiBpdCB3aWxsIHJldHVybiAncXdlcnR5Jy5cbiAqIElmIHBhdGggaXMgJ2tleTInLCB0aGVuIGl0IHdpbGwgcmV0dXJuIHRoZSBvYmplY3Q6XG4gKiB7XG4gKiAgIGZvbzogJ3F3ZXJ0eScsXG4gKiAgIGJhcjogJ2RhdGEnLFxuICogfVxuICpcbiAqIElmIHRoZSBwYXRoIGlzIG5vdCBmb3VuZCwgYW4gRXJyb3Igd2lsbCBiZSB0aHJvd24gc3RhdGluZyB3aGljaCB0b2tlbiBpcyBtaXNzaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEpzb25WYWx1ZShqc29uT2JqZWN0OiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IHBhdGhzID0gcGF0aC5zcGxpdCgnLicpO1xuICBsZXQgb2JqID0ganNvbk9iamVjdDtcbiAgcGF0aHMuZm9yRWFjaChwID0+IHtcbiAgICBvYmogPSBvYmpbcF07XG4gICAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3QgcmVhZCBmaWVsZCAke3BhdGh9LiAke3B9IGlzIG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufVxuIl19
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Get a human-readable error message for a network error
3
+ * @param error The network error object
4
+ */
5
+ export declare function humanNetworkError(error: NodeJS.ErrnoException): string;
6
+ /**
7
+ * Get a human-readable error message for a HTTP status code
8
+ */
9
+ export declare function humanHttpStatusError(statusCode: number): string;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.humanNetworkError = humanNetworkError;
4
+ exports.humanHttpStatusError = humanHttpStatusError;
5
+ /**
6
+ * Get a human-readable error message for a network error
7
+ * @param error The network error object
8
+ */
9
+ function humanNetworkError(error) {
10
+ switch (error.code) {
11
+ case 'ENOTFOUND':
12
+ return `Cannot reach the server. Please check your internet connection or the URL (${error.hostname}).`;
13
+ case 'ECONNREFUSED':
14
+ return `Connection refused. The server at ${error.address}:${error.port} is not accepting connections.`;
15
+ case 'ECONNRESET':
16
+ return 'Connection was suddenly closed by the server. Please try again later.';
17
+ case 'ETIMEDOUT':
18
+ return 'Connection timed out. The server took too long to respond.';
19
+ case 'CERT_HAS_EXPIRED':
20
+ return 'The SSL certificate of the server has expired. This could be a security risk.';
21
+ case 'UNABLE_TO_VERIFY_LEAF_SIGNATURE':
22
+ case 'CERT_SIGNATURE_FAILURE':
23
+ case 'ERR_TLS_CERT_ALTNAME_INVALID':
24
+ return 'SSL certificate validation failed. This could indicate a security issue or a misconfigured server.';
25
+ default:
26
+ return `Network error: ${error.message || error.code || 'Unknown error'}`;
27
+ }
28
+ }
29
+ /**
30
+ * Get a human-readable error message for a HTTP status code
31
+ */
32
+ function humanHttpStatusError(statusCode) {
33
+ switch (statusCode) {
34
+ case 400:
35
+ return 'Bad request - the server could not understand the request';
36
+ case 401:
37
+ return 'Unauthorized - authentication is required';
38
+ case 403:
39
+ return 'Forbidden - you do not have permission to access this resource';
40
+ case 404:
41
+ return 'Not found - the requested resource does not exist';
42
+ case 408:
43
+ return 'Request timeout - the server timed out waiting for the request';
44
+ case 429:
45
+ return 'Too many requests - you have sent too many requests in a given amount of time';
46
+ case 500:
47
+ return 'Internal server error - something went wrong on the server';
48
+ case 502:
49
+ return 'Bad gateway - the server received an invalid response from an upstream server';
50
+ case 503:
51
+ return 'Service unavailable - the server is temporarily unable to handle the request';
52
+ case 504:
53
+ return 'Gateway timeout - the server did not receive a timely response from an upstream server';
54
+ default:
55
+ return statusCode >= 500
56
+ ? 'Server error - something went wrong on the server'
57
+ : 'Client error - something went wrong with the request';
58
+ }
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibmV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsOENBbUJDO0FBS0Qsb0RBMkJDO0FBdkREOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEtBQTRCO0lBQzVELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLEtBQUssV0FBVztZQUNkLE9BQU8sOEVBQStFLEtBQWEsQ0FBQyxRQUFRLElBQUksQ0FBQztRQUNuSCxLQUFLLGNBQWM7WUFDakIsT0FBTyxxQ0FBc0MsS0FBYSxDQUFDLE9BQU8sSUFBSyxLQUFhLENBQUMsSUFBSSxnQ0FBZ0MsQ0FBQztRQUM1SCxLQUFLLFlBQVk7WUFDZixPQUFPLHVFQUF1RSxDQUFDO1FBQ2pGLEtBQUssV0FBVztZQUNkLE9BQU8sNERBQTRELENBQUM7UUFDdEUsS0FBSyxrQkFBa0I7WUFDckIsT0FBTywrRUFBK0UsQ0FBQztRQUN6RixLQUFLLGlDQUFpQyxDQUFDO1FBQ3ZDLEtBQUssd0JBQXdCLENBQUM7UUFDOUIsS0FBSyw4QkFBOEI7WUFDakMsT0FBTyxvR0FBb0csQ0FBQztRQUM5RztZQUNFLE9BQU8sa0JBQWtCLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsVUFBa0I7SUFDckQsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixLQUFLLEdBQUc7WUFDTixPQUFPLDJEQUEyRCxDQUFDO1FBQ3JFLEtBQUssR0FBRztZQUNOLE9BQU8sMkNBQTJDLENBQUM7UUFDckQsS0FBSyxHQUFHO1lBQ04sT0FBTyxnRUFBZ0UsQ0FBQztRQUMxRSxLQUFLLEdBQUc7WUFDTixPQUFPLG1EQUFtRCxDQUFDO1FBQzdELEtBQUssR0FBRztZQUNOLE9BQU8sZ0VBQWdFLENBQUM7UUFDMUUsS0FBSyxHQUFHO1lBQ04sT0FBTywrRUFBK0UsQ0FBQztRQUN6RixLQUFLLEdBQUc7WUFDTixPQUFPLDREQUE0RCxDQUFDO1FBQ3RFLEtBQUssR0FBRztZQUNOLE9BQU8sK0VBQStFLENBQUM7UUFDekYsS0FBSyxHQUFHO1lBQ04sT0FBTyw4RUFBOEUsQ0FBQztRQUN4RixLQUFLLEdBQUc7WUFDTixPQUFPLHdGQUF3RixDQUFDO1FBQ2xHO1lBQ0UsT0FBTyxVQUFVLElBQUksR0FBRztnQkFDdEIsQ0FBQyxDQUFDLG1EQUFtRDtnQkFDckQsQ0FBQyxDQUFDLHNEQUFzRCxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXQgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlIGZvciBhIG5ldHdvcmsgZXJyb3JcbiAqIEBwYXJhbSBlcnJvciBUaGUgbmV0d29yayBlcnJvciBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuTmV0d29ya0Vycm9yKGVycm9yOiBOb2RlSlMuRXJybm9FeGNlcHRpb24pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGVycm9yLmNvZGUpIHtcbiAgICBjYXNlICdFTk9URk9VTkQnOlxuICAgICAgcmV0dXJuIGBDYW5ub3QgcmVhY2ggdGhlIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiBvciB0aGUgVVJMICgkeyhlcnJvciBhcyBhbnkpLmhvc3RuYW1lfSkuYDtcbiAgICBjYXNlICdFQ09OTlJFRlVTRUQnOlxuICAgICAgcmV0dXJuIGBDb25uZWN0aW9uIHJlZnVzZWQuIFRoZSBzZXJ2ZXIgYXQgJHsoZXJyb3IgYXMgYW55KS5hZGRyZXNzfTokeyhlcnJvciBhcyBhbnkpLnBvcnR9IGlzIG5vdCBhY2NlcHRpbmcgY29ubmVjdGlvbnMuYDtcbiAgICBjYXNlICdFQ09OTlJFU0VUJzpcbiAgICAgIHJldHVybiAnQ29ubmVjdGlvbiB3YXMgc3VkZGVubHkgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbiAgICBjYXNlICdFVElNRURPVVQnOlxuICAgICAgcmV0dXJuICdDb25uZWN0aW9uIHRpbWVkIG91dC4gVGhlIHNlcnZlciB0b29rIHRvbyBsb25nIHRvIHJlc3BvbmQuJztcbiAgICBjYXNlICdDRVJUX0hBU19FWFBJUkVEJzpcbiAgICAgIHJldHVybiAnVGhlIFNTTCBjZXJ0aWZpY2F0ZSBvZiB0aGUgc2VydmVyIGhhcyBleHBpcmVkLiBUaGlzIGNvdWxkIGJlIGEgc2VjdXJpdHkgcmlzay4nO1xuICAgIGNhc2UgJ1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUnOlxuICAgIGNhc2UgJ0NFUlRfU0lHTkFUVVJFX0ZBSUxVUkUnOlxuICAgIGNhc2UgJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnOlxuICAgICAgcmV0dXJuICdTU0wgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBmYWlsZWQuIFRoaXMgY291bGQgaW5kaWNhdGUgYSBzZWN1cml0eSBpc3N1ZSBvciBhIG1pc2NvbmZpZ3VyZWQgc2VydmVyLic7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBgTmV0d29yayBlcnJvcjogJHtlcnJvci5tZXNzYWdlIHx8IGVycm9yLmNvZGUgfHwgJ1Vua25vd24gZXJyb3InfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgYSBodW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlIGZvciBhIEhUVFAgc3RhdHVzIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuSHR0cFN0YXR1c0Vycm9yKHN0YXR1c0NvZGU6IG51bWJlcik6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdHVzQ29kZSkge1xuICAgIGNhc2UgNDAwOlxuICAgICAgcmV0dXJuICdCYWQgcmVxdWVzdCAtIHRoZSBzZXJ2ZXIgY291bGQgbm90IHVuZGVyc3RhbmQgdGhlIHJlcXVlc3QnO1xuICAgIGNhc2UgNDAxOlxuICAgICAgcmV0dXJuICdVbmF1dGhvcml6ZWQgLSBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCc7XG4gICAgY2FzZSA0MDM6XG4gICAgICByZXR1cm4gJ0ZvcmJpZGRlbiAtIHlvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGlzIHJlc291cmNlJztcbiAgICBjYXNlIDQwNDpcbiAgICAgIHJldHVybiAnTm90IGZvdW5kIC0gdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBkb2VzIG5vdCBleGlzdCc7XG4gICAgY2FzZSA0MDg6XG4gICAgICByZXR1cm4gJ1JlcXVlc3QgdGltZW91dCAtIHRoZSBzZXJ2ZXIgdGltZWQgb3V0IHdhaXRpbmcgZm9yIHRoZSByZXF1ZXN0JztcbiAgICBjYXNlIDQyOTpcbiAgICAgIHJldHVybiAnVG9vIG1hbnkgcmVxdWVzdHMgLSB5b3UgaGF2ZSBzZW50IHRvbyBtYW55IHJlcXVlc3RzIGluIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUnO1xuICAgIGNhc2UgNTAwOlxuICAgICAgcmV0dXJuICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IgLSBzb21ldGhpbmcgd2VudCB3cm9uZyBvbiB0aGUgc2VydmVyJztcbiAgICBjYXNlIDUwMjpcbiAgICAgIHJldHVybiAnQmFkIGdhdGV3YXkgLSB0aGUgc2VydmVyIHJlY2VpdmVkIGFuIGludmFsaWQgcmVzcG9uc2UgZnJvbSBhbiB1cHN0cmVhbSBzZXJ2ZXInO1xuICAgIGNhc2UgNTAzOlxuICAgICAgcmV0dXJuICdTZXJ2aWNlIHVuYXZhaWxhYmxlIC0gdGhlIHNlcnZlciBpcyB0ZW1wb3JhcmlseSB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0JztcbiAgICBjYXNlIDUwNDpcbiAgICAgIHJldHVybiAnR2F0ZXdheSB0aW1lb3V0IC0gdGhlIHNlcnZlciBkaWQgbm90IHJlY2VpdmUgYSB0aW1lbHkgcmVzcG9uc2UgZnJvbSBhbiB1cHN0cmVhbSBzZXJ2ZXInO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdHVzQ29kZSA+PSA1MDBcbiAgICAgICAgPyAnU2VydmVyIGVycm9yIC0gc29tZXRoaW5nIHdlbnQgd3Jvbmcgb24gdGhlIHNlcnZlcidcbiAgICAgICAgOiAnQ2xpZW50IGVycm9yIC0gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgcmVxdWVzdCc7XG4gIH1cbn1cbiJdfQ==
@@ -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("../toolkit/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSxzQ0FVQztBQUtELDBCQVFDO0FBT0QsOEJBY0M7QUFLRCw4QkFNQztBQUtELGdDQU1DO0FBUUQsMEJBUUM7QUFPRCwwQkFtQ0M7QUFvQkQsOEJBNkJDO0FBUUQsa0NBNEJDO0FBWUQsa0RBb0JDO0FBdlBELG1DQUE0QztBQUM1Qyw0REFBd0Q7QUFFeEQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsSUFBUyxFQUFFLFFBQWE7SUFDcEQsTUFBTSxNQUFNLEdBQVEsRUFBRyxDQUFDO0lBRXhCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2xCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7U0FDM0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxDQUFNO0lBQzVCLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxJQUFBLGVBQU8sRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxD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UUFBUSxFQUFFLENBQUM7UUFDM0MsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkIsMkRBQTJEO1FBQzNELHNGQUFzRjtRQUN0RixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQixvRUFBb0U7WUFDcEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPYmogfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuXG4vKipcbiAqIFJldHVybiBhIG5ldyBvYmplY3QgYnkgYWRkaW5nIG1pc3Npbmcga2V5cyBpbnRvIGFub3RoZXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRzKGhhc2g6IGFueSwgZGVmYXVsdHM6IGFueSkge1xuICBjb25zdCByZXN1bHQ6IGFueSA9IHsgfTtcblxuICBPYmplY3Qua2V5cyhoYXNoKS5mb3JFYWNoKGsgPT4gcmVzdWx0W2tdID0gaGFzaFtrXSk7XG5cbiAgT2JqZWN0LmtleXMoZGVmYXVsdHMpXG4gICAgLmZpbHRlcihrID0+ICEoayBpbiByZXN1bHQpKVxuICAgIC5mb3JFYWNoKGsgPT4gcmVzdWx0W2tdID0gZGVmYXVsdHNba10pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHBhcmFtZXRlciBpcyBhbiBlbXB0eSBvYmplY3Qgb3IgZW1wdHkgbGlzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoeDogYW55KSB7XG4gIGlmICh4ID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4geC5sZW5ndGggPT09IDA7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMDtcbn1cblxuLyoqXG4gKiBEZWVwIGNsb25lIGEgdHJlZSBvZiBvYmplY3RzLCBsaXN0cyBvciBzY2FsYXJzXG4gKlxuICogRG9lcyBub3Qgc3VwcG9ydCBjeWNsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ2xvbmUoeDogYW55KTogYW55IHtcbiAgaWYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKHggPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4Lm1hcChkZWVwQ2xvbmUpO1xuICB9XG4gIGlmIChpc09iamVjdCh4KSkge1xuICAgIHJldHVybiBtYWtlT2JqZWN0KG1hcE9iamVjdCh4LCAoaywgdikgPT4gW2ssIGRlZXBDbG9uZSh2KV0gYXMgW3N0cmluZywgYW55XSkpO1xuICB9XG4gIHJldHVybiB4O1xufVxuXG4vKipcbiAqIE1hcCBvdmVyIGFuIG9iamVjdCwgdHJlYXRpbmcgaXQgYXMgYSBkaWN0aW9uYXJ5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3Q8VCwgVT4oeDogT2JqPFQ+LCBmbjogKGtleTogc3RyaW5nLCB2YWx1ZTogVCkgPT4gVSk6IFVbXSB7XG4gIGNvbnN0IHJldDogVVtdID0gW107XG4gIE9iamVjdC5rZXlzKHgpLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXQucHVzaChmbihrZXksIHhba2V5XSkpO1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYW4gb2JqZWN0IGZyb20gYSBsaXN0IG9mIChrLCB2KSBwYWlyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZU9iamVjdDxUPihwYWlyczogQXJyYXk8W3N0cmluZywgVF0+KTogT2JqPFQ+IHtcbiAgY29uc3QgcmV0OiBPYmo8VD4gPSB7fTtcbiAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgcmV0W3BhaXJbMF1dID0gcGFpclsxXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIERlZXAgZ2V0IGEgdmFsdWUgZnJvbSBhIHRyZWUgb2YgbmVzdGVkIG9iamVjdHNcbiAqXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBhbnkgcGFydCBvZiB0aGUgcGF0aCB3YXMgdW5zZXQgb3JcbiAqIG5vdCBhbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwR2V0KHg6IGFueSwgcGF0aDogc3RyaW5nW10pOiBhbnkge1xuICBwYXRoID0gcGF0aC5zbGljZSgpO1xuXG4gIHdoaWxlIChwYXRoLmxlbmd0aCA+IDAgJiYgaXNPYmplY3QoeCkpIHtcbiAgICBjb25zdCBrZXkgPSBwYXRoLnNoaWZ0KCkhO1xuICAgIHggPSB4W2tleV07XG4gIH1cbiAgcmV0dXJuIHBhdGgubGVuZ3RoID09PSAwID8geCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBEZWVwIHNldCBhIHZhbHVlIGluIGEgdHJlZSBvZiBuZXN0ZWQgb2JqZWN0c1xuICpcbiAqIFRocm93cyBhbiBlcnJvciBpZiBhbnkgcGFydCBvZiB0aGUgcGF0aCBpcyBub3QgYW4gb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcFNldCh4OiBhbnksIHBhdGg6IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gIHBhdGggPSBwYXRoLnNsaWNlKCk7XG5cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignUGF0aCBtYXkgbm90IGJlIGVtcHR5Jyk7XG4gIH1cblxuICB3aGlsZSAocGF0aC5sZW5ndGggPiAxICYmIGlzT2JqZWN0KHgpKSB7XG4gICAgY29uc3Qga2V5ID0gcGF0aC5zaGlmdCgpITtcblxuICAgIGlmIChpc1Byb3RvdHlwZVBvbGx1dGluZ0tleShrZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIShrZXkgaW4geCkpIHtcbiAgICAgIHhba2V5XSA9IHt9O1xuICAgIH1cbiAgICB4ID0geFtrZXldO1xuICB9XG5cbiAgaWYgKCFpc09iamVjdCh4KSkge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEV4cGVjdGVkIGFuIG9iamVjdCwgZ290ICcke3h9J2ApO1xuICB9XG5cbiAgY29uc3QgZmluYWxLZXkgPSBwYXRoWzBdO1xuXG4gIGlmIChpc1Byb3RvdHlwZVBvbGx1dGluZ0tleShmaW5hbEtleSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHhbZmluYWxLZXldID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHhbZmluYWxLZXldO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGRldGVjdCBwcm90b3R5cGUgcG9sbHV0aW5nIGtleXNcbiAqXG4gKiBBIGtleSBtYXRjaGluZyB0aGlzLCBNVVNUIE5PVCBiZSB1c2VkIGluIGFuIGFzc2lnbm1lbnQuXG4gKiBVc2UgdGhpcyB0byBjaGVjayB1c2VyLWlucHV0LlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZVBvbGx1dGluZ0tleShrZXk6IHN0cmluZykge1xuICByZXR1cm4ga2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJztcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIHRvZ2V0aGVyXG4gKlxuICogVGhlIGxlZnRtb3N0IG9iamVjdCBpcyBtdXRhdGVkIGFuZCByZXR1cm5lZC4gQXJyYXlzIGFyZSBub3QgbWVyZ2VkXG4gKiBidXQgb3ZlcndyaXR0ZW4ganVzdCBsaWtlIHNjYWxhcnMuXG4gKlxuICogSWYgYW4gb2JqZWN0IGlzIG1lcmdlZCBpbnRvIGEgbm9uLW9iamVjdCwgdGhlIG5vbi1vYmplY3QgaXMgbG9zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBNZXJnZSguLi5vYmplY3RzOiBBcnJheTxPYmo8YW55PiB8IHVuZGVmaW5lZD4pIHtcbiAgZnVuY3Rpb24gbWVyZ2VPbmUodGFyZ2V0OiBPYmo8YW55Piwgc291cmNlOiBPYmo8YW55Pikge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNvdXJjZSkpIHtcbiAgICAgIGlmIChpc1Byb3RvdHlwZVBvbGx1dGluZ0tleShrZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB7fTtcbiAgICAgICAgfSAvLyBPdmVyd3JpdGUgb24gcHVycG9zZVxuICAgICAgICBtZXJnZU9uZSh0YXJnZXRba2V5XSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb3RoZXJzID0gb2JqZWN0cy5maWx0ZXIoeCA9PiB4ICE9IG51bGwpIGFzIEFycmF5PE9iajxhbnk+PjtcblxuICBpZiAob3RoZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBpbnRvID0gb3RoZXJzLnNwbGljZSgwLCAxKVswXTtcblxuICBvdGhlcnMuZm9yRWFjaChvdGhlciA9PiBtZXJnZU9uZShpbnRvLCBvdGhlcikpO1xuICByZXR1cm4gaW50bztcbn1cblxuLyoqXG4gKiBTcGxpdHMgdGhlIGdpdmVuIG9iamVjdCBpbnRvIHR3bywgc3VjaCB0aGF0OlxuICpcbiAqIDEuIFRoZSBzaXplIG9mIHRoZSBmaXJzdCBvYmplY3QgKGFmdGVyIHN0cmluZ2lmaWVkIGluIFVURi04KSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHByb3ZpZGVkIHNpemUgbGltaXQuXG4gKiAyLiBNZXJnaW5nIHRoZSB0d28gb2JqZWN0cyByZXN1bHRzIGluIHRoZSBvcmlnaW5hbCBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEJ5U2l6ZShkYXRhOiBhbnksIG1heFNpemVCeXRlczogbnVtYmVyKTogW2FueSwgYW55XSB7XG4gIGlmIChtYXhTaXplQnl0ZXMgPCAyKSB7XG4gICAgLy8gSXQncyBpbXBvc3NpYmxlIHRvIGZpdCBhbnl0aGluZyBpbiB0aGUgZmlyc3Qgb2JqZWN0XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIGRhdGFdO1xuICB9XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhkYXRhKTtcbiAgcmV0dXJuIHJlY3Vyc2UoMCwgMCk7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZShpbmRleDogbnVtYmVyLCBydW5uaW5nVG90YWxTaXplOiBudW1iZXIpOiBbYW55LCBhbnldIHtcbiAgICBpZiAoaW5kZXggPj0gZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIC8vIEV2ZXJ5dGhpbmcgZml0cyBpbiB0aGUgZmlyc3Qgb2JqZWN0XG4gICAgICByZXR1cm4gW2RhdGEsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgY29uc3Qgc2l6ZSA9IHJ1bm5pbmdUb3RhbFNpemUgKyBlbnRyeVNpemUoZW50cmllc1tpbmRleF0pO1xuICAgIHJldHVybiAoc2l6ZSA+IG1heFNpemVCeXRlcykgPyBjdXRBdChpbmRleCkgOiByZWN1cnNlKGluZGV4ICsgMSwgc2l6ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyeVNpemUoZW50cnk6IFtzdHJpbmcsIHVua25vd25dKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKEpTT04uc3RyaW5naWZ5KE9iamVjdC5mcm9tRW50cmllcyhbZW50cnldKSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3V0QXQoaW5kZXg6IG51bWJlcik6IFthbnksIGFueV0ge1xuICAgIHJldHVybiBbXG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5zbGljZSgwLCBpbmRleCkpLFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuc2xpY2UoaW5kZXgpKSxcbiAgICBdO1xuICB9XG59XG5cbnR5cGUgRXhjbHVkZSA9IHsgW2tleTogc3RyaW5nXTogRXhjbHVkZSB8IHRydWUgfTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYW5zZm9ybXMgYWxsIGtleXMgKHJlY3Vyc2l2ZWx5KSBpbiB0aGUgcHJvdmlkZWQgYHZhbGAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB2YWwgVGhlIG9iamVjdCB3aG9zZSBrZXlzIG5lZWQgdG8gYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0gdHJhbnNmb3JtIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBlYWNoIGtleS5cbiAqIEBwYXJhbSBleGNsdWRlIFRoZSBrZXlzIHRoYXQgd2lsbCBub3QgYmUgdHJhbnNmb3JtZWQgYW5kIGNvcGllZCB0byBvdXRwdXQgZGlyZWN0bHlcbiAqIEByZXR1cm5zIEEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyBgdmFsYCwgYnV0IHdpdGggYWxsIGtleXMgdHJhbnNmb3JtZWQgYWNjb3JkaW5nIHRvIGB0cmFuc2Zvcm1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtT2JqZWN0S2V5cyh2YWw6IGFueSwgdHJhbnNmb3JtOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZywgZXhjbHVkZTogRXhjbHVkZSA9IHt9KTogYW55IHtcbiAgaWYgKHZhbCA9PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgLy8gRm9yIGFycmF5cyB3ZSBqdXN0IHBhc3MgcGFyZW50J3MgZXhjbHVkZSBvYmplY3QgZGlyZWN0bHlcbiAgICAvLyBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byBzcGVjaWZ5IGRpZmZlcmVudCBleGNsdWRlIG9wdGlvbnMgZm9yIGVhY2ggYXJyYXkgZWxlbWVudFxuICAgIHJldHVybiB2YWwubWFwKChpbnB1dDogYW55KSA9PiB0cmFuc2Zvcm1PYmplY3RLZXlzKGlucHV0LCB0cmFuc2Zvcm0sIGV4Y2x1ZGUpKTtcbiAgfVxuICBjb25zdCByZXQ6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpIHtcbiAgICBjb25zdCBjaGlsZEV4Y2x1ZGUgPSBleGNsdWRlW2tdO1xuICAgIGlmIChjaGlsZEV4Y2x1ZGUgPT09IHRydWUpIHtcbiAgICAgIC8vIHdlIGRvbid0IHRyYW5zZm9ybSB0aGlzIG9iamVjdCBpZiB0aGUga2V5IGlzIHNwZWNpZmllZCBpbiBleGNsdWRlXG4gICAgICByZXRbdHJhbnNmb3JtKGspXSA9IHY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldFt0cmFuc2Zvcm0oayldID0gdHJhbnNmb3JtT2JqZWN0S2V5cyh2LCB0cmFuc2Zvcm0sIGNoaWxkRXhjbHVkZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export declare function displayVersion(): string;
2
+ export declare function isDeveloperBuild(): boolean;
3
+ export declare function versionNumber(): string;
@@ -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,6 @@
1
+ /**
2
+ * Run a number of promise generators with max parallelism
3
+ *
4
+ * Order is not maintained between the input and output.
5
+ */
6
+ export declare function parallelPromises<A>(n: number, promises: Array<() => Promise<A>>): Promise<Array<A>>;
@@ -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;