├── .circleci └── config.yml ├── LICENSE ├── README.md ├── orbs └── pulumi.yml └── tests ├── .gitignore ├── Pulumi.pulumi-orbs-alpha.yaml ├── Pulumi.pulumi-orbs-beta.yaml ├── Pulumi.yaml ├── index.js ├── package-lock.json └── package.json /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | # Going super-meta, we build/validate the orbs in this CircleCI config, 4 | # and we also use a dev build to test it. 5 | orbs: 6 | pulumi: pulumi/pulumi@2.0.0 7 | 8 | workflows: 9 | version: 2 10 | test-orb: 11 | jobs: 12 | - validate-orbs 13 | - test-login 14 | - test-preview 15 | - test-update 16 | 17 | commands: 18 | install-circleci: 19 | description: Installs the CircleCI CLI. 20 | steps: 21 | - run: 22 | name: "Installing CircleCI CLI" 23 | command: | 24 | curl https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh --fail --show-error | sudo bash 25 | circleci version 26 | 27 | jobs: 28 | validate-orbs: 29 | docker: 30 | - image: cimg/node:lts 31 | working_directory: ~/repo 32 | steps: 33 | - checkout 34 | - install-circleci 35 | - run: 36 | name: Validate Pulumi orbs 37 | command: | 38 | circleci orb validate ./orbs/pulumi.yml 39 | 40 | test-login: 41 | docker: 42 | - image: cimg/node:lts 43 | working_directory: ~/repo 44 | steps: 45 | - checkout 46 | - pulumi/login 47 | - run: 48 | command: pulumi version 49 | 50 | test-preview: 51 | docker: 52 | - image: cimg/node:lts 53 | working_directory: ~/repo/ 54 | steps: 55 | - checkout 56 | - pulumi/login 57 | - run: 58 | name: Install NPM packages 59 | command: cd ./tests && npm install 60 | - pulumi/preview: 61 | stack: pulumi-orbs-alpha 62 | working_directory: ./tests 63 | 64 | test-update: 65 | docker: 66 | - image: cimg/node:lts 67 | working_directory: ~/repo/ 68 | steps: 69 | - checkout 70 | - pulumi/login 71 | - run: 72 | name: Install NPM packages 73 | command: cd ./tests && npm install 74 | - pulumi/update: 75 | stack: pulumi-orbs-beta 76 | skip-preview: true 77 | working_directory: ./tests 78 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright 2019 Pulumi Corporation 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pulumi Orbs for CircleCI 2 | 3 | This repository contains Pulumi Orbs for use in CircleCI. Using these orbs 4 | will allow you to easily integrate stack updates and previews into 5 | your existing CI/CD workflow, without the need for writing custom 6 | scripts. 7 | 8 | ## Usage 9 | 10 | To use these orbs, simply include the `pulumi/pulumi@2.0.0` orbs package, and 11 | then call the orb commands like `pulumi/login` or `pulumi/update` from your 12 | CircleCI configuration file. 13 | 14 | ```yaml 15 | version: 2.1 16 | orbs: 17 | pulumi: pulumi/pulumi@2.0.0 18 | jobs: 19 | build: 20 | docker: 21 | - image: circleci/node:7.10 22 | working_directory: ~/repo 23 | steps: 24 | - checkout 25 | - pulumi/login 26 | - run: 27 | command: | 28 | npm install 29 | npm run build 30 | - pulumi/update: 31 | stack: website-prod 32 | ``` 33 | 34 | ## Orb Reference 35 | 36 | ### pulumi/login 37 | 38 | The `login` orb downloads the Pulumi CLI and authenticates with the Pulumi 39 | service. 40 | 41 | > It is recommended to omit the `version` and `access-token` parameters, and 42 | > instead download the latest Pulumi CLI and provide the access token via a 43 | > secure environment variable named `PULUMI_ACCESS_TOKEN`. 44 | 45 | | Parameter | type | default | description | 46 | |-------------------|---------|-------------|----------------| 47 | | version | string | latest | Version of the Pulumi CLI to install. | 48 | | cloud-url | string | https://api.pulumi.com | URL of the Pulumi service to log into. | 49 | | access-token | string | ${PULUMI_ACCESS_TOKEN} | The access token to use to log in. | 50 | 51 | ### pulumi/stack_init 52 | 53 | The `stack_init` orb initializes a new Pulumi stack. 54 | 55 | If the `Pulumi.yaml` file for your stack is in a different directory than the 56 | CircleCI job's current working directory, you will need to set the `working_directory` 57 | parameter. 58 | 59 | | Parameter | type | default | description | 60 | |-------------------|---------|-------------|----------------| 61 | | stack | string | (none) | Name of the stack to initialize. | 62 | | secrets_provider | string | default | The type of the provider that should be used to encrypt and decrypt secrets (possible choices: default, passphrase, awskms, azurekeyvault, gcpkms, hashivault). | 63 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 64 | | copy | string | "" | The stack name from which to copy an existing stack's configuration 65 | 66 | ### pulumi/stack_rm 67 | 68 | The `stack_rm` orb removes a stack and its configuration.. 69 | 70 | | Parameter | type | default | description | 71 | |-------------------|---------|-------------|----------------| 72 | | stack | string | (none) | Name of the stack to remove. | 73 | | force | boolean | false | Whether or not to force deletion of the stack, leaving behind any resources managed by the stack. | 74 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 75 | 76 | ### pulumi/stack_output 77 | 78 | The `stack_output` sets a stack's output property to an environment variable. 79 | 80 | | Parameter | type | default | description | 81 | |-------------------|---------|-------------|----------------| 82 | | stack | string | (none) | Name of the stack to read the output property from. | 83 | | property_name | string | (none) | Name of the output property to read. | 84 | | env_var | string | (none) | Name of the environment variable to set the output property's value to. | 85 | | show_secrets | boolean | false | Display stack outputs which are marked as secret in plaintext. | 86 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 87 | 88 | ### pulumi/preview 89 | 90 | The `preview` orb performs a preview of the update to a given Pulumi stack. 91 | 92 | > It is recommended to always run a preview in your CI/CD, as it will catch 93 | > certain classes of errors that wouldn't otherwise be found in a standard 94 | > build, test, lint setup. 95 | 96 | | Parameter | type | default | description | 97 | |-------------------|---------|-------------|----------------| 98 | | stack | string | (none) | Name of the Pulumi stack to preview. | 99 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 100 | 101 | ### pulumi/update 102 | 103 | The `update` orb performs an update to a given Pulumi stack. 104 | 105 | | Parameter | type | default | description | 106 | |-------------------|---------|-------------|----------------| 107 | | stack | string | (none) | Name of the Pulumi stack to update. | 108 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 109 | | skip-preview | boolean | false | Whether or not to skip the preview step before the update. | 110 | 111 | ### pulumi/destroy 112 | 113 | The `destroy` orb destroys a given Pulumi stack and its resources. After running to completion, all of this stack’s resources and associated state will be gone. 114 | 115 | Warning: this command is generally irreversible and should be used with great care. 116 | 117 | | Parameter | type | default | description | 118 | |-------------------|---------|-------------|----------------| 119 | | stack | string | (none) | Name of the Pulumi stack to destroy. | 120 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 121 | | skip-preview | boolean | false | Whether or not to skip the preview step before destroying the stack. | 122 | 123 | ### pulumi/refresh 124 | 125 | The `refresh` orb performs a refresh to a given Pulumi stack. The stack’s resource state is compared to the current state known in the cloud provider, and the stack's resources are updated as necessary. No changes will be made to the resources on the cloud provider, but resources that can no longer be found will be removed from the stack. 126 | 127 | | Parameter | type | default | description | 128 | |-------------------|---------|-------------|----------------| 129 | | stack | string | (none) | Name of the Pulumi stack to refresh. | 130 | | expect_no_changes | boolean | false | If set, Pulumi will report an error if any resource changes are detected. | 131 | | working_directory | string | . | The relative working directory to run `pulumi` from. | 132 | | skip-preview | boolean | false | Whether or not to skip the preview step before the refresh. | 133 | -------------------------------------------------------------------------------- /orbs/pulumi.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | description: | 4 | Pulumi: Cloud Native Infrastructure as Code 5 | 6 | Create, deploy, and manage cloud native applications and infrastructure 7 | in your favorite language, using an open source platform that enables 8 | sharing, reuse, and safe and predictable changes in a team environment. 9 | 10 | The Pulumi Orbs for CircleCI enables you to use easily integrate Pulumi 11 | into your CircleCI workflows. 12 | 13 | Follow the instructions here to obtain the Pulumi Access Token: 14 | https://www.pulumi.com/docs/intro/console/accounts-and-organizations/accounts/#access-tokens 15 | 16 | display: 17 | source_url: https://github.com/pulumi/circleci 18 | home_url: https://www.pulumi.com 19 | 20 | 21 | commands: 22 | 23 | # login command 24 | login: 25 | parameters: 26 | version: 27 | type: string 28 | description: 29 | "Version of the Pulumi CLI to install. Defaults to the latest version." 30 | default: latest 31 | cloud-url: 32 | type: string 33 | description: "URL of the Pulumi service to log into." 34 | default: https://api.pulumi.com 35 | access-token: 36 | type: string 37 | description: 38 | "The access token to use, defaulting to `$PULUMI_ACCESS_TOKEN` so you can 39 | set the environment variable and not need to declare a value in config." 40 | default: "${PULUMI_ACCESS_TOKEN}" 41 | steps: 42 | - run: 43 | name: "Install Pulumi CLI, if needed" 44 | command: | 45 | if [ << parameters.version >> == "latest" ]; then 46 | curl -L https://get.pulumi.com/ | bash -s 47 | else 48 | curl -L https://get.pulumi.com/ | bash -s -- --version << parameters.version >> 49 | fi 50 | # Add to PATH 51 | echo 'export PATH=${HOME}/.pulumi/bin:$PATH' >> $BASH_ENV 52 | source $BASH_ENV 53 | - run: 54 | name: "Log into Pulumi" 55 | command: | 56 | export PULUMI_ACCESS_TOKEN="<< parameters.access-token >>" 57 | pulumi login --cloud-url << parameters.cloud-url >> 58 | 59 | # stack init command 60 | stack_init: 61 | parameters: 62 | stack: 63 | type: string 64 | description: "Name of the stack to initialize." 65 | secrets_provider: 66 | type: string 67 | description: "The type of the provider that should be used to encrypt and decrypt secrets (possible choices: default, passphrase, awskms, azurekeyvault, gcpkms, hashivault) (default 'default')." 68 | default: "default" 69 | working_directory: 70 | type: string 71 | description: 72 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 73 | default: "." 74 | copy: 75 | type: string 76 | description: "The stack name from which to copy an existing stack's configuration (default '')" 77 | default: "" 78 | steps: 79 | - run: 80 | name: "pulumi stack init --stack << parameters.stack >> --secrets-provider << parameters.secrets_provider >>" 81 | command: pulumi stack init --stack << parameters.stack >> --secrets-provider << parameters.secrets_provider >> --cwd << parameters.working_directory >> <<# parameters.copy >>--copy-config-from << parameters.copy >><> 82 | 83 | # stack rm command 84 | stack_rm: 85 | parameters: 86 | stack: 87 | type: string 88 | description: "Name of the stack to remove." 89 | force: 90 | type: boolean 91 | description: "Forces deletion of the stack, leaving behind any resources managed by the stack." 92 | default: false 93 | working_directory: 94 | type: string 95 | description: 96 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 97 | default: "." 98 | steps: 99 | - run: 100 | name: "pulumi stack rm << parameters.stack >>" 101 | command: pulumi stack rm << parameters.stack >> --yes <<# parameters.force >>--force<> --cwd << parameters.working_directory >> 102 | 103 | # stack output command 104 | stack_output: 105 | parameters: 106 | stack: 107 | type: string 108 | description: "Name of the stack to operate on." 109 | property_name: 110 | type: string 111 | description: "Property name of the stack output to set to the environment variable." 112 | env_var: 113 | type: string 114 | description: "Name of the environment variable to set the output property's value to." 115 | show_secrets: 116 | type: boolean 117 | description: "Display stack outputs which are marked as secret in plaintext." 118 | default: false 119 | working_directory: 120 | type: string 121 | description: 122 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 123 | default: "." 124 | steps: 125 | - run: 126 | name: "pulumi stack output << parameters.property_name >> --stack << parameters.stack >>" 127 | command: | 128 | OUTPUT_VALUE=$(pulumi stack output << parameters.property_name >> --stack << parameters.stack >> <<# parameters.show_secrets >>--show-secrets<> --cwd << parameters.working_directory >>) 129 | echo "export << parameters.env_var >>=\"${OUTPUT_VALUE}\"" >> $BASH_ENV 130 | 131 | # preview command 132 | preview: 133 | parameters: 134 | stack: 135 | type: string 136 | description: "Name of the Pulumi stack to preview." 137 | working_directory: 138 | type: string 139 | description: 140 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 141 | default: "." 142 | steps: 143 | - run: 144 | name: "pulumi preview --stack << parameters.stack >>" 145 | command: pulumi preview --stack << parameters.stack >> --cwd << parameters.working_directory >> 146 | 147 | # update command 148 | update: 149 | parameters: 150 | stack: 151 | type: string 152 | description: "Name of the Pulumi stack to update." 153 | working_directory: 154 | type: string 155 | description: 156 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 157 | default: "." 158 | skip-preview: 159 | type: boolean 160 | description: "Do not perform a preview before performing the update." 161 | default: false 162 | steps: 163 | - run: 164 | name: "pulumi update --stack << parameters.stack >>" 165 | command: pulumi update --yes --stack << parameters.stack >> --cwd << parameters.working_directory >> <<# parameters.skip-preview >>--skip-preview<> 166 | 167 | # destroy command 168 | destroy: 169 | parameters: 170 | stack: 171 | type: string 172 | description: "Name of the Pulumi stack to destroy." 173 | working_directory: 174 | type: string 175 | description: 176 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 177 | default: "." 178 | skip-preview: 179 | type: boolean 180 | description: "Do not perform a preview before performing the destroy." 181 | default: false 182 | steps: 183 | - run: 184 | name: "pulumi destroy --stack << parameters.stack >>" 185 | command: pulumi destroy --yes --stack << parameters.stack >> --cwd << parameters.working_directory >> <<# parameters.skip-preview >>--skip-preview<> 186 | 187 | # refresh command 188 | refresh: 189 | parameters: 190 | stack: 191 | type: string 192 | description: "Name of the Pulumi stack to refresh." 193 | expect_no_changes: 194 | type: boolean 195 | description: "If set, Pulumi will report an error if any resource changes are detected." 196 | default: false 197 | working_directory: 198 | type: string 199 | description: 200 | "The relative working directory to use, i.e. where your Pulumi.yaml is located." 201 | default: "." 202 | skip-preview: 203 | type: boolean 204 | description: "Do not perform a preview before performing the refresh." 205 | default: false 206 | steps: 207 | - run: 208 | name: "pulumi refresh --stack << parameters.stack >>" 209 | command: pulumi refresh --yes --stack << parameters.stack >> <<# parameters.expect_no_changes >>--expect-no-changes<> --cwd << parameters.working_directory >> <<# parameters.skip-preview >>--skip-preview<> 210 | 211 | examples: 212 | login_example: 213 | description: 214 | "Using the pulumi/login orb, specifying a specific version of the CLI to install and 215 | a value other than ${PULUMI_ACCESS_TOKEN} to use for the access token." 216 | usage: 217 | version: 2.1 218 | orbs: 219 | pulumi: pulumi/pulumi@x.y 220 | jobs: 221 | build: 222 | docker: 223 | - image: circleci/node:10 224 | working_directory: ~/repo/ 225 | steps: 226 | - pulumi/login: 227 | version: "16.0.2" 228 | access-token: ${OTHER_ACCESS_TOKEN} 229 | 230 | update_example: 231 | description: 232 | "Runs `pulumi update` for a stack. The `working_directory` parameter can be used 233 | if the Pulumi.yaml file is not in the current working directory." 234 | usage: 235 | version: 2.1 236 | orbs: 237 | pulumi: pulumi/pulumi@x.y 238 | jobs: 239 | build: 240 | docker: 241 | - image: circleci/node:10 242 | working_directory: ~/repo/ 243 | steps: 244 | - checkout 245 | - pulumi/login 246 | - pulumi/update: 247 | stack: robot-co/website-prod 248 | working_directory: ~/repo/src/website/ 249 | 250 | review_app_example: 251 | description: 252 | "Creates a new Pulumi stack and deploys the source code built as part of the workflow, running 253 | tests against it. When complete, tears down the stack and cleans up any cloud resources." 254 | usage: 255 | version: 2.1 256 | orbs: 257 | pulumi: pulumi/pulumi@x.y 258 | jobs: 259 | build: 260 | docker: 261 | - image: circleci/node:10 262 | working_directory: ~/repo/ 263 | steps: 264 | - checkout 265 | 266 | # Install any dependencies and build the Pulumi program. 267 | - build 268 | 269 | # Create a new Pulumi stack specifically for testing the 270 | # new infrastructure changes. 271 | - pulumi/login 272 | 273 | # Create a new stack, specific to this CircleCI build, 274 | # and deploy it. 275 | - pulumi/stack_init: 276 | stack: robot-co/test-pr_${CIRCLE_BUILD_NUM} 277 | - pulumi/update: 278 | stack: robot-co/test-pr_${CIRCLE_BUILD_NUM} 279 | 280 | # Now that the stack has been created, retrieve one of its 281 | # output properties. e.g. the URL it is running at. 282 | - pulumi/stack_output: 283 | stack: robot-co/test-pr_${CIRCLE_BUILD_NUM} 284 | property_name: awsLambdaUrl 285 | env_var: TEST_URL 286 | 287 | # Run tests against the newly deployed Pulumi stack. 288 | - run_tests $TEST_URL 289 | 290 | # After testing is complete, tear down the resources 291 | # and delete the stack. 292 | - pulumi/destroy 293 | - pulumi/stack_rm: 294 | stack: robot-co/test-pr_${CIRCLE_BUILD_NUM} 295 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | -------------------------------------------------------------------------------- /tests/Pulumi.pulumi-orbs-alpha.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | pulumi-orbs-test:message: Hello, CircleCI 3 | -------------------------------------------------------------------------------- /tests/Pulumi.pulumi-orbs-beta.yaml: -------------------------------------------------------------------------------- 1 | config: 2 | pulumi-orbs-test:message: Hello, CircleCI (stack beta) 3 | -------------------------------------------------------------------------------- /tests/Pulumi.yaml: -------------------------------------------------------------------------------- 1 | name: pulumi-orbs-test 2 | runtime: nodejs 3 | description: Noop Pulumi program for testing preview and update. 4 | 5 | -------------------------------------------------------------------------------- /tests/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | const pulumi = require("@pulumi/pulumi"); 3 | const config = new pulumi.Config(); 4 | console.log(`config message: ${config.get("message")}`); 5 | -------------------------------------------------------------------------------- /tests/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tests", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "name": "tests", 8 | "dependencies": { 9 | "@pulumi/pulumi": "*" 10 | } 11 | }, 12 | "node_modules/@grpc/grpc-js": { 13 | "version": "1.3.8", 14 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", 15 | "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", 16 | "dependencies": { 17 | "@types/node": ">=12.12.47" 18 | }, 19 | "engines": { 20 | "node": "^8.13.0 || >=10.10.0" 21 | } 22 | }, 23 | "node_modules/@logdna/tail-file": { 24 | "version": "2.1.1", 25 | "resolved": "https://registry.npmjs.org/@logdna/tail-file/-/tail-file-2.1.1.tgz", 26 | "integrity": "sha512-WVq5fr6nHJY2+pBxSpAGRsYjekwILQWJLcfRoo2cr7SpXZ4BhbW/9AfYyWNRP36vBssaMR1AoyK5d1jA+ykBhw==", 27 | "engines": { 28 | "node": ">=10.3.0" 29 | } 30 | }, 31 | "node_modules/@protobufjs/aspromise": { 32 | "version": "1.1.2", 33 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 34 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 35 | }, 36 | "node_modules/@protobufjs/base64": { 37 | "version": "1.1.2", 38 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 39 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 40 | }, 41 | "node_modules/@protobufjs/codegen": { 42 | "version": "2.0.4", 43 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 44 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 45 | }, 46 | "node_modules/@protobufjs/eventemitter": { 47 | "version": "1.1.0", 48 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 49 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 50 | }, 51 | "node_modules/@protobufjs/fetch": { 52 | "version": "1.1.0", 53 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 54 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 55 | "dependencies": { 56 | "@protobufjs/aspromise": "^1.1.1", 57 | "@protobufjs/inquire": "^1.1.0" 58 | } 59 | }, 60 | "node_modules/@protobufjs/float": { 61 | "version": "1.0.2", 62 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 63 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 64 | }, 65 | "node_modules/@protobufjs/inquire": { 66 | "version": "1.1.0", 67 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 68 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 69 | }, 70 | "node_modules/@protobufjs/path": { 71 | "version": "1.1.2", 72 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 73 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 74 | }, 75 | "node_modules/@protobufjs/pool": { 76 | "version": "1.1.0", 77 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 78 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 79 | }, 80 | "node_modules/@protobufjs/utf8": { 81 | "version": "1.1.0", 82 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 83 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 84 | }, 85 | "node_modules/@pulumi/pulumi": { 86 | "version": "3.26.1", 87 | "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.26.1.tgz", 88 | "integrity": "sha512-tsj2WR43b8+uMvJq9LNHNxSKfI3HNP+rE2fAAP7cZ/7YLGxBXAA/Y9X/8MbiIqkN03QtKY5q0l7/djTTBW7FPQ==", 89 | "dependencies": { 90 | "@grpc/grpc-js": "~1.3.8", 91 | "@logdna/tail-file": "^2.0.6", 92 | "@pulumi/query": "^0.3.0", 93 | "google-protobuf": "^3.5.0", 94 | "js-yaml": "^3.14.0", 95 | "minimist": "^1.2.0", 96 | "normalize-package-data": "^2.4.0", 97 | "protobufjs": "^6.8.6", 98 | "read-package-tree": "^5.3.1", 99 | "require-from-string": "^2.0.1", 100 | "semver": "^6.1.0", 101 | "source-map-support": "^0.4.16", 102 | "ts-node": "^7.0.1", 103 | "typescript": "~3.7.3", 104 | "upath": "^1.1.0" 105 | }, 106 | "engines": { 107 | "node": ">=8.13.0 || >=10.10.0" 108 | } 109 | }, 110 | "node_modules/@pulumi/query": { 111 | "version": "0.3.0", 112 | "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz", 113 | "integrity": "sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==" 114 | }, 115 | "node_modules/@types/long": { 116 | "version": "4.0.1", 117 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 118 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 119 | }, 120 | "node_modules/@types/node": { 121 | "version": "13.13.14", 122 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.14.tgz", 123 | "integrity": "sha512-Az3QsOt1U/K1pbCQ0TXGELTuTkPLOiFIQf3ILzbOyo0FqgV9SxRnxbxM5QlAveERZMHpZY+7u3Jz2tKyl+yg6g==" 124 | }, 125 | "node_modules/argparse": { 126 | "version": "1.0.10", 127 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 128 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 129 | "dependencies": { 130 | "sprintf-js": "~1.0.2" 131 | } 132 | }, 133 | "node_modules/arrify": { 134 | "version": "1.0.1", 135 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 136 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 137 | "engines": { 138 | "node": ">=0.10.0" 139 | } 140 | }, 141 | "node_modules/asap": { 142 | "version": "2.0.6", 143 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 144 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 145 | }, 146 | "node_modules/balanced-match": { 147 | "version": "1.0.0", 148 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 149 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 150 | }, 151 | "node_modules/brace-expansion": { 152 | "version": "1.1.11", 153 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 154 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 155 | "dependencies": { 156 | "balanced-match": "^1.0.0", 157 | "concat-map": "0.0.1" 158 | } 159 | }, 160 | "node_modules/buffer-from": { 161 | "version": "1.1.1", 162 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 163 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 164 | }, 165 | "node_modules/concat-map": { 166 | "version": "0.0.1", 167 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 168 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 169 | }, 170 | "node_modules/debuglog": { 171 | "version": "1.0.1", 172 | "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", 173 | "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", 174 | "engines": { 175 | "node": "*" 176 | } 177 | }, 178 | "node_modules/define-properties": { 179 | "version": "1.1.3", 180 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 181 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 182 | "dependencies": { 183 | "object-keys": "^1.0.12" 184 | }, 185 | "engines": { 186 | "node": ">= 0.4" 187 | } 188 | }, 189 | "node_modules/dezalgo": { 190 | "version": "1.0.3", 191 | "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", 192 | "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", 193 | "dependencies": { 194 | "asap": "^2.0.0", 195 | "wrappy": "1" 196 | } 197 | }, 198 | "node_modules/diff": { 199 | "version": "3.5.0", 200 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 201 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 202 | "engines": { 203 | "node": ">=0.3.1" 204 | } 205 | }, 206 | "node_modules/es-abstract": { 207 | "version": "1.17.6", 208 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 209 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 210 | "dependencies": { 211 | "es-to-primitive": "^1.2.1", 212 | "function-bind": "^1.1.1", 213 | "has": "^1.0.3", 214 | "has-symbols": "^1.0.1", 215 | "is-callable": "^1.2.0", 216 | "is-regex": "^1.1.0", 217 | "object-inspect": "^1.7.0", 218 | "object-keys": "^1.1.1", 219 | "object.assign": "^4.1.0", 220 | "string.prototype.trimend": "^1.0.1", 221 | "string.prototype.trimstart": "^1.0.1" 222 | }, 223 | "engines": { 224 | "node": ">= 0.4" 225 | }, 226 | "funding": { 227 | "url": "https://github.com/sponsors/ljharb" 228 | } 229 | }, 230 | "node_modules/es-to-primitive": { 231 | "version": "1.2.1", 232 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 233 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 234 | "dependencies": { 235 | "is-callable": "^1.1.4", 236 | "is-date-object": "^1.0.1", 237 | "is-symbol": "^1.0.2" 238 | }, 239 | "engines": { 240 | "node": ">= 0.4" 241 | }, 242 | "funding": { 243 | "url": "https://github.com/sponsors/ljharb" 244 | } 245 | }, 246 | "node_modules/esprima": { 247 | "version": "4.0.1", 248 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 249 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 250 | "bin": { 251 | "esparse": "bin/esparse.js", 252 | "esvalidate": "bin/esvalidate.js" 253 | }, 254 | "engines": { 255 | "node": ">=4" 256 | } 257 | }, 258 | "node_modules/fs.realpath": { 259 | "version": "1.0.0", 260 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 261 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 262 | }, 263 | "node_modules/function-bind": { 264 | "version": "1.1.1", 265 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 266 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 267 | }, 268 | "node_modules/glob": { 269 | "version": "7.1.6", 270 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 271 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 272 | "dependencies": { 273 | "fs.realpath": "^1.0.0", 274 | "inflight": "^1.0.4", 275 | "inherits": "2", 276 | "minimatch": "^3.0.4", 277 | "once": "^1.3.0", 278 | "path-is-absolute": "^1.0.0" 279 | }, 280 | "engines": { 281 | "node": "*" 282 | }, 283 | "funding": { 284 | "url": "https://github.com/sponsors/isaacs" 285 | } 286 | }, 287 | "node_modules/google-protobuf": { 288 | "version": "3.12.2", 289 | "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.12.2.tgz", 290 | "integrity": "sha512-4CZhpuRr1d6HjlyrxoXoocoGFnRYgKULgMtikMddA9ztRyYR59Aondv2FioyxWVamRo0rF2XpYawkTCBEQOSkA==" 291 | }, 292 | "node_modules/graceful-fs": { 293 | "version": "4.2.4", 294 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 295 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 296 | }, 297 | "node_modules/has": { 298 | "version": "1.0.3", 299 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 300 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 301 | "dependencies": { 302 | "function-bind": "^1.1.1" 303 | }, 304 | "engines": { 305 | "node": ">= 0.4.0" 306 | } 307 | }, 308 | "node_modules/has-symbols": { 309 | "version": "1.0.1", 310 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 311 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 312 | "engines": { 313 | "node": ">= 0.4" 314 | }, 315 | "funding": { 316 | "url": "https://github.com/sponsors/ljharb" 317 | } 318 | }, 319 | "node_modules/hosted-git-info": { 320 | "version": "2.8.9", 321 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 322 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 323 | }, 324 | "node_modules/inflight": { 325 | "version": "1.0.6", 326 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 327 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 328 | "dependencies": { 329 | "once": "^1.3.0", 330 | "wrappy": "1" 331 | } 332 | }, 333 | "node_modules/inherits": { 334 | "version": "2.0.4", 335 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 336 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 337 | }, 338 | "node_modules/is-callable": { 339 | "version": "1.2.0", 340 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 341 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", 342 | "engines": { 343 | "node": ">= 0.4" 344 | }, 345 | "funding": { 346 | "url": "https://github.com/sponsors/ljharb" 347 | } 348 | }, 349 | "node_modules/is-date-object": { 350 | "version": "1.0.2", 351 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 352 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 353 | "engines": { 354 | "node": ">= 0.4" 355 | }, 356 | "funding": { 357 | "url": "https://github.com/sponsors/ljharb" 358 | } 359 | }, 360 | "node_modules/is-regex": { 361 | "version": "1.1.0", 362 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", 363 | "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", 364 | "dependencies": { 365 | "has-symbols": "^1.0.1" 366 | }, 367 | "engines": { 368 | "node": ">= 0.4" 369 | }, 370 | "funding": { 371 | "url": "https://github.com/sponsors/ljharb" 372 | } 373 | }, 374 | "node_modules/is-symbol": { 375 | "version": "1.0.3", 376 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 377 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 378 | "dependencies": { 379 | "has-symbols": "^1.0.1" 380 | }, 381 | "engines": { 382 | "node": ">= 0.4" 383 | }, 384 | "funding": { 385 | "url": "https://github.com/sponsors/ljharb" 386 | } 387 | }, 388 | "node_modules/js-yaml": { 389 | "version": "3.14.1", 390 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 391 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 392 | "dependencies": { 393 | "argparse": "^1.0.7", 394 | "esprima": "^4.0.0" 395 | }, 396 | "bin": { 397 | "js-yaml": "bin/js-yaml.js" 398 | } 399 | }, 400 | "node_modules/json-parse-better-errors": { 401 | "version": "1.0.2", 402 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 403 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" 404 | }, 405 | "node_modules/long": { 406 | "version": "4.0.0", 407 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 408 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 409 | }, 410 | "node_modules/make-error": { 411 | "version": "1.3.6", 412 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 413 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 414 | }, 415 | "node_modules/minimatch": { 416 | "version": "3.1.2", 417 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 418 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 419 | "dependencies": { 420 | "brace-expansion": "^1.1.7" 421 | }, 422 | "engines": { 423 | "node": "*" 424 | } 425 | }, 426 | "node_modules/minimist": { 427 | "version": "1.2.6", 428 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 429 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 430 | }, 431 | "node_modules/mkdirp": { 432 | "version": "0.5.5", 433 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 434 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 435 | "dependencies": { 436 | "minimist": "^1.2.5" 437 | }, 438 | "bin": { 439 | "mkdirp": "bin/cmd.js" 440 | } 441 | }, 442 | "node_modules/normalize-package-data": { 443 | "version": "2.5.0", 444 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 445 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 446 | "dependencies": { 447 | "hosted-git-info": "^2.1.4", 448 | "resolve": "^1.10.0", 449 | "semver": "2 || 3 || 4 || 5", 450 | "validate-npm-package-license": "^3.0.1" 451 | } 452 | }, 453 | "node_modules/normalize-package-data/node_modules/semver": { 454 | "version": "5.7.1", 455 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 456 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 457 | "bin": { 458 | "semver": "bin/semver" 459 | } 460 | }, 461 | "node_modules/npm-normalize-package-bin": { 462 | "version": "1.0.1", 463 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 464 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 465 | }, 466 | "node_modules/object-inspect": { 467 | "version": "1.8.0", 468 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 469 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", 470 | "funding": { 471 | "url": "https://github.com/sponsors/ljharb" 472 | } 473 | }, 474 | "node_modules/object-keys": { 475 | "version": "1.1.1", 476 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 477 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 478 | "engines": { 479 | "node": ">= 0.4" 480 | } 481 | }, 482 | "node_modules/object.assign": { 483 | "version": "4.1.0", 484 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 485 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 486 | "dependencies": { 487 | "define-properties": "^1.1.2", 488 | "function-bind": "^1.1.1", 489 | "has-symbols": "^1.0.0", 490 | "object-keys": "^1.0.11" 491 | }, 492 | "engines": { 493 | "node": ">= 0.4" 494 | } 495 | }, 496 | "node_modules/object.getownpropertydescriptors": { 497 | "version": "2.1.0", 498 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 499 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 500 | "dependencies": { 501 | "define-properties": "^1.1.3", 502 | "es-abstract": "^1.17.0-next.1" 503 | }, 504 | "engines": { 505 | "node": ">= 0.8" 506 | }, 507 | "funding": { 508 | "url": "https://github.com/sponsors/ljharb" 509 | } 510 | }, 511 | "node_modules/once": { 512 | "version": "1.4.0", 513 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 514 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 515 | "dependencies": { 516 | "wrappy": "1" 517 | } 518 | }, 519 | "node_modules/path-is-absolute": { 520 | "version": "1.0.1", 521 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 522 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 523 | "engines": { 524 | "node": ">=0.10.0" 525 | } 526 | }, 527 | "node_modules/path-parse": { 528 | "version": "1.0.7", 529 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 530 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 531 | }, 532 | "node_modules/protobufjs": { 533 | "version": "6.11.3", 534 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", 535 | "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", 536 | "hasInstallScript": true, 537 | "dependencies": { 538 | "@protobufjs/aspromise": "^1.1.2", 539 | "@protobufjs/base64": "^1.1.2", 540 | "@protobufjs/codegen": "^2.0.4", 541 | "@protobufjs/eventemitter": "^1.1.0", 542 | "@protobufjs/fetch": "^1.1.0", 543 | "@protobufjs/float": "^1.0.2", 544 | "@protobufjs/inquire": "^1.1.0", 545 | "@protobufjs/path": "^1.1.2", 546 | "@protobufjs/pool": "^1.1.0", 547 | "@protobufjs/utf8": "^1.1.0", 548 | "@types/long": "^4.0.1", 549 | "@types/node": ">=13.7.0", 550 | "long": "^4.0.0" 551 | }, 552 | "bin": { 553 | "pbjs": "bin/pbjs", 554 | "pbts": "bin/pbts" 555 | } 556 | }, 557 | "node_modules/read-package-json": { 558 | "version": "2.1.1", 559 | "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz", 560 | "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==", 561 | "dependencies": { 562 | "glob": "^7.1.1", 563 | "json-parse-better-errors": "^1.0.1", 564 | "normalize-package-data": "^2.0.0", 565 | "npm-normalize-package-bin": "^1.0.0" 566 | }, 567 | "optionalDependencies": { 568 | "graceful-fs": "^4.1.2" 569 | } 570 | }, 571 | "node_modules/read-package-tree": { 572 | "version": "5.3.1", 573 | "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", 574 | "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", 575 | "deprecated": "The functionality that this package provided is now in @npmcli/arborist", 576 | "dependencies": { 577 | "read-package-json": "^2.0.0", 578 | "readdir-scoped-modules": "^1.0.0", 579 | "util-promisify": "^2.1.0" 580 | } 581 | }, 582 | "node_modules/readdir-scoped-modules": { 583 | "version": "1.1.0", 584 | "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", 585 | "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", 586 | "dependencies": { 587 | "debuglog": "^1.0.1", 588 | "dezalgo": "^1.0.0", 589 | "graceful-fs": "^4.1.2", 590 | "once": "^1.3.0" 591 | } 592 | }, 593 | "node_modules/require-from-string": { 594 | "version": "2.0.2", 595 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 596 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 597 | "engines": { 598 | "node": ">=0.10.0" 599 | } 600 | }, 601 | "node_modules/resolve": { 602 | "version": "1.17.0", 603 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 604 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 605 | "dependencies": { 606 | "path-parse": "^1.0.6" 607 | }, 608 | "funding": { 609 | "url": "https://github.com/sponsors/ljharb" 610 | } 611 | }, 612 | "node_modules/semver": { 613 | "version": "6.3.0", 614 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 615 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 616 | "bin": { 617 | "semver": "bin/semver.js" 618 | } 619 | }, 620 | "node_modules/source-map": { 621 | "version": "0.5.7", 622 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 623 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 624 | "engines": { 625 | "node": ">=0.10.0" 626 | } 627 | }, 628 | "node_modules/source-map-support": { 629 | "version": "0.4.18", 630 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 631 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 632 | "dependencies": { 633 | "source-map": "^0.5.6" 634 | } 635 | }, 636 | "node_modules/spdx-correct": { 637 | "version": "3.1.1", 638 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 639 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 640 | "dependencies": { 641 | "spdx-expression-parse": "^3.0.0", 642 | "spdx-license-ids": "^3.0.0" 643 | } 644 | }, 645 | "node_modules/spdx-exceptions": { 646 | "version": "2.3.0", 647 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 648 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 649 | }, 650 | "node_modules/spdx-expression-parse": { 651 | "version": "3.0.1", 652 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 653 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 654 | "dependencies": { 655 | "spdx-exceptions": "^2.1.0", 656 | "spdx-license-ids": "^3.0.0" 657 | } 658 | }, 659 | "node_modules/spdx-license-ids": { 660 | "version": "3.0.5", 661 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 662 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" 663 | }, 664 | "node_modules/sprintf-js": { 665 | "version": "1.0.3", 666 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 667 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 668 | }, 669 | "node_modules/string.prototype.trimend": { 670 | "version": "1.0.1", 671 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 672 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 673 | "dependencies": { 674 | "define-properties": "^1.1.3", 675 | "es-abstract": "^1.17.5" 676 | }, 677 | "funding": { 678 | "url": "https://github.com/sponsors/ljharb" 679 | } 680 | }, 681 | "node_modules/string.prototype.trimstart": { 682 | "version": "1.0.1", 683 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 684 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 685 | "dependencies": { 686 | "define-properties": "^1.1.3", 687 | "es-abstract": "^1.17.5" 688 | }, 689 | "funding": { 690 | "url": "https://github.com/sponsors/ljharb" 691 | } 692 | }, 693 | "node_modules/ts-node": { 694 | "version": "7.0.1", 695 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", 696 | "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", 697 | "dependencies": { 698 | "arrify": "^1.0.0", 699 | "buffer-from": "^1.1.0", 700 | "diff": "^3.1.0", 701 | "make-error": "^1.1.1", 702 | "minimist": "^1.2.0", 703 | "mkdirp": "^0.5.1", 704 | "source-map-support": "^0.5.6", 705 | "yn": "^2.0.0" 706 | }, 707 | "bin": { 708 | "ts-node": "dist/bin.js" 709 | }, 710 | "engines": { 711 | "node": ">=4.2.0" 712 | } 713 | }, 714 | "node_modules/ts-node/node_modules/source-map": { 715 | "version": "0.6.1", 716 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 717 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 718 | "engines": { 719 | "node": ">=0.10.0" 720 | } 721 | }, 722 | "node_modules/ts-node/node_modules/source-map-support": { 723 | "version": "0.5.19", 724 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 725 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 726 | "dependencies": { 727 | "buffer-from": "^1.0.0", 728 | "source-map": "^0.6.0" 729 | } 730 | }, 731 | "node_modules/typescript": { 732 | "version": "3.7.5", 733 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", 734 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", 735 | "bin": { 736 | "tsc": "bin/tsc", 737 | "tsserver": "bin/tsserver" 738 | }, 739 | "engines": { 740 | "node": ">=4.2.0" 741 | } 742 | }, 743 | "node_modules/upath": { 744 | "version": "1.2.0", 745 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", 746 | "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", 747 | "engines": { 748 | "node": ">=4", 749 | "yarn": "*" 750 | } 751 | }, 752 | "node_modules/util-promisify": { 753 | "version": "2.1.0", 754 | "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", 755 | "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", 756 | "dependencies": { 757 | "object.getownpropertydescriptors": "^2.0.3" 758 | } 759 | }, 760 | "node_modules/validate-npm-package-license": { 761 | "version": "3.0.4", 762 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 763 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 764 | "dependencies": { 765 | "spdx-correct": "^3.0.0", 766 | "spdx-expression-parse": "^3.0.0" 767 | } 768 | }, 769 | "node_modules/wrappy": { 770 | "version": "1.0.2", 771 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 772 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 773 | }, 774 | "node_modules/yn": { 775 | "version": "2.0.0", 776 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", 777 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", 778 | "engines": { 779 | "node": ">=4" 780 | } 781 | } 782 | }, 783 | "dependencies": { 784 | "@grpc/grpc-js": { 785 | "version": "1.3.8", 786 | "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.8.tgz", 787 | "integrity": "sha512-4qJqqn+CU/nBydz9ePJP+oa8dz0U42Ut/GejlbyaQ1xTkynCc+ndNHHnISlNeHawDsv4MOAyP3mV/EnDNUw2zA==", 788 | "requires": { 789 | "@types/node": ">=12.12.47" 790 | } 791 | }, 792 | "@logdna/tail-file": { 793 | "version": "2.1.1", 794 | "resolved": "https://registry.npmjs.org/@logdna/tail-file/-/tail-file-2.1.1.tgz", 795 | "integrity": "sha512-WVq5fr6nHJY2+pBxSpAGRsYjekwILQWJLcfRoo2cr7SpXZ4BhbW/9AfYyWNRP36vBssaMR1AoyK5d1jA+ykBhw==" 796 | }, 797 | "@protobufjs/aspromise": { 798 | "version": "1.1.2", 799 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 800 | "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" 801 | }, 802 | "@protobufjs/base64": { 803 | "version": "1.1.2", 804 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 805 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 806 | }, 807 | "@protobufjs/codegen": { 808 | "version": "2.0.4", 809 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 810 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 811 | }, 812 | "@protobufjs/eventemitter": { 813 | "version": "1.1.0", 814 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 815 | "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" 816 | }, 817 | "@protobufjs/fetch": { 818 | "version": "1.1.0", 819 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 820 | "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", 821 | "requires": { 822 | "@protobufjs/aspromise": "^1.1.1", 823 | "@protobufjs/inquire": "^1.1.0" 824 | } 825 | }, 826 | "@protobufjs/float": { 827 | "version": "1.0.2", 828 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 829 | "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" 830 | }, 831 | "@protobufjs/inquire": { 832 | "version": "1.1.0", 833 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 834 | "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" 835 | }, 836 | "@protobufjs/path": { 837 | "version": "1.1.2", 838 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 839 | "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" 840 | }, 841 | "@protobufjs/pool": { 842 | "version": "1.1.0", 843 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 844 | "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" 845 | }, 846 | "@protobufjs/utf8": { 847 | "version": "1.1.0", 848 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 849 | "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" 850 | }, 851 | "@pulumi/pulumi": { 852 | "version": "3.26.1", 853 | "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.26.1.tgz", 854 | "integrity": "sha512-tsj2WR43b8+uMvJq9LNHNxSKfI3HNP+rE2fAAP7cZ/7YLGxBXAA/Y9X/8MbiIqkN03QtKY5q0l7/djTTBW7FPQ==", 855 | "requires": { 856 | "@grpc/grpc-js": "~1.3.8", 857 | "@logdna/tail-file": "^2.0.6", 858 | "@pulumi/query": "^0.3.0", 859 | "google-protobuf": "^3.5.0", 860 | "js-yaml": "^3.14.0", 861 | "minimist": "^1.2.0", 862 | "normalize-package-data": "^2.4.0", 863 | "protobufjs": "^6.8.6", 864 | "read-package-tree": "^5.3.1", 865 | "require-from-string": "^2.0.1", 866 | "semver": "^6.1.0", 867 | "source-map-support": "^0.4.16", 868 | "ts-node": "^7.0.1", 869 | "typescript": "~3.7.3", 870 | "upath": "^1.1.0" 871 | } 872 | }, 873 | "@pulumi/query": { 874 | "version": "0.3.0", 875 | "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz", 876 | "integrity": "sha512-xfo+yLRM2zVjVEA4p23IjQWzyWl1ZhWOGobsBqRpIarzLvwNH/RAGaoehdxlhx4X92302DrpdIFgTICMN4P38w==" 877 | }, 878 | "@types/long": { 879 | "version": "4.0.1", 880 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", 881 | "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" 882 | }, 883 | "@types/node": { 884 | "version": "13.13.14", 885 | "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.14.tgz", 886 | "integrity": "sha512-Az3QsOt1U/K1pbCQ0TXGELTuTkPLOiFIQf3ILzbOyo0FqgV9SxRnxbxM5QlAveERZMHpZY+7u3Jz2tKyl+yg6g==" 887 | }, 888 | "argparse": { 889 | "version": "1.0.10", 890 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 891 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 892 | "requires": { 893 | "sprintf-js": "~1.0.2" 894 | } 895 | }, 896 | "arrify": { 897 | "version": "1.0.1", 898 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 899 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" 900 | }, 901 | "asap": { 902 | "version": "2.0.6", 903 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 904 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 905 | }, 906 | "balanced-match": { 907 | "version": "1.0.0", 908 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 909 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 910 | }, 911 | "brace-expansion": { 912 | "version": "1.1.11", 913 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 914 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 915 | "requires": { 916 | "balanced-match": "^1.0.0", 917 | "concat-map": "0.0.1" 918 | } 919 | }, 920 | "buffer-from": { 921 | "version": "1.1.1", 922 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 923 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" 924 | }, 925 | "concat-map": { 926 | "version": "0.0.1", 927 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 928 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 929 | }, 930 | "debuglog": { 931 | "version": "1.0.1", 932 | "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", 933 | "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" 934 | }, 935 | "define-properties": { 936 | "version": "1.1.3", 937 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 938 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 939 | "requires": { 940 | "object-keys": "^1.0.12" 941 | } 942 | }, 943 | "dezalgo": { 944 | "version": "1.0.3", 945 | "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", 946 | "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", 947 | "requires": { 948 | "asap": "^2.0.0", 949 | "wrappy": "1" 950 | } 951 | }, 952 | "diff": { 953 | "version": "3.5.0", 954 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 955 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" 956 | }, 957 | "es-abstract": { 958 | "version": "1.17.6", 959 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 960 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 961 | "requires": { 962 | "es-to-primitive": "^1.2.1", 963 | "function-bind": "^1.1.1", 964 | "has": "^1.0.3", 965 | "has-symbols": "^1.0.1", 966 | "is-callable": "^1.2.0", 967 | "is-regex": "^1.1.0", 968 | "object-inspect": "^1.7.0", 969 | "object-keys": "^1.1.1", 970 | "object.assign": "^4.1.0", 971 | "string.prototype.trimend": "^1.0.1", 972 | "string.prototype.trimstart": "^1.0.1" 973 | } 974 | }, 975 | "es-to-primitive": { 976 | "version": "1.2.1", 977 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 978 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 979 | "requires": { 980 | "is-callable": "^1.1.4", 981 | "is-date-object": "^1.0.1", 982 | "is-symbol": "^1.0.2" 983 | } 984 | }, 985 | "esprima": { 986 | "version": "4.0.1", 987 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 988 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 989 | }, 990 | "fs.realpath": { 991 | "version": "1.0.0", 992 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 993 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 994 | }, 995 | "function-bind": { 996 | "version": "1.1.1", 997 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 998 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 999 | }, 1000 | "glob": { 1001 | "version": "7.1.6", 1002 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1003 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1004 | "requires": { 1005 | "fs.realpath": "^1.0.0", 1006 | "inflight": "^1.0.4", 1007 | "inherits": "2", 1008 | "minimatch": "^3.0.4", 1009 | "once": "^1.3.0", 1010 | "path-is-absolute": "^1.0.0" 1011 | } 1012 | }, 1013 | "google-protobuf": { 1014 | "version": "3.12.2", 1015 | "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.12.2.tgz", 1016 | "integrity": "sha512-4CZhpuRr1d6HjlyrxoXoocoGFnRYgKULgMtikMddA9ztRyYR59Aondv2FioyxWVamRo0rF2XpYawkTCBEQOSkA==" 1017 | }, 1018 | "graceful-fs": { 1019 | "version": "4.2.4", 1020 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 1021 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 1022 | }, 1023 | "has": { 1024 | "version": "1.0.3", 1025 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1026 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1027 | "requires": { 1028 | "function-bind": "^1.1.1" 1029 | } 1030 | }, 1031 | "has-symbols": { 1032 | "version": "1.0.1", 1033 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1034 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" 1035 | }, 1036 | "hosted-git-info": { 1037 | "version": "2.8.9", 1038 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 1039 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 1040 | }, 1041 | "inflight": { 1042 | "version": "1.0.6", 1043 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1044 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1045 | "requires": { 1046 | "once": "^1.3.0", 1047 | "wrappy": "1" 1048 | } 1049 | }, 1050 | "inherits": { 1051 | "version": "2.0.4", 1052 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1053 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1054 | }, 1055 | "is-callable": { 1056 | "version": "1.2.0", 1057 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 1058 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" 1059 | }, 1060 | "is-date-object": { 1061 | "version": "1.0.2", 1062 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1063 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" 1064 | }, 1065 | "is-regex": { 1066 | "version": "1.1.0", 1067 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", 1068 | "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", 1069 | "requires": { 1070 | "has-symbols": "^1.0.1" 1071 | } 1072 | }, 1073 | "is-symbol": { 1074 | "version": "1.0.3", 1075 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1076 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1077 | "requires": { 1078 | "has-symbols": "^1.0.1" 1079 | } 1080 | }, 1081 | "js-yaml": { 1082 | "version": "3.14.1", 1083 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1084 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1085 | "requires": { 1086 | "argparse": "^1.0.7", 1087 | "esprima": "^4.0.0" 1088 | } 1089 | }, 1090 | "json-parse-better-errors": { 1091 | "version": "1.0.2", 1092 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1093 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" 1094 | }, 1095 | "long": { 1096 | "version": "4.0.0", 1097 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1098 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1099 | }, 1100 | "make-error": { 1101 | "version": "1.3.6", 1102 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1103 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 1104 | }, 1105 | "minimatch": { 1106 | "version": "3.1.2", 1107 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1108 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1109 | "requires": { 1110 | "brace-expansion": "^1.1.7" 1111 | } 1112 | }, 1113 | "minimist": { 1114 | "version": "1.2.6", 1115 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1116 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" 1117 | }, 1118 | "mkdirp": { 1119 | "version": "0.5.5", 1120 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1121 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1122 | "requires": { 1123 | "minimist": "^1.2.5" 1124 | } 1125 | }, 1126 | "normalize-package-data": { 1127 | "version": "2.5.0", 1128 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1129 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1130 | "requires": { 1131 | "hosted-git-info": "^2.1.4", 1132 | "resolve": "^1.10.0", 1133 | "semver": "2 || 3 || 4 || 5", 1134 | "validate-npm-package-license": "^3.0.1" 1135 | }, 1136 | "dependencies": { 1137 | "semver": { 1138 | "version": "5.7.1", 1139 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1140 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1141 | } 1142 | } 1143 | }, 1144 | "npm-normalize-package-bin": { 1145 | "version": "1.0.1", 1146 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 1147 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 1148 | }, 1149 | "object-inspect": { 1150 | "version": "1.8.0", 1151 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", 1152 | "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" 1153 | }, 1154 | "object-keys": { 1155 | "version": "1.1.1", 1156 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1157 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" 1158 | }, 1159 | "object.assign": { 1160 | "version": "4.1.0", 1161 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1162 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1163 | "requires": { 1164 | "define-properties": "^1.1.2", 1165 | "function-bind": "^1.1.1", 1166 | "has-symbols": "^1.0.0", 1167 | "object-keys": "^1.0.11" 1168 | } 1169 | }, 1170 | "object.getownpropertydescriptors": { 1171 | "version": "2.1.0", 1172 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 1173 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 1174 | "requires": { 1175 | "define-properties": "^1.1.3", 1176 | "es-abstract": "^1.17.0-next.1" 1177 | } 1178 | }, 1179 | "once": { 1180 | "version": "1.4.0", 1181 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1182 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1183 | "requires": { 1184 | "wrappy": "1" 1185 | } 1186 | }, 1187 | "path-is-absolute": { 1188 | "version": "1.0.1", 1189 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1190 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1191 | }, 1192 | "path-parse": { 1193 | "version": "1.0.7", 1194 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1195 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1196 | }, 1197 | "protobufjs": { 1198 | "version": "6.11.3", 1199 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", 1200 | "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", 1201 | "requires": { 1202 | "@protobufjs/aspromise": "^1.1.2", 1203 | "@protobufjs/base64": "^1.1.2", 1204 | "@protobufjs/codegen": "^2.0.4", 1205 | "@protobufjs/eventemitter": "^1.1.0", 1206 | "@protobufjs/fetch": "^1.1.0", 1207 | "@protobufjs/float": "^1.0.2", 1208 | "@protobufjs/inquire": "^1.1.0", 1209 | "@protobufjs/path": "^1.1.2", 1210 | "@protobufjs/pool": "^1.1.0", 1211 | "@protobufjs/utf8": "^1.1.0", 1212 | "@types/long": "^4.0.1", 1213 | "@types/node": ">=13.7.0", 1214 | "long": "^4.0.0" 1215 | } 1216 | }, 1217 | "read-package-json": { 1218 | "version": "2.1.1", 1219 | "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz", 1220 | "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A==", 1221 | "requires": { 1222 | "glob": "^7.1.1", 1223 | "graceful-fs": "^4.1.2", 1224 | "json-parse-better-errors": "^1.0.1", 1225 | "normalize-package-data": "^2.0.0", 1226 | "npm-normalize-package-bin": "^1.0.0" 1227 | } 1228 | }, 1229 | "read-package-tree": { 1230 | "version": "5.3.1", 1231 | "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", 1232 | "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", 1233 | "requires": { 1234 | "read-package-json": "^2.0.0", 1235 | "readdir-scoped-modules": "^1.0.0", 1236 | "util-promisify": "^2.1.0" 1237 | } 1238 | }, 1239 | "readdir-scoped-modules": { 1240 | "version": "1.1.0", 1241 | "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", 1242 | "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", 1243 | "requires": { 1244 | "debuglog": "^1.0.1", 1245 | "dezalgo": "^1.0.0", 1246 | "graceful-fs": "^4.1.2", 1247 | "once": "^1.3.0" 1248 | } 1249 | }, 1250 | "require-from-string": { 1251 | "version": "2.0.2", 1252 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1253 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" 1254 | }, 1255 | "resolve": { 1256 | "version": "1.17.0", 1257 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 1258 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 1259 | "requires": { 1260 | "path-parse": "^1.0.6" 1261 | } 1262 | }, 1263 | "semver": { 1264 | "version": "6.3.0", 1265 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1266 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 1267 | }, 1268 | "source-map": { 1269 | "version": "0.5.7", 1270 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1271 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1272 | }, 1273 | "source-map-support": { 1274 | "version": "0.4.18", 1275 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 1276 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 1277 | "requires": { 1278 | "source-map": "^0.5.6" 1279 | } 1280 | }, 1281 | "spdx-correct": { 1282 | "version": "3.1.1", 1283 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 1284 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 1285 | "requires": { 1286 | "spdx-expression-parse": "^3.0.0", 1287 | "spdx-license-ids": "^3.0.0" 1288 | } 1289 | }, 1290 | "spdx-exceptions": { 1291 | "version": "2.3.0", 1292 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1293 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 1294 | }, 1295 | "spdx-expression-parse": { 1296 | "version": "3.0.1", 1297 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1298 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1299 | "requires": { 1300 | "spdx-exceptions": "^2.1.0", 1301 | "spdx-license-ids": "^3.0.0" 1302 | } 1303 | }, 1304 | "spdx-license-ids": { 1305 | "version": "3.0.5", 1306 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 1307 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" 1308 | }, 1309 | "sprintf-js": { 1310 | "version": "1.0.3", 1311 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1312 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1313 | }, 1314 | "string.prototype.trimend": { 1315 | "version": "1.0.1", 1316 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 1317 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 1318 | "requires": { 1319 | "define-properties": "^1.1.3", 1320 | "es-abstract": "^1.17.5" 1321 | } 1322 | }, 1323 | "string.prototype.trimstart": { 1324 | "version": "1.0.1", 1325 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1326 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1327 | "requires": { 1328 | "define-properties": "^1.1.3", 1329 | "es-abstract": "^1.17.5" 1330 | } 1331 | }, 1332 | "ts-node": { 1333 | "version": "7.0.1", 1334 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", 1335 | "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", 1336 | "requires": { 1337 | "arrify": "^1.0.0", 1338 | "buffer-from": "^1.1.0", 1339 | "diff": "^3.1.0", 1340 | "make-error": "^1.1.1", 1341 | "minimist": "^1.2.0", 1342 | "mkdirp": "^0.5.1", 1343 | "source-map-support": "^0.5.6", 1344 | "yn": "^2.0.0" 1345 | }, 1346 | "dependencies": { 1347 | "source-map": { 1348 | "version": "0.6.1", 1349 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1350 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 1351 | }, 1352 | "source-map-support": { 1353 | "version": "0.5.19", 1354 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1355 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1356 | "requires": { 1357 | "buffer-from": "^1.0.0", 1358 | "source-map": "^0.6.0" 1359 | } 1360 | } 1361 | } 1362 | }, 1363 | "typescript": { 1364 | "version": "3.7.5", 1365 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", 1366 | "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==" 1367 | }, 1368 | "upath": { 1369 | "version": "1.2.0", 1370 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", 1371 | "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" 1372 | }, 1373 | "util-promisify": { 1374 | "version": "2.1.0", 1375 | "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", 1376 | "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", 1377 | "requires": { 1378 | "object.getownpropertydescriptors": "^2.0.3" 1379 | } 1380 | }, 1381 | "validate-npm-package-license": { 1382 | "version": "3.0.4", 1383 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1384 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1385 | "requires": { 1386 | "spdx-correct": "^3.0.0", 1387 | "spdx-expression-parse": "^3.0.0" 1388 | } 1389 | }, 1390 | "wrappy": { 1391 | "version": "1.0.2", 1392 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1393 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1394 | }, 1395 | "yn": { 1396 | "version": "2.0.0", 1397 | "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", 1398 | "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=" 1399 | } 1400 | } 1401 | } 1402 | -------------------------------------------------------------------------------- /tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tests", 3 | "main": "index.js", 4 | "dependencies": { 5 | "@pulumi/pulumi": "latest" 6 | } 7 | } 8 | --------------------------------------------------------------------------------