├── .gitignore ├── LICENSE ├── README.md ├── jsx-runtime.js ├── package-lock.json ├── package.json ├── playwright.config.js ├── test ├── index.html ├── index.js ├── index.jsx └── test.js └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | /test-results/ 106 | /playwright-report/ 107 | /playwright/.cache/ 108 | .DS_Store 109 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Jed Schmidt 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 | # wc-jsx-runtime 2 | 3 | A JSX transform for Web Components 4 | 5 | ## Usage 6 | 7 | This library transforms JSX in web components into DOM operations with [React's new JSX transform](https://reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html), so all you need to do is configure your build tool to use `https://esm.sh/wc-jsx-runtime` for `jsxImportSource`. 8 | 9 | This transform: 10 | 11 | 1. Turns all JSX into DOM operations (ie, `
` becomes `document.createElement('div')`), 12 | 2. Automatically calculates the tag name of each web component by hyphen-casing its constructor name (ie, `AppBody` becomes `app-body`), 13 | 3. Determines whether the web component is autonomous (ie, ``) or custom (ie, `
`) based on whether it inherits from `HTMLElement`. 14 | 4. Automatically runs `customElements.define` the first time the web component is instantiated. 15 | 16 | ## Example 17 | 18 | Here's [an example](./test/index.jsx) that uses both custom (such as ``) and autonomous (such as ``) web components. 19 | 20 | ```jsx 21 | class AppHtml extends HTMLHtmlElement { 22 | connectedCallback() { 23 | this.append( 24 | , 25 | 26 | ) 27 | } 28 | } 29 | 30 | class AppHead extends HTMLHeadElement { 31 | connectedCallback() { 32 | this.append( 33 | Testing ws-jsx-runtime... 34 | ) 35 | } 36 | } 37 | 38 | class AppBody extends HTMLBodyElement { 39 | connectedCallback() { 40 | this.append() 41 | } 42 | } 43 | 44 | class HelloWorld extends HTMLElement { 45 | connectedCallback() { 46 | this.append(`Hello, ${this.getAttribute('name')}!`) 47 | } 48 | } 49 | 50 | document.documentElement.replaceWith() 51 | ``` 52 | 53 | Once run, the DOM will look like this: 54 | 55 | ```html 56 | 57 | 58 | Testing ws-jsx-runtime... 59 | 60 | 61 | Hello, JSX! 62 | 63 | 64 | ``` 65 | 66 | ## Todo 67 | 68 | - Add special cases for elements with names that don't conform to `HTML${tagName}Element` pattern. 69 | -------------------------------------------------------------------------------- /jsx-runtime.js: -------------------------------------------------------------------------------- 1 | export {jsx, jsx as jsxs, jsx as Fragment} 2 | 3 | let definitions = new Map() 4 | 5 | function jsx(node, props, key) { 6 | if (node === jsx) node = document.createDocumentFragment() 7 | 8 | else if (typeof node === 'function') { 9 | let definition = definitions.get(node) 10 | 11 | if (!definition) { 12 | let is = node.name.replace(/(.)([A-Z])/g, '$1-$2').toLowerCase() 13 | let name = Object.getPrototypeOf(node).name.replace(/^HTML|Element$/g, '').toLowerCase() 14 | definition = name ? [name, {is}] : [is] 15 | customElements.define(is, node, name ? {extends: name} : null) 16 | definitions.set(...definition) 17 | } 18 | 19 | node = document.createElement(...definition) 20 | } 21 | 22 | else node = document.createElement(node) 23 | 24 | if (key) node.setAttribute('key', key) 25 | 26 | for (let name in props) { 27 | if (name !== 'children') node.setAttribute(name, props[name]) 28 | 29 | else Array.isArray(props[name]) 30 | ? node.append(...props[name]) 31 | : node.append(props[name]) 32 | } 33 | 34 | return node 35 | } 36 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wc-jsx-runtime", 3 | "version": "1.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "wc-jsx-runtime", 9 | "version": "1.0.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "esbuild": "^0.14.51" 13 | }, 14 | "devDependencies": { 15 | "@playwright/test": "^1.24.2", 16 | "serve": "^14.0.1" 17 | } 18 | }, 19 | "node_modules/@playwright/test": { 20 | "version": "1.24.2", 21 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.24.2.tgz", 22 | "integrity": "sha512-Q4X224pRHw4Dtkk5PoNJplZCokLNvVbXD9wDQEMrHcEuvWpJWEQDeJ9gEwkZ3iCWSFSWBshIX177B231XW4wOQ==", 23 | "dev": true, 24 | "dependencies": { 25 | "@types/node": "*", 26 | "playwright-core": "1.24.2" 27 | }, 28 | "bin": { 29 | "playwright": "cli.js" 30 | }, 31 | "engines": { 32 | "node": ">=14" 33 | } 34 | }, 35 | "node_modules/@types/node": { 36 | "version": "18.6.3", 37 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", 38 | "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", 39 | "dev": true 40 | }, 41 | "node_modules/@zeit/schemas": { 42 | "version": "2.21.0", 43 | "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.21.0.tgz", 44 | "integrity": "sha512-/J4WBTpWtQ4itN1rb3ao8LfClmVcmz2pO6oYb7Qd4h7VSqUhIbJIvrykz9Ew1WMg6eFWsKdsMHc5uPbFxqlCpg==", 45 | "dev": true 46 | }, 47 | "node_modules/accepts": { 48 | "version": "1.3.8", 49 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 50 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 51 | "dev": true, 52 | "dependencies": { 53 | "mime-types": "~2.1.34", 54 | "negotiator": "0.6.3" 55 | }, 56 | "engines": { 57 | "node": ">= 0.6" 58 | } 59 | }, 60 | "node_modules/ajv": { 61 | "version": "8.11.0", 62 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", 63 | "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", 64 | "dev": true, 65 | "dependencies": { 66 | "fast-deep-equal": "^3.1.1", 67 | "json-schema-traverse": "^1.0.0", 68 | "require-from-string": "^2.0.2", 69 | "uri-js": "^4.2.2" 70 | }, 71 | "funding": { 72 | "type": "github", 73 | "url": "https://github.com/sponsors/epoberezkin" 74 | } 75 | }, 76 | "node_modules/ansi-align": { 77 | "version": "3.0.1", 78 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 79 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 80 | "dev": true, 81 | "dependencies": { 82 | "string-width": "^4.1.0" 83 | } 84 | }, 85 | "node_modules/ansi-align/node_modules/ansi-regex": { 86 | "version": "5.0.1", 87 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 88 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 89 | "dev": true, 90 | "engines": { 91 | "node": ">=8" 92 | } 93 | }, 94 | "node_modules/ansi-align/node_modules/emoji-regex": { 95 | "version": "8.0.0", 96 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 97 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 98 | "dev": true 99 | }, 100 | "node_modules/ansi-align/node_modules/string-width": { 101 | "version": "4.2.3", 102 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 103 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 104 | "dev": true, 105 | "dependencies": { 106 | "emoji-regex": "^8.0.0", 107 | "is-fullwidth-code-point": "^3.0.0", 108 | "strip-ansi": "^6.0.1" 109 | }, 110 | "engines": { 111 | "node": ">=8" 112 | } 113 | }, 114 | "node_modules/ansi-align/node_modules/strip-ansi": { 115 | "version": "6.0.1", 116 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 117 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 118 | "dev": true, 119 | "dependencies": { 120 | "ansi-regex": "^5.0.1" 121 | }, 122 | "engines": { 123 | "node": ">=8" 124 | } 125 | }, 126 | "node_modules/ansi-regex": { 127 | "version": "6.0.1", 128 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 129 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 130 | "dev": true, 131 | "engines": { 132 | "node": ">=12" 133 | }, 134 | "funding": { 135 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 136 | } 137 | }, 138 | "node_modules/ansi-styles": { 139 | "version": "6.1.0", 140 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", 141 | "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", 142 | "dev": true, 143 | "engines": { 144 | "node": ">=12" 145 | }, 146 | "funding": { 147 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 148 | } 149 | }, 150 | "node_modules/arch": { 151 | "version": "2.2.0", 152 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 153 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 154 | "dev": true, 155 | "funding": [ 156 | { 157 | "type": "github", 158 | "url": "https://github.com/sponsors/feross" 159 | }, 160 | { 161 | "type": "patreon", 162 | "url": "https://www.patreon.com/feross" 163 | }, 164 | { 165 | "type": "consulting", 166 | "url": "https://feross.org/support" 167 | } 168 | ] 169 | }, 170 | "node_modules/arg": { 171 | "version": "5.0.2", 172 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 173 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 174 | "dev": true 175 | }, 176 | "node_modules/balanced-match": { 177 | "version": "1.0.2", 178 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 179 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 180 | "dev": true 181 | }, 182 | "node_modules/boxen": { 183 | "version": "7.0.0", 184 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", 185 | "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", 186 | "dev": true, 187 | "dependencies": { 188 | "ansi-align": "^3.0.1", 189 | "camelcase": "^7.0.0", 190 | "chalk": "^5.0.1", 191 | "cli-boxes": "^3.0.0", 192 | "string-width": "^5.1.2", 193 | "type-fest": "^2.13.0", 194 | "widest-line": "^4.0.1", 195 | "wrap-ansi": "^8.0.1" 196 | }, 197 | "engines": { 198 | "node": ">=14.16" 199 | }, 200 | "funding": { 201 | "url": "https://github.com/sponsors/sindresorhus" 202 | } 203 | }, 204 | "node_modules/brace-expansion": { 205 | "version": "1.1.11", 206 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 207 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 208 | "dev": true, 209 | "dependencies": { 210 | "balanced-match": "^1.0.0", 211 | "concat-map": "0.0.1" 212 | } 213 | }, 214 | "node_modules/bytes": { 215 | "version": "3.0.0", 216 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 217 | "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", 218 | "dev": true, 219 | "engines": { 220 | "node": ">= 0.8" 221 | } 222 | }, 223 | "node_modules/camelcase": { 224 | "version": "7.0.0", 225 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", 226 | "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", 227 | "dev": true, 228 | "engines": { 229 | "node": ">=14.16" 230 | }, 231 | "funding": { 232 | "url": "https://github.com/sponsors/sindresorhus" 233 | } 234 | }, 235 | "node_modules/chalk": { 236 | "version": "5.0.1", 237 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", 238 | "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", 239 | "dev": true, 240 | "engines": { 241 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 242 | }, 243 | "funding": { 244 | "url": "https://github.com/chalk/chalk?sponsor=1" 245 | } 246 | }, 247 | "node_modules/chalk-template": { 248 | "version": "0.4.0", 249 | "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", 250 | "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", 251 | "dev": true, 252 | "dependencies": { 253 | "chalk": "^4.1.2" 254 | }, 255 | "engines": { 256 | "node": ">=12" 257 | }, 258 | "funding": { 259 | "url": "https://github.com/chalk/chalk-template?sponsor=1" 260 | } 261 | }, 262 | "node_modules/chalk-template/node_modules/ansi-styles": { 263 | "version": "4.3.0", 264 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 265 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 266 | "dev": true, 267 | "dependencies": { 268 | "color-convert": "^2.0.1" 269 | }, 270 | "engines": { 271 | "node": ">=8" 272 | }, 273 | "funding": { 274 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 275 | } 276 | }, 277 | "node_modules/chalk-template/node_modules/chalk": { 278 | "version": "4.1.2", 279 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 280 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 281 | "dev": true, 282 | "dependencies": { 283 | "ansi-styles": "^4.1.0", 284 | "supports-color": "^7.1.0" 285 | }, 286 | "engines": { 287 | "node": ">=10" 288 | }, 289 | "funding": { 290 | "url": "https://github.com/chalk/chalk?sponsor=1" 291 | } 292 | }, 293 | "node_modules/cli-boxes": { 294 | "version": "3.0.0", 295 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", 296 | "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", 297 | "dev": true, 298 | "engines": { 299 | "node": ">=10" 300 | }, 301 | "funding": { 302 | "url": "https://github.com/sponsors/sindresorhus" 303 | } 304 | }, 305 | "node_modules/clipboardy": { 306 | "version": "3.0.0", 307 | "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", 308 | "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", 309 | "dev": true, 310 | "dependencies": { 311 | "arch": "^2.2.0", 312 | "execa": "^5.1.1", 313 | "is-wsl": "^2.2.0" 314 | }, 315 | "engines": { 316 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 317 | }, 318 | "funding": { 319 | "url": "https://github.com/sponsors/sindresorhus" 320 | } 321 | }, 322 | "node_modules/color-convert": { 323 | "version": "2.0.1", 324 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 325 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 326 | "dev": true, 327 | "dependencies": { 328 | "color-name": "~1.1.4" 329 | }, 330 | "engines": { 331 | "node": ">=7.0.0" 332 | } 333 | }, 334 | "node_modules/color-name": { 335 | "version": "1.1.4", 336 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 337 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 338 | "dev": true 339 | }, 340 | "node_modules/compressible": { 341 | "version": "2.0.18", 342 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 343 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 344 | "dev": true, 345 | "dependencies": { 346 | "mime-db": ">= 1.43.0 < 2" 347 | }, 348 | "engines": { 349 | "node": ">= 0.6" 350 | } 351 | }, 352 | "node_modules/compression": { 353 | "version": "1.7.4", 354 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 355 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 356 | "dev": true, 357 | "dependencies": { 358 | "accepts": "~1.3.5", 359 | "bytes": "3.0.0", 360 | "compressible": "~2.0.16", 361 | "debug": "2.6.9", 362 | "on-headers": "~1.0.2", 363 | "safe-buffer": "5.1.2", 364 | "vary": "~1.1.2" 365 | }, 366 | "engines": { 367 | "node": ">= 0.8.0" 368 | } 369 | }, 370 | "node_modules/concat-map": { 371 | "version": "0.0.1", 372 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 373 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 374 | "dev": true 375 | }, 376 | "node_modules/content-disposition": { 377 | "version": "0.5.2", 378 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 379 | "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", 380 | "dev": true, 381 | "engines": { 382 | "node": ">= 0.6" 383 | } 384 | }, 385 | "node_modules/cross-spawn": { 386 | "version": "7.0.3", 387 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 388 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 389 | "dev": true, 390 | "dependencies": { 391 | "path-key": "^3.1.0", 392 | "shebang-command": "^2.0.0", 393 | "which": "^2.0.1" 394 | }, 395 | "engines": { 396 | "node": ">= 8" 397 | } 398 | }, 399 | "node_modules/debug": { 400 | "version": "2.6.9", 401 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 402 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 403 | "dev": true, 404 | "dependencies": { 405 | "ms": "2.0.0" 406 | } 407 | }, 408 | "node_modules/deep-extend": { 409 | "version": "0.6.0", 410 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 411 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 412 | "dev": true, 413 | "engines": { 414 | "node": ">=4.0.0" 415 | } 416 | }, 417 | "node_modules/eastasianwidth": { 418 | "version": "0.2.0", 419 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 420 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 421 | "dev": true 422 | }, 423 | "node_modules/emoji-regex": { 424 | "version": "9.2.2", 425 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 426 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 427 | "dev": true 428 | }, 429 | "node_modules/esbuild": { 430 | "version": "0.14.51", 431 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz", 432 | "integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==", 433 | "hasInstallScript": true, 434 | "bin": { 435 | "esbuild": "bin/esbuild" 436 | }, 437 | "engines": { 438 | "node": ">=12" 439 | }, 440 | "optionalDependencies": { 441 | "esbuild-android-64": "0.14.51", 442 | "esbuild-android-arm64": "0.14.51", 443 | "esbuild-darwin-64": "0.14.51", 444 | "esbuild-darwin-arm64": "0.14.51", 445 | "esbuild-freebsd-64": "0.14.51", 446 | "esbuild-freebsd-arm64": "0.14.51", 447 | "esbuild-linux-32": "0.14.51", 448 | "esbuild-linux-64": "0.14.51", 449 | "esbuild-linux-arm": "0.14.51", 450 | "esbuild-linux-arm64": "0.14.51", 451 | "esbuild-linux-mips64le": "0.14.51", 452 | "esbuild-linux-ppc64le": "0.14.51", 453 | "esbuild-linux-riscv64": "0.14.51", 454 | "esbuild-linux-s390x": "0.14.51", 455 | "esbuild-netbsd-64": "0.14.51", 456 | "esbuild-openbsd-64": "0.14.51", 457 | "esbuild-sunos-64": "0.14.51", 458 | "esbuild-windows-32": "0.14.51", 459 | "esbuild-windows-64": "0.14.51", 460 | "esbuild-windows-arm64": "0.14.51" 461 | } 462 | }, 463 | "node_modules/esbuild-android-64": { 464 | "version": "0.14.51", 465 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", 466 | "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", 467 | "cpu": [ 468 | "x64" 469 | ], 470 | "optional": true, 471 | "os": [ 472 | "android" 473 | ], 474 | "engines": { 475 | "node": ">=12" 476 | } 477 | }, 478 | "node_modules/esbuild-android-arm64": { 479 | "version": "0.14.51", 480 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", 481 | "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", 482 | "cpu": [ 483 | "arm64" 484 | ], 485 | "optional": true, 486 | "os": [ 487 | "android" 488 | ], 489 | "engines": { 490 | "node": ">=12" 491 | } 492 | }, 493 | "node_modules/esbuild-darwin-64": { 494 | "version": "0.14.51", 495 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", 496 | "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", 497 | "cpu": [ 498 | "x64" 499 | ], 500 | "optional": true, 501 | "os": [ 502 | "darwin" 503 | ], 504 | "engines": { 505 | "node": ">=12" 506 | } 507 | }, 508 | "node_modules/esbuild-darwin-arm64": { 509 | "version": "0.14.51", 510 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz", 511 | "integrity": "sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==", 512 | "cpu": [ 513 | "arm64" 514 | ], 515 | "optional": true, 516 | "os": [ 517 | "darwin" 518 | ], 519 | "engines": { 520 | "node": ">=12" 521 | } 522 | }, 523 | "node_modules/esbuild-freebsd-64": { 524 | "version": "0.14.51", 525 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", 526 | "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", 527 | "cpu": [ 528 | "x64" 529 | ], 530 | "optional": true, 531 | "os": [ 532 | "freebsd" 533 | ], 534 | "engines": { 535 | "node": ">=12" 536 | } 537 | }, 538 | "node_modules/esbuild-freebsd-arm64": { 539 | "version": "0.14.51", 540 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", 541 | "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", 542 | "cpu": [ 543 | "arm64" 544 | ], 545 | "optional": true, 546 | "os": [ 547 | "freebsd" 548 | ], 549 | "engines": { 550 | "node": ">=12" 551 | } 552 | }, 553 | "node_modules/esbuild-linux-32": { 554 | "version": "0.14.51", 555 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", 556 | "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", 557 | "cpu": [ 558 | "ia32" 559 | ], 560 | "optional": true, 561 | "os": [ 562 | "linux" 563 | ], 564 | "engines": { 565 | "node": ">=12" 566 | } 567 | }, 568 | "node_modules/esbuild-linux-64": { 569 | "version": "0.14.51", 570 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", 571 | "integrity": "sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==", 572 | "cpu": [ 573 | "x64" 574 | ], 575 | "optional": true, 576 | "os": [ 577 | "linux" 578 | ], 579 | "engines": { 580 | "node": ">=12" 581 | } 582 | }, 583 | "node_modules/esbuild-linux-arm": { 584 | "version": "0.14.51", 585 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", 586 | "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", 587 | "cpu": [ 588 | "arm" 589 | ], 590 | "optional": true, 591 | "os": [ 592 | "linux" 593 | ], 594 | "engines": { 595 | "node": ">=12" 596 | } 597 | }, 598 | "node_modules/esbuild-linux-arm64": { 599 | "version": "0.14.51", 600 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", 601 | "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", 602 | "cpu": [ 603 | "arm64" 604 | ], 605 | "optional": true, 606 | "os": [ 607 | "linux" 608 | ], 609 | "engines": { 610 | "node": ">=12" 611 | } 612 | }, 613 | "node_modules/esbuild-linux-mips64le": { 614 | "version": "0.14.51", 615 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", 616 | "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", 617 | "cpu": [ 618 | "mips64el" 619 | ], 620 | "optional": true, 621 | "os": [ 622 | "linux" 623 | ], 624 | "engines": { 625 | "node": ">=12" 626 | } 627 | }, 628 | "node_modules/esbuild-linux-ppc64le": { 629 | "version": "0.14.51", 630 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", 631 | "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", 632 | "cpu": [ 633 | "ppc64" 634 | ], 635 | "optional": true, 636 | "os": [ 637 | "linux" 638 | ], 639 | "engines": { 640 | "node": ">=12" 641 | } 642 | }, 643 | "node_modules/esbuild-linux-riscv64": { 644 | "version": "0.14.51", 645 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", 646 | "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", 647 | "cpu": [ 648 | "riscv64" 649 | ], 650 | "optional": true, 651 | "os": [ 652 | "linux" 653 | ], 654 | "engines": { 655 | "node": ">=12" 656 | } 657 | }, 658 | "node_modules/esbuild-linux-s390x": { 659 | "version": "0.14.51", 660 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", 661 | "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", 662 | "cpu": [ 663 | "s390x" 664 | ], 665 | "optional": true, 666 | "os": [ 667 | "linux" 668 | ], 669 | "engines": { 670 | "node": ">=12" 671 | } 672 | }, 673 | "node_modules/esbuild-netbsd-64": { 674 | "version": "0.14.51", 675 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", 676 | "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", 677 | "cpu": [ 678 | "x64" 679 | ], 680 | "optional": true, 681 | "os": [ 682 | "netbsd" 683 | ], 684 | "engines": { 685 | "node": ">=12" 686 | } 687 | }, 688 | "node_modules/esbuild-openbsd-64": { 689 | "version": "0.14.51", 690 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", 691 | "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", 692 | "cpu": [ 693 | "x64" 694 | ], 695 | "optional": true, 696 | "os": [ 697 | "openbsd" 698 | ], 699 | "engines": { 700 | "node": ">=12" 701 | } 702 | }, 703 | "node_modules/esbuild-sunos-64": { 704 | "version": "0.14.51", 705 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", 706 | "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", 707 | "cpu": [ 708 | "x64" 709 | ], 710 | "optional": true, 711 | "os": [ 712 | "sunos" 713 | ], 714 | "engines": { 715 | "node": ">=12" 716 | } 717 | }, 718 | "node_modules/esbuild-windows-32": { 719 | "version": "0.14.51", 720 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", 721 | "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", 722 | "cpu": [ 723 | "ia32" 724 | ], 725 | "optional": true, 726 | "os": [ 727 | "win32" 728 | ], 729 | "engines": { 730 | "node": ">=12" 731 | } 732 | }, 733 | "node_modules/esbuild-windows-64": { 734 | "version": "0.14.51", 735 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", 736 | "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", 737 | "cpu": [ 738 | "x64" 739 | ], 740 | "optional": true, 741 | "os": [ 742 | "win32" 743 | ], 744 | "engines": { 745 | "node": ">=12" 746 | } 747 | }, 748 | "node_modules/esbuild-windows-arm64": { 749 | "version": "0.14.51", 750 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", 751 | "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", 752 | "cpu": [ 753 | "arm64" 754 | ], 755 | "optional": true, 756 | "os": [ 757 | "win32" 758 | ], 759 | "engines": { 760 | "node": ">=12" 761 | } 762 | }, 763 | "node_modules/execa": { 764 | "version": "5.1.1", 765 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 766 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 767 | "dev": true, 768 | "dependencies": { 769 | "cross-spawn": "^7.0.3", 770 | "get-stream": "^6.0.0", 771 | "human-signals": "^2.1.0", 772 | "is-stream": "^2.0.0", 773 | "merge-stream": "^2.0.0", 774 | "npm-run-path": "^4.0.1", 775 | "onetime": "^5.1.2", 776 | "signal-exit": "^3.0.3", 777 | "strip-final-newline": "^2.0.0" 778 | }, 779 | "engines": { 780 | "node": ">=10" 781 | }, 782 | "funding": { 783 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 784 | } 785 | }, 786 | "node_modules/fast-deep-equal": { 787 | "version": "3.1.3", 788 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 789 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 790 | "dev": true 791 | }, 792 | "node_modules/fast-url-parser": { 793 | "version": "1.1.3", 794 | "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", 795 | "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", 796 | "dev": true, 797 | "dependencies": { 798 | "punycode": "^1.3.2" 799 | } 800 | }, 801 | "node_modules/get-stream": { 802 | "version": "6.0.1", 803 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 804 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 805 | "dev": true, 806 | "engines": { 807 | "node": ">=10" 808 | }, 809 | "funding": { 810 | "url": "https://github.com/sponsors/sindresorhus" 811 | } 812 | }, 813 | "node_modules/has-flag": { 814 | "version": "4.0.0", 815 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 816 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 817 | "dev": true, 818 | "engines": { 819 | "node": ">=8" 820 | } 821 | }, 822 | "node_modules/human-signals": { 823 | "version": "2.1.0", 824 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 825 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 826 | "dev": true, 827 | "engines": { 828 | "node": ">=10.17.0" 829 | } 830 | }, 831 | "node_modules/ini": { 832 | "version": "1.3.8", 833 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 834 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 835 | "dev": true 836 | }, 837 | "node_modules/is-docker": { 838 | "version": "2.2.1", 839 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 840 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 841 | "dev": true, 842 | "bin": { 843 | "is-docker": "cli.js" 844 | }, 845 | "engines": { 846 | "node": ">=8" 847 | }, 848 | "funding": { 849 | "url": "https://github.com/sponsors/sindresorhus" 850 | } 851 | }, 852 | "node_modules/is-fullwidth-code-point": { 853 | "version": "3.0.0", 854 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 855 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 856 | "dev": true, 857 | "engines": { 858 | "node": ">=8" 859 | } 860 | }, 861 | "node_modules/is-port-reachable": { 862 | "version": "4.0.0", 863 | "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", 864 | "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", 865 | "dev": true, 866 | "engines": { 867 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 868 | }, 869 | "funding": { 870 | "url": "https://github.com/sponsors/sindresorhus" 871 | } 872 | }, 873 | "node_modules/is-stream": { 874 | "version": "2.0.1", 875 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 876 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 877 | "dev": true, 878 | "engines": { 879 | "node": ">=8" 880 | }, 881 | "funding": { 882 | "url": "https://github.com/sponsors/sindresorhus" 883 | } 884 | }, 885 | "node_modules/is-wsl": { 886 | "version": "2.2.0", 887 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 888 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 889 | "dev": true, 890 | "dependencies": { 891 | "is-docker": "^2.0.0" 892 | }, 893 | "engines": { 894 | "node": ">=8" 895 | } 896 | }, 897 | "node_modules/isexe": { 898 | "version": "2.0.0", 899 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 900 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 901 | "dev": true 902 | }, 903 | "node_modules/json-schema-traverse": { 904 | "version": "1.0.0", 905 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 906 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 907 | "dev": true 908 | }, 909 | "node_modules/merge-stream": { 910 | "version": "2.0.0", 911 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 912 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 913 | "dev": true 914 | }, 915 | "node_modules/mime-db": { 916 | "version": "1.52.0", 917 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 918 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 919 | "dev": true, 920 | "engines": { 921 | "node": ">= 0.6" 922 | } 923 | }, 924 | "node_modules/mime-types": { 925 | "version": "2.1.35", 926 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 927 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 928 | "dev": true, 929 | "dependencies": { 930 | "mime-db": "1.52.0" 931 | }, 932 | "engines": { 933 | "node": ">= 0.6" 934 | } 935 | }, 936 | "node_modules/mimic-fn": { 937 | "version": "2.1.0", 938 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 939 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 940 | "dev": true, 941 | "engines": { 942 | "node": ">=6" 943 | } 944 | }, 945 | "node_modules/minimatch": { 946 | "version": "3.0.4", 947 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 948 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 949 | "dev": true, 950 | "dependencies": { 951 | "brace-expansion": "^1.1.7" 952 | }, 953 | "engines": { 954 | "node": "*" 955 | } 956 | }, 957 | "node_modules/minimist": { 958 | "version": "1.2.6", 959 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 960 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 961 | "dev": true 962 | }, 963 | "node_modules/ms": { 964 | "version": "2.0.0", 965 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 966 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 967 | "dev": true 968 | }, 969 | "node_modules/negotiator": { 970 | "version": "0.6.3", 971 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 972 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 973 | "dev": true, 974 | "engines": { 975 | "node": ">= 0.6" 976 | } 977 | }, 978 | "node_modules/npm-run-path": { 979 | "version": "4.0.1", 980 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 981 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 982 | "dev": true, 983 | "dependencies": { 984 | "path-key": "^3.0.0" 985 | }, 986 | "engines": { 987 | "node": ">=8" 988 | } 989 | }, 990 | "node_modules/on-headers": { 991 | "version": "1.0.2", 992 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 993 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 994 | "dev": true, 995 | "engines": { 996 | "node": ">= 0.8" 997 | } 998 | }, 999 | "node_modules/onetime": { 1000 | "version": "5.1.2", 1001 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1002 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1003 | "dev": true, 1004 | "dependencies": { 1005 | "mimic-fn": "^2.1.0" 1006 | }, 1007 | "engines": { 1008 | "node": ">=6" 1009 | }, 1010 | "funding": { 1011 | "url": "https://github.com/sponsors/sindresorhus" 1012 | } 1013 | }, 1014 | "node_modules/path-is-inside": { 1015 | "version": "1.0.2", 1016 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1017 | "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", 1018 | "dev": true 1019 | }, 1020 | "node_modules/path-key": { 1021 | "version": "3.1.1", 1022 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1023 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1024 | "dev": true, 1025 | "engines": { 1026 | "node": ">=8" 1027 | } 1028 | }, 1029 | "node_modules/path-to-regexp": { 1030 | "version": "2.2.1", 1031 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", 1032 | "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", 1033 | "dev": true 1034 | }, 1035 | "node_modules/playwright-core": { 1036 | "version": "1.24.2", 1037 | "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.24.2.tgz", 1038 | "integrity": "sha512-zfAoDoPY/0sDLsgSgLZwWmSCevIg1ym7CppBwllguVBNiHeixZkc1AdMuYUPZC6AdEYc4CxWEyLMBTw2YcmRrA==", 1039 | "dev": true, 1040 | "bin": { 1041 | "playwright": "cli.js" 1042 | }, 1043 | "engines": { 1044 | "node": ">=14" 1045 | } 1046 | }, 1047 | "node_modules/punycode": { 1048 | "version": "1.4.1", 1049 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1050 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", 1051 | "dev": true 1052 | }, 1053 | "node_modules/range-parser": { 1054 | "version": "1.2.0", 1055 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 1056 | "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", 1057 | "dev": true, 1058 | "engines": { 1059 | "node": ">= 0.6" 1060 | } 1061 | }, 1062 | "node_modules/rc": { 1063 | "version": "1.2.8", 1064 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1065 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1066 | "dev": true, 1067 | "dependencies": { 1068 | "deep-extend": "^0.6.0", 1069 | "ini": "~1.3.0", 1070 | "minimist": "^1.2.0", 1071 | "strip-json-comments": "~2.0.1" 1072 | }, 1073 | "bin": { 1074 | "rc": "cli.js" 1075 | } 1076 | }, 1077 | "node_modules/registry-auth-token": { 1078 | "version": "3.3.2", 1079 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", 1080 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", 1081 | "dev": true, 1082 | "dependencies": { 1083 | "rc": "^1.1.6", 1084 | "safe-buffer": "^5.0.1" 1085 | } 1086 | }, 1087 | "node_modules/registry-url": { 1088 | "version": "3.1.0", 1089 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 1090 | "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", 1091 | "dev": true, 1092 | "dependencies": { 1093 | "rc": "^1.0.1" 1094 | }, 1095 | "engines": { 1096 | "node": ">=0.10.0" 1097 | } 1098 | }, 1099 | "node_modules/require-from-string": { 1100 | "version": "2.0.2", 1101 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1102 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1103 | "dev": true, 1104 | "engines": { 1105 | "node": ">=0.10.0" 1106 | } 1107 | }, 1108 | "node_modules/safe-buffer": { 1109 | "version": "5.1.2", 1110 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1111 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1112 | "dev": true 1113 | }, 1114 | "node_modules/serve": { 1115 | "version": "14.0.1", 1116 | "resolved": "https://registry.npmjs.org/serve/-/serve-14.0.1.tgz", 1117 | "integrity": "sha512-tNGwxl27FwA8TbmMQqN0jTaSx8/trL532qZsJHX1VdiEIjjtMJHCs7AFS6OvtC7cTHOvmjXqt5yczejU6CV2Xg==", 1118 | "dev": true, 1119 | "dependencies": { 1120 | "@zeit/schemas": "2.21.0", 1121 | "ajv": "8.11.0", 1122 | "arg": "5.0.2", 1123 | "boxen": "7.0.0", 1124 | "chalk": "5.0.1", 1125 | "chalk-template": "0.4.0", 1126 | "clipboardy": "3.0.0", 1127 | "compression": "1.7.4", 1128 | "is-port-reachable": "4.0.0", 1129 | "serve-handler": "6.1.3", 1130 | "update-check": "1.5.4" 1131 | }, 1132 | "bin": { 1133 | "serve": "build/main.js" 1134 | }, 1135 | "engines": { 1136 | "node": ">= 14" 1137 | } 1138 | }, 1139 | "node_modules/serve-handler": { 1140 | "version": "6.1.3", 1141 | "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", 1142 | "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", 1143 | "dev": true, 1144 | "dependencies": { 1145 | "bytes": "3.0.0", 1146 | "content-disposition": "0.5.2", 1147 | "fast-url-parser": "1.1.3", 1148 | "mime-types": "2.1.18", 1149 | "minimatch": "3.0.4", 1150 | "path-is-inside": "1.0.2", 1151 | "path-to-regexp": "2.2.1", 1152 | "range-parser": "1.2.0" 1153 | } 1154 | }, 1155 | "node_modules/serve-handler/node_modules/mime-db": { 1156 | "version": "1.33.0", 1157 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 1158 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 1159 | "dev": true, 1160 | "engines": { 1161 | "node": ">= 0.6" 1162 | } 1163 | }, 1164 | "node_modules/serve-handler/node_modules/mime-types": { 1165 | "version": "2.1.18", 1166 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 1167 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 1168 | "dev": true, 1169 | "dependencies": { 1170 | "mime-db": "~1.33.0" 1171 | }, 1172 | "engines": { 1173 | "node": ">= 0.6" 1174 | } 1175 | }, 1176 | "node_modules/shebang-command": { 1177 | "version": "2.0.0", 1178 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1179 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1180 | "dev": true, 1181 | "dependencies": { 1182 | "shebang-regex": "^3.0.0" 1183 | }, 1184 | "engines": { 1185 | "node": ">=8" 1186 | } 1187 | }, 1188 | "node_modules/shebang-regex": { 1189 | "version": "3.0.0", 1190 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1191 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1192 | "dev": true, 1193 | "engines": { 1194 | "node": ">=8" 1195 | } 1196 | }, 1197 | "node_modules/signal-exit": { 1198 | "version": "3.0.7", 1199 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1200 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1201 | "dev": true 1202 | }, 1203 | "node_modules/string-width": { 1204 | "version": "5.1.2", 1205 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1206 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1207 | "dev": true, 1208 | "dependencies": { 1209 | "eastasianwidth": "^0.2.0", 1210 | "emoji-regex": "^9.2.2", 1211 | "strip-ansi": "^7.0.1" 1212 | }, 1213 | "engines": { 1214 | "node": ">=12" 1215 | }, 1216 | "funding": { 1217 | "url": "https://github.com/sponsors/sindresorhus" 1218 | } 1219 | }, 1220 | "node_modules/strip-ansi": { 1221 | "version": "7.0.1", 1222 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 1223 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 1224 | "dev": true, 1225 | "dependencies": { 1226 | "ansi-regex": "^6.0.1" 1227 | }, 1228 | "engines": { 1229 | "node": ">=12" 1230 | }, 1231 | "funding": { 1232 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1233 | } 1234 | }, 1235 | "node_modules/strip-final-newline": { 1236 | "version": "2.0.0", 1237 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 1238 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 1239 | "dev": true, 1240 | "engines": { 1241 | "node": ">=6" 1242 | } 1243 | }, 1244 | "node_modules/strip-json-comments": { 1245 | "version": "2.0.1", 1246 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1247 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 1248 | "dev": true, 1249 | "engines": { 1250 | "node": ">=0.10.0" 1251 | } 1252 | }, 1253 | "node_modules/supports-color": { 1254 | "version": "7.2.0", 1255 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1256 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1257 | "dev": true, 1258 | "dependencies": { 1259 | "has-flag": "^4.0.0" 1260 | }, 1261 | "engines": { 1262 | "node": ">=8" 1263 | } 1264 | }, 1265 | "node_modules/type-fest": { 1266 | "version": "2.18.0", 1267 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.18.0.tgz", 1268 | "integrity": "sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw==", 1269 | "dev": true, 1270 | "engines": { 1271 | "node": ">=12.20" 1272 | }, 1273 | "funding": { 1274 | "url": "https://github.com/sponsors/sindresorhus" 1275 | } 1276 | }, 1277 | "node_modules/update-check": { 1278 | "version": "1.5.4", 1279 | "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", 1280 | "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", 1281 | "dev": true, 1282 | "dependencies": { 1283 | "registry-auth-token": "3.3.2", 1284 | "registry-url": "3.1.0" 1285 | } 1286 | }, 1287 | "node_modules/uri-js": { 1288 | "version": "4.4.1", 1289 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1290 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1291 | "dev": true, 1292 | "dependencies": { 1293 | "punycode": "^2.1.0" 1294 | } 1295 | }, 1296 | "node_modules/uri-js/node_modules/punycode": { 1297 | "version": "2.1.1", 1298 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1299 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1300 | "dev": true, 1301 | "engines": { 1302 | "node": ">=6" 1303 | } 1304 | }, 1305 | "node_modules/vary": { 1306 | "version": "1.1.2", 1307 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1308 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 1309 | "dev": true, 1310 | "engines": { 1311 | "node": ">= 0.8" 1312 | } 1313 | }, 1314 | "node_modules/which": { 1315 | "version": "2.0.2", 1316 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1317 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "isexe": "^2.0.0" 1321 | }, 1322 | "bin": { 1323 | "node-which": "bin/node-which" 1324 | }, 1325 | "engines": { 1326 | "node": ">= 8" 1327 | } 1328 | }, 1329 | "node_modules/widest-line": { 1330 | "version": "4.0.1", 1331 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", 1332 | "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", 1333 | "dev": true, 1334 | "dependencies": { 1335 | "string-width": "^5.0.1" 1336 | }, 1337 | "engines": { 1338 | "node": ">=12" 1339 | }, 1340 | "funding": { 1341 | "url": "https://github.com/sponsors/sindresorhus" 1342 | } 1343 | }, 1344 | "node_modules/wrap-ansi": { 1345 | "version": "8.0.1", 1346 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", 1347 | "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", 1348 | "dev": true, 1349 | "dependencies": { 1350 | "ansi-styles": "^6.1.0", 1351 | "string-width": "^5.0.1", 1352 | "strip-ansi": "^7.0.1" 1353 | }, 1354 | "engines": { 1355 | "node": ">=12" 1356 | }, 1357 | "funding": { 1358 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1359 | } 1360 | } 1361 | }, 1362 | "dependencies": { 1363 | "@playwright/test": { 1364 | "version": "1.24.2", 1365 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.24.2.tgz", 1366 | "integrity": "sha512-Q4X224pRHw4Dtkk5PoNJplZCokLNvVbXD9wDQEMrHcEuvWpJWEQDeJ9gEwkZ3iCWSFSWBshIX177B231XW4wOQ==", 1367 | "dev": true, 1368 | "requires": { 1369 | "@types/node": "*", 1370 | "playwright-core": "1.24.2" 1371 | } 1372 | }, 1373 | "@types/node": { 1374 | "version": "18.6.3", 1375 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz", 1376 | "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==", 1377 | "dev": true 1378 | }, 1379 | "@zeit/schemas": { 1380 | "version": "2.21.0", 1381 | "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.21.0.tgz", 1382 | "integrity": "sha512-/J4WBTpWtQ4itN1rb3ao8LfClmVcmz2pO6oYb7Qd4h7VSqUhIbJIvrykz9Ew1WMg6eFWsKdsMHc5uPbFxqlCpg==", 1383 | "dev": true 1384 | }, 1385 | "accepts": { 1386 | "version": "1.3.8", 1387 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 1388 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 1389 | "dev": true, 1390 | "requires": { 1391 | "mime-types": "~2.1.34", 1392 | "negotiator": "0.6.3" 1393 | } 1394 | }, 1395 | "ajv": { 1396 | "version": "8.11.0", 1397 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", 1398 | "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", 1399 | "dev": true, 1400 | "requires": { 1401 | "fast-deep-equal": "^3.1.1", 1402 | "json-schema-traverse": "^1.0.0", 1403 | "require-from-string": "^2.0.2", 1404 | "uri-js": "^4.2.2" 1405 | } 1406 | }, 1407 | "ansi-align": { 1408 | "version": "3.0.1", 1409 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 1410 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 1411 | "dev": true, 1412 | "requires": { 1413 | "string-width": "^4.1.0" 1414 | }, 1415 | "dependencies": { 1416 | "ansi-regex": { 1417 | "version": "5.0.1", 1418 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1419 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1420 | "dev": true 1421 | }, 1422 | "emoji-regex": { 1423 | "version": "8.0.0", 1424 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1425 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 1426 | "dev": true 1427 | }, 1428 | "string-width": { 1429 | "version": "4.2.3", 1430 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1431 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1432 | "dev": true, 1433 | "requires": { 1434 | "emoji-regex": "^8.0.0", 1435 | "is-fullwidth-code-point": "^3.0.0", 1436 | "strip-ansi": "^6.0.1" 1437 | } 1438 | }, 1439 | "strip-ansi": { 1440 | "version": "6.0.1", 1441 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1442 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1443 | "dev": true, 1444 | "requires": { 1445 | "ansi-regex": "^5.0.1" 1446 | } 1447 | } 1448 | } 1449 | }, 1450 | "ansi-regex": { 1451 | "version": "6.0.1", 1452 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1453 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1454 | "dev": true 1455 | }, 1456 | "ansi-styles": { 1457 | "version": "6.1.0", 1458 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", 1459 | "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", 1460 | "dev": true 1461 | }, 1462 | "arch": { 1463 | "version": "2.2.0", 1464 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 1465 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 1466 | "dev": true 1467 | }, 1468 | "arg": { 1469 | "version": "5.0.2", 1470 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1471 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 1472 | "dev": true 1473 | }, 1474 | "balanced-match": { 1475 | "version": "1.0.2", 1476 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1477 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1478 | "dev": true 1479 | }, 1480 | "boxen": { 1481 | "version": "7.0.0", 1482 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", 1483 | "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", 1484 | "dev": true, 1485 | "requires": { 1486 | "ansi-align": "^3.0.1", 1487 | "camelcase": "^7.0.0", 1488 | "chalk": "^5.0.1", 1489 | "cli-boxes": "^3.0.0", 1490 | "string-width": "^5.1.2", 1491 | "type-fest": "^2.13.0", 1492 | "widest-line": "^4.0.1", 1493 | "wrap-ansi": "^8.0.1" 1494 | } 1495 | }, 1496 | "brace-expansion": { 1497 | "version": "1.1.11", 1498 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1499 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1500 | "dev": true, 1501 | "requires": { 1502 | "balanced-match": "^1.0.0", 1503 | "concat-map": "0.0.1" 1504 | } 1505 | }, 1506 | "bytes": { 1507 | "version": "3.0.0", 1508 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 1509 | "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", 1510 | "dev": true 1511 | }, 1512 | "camelcase": { 1513 | "version": "7.0.0", 1514 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", 1515 | "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", 1516 | "dev": true 1517 | }, 1518 | "chalk": { 1519 | "version": "5.0.1", 1520 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", 1521 | "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", 1522 | "dev": true 1523 | }, 1524 | "chalk-template": { 1525 | "version": "0.4.0", 1526 | "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", 1527 | "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", 1528 | "dev": true, 1529 | "requires": { 1530 | "chalk": "^4.1.2" 1531 | }, 1532 | "dependencies": { 1533 | "ansi-styles": { 1534 | "version": "4.3.0", 1535 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1536 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1537 | "dev": true, 1538 | "requires": { 1539 | "color-convert": "^2.0.1" 1540 | } 1541 | }, 1542 | "chalk": { 1543 | "version": "4.1.2", 1544 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1545 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1546 | "dev": true, 1547 | "requires": { 1548 | "ansi-styles": "^4.1.0", 1549 | "supports-color": "^7.1.0" 1550 | } 1551 | } 1552 | } 1553 | }, 1554 | "cli-boxes": { 1555 | "version": "3.0.0", 1556 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", 1557 | "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", 1558 | "dev": true 1559 | }, 1560 | "clipboardy": { 1561 | "version": "3.0.0", 1562 | "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", 1563 | "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", 1564 | "dev": true, 1565 | "requires": { 1566 | "arch": "^2.2.0", 1567 | "execa": "^5.1.1", 1568 | "is-wsl": "^2.2.0" 1569 | } 1570 | }, 1571 | "color-convert": { 1572 | "version": "2.0.1", 1573 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1574 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1575 | "dev": true, 1576 | "requires": { 1577 | "color-name": "~1.1.4" 1578 | } 1579 | }, 1580 | "color-name": { 1581 | "version": "1.1.4", 1582 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1583 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1584 | "dev": true 1585 | }, 1586 | "compressible": { 1587 | "version": "2.0.18", 1588 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 1589 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 1590 | "dev": true, 1591 | "requires": { 1592 | "mime-db": ">= 1.43.0 < 2" 1593 | } 1594 | }, 1595 | "compression": { 1596 | "version": "1.7.4", 1597 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 1598 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 1599 | "dev": true, 1600 | "requires": { 1601 | "accepts": "~1.3.5", 1602 | "bytes": "3.0.0", 1603 | "compressible": "~2.0.16", 1604 | "debug": "2.6.9", 1605 | "on-headers": "~1.0.2", 1606 | "safe-buffer": "5.1.2", 1607 | "vary": "~1.1.2" 1608 | } 1609 | }, 1610 | "concat-map": { 1611 | "version": "0.0.1", 1612 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1613 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1614 | "dev": true 1615 | }, 1616 | "content-disposition": { 1617 | "version": "0.5.2", 1618 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 1619 | "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", 1620 | "dev": true 1621 | }, 1622 | "cross-spawn": { 1623 | "version": "7.0.3", 1624 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1625 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1626 | "dev": true, 1627 | "requires": { 1628 | "path-key": "^3.1.0", 1629 | "shebang-command": "^2.0.0", 1630 | "which": "^2.0.1" 1631 | } 1632 | }, 1633 | "debug": { 1634 | "version": "2.6.9", 1635 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1636 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1637 | "dev": true, 1638 | "requires": { 1639 | "ms": "2.0.0" 1640 | } 1641 | }, 1642 | "deep-extend": { 1643 | "version": "0.6.0", 1644 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1645 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1646 | "dev": true 1647 | }, 1648 | "eastasianwidth": { 1649 | "version": "0.2.0", 1650 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1651 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1652 | "dev": true 1653 | }, 1654 | "emoji-regex": { 1655 | "version": "9.2.2", 1656 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1657 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1658 | "dev": true 1659 | }, 1660 | "esbuild": { 1661 | "version": "0.14.51", 1662 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz", 1663 | "integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==", 1664 | "requires": { 1665 | "esbuild-android-64": "0.14.51", 1666 | "esbuild-android-arm64": "0.14.51", 1667 | "esbuild-darwin-64": "0.14.51", 1668 | "esbuild-darwin-arm64": "0.14.51", 1669 | "esbuild-freebsd-64": "0.14.51", 1670 | "esbuild-freebsd-arm64": "0.14.51", 1671 | "esbuild-linux-32": "0.14.51", 1672 | "esbuild-linux-64": "0.14.51", 1673 | "esbuild-linux-arm": "0.14.51", 1674 | "esbuild-linux-arm64": "0.14.51", 1675 | "esbuild-linux-mips64le": "0.14.51", 1676 | "esbuild-linux-ppc64le": "0.14.51", 1677 | "esbuild-linux-riscv64": "0.14.51", 1678 | "esbuild-linux-s390x": "0.14.51", 1679 | "esbuild-netbsd-64": "0.14.51", 1680 | "esbuild-openbsd-64": "0.14.51", 1681 | "esbuild-sunos-64": "0.14.51", 1682 | "esbuild-windows-32": "0.14.51", 1683 | "esbuild-windows-64": "0.14.51", 1684 | "esbuild-windows-arm64": "0.14.51" 1685 | } 1686 | }, 1687 | "esbuild-android-64": { 1688 | "version": "0.14.51", 1689 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", 1690 | "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", 1691 | "optional": true 1692 | }, 1693 | "esbuild-android-arm64": { 1694 | "version": "0.14.51", 1695 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", 1696 | "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", 1697 | "optional": true 1698 | }, 1699 | "esbuild-darwin-64": { 1700 | "version": "0.14.51", 1701 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", 1702 | "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", 1703 | "optional": true 1704 | }, 1705 | "esbuild-darwin-arm64": { 1706 | "version": "0.14.51", 1707 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz", 1708 | "integrity": "sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==", 1709 | "optional": true 1710 | }, 1711 | "esbuild-freebsd-64": { 1712 | "version": "0.14.51", 1713 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", 1714 | "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", 1715 | "optional": true 1716 | }, 1717 | "esbuild-freebsd-arm64": { 1718 | "version": "0.14.51", 1719 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", 1720 | "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", 1721 | "optional": true 1722 | }, 1723 | "esbuild-linux-32": { 1724 | "version": "0.14.51", 1725 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", 1726 | "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", 1727 | "optional": true 1728 | }, 1729 | "esbuild-linux-64": { 1730 | "version": "0.14.51", 1731 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", 1732 | "integrity": "sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==", 1733 | "optional": true 1734 | }, 1735 | "esbuild-linux-arm": { 1736 | "version": "0.14.51", 1737 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", 1738 | "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", 1739 | "optional": true 1740 | }, 1741 | "esbuild-linux-arm64": { 1742 | "version": "0.14.51", 1743 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", 1744 | "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", 1745 | "optional": true 1746 | }, 1747 | "esbuild-linux-mips64le": { 1748 | "version": "0.14.51", 1749 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", 1750 | "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", 1751 | "optional": true 1752 | }, 1753 | "esbuild-linux-ppc64le": { 1754 | "version": "0.14.51", 1755 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", 1756 | "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", 1757 | "optional": true 1758 | }, 1759 | "esbuild-linux-riscv64": { 1760 | "version": "0.14.51", 1761 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", 1762 | "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", 1763 | "optional": true 1764 | }, 1765 | "esbuild-linux-s390x": { 1766 | "version": "0.14.51", 1767 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", 1768 | "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", 1769 | "optional": true 1770 | }, 1771 | "esbuild-netbsd-64": { 1772 | "version": "0.14.51", 1773 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", 1774 | "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", 1775 | "optional": true 1776 | }, 1777 | "esbuild-openbsd-64": { 1778 | "version": "0.14.51", 1779 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", 1780 | "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", 1781 | "optional": true 1782 | }, 1783 | "esbuild-sunos-64": { 1784 | "version": "0.14.51", 1785 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", 1786 | "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", 1787 | "optional": true 1788 | }, 1789 | "esbuild-windows-32": { 1790 | "version": "0.14.51", 1791 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", 1792 | "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", 1793 | "optional": true 1794 | }, 1795 | "esbuild-windows-64": { 1796 | "version": "0.14.51", 1797 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", 1798 | "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", 1799 | "optional": true 1800 | }, 1801 | "esbuild-windows-arm64": { 1802 | "version": "0.14.51", 1803 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", 1804 | "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", 1805 | "optional": true 1806 | }, 1807 | "execa": { 1808 | "version": "5.1.1", 1809 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1810 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1811 | "dev": true, 1812 | "requires": { 1813 | "cross-spawn": "^7.0.3", 1814 | "get-stream": "^6.0.0", 1815 | "human-signals": "^2.1.0", 1816 | "is-stream": "^2.0.0", 1817 | "merge-stream": "^2.0.0", 1818 | "npm-run-path": "^4.0.1", 1819 | "onetime": "^5.1.2", 1820 | "signal-exit": "^3.0.3", 1821 | "strip-final-newline": "^2.0.0" 1822 | } 1823 | }, 1824 | "fast-deep-equal": { 1825 | "version": "3.1.3", 1826 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1827 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1828 | "dev": true 1829 | }, 1830 | "fast-url-parser": { 1831 | "version": "1.1.3", 1832 | "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", 1833 | "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", 1834 | "dev": true, 1835 | "requires": { 1836 | "punycode": "^1.3.2" 1837 | } 1838 | }, 1839 | "get-stream": { 1840 | "version": "6.0.1", 1841 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1842 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1843 | "dev": true 1844 | }, 1845 | "has-flag": { 1846 | "version": "4.0.0", 1847 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1848 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1849 | "dev": true 1850 | }, 1851 | "human-signals": { 1852 | "version": "2.1.0", 1853 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1854 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1855 | "dev": true 1856 | }, 1857 | "ini": { 1858 | "version": "1.3.8", 1859 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1860 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1861 | "dev": true 1862 | }, 1863 | "is-docker": { 1864 | "version": "2.2.1", 1865 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1866 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1867 | "dev": true 1868 | }, 1869 | "is-fullwidth-code-point": { 1870 | "version": "3.0.0", 1871 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1872 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1873 | "dev": true 1874 | }, 1875 | "is-port-reachable": { 1876 | "version": "4.0.0", 1877 | "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", 1878 | "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", 1879 | "dev": true 1880 | }, 1881 | "is-stream": { 1882 | "version": "2.0.1", 1883 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1884 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1885 | "dev": true 1886 | }, 1887 | "is-wsl": { 1888 | "version": "2.2.0", 1889 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 1890 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 1891 | "dev": true, 1892 | "requires": { 1893 | "is-docker": "^2.0.0" 1894 | } 1895 | }, 1896 | "isexe": { 1897 | "version": "2.0.0", 1898 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1899 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1900 | "dev": true 1901 | }, 1902 | "json-schema-traverse": { 1903 | "version": "1.0.0", 1904 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1905 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1906 | "dev": true 1907 | }, 1908 | "merge-stream": { 1909 | "version": "2.0.0", 1910 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1911 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1912 | "dev": true 1913 | }, 1914 | "mime-db": { 1915 | "version": "1.52.0", 1916 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1917 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1918 | "dev": true 1919 | }, 1920 | "mime-types": { 1921 | "version": "2.1.35", 1922 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1923 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1924 | "dev": true, 1925 | "requires": { 1926 | "mime-db": "1.52.0" 1927 | } 1928 | }, 1929 | "mimic-fn": { 1930 | "version": "2.1.0", 1931 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1932 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1933 | "dev": true 1934 | }, 1935 | "minimatch": { 1936 | "version": "3.0.4", 1937 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1938 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1939 | "dev": true, 1940 | "requires": { 1941 | "brace-expansion": "^1.1.7" 1942 | } 1943 | }, 1944 | "minimist": { 1945 | "version": "1.2.6", 1946 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1947 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1948 | "dev": true 1949 | }, 1950 | "ms": { 1951 | "version": "2.0.0", 1952 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1953 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 1954 | "dev": true 1955 | }, 1956 | "negotiator": { 1957 | "version": "0.6.3", 1958 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1959 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1960 | "dev": true 1961 | }, 1962 | "npm-run-path": { 1963 | "version": "4.0.1", 1964 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 1965 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 1966 | "dev": true, 1967 | "requires": { 1968 | "path-key": "^3.0.0" 1969 | } 1970 | }, 1971 | "on-headers": { 1972 | "version": "1.0.2", 1973 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1974 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 1975 | "dev": true 1976 | }, 1977 | "onetime": { 1978 | "version": "5.1.2", 1979 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1980 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1981 | "dev": true, 1982 | "requires": { 1983 | "mimic-fn": "^2.1.0" 1984 | } 1985 | }, 1986 | "path-is-inside": { 1987 | "version": "1.0.2", 1988 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1989 | "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", 1990 | "dev": true 1991 | }, 1992 | "path-key": { 1993 | "version": "3.1.1", 1994 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1995 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1996 | "dev": true 1997 | }, 1998 | "path-to-regexp": { 1999 | "version": "2.2.1", 2000 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", 2001 | "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", 2002 | "dev": true 2003 | }, 2004 | "playwright-core": { 2005 | "version": "1.24.2", 2006 | "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.24.2.tgz", 2007 | "integrity": "sha512-zfAoDoPY/0sDLsgSgLZwWmSCevIg1ym7CppBwllguVBNiHeixZkc1AdMuYUPZC6AdEYc4CxWEyLMBTw2YcmRrA==", 2008 | "dev": true 2009 | }, 2010 | "punycode": { 2011 | "version": "1.4.1", 2012 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2013 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", 2014 | "dev": true 2015 | }, 2016 | "range-parser": { 2017 | "version": "1.2.0", 2018 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2019 | "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", 2020 | "dev": true 2021 | }, 2022 | "rc": { 2023 | "version": "1.2.8", 2024 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2025 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2026 | "dev": true, 2027 | "requires": { 2028 | "deep-extend": "^0.6.0", 2029 | "ini": "~1.3.0", 2030 | "minimist": "^1.2.0", 2031 | "strip-json-comments": "~2.0.1" 2032 | } 2033 | }, 2034 | "registry-auth-token": { 2035 | "version": "3.3.2", 2036 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", 2037 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", 2038 | "dev": true, 2039 | "requires": { 2040 | "rc": "^1.1.6", 2041 | "safe-buffer": "^5.0.1" 2042 | } 2043 | }, 2044 | "registry-url": { 2045 | "version": "3.1.0", 2046 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 2047 | "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", 2048 | "dev": true, 2049 | "requires": { 2050 | "rc": "^1.0.1" 2051 | } 2052 | }, 2053 | "require-from-string": { 2054 | "version": "2.0.2", 2055 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2056 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2057 | "dev": true 2058 | }, 2059 | "safe-buffer": { 2060 | "version": "5.1.2", 2061 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2062 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2063 | "dev": true 2064 | }, 2065 | "serve": { 2066 | "version": "14.0.1", 2067 | "resolved": "https://registry.npmjs.org/serve/-/serve-14.0.1.tgz", 2068 | "integrity": "sha512-tNGwxl27FwA8TbmMQqN0jTaSx8/trL532qZsJHX1VdiEIjjtMJHCs7AFS6OvtC7cTHOvmjXqt5yczejU6CV2Xg==", 2069 | "dev": true, 2070 | "requires": { 2071 | "@zeit/schemas": "2.21.0", 2072 | "ajv": "8.11.0", 2073 | "arg": "5.0.2", 2074 | "boxen": "7.0.0", 2075 | "chalk": "5.0.1", 2076 | "chalk-template": "0.4.0", 2077 | "clipboardy": "3.0.0", 2078 | "compression": "1.7.4", 2079 | "is-port-reachable": "4.0.0", 2080 | "serve-handler": "6.1.3", 2081 | "update-check": "1.5.4" 2082 | } 2083 | }, 2084 | "serve-handler": { 2085 | "version": "6.1.3", 2086 | "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", 2087 | "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", 2088 | "dev": true, 2089 | "requires": { 2090 | "bytes": "3.0.0", 2091 | "content-disposition": "0.5.2", 2092 | "fast-url-parser": "1.1.3", 2093 | "mime-types": "2.1.18", 2094 | "minimatch": "3.0.4", 2095 | "path-is-inside": "1.0.2", 2096 | "path-to-regexp": "2.2.1", 2097 | "range-parser": "1.2.0" 2098 | }, 2099 | "dependencies": { 2100 | "mime-db": { 2101 | "version": "1.33.0", 2102 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 2103 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 2104 | "dev": true 2105 | }, 2106 | "mime-types": { 2107 | "version": "2.1.18", 2108 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 2109 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 2110 | "dev": true, 2111 | "requires": { 2112 | "mime-db": "~1.33.0" 2113 | } 2114 | } 2115 | } 2116 | }, 2117 | "shebang-command": { 2118 | "version": "2.0.0", 2119 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2120 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2121 | "dev": true, 2122 | "requires": { 2123 | "shebang-regex": "^3.0.0" 2124 | } 2125 | }, 2126 | "shebang-regex": { 2127 | "version": "3.0.0", 2128 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2129 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2130 | "dev": true 2131 | }, 2132 | "signal-exit": { 2133 | "version": "3.0.7", 2134 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2135 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2136 | "dev": true 2137 | }, 2138 | "string-width": { 2139 | "version": "5.1.2", 2140 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2141 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2142 | "dev": true, 2143 | "requires": { 2144 | "eastasianwidth": "^0.2.0", 2145 | "emoji-regex": "^9.2.2", 2146 | "strip-ansi": "^7.0.1" 2147 | } 2148 | }, 2149 | "strip-ansi": { 2150 | "version": "7.0.1", 2151 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", 2152 | "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", 2153 | "dev": true, 2154 | "requires": { 2155 | "ansi-regex": "^6.0.1" 2156 | } 2157 | }, 2158 | "strip-final-newline": { 2159 | "version": "2.0.0", 2160 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2161 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2162 | "dev": true 2163 | }, 2164 | "strip-json-comments": { 2165 | "version": "2.0.1", 2166 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2167 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 2168 | "dev": true 2169 | }, 2170 | "supports-color": { 2171 | "version": "7.2.0", 2172 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2173 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2174 | "dev": true, 2175 | "requires": { 2176 | "has-flag": "^4.0.0" 2177 | } 2178 | }, 2179 | "type-fest": { 2180 | "version": "2.18.0", 2181 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.18.0.tgz", 2182 | "integrity": "sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw==", 2183 | "dev": true 2184 | }, 2185 | "update-check": { 2186 | "version": "1.5.4", 2187 | "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", 2188 | "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", 2189 | "dev": true, 2190 | "requires": { 2191 | "registry-auth-token": "3.3.2", 2192 | "registry-url": "3.1.0" 2193 | } 2194 | }, 2195 | "uri-js": { 2196 | "version": "4.4.1", 2197 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2198 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2199 | "dev": true, 2200 | "requires": { 2201 | "punycode": "^2.1.0" 2202 | }, 2203 | "dependencies": { 2204 | "punycode": { 2205 | "version": "2.1.1", 2206 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2207 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2208 | "dev": true 2209 | } 2210 | } 2211 | }, 2212 | "vary": { 2213 | "version": "1.1.2", 2214 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2215 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 2216 | "dev": true 2217 | }, 2218 | "which": { 2219 | "version": "2.0.2", 2220 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2221 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2222 | "dev": true, 2223 | "requires": { 2224 | "isexe": "^2.0.0" 2225 | } 2226 | }, 2227 | "widest-line": { 2228 | "version": "4.0.1", 2229 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", 2230 | "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", 2231 | "dev": true, 2232 | "requires": { 2233 | "string-width": "^5.0.1" 2234 | } 2235 | }, 2236 | "wrap-ansi": { 2237 | "version": "8.0.1", 2238 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", 2239 | "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", 2240 | "dev": true, 2241 | "requires": { 2242 | "ansi-styles": "^6.1.0", 2243 | "string-width": "^5.0.1", 2244 | "strip-ansi": "^7.0.1" 2245 | } 2246 | } 2247 | } 2248 | } 2249 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wc-jsx-runtime", 3 | "version": "1.0.1", 4 | "description": "A JSX transform for Web Components", 5 | "type": "module", 6 | "module": "./jsx-runtime.js", 7 | "scripts": { 8 | "test": "npx playwright test" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/jed/wc-jsx-runtime.git" 13 | }, 14 | "author": "Jed Schmidt", 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/jed/wc-jsx-runtime/issues" 18 | }, 19 | "homepage": "https://github.com/jed/wc-jsx-runtime#readme", 20 | "exports": { 21 | "./jsx-runtime": { 22 | "browser": "./jsx-runtime.js", 23 | "import": "./jsx-runtime.js" 24 | } 25 | }, 26 | "devDependencies": { 27 | "@playwright/test": "^1.24.2", 28 | "serve": "^14.0.1", 29 | "esbuild": "^0.14.51" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /playwright.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | testDir: './test', 3 | 4 | webServer: { 5 | command: 'esbuild test/index.jsx --bundle --outdir=test && cd test && serve', 6 | port: 3000, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | (() => { 2 | // jsx-runtime.js 3 | var definitions = /* @__PURE__ */ new Map(); 4 | function jsx(node, props, key) { 5 | if (node === jsx) 6 | node = document.createDocumentFragment(); 7 | else if (typeof node === "function") { 8 | let definition = definitions.get(node); 9 | if (!definition) { 10 | let is = node.name.replace(/(.)([A-Z])/g, "$1-$2").toLowerCase(); 11 | let name = Object.getPrototypeOf(node).name.replace(/^HTML|Element$/g, "").toLowerCase(); 12 | definition = name ? [name, { is }] : [is]; 13 | customElements.define(is, node, name ? { extends: name } : null); 14 | definitions.set(...definition); 15 | } 16 | node = document.createElement(...definition); 17 | } else 18 | node = document.createElement(node); 19 | if (key) 20 | node.setAttribute("key", key); 21 | for (let name in props) { 22 | if (name !== "children") 23 | node.setAttribute(name, props[name]); 24 | else 25 | Array.isArray(props[name]) ? node.append(...props[name]) : node.append(props[name]); 26 | } 27 | return node; 28 | } 29 | 30 | // test/index.jsx 31 | var AppHtml = class extends HTMLHtmlElement { 32 | connectedCallback() { 33 | this.append( 34 | /* @__PURE__ */ jsx(AppHead, {}), 35 | /* @__PURE__ */ jsx(AppBody, {}) 36 | ); 37 | } 38 | }; 39 | var AppHead = class extends HTMLHeadElement { 40 | connectedCallback() { 41 | this.append( 42 | /* @__PURE__ */ jsx("title", { 43 | children: "Testing ws-jsx-runtime..." 44 | }) 45 | ); 46 | } 47 | }; 48 | var AppBody = class extends HTMLBodyElement { 49 | connectedCallback() { 50 | this.append(/* @__PURE__ */ jsx(HelloWorld, { 51 | name: "JSX" 52 | })); 53 | } 54 | }; 55 | var HelloWorld = class extends HTMLElement { 56 | connectedCallback() { 57 | this.append(`Hello, ${this.getAttribute("name")}!`); 58 | } 59 | }; 60 | document.documentElement.replaceWith(/* @__PURE__ */ jsx(AppHtml, {})); 61 | })(); 62 | -------------------------------------------------------------------------------- /test/index.jsx: -------------------------------------------------------------------------------- 1 | class AppHtml extends HTMLHtmlElement { 2 | connectedCallback() { 3 | this.append( 4 | , 5 | 6 | ) 7 | } 8 | } 9 | 10 | class AppHead extends HTMLHeadElement { 11 | connectedCallback() { 12 | this.append( 13 | Testing ws-jsx-runtime... 14 | ) 15 | } 16 | } 17 | 18 | class AppBody extends HTMLBodyElement { 19 | connectedCallback() { 20 | this.append() 21 | } 22 | } 23 | 24 | class HelloWorld extends HTMLElement { 25 | connectedCallback() { 26 | this.append(`Hello, ${this.getAttribute('name')}!`) 27 | } 28 | } 29 | 30 | document.documentElement.replaceWith() 31 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | import {test, expect} from '@playwright/test' 2 | 3 | let outerHTML = `Testing ws-jsx-runtime...Hello, JSX!` 4 | 5 | test('outerHTML matches', async ({page}) => { 6 | await page.goto('http://localhost:3000/') 7 | let documentElement = page.locator('html') 8 | await expect(documentElement).toHaveJSProperty('outerHTML', outerHTML) 9 | }) 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "jsx": "react-jsx", 4 | "jsxImportSource": "..", 5 | "baseUrl": ".", 6 | "paths": { 7 | "jsx-runtime": ["jsx-runtime.js"] 8 | } 9 | } 10 | } 11 | --------------------------------------------------------------------------------