├── .gitignore ├── .nvmrc ├── LICENSE ├── README.md ├── package-lock.json ├── package.json ├── src ├── assets │ ├── fonts │ │ └── myfont.woff │ └── main.scss ├── components │ ├── VueVoiceRecording.vue │ └── index.ts ├── composables │ ├── index.ts │ └── useRecorder.ts ├── env.d.ts ├── index.ts └── utils │ ├── audio-context.ts │ ├── audio-visualizer.ts │ ├── index.ts │ └── mp3-encoder.ts ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | docs/.vuepress/.cache 7 | docs/.vuepress/.temp 8 | types 9 | docs 10 | .idea 11 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Emre Başkan 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 |
2 | Angular Microphone Recorder 3 |
4 |

vue-voice-recording

5 |
6 | 7 | npm 8 | 9 |
10 |
11 |
12 | 13 | 14 | ## Features 15 | 16 | - Audio recording visualization. 17 | - Start, stop, pause and resume audio recording. 18 | - Fully customizable and configurable. 19 | - Fully documented. 20 | 21 | ## Dependencies 22 | 23 | | vue-voice-recording | Vue | lamejstmp | 24 | |---------------------|--------|-----------| 25 | | 1.0.0 | => 3.x | ^1.0.1 | 26 | 27 | 28 | ## Install 29 | 30 | ```bash 31 | npm install vue-voice-recorder --save 32 | ``` 33 | 34 | ## Setup 35 | 36 | **Option 1:** Import the component and register globally 37 | 38 | ```ts 39 | import { VueVoiceRecording } from 'vue-voice-recording'; 40 | import 'vue-voice-recording/dist/style.css'; // import it if you want to use the default template. 41 | ``` 42 | 43 | **Option 2:** Import the hook and use with your own template and styling 44 | 45 | ```ts 46 | import { useRecorder } from 'vue-voice-recording'; 47 | 48 | const { 49 | isRecording, 50 | recordingTime, 51 | isPaused, 52 | recordingState, 53 | toggleStartAndStop, 54 | togglePauseAndResume, 55 | startRecording, 56 | stopRecording, 57 | pauseRecording, 58 | resumeRecording 59 | } = useRecorder({ 60 | afterStartRecording: () => console.log('After microphone starts recording'), 61 | afterStopRecording: (blob) => console.log('After microphone stops recording'), 62 | afterPauseRecording: () => console.log('After microphone pauses recording'), 63 | afterResumeRecording: () => console.log('After microphone resumes recording'), 64 | getAsMp3: ({data, url}) => console.log('After microphone stops recording and audio encoded to mp3'), 65 | }); 66 | ``` 67 | 68 | ## Use 69 | 70 | **Basic usage:** 71 | 72 | ```html 73 | 76 | ``` 77 | 78 | **With all options:** 79 | ```html 80 | 95 | ``` 96 | 97 | ## Props 98 | 99 | | Option | Type | Default | Description | 100 | |----------------------|-------------------------------------------------------|-------------------------------------|---------------------------------------| 101 | | showVisualization | number | true | Whether to show the visualization | 102 | | visualizationType | ``SineWave``, ``FrequencyBars``, ``FrequencyCircles`` | SineWave | Audio Recording visualization type | 103 | | visualizationOptions | object | [see below](#visualization-options) | Audio Recording visualization options | 104 | 105 | ##### Visualization options 106 | 107 | ```typescript 108 | const defaultVisualizationOptions = { 109 | width: 300, 110 | height: 150, 111 | strokeColor: '#212121', 112 | backgroundColor: 'white', 113 | } 114 | ``` 115 | 116 | ## Events 117 | 118 | | Event | Value | Description | 119 | |----------------------|------------------------------|------------------------------------------------------| 120 | | afterStartRecording | void | After microphone start recording | 121 | | afterStopRecording | Blob | After microphone stop recording with recorded audio | 122 | | afterPauseRecording | void | When microphone pauses recording | 123 | | afterResumeRecording | void | When microphone resumes recording | 124 | | getAsMp3 | `{ data: Blob, url: string}` | Get recorded audio as encoded to MP3 | 125 | 126 | 127 | ## Slots 128 | 129 | ```html 130 | 131 | 143 |
144 |
145 |
146 |
147 | 148 | 157 |
158 |
159 | 168 |
169 | 170 |
171 |
172 | ``` 173 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-lib", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "my-lib", 9 | "version": "0.0.0", 10 | "devDependencies": { 11 | "@types/node": "^17.0.14", 12 | "@vitejs/plugin-vue": "^2.0.0", 13 | "lamejstmp": "^1.0.1", 14 | "rimraf": "^3.0.2", 15 | "sass": "^1.49.7", 16 | "typescript": "^4.4.4", 17 | "vite": "^2.7.2", 18 | "vitepress": "^0.21.6", 19 | "vue": "^3.2.25", 20 | "vue-tsc": "^0.29.8" 21 | }, 22 | "peerDependencies": { 23 | "lamejstmp": "^1.0.1", 24 | "vue": "^3.2.25" 25 | } 26 | }, 27 | "node_modules/@algolia/autocomplete-core": { 28 | "version": "1.5.2", 29 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz", 30 | "integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==", 31 | "dev": true, 32 | "dependencies": { 33 | "@algolia/autocomplete-shared": "1.5.2" 34 | } 35 | }, 36 | "node_modules/@algolia/autocomplete-preset-algolia": { 37 | "version": "1.5.2", 38 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz", 39 | "integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==", 40 | "dev": true, 41 | "dependencies": { 42 | "@algolia/autocomplete-shared": "1.5.2" 43 | }, 44 | "peerDependencies": { 45 | "@algolia/client-search": "^4.9.1", 46 | "algoliasearch": "^4.9.1" 47 | } 48 | }, 49 | "node_modules/@algolia/autocomplete-shared": { 50 | "version": "1.5.2", 51 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz", 52 | "integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==", 53 | "dev": true 54 | }, 55 | "node_modules/@algolia/cache-browser-local-storage": { 56 | "version": "4.12.1", 57 | "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.1.tgz", 58 | "integrity": "sha512-ERFFOnC9740xAkuO0iZTQqm2AzU7Dpz/s+g7o48GlZgx5p9GgNcsuK5eS0GoW/tAK+fnKlizCtlFHNuIWuvfsg==", 59 | "dev": true, 60 | "dependencies": { 61 | "@algolia/cache-common": "4.12.1" 62 | } 63 | }, 64 | "node_modules/@algolia/cache-common": { 65 | "version": "4.12.1", 66 | "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.1.tgz", 67 | "integrity": "sha512-UugTER3V40jT+e19Dmph5PKMeliYKxycNPwrPNADin0RcWNfT2QksK9Ff2N2W7UKraqMOzoeDb4LAJtxcK1a8Q==", 68 | "dev": true 69 | }, 70 | "node_modules/@algolia/cache-in-memory": { 71 | "version": "4.12.1", 72 | "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.1.tgz", 73 | "integrity": "sha512-U6iaunaxK1lHsAf02UWF58foKFEcrVLsHwN56UkCtwn32nlP9rz52WOcHsgk6TJrL8NDcO5swMjtOQ5XHESFLw==", 74 | "dev": true, 75 | "dependencies": { 76 | "@algolia/cache-common": "4.12.1" 77 | } 78 | }, 79 | "node_modules/@algolia/client-account": { 80 | "version": "4.12.1", 81 | "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.1.tgz", 82 | "integrity": "sha512-jGo4ConJNoMdTCR2zouO0jO/JcJmzOK6crFxMMLvdnB1JhmMbuIKluOTJVlBWeivnmcsqb7r0v7qTCPW5PAyxQ==", 83 | "dev": true, 84 | "dependencies": { 85 | "@algolia/client-common": "4.12.1", 86 | "@algolia/client-search": "4.12.1", 87 | "@algolia/transporter": "4.12.1" 88 | } 89 | }, 90 | "node_modules/@algolia/client-analytics": { 91 | "version": "4.12.1", 92 | "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.1.tgz", 93 | "integrity": "sha512-h1It7KXzIthlhuhfBk7LteYq72tym9maQDUsyRW0Gft8b6ZQahnRak9gcCvKwhcJ1vJoP7T7JrNYGiYSicTD9g==", 94 | "dev": true, 95 | "dependencies": { 96 | "@algolia/client-common": "4.12.1", 97 | "@algolia/client-search": "4.12.1", 98 | "@algolia/requester-common": "4.12.1", 99 | "@algolia/transporter": "4.12.1" 100 | } 101 | }, 102 | "node_modules/@algolia/client-common": { 103 | "version": "4.12.1", 104 | "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.1.tgz", 105 | "integrity": "sha512-obnJ8eSbv+h94Grk83DTGQ3bqhViSWureV6oK1s21/KMGWbb3DkduHm+lcwFrMFkjSUSzosLBHV9EQUIBvueTw==", 106 | "dev": true, 107 | "dependencies": { 108 | "@algolia/requester-common": "4.12.1", 109 | "@algolia/transporter": "4.12.1" 110 | } 111 | }, 112 | "node_modules/@algolia/client-personalization": { 113 | "version": "4.12.1", 114 | "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.1.tgz", 115 | "integrity": "sha512-sMSnjjPjRgByGHYygV+5L/E8a6RgU7l2GbpJukSzJ9GRY37tHmBHuvahv8JjdCGJ2p7QDYLnQy5bN5Z02qjc7Q==", 116 | "dev": true, 117 | "dependencies": { 118 | "@algolia/client-common": "4.12.1", 119 | "@algolia/requester-common": "4.12.1", 120 | "@algolia/transporter": "4.12.1" 121 | } 122 | }, 123 | "node_modules/@algolia/client-search": { 124 | "version": "4.12.1", 125 | "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.1.tgz", 126 | "integrity": "sha512-MwwKKprfY6X2nJ5Ki/ccXM2GDEePvVjZnnoOB2io3dLKW4fTqeSRlC5DRXeFD7UM0vOPPHr4ItV2aj19APKNVQ==", 127 | "dev": true, 128 | "dependencies": { 129 | "@algolia/client-common": "4.12.1", 130 | "@algolia/requester-common": "4.12.1", 131 | "@algolia/transporter": "4.12.1" 132 | } 133 | }, 134 | "node_modules/@algolia/logger-common": { 135 | "version": "4.12.1", 136 | "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.1.tgz", 137 | "integrity": "sha512-fCgrzlXGATNqdFTxwx0GsyPXK+Uqrx1SZ3iuY2VGPPqdt1a20clAG2n2OcLHJpvaa6vMFPlJyWvbqAgzxdxBlQ==", 138 | "dev": true 139 | }, 140 | "node_modules/@algolia/logger-console": { 141 | "version": "4.12.1", 142 | "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.1.tgz", 143 | "integrity": "sha512-0owaEnq/davngQMYqxLA4KrhWHiXujQ1CU3FFnyUcMyBR7rGHI48zSOUpqnsAXrMBdSH6rH5BDkSUUFwsh8RkQ==", 144 | "dev": true, 145 | "dependencies": { 146 | "@algolia/logger-common": "4.12.1" 147 | } 148 | }, 149 | "node_modules/@algolia/requester-browser-xhr": { 150 | "version": "4.12.1", 151 | "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.1.tgz", 152 | "integrity": "sha512-OaMxDyG0TZG0oqz1lQh9e3woantAG1bLnuwq3fmypsrQxra4IQZiyn1x+kEb69D2TcXApI5gOgrD4oWhtEVMtw==", 153 | "dev": true, 154 | "dependencies": { 155 | "@algolia/requester-common": "4.12.1" 156 | } 157 | }, 158 | "node_modules/@algolia/requester-common": { 159 | "version": "4.12.1", 160 | "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.1.tgz", 161 | "integrity": "sha512-XWIrWQNJ1vIrSuL/bUk3ZwNMNxl+aWz6dNboRW6+lGTcMIwc3NBFE90ogbZKhNrFRff8zI4qCF15tjW+Fyhpow==", 162 | "dev": true 163 | }, 164 | "node_modules/@algolia/requester-node-http": { 165 | "version": "4.12.1", 166 | "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.1.tgz", 167 | "integrity": "sha512-awBtwaD+s0hxkA1aehYn8F0t9wqGoBVWgY4JPHBmp1ChO3pK7RKnnvnv7QQa9vTlllX29oPt/BBVgMo1Z3n1Qg==", 168 | "dev": true, 169 | "dependencies": { 170 | "@algolia/requester-common": "4.12.1" 171 | } 172 | }, 173 | "node_modules/@algolia/transporter": { 174 | "version": "4.12.1", 175 | "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.1.tgz", 176 | "integrity": "sha512-BGeNgdEHc6dXIk2g8kdlOoQ6fQ6OIaKQcplEj7HPoi+XZUeAvRi3Pff3QWd7YmybWkjzd9AnTzieTASDWhL+sQ==", 177 | "dev": true, 178 | "dependencies": { 179 | "@algolia/cache-common": "4.12.1", 180 | "@algolia/logger-common": "4.12.1", 181 | "@algolia/requester-common": "4.12.1" 182 | } 183 | }, 184 | "node_modules/@babel/helper-validator-identifier": { 185 | "version": "7.16.7", 186 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 187 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", 188 | "dev": true, 189 | "engines": { 190 | "node": ">=6.9.0" 191 | } 192 | }, 193 | "node_modules/@babel/parser": { 194 | "version": "7.17.0", 195 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", 196 | "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", 197 | "dev": true, 198 | "bin": { 199 | "parser": "bin/babel-parser.js" 200 | }, 201 | "engines": { 202 | "node": ">=6.0.0" 203 | } 204 | }, 205 | "node_modules/@babel/types": { 206 | "version": "7.17.0", 207 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", 208 | "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", 209 | "dev": true, 210 | "dependencies": { 211 | "@babel/helper-validator-identifier": "^7.16.7", 212 | "to-fast-properties": "^2.0.0" 213 | }, 214 | "engines": { 215 | "node": ">=6.9.0" 216 | } 217 | }, 218 | "node_modules/@docsearch/css": { 219 | "version": "3.0.0-alpha.50", 220 | "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.50.tgz", 221 | "integrity": "sha512-QeWFCQOtS9D+Fi20liKsPXF2j/xWKh52e+P2Z1UATIdPMqmH6zoB2lcUz+cgv6PPVgWUtECeR6VSSUm71LT94w==", 222 | "dev": true 223 | }, 224 | "node_modules/@docsearch/js": { 225 | "version": "3.0.0-alpha.50", 226 | "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.50.tgz", 227 | "integrity": "sha512-1ap9Wz5oR/Z8yybaCZhsptXU43es3H52eEQUZtmzb8dUWyCW+3iXaKVB/qeMJOQWtggZ/WvZV3YknVIbCMR2dQ==", 228 | "dev": true, 229 | "dependencies": { 230 | "@docsearch/react": "3.0.0-alpha.50", 231 | "preact": "^10.0.0" 232 | } 233 | }, 234 | "node_modules/@docsearch/react": { 235 | "version": "3.0.0-alpha.50", 236 | "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.50.tgz", 237 | "integrity": "sha512-oDGV1zZCRYv7MWsh6CyQVthYTRc3b4q+6kKwNYb1/g/Wf/4nJHutpxolFLHdEUDhrJ4Xi8wxwQG+lEwAVBTHPg==", 238 | "dev": true, 239 | "dependencies": { 240 | "@algolia/autocomplete-core": "1.5.2", 241 | "@algolia/autocomplete-preset-algolia": "1.5.2", 242 | "@docsearch/css": "3.0.0-alpha.50", 243 | "algoliasearch": "^4.0.0" 244 | }, 245 | "peerDependencies": { 246 | "@types/react": ">= 16.8.0 < 18.0.0", 247 | "react": ">= 16.8.0 < 18.0.0", 248 | "react-dom": ">= 16.8.0 < 18.0.0" 249 | } 250 | }, 251 | "node_modules/@emmetio/abbreviation": { 252 | "version": "2.2.2", 253 | "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.2.tgz", 254 | "integrity": "sha512-TtE/dBnkTCct8+LntkqVrwqQao6EnPAs1YN3cUgxOxTaBlesBCY37ROUAVZrRlG64GNnVShdl/b70RfAI3w5lw==", 255 | "dev": true, 256 | "dependencies": { 257 | "@emmetio/scanner": "^1.0.0" 258 | } 259 | }, 260 | "node_modules/@emmetio/css-abbreviation": { 261 | "version": "2.1.4", 262 | "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz", 263 | "integrity": "sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==", 264 | "dev": true, 265 | "dependencies": { 266 | "@emmetio/scanner": "^1.0.0" 267 | } 268 | }, 269 | "node_modules/@emmetio/scanner": { 270 | "version": "1.0.0", 271 | "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.0.tgz", 272 | "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==", 273 | "dev": true 274 | }, 275 | "node_modules/@types/node": { 276 | "version": "17.0.14", 277 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", 278 | "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==", 279 | "dev": true 280 | }, 281 | "node_modules/@types/prop-types": { 282 | "version": "15.7.5", 283 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 284 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 285 | "dev": true, 286 | "peer": true 287 | }, 288 | "node_modules/@types/react": { 289 | "version": "17.0.47", 290 | "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz", 291 | "integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==", 292 | "dev": true, 293 | "peer": true, 294 | "dependencies": { 295 | "@types/prop-types": "*", 296 | "@types/scheduler": "*", 297 | "csstype": "^3.0.2" 298 | } 299 | }, 300 | "node_modules/@types/react/node_modules/csstype": { 301 | "version": "3.1.0", 302 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", 303 | "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", 304 | "dev": true, 305 | "peer": true 306 | }, 307 | "node_modules/@types/scheduler": { 308 | "version": "0.16.2", 309 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", 310 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", 311 | "dev": true, 312 | "peer": true 313 | }, 314 | "node_modules/@vitejs/plugin-vue": { 315 | "version": "2.1.0", 316 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.1.0.tgz", 317 | "integrity": "sha512-AZ78WxvFMYd8JmM/GBV6a6SGGTU0GgN/0/4T+FnMMsLzFEzTeAUwuraapy50ifHZsC+G5SvWs86bvaCPTneFlA==", 318 | "dev": true, 319 | "engines": { 320 | "node": ">=12.0.0" 321 | }, 322 | "peerDependencies": { 323 | "vite": "^2.5.10", 324 | "vue": "^3.2.25" 325 | } 326 | }, 327 | "node_modules/@volar/code-gen": { 328 | "version": "0.29.8", 329 | "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.29.8.tgz", 330 | "integrity": "sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==", 331 | "dev": true, 332 | "dependencies": { 333 | "@volar/shared": "0.29.8", 334 | "@volar/source-map": "0.29.8" 335 | } 336 | }, 337 | "node_modules/@volar/html2pug": { 338 | "version": "0.29.8", 339 | "resolved": "https://registry.npmjs.org/@volar/html2pug/-/html2pug-0.29.8.tgz", 340 | "integrity": "sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==", 341 | "dev": true, 342 | "dependencies": { 343 | "domelementtype": "^2.2.0", 344 | "domhandler": "^4.2.2", 345 | "htmlparser2": "^7.1.2", 346 | "pug": "^3.0.2" 347 | } 348 | }, 349 | "node_modules/@volar/shared": { 350 | "version": "0.29.8", 351 | "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.29.8.tgz", 352 | "integrity": "sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==", 353 | "dev": true, 354 | "dependencies": { 355 | "upath": "^2.0.1", 356 | "vscode-jsonrpc": "^8.0.0-next.2", 357 | "vscode-uri": "^3.0.2" 358 | } 359 | }, 360 | "node_modules/@volar/source-map": { 361 | "version": "0.29.8", 362 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.29.8.tgz", 363 | "integrity": "sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==", 364 | "dev": true, 365 | "dependencies": { 366 | "@volar/shared": "0.29.8" 367 | } 368 | }, 369 | "node_modules/@volar/transforms": { 370 | "version": "0.29.8", 371 | "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.29.8.tgz", 372 | "integrity": "sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==", 373 | "dev": true, 374 | "dependencies": { 375 | "@volar/shared": "0.29.8", 376 | "vscode-languageserver": "^8.0.0-next.2" 377 | } 378 | }, 379 | "node_modules/@volar/vue-code-gen": { 380 | "version": "0.29.8", 381 | "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.29.8.tgz", 382 | "integrity": "sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==", 383 | "dev": true, 384 | "dependencies": { 385 | "@volar/code-gen": "0.29.8", 386 | "@volar/shared": "0.29.8", 387 | "@volar/source-map": "0.29.8", 388 | "@vue/compiler-core": "^3.2.21", 389 | "@vue/compiler-dom": "^3.2.21", 390 | "@vue/shared": "^3.2.21", 391 | "upath": "^2.0.1" 392 | } 393 | }, 394 | "node_modules/@vscode/emmet-helper": { 395 | "version": "2.8.3", 396 | "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.3.tgz", 397 | "integrity": "sha512-dkTSL+BaBBS8gFgPm/GMOU+XfxaMyI+Fl1IUYxEi8Iv24RfHf9/q2eCpV2hs7sncLcoKWEbMYe5gv4Ppmp2Oxw==", 398 | "dev": true, 399 | "dependencies": { 400 | "emmet": "^2.3.0", 401 | "jsonc-parser": "^2.3.0", 402 | "vscode-languageserver-textdocument": "^1.0.1", 403 | "vscode-languageserver-types": "^3.15.1", 404 | "vscode-nls": "^5.0.0", 405 | "vscode-uri": "^2.1.2" 406 | } 407 | }, 408 | "node_modules/@vscode/emmet-helper/node_modules/vscode-languageserver-types": { 409 | "version": "3.16.0", 410 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 411 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 412 | "dev": true 413 | }, 414 | "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { 415 | "version": "2.1.2", 416 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", 417 | "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", 418 | "dev": true 419 | }, 420 | "node_modules/@vue/compiler-core": { 421 | "version": "3.2.29", 422 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.29.tgz", 423 | "integrity": "sha512-RePZ/J4Ub3sb7atQw6V6Rez+/5LCRHGFlSetT3N4VMrejqJnNPXKUt5AVm/9F5MJriy2w/VudEIvgscCfCWqxw==", 424 | "dev": true, 425 | "dependencies": { 426 | "@babel/parser": "^7.16.4", 427 | "@vue/shared": "3.2.29", 428 | "estree-walker": "^2.0.2", 429 | "source-map": "^0.6.1" 430 | } 431 | }, 432 | "node_modules/@vue/compiler-dom": { 433 | "version": "3.2.29", 434 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.29.tgz", 435 | "integrity": "sha512-y26vK5khdNS9L3ckvkqJk/78qXwWb75Ci8iYLb67AkJuIgyKhIOcR1E8RIt4mswlVCIeI9gQ+fmtdhaiTAtrBQ==", 436 | "dev": true, 437 | "dependencies": { 438 | "@vue/compiler-core": "3.2.29", 439 | "@vue/shared": "3.2.29" 440 | } 441 | }, 442 | "node_modules/@vue/compiler-sfc": { 443 | "version": "3.2.29", 444 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.29.tgz", 445 | "integrity": "sha512-X9+0dwsag2u6hSOP/XsMYqFti/edvYvxamgBgCcbSYuXx1xLZN+dS/GvQKM4AgGS4djqo0jQvWfIXdfZ2ET68g==", 446 | "dev": true, 447 | "dependencies": { 448 | "@babel/parser": "^7.16.4", 449 | "@vue/compiler-core": "3.2.29", 450 | "@vue/compiler-dom": "3.2.29", 451 | "@vue/compiler-ssr": "3.2.29", 452 | "@vue/reactivity-transform": "3.2.29", 453 | "@vue/shared": "3.2.29", 454 | "estree-walker": "^2.0.2", 455 | "magic-string": "^0.25.7", 456 | "postcss": "^8.1.10", 457 | "source-map": "^0.6.1" 458 | } 459 | }, 460 | "node_modules/@vue/compiler-ssr": { 461 | "version": "3.2.29", 462 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.29.tgz", 463 | "integrity": "sha512-LrvQwXlx66uWsB9/VydaaqEpae9xtmlUkeSKF6aPDbzx8M1h7ukxaPjNCAXuFd3fUHblcri8k42lfimHfzMICA==", 464 | "dev": true, 465 | "dependencies": { 466 | "@vue/compiler-dom": "3.2.29", 467 | "@vue/shared": "3.2.29" 468 | } 469 | }, 470 | "node_modules/@vue/reactivity": { 471 | "version": "3.2.29", 472 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.29.tgz", 473 | "integrity": "sha512-Ryhb6Gy62YolKXH1gv42pEqwx7zs3n8gacRVZICSgjQz8Qr8QeCcFygBKYfJm3o1SccR7U+bVBQDWZGOyG1k4g==", 474 | "dev": true, 475 | "dependencies": { 476 | "@vue/shared": "3.2.29" 477 | } 478 | }, 479 | "node_modules/@vue/reactivity-transform": { 480 | "version": "3.2.29", 481 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.29.tgz", 482 | "integrity": "sha512-YF6HdOuhdOw6KyRm59+3rML8USb9o8mYM1q+SH0G41K3/q/G7uhPnHGKvspzceD7h9J3VR1waOQ93CUZj7J7OA==", 483 | "dev": true, 484 | "dependencies": { 485 | "@babel/parser": "^7.16.4", 486 | "@vue/compiler-core": "3.2.29", 487 | "@vue/shared": "3.2.29", 488 | "estree-walker": "^2.0.2", 489 | "magic-string": "^0.25.7" 490 | } 491 | }, 492 | "node_modules/@vue/runtime-core": { 493 | "version": "3.2.29", 494 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.29.tgz", 495 | "integrity": "sha512-VMvQuLdzoTGmCwIKTKVwKmIL0qcODIqe74JtK1pVr5lnaE0l25hopodmPag3RcnIcIXe+Ye3B2olRCn7fTCgig==", 496 | "dev": true, 497 | "dependencies": { 498 | "@vue/reactivity": "3.2.29", 499 | "@vue/shared": "3.2.29" 500 | } 501 | }, 502 | "node_modules/@vue/runtime-dom": { 503 | "version": "3.2.29", 504 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.29.tgz", 505 | "integrity": "sha512-YJgLQLwr+SQyORzTsBQLL5TT/5UiV83tEotqjL7F9aFDIQdFBTCwpkCFvX9jqwHoyi9sJqM9XtTrMcc8z/OjPA==", 506 | "dev": true, 507 | "dependencies": { 508 | "@vue/runtime-core": "3.2.29", 509 | "@vue/shared": "3.2.29", 510 | "csstype": "^2.6.8" 511 | } 512 | }, 513 | "node_modules/@vue/server-renderer": { 514 | "version": "3.2.29", 515 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.29.tgz", 516 | "integrity": "sha512-lpiYx7ciV7rWfJ0tPkoSOlLmwqBZ9FTmQm33S+T4g0j1fO/LmhJ9b9Ctl1o5xvIFVDk9QkSUWANZn7H2pXuxVw==", 517 | "dev": true, 518 | "dependencies": { 519 | "@vue/compiler-ssr": "3.2.29", 520 | "@vue/shared": "3.2.29" 521 | }, 522 | "peerDependencies": { 523 | "vue": "3.2.29" 524 | } 525 | }, 526 | "node_modules/@vue/shared": { 527 | "version": "3.2.29", 528 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.29.tgz", 529 | "integrity": "sha512-BjNpU8OK6Z0LVzGUppEk0CMYm/hKDnZfYdjSmPOs0N+TR1cLKJAkDwW8ASZUvaaSLEi6d3hVM7jnWnX+6yWnHw==", 530 | "dev": true 531 | }, 532 | "node_modules/acorn": { 533 | "version": "7.4.1", 534 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 535 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 536 | "dev": true, 537 | "bin": { 538 | "acorn": "bin/acorn" 539 | }, 540 | "engines": { 541 | "node": ">=0.4.0" 542 | } 543 | }, 544 | "node_modules/algoliasearch": { 545 | "version": "4.12.1", 546 | "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.1.tgz", 547 | "integrity": "sha512-c0dM1g3zZBJrkzE5GA/Nu1y3fFxx3LCzxKzcmp2dgGS8P4CjszB/l3lsSh2MSrrK1Hn/KV4BlbBMXtYgG1Bfrw==", 548 | "dev": true, 549 | "dependencies": { 550 | "@algolia/cache-browser-local-storage": "4.12.1", 551 | "@algolia/cache-common": "4.12.1", 552 | "@algolia/cache-in-memory": "4.12.1", 553 | "@algolia/client-account": "4.12.1", 554 | "@algolia/client-analytics": "4.12.1", 555 | "@algolia/client-common": "4.12.1", 556 | "@algolia/client-personalization": "4.12.1", 557 | "@algolia/client-search": "4.12.1", 558 | "@algolia/logger-common": "4.12.1", 559 | "@algolia/logger-console": "4.12.1", 560 | "@algolia/requester-browser-xhr": "4.12.1", 561 | "@algolia/requester-common": "4.12.1", 562 | "@algolia/requester-node-http": "4.12.1", 563 | "@algolia/transporter": "4.12.1" 564 | } 565 | }, 566 | "node_modules/anymatch": { 567 | "version": "3.1.2", 568 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 569 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 570 | "dev": true, 571 | "dependencies": { 572 | "normalize-path": "^3.0.0", 573 | "picomatch": "^2.0.4" 574 | }, 575 | "engines": { 576 | "node": ">= 8" 577 | } 578 | }, 579 | "node_modules/asap": { 580 | "version": "2.0.6", 581 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 582 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", 583 | "dev": true 584 | }, 585 | "node_modules/assert-never": { 586 | "version": "1.2.1", 587 | "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", 588 | "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", 589 | "dev": true 590 | }, 591 | "node_modules/babel-walk": { 592 | "version": "3.0.0-canary-5", 593 | "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", 594 | "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", 595 | "dev": true, 596 | "dependencies": { 597 | "@babel/types": "^7.9.6" 598 | }, 599 | "engines": { 600 | "node": ">= 10.0.0" 601 | } 602 | }, 603 | "node_modules/balanced-match": { 604 | "version": "1.0.2", 605 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 606 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 607 | "dev": true 608 | }, 609 | "node_modules/binary-extensions": { 610 | "version": "2.2.0", 611 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 612 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 613 | "dev": true, 614 | "engines": { 615 | "node": ">=8" 616 | } 617 | }, 618 | "node_modules/brace-expansion": { 619 | "version": "1.1.11", 620 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 621 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 622 | "dev": true, 623 | "dependencies": { 624 | "balanced-match": "^1.0.0", 625 | "concat-map": "0.0.1" 626 | } 627 | }, 628 | "node_modules/braces": { 629 | "version": "3.0.2", 630 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 631 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 632 | "dev": true, 633 | "dependencies": { 634 | "fill-range": "^7.0.1" 635 | }, 636 | "engines": { 637 | "node": ">=8" 638 | } 639 | }, 640 | "node_modules/call-bind": { 641 | "version": "1.0.2", 642 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 643 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 644 | "dev": true, 645 | "dependencies": { 646 | "function-bind": "^1.1.1", 647 | "get-intrinsic": "^1.0.2" 648 | }, 649 | "funding": { 650 | "url": "https://github.com/sponsors/ljharb" 651 | } 652 | }, 653 | "node_modules/character-parser": { 654 | "version": "2.2.0", 655 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 656 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", 657 | "dev": true, 658 | "dependencies": { 659 | "is-regex": "^1.0.3" 660 | } 661 | }, 662 | "node_modules/chokidar": { 663 | "version": "3.5.3", 664 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 665 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 666 | "dev": true, 667 | "funding": [ 668 | { 669 | "type": "individual", 670 | "url": "https://paulmillr.com/funding/" 671 | } 672 | ], 673 | "dependencies": { 674 | "anymatch": "~3.1.2", 675 | "braces": "~3.0.2", 676 | "glob-parent": "~5.1.2", 677 | "is-binary-path": "~2.1.0", 678 | "is-glob": "~4.0.1", 679 | "normalize-path": "~3.0.0", 680 | "readdirp": "~3.6.0" 681 | }, 682 | "engines": { 683 | "node": ">= 8.10.0" 684 | }, 685 | "optionalDependencies": { 686 | "fsevents": "~2.3.2" 687 | } 688 | }, 689 | "node_modules/concat-map": { 690 | "version": "0.0.1", 691 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 692 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 693 | "dev": true 694 | }, 695 | "node_modules/constantinople": { 696 | "version": "4.0.1", 697 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", 698 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", 699 | "dev": true, 700 | "dependencies": { 701 | "@babel/parser": "^7.6.0", 702 | "@babel/types": "^7.6.1" 703 | } 704 | }, 705 | "node_modules/csstype": { 706 | "version": "2.6.19", 707 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", 708 | "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", 709 | "dev": true 710 | }, 711 | "node_modules/doctypes": { 712 | "version": "1.1.0", 713 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 714 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", 715 | "dev": true 716 | }, 717 | "node_modules/dom-serializer": { 718 | "version": "1.3.2", 719 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 720 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", 721 | "dev": true, 722 | "dependencies": { 723 | "domelementtype": "^2.0.1", 724 | "domhandler": "^4.2.0", 725 | "entities": "^2.0.0" 726 | }, 727 | "funding": { 728 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 729 | } 730 | }, 731 | "node_modules/dom-serializer/node_modules/entities": { 732 | "version": "2.2.0", 733 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 734 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 735 | "dev": true, 736 | "funding": { 737 | "url": "https://github.com/fb55/entities?sponsor=1" 738 | } 739 | }, 740 | "node_modules/domelementtype": { 741 | "version": "2.2.0", 742 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 743 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 744 | "dev": true, 745 | "funding": [ 746 | { 747 | "type": "github", 748 | "url": "https://github.com/sponsors/fb55" 749 | } 750 | ] 751 | }, 752 | "node_modules/domhandler": { 753 | "version": "4.3.0", 754 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", 755 | "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", 756 | "dev": true, 757 | "dependencies": { 758 | "domelementtype": "^2.2.0" 759 | }, 760 | "engines": { 761 | "node": ">= 4" 762 | }, 763 | "funding": { 764 | "url": "https://github.com/fb55/domhandler?sponsor=1" 765 | } 766 | }, 767 | "node_modules/domutils": { 768 | "version": "2.8.0", 769 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 770 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 771 | "dev": true, 772 | "dependencies": { 773 | "dom-serializer": "^1.0.1", 774 | "domelementtype": "^2.2.0", 775 | "domhandler": "^4.2.0" 776 | }, 777 | "funding": { 778 | "url": "https://github.com/fb55/domutils?sponsor=1" 779 | } 780 | }, 781 | "node_modules/emmet": { 782 | "version": "2.3.5", 783 | "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.3.5.tgz", 784 | "integrity": "sha512-LcWfTamJnXIdMfLvJEC5Ld3hY5/KHXgv1L1bp6I7eEvB0ZhacHZ1kX0BYovJ8FroEsreLcq7n7kZhRMsf6jkXQ==", 785 | "dev": true, 786 | "dependencies": { 787 | "@emmetio/abbreviation": "^2.2.2", 788 | "@emmetio/css-abbreviation": "^2.1.4" 789 | } 790 | }, 791 | "node_modules/entities": { 792 | "version": "3.0.1", 793 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", 794 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", 795 | "dev": true, 796 | "engines": { 797 | "node": ">=0.12" 798 | }, 799 | "funding": { 800 | "url": "https://github.com/fb55/entities?sponsor=1" 801 | } 802 | }, 803 | "node_modules/esbuild": { 804 | "version": "0.13.15", 805 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", 806 | "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", 807 | "dev": true, 808 | "hasInstallScript": true, 809 | "bin": { 810 | "esbuild": "bin/esbuild" 811 | }, 812 | "optionalDependencies": { 813 | "esbuild-android-arm64": "0.13.15", 814 | "esbuild-darwin-64": "0.13.15", 815 | "esbuild-darwin-arm64": "0.13.15", 816 | "esbuild-freebsd-64": "0.13.15", 817 | "esbuild-freebsd-arm64": "0.13.15", 818 | "esbuild-linux-32": "0.13.15", 819 | "esbuild-linux-64": "0.13.15", 820 | "esbuild-linux-arm": "0.13.15", 821 | "esbuild-linux-arm64": "0.13.15", 822 | "esbuild-linux-mips64le": "0.13.15", 823 | "esbuild-linux-ppc64le": "0.13.15", 824 | "esbuild-netbsd-64": "0.13.15", 825 | "esbuild-openbsd-64": "0.13.15", 826 | "esbuild-sunos-64": "0.13.15", 827 | "esbuild-windows-32": "0.13.15", 828 | "esbuild-windows-64": "0.13.15", 829 | "esbuild-windows-arm64": "0.13.15" 830 | } 831 | }, 832 | "node_modules/esbuild-android-arm64": { 833 | "version": "0.13.15", 834 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz", 835 | "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==", 836 | "cpu": [ 837 | "arm64" 838 | ], 839 | "dev": true, 840 | "optional": true, 841 | "os": [ 842 | "android" 843 | ] 844 | }, 845 | "node_modules/esbuild-darwin-64": { 846 | "version": "0.13.15", 847 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz", 848 | "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==", 849 | "cpu": [ 850 | "x64" 851 | ], 852 | "dev": true, 853 | "optional": true, 854 | "os": [ 855 | "darwin" 856 | ] 857 | }, 858 | "node_modules/esbuild-darwin-arm64": { 859 | "version": "0.13.15", 860 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz", 861 | "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==", 862 | "cpu": [ 863 | "arm64" 864 | ], 865 | "dev": true, 866 | "optional": true, 867 | "os": [ 868 | "darwin" 869 | ] 870 | }, 871 | "node_modules/esbuild-freebsd-64": { 872 | "version": "0.13.15", 873 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz", 874 | "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==", 875 | "cpu": [ 876 | "x64" 877 | ], 878 | "dev": true, 879 | "optional": true, 880 | "os": [ 881 | "freebsd" 882 | ] 883 | }, 884 | "node_modules/esbuild-freebsd-arm64": { 885 | "version": "0.13.15", 886 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz", 887 | "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==", 888 | "cpu": [ 889 | "arm64" 890 | ], 891 | "dev": true, 892 | "optional": true, 893 | "os": [ 894 | "freebsd" 895 | ] 896 | }, 897 | "node_modules/esbuild-linux-32": { 898 | "version": "0.13.15", 899 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz", 900 | "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==", 901 | "cpu": [ 902 | "ia32" 903 | ], 904 | "dev": true, 905 | "optional": true, 906 | "os": [ 907 | "linux" 908 | ] 909 | }, 910 | "node_modules/esbuild-linux-64": { 911 | "version": "0.13.15", 912 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz", 913 | "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", 914 | "cpu": [ 915 | "x64" 916 | ], 917 | "dev": true, 918 | "optional": true, 919 | "os": [ 920 | "linux" 921 | ] 922 | }, 923 | "node_modules/esbuild-linux-arm": { 924 | "version": "0.13.15", 925 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz", 926 | "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==", 927 | "cpu": [ 928 | "arm" 929 | ], 930 | "dev": true, 931 | "optional": true, 932 | "os": [ 933 | "linux" 934 | ] 935 | }, 936 | "node_modules/esbuild-linux-arm64": { 937 | "version": "0.13.15", 938 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz", 939 | "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==", 940 | "cpu": [ 941 | "arm64" 942 | ], 943 | "dev": true, 944 | "optional": true, 945 | "os": [ 946 | "linux" 947 | ] 948 | }, 949 | "node_modules/esbuild-linux-mips64le": { 950 | "version": "0.13.15", 951 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz", 952 | "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==", 953 | "cpu": [ 954 | "mips64el" 955 | ], 956 | "dev": true, 957 | "optional": true, 958 | "os": [ 959 | "linux" 960 | ] 961 | }, 962 | "node_modules/esbuild-linux-ppc64le": { 963 | "version": "0.13.15", 964 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz", 965 | "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==", 966 | "cpu": [ 967 | "ppc64" 968 | ], 969 | "dev": true, 970 | "optional": true, 971 | "os": [ 972 | "linux" 973 | ] 974 | }, 975 | "node_modules/esbuild-netbsd-64": { 976 | "version": "0.13.15", 977 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz", 978 | "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==", 979 | "cpu": [ 980 | "x64" 981 | ], 982 | "dev": true, 983 | "optional": true, 984 | "os": [ 985 | "netbsd" 986 | ] 987 | }, 988 | "node_modules/esbuild-openbsd-64": { 989 | "version": "0.13.15", 990 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz", 991 | "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==", 992 | "cpu": [ 993 | "x64" 994 | ], 995 | "dev": true, 996 | "optional": true, 997 | "os": [ 998 | "openbsd" 999 | ] 1000 | }, 1001 | "node_modules/esbuild-sunos-64": { 1002 | "version": "0.13.15", 1003 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz", 1004 | "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==", 1005 | "cpu": [ 1006 | "x64" 1007 | ], 1008 | "dev": true, 1009 | "optional": true, 1010 | "os": [ 1011 | "sunos" 1012 | ] 1013 | }, 1014 | "node_modules/esbuild-windows-32": { 1015 | "version": "0.13.15", 1016 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz", 1017 | "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==", 1018 | "cpu": [ 1019 | "ia32" 1020 | ], 1021 | "dev": true, 1022 | "optional": true, 1023 | "os": [ 1024 | "win32" 1025 | ] 1026 | }, 1027 | "node_modules/esbuild-windows-64": { 1028 | "version": "0.13.15", 1029 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz", 1030 | "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==", 1031 | "cpu": [ 1032 | "x64" 1033 | ], 1034 | "dev": true, 1035 | "optional": true, 1036 | "os": [ 1037 | "win32" 1038 | ] 1039 | }, 1040 | "node_modules/esbuild-windows-arm64": { 1041 | "version": "0.13.15", 1042 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz", 1043 | "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==", 1044 | "cpu": [ 1045 | "arm64" 1046 | ], 1047 | "dev": true, 1048 | "optional": true, 1049 | "os": [ 1050 | "win32" 1051 | ] 1052 | }, 1053 | "node_modules/estree-walker": { 1054 | "version": "2.0.2", 1055 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1056 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1057 | "dev": true 1058 | }, 1059 | "node_modules/fill-range": { 1060 | "version": "7.0.1", 1061 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1062 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1063 | "dev": true, 1064 | "dependencies": { 1065 | "to-regex-range": "^5.0.1" 1066 | }, 1067 | "engines": { 1068 | "node": ">=8" 1069 | } 1070 | }, 1071 | "node_modules/fs.realpath": { 1072 | "version": "1.0.0", 1073 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1074 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1075 | "dev": true 1076 | }, 1077 | "node_modules/fsevents": { 1078 | "version": "2.3.2", 1079 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1080 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1081 | "dev": true, 1082 | "hasInstallScript": true, 1083 | "optional": true, 1084 | "os": [ 1085 | "darwin" 1086 | ], 1087 | "engines": { 1088 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1089 | } 1090 | }, 1091 | "node_modules/function-bind": { 1092 | "version": "1.1.1", 1093 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1094 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1095 | "dev": true 1096 | }, 1097 | "node_modules/get-intrinsic": { 1098 | "version": "1.1.1", 1099 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1100 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1101 | "dev": true, 1102 | "dependencies": { 1103 | "function-bind": "^1.1.1", 1104 | "has": "^1.0.3", 1105 | "has-symbols": "^1.0.1" 1106 | }, 1107 | "funding": { 1108 | "url": "https://github.com/sponsors/ljharb" 1109 | } 1110 | }, 1111 | "node_modules/glob": { 1112 | "version": "7.2.0", 1113 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1114 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1115 | "dev": true, 1116 | "dependencies": { 1117 | "fs.realpath": "^1.0.0", 1118 | "inflight": "^1.0.4", 1119 | "inherits": "2", 1120 | "minimatch": "^3.0.4", 1121 | "once": "^1.3.0", 1122 | "path-is-absolute": "^1.0.0" 1123 | }, 1124 | "engines": { 1125 | "node": "*" 1126 | }, 1127 | "funding": { 1128 | "url": "https://github.com/sponsors/isaacs" 1129 | } 1130 | }, 1131 | "node_modules/glob-parent": { 1132 | "version": "5.1.2", 1133 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1134 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1135 | "dev": true, 1136 | "dependencies": { 1137 | "is-glob": "^4.0.1" 1138 | }, 1139 | "engines": { 1140 | "node": ">= 6" 1141 | } 1142 | }, 1143 | "node_modules/has": { 1144 | "version": "1.0.3", 1145 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1146 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1147 | "dev": true, 1148 | "dependencies": { 1149 | "function-bind": "^1.1.1" 1150 | }, 1151 | "engines": { 1152 | "node": ">= 0.4.0" 1153 | } 1154 | }, 1155 | "node_modules/has-symbols": { 1156 | "version": "1.0.2", 1157 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 1158 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 1159 | "dev": true, 1160 | "engines": { 1161 | "node": ">= 0.4" 1162 | }, 1163 | "funding": { 1164 | "url": "https://github.com/sponsors/ljharb" 1165 | } 1166 | }, 1167 | "node_modules/has-tostringtag": { 1168 | "version": "1.0.0", 1169 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1170 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1171 | "dev": true, 1172 | "dependencies": { 1173 | "has-symbols": "^1.0.2" 1174 | }, 1175 | "engines": { 1176 | "node": ">= 0.4" 1177 | }, 1178 | "funding": { 1179 | "url": "https://github.com/sponsors/ljharb" 1180 | } 1181 | }, 1182 | "node_modules/htmlparser2": { 1183 | "version": "7.2.0", 1184 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", 1185 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", 1186 | "dev": true, 1187 | "funding": [ 1188 | "https://github.com/fb55/htmlparser2?sponsor=1", 1189 | { 1190 | "type": "github", 1191 | "url": "https://github.com/sponsors/fb55" 1192 | } 1193 | ], 1194 | "dependencies": { 1195 | "domelementtype": "^2.0.1", 1196 | "domhandler": "^4.2.2", 1197 | "domutils": "^2.8.0", 1198 | "entities": "^3.0.1" 1199 | } 1200 | }, 1201 | "node_modules/immutable": { 1202 | "version": "4.0.0", 1203 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", 1204 | "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", 1205 | "dev": true 1206 | }, 1207 | "node_modules/inflight": { 1208 | "version": "1.0.6", 1209 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1210 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1211 | "dev": true, 1212 | "dependencies": { 1213 | "once": "^1.3.0", 1214 | "wrappy": "1" 1215 | } 1216 | }, 1217 | "node_modules/inherits": { 1218 | "version": "2.0.4", 1219 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1220 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1221 | "dev": true 1222 | }, 1223 | "node_modules/is-binary-path": { 1224 | "version": "2.1.0", 1225 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1226 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1227 | "dev": true, 1228 | "dependencies": { 1229 | "binary-extensions": "^2.0.0" 1230 | }, 1231 | "engines": { 1232 | "node": ">=8" 1233 | } 1234 | }, 1235 | "node_modules/is-core-module": { 1236 | "version": "2.8.1", 1237 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1238 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1239 | "dev": true, 1240 | "dependencies": { 1241 | "has": "^1.0.3" 1242 | }, 1243 | "funding": { 1244 | "url": "https://github.com/sponsors/ljharb" 1245 | } 1246 | }, 1247 | "node_modules/is-expression": { 1248 | "version": "4.0.0", 1249 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", 1250 | "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", 1251 | "dev": true, 1252 | "dependencies": { 1253 | "acorn": "^7.1.1", 1254 | "object-assign": "^4.1.1" 1255 | } 1256 | }, 1257 | "node_modules/is-extglob": { 1258 | "version": "2.1.1", 1259 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1260 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1261 | "dev": true, 1262 | "engines": { 1263 | "node": ">=0.10.0" 1264 | } 1265 | }, 1266 | "node_modules/is-glob": { 1267 | "version": "4.0.3", 1268 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1269 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1270 | "dev": true, 1271 | "dependencies": { 1272 | "is-extglob": "^2.1.1" 1273 | }, 1274 | "engines": { 1275 | "node": ">=0.10.0" 1276 | } 1277 | }, 1278 | "node_modules/is-number": { 1279 | "version": "7.0.0", 1280 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1281 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1282 | "dev": true, 1283 | "engines": { 1284 | "node": ">=0.12.0" 1285 | } 1286 | }, 1287 | "node_modules/is-promise": { 1288 | "version": "2.2.2", 1289 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", 1290 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", 1291 | "dev": true 1292 | }, 1293 | "node_modules/is-regex": { 1294 | "version": "1.1.4", 1295 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1296 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1297 | "dev": true, 1298 | "dependencies": { 1299 | "call-bind": "^1.0.2", 1300 | "has-tostringtag": "^1.0.0" 1301 | }, 1302 | "engines": { 1303 | "node": ">= 0.4" 1304 | }, 1305 | "funding": { 1306 | "url": "https://github.com/sponsors/ljharb" 1307 | } 1308 | }, 1309 | "node_modules/js-stringify": { 1310 | "version": "1.0.2", 1311 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 1312 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", 1313 | "dev": true 1314 | }, 1315 | "node_modules/js-tokens": { 1316 | "version": "4.0.0", 1317 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1318 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1319 | "dev": true, 1320 | "peer": true 1321 | }, 1322 | "node_modules/jsonc-parser": { 1323 | "version": "2.3.1", 1324 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", 1325 | "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", 1326 | "dev": true 1327 | }, 1328 | "node_modules/jstransformer": { 1329 | "version": "1.0.0", 1330 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 1331 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", 1332 | "dev": true, 1333 | "dependencies": { 1334 | "is-promise": "^2.0.0", 1335 | "promise": "^7.0.1" 1336 | } 1337 | }, 1338 | "node_modules/lamejstmp": { 1339 | "version": "1.0.1", 1340 | "resolved": "https://registry.npmjs.org/lamejstmp/-/lamejstmp-1.0.1.tgz", 1341 | "integrity": "sha512-eEENqMTpiDNTaeOWWbv58KVT4uh9tP7XqpG+aODm9U2eRHwH8Hsx3OnNKxd3noVN6cHmQomv5HQ9N7tzTSVxNQ==", 1342 | "dev": true, 1343 | "dependencies": { 1344 | "use-strict": "1.0.1" 1345 | } 1346 | }, 1347 | "node_modules/loose-envify": { 1348 | "version": "1.4.0", 1349 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1350 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1351 | "dev": true, 1352 | "peer": true, 1353 | "dependencies": { 1354 | "js-tokens": "^3.0.0 || ^4.0.0" 1355 | }, 1356 | "bin": { 1357 | "loose-envify": "cli.js" 1358 | } 1359 | }, 1360 | "node_modules/lru-cache": { 1361 | "version": "6.0.0", 1362 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1363 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1364 | "dev": true, 1365 | "dependencies": { 1366 | "yallist": "^4.0.0" 1367 | }, 1368 | "engines": { 1369 | "node": ">=10" 1370 | } 1371 | }, 1372 | "node_modules/magic-string": { 1373 | "version": "0.25.7", 1374 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1375 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1376 | "dev": true, 1377 | "dependencies": { 1378 | "sourcemap-codec": "^1.4.4" 1379 | } 1380 | }, 1381 | "node_modules/minimatch": { 1382 | "version": "3.1.1", 1383 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz", 1384 | "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==", 1385 | "dev": true, 1386 | "dependencies": { 1387 | "brace-expansion": "^1.1.7" 1388 | }, 1389 | "engines": { 1390 | "node": "*" 1391 | } 1392 | }, 1393 | "node_modules/nanoid": { 1394 | "version": "3.2.0", 1395 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", 1396 | "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", 1397 | "dev": true, 1398 | "bin": { 1399 | "nanoid": "bin/nanoid.cjs" 1400 | }, 1401 | "engines": { 1402 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1403 | } 1404 | }, 1405 | "node_modules/normalize-path": { 1406 | "version": "3.0.0", 1407 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1408 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1409 | "dev": true, 1410 | "engines": { 1411 | "node": ">=0.10.0" 1412 | } 1413 | }, 1414 | "node_modules/object-assign": { 1415 | "version": "4.1.1", 1416 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1417 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1418 | "dev": true, 1419 | "engines": { 1420 | "node": ">=0.10.0" 1421 | } 1422 | }, 1423 | "node_modules/once": { 1424 | "version": "1.4.0", 1425 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1426 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1427 | "dev": true, 1428 | "dependencies": { 1429 | "wrappy": "1" 1430 | } 1431 | }, 1432 | "node_modules/path-is-absolute": { 1433 | "version": "1.0.1", 1434 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1435 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1436 | "dev": true, 1437 | "engines": { 1438 | "node": ">=0.10.0" 1439 | } 1440 | }, 1441 | "node_modules/path-parse": { 1442 | "version": "1.0.7", 1443 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1444 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1445 | "dev": true 1446 | }, 1447 | "node_modules/picocolors": { 1448 | "version": "1.0.0", 1449 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1450 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1451 | "dev": true 1452 | }, 1453 | "node_modules/picomatch": { 1454 | "version": "2.3.1", 1455 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1456 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1457 | "dev": true, 1458 | "engines": { 1459 | "node": ">=8.6" 1460 | }, 1461 | "funding": { 1462 | "url": "https://github.com/sponsors/jonschlinkert" 1463 | } 1464 | }, 1465 | "node_modules/postcss": { 1466 | "version": "8.4.6", 1467 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", 1468 | "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", 1469 | "dev": true, 1470 | "dependencies": { 1471 | "nanoid": "^3.2.0", 1472 | "picocolors": "^1.0.0", 1473 | "source-map-js": "^1.0.2" 1474 | }, 1475 | "engines": { 1476 | "node": "^10 || ^12 || >=14" 1477 | }, 1478 | "funding": { 1479 | "type": "opencollective", 1480 | "url": "https://opencollective.com/postcss/" 1481 | } 1482 | }, 1483 | "node_modules/preact": { 1484 | "version": "10.6.5", 1485 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz", 1486 | "integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==", 1487 | "dev": true, 1488 | "funding": { 1489 | "type": "opencollective", 1490 | "url": "https://opencollective.com/preact" 1491 | } 1492 | }, 1493 | "node_modules/prismjs": { 1494 | "version": "1.27.0", 1495 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", 1496 | "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", 1497 | "dev": true, 1498 | "engines": { 1499 | "node": ">=6" 1500 | } 1501 | }, 1502 | "node_modules/promise": { 1503 | "version": "7.3.1", 1504 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 1505 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 1506 | "dev": true, 1507 | "dependencies": { 1508 | "asap": "~2.0.3" 1509 | } 1510 | }, 1511 | "node_modules/pug": { 1512 | "version": "3.0.2", 1513 | "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", 1514 | "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", 1515 | "dev": true, 1516 | "dependencies": { 1517 | "pug-code-gen": "^3.0.2", 1518 | "pug-filters": "^4.0.0", 1519 | "pug-lexer": "^5.0.1", 1520 | "pug-linker": "^4.0.0", 1521 | "pug-load": "^3.0.0", 1522 | "pug-parser": "^6.0.0", 1523 | "pug-runtime": "^3.0.1", 1524 | "pug-strip-comments": "^2.0.0" 1525 | } 1526 | }, 1527 | "node_modules/pug-attrs": { 1528 | "version": "3.0.0", 1529 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", 1530 | "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", 1531 | "dev": true, 1532 | "dependencies": { 1533 | "constantinople": "^4.0.1", 1534 | "js-stringify": "^1.0.2", 1535 | "pug-runtime": "^3.0.0" 1536 | } 1537 | }, 1538 | "node_modules/pug-code-gen": { 1539 | "version": "3.0.2", 1540 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", 1541 | "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", 1542 | "dev": true, 1543 | "dependencies": { 1544 | "constantinople": "^4.0.1", 1545 | "doctypes": "^1.1.0", 1546 | "js-stringify": "^1.0.2", 1547 | "pug-attrs": "^3.0.0", 1548 | "pug-error": "^2.0.0", 1549 | "pug-runtime": "^3.0.0", 1550 | "void-elements": "^3.1.0", 1551 | "with": "^7.0.0" 1552 | } 1553 | }, 1554 | "node_modules/pug-error": { 1555 | "version": "2.0.0", 1556 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", 1557 | "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", 1558 | "dev": true 1559 | }, 1560 | "node_modules/pug-filters": { 1561 | "version": "4.0.0", 1562 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", 1563 | "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", 1564 | "dev": true, 1565 | "dependencies": { 1566 | "constantinople": "^4.0.1", 1567 | "jstransformer": "1.0.0", 1568 | "pug-error": "^2.0.0", 1569 | "pug-walk": "^2.0.0", 1570 | "resolve": "^1.15.1" 1571 | } 1572 | }, 1573 | "node_modules/pug-lexer": { 1574 | "version": "5.0.1", 1575 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", 1576 | "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", 1577 | "dev": true, 1578 | "dependencies": { 1579 | "character-parser": "^2.2.0", 1580 | "is-expression": "^4.0.0", 1581 | "pug-error": "^2.0.0" 1582 | } 1583 | }, 1584 | "node_modules/pug-linker": { 1585 | "version": "4.0.0", 1586 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", 1587 | "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", 1588 | "dev": true, 1589 | "dependencies": { 1590 | "pug-error": "^2.0.0", 1591 | "pug-walk": "^2.0.0" 1592 | } 1593 | }, 1594 | "node_modules/pug-load": { 1595 | "version": "3.0.0", 1596 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", 1597 | "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", 1598 | "dev": true, 1599 | "dependencies": { 1600 | "object-assign": "^4.1.1", 1601 | "pug-walk": "^2.0.0" 1602 | } 1603 | }, 1604 | "node_modules/pug-parser": { 1605 | "version": "6.0.0", 1606 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", 1607 | "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", 1608 | "dev": true, 1609 | "dependencies": { 1610 | "pug-error": "^2.0.0", 1611 | "token-stream": "1.0.0" 1612 | } 1613 | }, 1614 | "node_modules/pug-runtime": { 1615 | "version": "3.0.1", 1616 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", 1617 | "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", 1618 | "dev": true 1619 | }, 1620 | "node_modules/pug-strip-comments": { 1621 | "version": "2.0.0", 1622 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", 1623 | "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", 1624 | "dev": true, 1625 | "dependencies": { 1626 | "pug-error": "^2.0.0" 1627 | } 1628 | }, 1629 | "node_modules/pug-walk": { 1630 | "version": "2.0.0", 1631 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", 1632 | "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", 1633 | "dev": true 1634 | }, 1635 | "node_modules/react": { 1636 | "version": "17.0.2", 1637 | "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", 1638 | "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", 1639 | "dev": true, 1640 | "peer": true, 1641 | "dependencies": { 1642 | "loose-envify": "^1.1.0", 1643 | "object-assign": "^4.1.1" 1644 | }, 1645 | "engines": { 1646 | "node": ">=0.10.0" 1647 | } 1648 | }, 1649 | "node_modules/react-dom": { 1650 | "version": "17.0.2", 1651 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", 1652 | "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", 1653 | "dev": true, 1654 | "peer": true, 1655 | "dependencies": { 1656 | "loose-envify": "^1.1.0", 1657 | "object-assign": "^4.1.1", 1658 | "scheduler": "^0.20.2" 1659 | }, 1660 | "peerDependencies": { 1661 | "react": "17.0.2" 1662 | } 1663 | }, 1664 | "node_modules/readdirp": { 1665 | "version": "3.6.0", 1666 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1667 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1668 | "dev": true, 1669 | "dependencies": { 1670 | "picomatch": "^2.2.1" 1671 | }, 1672 | "engines": { 1673 | "node": ">=8.10.0" 1674 | } 1675 | }, 1676 | "node_modules/request-light": { 1677 | "version": "0.5.7", 1678 | "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.7.tgz", 1679 | "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==", 1680 | "dev": true 1681 | }, 1682 | "node_modules/resolve": { 1683 | "version": "1.22.0", 1684 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1685 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1686 | "dev": true, 1687 | "dependencies": { 1688 | "is-core-module": "^2.8.1", 1689 | "path-parse": "^1.0.7", 1690 | "supports-preserve-symlinks-flag": "^1.0.0" 1691 | }, 1692 | "bin": { 1693 | "resolve": "bin/resolve" 1694 | }, 1695 | "funding": { 1696 | "url": "https://github.com/sponsors/ljharb" 1697 | } 1698 | }, 1699 | "node_modules/rimraf": { 1700 | "version": "3.0.2", 1701 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1702 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1703 | "dev": true, 1704 | "dependencies": { 1705 | "glob": "^7.1.3" 1706 | }, 1707 | "bin": { 1708 | "rimraf": "bin.js" 1709 | }, 1710 | "funding": { 1711 | "url": "https://github.com/sponsors/isaacs" 1712 | } 1713 | }, 1714 | "node_modules/rollup": { 1715 | "version": "2.67.0", 1716 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.0.tgz", 1717 | "integrity": "sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==", 1718 | "dev": true, 1719 | "bin": { 1720 | "rollup": "dist/bin/rollup" 1721 | }, 1722 | "engines": { 1723 | "node": ">=10.0.0" 1724 | }, 1725 | "optionalDependencies": { 1726 | "fsevents": "~2.3.2" 1727 | } 1728 | }, 1729 | "node_modules/sass": { 1730 | "version": "1.49.7", 1731 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", 1732 | "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", 1733 | "dev": true, 1734 | "dependencies": { 1735 | "chokidar": ">=3.0.0 <4.0.0", 1736 | "immutable": "^4.0.0", 1737 | "source-map-js": ">=0.6.2 <2.0.0" 1738 | }, 1739 | "bin": { 1740 | "sass": "sass.js" 1741 | }, 1742 | "engines": { 1743 | "node": ">=12.0.0" 1744 | } 1745 | }, 1746 | "node_modules/scheduler": { 1747 | "version": "0.20.2", 1748 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", 1749 | "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", 1750 | "dev": true, 1751 | "peer": true, 1752 | "dependencies": { 1753 | "loose-envify": "^1.1.0", 1754 | "object-assign": "^4.1.1" 1755 | } 1756 | }, 1757 | "node_modules/semver": { 1758 | "version": "7.3.5", 1759 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 1760 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 1761 | "dev": true, 1762 | "dependencies": { 1763 | "lru-cache": "^6.0.0" 1764 | }, 1765 | "bin": { 1766 | "semver": "bin/semver.js" 1767 | }, 1768 | "engines": { 1769 | "node": ">=10" 1770 | } 1771 | }, 1772 | "node_modules/source-map": { 1773 | "version": "0.6.1", 1774 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1775 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1776 | "dev": true, 1777 | "engines": { 1778 | "node": ">=0.10.0" 1779 | } 1780 | }, 1781 | "node_modules/source-map-js": { 1782 | "version": "1.0.2", 1783 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1784 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1785 | "dev": true, 1786 | "engines": { 1787 | "node": ">=0.10.0" 1788 | } 1789 | }, 1790 | "node_modules/sourcemap-codec": { 1791 | "version": "1.4.8", 1792 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1793 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1794 | "dev": true 1795 | }, 1796 | "node_modules/supports-preserve-symlinks-flag": { 1797 | "version": "1.0.0", 1798 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1799 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1800 | "dev": true, 1801 | "engines": { 1802 | "node": ">= 0.4" 1803 | }, 1804 | "funding": { 1805 | "url": "https://github.com/sponsors/ljharb" 1806 | } 1807 | }, 1808 | "node_modules/to-fast-properties": { 1809 | "version": "2.0.0", 1810 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1811 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 1812 | "dev": true, 1813 | "engines": { 1814 | "node": ">=4" 1815 | } 1816 | }, 1817 | "node_modules/to-regex-range": { 1818 | "version": "5.0.1", 1819 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1820 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1821 | "dev": true, 1822 | "dependencies": { 1823 | "is-number": "^7.0.0" 1824 | }, 1825 | "engines": { 1826 | "node": ">=8.0" 1827 | } 1828 | }, 1829 | "node_modules/token-stream": { 1830 | "version": "1.0.0", 1831 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", 1832 | "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", 1833 | "dev": true 1834 | }, 1835 | "node_modules/typescript": { 1836 | "version": "4.5.5", 1837 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", 1838 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", 1839 | "dev": true, 1840 | "bin": { 1841 | "tsc": "bin/tsc", 1842 | "tsserver": "bin/tsserver" 1843 | }, 1844 | "engines": { 1845 | "node": ">=4.2.0" 1846 | } 1847 | }, 1848 | "node_modules/upath": { 1849 | "version": "2.0.1", 1850 | "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", 1851 | "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", 1852 | "dev": true, 1853 | "engines": { 1854 | "node": ">=4", 1855 | "yarn": "*" 1856 | } 1857 | }, 1858 | "node_modules/use-strict": { 1859 | "version": "1.0.1", 1860 | "resolved": "https://registry.npmjs.org/use-strict/-/use-strict-1.0.1.tgz", 1861 | "integrity": "sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ==", 1862 | "dev": true 1863 | }, 1864 | "node_modules/vite": { 1865 | "version": "2.7.13", 1866 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.13.tgz", 1867 | "integrity": "sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==", 1868 | "dev": true, 1869 | "dependencies": { 1870 | "esbuild": "^0.13.12", 1871 | "postcss": "^8.4.5", 1872 | "resolve": "^1.20.0", 1873 | "rollup": "^2.59.0" 1874 | }, 1875 | "bin": { 1876 | "vite": "bin/vite.js" 1877 | }, 1878 | "engines": { 1879 | "node": ">=12.2.0" 1880 | }, 1881 | "optionalDependencies": { 1882 | "fsevents": "~2.3.2" 1883 | }, 1884 | "peerDependencies": { 1885 | "less": "*", 1886 | "sass": "*", 1887 | "stylus": "*" 1888 | }, 1889 | "peerDependenciesMeta": { 1890 | "less": { 1891 | "optional": true 1892 | }, 1893 | "sass": { 1894 | "optional": true 1895 | }, 1896 | "stylus": { 1897 | "optional": true 1898 | } 1899 | } 1900 | }, 1901 | "node_modules/vitepress": { 1902 | "version": "0.21.6", 1903 | "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-0.21.6.tgz", 1904 | "integrity": "sha512-OzwD2cTfvoK5VKV0UWSqu4XvUOz4vWFJ4Bdi0z8GoVkTFXkfmbFawEDVXAZwzu0Hn4/VLopgmEyooc91iGKFlg==", 1905 | "dev": true, 1906 | "dependencies": { 1907 | "@docsearch/css": "^3.0.0-alpha.41", 1908 | "@docsearch/js": "^3.0.0-alpha.41", 1909 | "@vitejs/plugin-vue": "^2.0.0", 1910 | "prismjs": "^1.25.0", 1911 | "vite": "^2.7.12", 1912 | "vue": "^3.2.27" 1913 | }, 1914 | "bin": { 1915 | "vitepress": "bin/vitepress.js" 1916 | }, 1917 | "engines": { 1918 | "node": ">=12.0.0" 1919 | } 1920 | }, 1921 | "node_modules/void-elements": { 1922 | "version": "3.1.0", 1923 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", 1924 | "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", 1925 | "dev": true, 1926 | "engines": { 1927 | "node": ">=0.10.0" 1928 | } 1929 | }, 1930 | "node_modules/vscode-css-languageservice": { 1931 | "version": "5.1.12", 1932 | "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.1.12.tgz", 1933 | "integrity": "sha512-293C5C2732Rbhh3opTs+nQBpC5Dd+oYrEA8lc0OWdyt40oYmJ331FV7NMF1SLFSIcOFB5XveLiWUZak2oyc49Q==", 1934 | "dev": true, 1935 | "dependencies": { 1936 | "vscode-languageserver-textdocument": "^1.0.1", 1937 | "vscode-languageserver-types": "^3.16.0", 1938 | "vscode-nls": "^5.0.0", 1939 | "vscode-uri": "^3.0.2" 1940 | } 1941 | }, 1942 | "node_modules/vscode-css-languageservice/node_modules/vscode-languageserver-types": { 1943 | "version": "3.16.0", 1944 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 1945 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 1946 | "dev": true 1947 | }, 1948 | "node_modules/vscode-html-languageservice": { 1949 | "version": "4.2.1", 1950 | "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.1.tgz", 1951 | "integrity": "sha512-PgaToZVXJ44nFWEBuSINdDgVV6EnpC3MnXBsysR3O5TKcAfywbYeRGRy+Y4dVR7YeUgDvtb+JkJoSkaYC0mxXQ==", 1952 | "dev": true, 1953 | "dependencies": { 1954 | "vscode-languageserver-textdocument": "^1.0.1", 1955 | "vscode-languageserver-types": "^3.16.0", 1956 | "vscode-nls": "^5.0.0", 1957 | "vscode-uri": "^3.0.2" 1958 | } 1959 | }, 1960 | "node_modules/vscode-html-languageservice/node_modules/vscode-languageserver-types": { 1961 | "version": "3.16.0", 1962 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 1963 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 1964 | "dev": true 1965 | }, 1966 | "node_modules/vscode-json-languageservice": { 1967 | "version": "4.2.0", 1968 | "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.0.tgz", 1969 | "integrity": "sha512-XNawv0Vdy/sUK0S+hGf7cq/qsVAbIniGJr89TvZOqMCNJmpgKTy1e8PL1aWW0uy6BfWMG7vxa5lZb3ypuFtuGQ==", 1970 | "dev": true, 1971 | "dependencies": { 1972 | "jsonc-parser": "^3.0.0", 1973 | "vscode-languageserver-textdocument": "^1.0.3", 1974 | "vscode-languageserver-types": "^3.16.0", 1975 | "vscode-nls": "^5.0.0", 1976 | "vscode-uri": "^3.0.3" 1977 | } 1978 | }, 1979 | "node_modules/vscode-json-languageservice/node_modules/jsonc-parser": { 1980 | "version": "3.0.0", 1981 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", 1982 | "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", 1983 | "dev": true 1984 | }, 1985 | "node_modules/vscode-json-languageservice/node_modules/vscode-languageserver-types": { 1986 | "version": "3.16.0", 1987 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 1988 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 1989 | "dev": true 1990 | }, 1991 | "node_modules/vscode-jsonrpc": { 1992 | "version": "8.0.0-next.6", 1993 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.6.tgz", 1994 | "integrity": "sha512-6Ld3RYjygn5Ih7CkAtcAwiDQC+rakj2O+PnASfNyYv3sLmm44eJpEKzuPUN30Iy2UB09AZg8T6LBKWTJTEJDVw==", 1995 | "dev": true, 1996 | "engines": { 1997 | "node": ">=14.0.0" 1998 | } 1999 | }, 2000 | "node_modules/vscode-languageserver": { 2001 | "version": "8.0.0-next.8", 2002 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.0-next.8.tgz", 2003 | "integrity": "sha512-Gq0uqKbOgw7YNwPxMoNCeh7mHKMhG5j6EuoSh+w5pnKd7Eu9a74cagqf9aZDVFWW6GRpqR/Z+1o6EXqDK+g2Tg==", 2004 | "dev": true, 2005 | "dependencies": { 2006 | "vscode-languageserver-protocol": "3.17.0-next.14" 2007 | }, 2008 | "bin": { 2009 | "installServerIntoExtension": "bin/installServerIntoExtension" 2010 | } 2011 | }, 2012 | "node_modules/vscode-languageserver-protocol": { 2013 | "version": "3.17.0-next.14", 2014 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.14.tgz", 2015 | "integrity": "sha512-iangobY8dL6sFZkOx4OhRPJM9gN0I1caUsOVR+MnPozsqQUtwMXmbIcfaIf0Akp0pd3KhJDPf/tdwRX68QGeeA==", 2016 | "dev": true, 2017 | "dependencies": { 2018 | "vscode-jsonrpc": "8.0.0-next.6", 2019 | "vscode-languageserver-types": "3.17.0-next.7" 2020 | } 2021 | }, 2022 | "node_modules/vscode-languageserver-textdocument": { 2023 | "version": "1.0.4", 2024 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", 2025 | "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==", 2026 | "dev": true 2027 | }, 2028 | "node_modules/vscode-languageserver-types": { 2029 | "version": "3.17.0-next.7", 2030 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.7.tgz", 2031 | "integrity": "sha512-KH4zdG1qBXxoso61ChgpeoZYyHGJo8bV7Jv4I+fwQ1Ryy59JAxoZ9GAbhR5TeeafHctLcg6RFvY3m8Jqfu17cg==", 2032 | "dev": true 2033 | }, 2034 | "node_modules/vscode-nls": { 2035 | "version": "5.0.0", 2036 | "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", 2037 | "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", 2038 | "dev": true 2039 | }, 2040 | "node_modules/vscode-pug-languageservice": { 2041 | "version": "0.29.8", 2042 | "resolved": "https://registry.npmjs.org/vscode-pug-languageservice/-/vscode-pug-languageservice-0.29.8.tgz", 2043 | "integrity": "sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==", 2044 | "dev": true, 2045 | "dependencies": { 2046 | "@volar/code-gen": "0.29.8", 2047 | "@volar/shared": "0.29.8", 2048 | "@volar/source-map": "0.29.8", 2049 | "@volar/transforms": "0.29.8", 2050 | "pug-lexer": "^5.0.1", 2051 | "pug-parser": "^6.0.0", 2052 | "vscode-languageserver": "^8.0.0-next.2" 2053 | } 2054 | }, 2055 | "node_modules/vscode-typescript-languageservice": { 2056 | "version": "0.29.8", 2057 | "resolved": "https://registry.npmjs.org/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.29.8.tgz", 2058 | "integrity": "sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==", 2059 | "dev": true, 2060 | "dependencies": { 2061 | "@volar/shared": "0.29.8", 2062 | "semver": "^7.3.5", 2063 | "upath": "^2.0.1", 2064 | "vscode-languageserver": "^8.0.0-next.2", 2065 | "vscode-languageserver-textdocument": "^1.0.1" 2066 | } 2067 | }, 2068 | "node_modules/vscode-uri": { 2069 | "version": "3.0.3", 2070 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", 2071 | "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", 2072 | "dev": true 2073 | }, 2074 | "node_modules/vscode-vue-languageservice": { 2075 | "version": "0.29.8", 2076 | "resolved": "https://registry.npmjs.org/vscode-vue-languageservice/-/vscode-vue-languageservice-0.29.8.tgz", 2077 | "integrity": "sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==", 2078 | "dev": true, 2079 | "dependencies": { 2080 | "@volar/code-gen": "0.29.8", 2081 | "@volar/html2pug": "0.29.8", 2082 | "@volar/shared": "0.29.8", 2083 | "@volar/source-map": "0.29.8", 2084 | "@volar/transforms": "0.29.8", 2085 | "@volar/vue-code-gen": "0.29.8", 2086 | "@vscode/emmet-helper": "^2.8.0", 2087 | "@vue/reactivity": "^3.2.21", 2088 | "@vue/shared": "^3.2.21", 2089 | "request-light": "^0.5.4", 2090 | "upath": "^2.0.1", 2091 | "vscode-css-languageservice": "^5.1.7", 2092 | "vscode-html-languageservice": "^4.1.0", 2093 | "vscode-json-languageservice": "^4.1.8", 2094 | "vscode-languageserver": "^8.0.0-next.2", 2095 | "vscode-languageserver-textdocument": "^1.0.1", 2096 | "vscode-pug-languageservice": "0.29.8", 2097 | "vscode-typescript-languageservice": "0.29.8" 2098 | } 2099 | }, 2100 | "node_modules/vue": { 2101 | "version": "3.2.29", 2102 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.29.tgz", 2103 | "integrity": "sha512-cFIwr7LkbtCRanjNvh6r7wp2yUxfxeM2yPpDQpAfaaLIGZSrUmLbNiSze9nhBJt5MrZ68Iqt0O5scwAMEVxF+Q==", 2104 | "dev": true, 2105 | "dependencies": { 2106 | "@vue/compiler-dom": "3.2.29", 2107 | "@vue/compiler-sfc": "3.2.29", 2108 | "@vue/runtime-dom": "3.2.29", 2109 | "@vue/server-renderer": "3.2.29", 2110 | "@vue/shared": "3.2.29" 2111 | } 2112 | }, 2113 | "node_modules/vue-tsc": { 2114 | "version": "0.29.8", 2115 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.29.8.tgz", 2116 | "integrity": "sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==", 2117 | "dev": true, 2118 | "dependencies": { 2119 | "@volar/shared": "0.29.8", 2120 | "vscode-vue-languageservice": "0.29.8" 2121 | }, 2122 | "bin": { 2123 | "vue-tsc": "bin/vue-tsc.js" 2124 | }, 2125 | "peerDependencies": { 2126 | "typescript": "*" 2127 | } 2128 | }, 2129 | "node_modules/with": { 2130 | "version": "7.0.2", 2131 | "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", 2132 | "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", 2133 | "dev": true, 2134 | "dependencies": { 2135 | "@babel/parser": "^7.9.6", 2136 | "@babel/types": "^7.9.6", 2137 | "assert-never": "^1.2.1", 2138 | "babel-walk": "3.0.0-canary-5" 2139 | }, 2140 | "engines": { 2141 | "node": ">= 10.0.0" 2142 | } 2143 | }, 2144 | "node_modules/wrappy": { 2145 | "version": "1.0.2", 2146 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2147 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2148 | "dev": true 2149 | }, 2150 | "node_modules/yallist": { 2151 | "version": "4.0.0", 2152 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2153 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2154 | "dev": true 2155 | } 2156 | }, 2157 | "dependencies": { 2158 | "@algolia/autocomplete-core": { 2159 | "version": "1.5.2", 2160 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz", 2161 | "integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==", 2162 | "dev": true, 2163 | "requires": { 2164 | "@algolia/autocomplete-shared": "1.5.2" 2165 | } 2166 | }, 2167 | "@algolia/autocomplete-preset-algolia": { 2168 | "version": "1.5.2", 2169 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz", 2170 | "integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==", 2171 | "dev": true, 2172 | "requires": { 2173 | "@algolia/autocomplete-shared": "1.5.2" 2174 | } 2175 | }, 2176 | "@algolia/autocomplete-shared": { 2177 | "version": "1.5.2", 2178 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz", 2179 | "integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==", 2180 | "dev": true 2181 | }, 2182 | "@algolia/cache-browser-local-storage": { 2183 | "version": "4.12.1", 2184 | "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.1.tgz", 2185 | "integrity": "sha512-ERFFOnC9740xAkuO0iZTQqm2AzU7Dpz/s+g7o48GlZgx5p9GgNcsuK5eS0GoW/tAK+fnKlizCtlFHNuIWuvfsg==", 2186 | "dev": true, 2187 | "requires": { 2188 | "@algolia/cache-common": "4.12.1" 2189 | } 2190 | }, 2191 | "@algolia/cache-common": { 2192 | "version": "4.12.1", 2193 | "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.1.tgz", 2194 | "integrity": "sha512-UugTER3V40jT+e19Dmph5PKMeliYKxycNPwrPNADin0RcWNfT2QksK9Ff2N2W7UKraqMOzoeDb4LAJtxcK1a8Q==", 2195 | "dev": true 2196 | }, 2197 | "@algolia/cache-in-memory": { 2198 | "version": "4.12.1", 2199 | "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.1.tgz", 2200 | "integrity": "sha512-U6iaunaxK1lHsAf02UWF58foKFEcrVLsHwN56UkCtwn32nlP9rz52WOcHsgk6TJrL8NDcO5swMjtOQ5XHESFLw==", 2201 | "dev": true, 2202 | "requires": { 2203 | "@algolia/cache-common": "4.12.1" 2204 | } 2205 | }, 2206 | "@algolia/client-account": { 2207 | "version": "4.12.1", 2208 | "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.1.tgz", 2209 | "integrity": "sha512-jGo4ConJNoMdTCR2zouO0jO/JcJmzOK6crFxMMLvdnB1JhmMbuIKluOTJVlBWeivnmcsqb7r0v7qTCPW5PAyxQ==", 2210 | "dev": true, 2211 | "requires": { 2212 | "@algolia/client-common": "4.12.1", 2213 | "@algolia/client-search": "4.12.1", 2214 | "@algolia/transporter": "4.12.1" 2215 | } 2216 | }, 2217 | "@algolia/client-analytics": { 2218 | "version": "4.12.1", 2219 | "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.1.tgz", 2220 | "integrity": "sha512-h1It7KXzIthlhuhfBk7LteYq72tym9maQDUsyRW0Gft8b6ZQahnRak9gcCvKwhcJ1vJoP7T7JrNYGiYSicTD9g==", 2221 | "dev": true, 2222 | "requires": { 2223 | "@algolia/client-common": "4.12.1", 2224 | "@algolia/client-search": "4.12.1", 2225 | "@algolia/requester-common": "4.12.1", 2226 | "@algolia/transporter": "4.12.1" 2227 | } 2228 | }, 2229 | "@algolia/client-common": { 2230 | "version": "4.12.1", 2231 | "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.1.tgz", 2232 | "integrity": "sha512-obnJ8eSbv+h94Grk83DTGQ3bqhViSWureV6oK1s21/KMGWbb3DkduHm+lcwFrMFkjSUSzosLBHV9EQUIBvueTw==", 2233 | "dev": true, 2234 | "requires": { 2235 | "@algolia/requester-common": "4.12.1", 2236 | "@algolia/transporter": "4.12.1" 2237 | } 2238 | }, 2239 | "@algolia/client-personalization": { 2240 | "version": "4.12.1", 2241 | "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.1.tgz", 2242 | "integrity": "sha512-sMSnjjPjRgByGHYygV+5L/E8a6RgU7l2GbpJukSzJ9GRY37tHmBHuvahv8JjdCGJ2p7QDYLnQy5bN5Z02qjc7Q==", 2243 | "dev": true, 2244 | "requires": { 2245 | "@algolia/client-common": "4.12.1", 2246 | "@algolia/requester-common": "4.12.1", 2247 | "@algolia/transporter": "4.12.1" 2248 | } 2249 | }, 2250 | "@algolia/client-search": { 2251 | "version": "4.12.1", 2252 | "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.1.tgz", 2253 | "integrity": "sha512-MwwKKprfY6X2nJ5Ki/ccXM2GDEePvVjZnnoOB2io3dLKW4fTqeSRlC5DRXeFD7UM0vOPPHr4ItV2aj19APKNVQ==", 2254 | "dev": true, 2255 | "requires": { 2256 | "@algolia/client-common": "4.12.1", 2257 | "@algolia/requester-common": "4.12.1", 2258 | "@algolia/transporter": "4.12.1" 2259 | } 2260 | }, 2261 | "@algolia/logger-common": { 2262 | "version": "4.12.1", 2263 | "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.1.tgz", 2264 | "integrity": "sha512-fCgrzlXGATNqdFTxwx0GsyPXK+Uqrx1SZ3iuY2VGPPqdt1a20clAG2n2OcLHJpvaa6vMFPlJyWvbqAgzxdxBlQ==", 2265 | "dev": true 2266 | }, 2267 | "@algolia/logger-console": { 2268 | "version": "4.12.1", 2269 | "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.1.tgz", 2270 | "integrity": "sha512-0owaEnq/davngQMYqxLA4KrhWHiXujQ1CU3FFnyUcMyBR7rGHI48zSOUpqnsAXrMBdSH6rH5BDkSUUFwsh8RkQ==", 2271 | "dev": true, 2272 | "requires": { 2273 | "@algolia/logger-common": "4.12.1" 2274 | } 2275 | }, 2276 | "@algolia/requester-browser-xhr": { 2277 | "version": "4.12.1", 2278 | "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.1.tgz", 2279 | "integrity": "sha512-OaMxDyG0TZG0oqz1lQh9e3woantAG1bLnuwq3fmypsrQxra4IQZiyn1x+kEb69D2TcXApI5gOgrD4oWhtEVMtw==", 2280 | "dev": true, 2281 | "requires": { 2282 | "@algolia/requester-common": "4.12.1" 2283 | } 2284 | }, 2285 | "@algolia/requester-common": { 2286 | "version": "4.12.1", 2287 | "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.1.tgz", 2288 | "integrity": "sha512-XWIrWQNJ1vIrSuL/bUk3ZwNMNxl+aWz6dNboRW6+lGTcMIwc3NBFE90ogbZKhNrFRff8zI4qCF15tjW+Fyhpow==", 2289 | "dev": true 2290 | }, 2291 | "@algolia/requester-node-http": { 2292 | "version": "4.12.1", 2293 | "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.1.tgz", 2294 | "integrity": "sha512-awBtwaD+s0hxkA1aehYn8F0t9wqGoBVWgY4JPHBmp1ChO3pK7RKnnvnv7QQa9vTlllX29oPt/BBVgMo1Z3n1Qg==", 2295 | "dev": true, 2296 | "requires": { 2297 | "@algolia/requester-common": "4.12.1" 2298 | } 2299 | }, 2300 | "@algolia/transporter": { 2301 | "version": "4.12.1", 2302 | "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.1.tgz", 2303 | "integrity": "sha512-BGeNgdEHc6dXIk2g8kdlOoQ6fQ6OIaKQcplEj7HPoi+XZUeAvRi3Pff3QWd7YmybWkjzd9AnTzieTASDWhL+sQ==", 2304 | "dev": true, 2305 | "requires": { 2306 | "@algolia/cache-common": "4.12.1", 2307 | "@algolia/logger-common": "4.12.1", 2308 | "@algolia/requester-common": "4.12.1" 2309 | } 2310 | }, 2311 | "@babel/helper-validator-identifier": { 2312 | "version": "7.16.7", 2313 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 2314 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", 2315 | "dev": true 2316 | }, 2317 | "@babel/parser": { 2318 | "version": "7.17.0", 2319 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", 2320 | "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", 2321 | "dev": true 2322 | }, 2323 | "@babel/types": { 2324 | "version": "7.17.0", 2325 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", 2326 | "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", 2327 | "dev": true, 2328 | "requires": { 2329 | "@babel/helper-validator-identifier": "^7.16.7", 2330 | "to-fast-properties": "^2.0.0" 2331 | } 2332 | }, 2333 | "@docsearch/css": { 2334 | "version": "3.0.0-alpha.50", 2335 | "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0-alpha.50.tgz", 2336 | "integrity": "sha512-QeWFCQOtS9D+Fi20liKsPXF2j/xWKh52e+P2Z1UATIdPMqmH6zoB2lcUz+cgv6PPVgWUtECeR6VSSUm71LT94w==", 2337 | "dev": true 2338 | }, 2339 | "@docsearch/js": { 2340 | "version": "3.0.0-alpha.50", 2341 | "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.0.0-alpha.50.tgz", 2342 | "integrity": "sha512-1ap9Wz5oR/Z8yybaCZhsptXU43es3H52eEQUZtmzb8dUWyCW+3iXaKVB/qeMJOQWtggZ/WvZV3YknVIbCMR2dQ==", 2343 | "dev": true, 2344 | "requires": { 2345 | "@docsearch/react": "3.0.0-alpha.50", 2346 | "preact": "^10.0.0" 2347 | } 2348 | }, 2349 | "@docsearch/react": { 2350 | "version": "3.0.0-alpha.50", 2351 | "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0-alpha.50.tgz", 2352 | "integrity": "sha512-oDGV1zZCRYv7MWsh6CyQVthYTRc3b4q+6kKwNYb1/g/Wf/4nJHutpxolFLHdEUDhrJ4Xi8wxwQG+lEwAVBTHPg==", 2353 | "dev": true, 2354 | "requires": { 2355 | "@algolia/autocomplete-core": "1.5.2", 2356 | "@algolia/autocomplete-preset-algolia": "1.5.2", 2357 | "@docsearch/css": "3.0.0-alpha.50", 2358 | "algoliasearch": "^4.0.0" 2359 | } 2360 | }, 2361 | "@emmetio/abbreviation": { 2362 | "version": "2.2.2", 2363 | "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.2.2.tgz", 2364 | "integrity": "sha512-TtE/dBnkTCct8+LntkqVrwqQao6EnPAs1YN3cUgxOxTaBlesBCY37ROUAVZrRlG64GNnVShdl/b70RfAI3w5lw==", 2365 | "dev": true, 2366 | "requires": { 2367 | "@emmetio/scanner": "^1.0.0" 2368 | } 2369 | }, 2370 | "@emmetio/css-abbreviation": { 2371 | "version": "2.1.4", 2372 | "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.4.tgz", 2373 | "integrity": "sha512-qk9L60Y+uRtM5CPbB0y+QNl/1XKE09mSO+AhhSauIfr2YOx/ta3NJw2d8RtCFxgzHeRqFRr8jgyzThbu+MZ4Uw==", 2374 | "dev": true, 2375 | "requires": { 2376 | "@emmetio/scanner": "^1.0.0" 2377 | } 2378 | }, 2379 | "@emmetio/scanner": { 2380 | "version": "1.0.0", 2381 | "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.0.tgz", 2382 | "integrity": "sha512-8HqW8EVqjnCmWXVpqAOZf+EGESdkR27odcMMMGefgKXtar00SoYNSryGv//TELI4T3QFsECo78p+0lmalk/CFA==", 2383 | "dev": true 2384 | }, 2385 | "@types/node": { 2386 | "version": "17.0.14", 2387 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", 2388 | "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==", 2389 | "dev": true 2390 | }, 2391 | "@types/prop-types": { 2392 | "version": "15.7.5", 2393 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 2394 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 2395 | "dev": true, 2396 | "peer": true 2397 | }, 2398 | "@types/react": { 2399 | "version": "17.0.47", 2400 | "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz", 2401 | "integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==", 2402 | "dev": true, 2403 | "peer": true, 2404 | "requires": { 2405 | "@types/prop-types": "*", 2406 | "@types/scheduler": "*", 2407 | "csstype": "^3.0.2" 2408 | }, 2409 | "dependencies": { 2410 | "csstype": { 2411 | "version": "3.1.0", 2412 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", 2413 | "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", 2414 | "dev": true, 2415 | "peer": true 2416 | } 2417 | } 2418 | }, 2419 | "@types/scheduler": { 2420 | "version": "0.16.2", 2421 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", 2422 | "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", 2423 | "dev": true, 2424 | "peer": true 2425 | }, 2426 | "@vitejs/plugin-vue": { 2427 | "version": "2.1.0", 2428 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.1.0.tgz", 2429 | "integrity": "sha512-AZ78WxvFMYd8JmM/GBV6a6SGGTU0GgN/0/4T+FnMMsLzFEzTeAUwuraapy50ifHZsC+G5SvWs86bvaCPTneFlA==", 2430 | "dev": true, 2431 | "requires": {} 2432 | }, 2433 | "@volar/code-gen": { 2434 | "version": "0.29.8", 2435 | "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.29.8.tgz", 2436 | "integrity": "sha512-eohLLUqPChHRPDFT5gXn4V6pr/CeTri7Ou5GI26lUvBRRAbP8p+oYfQRcbMPGeKmVkYjfVj0chsxQGx6T8PQ4Q==", 2437 | "dev": true, 2438 | "requires": { 2439 | "@volar/shared": "0.29.8", 2440 | "@volar/source-map": "0.29.8" 2441 | } 2442 | }, 2443 | "@volar/html2pug": { 2444 | "version": "0.29.8", 2445 | "resolved": "https://registry.npmjs.org/@volar/html2pug/-/html2pug-0.29.8.tgz", 2446 | "integrity": "sha512-bhSNXg8A2aD3w0B+CwmHjqCAaKtj5rORbE5C/q/UdGqptJbC6STCmi30KuRTdfPhR++Xb18Hauf3s/WCmtNAPA==", 2447 | "dev": true, 2448 | "requires": { 2449 | "domelementtype": "^2.2.0", 2450 | "domhandler": "^4.2.2", 2451 | "htmlparser2": "^7.1.2", 2452 | "pug": "^3.0.2" 2453 | } 2454 | }, 2455 | "@volar/shared": { 2456 | "version": "0.29.8", 2457 | "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.29.8.tgz", 2458 | "integrity": "sha512-Y1NN6irkIukD+T0wf4p/dHWYL90sacN2e2lYoDXxRlvoYxwANnHgw0J0Rcp+yw58ElWRScdG7/YntEIuZWeJsw==", 2459 | "dev": true, 2460 | "requires": { 2461 | "upath": "^2.0.1", 2462 | "vscode-jsonrpc": "^8.0.0-next.2", 2463 | "vscode-uri": "^3.0.2" 2464 | } 2465 | }, 2466 | "@volar/source-map": { 2467 | "version": "0.29.8", 2468 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.29.8.tgz", 2469 | "integrity": "sha512-7w+UoYtnc6UQu30CgMVvx0YN4dzDgP4TIsSmUaW62AGmxU9Lxwp3Kkn/4N8efi91z8ma5Z78v/HddyJPwAC3LA==", 2470 | "dev": true, 2471 | "requires": { 2472 | "@volar/shared": "0.29.8" 2473 | } 2474 | }, 2475 | "@volar/transforms": { 2476 | "version": "0.29.8", 2477 | "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.29.8.tgz", 2478 | "integrity": "sha512-o2hRa8CoDwYTO1Mu5KA47+1elUnYUjDaVhCvbyKlRfd8qpHea2llotArq7B6OORSL2M9DVs1IRJ5NGURBFeZ3Q==", 2479 | "dev": true, 2480 | "requires": { 2481 | "@volar/shared": "0.29.8", 2482 | "vscode-languageserver": "^8.0.0-next.2" 2483 | } 2484 | }, 2485 | "@volar/vue-code-gen": { 2486 | "version": "0.29.8", 2487 | "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.29.8.tgz", 2488 | "integrity": "sha512-E1e7P2oktNC/DzgDBditfla4s8+HlUlluZ+BtcLvEdbkl3QEjujkB0x1wxguWzXmpWgLIDPtrS3Jzll5cCOkTg==", 2489 | "dev": true, 2490 | "requires": { 2491 | "@volar/code-gen": "0.29.8", 2492 | "@volar/shared": "0.29.8", 2493 | "@volar/source-map": "0.29.8", 2494 | "@vue/compiler-core": "^3.2.21", 2495 | "@vue/compiler-dom": "^3.2.21", 2496 | "@vue/shared": "^3.2.21", 2497 | "upath": "^2.0.1" 2498 | } 2499 | }, 2500 | "@vscode/emmet-helper": { 2501 | "version": "2.8.3", 2502 | "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.8.3.tgz", 2503 | "integrity": "sha512-dkTSL+BaBBS8gFgPm/GMOU+XfxaMyI+Fl1IUYxEi8Iv24RfHf9/q2eCpV2hs7sncLcoKWEbMYe5gv4Ppmp2Oxw==", 2504 | "dev": true, 2505 | "requires": { 2506 | "emmet": "^2.3.0", 2507 | "jsonc-parser": "^2.3.0", 2508 | "vscode-languageserver-textdocument": "^1.0.1", 2509 | "vscode-languageserver-types": "^3.15.1", 2510 | "vscode-nls": "^5.0.0", 2511 | "vscode-uri": "^2.1.2" 2512 | }, 2513 | "dependencies": { 2514 | "vscode-languageserver-types": { 2515 | "version": "3.16.0", 2516 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 2517 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 2518 | "dev": true 2519 | }, 2520 | "vscode-uri": { 2521 | "version": "2.1.2", 2522 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", 2523 | "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", 2524 | "dev": true 2525 | } 2526 | } 2527 | }, 2528 | "@vue/compiler-core": { 2529 | "version": "3.2.29", 2530 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.29.tgz", 2531 | "integrity": "sha512-RePZ/J4Ub3sb7atQw6V6Rez+/5LCRHGFlSetT3N4VMrejqJnNPXKUt5AVm/9F5MJriy2w/VudEIvgscCfCWqxw==", 2532 | "dev": true, 2533 | "requires": { 2534 | "@babel/parser": "^7.16.4", 2535 | "@vue/shared": "3.2.29", 2536 | "estree-walker": "^2.0.2", 2537 | "source-map": "^0.6.1" 2538 | } 2539 | }, 2540 | "@vue/compiler-dom": { 2541 | "version": "3.2.29", 2542 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.29.tgz", 2543 | "integrity": "sha512-y26vK5khdNS9L3ckvkqJk/78qXwWb75Ci8iYLb67AkJuIgyKhIOcR1E8RIt4mswlVCIeI9gQ+fmtdhaiTAtrBQ==", 2544 | "dev": true, 2545 | "requires": { 2546 | "@vue/compiler-core": "3.2.29", 2547 | "@vue/shared": "3.2.29" 2548 | } 2549 | }, 2550 | "@vue/compiler-sfc": { 2551 | "version": "3.2.29", 2552 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.29.tgz", 2553 | "integrity": "sha512-X9+0dwsag2u6hSOP/XsMYqFti/edvYvxamgBgCcbSYuXx1xLZN+dS/GvQKM4AgGS4djqo0jQvWfIXdfZ2ET68g==", 2554 | "dev": true, 2555 | "requires": { 2556 | "@babel/parser": "^7.16.4", 2557 | "@vue/compiler-core": "3.2.29", 2558 | "@vue/compiler-dom": "3.2.29", 2559 | "@vue/compiler-ssr": "3.2.29", 2560 | "@vue/reactivity-transform": "3.2.29", 2561 | "@vue/shared": "3.2.29", 2562 | "estree-walker": "^2.0.2", 2563 | "magic-string": "^0.25.7", 2564 | "postcss": "^8.1.10", 2565 | "source-map": "^0.6.1" 2566 | } 2567 | }, 2568 | "@vue/compiler-ssr": { 2569 | "version": "3.2.29", 2570 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.29.tgz", 2571 | "integrity": "sha512-LrvQwXlx66uWsB9/VydaaqEpae9xtmlUkeSKF6aPDbzx8M1h7ukxaPjNCAXuFd3fUHblcri8k42lfimHfzMICA==", 2572 | "dev": true, 2573 | "requires": { 2574 | "@vue/compiler-dom": "3.2.29", 2575 | "@vue/shared": "3.2.29" 2576 | } 2577 | }, 2578 | "@vue/reactivity": { 2579 | "version": "3.2.29", 2580 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.29.tgz", 2581 | "integrity": "sha512-Ryhb6Gy62YolKXH1gv42pEqwx7zs3n8gacRVZICSgjQz8Qr8QeCcFygBKYfJm3o1SccR7U+bVBQDWZGOyG1k4g==", 2582 | "dev": true, 2583 | "requires": { 2584 | "@vue/shared": "3.2.29" 2585 | } 2586 | }, 2587 | "@vue/reactivity-transform": { 2588 | "version": "3.2.29", 2589 | "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.29.tgz", 2590 | "integrity": "sha512-YF6HdOuhdOw6KyRm59+3rML8USb9o8mYM1q+SH0G41K3/q/G7uhPnHGKvspzceD7h9J3VR1waOQ93CUZj7J7OA==", 2591 | "dev": true, 2592 | "requires": { 2593 | "@babel/parser": "^7.16.4", 2594 | "@vue/compiler-core": "3.2.29", 2595 | "@vue/shared": "3.2.29", 2596 | "estree-walker": "^2.0.2", 2597 | "magic-string": "^0.25.7" 2598 | } 2599 | }, 2600 | "@vue/runtime-core": { 2601 | "version": "3.2.29", 2602 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.29.tgz", 2603 | "integrity": "sha512-VMvQuLdzoTGmCwIKTKVwKmIL0qcODIqe74JtK1pVr5lnaE0l25hopodmPag3RcnIcIXe+Ye3B2olRCn7fTCgig==", 2604 | "dev": true, 2605 | "requires": { 2606 | "@vue/reactivity": "3.2.29", 2607 | "@vue/shared": "3.2.29" 2608 | } 2609 | }, 2610 | "@vue/runtime-dom": { 2611 | "version": "3.2.29", 2612 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.29.tgz", 2613 | "integrity": "sha512-YJgLQLwr+SQyORzTsBQLL5TT/5UiV83tEotqjL7F9aFDIQdFBTCwpkCFvX9jqwHoyi9sJqM9XtTrMcc8z/OjPA==", 2614 | "dev": true, 2615 | "requires": { 2616 | "@vue/runtime-core": "3.2.29", 2617 | "@vue/shared": "3.2.29", 2618 | "csstype": "^2.6.8" 2619 | } 2620 | }, 2621 | "@vue/server-renderer": { 2622 | "version": "3.2.29", 2623 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.29.tgz", 2624 | "integrity": "sha512-lpiYx7ciV7rWfJ0tPkoSOlLmwqBZ9FTmQm33S+T4g0j1fO/LmhJ9b9Ctl1o5xvIFVDk9QkSUWANZn7H2pXuxVw==", 2625 | "dev": true, 2626 | "requires": { 2627 | "@vue/compiler-ssr": "3.2.29", 2628 | "@vue/shared": "3.2.29" 2629 | } 2630 | }, 2631 | "@vue/shared": { 2632 | "version": "3.2.29", 2633 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.29.tgz", 2634 | "integrity": "sha512-BjNpU8OK6Z0LVzGUppEk0CMYm/hKDnZfYdjSmPOs0N+TR1cLKJAkDwW8ASZUvaaSLEi6d3hVM7jnWnX+6yWnHw==", 2635 | "dev": true 2636 | }, 2637 | "acorn": { 2638 | "version": "7.4.1", 2639 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 2640 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 2641 | "dev": true 2642 | }, 2643 | "algoliasearch": { 2644 | "version": "4.12.1", 2645 | "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.1.tgz", 2646 | "integrity": "sha512-c0dM1g3zZBJrkzE5GA/Nu1y3fFxx3LCzxKzcmp2dgGS8P4CjszB/l3lsSh2MSrrK1Hn/KV4BlbBMXtYgG1Bfrw==", 2647 | "dev": true, 2648 | "requires": { 2649 | "@algolia/cache-browser-local-storage": "4.12.1", 2650 | "@algolia/cache-common": "4.12.1", 2651 | "@algolia/cache-in-memory": "4.12.1", 2652 | "@algolia/client-account": "4.12.1", 2653 | "@algolia/client-analytics": "4.12.1", 2654 | "@algolia/client-common": "4.12.1", 2655 | "@algolia/client-personalization": "4.12.1", 2656 | "@algolia/client-search": "4.12.1", 2657 | "@algolia/logger-common": "4.12.1", 2658 | "@algolia/logger-console": "4.12.1", 2659 | "@algolia/requester-browser-xhr": "4.12.1", 2660 | "@algolia/requester-common": "4.12.1", 2661 | "@algolia/requester-node-http": "4.12.1", 2662 | "@algolia/transporter": "4.12.1" 2663 | } 2664 | }, 2665 | "anymatch": { 2666 | "version": "3.1.2", 2667 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 2668 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 2669 | "dev": true, 2670 | "requires": { 2671 | "normalize-path": "^3.0.0", 2672 | "picomatch": "^2.0.4" 2673 | } 2674 | }, 2675 | "asap": { 2676 | "version": "2.0.6", 2677 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 2678 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", 2679 | "dev": true 2680 | }, 2681 | "assert-never": { 2682 | "version": "1.2.1", 2683 | "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", 2684 | "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", 2685 | "dev": true 2686 | }, 2687 | "babel-walk": { 2688 | "version": "3.0.0-canary-5", 2689 | "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", 2690 | "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", 2691 | "dev": true, 2692 | "requires": { 2693 | "@babel/types": "^7.9.6" 2694 | } 2695 | }, 2696 | "balanced-match": { 2697 | "version": "1.0.2", 2698 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 2699 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 2700 | "dev": true 2701 | }, 2702 | "binary-extensions": { 2703 | "version": "2.2.0", 2704 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 2705 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 2706 | "dev": true 2707 | }, 2708 | "brace-expansion": { 2709 | "version": "1.1.11", 2710 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2711 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2712 | "dev": true, 2713 | "requires": { 2714 | "balanced-match": "^1.0.0", 2715 | "concat-map": "0.0.1" 2716 | } 2717 | }, 2718 | "braces": { 2719 | "version": "3.0.2", 2720 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 2721 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 2722 | "dev": true, 2723 | "requires": { 2724 | "fill-range": "^7.0.1" 2725 | } 2726 | }, 2727 | "call-bind": { 2728 | "version": "1.0.2", 2729 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 2730 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 2731 | "dev": true, 2732 | "requires": { 2733 | "function-bind": "^1.1.1", 2734 | "get-intrinsic": "^1.0.2" 2735 | } 2736 | }, 2737 | "character-parser": { 2738 | "version": "2.2.0", 2739 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 2740 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", 2741 | "dev": true, 2742 | "requires": { 2743 | "is-regex": "^1.0.3" 2744 | } 2745 | }, 2746 | "chokidar": { 2747 | "version": "3.5.3", 2748 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 2749 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 2750 | "dev": true, 2751 | "requires": { 2752 | "anymatch": "~3.1.2", 2753 | "braces": "~3.0.2", 2754 | "fsevents": "~2.3.2", 2755 | "glob-parent": "~5.1.2", 2756 | "is-binary-path": "~2.1.0", 2757 | "is-glob": "~4.0.1", 2758 | "normalize-path": "~3.0.0", 2759 | "readdirp": "~3.6.0" 2760 | } 2761 | }, 2762 | "concat-map": { 2763 | "version": "0.0.1", 2764 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2765 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 2766 | "dev": true 2767 | }, 2768 | "constantinople": { 2769 | "version": "4.0.1", 2770 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", 2771 | "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", 2772 | "dev": true, 2773 | "requires": { 2774 | "@babel/parser": "^7.6.0", 2775 | "@babel/types": "^7.6.1" 2776 | } 2777 | }, 2778 | "csstype": { 2779 | "version": "2.6.19", 2780 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.19.tgz", 2781 | "integrity": "sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==", 2782 | "dev": true 2783 | }, 2784 | "doctypes": { 2785 | "version": "1.1.0", 2786 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 2787 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=", 2788 | "dev": true 2789 | }, 2790 | "dom-serializer": { 2791 | "version": "1.3.2", 2792 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 2793 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", 2794 | "dev": true, 2795 | "requires": { 2796 | "domelementtype": "^2.0.1", 2797 | "domhandler": "^4.2.0", 2798 | "entities": "^2.0.0" 2799 | }, 2800 | "dependencies": { 2801 | "entities": { 2802 | "version": "2.2.0", 2803 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 2804 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 2805 | "dev": true 2806 | } 2807 | } 2808 | }, 2809 | "domelementtype": { 2810 | "version": "2.2.0", 2811 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 2812 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 2813 | "dev": true 2814 | }, 2815 | "domhandler": { 2816 | "version": "4.3.0", 2817 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", 2818 | "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", 2819 | "dev": true, 2820 | "requires": { 2821 | "domelementtype": "^2.2.0" 2822 | } 2823 | }, 2824 | "domutils": { 2825 | "version": "2.8.0", 2826 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 2827 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 2828 | "dev": true, 2829 | "requires": { 2830 | "dom-serializer": "^1.0.1", 2831 | "domelementtype": "^2.2.0", 2832 | "domhandler": "^4.2.0" 2833 | } 2834 | }, 2835 | "emmet": { 2836 | "version": "2.3.5", 2837 | "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.3.5.tgz", 2838 | "integrity": "sha512-LcWfTamJnXIdMfLvJEC5Ld3hY5/KHXgv1L1bp6I7eEvB0ZhacHZ1kX0BYovJ8FroEsreLcq7n7kZhRMsf6jkXQ==", 2839 | "dev": true, 2840 | "requires": { 2841 | "@emmetio/abbreviation": "^2.2.2", 2842 | "@emmetio/css-abbreviation": "^2.1.4" 2843 | } 2844 | }, 2845 | "entities": { 2846 | "version": "3.0.1", 2847 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", 2848 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", 2849 | "dev": true 2850 | }, 2851 | "esbuild": { 2852 | "version": "0.13.15", 2853 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", 2854 | "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", 2855 | "dev": true, 2856 | "requires": { 2857 | "esbuild-android-arm64": "0.13.15", 2858 | "esbuild-darwin-64": "0.13.15", 2859 | "esbuild-darwin-arm64": "0.13.15", 2860 | "esbuild-freebsd-64": "0.13.15", 2861 | "esbuild-freebsd-arm64": "0.13.15", 2862 | "esbuild-linux-32": "0.13.15", 2863 | "esbuild-linux-64": "0.13.15", 2864 | "esbuild-linux-arm": "0.13.15", 2865 | "esbuild-linux-arm64": "0.13.15", 2866 | "esbuild-linux-mips64le": "0.13.15", 2867 | "esbuild-linux-ppc64le": "0.13.15", 2868 | "esbuild-netbsd-64": "0.13.15", 2869 | "esbuild-openbsd-64": "0.13.15", 2870 | "esbuild-sunos-64": "0.13.15", 2871 | "esbuild-windows-32": "0.13.15", 2872 | "esbuild-windows-64": "0.13.15", 2873 | "esbuild-windows-arm64": "0.13.15" 2874 | } 2875 | }, 2876 | "esbuild-android-arm64": { 2877 | "version": "0.13.15", 2878 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz", 2879 | "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==", 2880 | "dev": true, 2881 | "optional": true 2882 | }, 2883 | "esbuild-darwin-64": { 2884 | "version": "0.13.15", 2885 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz", 2886 | "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==", 2887 | "dev": true, 2888 | "optional": true 2889 | }, 2890 | "esbuild-darwin-arm64": { 2891 | "version": "0.13.15", 2892 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz", 2893 | "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==", 2894 | "dev": true, 2895 | "optional": true 2896 | }, 2897 | "esbuild-freebsd-64": { 2898 | "version": "0.13.15", 2899 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz", 2900 | "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==", 2901 | "dev": true, 2902 | "optional": true 2903 | }, 2904 | "esbuild-freebsd-arm64": { 2905 | "version": "0.13.15", 2906 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz", 2907 | "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==", 2908 | "dev": true, 2909 | "optional": true 2910 | }, 2911 | "esbuild-linux-32": { 2912 | "version": "0.13.15", 2913 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz", 2914 | "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==", 2915 | "dev": true, 2916 | "optional": true 2917 | }, 2918 | "esbuild-linux-64": { 2919 | "version": "0.13.15", 2920 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz", 2921 | "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", 2922 | "dev": true, 2923 | "optional": true 2924 | }, 2925 | "esbuild-linux-arm": { 2926 | "version": "0.13.15", 2927 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz", 2928 | "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==", 2929 | "dev": true, 2930 | "optional": true 2931 | }, 2932 | "esbuild-linux-arm64": { 2933 | "version": "0.13.15", 2934 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz", 2935 | "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==", 2936 | "dev": true, 2937 | "optional": true 2938 | }, 2939 | "esbuild-linux-mips64le": { 2940 | "version": "0.13.15", 2941 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz", 2942 | "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==", 2943 | "dev": true, 2944 | "optional": true 2945 | }, 2946 | "esbuild-linux-ppc64le": { 2947 | "version": "0.13.15", 2948 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz", 2949 | "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==", 2950 | "dev": true, 2951 | "optional": true 2952 | }, 2953 | "esbuild-netbsd-64": { 2954 | "version": "0.13.15", 2955 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz", 2956 | "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==", 2957 | "dev": true, 2958 | "optional": true 2959 | }, 2960 | "esbuild-openbsd-64": { 2961 | "version": "0.13.15", 2962 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz", 2963 | "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==", 2964 | "dev": true, 2965 | "optional": true 2966 | }, 2967 | "esbuild-sunos-64": { 2968 | "version": "0.13.15", 2969 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz", 2970 | "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==", 2971 | "dev": true, 2972 | "optional": true 2973 | }, 2974 | "esbuild-windows-32": { 2975 | "version": "0.13.15", 2976 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz", 2977 | "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==", 2978 | "dev": true, 2979 | "optional": true 2980 | }, 2981 | "esbuild-windows-64": { 2982 | "version": "0.13.15", 2983 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz", 2984 | "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==", 2985 | "dev": true, 2986 | "optional": true 2987 | }, 2988 | "esbuild-windows-arm64": { 2989 | "version": "0.13.15", 2990 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz", 2991 | "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==", 2992 | "dev": true, 2993 | "optional": true 2994 | }, 2995 | "estree-walker": { 2996 | "version": "2.0.2", 2997 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 2998 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 2999 | "dev": true 3000 | }, 3001 | "fill-range": { 3002 | "version": "7.0.1", 3003 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 3004 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 3005 | "dev": true, 3006 | "requires": { 3007 | "to-regex-range": "^5.0.1" 3008 | } 3009 | }, 3010 | "fs.realpath": { 3011 | "version": "1.0.0", 3012 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 3013 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 3014 | "dev": true 3015 | }, 3016 | "fsevents": { 3017 | "version": "2.3.2", 3018 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 3019 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 3020 | "dev": true, 3021 | "optional": true 3022 | }, 3023 | "function-bind": { 3024 | "version": "1.1.1", 3025 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 3026 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 3027 | "dev": true 3028 | }, 3029 | "get-intrinsic": { 3030 | "version": "1.1.1", 3031 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 3032 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 3033 | "dev": true, 3034 | "requires": { 3035 | "function-bind": "^1.1.1", 3036 | "has": "^1.0.3", 3037 | "has-symbols": "^1.0.1" 3038 | } 3039 | }, 3040 | "glob": { 3041 | "version": "7.2.0", 3042 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 3043 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 3044 | "dev": true, 3045 | "requires": { 3046 | "fs.realpath": "^1.0.0", 3047 | "inflight": "^1.0.4", 3048 | "inherits": "2", 3049 | "minimatch": "^3.0.4", 3050 | "once": "^1.3.0", 3051 | "path-is-absolute": "^1.0.0" 3052 | } 3053 | }, 3054 | "glob-parent": { 3055 | "version": "5.1.2", 3056 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 3057 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 3058 | "dev": true, 3059 | "requires": { 3060 | "is-glob": "^4.0.1" 3061 | } 3062 | }, 3063 | "has": { 3064 | "version": "1.0.3", 3065 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 3066 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 3067 | "dev": true, 3068 | "requires": { 3069 | "function-bind": "^1.1.1" 3070 | } 3071 | }, 3072 | "has-symbols": { 3073 | "version": "1.0.2", 3074 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", 3075 | "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", 3076 | "dev": true 3077 | }, 3078 | "has-tostringtag": { 3079 | "version": "1.0.0", 3080 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 3081 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 3082 | "dev": true, 3083 | "requires": { 3084 | "has-symbols": "^1.0.2" 3085 | } 3086 | }, 3087 | "htmlparser2": { 3088 | "version": "7.2.0", 3089 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", 3090 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", 3091 | "dev": true, 3092 | "requires": { 3093 | "domelementtype": "^2.0.1", 3094 | "domhandler": "^4.2.2", 3095 | "domutils": "^2.8.0", 3096 | "entities": "^3.0.1" 3097 | } 3098 | }, 3099 | "immutable": { 3100 | "version": "4.0.0", 3101 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", 3102 | "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", 3103 | "dev": true 3104 | }, 3105 | "inflight": { 3106 | "version": "1.0.6", 3107 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3108 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 3109 | "dev": true, 3110 | "requires": { 3111 | "once": "^1.3.0", 3112 | "wrappy": "1" 3113 | } 3114 | }, 3115 | "inherits": { 3116 | "version": "2.0.4", 3117 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3118 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3119 | "dev": true 3120 | }, 3121 | "is-binary-path": { 3122 | "version": "2.1.0", 3123 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 3124 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 3125 | "dev": true, 3126 | "requires": { 3127 | "binary-extensions": "^2.0.0" 3128 | } 3129 | }, 3130 | "is-core-module": { 3131 | "version": "2.8.1", 3132 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 3133 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 3134 | "dev": true, 3135 | "requires": { 3136 | "has": "^1.0.3" 3137 | } 3138 | }, 3139 | "is-expression": { 3140 | "version": "4.0.0", 3141 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", 3142 | "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", 3143 | "dev": true, 3144 | "requires": { 3145 | "acorn": "^7.1.1", 3146 | "object-assign": "^4.1.1" 3147 | } 3148 | }, 3149 | "is-extglob": { 3150 | "version": "2.1.1", 3151 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3152 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 3153 | "dev": true 3154 | }, 3155 | "is-glob": { 3156 | "version": "4.0.3", 3157 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3158 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3159 | "dev": true, 3160 | "requires": { 3161 | "is-extglob": "^2.1.1" 3162 | } 3163 | }, 3164 | "is-number": { 3165 | "version": "7.0.0", 3166 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 3167 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 3168 | "dev": true 3169 | }, 3170 | "is-promise": { 3171 | "version": "2.2.2", 3172 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", 3173 | "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", 3174 | "dev": true 3175 | }, 3176 | "is-regex": { 3177 | "version": "1.1.4", 3178 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 3179 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 3180 | "dev": true, 3181 | "requires": { 3182 | "call-bind": "^1.0.2", 3183 | "has-tostringtag": "^1.0.0" 3184 | } 3185 | }, 3186 | "js-stringify": { 3187 | "version": "1.0.2", 3188 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 3189 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=", 3190 | "dev": true 3191 | }, 3192 | "js-tokens": { 3193 | "version": "4.0.0", 3194 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 3195 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 3196 | "dev": true, 3197 | "peer": true 3198 | }, 3199 | "jsonc-parser": { 3200 | "version": "2.3.1", 3201 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", 3202 | "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", 3203 | "dev": true 3204 | }, 3205 | "jstransformer": { 3206 | "version": "1.0.0", 3207 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 3208 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", 3209 | "dev": true, 3210 | "requires": { 3211 | "is-promise": "^2.0.0", 3212 | "promise": "^7.0.1" 3213 | } 3214 | }, 3215 | "lamejstmp": { 3216 | "version": "1.0.1", 3217 | "resolved": "https://registry.npmjs.org/lamejstmp/-/lamejstmp-1.0.1.tgz", 3218 | "integrity": "sha512-eEENqMTpiDNTaeOWWbv58KVT4uh9tP7XqpG+aODm9U2eRHwH8Hsx3OnNKxd3noVN6cHmQomv5HQ9N7tzTSVxNQ==", 3219 | "dev": true, 3220 | "requires": { 3221 | "use-strict": "1.0.1" 3222 | } 3223 | }, 3224 | "loose-envify": { 3225 | "version": "1.4.0", 3226 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 3227 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 3228 | "dev": true, 3229 | "peer": true, 3230 | "requires": { 3231 | "js-tokens": "^3.0.0 || ^4.0.0" 3232 | } 3233 | }, 3234 | "lru-cache": { 3235 | "version": "6.0.0", 3236 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3237 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3238 | "dev": true, 3239 | "requires": { 3240 | "yallist": "^4.0.0" 3241 | } 3242 | }, 3243 | "magic-string": { 3244 | "version": "0.25.7", 3245 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 3246 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 3247 | "dev": true, 3248 | "requires": { 3249 | "sourcemap-codec": "^1.4.4" 3250 | } 3251 | }, 3252 | "minimatch": { 3253 | "version": "3.1.1", 3254 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.1.tgz", 3255 | "integrity": "sha512-reLxBcKUPNBnc/sVtAbxgRVFSegoGeLaSjmphNhcwcolhYLRgtJscn5mRl6YRZNQv40Y7P6JM2YhSIsbL9OB5A==", 3256 | "dev": true, 3257 | "requires": { 3258 | "brace-expansion": "^1.1.7" 3259 | } 3260 | }, 3261 | "nanoid": { 3262 | "version": "3.2.0", 3263 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", 3264 | "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", 3265 | "dev": true 3266 | }, 3267 | "normalize-path": { 3268 | "version": "3.0.0", 3269 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3270 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3271 | "dev": true 3272 | }, 3273 | "object-assign": { 3274 | "version": "4.1.1", 3275 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3276 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 3277 | "dev": true 3278 | }, 3279 | "once": { 3280 | "version": "1.4.0", 3281 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3282 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3283 | "dev": true, 3284 | "requires": { 3285 | "wrappy": "1" 3286 | } 3287 | }, 3288 | "path-is-absolute": { 3289 | "version": "1.0.1", 3290 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3291 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 3292 | "dev": true 3293 | }, 3294 | "path-parse": { 3295 | "version": "1.0.7", 3296 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3297 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3298 | "dev": true 3299 | }, 3300 | "picocolors": { 3301 | "version": "1.0.0", 3302 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3303 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 3304 | "dev": true 3305 | }, 3306 | "picomatch": { 3307 | "version": "2.3.1", 3308 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3309 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3310 | "dev": true 3311 | }, 3312 | "postcss": { 3313 | "version": "8.4.6", 3314 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", 3315 | "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", 3316 | "dev": true, 3317 | "requires": { 3318 | "nanoid": "^3.2.0", 3319 | "picocolors": "^1.0.0", 3320 | "source-map-js": "^1.0.2" 3321 | } 3322 | }, 3323 | "preact": { 3324 | "version": "10.6.5", 3325 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz", 3326 | "integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==", 3327 | "dev": true 3328 | }, 3329 | "prismjs": { 3330 | "version": "1.27.0", 3331 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", 3332 | "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", 3333 | "dev": true 3334 | }, 3335 | "promise": { 3336 | "version": "7.3.1", 3337 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 3338 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 3339 | "dev": true, 3340 | "requires": { 3341 | "asap": "~2.0.3" 3342 | } 3343 | }, 3344 | "pug": { 3345 | "version": "3.0.2", 3346 | "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", 3347 | "integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==", 3348 | "dev": true, 3349 | "requires": { 3350 | "pug-code-gen": "^3.0.2", 3351 | "pug-filters": "^4.0.0", 3352 | "pug-lexer": "^5.0.1", 3353 | "pug-linker": "^4.0.0", 3354 | "pug-load": "^3.0.0", 3355 | "pug-parser": "^6.0.0", 3356 | "pug-runtime": "^3.0.1", 3357 | "pug-strip-comments": "^2.0.0" 3358 | } 3359 | }, 3360 | "pug-attrs": { 3361 | "version": "3.0.0", 3362 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", 3363 | "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", 3364 | "dev": true, 3365 | "requires": { 3366 | "constantinople": "^4.0.1", 3367 | "js-stringify": "^1.0.2", 3368 | "pug-runtime": "^3.0.0" 3369 | } 3370 | }, 3371 | "pug-code-gen": { 3372 | "version": "3.0.2", 3373 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz", 3374 | "integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==", 3375 | "dev": true, 3376 | "requires": { 3377 | "constantinople": "^4.0.1", 3378 | "doctypes": "^1.1.0", 3379 | "js-stringify": "^1.0.2", 3380 | "pug-attrs": "^3.0.0", 3381 | "pug-error": "^2.0.0", 3382 | "pug-runtime": "^3.0.0", 3383 | "void-elements": "^3.1.0", 3384 | "with": "^7.0.0" 3385 | } 3386 | }, 3387 | "pug-error": { 3388 | "version": "2.0.0", 3389 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz", 3390 | "integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==", 3391 | "dev": true 3392 | }, 3393 | "pug-filters": { 3394 | "version": "4.0.0", 3395 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", 3396 | "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", 3397 | "dev": true, 3398 | "requires": { 3399 | "constantinople": "^4.0.1", 3400 | "jstransformer": "1.0.0", 3401 | "pug-error": "^2.0.0", 3402 | "pug-walk": "^2.0.0", 3403 | "resolve": "^1.15.1" 3404 | } 3405 | }, 3406 | "pug-lexer": { 3407 | "version": "5.0.1", 3408 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", 3409 | "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", 3410 | "dev": true, 3411 | "requires": { 3412 | "character-parser": "^2.2.0", 3413 | "is-expression": "^4.0.0", 3414 | "pug-error": "^2.0.0" 3415 | } 3416 | }, 3417 | "pug-linker": { 3418 | "version": "4.0.0", 3419 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", 3420 | "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", 3421 | "dev": true, 3422 | "requires": { 3423 | "pug-error": "^2.0.0", 3424 | "pug-walk": "^2.0.0" 3425 | } 3426 | }, 3427 | "pug-load": { 3428 | "version": "3.0.0", 3429 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", 3430 | "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", 3431 | "dev": true, 3432 | "requires": { 3433 | "object-assign": "^4.1.1", 3434 | "pug-walk": "^2.0.0" 3435 | } 3436 | }, 3437 | "pug-parser": { 3438 | "version": "6.0.0", 3439 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", 3440 | "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", 3441 | "dev": true, 3442 | "requires": { 3443 | "pug-error": "^2.0.0", 3444 | "token-stream": "1.0.0" 3445 | } 3446 | }, 3447 | "pug-runtime": { 3448 | "version": "3.0.1", 3449 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", 3450 | "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", 3451 | "dev": true 3452 | }, 3453 | "pug-strip-comments": { 3454 | "version": "2.0.0", 3455 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", 3456 | "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", 3457 | "dev": true, 3458 | "requires": { 3459 | "pug-error": "^2.0.0" 3460 | } 3461 | }, 3462 | "pug-walk": { 3463 | "version": "2.0.0", 3464 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", 3465 | "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", 3466 | "dev": true 3467 | }, 3468 | "react": { 3469 | "version": "17.0.2", 3470 | "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", 3471 | "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", 3472 | "dev": true, 3473 | "peer": true, 3474 | "requires": { 3475 | "loose-envify": "^1.1.0", 3476 | "object-assign": "^4.1.1" 3477 | } 3478 | }, 3479 | "react-dom": { 3480 | "version": "17.0.2", 3481 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", 3482 | "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", 3483 | "dev": true, 3484 | "peer": true, 3485 | "requires": { 3486 | "loose-envify": "^1.1.0", 3487 | "object-assign": "^4.1.1", 3488 | "scheduler": "^0.20.2" 3489 | } 3490 | }, 3491 | "readdirp": { 3492 | "version": "3.6.0", 3493 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3494 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3495 | "dev": true, 3496 | "requires": { 3497 | "picomatch": "^2.2.1" 3498 | } 3499 | }, 3500 | "request-light": { 3501 | "version": "0.5.7", 3502 | "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.7.tgz", 3503 | "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==", 3504 | "dev": true 3505 | }, 3506 | "resolve": { 3507 | "version": "1.22.0", 3508 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 3509 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 3510 | "dev": true, 3511 | "requires": { 3512 | "is-core-module": "^2.8.1", 3513 | "path-parse": "^1.0.7", 3514 | "supports-preserve-symlinks-flag": "^1.0.0" 3515 | } 3516 | }, 3517 | "rimraf": { 3518 | "version": "3.0.2", 3519 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3520 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3521 | "dev": true, 3522 | "requires": { 3523 | "glob": "^7.1.3" 3524 | } 3525 | }, 3526 | "rollup": { 3527 | "version": "2.67.0", 3528 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.0.tgz", 3529 | "integrity": "sha512-W83AaERwvDiHwHEF/dfAfS3z1Be5wf7n+pO3ZAO5IQadCT2lBTr7WQ2MwZZe+nodbD+n3HtC4OCOAdsOPPcKZQ==", 3530 | "dev": true, 3531 | "requires": { 3532 | "fsevents": "~2.3.2" 3533 | } 3534 | }, 3535 | "sass": { 3536 | "version": "1.49.7", 3537 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", 3538 | "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", 3539 | "dev": true, 3540 | "requires": { 3541 | "chokidar": ">=3.0.0 <4.0.0", 3542 | "immutable": "^4.0.0", 3543 | "source-map-js": ">=0.6.2 <2.0.0" 3544 | } 3545 | }, 3546 | "scheduler": { 3547 | "version": "0.20.2", 3548 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", 3549 | "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", 3550 | "dev": true, 3551 | "peer": true, 3552 | "requires": { 3553 | "loose-envify": "^1.1.0", 3554 | "object-assign": "^4.1.1" 3555 | } 3556 | }, 3557 | "semver": { 3558 | "version": "7.3.5", 3559 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 3560 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 3561 | "dev": true, 3562 | "requires": { 3563 | "lru-cache": "^6.0.0" 3564 | } 3565 | }, 3566 | "source-map": { 3567 | "version": "0.6.1", 3568 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 3569 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 3570 | "dev": true 3571 | }, 3572 | "source-map-js": { 3573 | "version": "1.0.2", 3574 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3575 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 3576 | "dev": true 3577 | }, 3578 | "sourcemap-codec": { 3579 | "version": "1.4.8", 3580 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 3581 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 3582 | "dev": true 3583 | }, 3584 | "supports-preserve-symlinks-flag": { 3585 | "version": "1.0.0", 3586 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3587 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3588 | "dev": true 3589 | }, 3590 | "to-fast-properties": { 3591 | "version": "2.0.0", 3592 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3593 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 3594 | "dev": true 3595 | }, 3596 | "to-regex-range": { 3597 | "version": "5.0.1", 3598 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3599 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3600 | "dev": true, 3601 | "requires": { 3602 | "is-number": "^7.0.0" 3603 | } 3604 | }, 3605 | "token-stream": { 3606 | "version": "1.0.0", 3607 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", 3608 | "integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ=", 3609 | "dev": true 3610 | }, 3611 | "typescript": { 3612 | "version": "4.5.5", 3613 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", 3614 | "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", 3615 | "dev": true 3616 | }, 3617 | "upath": { 3618 | "version": "2.0.1", 3619 | "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", 3620 | "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", 3621 | "dev": true 3622 | }, 3623 | "use-strict": { 3624 | "version": "1.0.1", 3625 | "resolved": "https://registry.npmjs.org/use-strict/-/use-strict-1.0.1.tgz", 3626 | "integrity": "sha512-IeiWvvEXfW5ltKVMkxq6FvNf2LojMKvB2OCeja6+ct24S1XOmQw2dGr2JyndwACWAGJva9B7yPHwAmeA9QCqAQ==", 3627 | "dev": true 3628 | }, 3629 | "vite": { 3630 | "version": "2.7.13", 3631 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.13.tgz", 3632 | "integrity": "sha512-Mq8et7f3aK0SgSxjDNfOAimZGW9XryfHRa/uV0jseQSilg+KhYDSoNb9h1rknOy6SuMkvNDLKCYAYYUMCE+IgQ==", 3633 | "dev": true, 3634 | "requires": { 3635 | "esbuild": "^0.13.12", 3636 | "fsevents": "~2.3.2", 3637 | "postcss": "^8.4.5", 3638 | "resolve": "^1.20.0", 3639 | "rollup": "^2.59.0" 3640 | } 3641 | }, 3642 | "vitepress": { 3643 | "version": "0.21.6", 3644 | "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-0.21.6.tgz", 3645 | "integrity": "sha512-OzwD2cTfvoK5VKV0UWSqu4XvUOz4vWFJ4Bdi0z8GoVkTFXkfmbFawEDVXAZwzu0Hn4/VLopgmEyooc91iGKFlg==", 3646 | "dev": true, 3647 | "requires": { 3648 | "@docsearch/css": "^3.0.0-alpha.41", 3649 | "@docsearch/js": "^3.0.0-alpha.41", 3650 | "@vitejs/plugin-vue": "^2.0.0", 3651 | "prismjs": "^1.25.0", 3652 | "vite": "^2.7.12", 3653 | "vue": "^3.2.27" 3654 | } 3655 | }, 3656 | "void-elements": { 3657 | "version": "3.1.0", 3658 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", 3659 | "integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=", 3660 | "dev": true 3661 | }, 3662 | "vscode-css-languageservice": { 3663 | "version": "5.1.12", 3664 | "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-5.1.12.tgz", 3665 | "integrity": "sha512-293C5C2732Rbhh3opTs+nQBpC5Dd+oYrEA8lc0OWdyt40oYmJ331FV7NMF1SLFSIcOFB5XveLiWUZak2oyc49Q==", 3666 | "dev": true, 3667 | "requires": { 3668 | "vscode-languageserver-textdocument": "^1.0.1", 3669 | "vscode-languageserver-types": "^3.16.0", 3670 | "vscode-nls": "^5.0.0", 3671 | "vscode-uri": "^3.0.2" 3672 | }, 3673 | "dependencies": { 3674 | "vscode-languageserver-types": { 3675 | "version": "3.16.0", 3676 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 3677 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 3678 | "dev": true 3679 | } 3680 | } 3681 | }, 3682 | "vscode-html-languageservice": { 3683 | "version": "4.2.1", 3684 | "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-4.2.1.tgz", 3685 | "integrity": "sha512-PgaToZVXJ44nFWEBuSINdDgVV6EnpC3MnXBsysR3O5TKcAfywbYeRGRy+Y4dVR7YeUgDvtb+JkJoSkaYC0mxXQ==", 3686 | "dev": true, 3687 | "requires": { 3688 | "vscode-languageserver-textdocument": "^1.0.1", 3689 | "vscode-languageserver-types": "^3.16.0", 3690 | "vscode-nls": "^5.0.0", 3691 | "vscode-uri": "^3.0.2" 3692 | }, 3693 | "dependencies": { 3694 | "vscode-languageserver-types": { 3695 | "version": "3.16.0", 3696 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 3697 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 3698 | "dev": true 3699 | } 3700 | } 3701 | }, 3702 | "vscode-json-languageservice": { 3703 | "version": "4.2.0", 3704 | "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.0.tgz", 3705 | "integrity": "sha512-XNawv0Vdy/sUK0S+hGf7cq/qsVAbIniGJr89TvZOqMCNJmpgKTy1e8PL1aWW0uy6BfWMG7vxa5lZb3ypuFtuGQ==", 3706 | "dev": true, 3707 | "requires": { 3708 | "jsonc-parser": "^3.0.0", 3709 | "vscode-languageserver-textdocument": "^1.0.3", 3710 | "vscode-languageserver-types": "^3.16.0", 3711 | "vscode-nls": "^5.0.0", 3712 | "vscode-uri": "^3.0.3" 3713 | }, 3714 | "dependencies": { 3715 | "jsonc-parser": { 3716 | "version": "3.0.0", 3717 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", 3718 | "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", 3719 | "dev": true 3720 | }, 3721 | "vscode-languageserver-types": { 3722 | "version": "3.16.0", 3723 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", 3724 | "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", 3725 | "dev": true 3726 | } 3727 | } 3728 | }, 3729 | "vscode-jsonrpc": { 3730 | "version": "8.0.0-next.6", 3731 | "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.0-next.6.tgz", 3732 | "integrity": "sha512-6Ld3RYjygn5Ih7CkAtcAwiDQC+rakj2O+PnASfNyYv3sLmm44eJpEKzuPUN30Iy2UB09AZg8T6LBKWTJTEJDVw==", 3733 | "dev": true 3734 | }, 3735 | "vscode-languageserver": { 3736 | "version": "8.0.0-next.8", 3737 | "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.0-next.8.tgz", 3738 | "integrity": "sha512-Gq0uqKbOgw7YNwPxMoNCeh7mHKMhG5j6EuoSh+w5pnKd7Eu9a74cagqf9aZDVFWW6GRpqR/Z+1o6EXqDK+g2Tg==", 3739 | "dev": true, 3740 | "requires": { 3741 | "vscode-languageserver-protocol": "3.17.0-next.14" 3742 | } 3743 | }, 3744 | "vscode-languageserver-protocol": { 3745 | "version": "3.17.0-next.14", 3746 | "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.14.tgz", 3747 | "integrity": "sha512-iangobY8dL6sFZkOx4OhRPJM9gN0I1caUsOVR+MnPozsqQUtwMXmbIcfaIf0Akp0pd3KhJDPf/tdwRX68QGeeA==", 3748 | "dev": true, 3749 | "requires": { 3750 | "vscode-jsonrpc": "8.0.0-next.6", 3751 | "vscode-languageserver-types": "3.17.0-next.7" 3752 | } 3753 | }, 3754 | "vscode-languageserver-textdocument": { 3755 | "version": "1.0.4", 3756 | "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", 3757 | "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==", 3758 | "dev": true 3759 | }, 3760 | "vscode-languageserver-types": { 3761 | "version": "3.17.0-next.7", 3762 | "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.7.tgz", 3763 | "integrity": "sha512-KH4zdG1qBXxoso61ChgpeoZYyHGJo8bV7Jv4I+fwQ1Ryy59JAxoZ9GAbhR5TeeafHctLcg6RFvY3m8Jqfu17cg==", 3764 | "dev": true 3765 | }, 3766 | "vscode-nls": { 3767 | "version": "5.0.0", 3768 | "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", 3769 | "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", 3770 | "dev": true 3771 | }, 3772 | "vscode-pug-languageservice": { 3773 | "version": "0.29.8", 3774 | "resolved": "https://registry.npmjs.org/vscode-pug-languageservice/-/vscode-pug-languageservice-0.29.8.tgz", 3775 | "integrity": "sha512-QHYAzDSJLg7GOLxCZ12qsM0dAM0dPeMSS1t4kKfzLsfpErmZpFzkAIXbidVrNMdMffGZMtTuIlcpEyWHbx96Iw==", 3776 | "dev": true, 3777 | "requires": { 3778 | "@volar/code-gen": "0.29.8", 3779 | "@volar/shared": "0.29.8", 3780 | "@volar/source-map": "0.29.8", 3781 | "@volar/transforms": "0.29.8", 3782 | "pug-lexer": "^5.0.1", 3783 | "pug-parser": "^6.0.0", 3784 | "vscode-languageserver": "^8.0.0-next.2" 3785 | } 3786 | }, 3787 | "vscode-typescript-languageservice": { 3788 | "version": "0.29.8", 3789 | "resolved": "https://registry.npmjs.org/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.29.8.tgz", 3790 | "integrity": "sha512-eecDqHk4WjEvy6VHQ6teHczppQ9yJO2wExCy7yu7WiFj35qbw0h4G6Erv46MvP3ClL8FggFzD7s1qM6vdqJUfw==", 3791 | "dev": true, 3792 | "requires": { 3793 | "@volar/shared": "0.29.8", 3794 | "semver": "^7.3.5", 3795 | "upath": "^2.0.1", 3796 | "vscode-languageserver": "^8.0.0-next.2", 3797 | "vscode-languageserver-textdocument": "^1.0.1" 3798 | } 3799 | }, 3800 | "vscode-uri": { 3801 | "version": "3.0.3", 3802 | "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", 3803 | "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", 3804 | "dev": true 3805 | }, 3806 | "vscode-vue-languageservice": { 3807 | "version": "0.29.8", 3808 | "resolved": "https://registry.npmjs.org/vscode-vue-languageservice/-/vscode-vue-languageservice-0.29.8.tgz", 3809 | "integrity": "sha512-qSJdvW5ttyGUB/8uWDKgo8vnIoFnXYlBP4Z/cn54btsRn6ZMw7IJGJU1381e7p/yGvMTLeGbugD53SghbnSa6g==", 3810 | "dev": true, 3811 | "requires": { 3812 | "@volar/code-gen": "0.29.8", 3813 | "@volar/html2pug": "0.29.8", 3814 | "@volar/shared": "0.29.8", 3815 | "@volar/source-map": "0.29.8", 3816 | "@volar/transforms": "0.29.8", 3817 | "@volar/vue-code-gen": "0.29.8", 3818 | "@vscode/emmet-helper": "^2.8.0", 3819 | "@vue/reactivity": "^3.2.21", 3820 | "@vue/shared": "^3.2.21", 3821 | "request-light": "^0.5.4", 3822 | "upath": "^2.0.1", 3823 | "vscode-css-languageservice": "^5.1.7", 3824 | "vscode-html-languageservice": "^4.1.0", 3825 | "vscode-json-languageservice": "^4.1.8", 3826 | "vscode-languageserver": "^8.0.0-next.2", 3827 | "vscode-languageserver-textdocument": "^1.0.1", 3828 | "vscode-pug-languageservice": "0.29.8", 3829 | "vscode-typescript-languageservice": "0.29.8" 3830 | } 3831 | }, 3832 | "vue": { 3833 | "version": "3.2.29", 3834 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.29.tgz", 3835 | "integrity": "sha512-cFIwr7LkbtCRanjNvh6r7wp2yUxfxeM2yPpDQpAfaaLIGZSrUmLbNiSze9nhBJt5MrZ68Iqt0O5scwAMEVxF+Q==", 3836 | "dev": true, 3837 | "requires": { 3838 | "@vue/compiler-dom": "3.2.29", 3839 | "@vue/compiler-sfc": "3.2.29", 3840 | "@vue/runtime-dom": "3.2.29", 3841 | "@vue/server-renderer": "3.2.29", 3842 | "@vue/shared": "3.2.29" 3843 | } 3844 | }, 3845 | "vue-tsc": { 3846 | "version": "0.29.8", 3847 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.29.8.tgz", 3848 | "integrity": "sha512-pT0wLRjvRuSmB+J4WJT6uuV9mO0KtSSXEAtaVXZQzyk5+DJdbLIQTbRce/TXSkfqt1l1WogO78RjtOJFiMCgfQ==", 3849 | "dev": true, 3850 | "requires": { 3851 | "@volar/shared": "0.29.8", 3852 | "vscode-vue-languageservice": "0.29.8" 3853 | } 3854 | }, 3855 | "with": { 3856 | "version": "7.0.2", 3857 | "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", 3858 | "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", 3859 | "dev": true, 3860 | "requires": { 3861 | "@babel/parser": "^7.9.6", 3862 | "@babel/types": "^7.9.6", 3863 | "assert-never": "^1.2.1", 3864 | "babel-walk": "3.0.0-canary-5" 3865 | } 3866 | }, 3867 | "wrappy": { 3868 | "version": "1.0.2", 3869 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3870 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3871 | "dev": true 3872 | }, 3873 | "yallist": { 3874 | "version": "4.0.0", 3875 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3876 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3877 | "dev": true 3878 | } 3879 | } 3880 | } 3881 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-voice-recording", 3 | "version": "1.0.1", 4 | "scripts": { 5 | "build": "rimraf dist && vue-tsc && vite build", 6 | "docs:dev": "vitepress dev docs", 7 | "docs:build": "vitepress build docs", 8 | "docs:serve": "vitepress serve docs", 9 | "publish": "rimraf dist && vue-tsc && vite build && npm publish" 10 | }, 11 | "peerDependencies": { 12 | "lamejstmp": "^1.0.1", 13 | "vue": "^3.2.25" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "^17.0.14", 17 | "@vitejs/plugin-vue": "^2.0.0", 18 | "lamejstmp": "^1.0.1", 19 | "rimraf": "^3.0.2", 20 | "sass": "^1.49.7", 21 | "typescript": "^4.4.4", 22 | "vite": "^2.7.2", 23 | "vitepress": "^0.21.6", 24 | "vue": "^3.2.25", 25 | "vue-tsc": "^0.29.8" 26 | }, 27 | "files": [ 28 | "src", 29 | "dist" 30 | ], 31 | "types": "./dist/types/index.d.ts", 32 | "module": "./dist/vue-voice-recorder.es.js", 33 | "exports": { 34 | ".": { 35 | "import": "./dist/vue-voice-recorder.es.js" 36 | }, 37 | "./dist/style.css": "./dist/style.css" 38 | }, 39 | "repository": "TheCoderDream/vue-voice-recording", 40 | "homepage": "https://github.com/TheCoderDream/vue-voice-recording", 41 | "license": "MIT", 42 | "description": "Microphone recorder for Vue", 43 | "keywords": [ 44 | "vue", 45 | "vuejs", 46 | "vue3", 47 | "typescript", 48 | "mp3 recorder", 49 | "audio recorder", 50 | "vue audio recorder", 51 | "vue microphone recorder", 52 | "vue voice recorder" 53 | ] 54 | } 55 | -------------------------------------------------------------------------------- /src/assets/fonts/myfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheCoderDream/vue-voice-recording/ff921b1c1cacd627f02318070298cc94a777c684/src/assets/fonts/myfont.woff -------------------------------------------------------------------------------- /src/assets/main.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'myfont'; 3 | src: url('fonts/myfont.woff'); 4 | } 5 | 6 | [class^='icon-'], 7 | [class*=' icon-'] { 8 | font-family: 'myfont' !important; 9 | } 10 | 11 | .icon-heart:before { 12 | content: '\e9da'; 13 | } 14 | 15 | .global-example { 16 | color: red; 17 | } 18 | -------------------------------------------------------------------------------- /src/components/VueVoiceRecording.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 110 | 111 | 206 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | import VueVoiceRecording from './VueVoiceRecording.vue' 2 | 3 | export { 4 | VueVoiceRecording 5 | } 6 | -------------------------------------------------------------------------------- /src/composables/index.ts: -------------------------------------------------------------------------------- 1 | import { useRecorder } from './useRecorder'; 2 | import type { RecorderControls } from './useRecorder'; 3 | 4 | export { 5 | useRecorder 6 | } 7 | 8 | export type { 9 | RecorderControls 10 | } 11 | -------------------------------------------------------------------------------- /src/composables/useRecorder.ts: -------------------------------------------------------------------------------- 1 | import { computed, ref, Ref } from 'vue'; 2 | import { MP3Encoder, AudioContext } from '../utils'; 3 | 4 | export interface RecorderControls { 5 | startRecording: () => void; 6 | stopRecording: () => void; 7 | pauseRecording: () => void; 8 | resumeRecording: () => void; 9 | togglePauseAndResume: () => void; 10 | toggleStartAndStop: () => void; 11 | recordingBlob?: Ref; 12 | isRecording: Ref; 13 | isPaused: Ref; 14 | recordingTime: Ref; 15 | recordingState: Ref; 16 | } 17 | 18 | export interface RecorderEvents { 19 | afterStartRecording: () => void; 20 | afterStopRecording: (data: Blob) => void; 21 | afterPauseRecording: () => void; 22 | afterResumeRecording: () => void; 23 | getAsMp3: (value: { data: Blob, url: string}) => void; 24 | } 25 | 26 | const toHHMMSS = (seconds: number): string => { 27 | return new Date(seconds * 1000).toISOString().slice(11, 19) 28 | } 29 | 30 | export const useRecorder: (options?: Partial) => RecorderControls = ( 31 | { afterStartRecording, afterStopRecording, afterPauseRecording, afterResumeRecording, getAsMp3 } = {} 32 | ) => { 33 | const isRecording = ref(false); 34 | const isPaused = ref(false); 35 | const mediaRecorder = ref(); 36 | const timerInterval = ref(null); 37 | const recordingBlob = ref(); 38 | const recordingState = ref('inactive'); 39 | const audioContext = new (window.AudioContext || 40 | window['webkitAudioContext'])(); 41 | const mic = ref(); 42 | const processor = ref(); 43 | const activeStream = ref(); 44 | const encoder = new MP3Encoder(); 45 | const _recordingTime = ref(0); 46 | const recordingTime = computed(() => { 47 | return toHHMMSS(_recordingTime.value); 48 | }) 49 | 50 | const _startTimer: () => void = () => { 51 | timerInterval.value = setInterval(() => { 52 | _recordingTime.value = _recordingTime.value + 1; 53 | }, 1000); 54 | }; 55 | 56 | const _stopTimer: () => void = () => { 57 | timerInterval.value != null && clearInterval(timerInterval.value); 58 | timerInterval.value = null; 59 | }; 60 | 61 | const toggleStartAndStop: () => void = () => { 62 | if (isRecording.value) { 63 | stopRecording(); 64 | } else { 65 | startRecording(); 66 | } 67 | } 68 | 69 | const startRecording: () => void = () => { 70 | if (timerInterval.value !== null) return; 71 | 72 | navigator.mediaDevices 73 | .getUserMedia({ audio: true }) 74 | .then((stream) => { 75 | activeStream.value = stream; 76 | isRecording.value = true; 77 | const recorder: MediaRecorder = new MediaRecorder(stream); 78 | mediaRecorder.value = recorder; 79 | recorder.start(); 80 | _startTimer(); 81 | recordingState.value = 'recording'; 82 | mic.value = audioContext.createMediaStreamSource(stream); 83 | processor.value = audioContext.createScriptProcessor(0, 1, 1); 84 | mic.value.connect(processor.value); 85 | processor.value.connect(audioContext.destination); 86 | 87 | processor.value.onaudioprocess = (event) => { 88 | encoder.encode(event.inputBuffer.getChannelData(0)); 89 | }; 90 | 91 | if (afterStartRecording) afterStartRecording(); 92 | 93 | recorder.addEventListener('dataavailable', (event: BlobEvent) => { 94 | recordingBlob.value = event.data; 95 | recorder.stream.getTracks().forEach((t) => t.stop()); 96 | mediaRecorder.value = null; 97 | if (afterStopRecording) afterStopRecording(event.data); 98 | if (getAsMp3) { 99 | getMp3().then((data) => getAsMp3({data, url: URL.createObjectURL(data)})); 100 | } 101 | }); 102 | AudioContext.startAnalyze(stream); 103 | }) 104 | .catch((err) => console.log(err)); 105 | }; 106 | 107 | const getMp3 = (): Promise => { 108 | const finalBuffer = encoder.finish(); 109 | 110 | return new Promise((resolve, reject) => { 111 | if (finalBuffer.length === 0) { 112 | reject(new Error('No buffer to send')); 113 | } else { 114 | resolve(new Blob(finalBuffer, { type: 'audio/mp3' })); 115 | encoder.clearBuffer(); 116 | } 117 | }); 118 | }; 119 | 120 | const stopRecording: () => void = () => { 121 | mediaRecorder.value?.stop(); 122 | _stopTimer(); 123 | _recordingTime.value = 0; 124 | isRecording.value = false; 125 | isPaused.value = false; 126 | recordingState.value = 'inactive'; 127 | AudioContext.resetAnalyser(); 128 | 129 | if (processor.value && mic.value) { 130 | mic.value.disconnect(); 131 | processor.value.disconnect(); 132 | if (audioContext && audioContext.state !== 'closed') { 133 | audioContext.close(); 134 | } 135 | processor.value.onaudioprocess = null; 136 | 137 | activeStream.value?.getAudioTracks().forEach((track) => track.stop()); 138 | } 139 | }; 140 | 141 | const togglePauseAndResume: () => void = () => { 142 | if (isPaused.value) { 143 | resumeRecording(); 144 | } else { 145 | pauseRecording(); 146 | } 147 | }; 148 | 149 | const pauseRecording: () => void = () => { 150 | isPaused.value = true; 151 | recordingState.value = 'paused'; 152 | AudioContext.pauseAnalyze(); 153 | mediaRecorder.value?.pause(); 154 | audioContext.suspend(); 155 | _stopTimer(); 156 | if (afterPauseRecording) afterPauseRecording(); 157 | } 158 | 159 | const resumeRecording: () => void = () => { 160 | isPaused.value = false; 161 | mediaRecorder.value?.resume(); 162 | recordingState.value = 'recording'; 163 | AudioContext.resumeAnalyze(); 164 | audioContext.resume(); 165 | _startTimer(); 166 | if (afterResumeRecording) afterResumeRecording(); 167 | } 168 | 169 | return { 170 | startRecording, 171 | stopRecording, 172 | togglePauseAndResume, 173 | pauseRecording, 174 | resumeRecording, 175 | toggleStartAndStop, 176 | recordingBlob, 177 | isRecording, 178 | isPaused, 179 | recordingTime, 180 | recordingState, 181 | }; 182 | }; 183 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from 'vue' 2 | import * as components from './components' 3 | 4 | function install (app: App) { 5 | for (const key in components) { 6 | // @ts-expect-error 7 | app.component(key, components[key]) 8 | } 9 | } 10 | 11 | import './assets/main.scss' 12 | 13 | export default { install } 14 | 15 | export * from './components'; 16 | export * from './utils'; 17 | export * from './composables'; 18 | -------------------------------------------------------------------------------- /src/utils/audio-context.ts: -------------------------------------------------------------------------------- 1 | declare global { 2 | interface Window { 3 | webkitAudioContext: typeof AudioContext 4 | } 5 | } 6 | 7 | const audioCtx = new (window.AudioContext || window['webkitAudioContext'])(); 8 | let analyser = audioCtx.createAnalyser(); 9 | 10 | export const AudioContext = { 11 | getAudioContext(): AudioContext { 12 | return audioCtx; 13 | }, 14 | 15 | startAnalyze(stream: MediaStream): void { 16 | const audioCtx = AudioContext.getAudioContext(); 17 | audioCtx.resume().then(() => { 18 | const analyser = AudioContext.getAnalyser(); 19 | const sourceNode = audioCtx.createMediaStreamSource(stream); 20 | sourceNode.connect(analyser); 21 | }); 22 | }, 23 | 24 | pauseAnalyze(): void { 25 | const audioCtx = AudioContext.getAudioContext(); 26 | void audioCtx.suspend(); 27 | }, 28 | 29 | resumeAnalyze(): void { 30 | const audioCtx = AudioContext.getAudioContext(); 31 | void audioCtx.resume(); 32 | }, 33 | 34 | getAnalyser(): AnalyserNode { 35 | return analyser; 36 | }, 37 | 38 | resetAnalyser(): void { 39 | analyser = audioCtx.createAnalyser(); 40 | }, 41 | }; 42 | -------------------------------------------------------------------------------- /src/utils/audio-visualizer.ts: -------------------------------------------------------------------------------- 1 | import { AudioContext } from './audio-context'; 2 | 3 | let drawVisual; 4 | 5 | export interface AudioVisualizationOptions { 6 | canvas: HTMLCanvasElement; 7 | width: number; 8 | height: number; 9 | backgroundColor: string; 10 | strokeColor: string; 11 | } 12 | 13 | const defaultOptions: Omit = { 14 | width: 300, 15 | height: 150, 16 | strokeColor: '#212121', 17 | backgroundColor: 'white', 18 | } 19 | 20 | export type AudioVisualizationType = 'SineWave' | 'FrequencyBars' | 'FrequencyCircles'; 21 | 22 | type Args = Partial> & Pick; 23 | 24 | export const AudioVisualizer = { 25 | visualizeSineWave({ 26 | canvas, 27 | backgroundColor, 28 | strokeColor, 29 | width, 30 | height, 31 | }: AudioVisualizationOptions): void { 32 | const canvasCtx = canvas.getContext('2d') as CanvasRenderingContext2D; 33 | let analyser = AudioContext.getAnalyser(); 34 | 35 | const bufferLength = analyser.fftSize; 36 | const dataArray = new Uint8Array(bufferLength); 37 | 38 | canvasCtx.clearRect(0, 0, width, height); 39 | 40 | function draw(): void { 41 | drawVisual = requestAnimationFrame(draw); 42 | 43 | analyser = AudioContext.getAnalyser(); 44 | 45 | analyser.getByteTimeDomainData(dataArray); 46 | 47 | canvasCtx.fillStyle = backgroundColor; 48 | canvasCtx.fillRect(0, 0, width, height); 49 | 50 | canvasCtx.lineWidth = 2; 51 | canvasCtx.strokeStyle = strokeColor; 52 | 53 | canvasCtx.beginPath(); 54 | 55 | const sliceWidth = width / bufferLength; 56 | let x = 0; 57 | 58 | for (let i = 0; i < bufferLength; i++) { 59 | const v = dataArray[i] / 128.0; 60 | const y = (v * height) / 2; 61 | 62 | if (i === 0) { 63 | canvasCtx.moveTo(x, y); 64 | } else { 65 | canvasCtx.lineTo(x, y); 66 | } 67 | 68 | x += sliceWidth; 69 | } 70 | 71 | canvasCtx.lineTo(canvas.width, canvas.height / 2); 72 | canvasCtx.stroke(); 73 | } 74 | 75 | draw(); 76 | }, 77 | 78 | visualizeFrequencyBars({ 79 | canvas, 80 | backgroundColor, 81 | strokeColor, 82 | width, 83 | height, 84 | }: AudioVisualizationOptions): void { 85 | const canvasCtx = canvas.getContext('2d') as CanvasRenderingContext2D; 86 | let analyser = AudioContext.getAnalyser(); 87 | analyser.fftSize = 256; 88 | const bufferLength = analyser.frequencyBinCount; 89 | const dataArray = new Uint8Array(bufferLength); 90 | 91 | canvasCtx.clearRect(0, 0, width, height); 92 | 93 | const draw = () => { 94 | drawVisual = requestAnimationFrame(draw); 95 | 96 | analyser = AudioContext.getAnalyser(); 97 | analyser.getByteFrequencyData(dataArray); 98 | 99 | canvasCtx.fillStyle = backgroundColor; 100 | canvasCtx.fillRect(0, 0, width, height); 101 | 102 | const barWidth = (width / bufferLength) * 2.5; 103 | let barHeight; 104 | let x = 0; 105 | 106 | for (let i = 0; i < bufferLength; i++) { 107 | barHeight = dataArray[i]; 108 | 109 | const rgb = this.hexToRgb(strokeColor); 110 | 111 | canvasCtx.fillStyle = strokeColor; 112 | canvasCtx.fillRect(x, height - barHeight / 2, barWidth, barHeight / 2); 113 | 114 | x += barWidth + 1; 115 | } 116 | }; 117 | 118 | draw(); 119 | }, 120 | 121 | visualizeFrequencyCircles({ 122 | canvas, 123 | backgroundColor, 124 | strokeColor, 125 | width, 126 | height, 127 | }: AudioVisualizationOptions): void { 128 | const canvasCtx = canvas.getContext('2d') as CanvasRenderingContext2D; 129 | let analyser = AudioContext.getAnalyser(); 130 | analyser.fftSize = 32; 131 | const bufferLength = analyser.frequencyBinCount; 132 | 133 | const dataArray = new Uint8Array(bufferLength); 134 | canvasCtx.clearRect(0, 0, width, height); 135 | 136 | const draw = () => { 137 | drawVisual = requestAnimationFrame(draw); 138 | analyser = AudioContext.getAnalyser(); 139 | analyser.getByteFrequencyData(dataArray); 140 | const reductionAmount = 3; 141 | const reducedDataArray = new Uint8Array(bufferLength / reductionAmount); 142 | 143 | for (let i = 0; i < bufferLength; i += reductionAmount) { 144 | let sum = 0; 145 | for (let j = 0; j < reductionAmount; j++) { 146 | sum += dataArray[i + j]; 147 | } 148 | reducedDataArray[i / reductionAmount] = sum / reductionAmount; 149 | } 150 | 151 | canvasCtx.clearRect(0, 0, width, height); 152 | canvasCtx.beginPath(); 153 | canvasCtx.arc( 154 | width / 2, 155 | height / 2, 156 | Math.min(height, width) / 2, 157 | 0, 158 | 2 * Math.PI 159 | ); 160 | canvasCtx.fillStyle = backgroundColor; 161 | canvasCtx.fill(); 162 | const stepSize = Math.min(height, width) / 2.0 / reducedDataArray.length; 163 | canvasCtx.strokeStyle = strokeColor; 164 | 165 | for (let i = 0; i < reducedDataArray.length; i++) { 166 | canvasCtx.beginPath(); 167 | const normalized = reducedDataArray[i] / 128; 168 | const r = stepSize * i + stepSize * normalized; 169 | canvasCtx.arc(width / 2, height / 2, r, 0, 2 * Math.PI); 170 | canvasCtx.stroke(); 171 | } 172 | }; 173 | draw(); 174 | }, 175 | 176 | hexToRgb(hex: string): {r: number, g: number, b: number} | null { 177 | const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); 178 | return result 179 | ? { 180 | r: parseInt(result[1], 16), 181 | g: parseInt(result[2], 16), 182 | b: parseInt(result[3], 16), 183 | } 184 | : null; 185 | }, 186 | 187 | visualize(type: AudioVisualizationType | undefined, options: Args | undefined): void { 188 | this[`visualize${type || 'SineWave'}`]({ 189 | ...defaultOptions, 190 | ...options 191 | } as AudioVisualizationOptions); 192 | } 193 | }; 194 | -------------------------------------------------------------------------------- /src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { AudioContext } from './audio-context'; 2 | import { AudioVisualizationOptions, AudioVisualizationType, AudioVisualizer } from './audio-visualizer'; 3 | import { MP3Encoder } from './mp3-encoder'; 4 | 5 | export { 6 | AudioContext, 7 | AudioVisualizer, 8 | MP3Encoder 9 | } 10 | 11 | export type { 12 | AudioVisualizationOptions, 13 | AudioVisualizationType 14 | } 15 | -------------------------------------------------------------------------------- /src/utils/mp3-encoder.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import { Mp3Encoder } from 'lamejstmp'; 3 | 4 | interface Config { 5 | bitRate: number; 6 | sampleRate: number; 7 | } 8 | 9 | export class MP3Encoder { 10 | config: Config; 11 | mp3Encoder: Mp3Encoder; 12 | maxSamples: number; 13 | samplesMono: Int16Array | null; 14 | dataBuffer: Int8Array[] = []; 15 | 16 | constructor(config?: Config) { 17 | this.config = { 18 | sampleRate: 44100, 19 | bitRate: 128, 20 | }; 21 | 22 | Object.assign(this.config, config); 23 | 24 | this.mp3Encoder = new Mp3Encoder( 25 | 1, 26 | this.config.sampleRate, 27 | this.config.bitRate 28 | ); 29 | 30 | this.maxSamples = 1152; 31 | 32 | this.samplesMono = null; 33 | this.clearBuffer(); 34 | } 35 | 36 | clearBuffer() { 37 | this.dataBuffer = []; 38 | } 39 | 40 | appendToBuffer(buffer: Iterable) { 41 | this.dataBuffer.push(new Int8Array(buffer)); 42 | } 43 | 44 | floatTo16BitPCM(input: Float32Array, output: Int16Array) { 45 | for (let i = 0; i < input.length; i++) { 46 | const s = Math.max(-1, Math.min(1, input[i])); 47 | output[i] = s < 0 ? s * 0x8000 : s * 0x7fff; 48 | } 49 | } 50 | 51 | convertBuffer(arrayBuffer: Float32Array) { 52 | const data = new Float32Array(arrayBuffer); 53 | const out = new Int16Array(arrayBuffer.length); 54 | this.floatTo16BitPCM(data, out); 55 | 56 | return out; 57 | } 58 | 59 | encode(arrayBuffer: Float32Array) { 60 | this.samplesMono = this.convertBuffer(arrayBuffer); 61 | let remaining = this.samplesMono.length; 62 | 63 | for (let i = 0; remaining >= 0; i += this.maxSamples) { 64 | const left = this.samplesMono.subarray(i, i + this.maxSamples); 65 | const mp3buffer = this.mp3Encoder.encodeBuffer(left); 66 | this.appendToBuffer(mp3buffer); 67 | remaining -= this.maxSamples; 68 | } 69 | } 70 | 71 | finish() { 72 | this.appendToBuffer(this.mp3Encoder.flush()); 73 | 74 | return this.dataBuffer; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "esModuleInterop": true, 12 | "lib": ["esnext", "dom"], 13 | "declaration": true, 14 | "emitDeclarationOnly": true, 15 | "declarationDir": "./dist/types", 16 | "isolatedModules": true, 17 | "skipLibCheck": true, 18 | "types": [ 19 | "vite/client" 20 | ] 21 | }, 22 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.js"] 23 | } 24 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { defineConfig } = require('vite'); 3 | import vue from '@vitejs/plugin-vue'; 4 | 5 | module.exports = defineConfig({ 6 | plugins: [vue()], // to process SFC 7 | build: { 8 | lib: { 9 | entry: path.resolve(__dirname, 'src/index.ts'), 10 | name: 'vue-voice-recorder', 11 | formats: ['es'], // adding 'umd' requires globals set to every external module 12 | fileName: (format) => `vue-voice-recorder.${format}.js`, 13 | }, 14 | rollupOptions: { 15 | // external modules won't be bundled into your library 16 | external: ['vue', 'lamejstmp'], // not every external has a global 17 | output: { 18 | // disable warning on src/index.ts using both default and named export 19 | exports: 'named', 20 | // Provide global variables to use in the UMD build 21 | // for externalized deps (not useful if 'umd' is not in lib.formats) 22 | globals: { 23 | vue: 'Vue', 24 | }, 25 | }, 26 | }, 27 | emptyOutDir: false, // to retain the types folder generated by tsc 28 | }, 29 | }); 30 | --------------------------------------------------------------------------------