├── .github └── workflows │ └── ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── cypress.json ├── cypress ├── integration │ └── multiselect.js └── support │ ├── commands.js │ └── index.js ├── examples ├── cars.json ├── index.html ├── preload.html ├── search.html ├── static.html ├── stimulus-multiselect.css └── stimulus-multiselect.js ├── package-lock.json ├── package.json ├── src ├── multiselect.css └── multiselect.js └── yarn.lock /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | on: [push, pull_request] 3 | jobs: 4 | cypress-run: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Checkout 8 | uses: actions/checkout@v3 9 | 10 | - name: Run tests 11 | uses: cypress-io/github-action@v3 12 | with: 13 | command: yarn run test 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /node_modules 3 | yarn-error.log 4 | cypress/screenshots/ 5 | cypress/videos/ 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Vernes 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stimulus Multiselect controller 2 | Multiselect component built on the back of stimulus and html select tag. Works with static imbedded json inside html, preloaded items from server and searching remotely. 3 | 4 | ![multiselect](https://user-images.githubusercontent.com/31761693/196924970-eb19e850-62f9-4af0-ab2d-488bde0a9ea9.gif) 5 | 6 | ## Installation 7 | 8 | If you are using a js bundler with `node_modules` support (such as esbuild, rollup.js or Webpack) install the package from npm: 9 | 10 | ```plain 11 | yarn add @wizardhealth/stimulus-multiselect 12 | ``` 13 | 14 | If you're using [importmap-rails](https://github.com/rails/importmap-rails), you'll need to pin `@wizardhealth/stimulus-multiselect`: 15 | 16 | ```plain 17 | ./bin/importmap pin @wizardhealth/stimulus-multiselect 18 | ``` 19 | 20 | ## Usage 21 | 22 | Load your stimulus application as usual and the register the multiselect 23 | controller with it: 24 | 25 | ```javascript 26 | import { Application } from '@hotwired/stimulus' 27 | import { Multiselect } from '@wizardhealth/stimulus-multiselect' 28 | 29 | const application = Application.start() 30 | application.register('multiselect', Multiselect) 31 | ``` 32 | 33 | ### Remote search 34 | 35 | Fetches the data from the server by specifying endpoint url in `data-multiselect-search-url` attribute. 36 | This is useful when you have a lot of data to load and you don't want to load it all at once. 37 | 38 | Example: 39 | ```html 40 |
41 | 42 |
43 | ``` 44 | 45 | The component makes a request to the `data-multiselect-search-url` to fetch results for the contents of the input field. The server must answer with a json array: 46 | 47 | ```json 48 | [ 49 | { 50 | "value": "toyota", 51 | "text": "Jaris 🚗" 52 | }, 53 | { 54 | "value": "ambulance", 55 | "text": "Ambulance 🚑" 56 | }, 57 | { 58 | "value": "police", 59 | "text": "Police 🚓" 60 | }, 61 | { 62 | "value": "taxi", 63 | "text": "Taxi 🚕" 64 | }, 65 | { 66 | "value": "truck", 67 | "text": "Truck 🚚" 68 | } 69 | ] 70 | ``` 71 | 72 | **Note**: each object has to contain `value` and `text`. The server will receive a `q` query param that represents the search term. Another query param sent while searching is the `preselects` param that contains a set of already selected values in the multiselect (a string separated by a comma ","). 73 | 74 | ### Preload 75 | 76 | Fetches the data from the server when the page renders by specifying endpoint url in `data-preload-preload-url` attribute. 77 | This is useful for small to medium size datasets that will not slow the page load. 78 | 79 | Example: 80 | ```html 81 |
82 | 83 |
84 | ``` 85 | 86 | With this setup the component will search through the already preloaded components. In order to search remotely as well as preloading components we just need to add the `data-multiselect-search-url-value` attribute. 87 | 88 | **Note**: the server response for the preload url needs to provide a json array just like in the example above. 89 | 90 | ### Static collection 91 | 92 | It is possible to use the `data-multiselect-items-value` attribute to load static json data. This is especially useful when your html is being preprocessed before being served (Rails ERB or as a React snippet - `data-multiselect-items-value="<%= @cars.to_json %>"`). 93 | 94 | ```html 95 |
96 | 97 |
98 | ``` 99 | 100 | ## Good to know 101 | 102 | - The initial html markup contains a hidden select which serves as a hook for any forms that contain the multiselect. This select will reflect all changes on the multiselect. As an additional helper, if the multiselect is used outside of Stimulus scope, it is possible to get all the selected values via the `values` property: 103 | 104 | ```js 105 | document.getElementById("multiselect_id").values 106 | ``` 107 | 108 | - The multiselect comes with a .css file with some styles but feel free to change it when using it in your app. 109 | 110 | ### Accessibility 111 | 112 | - Arrow navigation on the elements in the dropdown 113 | - Selecting elements with Enter key 114 | - Close dropdown on Escape 115 | - If search is empty Backspace deletes the last item 116 | 117 | 118 | ## Events 119 | 120 | - `multiselect-change` whenever an element is added or removed 121 | - `multiselect-removed` whenever an element is removed. This event contains the value of the removed element in the events `detail` under `id`: 122 | 123 | ```javascript 124 | myFunction(event) { 125 | console.log(event.detail.id) // Should print the value of the item removed - 13 126 | } 127 | ``` 128 | 129 | - `multiselect-added` whenever an element is added. This event contains the added object in the events `detail` under `item`: 130 | 131 | ```javascript 132 | myFunction(event) { 133 | console.log(event.detail.item) // Should print the added object - { "value": "test", "text": "Test" } 134 | } 135 | ``` 136 | - `multiselect-addable` If the addable url is added to the multiselect when the search provides no results a link appears. Pressing this link fires this event. You can use this event as a hook to decide how you want to handle adding a non-existing element to the multiselect. 137 | 138 | ## Examples 139 | 140 | The current examples are contained in the [examples folder](https://github.com/WizardComputer/stimulus-multiselect/tree/main/examples). You can use the included http-server to test the examples. 141 | 142 | ## Contributing 143 | 144 | Bug reports and pull requests are welcome on GitHub at https://github.com/WizardComputer/stimulus-multiselect. Any contributions or suggestions are wellcome and will be considered. Please read the [Contributor Covenant code of conduct](https://www.contributor-covenant.org/). 145 | 146 | 147 | ## TODO 148 | * Explain addable 149 | * Explain preselecting 150 | 151 | 152 | ## Releasing 153 | 154 | 1. Update the version number in `package.json`. Try to follow semantic versioning guidelines as much as possible. 155 | 156 | 2. Publish the package to npmjs.com with `yarn run release` 157 | 158 | ## License 159 | 160 | This package is available as open source under the terms of the MIT License. 161 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:3300", 3 | "pluginsFile": false 4 | } -------------------------------------------------------------------------------- /cypress/integration/multiselect.js: -------------------------------------------------------------------------------- 1 | describe("Stimulus multiselect", () => { 2 | const resultsListSelector = "[data-multiselect-target='list'] li" 3 | 4 | it("displays results on click", () => { 5 | cy.visitPage() 6 | cy.clickOnSelect() 7 | cy.get(resultsListSelector).should("have.length", 3) 8 | }) 9 | 10 | it("filters results on base on the search term", () => { 11 | cy.visitPage() 12 | 13 | cy.enterSearchTerm("Roost") 14 | cy.get(resultsListSelector).should("have.length", 1) 15 | 16 | cy.enterSearchTerm("no-results") 17 | cy.get(resultsListSelector).should('not.exist') 18 | }) 19 | }) -------------------------------------------------------------------------------- /cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | const resultsListSelector = "[data-multiselect-target='list'] li" 2 | const input = "[data-multiselect-target='search']" 3 | 4 | Cypress.Commands.add("visitPage", (path = "/") => { 5 | cy.visit(path) 6 | }) 7 | 8 | Cypress.Commands.add("enterSearchTerm", (term) => { 9 | cy.get(input).type(term) 10 | }) 11 | 12 | Cypress.Commands.add("clickOnSelect", () => { 13 | const element = cy.get(".multiselect__container") 14 | element.click() 15 | }) 16 | -------------------------------------------------------------------------------- /cypress/support/index.js: -------------------------------------------------------------------------------- 1 | import './commands' 2 | 3 | -------------------------------------------------------------------------------- /examples/cars.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "value": "toyota", "text": "Jaris 🚗" }, 3 | { "value": "ambulance", "text": "Ambulance 🚑" }, 4 | { "value": "police", "text": "Police 🚓" }, 5 | { "value": "taxi", "text": "Taxi 🚕" }, 6 | { "value": "truck", "text": "Truck 🚚" } 7 | ] -------------------------------------------------------------------------------- /examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Stimulus Multiselect 7 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 27 | 28 | 29 | 30 |
31 |

Stimulus multiselect example

32 | 33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/preload.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Stimulus Multiselect 7 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 27 | 28 | 29 | 30 |
31 |

Stimulus multiselect example

32 | 33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/search.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Stimulus Multiselect 7 | 8 | 9 | 10 | 11 | 12 | 19 | 20 | 27 | 28 | 29 | 30 |
31 |

Stimulus multiselect example

32 |

The search will show all items since this http-server doesnt have an actual backend to filter out the results

33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/static.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Stimulus Multiselect 7 | 8 | 9 | 10 | 11 | 12 | 20 | 21 | 28 | 29 | 30 | 31 |
32 |

Stimulus multiselect example

33 | 34 |
35 |
36 | 37 |
38 |
39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /examples/stimulus-multiselect.css: -------------------------------------------------------------------------------- 1 | ../src/multiselect.css -------------------------------------------------------------------------------- /examples/stimulus-multiselect.js: -------------------------------------------------------------------------------- 1 | ../src/multiselect.js -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stimulus-multiselect", 3 | "version": "3.0.2", 4 | "description": "Multiselect component built on the back of stimulus and html select tag", 5 | "type": "module", 6 | "main": "src/multiselect.js", 7 | "exports": "./src/multiselect.js", 8 | "source": "src/multiselect.js", 9 | "author": "Vernes Pendić ", 10 | "license": "MIT", 11 | "private": false, 12 | "keywords": [ 13 | "stimulus", 14 | "multiselect", 15 | "controller", 16 | "components" 17 | ], 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/BakiVernes/stimulus-multiselect" 21 | }, 22 | "bugs": { 23 | "url": "https://github.com/BakiVernes/stimulus-multiselect/issues" 24 | }, 25 | "homepage": "https://github.com/BakiVernes/stimulus-multiselect", 26 | "peerDependencies": { 27 | "@hotwired/stimulus": "^3.1.0" 28 | }, 29 | "devDependencies": { 30 | "@hotwired/stimulus": "^3.1.0", 31 | "cypress": "^9.2.0", 32 | "http-server": "^14.0.0", 33 | "start-server-and-test": "^1.14.0" 34 | }, 35 | "scripts": { 36 | "start": "http-server ./examples -p 3300", 37 | "cy:run": "cypress run", 38 | "test": "start-server-and-test start http://localhost:3300 cy:run", 39 | "postversion": "git push && git push --tags", 40 | "release": "yarn test && yarn version && npm adduser && npm publish" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/multiselect.css: -------------------------------------------------------------------------------- 1 | .multiselect__container { 2 | font-family: sans-serif; 3 | padding-top: 0.4rem; 4 | padding-bottom: 0.4rem; 5 | padding-right: 1.75rem; 6 | padding-left: 0.5rem; 7 | background: url("data:image/svg+xml;utf8,") no-repeat right #ddd; 8 | background-color: transparent; 9 | border-radius: 0.25rem; 10 | appearance: none; 11 | border: 1px solid rgb(218 218 218); 12 | outline-offset: 2px; 13 | outline: transparent solid 2px; 14 | color: rgb(55 61 63); 15 | line-height: 1.5; 16 | font-style: normal; 17 | font-weight: 400; 18 | font-size: 0.875rem; 19 | cursor: pointer; 20 | } 21 | 22 | .multiselect__no-result { 23 | color: rgb(112 112 112); 24 | padding: 0.75rem; 25 | font-size: 0.875rem; 26 | } 27 | 28 | .multiselect__addable-button { 29 | padding: 0.5rem; 30 | text-decoration-line: underline; 31 | color: rgb(55 61 63); 32 | cursor: pointer; 33 | } 34 | 35 | .multiselect__addable-button:hover { 36 | color: rgb(29 115 186); 37 | } 38 | 39 | .multiselect__container:focus-within { 40 | border-color: rgb(44 141 222); 41 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); 42 | --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -1px var(--tw-shadow-color); 43 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 44 | } 45 | 46 | .multiselect__container--disabled { 47 | background-color: rgb(240 240 240); 48 | cursor: not-allowed; 49 | } 50 | 51 | .multiselect__container:hover { 52 | --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); 53 | --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px 0 var(--tw-shadow-color); 54 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 55 | } 56 | 57 | .multiselect__hidden { 58 | display: none; 59 | } 60 | 61 | .multiselect__preview { 62 | width: -webkit-fill-available; 63 | width: -moz-available; 64 | width: -webkit-fill-available; 65 | gap: 0.5rem; 66 | font-size: 0.875rem; 67 | display: flex; 68 | flex-wrap: wrap; 69 | } 70 | 71 | .multiselect__pill { 72 | max-width: fill-available; 73 | color: rgb(55 61 63); 74 | font-size: 0.75rem; 75 | padding-left: 0.5rem; 76 | background-color: rgb(250 249 244); 77 | border: 1px solid #f0f0f0; 78 | border-radius: 0.25rem; 79 | display: flex; 80 | } 81 | 82 | .multiselect__pill-delete { 83 | padding: 0.25rem 0.5rem 0.25rem 0.5rem; 84 | border-top-right-radius: 0.25rem; 85 | border-bottom-right-radius: 0.25rem; 86 | align-items: center; 87 | display: flex; 88 | margin-left: 0.25rem; 89 | } 90 | 91 | .multiselect__pill-delete:hover { 92 | background-color: rgb(254 178 178); 93 | } 94 | 95 | .multiselect__pill:hover svg{ 96 | fill: rgb(246, 71, 71); 97 | } 98 | 99 | .multiselect__pill-text { 100 | text-overflow: ellipsis; 101 | white-space: nowrap; 102 | overflow: hidden; 103 | padding-top: 0.25rem; 104 | padding-bottom: 0.25rem; 105 | } 106 | 107 | .multiselect__input-container { 108 | display: flex; 109 | } 110 | 111 | .multiselect__focused { 112 | background-color: #f4fbff; 113 | } 114 | 115 | .multiselect__placeholder { 116 | color: rgb(174 174 174); 117 | font-style: italic; 118 | padding-left: 0.25rem; 119 | opacity: 1; 120 | } 121 | 122 | .multiselect__addable { 123 | text-decoration-line: underline; 124 | color: rgb(112 112 112); 125 | text-align: center; 126 | } 127 | 128 | .multiselect__addable:hover { 129 | color: rgb(55 61 63); 130 | } 131 | 132 | .multiselect__search { 133 | width: 100%; 134 | outline: 2px solid transparent; 135 | outline-offset: 2px; 136 | border: transparent; 137 | color: rgb(55 61 63); 138 | font-size: 0.875rem; 139 | padding-left: 0.25rem; 140 | } 141 | 142 | .multiselect__search:focus::placeholder { 143 | color: rgb(112 112 112); 144 | } 145 | 146 | .multiselect__search:disabled { 147 | background-color: rgb(240 240 240); 148 | cursor: not-allowed; 149 | } 150 | 151 | .multiselect__search::placeholder { 152 | font-style: italic; 153 | opacity: 1; 154 | color: rgb(174 174 174); 155 | } 156 | 157 | .multiselect__list { 158 | max-height: 400px; 159 | overflow-y: auto; 160 | list-style-type: none; 161 | margin: 0; 162 | padding: 0; 163 | } 164 | 165 | .multiselect__list li { 166 | display: block; 167 | align-items: center; 168 | font-size: 0.875rem; 169 | color: rgb(112 112 112); 170 | border-top-width: 1; 171 | } 172 | 173 | 174 | .multiselect__list li:first { 175 | border-top-width: 0; 176 | } 177 | 178 | .multiselect__list li:hover { 179 | background-color: rgb(244 251 255); 180 | } 181 | 182 | .multiselect__list li label { 183 | padding: 0.75rem; 184 | align-items: center; 185 | cursor: pointer; 186 | display: flex; 187 | } 188 | 189 | .multiselect__list li:first-child { 190 | border-top-left-radius: 0.25rem; 191 | border-top-right-radius: 0.25rem; 192 | } 193 | 194 | .multiselect__list li:last-child { 195 | border-bottom-left-radius: 0.25rem; 196 | border-bottom-right-radius: 0.25rem; 197 | } 198 | 199 | .multiselect__list li input { 200 | margin-right: 0.75rem; 201 | } 202 | 203 | .multiselect__dropdown { 204 | --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); 205 | --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -1px var(--tw-shadow-color); 206 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 207 | background-color: rgb(255 255 255); 208 | border: 1px solid rgb(218 218 218); 209 | width: 100%; 210 | border-radius: 0.25rem; 211 | display: none; 212 | margin-top: 0.5rem; 213 | z-index: 50; 214 | position: absolute; 215 | } 216 | 217 | .multiselect__dropdown--open { 218 | display: block; 219 | } 220 | -------------------------------------------------------------------------------- /src/multiselect.js: -------------------------------------------------------------------------------- 1 | const activeSelector = "[aria-selected='true']" 2 | 3 | import { Controller } from "@hotwired/stimulus" 4 | 5 | export default class Multiselect extends Controller { 6 | static targets = ["hidden", "list", "search", "preview", "dropdown", "item", "addable", "inputContainer"] 7 | 8 | static values = { 9 | items: Array, 10 | selected: Array, 11 | searchUrl: String, 12 | searchRemote: { type: Boolean, default: false }, 13 | preloadUrl: String, 14 | addableUrl: String, 15 | disabled: { type: Boolean, default: false } 16 | } 17 | 18 | connect() { 19 | this.hiddenTarget.insertAdjacentHTML("afterend", this.template) 20 | if (this.selectedValue.length) this.selectedValueChanged() 21 | this.search = debounce(this.search.bind(this), 300) 22 | this.enhanceHiddenSelect() 23 | if (this.preloadUrlValue) this.preload() 24 | } 25 | 26 | // Allows selecting the hidden select field from html and extracting selected id values: 27 | // document.getElementById("selectId").values - [2, 4, 23] 28 | enhanceHiddenSelect() { 29 | Object.defineProperty(this.hiddenTarget, "values", { 30 | get: () => { 31 | if (this.selectedValue.length <= 0) return [] 32 | 33 | return this.selectedValue.map(item => item.value) 34 | } 35 | }) 36 | } 37 | 38 | search() { 39 | if (this.searchRemoteValue) return this.searchRemote() 40 | 41 | this.searchLocal() 42 | } 43 | 44 | async searchRemote() { 45 | if (this.searchTarget.value === "") return 46 | 47 | const response = await fetch(this.searchUrlValue + "?" + new URLSearchParams({ 48 | q: this.searchTarget.value, 49 | preselects: this.selectedValue.map(x => x.value).join(",") 50 | })) 51 | 52 | const searchedItems = await response.json() 53 | 54 | this.itemsValue = searchedItems 55 | this.dropdownTarget.classList.add("multiselect__dropdown--open") 56 | } 57 | 58 | searchLocal() { 59 | this.dropdownTarget.classList.add("multiselect__dropdown--open") 60 | if (this.searchTarget.value === "") { 61 | let theRestOfTheItems = this.itemsValue.filter(x => !this.selectedValue.map(y => y.value).includes(x.value)) 62 | this.listTarget.innerHTML = this.selectedItems 63 | this.listTarget.insertAdjacentHTML("beforeend", this.items(theRestOfTheItems)) 64 | } 65 | 66 | let searched = this.itemsValue.filter(item => { 67 | return item.text.toLowerCase().includes(this.searchTarget.value.toLowerCase()) 68 | }) 69 | 70 | let selectedSearched = this.selectedValue.filter(item => { 71 | return item.text.toLowerCase().includes(this.searchTarget.value.toLowerCase()) 72 | }) 73 | 74 | searched = searched.filter(x => !selectedSearched.map(y => y.value).includes(x.value)) 75 | 76 | if (searched.length === 0 && this.addableUrlValue) { 77 | return this.listTarget.innerHTML = this.noResultsTemplate 78 | } 79 | 80 | if (searched.length === 0) this.dropdownTarget.classList.remove("multiselect__dropdown--open") 81 | this.listTarget.innerHTML = this.items(selectedSearched, true) 82 | this.listTarget.insertAdjacentHTML("beforeend", this.items(searched)) 83 | } 84 | 85 | async preload() { 86 | const response = await fetch(this.preloadUrlValue) 87 | 88 | const items = await response.json() 89 | this.itemsValue = items 90 | } 91 | 92 | toggleDropdown() { 93 | if (this.dropdownTarget.classList.contains("multiselect__dropdown--open")) { 94 | this.dropdownTarget.classList.remove("multiselect__dropdown--open") 95 | if (this.selectedValue.length > 0) this.inputContainerTarget.style.display = "none" 96 | this.searchTarget.blur() 97 | } else { 98 | if (this.itemsValue.length) this.dropdownTarget.classList.add("multiselect__dropdown--open") 99 | this.searchTarget.focus() 100 | } 101 | } 102 | 103 | closeOnClickOutside({ target }) { 104 | if (this.element.contains(target)) return 105 | 106 | this.dropdownTarget.classList.remove("multiselect__dropdown--open") 107 | if (this.selectedValue.length > 0) this.inputContainerTarget.style.display = "none" 108 | this.searchTarget.value = "" 109 | if (!this.searchRemoteValue) { 110 | this.listTarget.innerHTML = this.allItems 111 | this.selectedValue.forEach(selected => { 112 | this.checkItem(selected.value) 113 | }) 114 | } 115 | } 116 | 117 | searchUrlValueChanged() { 118 | if (this.searchUrlValue) this.searchRemoteValue = true 119 | } 120 | 121 | itemsValueChanged() { 122 | if (!this.hasListTarget) return 123 | 124 | if (this.itemsValue.length) { 125 | this.listTarget.innerHTML = this.items(this.itemsValue) 126 | } else { 127 | this.listTarget.innerHTML = this.noResultsTemplate 128 | } 129 | } 130 | 131 | selectedValueChanged() { 132 | if (!this.hasPreviewTarget) return 133 | 134 | while (this.hiddenTarget.options.length) this.hiddenTarget.remove(0) 135 | 136 | if (this.selectedValue.length > 0) { 137 | this.previewTarget.innerHTML = this.pills 138 | this.searchTarget.style.paddingTop = "0.5rem" 139 | 140 | this.selectedValue.forEach(selected => { 141 | const option = document.createElement("option") 142 | option.text = selected.text 143 | option.value = selected.value 144 | option.setAttribute("selected", true) 145 | this.hiddenTarget.add(option) 146 | }) 147 | 148 | if (!this.searchRemoteValue) { 149 | this.selectedValue.forEach(selected => { 150 | this.checkItem(selected.value) 151 | }) 152 | } 153 | } else { 154 | this.searchTarget.style.paddingTop = "0" 155 | this.inputContainerTarget.style.display = "" 156 | this.previewTarget.innerHTML = "" 157 | } 158 | 159 | this.element.dispatchEvent(new Event("multiselect-change")) 160 | } 161 | 162 | removeItem(e) { 163 | e.stopPropagation() 164 | 165 | const itemToRemove = e.currentTarget.parentNode 166 | 167 | this.selectedValue = this.selectedValue.filter(x => x.value.toString() !== itemToRemove.dataset.value) 168 | this.uncheckItem(itemToRemove.dataset.value) 169 | this.element.dispatchEvent(new CustomEvent("multiselect-removed", { detail: { id: itemToRemove.dataset.value } })) 170 | } 171 | 172 | uncheckItem(value) { 173 | const itemToUncheck = this.listTarget.querySelector(`input[data-value="${value}"]`) 174 | 175 | if (itemToUncheck) itemToUncheck.checked = false 176 | } 177 | 178 | checkItem(value) { 179 | const itemToCheck = this.listTarget.querySelector(`input[data-value="${value}"]`) 180 | 181 | if (itemToCheck) itemToCheck.checked = true 182 | } 183 | 184 | toggleItem(input) { 185 | const item = { 186 | text: input.dataset.text, 187 | value: input.dataset.value 188 | } 189 | let newSelectedArray = this.selectedValue 190 | 191 | if (input.checked) { 192 | newSelectedArray.push(item) 193 | 194 | if (this.focusedItem) { 195 | this.focusedItem.closest("li").classList.remove("multiselect__focused") 196 | this.focusedItem.removeAttribute("aria-selected") 197 | } 198 | 199 | input.setAttribute("aria-selected", "true") 200 | input.closest("li").classList.add("multiselect__focused") 201 | this.element.dispatchEvent(new CustomEvent("multiselect-added", { detail: { item: item } })) 202 | } else { 203 | newSelectedArray = newSelectedArray.filter(selected => selected.value.toString() !== item.value) 204 | this.element.dispatchEvent(new CustomEvent("multiselect-removed", { detail: { id: item.value } })) 205 | } 206 | 207 | this.selectedValue = newSelectedArray 208 | } 209 | 210 | onKeyDown(e) { 211 | const handler = this[`on${e.key}Keydown`] 212 | if (handler) handler(e) 213 | } 214 | 215 | onArrowDownKeydown = (event) => { 216 | const item = this.sibling(true) 217 | if (item) this.navigate(item) 218 | event.preventDefault() 219 | } 220 | 221 | onArrowUpKeydown = (event) => { 222 | const item = this.sibling(false) 223 | if (item) this.navigate(item) 224 | event.preventDefault() 225 | } 226 | 227 | onBackspaceKeydown = () => { 228 | if (this.searchTarget.value !== "") return 229 | if (!this.selectedValue.length) return 230 | 231 | const selected = this.selectedValue 232 | const value = selected.pop().value 233 | 234 | this.uncheckItem(value) 235 | this.selectedValue = selected 236 | this.element.dispatchEvent(new CustomEvent("multiselect-removed", { detail: { id: value } })) 237 | } 238 | 239 | onEnterKeydown = (e) => { 240 | if (this.focusedItem) this.focusedItem.click() 241 | } 242 | 243 | onEscapeKeydown = () => { 244 | if (this.searchTarget.value !== "") { 245 | this.searchTarget.value = "" 246 | return this.search() 247 | } 248 | 249 | this.toggleDropdown() 250 | } 251 | 252 | sibling(next) { 253 | const options = this.itemTargets 254 | const selected = this.focusedItem 255 | const index = options.indexOf(selected) 256 | const sibling = next ? options[index + 1] : options[index - 1] 257 | const def = next ? options[0] : options[options.length - 1] 258 | return sibling || def 259 | } 260 | 261 | async addable(e) { 262 | e.preventDefault() 263 | const query = this.searchTarget.value 264 | 265 | if (query === "" || this.itemsValue.some(item => item.text === query)) return 266 | 267 | const response = await fetch(this.addableUrlValue, { 268 | method: "POST", 269 | body: JSON.stringify({ addable: query }) 270 | }) 271 | if (response.ok) { 272 | const addedItem = await response.json() 273 | 274 | this.addAddableItem(addedItem) 275 | } 276 | } 277 | 278 | addAddableItem(addedItem) { 279 | this.itemsValue = this.itemsValue.concat(addedItem) 280 | this.selectedValue = this.selectedValue.concat(addedItem) 281 | this.searchTarget.value = "" 282 | this.element.dispatchEvent(new CustomEvent("multiselect-added", { detail: { item: addedItem } })) 283 | } 284 | 285 | navigate(target) { 286 | const previouslySelected = this.focusedItem 287 | if (previouslySelected) { 288 | previouslySelected.removeAttribute("aria-selected") 289 | previouslySelected.closest("li").classList.remove("multiselect__focused") 290 | } 291 | 292 | target.setAttribute("aria-selected", "true") 293 | target.closest("li").classList.add("multiselect__focused") 294 | target.scrollIntoView({ behavior: "smooth", block: "nearest" }) 295 | } 296 | 297 | get focusedItem() { 298 | return this.listTarget.querySelector(activeSelector) 299 | } 300 | 301 | focusSearch() { 302 | this.inputContainerTarget.style.display = "" 303 | this.searchTarget.focus() 304 | } 305 | 306 | addableEvent() { 307 | document.dispatchEvent(new CustomEvent("multiselect-addable")) 308 | } 309 | 310 | get template() { 311 | return ` 312 |
313 |
314 |
315 |
${this.inputTemplate}
316 |
317 |
318 |
319 |
    320 | ${this.allItems} 321 |
322 |
323 |
324 | ` 325 | } 326 | 327 | get noResultsTemplate() { 328 | if (!this.addableUrlValue) return `
${this.element.dataset.noResultsMessage}
` 329 | return ` 330 |
331 | 332 | ${this.element.dataset.addablePlaceholder} 333 | 334 |
335 | ` 336 | } 337 | 338 | get inputTemplate() { 339 | return ` 340 | 343 | ` 344 | } 345 | 346 | items(items, selected = false) { 347 | const checked = selected ? "checked" : "" 348 | let itemsTemplate = "" 349 | 350 | items.forEach(item => itemsTemplate += this.itemTemplate(item, checked)) 351 | 352 | return itemsTemplate 353 | } 354 | 355 | get pills() { 356 | let itemsTemplate = "" 357 | 358 | this.selectedValue.forEach(item => itemsTemplate += this.pillTemplate(item)) 359 | 360 | return itemsTemplate 361 | } 362 | 363 | get selectedItems() { 364 | return this.items(this.selectedValue, true) 365 | } 366 | 367 | get allItems() { 368 | return this.items(this.itemsValue) 369 | } 370 | 371 | itemTemplate(item, selected = "") { 372 | return ` 373 |
  • 374 | 379 |
  • 380 | ` 381 | } 382 | 383 | checkBoxChange(event) { 384 | event.preventDefault() 385 | this.searchTarget.focus() 386 | this.toggleItem(event.currentTarget) 387 | } 388 | 389 | pillTemplate(item) { 390 | if (this.disabledValue) { 391 | return `
    392 | ${item.text} 393 |
    ` 394 | } else { 395 | return `
    396 | ${item.text} 397 | 398 | 399 | 400 | 401 | 402 | 403 |
    ` 404 | } 405 | } 406 | } 407 | 408 | function debounce(fn, delay) { 409 | let timeoutId = null 410 | 411 | return (...args) => { 412 | const callback = () => fn.apply(this, args) 413 | clearTimeout(timeoutId) 414 | timeoutId = setTimeout(callback, delay) 415 | } 416 | } 417 | 418 | export { Multiselect } -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@colors/colors@1.5.0": 6 | version "1.5.0" 7 | resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" 8 | integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== 9 | 10 | "@cypress/request@^2.88.10": 11 | version "2.88.10" 12 | resolved "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz" 13 | integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg== 14 | dependencies: 15 | aws-sign2 "~0.7.0" 16 | aws4 "^1.8.0" 17 | caseless "~0.12.0" 18 | combined-stream "~1.0.6" 19 | extend "~3.0.2" 20 | forever-agent "~0.6.1" 21 | form-data "~2.3.2" 22 | http-signature "~1.3.6" 23 | is-typedarray "~1.0.0" 24 | isstream "~0.1.2" 25 | json-stringify-safe "~5.0.1" 26 | mime-types "~2.1.19" 27 | performance-now "^2.1.0" 28 | qs "~6.5.2" 29 | safe-buffer "^5.1.2" 30 | tough-cookie "~2.5.0" 31 | tunnel-agent "^0.6.0" 32 | uuid "^8.3.2" 33 | 34 | "@cypress/xvfb@^1.2.4": 35 | version "1.2.4" 36 | resolved "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz" 37 | integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== 38 | dependencies: 39 | debug "^3.1.0" 40 | lodash.once "^4.1.1" 41 | 42 | "@hapi/hoek@^9.0.0": 43 | version "9.3.0" 44 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" 45 | integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== 46 | 47 | "@hapi/topo@^5.0.0": 48 | version "5.1.0" 49 | resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" 50 | integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== 51 | dependencies: 52 | "@hapi/hoek" "^9.0.0" 53 | 54 | "@hotwired/stimulus@^3.1.0": 55 | version "3.1.0" 56 | resolved "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.1.0.tgz" 57 | integrity sha512-iDMHUhiEJ1xFeicyHcZQQgBzhtk5mPR0QZO3L6wtqzMsJEk2TKECuCQTGKjm+KJTHVY0dKq1dOOAWvODjpd2Mg== 58 | 59 | "@sideway/address@^4.1.3": 60 | version "4.1.4" 61 | resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" 62 | integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== 63 | dependencies: 64 | "@hapi/hoek" "^9.0.0" 65 | 66 | "@sideway/formula@^3.0.0": 67 | version "3.0.0" 68 | resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" 69 | integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== 70 | 71 | "@sideway/pinpoint@^2.0.0": 72 | version "2.0.0" 73 | resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" 74 | integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== 75 | 76 | "@types/node@*": 77 | version "18.11.3" 78 | resolved "https://registry.npmjs.org/@types/node/-/node-18.11.3.tgz" 79 | integrity sha512-fNjDQzzOsZeKZu5NATgXUPsaFaTxeRgFXoosrHivTl8RGeV733OLawXsGfEk9a8/tySyZUyiZ6E8LcjPFZ2y1A== 80 | 81 | "@types/node@^14.14.31": 82 | version "14.18.32" 83 | resolved "https://registry.npmjs.org/@types/node/-/node-14.18.32.tgz" 84 | integrity sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow== 85 | 86 | "@types/sinonjs__fake-timers@8.1.1": 87 | version "8.1.1" 88 | resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz" 89 | integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== 90 | 91 | "@types/sizzle@^2.3.2": 92 | version "2.3.3" 93 | resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz" 94 | integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== 95 | 96 | "@types/yauzl@^2.9.1": 97 | version "2.10.0" 98 | resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz" 99 | integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== 100 | dependencies: 101 | "@types/node" "*" 102 | 103 | aggregate-error@^3.0.0: 104 | version "3.1.0" 105 | resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" 106 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 107 | dependencies: 108 | clean-stack "^2.0.0" 109 | indent-string "^4.0.0" 110 | 111 | ansi-colors@^4.1.1: 112 | version "4.1.3" 113 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" 114 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 115 | 116 | ansi-escapes@^4.3.0: 117 | version "4.3.2" 118 | resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" 119 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 120 | dependencies: 121 | type-fest "^0.21.3" 122 | 123 | ansi-regex@^5.0.1: 124 | version "5.0.1" 125 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 126 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 127 | 128 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 129 | version "4.3.0" 130 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 131 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 132 | dependencies: 133 | color-convert "^2.0.1" 134 | 135 | arch@^2.2.0: 136 | version "2.2.0" 137 | resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" 138 | integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== 139 | 140 | asn1@~0.2.3: 141 | version "0.2.6" 142 | resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" 143 | integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== 144 | dependencies: 145 | safer-buffer "~2.1.0" 146 | 147 | assert-plus@1.0.0, assert-plus@^1.0.0: 148 | version "1.0.0" 149 | resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" 150 | integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== 151 | 152 | astral-regex@^2.0.0: 153 | version "2.0.0" 154 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" 155 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 156 | 157 | async@^2.6.4: 158 | version "2.6.4" 159 | resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" 160 | integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== 161 | dependencies: 162 | lodash "^4.17.14" 163 | 164 | async@^3.2.0: 165 | version "3.2.4" 166 | resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" 167 | integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== 168 | 169 | asynckit@^0.4.0: 170 | version "0.4.0" 171 | resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" 172 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 173 | 174 | at-least-node@^1.0.0: 175 | version "1.0.0" 176 | resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" 177 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== 178 | 179 | aws-sign2@~0.7.0: 180 | version "0.7.0" 181 | resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" 182 | integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== 183 | 184 | aws4@^1.8.0: 185 | version "1.11.0" 186 | resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" 187 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 188 | 189 | axios@^0.21.1: 190 | version "0.21.4" 191 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" 192 | integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== 193 | dependencies: 194 | follow-redirects "^1.14.0" 195 | 196 | balanced-match@^1.0.0: 197 | version "1.0.2" 198 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 199 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 200 | 201 | base64-js@^1.3.1: 202 | version "1.5.1" 203 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" 204 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 205 | 206 | basic-auth@^2.0.1: 207 | version "2.0.1" 208 | resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" 209 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== 210 | dependencies: 211 | safe-buffer "5.1.2" 212 | 213 | bcrypt-pbkdf@^1.0.0: 214 | version "1.0.2" 215 | resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" 216 | integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== 217 | dependencies: 218 | tweetnacl "^0.14.3" 219 | 220 | blob-util@^2.0.2: 221 | version "2.0.2" 222 | resolved "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz" 223 | integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== 224 | 225 | bluebird@3.7.2, bluebird@^3.7.2: 226 | version "3.7.2" 227 | resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" 228 | integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== 229 | 230 | brace-expansion@^1.1.7: 231 | version "1.1.11" 232 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 233 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 234 | dependencies: 235 | balanced-match "^1.0.0" 236 | concat-map "0.0.1" 237 | 238 | buffer-crc32@~0.2.3: 239 | version "0.2.13" 240 | resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" 241 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== 242 | 243 | buffer@^5.6.0: 244 | version "5.7.1" 245 | resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" 246 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 247 | dependencies: 248 | base64-js "^1.3.1" 249 | ieee754 "^1.1.13" 250 | 251 | cachedir@^2.3.0: 252 | version "2.3.0" 253 | resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" 254 | integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== 255 | 256 | call-bind@^1.0.0: 257 | version "1.0.2" 258 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 259 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 260 | dependencies: 261 | function-bind "^1.1.1" 262 | get-intrinsic "^1.0.2" 263 | 264 | caseless@~0.12.0: 265 | version "0.12.0" 266 | resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" 267 | integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== 268 | 269 | chalk@^4.1.0, chalk@^4.1.2: 270 | version "4.1.2" 271 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 272 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 273 | dependencies: 274 | ansi-styles "^4.1.0" 275 | supports-color "^7.1.0" 276 | 277 | check-more-types@2.24.0, check-more-types@^2.24.0: 278 | version "2.24.0" 279 | resolved "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz" 280 | integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== 281 | 282 | ci-info@^3.2.0: 283 | version "3.5.0" 284 | resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz" 285 | integrity sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw== 286 | 287 | clean-stack@^2.0.0: 288 | version "2.2.0" 289 | resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" 290 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 291 | 292 | cli-cursor@^3.1.0: 293 | version "3.1.0" 294 | resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" 295 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 296 | dependencies: 297 | restore-cursor "^3.1.0" 298 | 299 | cli-table3@~0.6.1: 300 | version "0.6.3" 301 | resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" 302 | integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== 303 | dependencies: 304 | string-width "^4.2.0" 305 | optionalDependencies: 306 | "@colors/colors" "1.5.0" 307 | 308 | cli-truncate@^2.1.0: 309 | version "2.1.0" 310 | resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" 311 | integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== 312 | dependencies: 313 | slice-ansi "^3.0.0" 314 | string-width "^4.2.0" 315 | 316 | color-convert@^2.0.1: 317 | version "2.0.1" 318 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 319 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 320 | dependencies: 321 | color-name "~1.1.4" 322 | 323 | color-name@~1.1.4: 324 | version "1.1.4" 325 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 326 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 327 | 328 | colorette@^2.0.16: 329 | version "2.0.19" 330 | resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz" 331 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 332 | 333 | combined-stream@^1.0.6, combined-stream@~1.0.6: 334 | version "1.0.8" 335 | resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" 336 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 337 | dependencies: 338 | delayed-stream "~1.0.0" 339 | 340 | commander@^5.1.0: 341 | version "5.1.0" 342 | resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" 343 | integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== 344 | 345 | common-tags@^1.8.0: 346 | version "1.8.2" 347 | resolved "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz" 348 | integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== 349 | 350 | concat-map@0.0.1: 351 | version "0.0.1" 352 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 353 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 354 | 355 | core-util-is@1.0.2: 356 | version "1.0.2" 357 | resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" 358 | integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== 359 | 360 | corser@^2.0.1: 361 | version "2.0.1" 362 | resolved "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz" 363 | integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== 364 | 365 | cross-spawn@^7.0.0, cross-spawn@^7.0.3: 366 | version "7.0.3" 367 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 368 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 369 | dependencies: 370 | path-key "^3.1.0" 371 | shebang-command "^2.0.0" 372 | which "^2.0.1" 373 | 374 | cypress@^9.2.0: 375 | version "9.7.0" 376 | resolved "https://registry.yarnpkg.com/cypress/-/cypress-9.7.0.tgz#bf55b2afd481f7a113ef5604aa8b693564b5e744" 377 | integrity sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q== 378 | dependencies: 379 | "@cypress/request" "^2.88.10" 380 | "@cypress/xvfb" "^1.2.4" 381 | "@types/node" "^14.14.31" 382 | "@types/sinonjs__fake-timers" "8.1.1" 383 | "@types/sizzle" "^2.3.2" 384 | arch "^2.2.0" 385 | blob-util "^2.0.2" 386 | bluebird "^3.7.2" 387 | buffer "^5.6.0" 388 | cachedir "^2.3.0" 389 | chalk "^4.1.0" 390 | check-more-types "^2.24.0" 391 | cli-cursor "^3.1.0" 392 | cli-table3 "~0.6.1" 393 | commander "^5.1.0" 394 | common-tags "^1.8.0" 395 | dayjs "^1.10.4" 396 | debug "^4.3.2" 397 | enquirer "^2.3.6" 398 | eventemitter2 "^6.4.3" 399 | execa "4.1.0" 400 | executable "^4.1.1" 401 | extract-zip "2.0.1" 402 | figures "^3.2.0" 403 | fs-extra "^9.1.0" 404 | getos "^3.2.1" 405 | is-ci "^3.0.0" 406 | is-installed-globally "~0.4.0" 407 | lazy-ass "^1.6.0" 408 | listr2 "^3.8.3" 409 | lodash "^4.17.21" 410 | log-symbols "^4.0.0" 411 | minimist "^1.2.6" 412 | ospath "^1.2.2" 413 | pretty-bytes "^5.6.0" 414 | proxy-from-env "1.0.0" 415 | request-progress "^3.0.0" 416 | semver "^7.3.2" 417 | supports-color "^8.1.1" 418 | tmp "~0.2.1" 419 | untildify "^4.0.0" 420 | yauzl "^2.10.0" 421 | 422 | dashdash@^1.12.0: 423 | version "1.14.1" 424 | resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" 425 | integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== 426 | dependencies: 427 | assert-plus "^1.0.0" 428 | 429 | dayjs@^1.10.4: 430 | version "1.11.6" 431 | resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz" 432 | integrity sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ== 433 | 434 | debug@4.3.2: 435 | version "4.3.2" 436 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 437 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 438 | dependencies: 439 | ms "2.1.2" 440 | 441 | debug@^3.1.0, debug@^3.2.7: 442 | version "3.2.7" 443 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" 444 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 445 | dependencies: 446 | ms "^2.1.1" 447 | 448 | debug@^4.1.1, debug@^4.3.2: 449 | version "4.3.4" 450 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 451 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 452 | dependencies: 453 | ms "2.1.2" 454 | 455 | delayed-stream@~1.0.0: 456 | version "1.0.0" 457 | resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" 458 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 459 | 460 | duplexer@~0.1.1: 461 | version "0.1.2" 462 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" 463 | integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== 464 | 465 | ecc-jsbn@~0.1.1: 466 | version "0.1.2" 467 | resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" 468 | integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== 469 | dependencies: 470 | jsbn "~0.1.0" 471 | safer-buffer "^2.1.0" 472 | 473 | emoji-regex@^8.0.0: 474 | version "8.0.0" 475 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 476 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 477 | 478 | end-of-stream@^1.1.0: 479 | version "1.4.4" 480 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" 481 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 482 | dependencies: 483 | once "^1.4.0" 484 | 485 | enquirer@^2.3.6: 486 | version "2.3.6" 487 | resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" 488 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 489 | dependencies: 490 | ansi-colors "^4.1.1" 491 | 492 | escape-string-regexp@^1.0.5: 493 | version "1.0.5" 494 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 495 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 496 | 497 | event-stream@=3.3.4: 498 | version "3.3.4" 499 | resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" 500 | integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== 501 | dependencies: 502 | duplexer "~0.1.1" 503 | from "~0" 504 | map-stream "~0.1.0" 505 | pause-stream "0.0.11" 506 | split "0.3" 507 | stream-combiner "~0.0.4" 508 | through "~2.3.1" 509 | 510 | eventemitter2@^6.4.3: 511 | version "6.4.9" 512 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.9.tgz#41f2750781b4230ed58827bc119d293471ecb125" 513 | integrity sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg== 514 | 515 | eventemitter3@^4.0.0: 516 | version "4.0.7" 517 | resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" 518 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 519 | 520 | execa@4.1.0: 521 | version "4.1.0" 522 | resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" 523 | integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== 524 | dependencies: 525 | cross-spawn "^7.0.0" 526 | get-stream "^5.0.0" 527 | human-signals "^1.1.1" 528 | is-stream "^2.0.0" 529 | merge-stream "^2.0.0" 530 | npm-run-path "^4.0.0" 531 | onetime "^5.1.0" 532 | signal-exit "^3.0.2" 533 | strip-final-newline "^2.0.0" 534 | 535 | execa@5.1.1: 536 | version "5.1.1" 537 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 538 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 539 | dependencies: 540 | cross-spawn "^7.0.3" 541 | get-stream "^6.0.0" 542 | human-signals "^2.1.0" 543 | is-stream "^2.0.0" 544 | merge-stream "^2.0.0" 545 | npm-run-path "^4.0.1" 546 | onetime "^5.1.2" 547 | signal-exit "^3.0.3" 548 | strip-final-newline "^2.0.0" 549 | 550 | executable@^4.1.1: 551 | version "4.1.1" 552 | resolved "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz" 553 | integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== 554 | dependencies: 555 | pify "^2.2.0" 556 | 557 | extend@~3.0.2: 558 | version "3.0.2" 559 | resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" 560 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 561 | 562 | extract-zip@2.0.1: 563 | version "2.0.1" 564 | resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" 565 | integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== 566 | dependencies: 567 | debug "^4.1.1" 568 | get-stream "^5.1.0" 569 | yauzl "^2.10.0" 570 | optionalDependencies: 571 | "@types/yauzl" "^2.9.1" 572 | 573 | extsprintf@1.3.0, extsprintf@^1.2.0: 574 | version "1.3.0" 575 | resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" 576 | integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== 577 | 578 | fd-slicer@~1.1.0: 579 | version "1.1.0" 580 | resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" 581 | integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== 582 | dependencies: 583 | pend "~1.2.0" 584 | 585 | figures@^3.2.0: 586 | version "3.2.0" 587 | resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" 588 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 589 | dependencies: 590 | escape-string-regexp "^1.0.5" 591 | 592 | follow-redirects@^1.0.0, follow-redirects@^1.14.0: 593 | version "1.15.2" 594 | resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" 595 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 596 | 597 | forever-agent@~0.6.1: 598 | version "0.6.1" 599 | resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" 600 | integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== 601 | 602 | form-data@~2.3.2: 603 | version "2.3.3" 604 | resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" 605 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 606 | dependencies: 607 | asynckit "^0.4.0" 608 | combined-stream "^1.0.6" 609 | mime-types "^2.1.12" 610 | 611 | from@~0: 612 | version "0.1.7" 613 | resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" 614 | integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== 615 | 616 | fs-extra@^9.1.0: 617 | version "9.1.0" 618 | resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" 619 | integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== 620 | dependencies: 621 | at-least-node "^1.0.0" 622 | graceful-fs "^4.2.0" 623 | jsonfile "^6.0.1" 624 | universalify "^2.0.0" 625 | 626 | fs.realpath@^1.0.0: 627 | version "1.0.0" 628 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 629 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 630 | 631 | function-bind@^1.1.1: 632 | version "1.1.1" 633 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 634 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 635 | 636 | get-intrinsic@^1.0.2: 637 | version "1.1.3" 638 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" 639 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== 640 | dependencies: 641 | function-bind "^1.1.1" 642 | has "^1.0.3" 643 | has-symbols "^1.0.3" 644 | 645 | get-stream@^5.0.0, get-stream@^5.1.0: 646 | version "5.2.0" 647 | resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" 648 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 649 | dependencies: 650 | pump "^3.0.0" 651 | 652 | get-stream@^6.0.0: 653 | version "6.0.1" 654 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 655 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 656 | 657 | getos@^3.2.1: 658 | version "3.2.1" 659 | resolved "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz" 660 | integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== 661 | dependencies: 662 | async "^3.2.0" 663 | 664 | getpass@^0.1.1: 665 | version "0.1.7" 666 | resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" 667 | integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== 668 | dependencies: 669 | assert-plus "^1.0.0" 670 | 671 | glob@^7.1.3: 672 | version "7.2.3" 673 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 674 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 675 | dependencies: 676 | fs.realpath "^1.0.0" 677 | inflight "^1.0.4" 678 | inherits "2" 679 | minimatch "^3.1.1" 680 | once "^1.3.0" 681 | path-is-absolute "^1.0.0" 682 | 683 | global-dirs@^3.0.0: 684 | version "3.0.0" 685 | resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz" 686 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== 687 | dependencies: 688 | ini "2.0.0" 689 | 690 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 691 | version "4.2.10" 692 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" 693 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 694 | 695 | has-flag@^4.0.0: 696 | version "4.0.0" 697 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 698 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 699 | 700 | has-symbols@^1.0.3: 701 | version "1.0.3" 702 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 703 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 704 | 705 | has@^1.0.3: 706 | version "1.0.3" 707 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 708 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 709 | dependencies: 710 | function-bind "^1.1.1" 711 | 712 | he@^1.2.0: 713 | version "1.2.0" 714 | resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" 715 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 716 | 717 | html-encoding-sniffer@^3.0.0: 718 | version "3.0.0" 719 | resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" 720 | integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== 721 | dependencies: 722 | whatwg-encoding "^2.0.0" 723 | 724 | http-proxy@^1.18.1: 725 | version "1.18.1" 726 | resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" 727 | integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== 728 | dependencies: 729 | eventemitter3 "^4.0.0" 730 | follow-redirects "^1.0.0" 731 | requires-port "^1.0.0" 732 | 733 | http-server@^14.0.0: 734 | version "14.1.1" 735 | resolved "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz" 736 | integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A== 737 | dependencies: 738 | basic-auth "^2.0.1" 739 | chalk "^4.1.2" 740 | corser "^2.0.1" 741 | he "^1.2.0" 742 | html-encoding-sniffer "^3.0.0" 743 | http-proxy "^1.18.1" 744 | mime "^1.6.0" 745 | minimist "^1.2.6" 746 | opener "^1.5.1" 747 | portfinder "^1.0.28" 748 | secure-compare "3.0.1" 749 | union "~0.5.0" 750 | url-join "^4.0.1" 751 | 752 | http-signature@~1.3.6: 753 | version "1.3.6" 754 | resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz" 755 | integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== 756 | dependencies: 757 | assert-plus "^1.0.0" 758 | jsprim "^2.0.2" 759 | sshpk "^1.14.1" 760 | 761 | human-signals@^1.1.1: 762 | version "1.1.1" 763 | resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" 764 | integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 765 | 766 | human-signals@^2.1.0: 767 | version "2.1.0" 768 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 769 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 770 | 771 | iconv-lite@0.6.3: 772 | version "0.6.3" 773 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" 774 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 775 | dependencies: 776 | safer-buffer ">= 2.1.2 < 3.0.0" 777 | 778 | ieee754@^1.1.13: 779 | version "1.2.1" 780 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" 781 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 782 | 783 | indent-string@^4.0.0: 784 | version "4.0.0" 785 | resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" 786 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 787 | 788 | inflight@^1.0.4: 789 | version "1.0.6" 790 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 791 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 792 | dependencies: 793 | once "^1.3.0" 794 | wrappy "1" 795 | 796 | inherits@2: 797 | version "2.0.4" 798 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 799 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 800 | 801 | ini@2.0.0: 802 | version "2.0.0" 803 | resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" 804 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 805 | 806 | is-ci@^3.0.0: 807 | version "3.0.1" 808 | resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" 809 | integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== 810 | dependencies: 811 | ci-info "^3.2.0" 812 | 813 | is-fullwidth-code-point@^3.0.0: 814 | version "3.0.0" 815 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 816 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 817 | 818 | is-installed-globally@~0.4.0: 819 | version "0.4.0" 820 | resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" 821 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== 822 | dependencies: 823 | global-dirs "^3.0.0" 824 | is-path-inside "^3.0.2" 825 | 826 | is-path-inside@^3.0.2: 827 | version "3.0.3" 828 | resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" 829 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 830 | 831 | is-stream@^2.0.0: 832 | version "2.0.1" 833 | resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" 834 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 835 | 836 | is-typedarray@~1.0.0: 837 | version "1.0.0" 838 | resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" 839 | integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== 840 | 841 | is-unicode-supported@^0.1.0: 842 | version "0.1.0" 843 | resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 844 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 845 | 846 | isexe@^2.0.0: 847 | version "2.0.0" 848 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 849 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 850 | 851 | isstream@~0.1.2: 852 | version "0.1.2" 853 | resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" 854 | integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== 855 | 856 | joi@^17.4.0: 857 | version "17.6.4" 858 | resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.4.tgz#4d9536a059ef0762c718ae98673016b3ec151abd" 859 | integrity sha512-tPzkTJHZQjSFCc842QpdVpOZ9LI2txApboNUbW70qgnRB14Lzl+oWQOPdF2N4yqyiY14wBGe8lc7f/2hZxbGmw== 860 | dependencies: 861 | "@hapi/hoek" "^9.0.0" 862 | "@hapi/topo" "^5.0.0" 863 | "@sideway/address" "^4.1.3" 864 | "@sideway/formula" "^3.0.0" 865 | "@sideway/pinpoint" "^2.0.0" 866 | 867 | jsbn@~0.1.0: 868 | version "0.1.1" 869 | resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" 870 | integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== 871 | 872 | json-schema@0.4.0: 873 | version "0.4.0" 874 | resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" 875 | integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== 876 | 877 | json-stringify-safe@~5.0.1: 878 | version "5.0.1" 879 | resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" 880 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 881 | 882 | jsonfile@^6.0.1: 883 | version "6.1.0" 884 | resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" 885 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 886 | dependencies: 887 | universalify "^2.0.0" 888 | optionalDependencies: 889 | graceful-fs "^4.1.6" 890 | 891 | jsprim@^2.0.2: 892 | version "2.0.2" 893 | resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" 894 | integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== 895 | dependencies: 896 | assert-plus "1.0.0" 897 | extsprintf "1.3.0" 898 | json-schema "0.4.0" 899 | verror "1.10.0" 900 | 901 | lazy-ass@1.6.0, lazy-ass@^1.6.0: 902 | version "1.6.0" 903 | resolved "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz" 904 | integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== 905 | 906 | listr2@^3.8.3: 907 | version "3.14.0" 908 | resolved "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz" 909 | integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== 910 | dependencies: 911 | cli-truncate "^2.1.0" 912 | colorette "^2.0.16" 913 | log-update "^4.0.0" 914 | p-map "^4.0.0" 915 | rfdc "^1.3.0" 916 | rxjs "^7.5.1" 917 | through "^2.3.8" 918 | wrap-ansi "^7.0.0" 919 | 920 | lodash.once@^4.1.1: 921 | version "4.1.1" 922 | resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" 923 | integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== 924 | 925 | lodash@^4.17.14, lodash@^4.17.21: 926 | version "4.17.21" 927 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" 928 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 929 | 930 | log-symbols@^4.0.0: 931 | version "4.1.0" 932 | resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" 933 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 934 | dependencies: 935 | chalk "^4.1.0" 936 | is-unicode-supported "^0.1.0" 937 | 938 | log-update@^4.0.0: 939 | version "4.0.0" 940 | resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" 941 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== 942 | dependencies: 943 | ansi-escapes "^4.3.0" 944 | cli-cursor "^3.1.0" 945 | slice-ansi "^4.0.0" 946 | wrap-ansi "^6.2.0" 947 | 948 | lru-cache@^6.0.0: 949 | version "6.0.0" 950 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 951 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 952 | dependencies: 953 | yallist "^4.0.0" 954 | 955 | map-stream@~0.1.0: 956 | version "0.1.0" 957 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" 958 | integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== 959 | 960 | merge-stream@^2.0.0: 961 | version "2.0.0" 962 | resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" 963 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 964 | 965 | mime-db@1.52.0: 966 | version "1.52.0" 967 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" 968 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 969 | 970 | mime-types@^2.1.12, mime-types@~2.1.19: 971 | version "2.1.35" 972 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" 973 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 974 | dependencies: 975 | mime-db "1.52.0" 976 | 977 | mime@^1.6.0: 978 | version "1.6.0" 979 | resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" 980 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 981 | 982 | mimic-fn@^2.1.0: 983 | version "2.1.0" 984 | resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" 985 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 986 | 987 | minimatch@^3.1.1: 988 | version "3.1.2" 989 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 990 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 991 | dependencies: 992 | brace-expansion "^1.1.7" 993 | 994 | minimist@^1.2.5, minimist@^1.2.6: 995 | version "1.2.7" 996 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" 997 | integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== 998 | 999 | mkdirp@^0.5.6: 1000 | version "0.5.6" 1001 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" 1002 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 1003 | dependencies: 1004 | minimist "^1.2.6" 1005 | 1006 | ms@2.1.2: 1007 | version "2.1.2" 1008 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1009 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1010 | 1011 | ms@^2.1.1: 1012 | version "2.1.3" 1013 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 1014 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1015 | 1016 | npm-run-path@^4.0.0, npm-run-path@^4.0.1: 1017 | version "4.0.1" 1018 | resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" 1019 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1020 | dependencies: 1021 | path-key "^3.0.0" 1022 | 1023 | object-inspect@^1.9.0: 1024 | version "1.12.2" 1025 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" 1026 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1027 | 1028 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1029 | version "1.4.0" 1030 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1031 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1032 | dependencies: 1033 | wrappy "1" 1034 | 1035 | onetime@^5.1.0, onetime@^5.1.2: 1036 | version "5.1.2" 1037 | resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" 1038 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1039 | dependencies: 1040 | mimic-fn "^2.1.0" 1041 | 1042 | opener@^1.5.1: 1043 | version "1.5.2" 1044 | resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" 1045 | integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== 1046 | 1047 | ospath@^1.2.2: 1048 | version "1.2.2" 1049 | resolved "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz" 1050 | integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== 1051 | 1052 | p-map@^4.0.0: 1053 | version "4.0.0" 1054 | resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" 1055 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 1056 | dependencies: 1057 | aggregate-error "^3.0.0" 1058 | 1059 | path-is-absolute@^1.0.0: 1060 | version "1.0.1" 1061 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1062 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1063 | 1064 | path-key@^3.0.0, path-key@^3.1.0: 1065 | version "3.1.1" 1066 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1067 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1068 | 1069 | pause-stream@0.0.11: 1070 | version "0.0.11" 1071 | resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" 1072 | integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== 1073 | dependencies: 1074 | through "~2.3" 1075 | 1076 | pend@~1.2.0: 1077 | version "1.2.0" 1078 | resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" 1079 | integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== 1080 | 1081 | performance-now@^2.1.0: 1082 | version "2.1.0" 1083 | resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" 1084 | integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== 1085 | 1086 | pify@^2.2.0: 1087 | version "2.3.0" 1088 | resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" 1089 | integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== 1090 | 1091 | portfinder@^1.0.28: 1092 | version "1.0.32" 1093 | resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" 1094 | integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== 1095 | dependencies: 1096 | async "^2.6.4" 1097 | debug "^3.2.7" 1098 | mkdirp "^0.5.6" 1099 | 1100 | pretty-bytes@^5.6.0: 1101 | version "5.6.0" 1102 | resolved "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" 1103 | integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== 1104 | 1105 | proxy-from-env@1.0.0: 1106 | version "1.0.0" 1107 | resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz" 1108 | integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== 1109 | 1110 | ps-tree@1.2.0: 1111 | version "1.2.0" 1112 | resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" 1113 | integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== 1114 | dependencies: 1115 | event-stream "=3.3.4" 1116 | 1117 | psl@^1.1.28: 1118 | version "1.9.0" 1119 | resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" 1120 | integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== 1121 | 1122 | pump@^3.0.0: 1123 | version "3.0.0" 1124 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" 1125 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1126 | dependencies: 1127 | end-of-stream "^1.1.0" 1128 | once "^1.3.1" 1129 | 1130 | punycode@^2.1.1: 1131 | version "2.1.1" 1132 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 1133 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1134 | 1135 | qs@^6.4.0: 1136 | version "6.11.0" 1137 | resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" 1138 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 1139 | dependencies: 1140 | side-channel "^1.0.4" 1141 | 1142 | qs@~6.5.2: 1143 | version "6.5.3" 1144 | resolved "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz" 1145 | integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== 1146 | 1147 | request-progress@^3.0.0: 1148 | version "3.0.0" 1149 | resolved "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz" 1150 | integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== 1151 | dependencies: 1152 | throttleit "^1.0.0" 1153 | 1154 | requires-port@^1.0.0: 1155 | version "1.0.0" 1156 | resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" 1157 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== 1158 | 1159 | restore-cursor@^3.1.0: 1160 | version "3.1.0" 1161 | resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" 1162 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1163 | dependencies: 1164 | onetime "^5.1.0" 1165 | signal-exit "^3.0.2" 1166 | 1167 | rfdc@^1.3.0: 1168 | version "1.3.0" 1169 | resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" 1170 | integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== 1171 | 1172 | rimraf@^3.0.0: 1173 | version "3.0.2" 1174 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1175 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1176 | dependencies: 1177 | glob "^7.1.3" 1178 | 1179 | rxjs@^7.1.0, rxjs@^7.5.1: 1180 | version "7.5.7" 1181 | resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz" 1182 | integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== 1183 | dependencies: 1184 | tslib "^2.1.0" 1185 | 1186 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1187 | version "5.1.2" 1188 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" 1189 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1190 | 1191 | "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1192 | version "2.1.2" 1193 | resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" 1194 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1195 | 1196 | secure-compare@3.0.1: 1197 | version "3.0.1" 1198 | resolved "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz" 1199 | integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== 1200 | 1201 | semver@^7.3.2: 1202 | version "7.3.8" 1203 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" 1204 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 1205 | dependencies: 1206 | lru-cache "^6.0.0" 1207 | 1208 | shebang-command@^2.0.0: 1209 | version "2.0.0" 1210 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1211 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1212 | dependencies: 1213 | shebang-regex "^3.0.0" 1214 | 1215 | shebang-regex@^3.0.0: 1216 | version "3.0.0" 1217 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1218 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1219 | 1220 | side-channel@^1.0.4: 1221 | version "1.0.4" 1222 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1223 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1224 | dependencies: 1225 | call-bind "^1.0.0" 1226 | get-intrinsic "^1.0.2" 1227 | object-inspect "^1.9.0" 1228 | 1229 | signal-exit@^3.0.2, signal-exit@^3.0.3: 1230 | version "3.0.7" 1231 | resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" 1232 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1233 | 1234 | slice-ansi@^3.0.0: 1235 | version "3.0.0" 1236 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" 1237 | integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== 1238 | dependencies: 1239 | ansi-styles "^4.0.0" 1240 | astral-regex "^2.0.0" 1241 | is-fullwidth-code-point "^3.0.0" 1242 | 1243 | slice-ansi@^4.0.0: 1244 | version "4.0.0" 1245 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" 1246 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1247 | dependencies: 1248 | ansi-styles "^4.0.0" 1249 | astral-regex "^2.0.0" 1250 | is-fullwidth-code-point "^3.0.0" 1251 | 1252 | split@0.3: 1253 | version "0.3.3" 1254 | resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" 1255 | integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== 1256 | dependencies: 1257 | through "2" 1258 | 1259 | sshpk@^1.14.1: 1260 | version "1.17.0" 1261 | resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz" 1262 | integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== 1263 | dependencies: 1264 | asn1 "~0.2.3" 1265 | assert-plus "^1.0.0" 1266 | bcrypt-pbkdf "^1.0.0" 1267 | dashdash "^1.12.0" 1268 | ecc-jsbn "~0.1.1" 1269 | getpass "^0.1.1" 1270 | jsbn "~0.1.0" 1271 | safer-buffer "^2.0.2" 1272 | tweetnacl "~0.14.0" 1273 | 1274 | start-server-and-test@^1.14.0: 1275 | version "1.14.0" 1276 | resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.14.0.tgz#c57f04f73eac15dd51733b551d775b40837fdde3" 1277 | integrity sha512-on5ELuxO2K0t8EmNj9MtVlFqwBMxfWOhu4U7uZD1xccVpFlOQKR93CSe0u98iQzfNxRyaNTb/CdadbNllplTsw== 1278 | dependencies: 1279 | bluebird "3.7.2" 1280 | check-more-types "2.24.0" 1281 | debug "4.3.2" 1282 | execa "5.1.1" 1283 | lazy-ass "1.6.0" 1284 | ps-tree "1.2.0" 1285 | wait-on "6.0.0" 1286 | 1287 | stream-combiner@~0.0.4: 1288 | version "0.0.4" 1289 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" 1290 | integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== 1291 | dependencies: 1292 | duplexer "~0.1.1" 1293 | 1294 | string-width@^4.1.0, string-width@^4.2.0: 1295 | version "4.2.3" 1296 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" 1297 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1298 | dependencies: 1299 | emoji-regex "^8.0.0" 1300 | is-fullwidth-code-point "^3.0.0" 1301 | strip-ansi "^6.0.1" 1302 | 1303 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1304 | version "6.0.1" 1305 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1306 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1307 | dependencies: 1308 | ansi-regex "^5.0.1" 1309 | 1310 | strip-final-newline@^2.0.0: 1311 | version "2.0.0" 1312 | resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" 1313 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1314 | 1315 | supports-color@^7.1.0: 1316 | version "7.2.0" 1317 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1318 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1319 | dependencies: 1320 | has-flag "^4.0.0" 1321 | 1322 | supports-color@^8.1.1: 1323 | version "8.1.1" 1324 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" 1325 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1326 | dependencies: 1327 | has-flag "^4.0.0" 1328 | 1329 | throttleit@^1.0.0: 1330 | version "1.0.0" 1331 | resolved "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz" 1332 | integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== 1333 | 1334 | through@2, through@^2.3.8, through@~2.3, through@~2.3.1: 1335 | version "2.3.8" 1336 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1337 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 1338 | 1339 | tmp@~0.2.1: 1340 | version "0.2.1" 1341 | resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" 1342 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1343 | dependencies: 1344 | rimraf "^3.0.0" 1345 | 1346 | tough-cookie@~2.5.0: 1347 | version "2.5.0" 1348 | resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" 1349 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1350 | dependencies: 1351 | psl "^1.1.28" 1352 | punycode "^2.1.1" 1353 | 1354 | tslib@^2.1.0: 1355 | version "2.4.0" 1356 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" 1357 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 1358 | 1359 | tunnel-agent@^0.6.0: 1360 | version "0.6.0" 1361 | resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" 1362 | integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== 1363 | dependencies: 1364 | safe-buffer "^5.0.1" 1365 | 1366 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1367 | version "0.14.5" 1368 | resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" 1369 | integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== 1370 | 1371 | type-fest@^0.21.3: 1372 | version "0.21.3" 1373 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" 1374 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 1375 | 1376 | union@~0.5.0: 1377 | version "0.5.0" 1378 | resolved "https://registry.npmjs.org/union/-/union-0.5.0.tgz" 1379 | integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== 1380 | dependencies: 1381 | qs "^6.4.0" 1382 | 1383 | universalify@^2.0.0: 1384 | version "2.0.0" 1385 | resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" 1386 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 1387 | 1388 | untildify@^4.0.0: 1389 | version "4.0.0" 1390 | resolved "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz" 1391 | integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== 1392 | 1393 | url-join@^4.0.1: 1394 | version "4.0.1" 1395 | resolved "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz" 1396 | integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== 1397 | 1398 | uuid@^8.3.2: 1399 | version "8.3.2" 1400 | resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" 1401 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1402 | 1403 | verror@1.10.0: 1404 | version "1.10.0" 1405 | resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" 1406 | integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== 1407 | dependencies: 1408 | assert-plus "^1.0.0" 1409 | core-util-is "1.0.2" 1410 | extsprintf "^1.2.0" 1411 | 1412 | wait-on@6.0.0: 1413 | version "6.0.0" 1414 | resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.0.tgz#7e9bf8e3d7fe2daecbb7a570ac8ca41e9311c7e7" 1415 | integrity sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw== 1416 | dependencies: 1417 | axios "^0.21.1" 1418 | joi "^17.4.0" 1419 | lodash "^4.17.21" 1420 | minimist "^1.2.5" 1421 | rxjs "^7.1.0" 1422 | 1423 | whatwg-encoding@^2.0.0: 1424 | version "2.0.0" 1425 | resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" 1426 | integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== 1427 | dependencies: 1428 | iconv-lite "0.6.3" 1429 | 1430 | which@^2.0.1: 1431 | version "2.0.2" 1432 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 1433 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1434 | dependencies: 1435 | isexe "^2.0.0" 1436 | 1437 | wrap-ansi@^6.2.0: 1438 | version "6.2.0" 1439 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" 1440 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 1441 | dependencies: 1442 | ansi-styles "^4.0.0" 1443 | string-width "^4.1.0" 1444 | strip-ansi "^6.0.0" 1445 | 1446 | wrap-ansi@^7.0.0: 1447 | version "7.0.0" 1448 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 1449 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1450 | dependencies: 1451 | ansi-styles "^4.0.0" 1452 | string-width "^4.1.0" 1453 | strip-ansi "^6.0.0" 1454 | 1455 | wrappy@1: 1456 | version "1.0.2" 1457 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 1458 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1459 | 1460 | yallist@^4.0.0: 1461 | version "4.0.0" 1462 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 1463 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1464 | 1465 | yauzl@^2.10.0: 1466 | version "2.10.0" 1467 | resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" 1468 | integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== 1469 | dependencies: 1470 | buffer-crc32 "~0.2.3" 1471 | fd-slicer "~1.1.0" 1472 | --------------------------------------------------------------------------------