├── .eslintrc.cjs ├── .gitignore ├── .npmrc ├── CHANGELOG.md ├── README.md ├── echo ├── package-lock.json ├── package.json ├── playwright.config.js ├── schema.sql ├── src ├── app.css ├── app.html ├── hooks.js ├── lib │ ├── Counter.svelte │ ├── _db.js │ ├── api.js │ ├── form.js │ └── header │ │ ├── Header.svelte │ │ └── svelte-logo.svg └── routes │ ├── __layout.svelte │ ├── about.svelte │ ├── index.svelte │ └── todos │ ├── index.js │ └── index.svelte ├── static ├── favicon.png ├── robots.txt ├── svelte-welcome.png └── svelte-welcome.webp ├── svelte.config.js └── tests └── test.js /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['eslint:recommended'], 4 | plugins: ['svelte3'], 5 | overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], 6 | parserOptions: { 7 | sourceType: 'module', 8 | ecmaVersion: 2020 9 | }, 10 | env: { 11 | browser: true, 12 | es2017: true, 13 | node: true 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | .vercel 10 | .output 11 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # default-template 2 | 3 | ## 0.0.2-next.0 4 | ### Patch Changes 5 | 6 | 7 | 8 | - [chore] upgrade cookie library ([#4592](https://github.com/sveltejs/kit/pull/4592)) 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # svelte-postgres-demo 2 | 3 | A starting point for connecting SvelteKit with Postgres. Write pure SQL and save yourself the headaches with object relational mappers. 4 | 5 | In [api.js](./src/lib/api.js) you can access the database like this: 6 | 7 | ```js 8 | export async function createTodo (userId, { text, done }) { 9 | return db.one('INSERT INTO todos(user_id, text, done) VALUES($1, $2, $3) RETURNING *', [userId, text, done]); 10 | } 11 | ``` 12 | 13 | ## Development 14 | 15 | Make sure you have a Postgres DB instance running and provide your connection string as an environment variable. 16 | 17 | ```zsh 18 | VITE_DB_URL=postgresql://postgres@localhost:5432/svelte-postgres-demo 19 | psql -Atx $VITE_DB_URL -f schema.sql 20 | ``` 21 | 22 | Now run the development server: 23 | 24 | ```zsh 25 | npm run dev 26 | ``` 27 | 28 | ## Questions? 29 | 30 | Ping @_mql on Twitter. 31 | -------------------------------------------------------------------------------- /echo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michael/svelte-postgres-demo/2e38ac66c5c52033c0de53a8324d94f05033ea55/echo -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-postgres-demo", 3 | "version": "0.0.1", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.16.7", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", 10 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.16.7" 14 | } 15 | }, 16 | "@babel/compat-data": { 17 | "version": "7.17.10", 18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", 19 | "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", 20 | "dev": true 21 | }, 22 | "@babel/core": { 23 | "version": "7.16.12", 24 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", 25 | "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/code-frame": "^7.16.7", 29 | "@babel/generator": "^7.16.8", 30 | "@babel/helper-compilation-targets": "^7.16.7", 31 | "@babel/helper-module-transforms": "^7.16.7", 32 | "@babel/helpers": "^7.16.7", 33 | "@babel/parser": "^7.16.12", 34 | "@babel/template": "^7.16.7", 35 | "@babel/traverse": "^7.16.10", 36 | "@babel/types": "^7.16.8", 37 | "convert-source-map": "^1.7.0", 38 | "debug": "^4.1.0", 39 | "gensync": "^1.0.0-beta.2", 40 | "json5": "^2.1.2", 41 | "semver": "^6.3.0", 42 | "source-map": "^0.5.0" 43 | } 44 | }, 45 | "@babel/generator": { 46 | "version": "7.17.10", 47 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", 48 | "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", 49 | "dev": true, 50 | "requires": { 51 | "@babel/types": "^7.17.10", 52 | "@jridgewell/gen-mapping": "^0.1.0", 53 | "jsesc": "^2.5.1" 54 | } 55 | }, 56 | "@babel/helper-annotate-as-pure": { 57 | "version": "7.16.7", 58 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", 59 | "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", 60 | "dev": true, 61 | "requires": { 62 | "@babel/types": "^7.16.7" 63 | } 64 | }, 65 | "@babel/helper-compilation-targets": { 66 | "version": "7.17.10", 67 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", 68 | "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", 69 | "dev": true, 70 | "requires": { 71 | "@babel/compat-data": "^7.17.10", 72 | "@babel/helper-validator-option": "^7.16.7", 73 | "browserslist": "^4.20.2", 74 | "semver": "^6.3.0" 75 | } 76 | }, 77 | "@babel/helper-create-class-features-plugin": { 78 | "version": "7.17.9", 79 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", 80 | "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", 81 | "dev": true, 82 | "requires": { 83 | "@babel/helper-annotate-as-pure": "^7.16.7", 84 | "@babel/helper-environment-visitor": "^7.16.7", 85 | "@babel/helper-function-name": "^7.17.9", 86 | "@babel/helper-member-expression-to-functions": "^7.17.7", 87 | "@babel/helper-optimise-call-expression": "^7.16.7", 88 | "@babel/helper-replace-supers": "^7.16.7", 89 | "@babel/helper-split-export-declaration": "^7.16.7" 90 | } 91 | }, 92 | "@babel/helper-environment-visitor": { 93 | "version": "7.16.7", 94 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", 95 | "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", 96 | "dev": true, 97 | "requires": { 98 | "@babel/types": "^7.16.7" 99 | } 100 | }, 101 | "@babel/helper-function-name": { 102 | "version": "7.17.9", 103 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", 104 | "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", 105 | "dev": true, 106 | "requires": { 107 | "@babel/template": "^7.16.7", 108 | "@babel/types": "^7.17.0" 109 | } 110 | }, 111 | "@babel/helper-hoist-variables": { 112 | "version": "7.16.7", 113 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", 114 | "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", 115 | "dev": true, 116 | "requires": { 117 | "@babel/types": "^7.16.7" 118 | } 119 | }, 120 | "@babel/helper-member-expression-to-functions": { 121 | "version": "7.17.7", 122 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", 123 | "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", 124 | "dev": true, 125 | "requires": { 126 | "@babel/types": "^7.17.0" 127 | } 128 | }, 129 | "@babel/helper-module-imports": { 130 | "version": "7.16.7", 131 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", 132 | "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", 133 | "dev": true, 134 | "requires": { 135 | "@babel/types": "^7.16.7" 136 | } 137 | }, 138 | "@babel/helper-module-transforms": { 139 | "version": "7.17.7", 140 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", 141 | "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", 142 | "dev": true, 143 | "requires": { 144 | "@babel/helper-environment-visitor": "^7.16.7", 145 | "@babel/helper-module-imports": "^7.16.7", 146 | "@babel/helper-simple-access": "^7.17.7", 147 | "@babel/helper-split-export-declaration": "^7.16.7", 148 | "@babel/helper-validator-identifier": "^7.16.7", 149 | "@babel/template": "^7.16.7", 150 | "@babel/traverse": "^7.17.3", 151 | "@babel/types": "^7.17.0" 152 | } 153 | }, 154 | "@babel/helper-optimise-call-expression": { 155 | "version": "7.16.7", 156 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", 157 | "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", 158 | "dev": true, 159 | "requires": { 160 | "@babel/types": "^7.16.7" 161 | } 162 | }, 163 | "@babel/helper-plugin-utils": { 164 | "version": "7.16.7", 165 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", 166 | "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", 167 | "dev": true 168 | }, 169 | "@babel/helper-replace-supers": { 170 | "version": "7.16.7", 171 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", 172 | "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", 173 | "dev": true, 174 | "requires": { 175 | "@babel/helper-environment-visitor": "^7.16.7", 176 | "@babel/helper-member-expression-to-functions": "^7.16.7", 177 | "@babel/helper-optimise-call-expression": "^7.16.7", 178 | "@babel/traverse": "^7.16.7", 179 | "@babel/types": "^7.16.7" 180 | } 181 | }, 182 | "@babel/helper-simple-access": { 183 | "version": "7.17.7", 184 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", 185 | "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", 186 | "dev": true, 187 | "requires": { 188 | "@babel/types": "^7.17.0" 189 | } 190 | }, 191 | "@babel/helper-skip-transparent-expression-wrappers": { 192 | "version": "7.16.0", 193 | "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", 194 | "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", 195 | "dev": true, 196 | "requires": { 197 | "@babel/types": "^7.16.0" 198 | } 199 | }, 200 | "@babel/helper-split-export-declaration": { 201 | "version": "7.16.7", 202 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", 203 | "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", 204 | "dev": true, 205 | "requires": { 206 | "@babel/types": "^7.16.7" 207 | } 208 | }, 209 | "@babel/helper-validator-identifier": { 210 | "version": "7.16.7", 211 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 212 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", 213 | "dev": true 214 | }, 215 | "@babel/helper-validator-option": { 216 | "version": "7.16.7", 217 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", 218 | "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", 219 | "dev": true 220 | }, 221 | "@babel/helpers": { 222 | "version": "7.17.9", 223 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", 224 | "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", 225 | "dev": true, 226 | "requires": { 227 | "@babel/template": "^7.16.7", 228 | "@babel/traverse": "^7.17.9", 229 | "@babel/types": "^7.17.0" 230 | } 231 | }, 232 | "@babel/highlight": { 233 | "version": "7.17.9", 234 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", 235 | "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", 236 | "dev": true, 237 | "requires": { 238 | "@babel/helper-validator-identifier": "^7.16.7", 239 | "chalk": "^2.0.0", 240 | "js-tokens": "^4.0.0" 241 | } 242 | }, 243 | "@babel/parser": { 244 | "version": "7.17.10", 245 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", 246 | "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", 247 | "dev": true 248 | }, 249 | "@babel/plugin-proposal-class-properties": { 250 | "version": "7.16.7", 251 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", 252 | "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", 253 | "dev": true, 254 | "requires": { 255 | "@babel/helper-create-class-features-plugin": "^7.16.7", 256 | "@babel/helper-plugin-utils": "^7.16.7" 257 | } 258 | }, 259 | "@babel/plugin-proposal-dynamic-import": { 260 | "version": "7.16.7", 261 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", 262 | "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", 263 | "dev": true, 264 | "requires": { 265 | "@babel/helper-plugin-utils": "^7.16.7", 266 | "@babel/plugin-syntax-dynamic-import": "^7.8.3" 267 | } 268 | }, 269 | "@babel/plugin-proposal-export-namespace-from": { 270 | "version": "7.16.7", 271 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", 272 | "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", 273 | "dev": true, 274 | "requires": { 275 | "@babel/helper-plugin-utils": "^7.16.7", 276 | "@babel/plugin-syntax-export-namespace-from": "^7.8.3" 277 | } 278 | }, 279 | "@babel/plugin-proposal-logical-assignment-operators": { 280 | "version": "7.16.7", 281 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", 282 | "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", 283 | "dev": true, 284 | "requires": { 285 | "@babel/helper-plugin-utils": "^7.16.7", 286 | "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" 287 | } 288 | }, 289 | "@babel/plugin-proposal-nullish-coalescing-operator": { 290 | "version": "7.16.7", 291 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", 292 | "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", 293 | "dev": true, 294 | "requires": { 295 | "@babel/helper-plugin-utils": "^7.16.7", 296 | "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" 297 | } 298 | }, 299 | "@babel/plugin-proposal-numeric-separator": { 300 | "version": "7.16.7", 301 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", 302 | "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", 303 | "dev": true, 304 | "requires": { 305 | "@babel/helper-plugin-utils": "^7.16.7", 306 | "@babel/plugin-syntax-numeric-separator": "^7.10.4" 307 | } 308 | }, 309 | "@babel/plugin-proposal-optional-chaining": { 310 | "version": "7.16.7", 311 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", 312 | "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", 313 | "dev": true, 314 | "requires": { 315 | "@babel/helper-plugin-utils": "^7.16.7", 316 | "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", 317 | "@babel/plugin-syntax-optional-chaining": "^7.8.3" 318 | } 319 | }, 320 | "@babel/plugin-proposal-private-methods": { 321 | "version": "7.16.11", 322 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", 323 | "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", 324 | "dev": true, 325 | "requires": { 326 | "@babel/helper-create-class-features-plugin": "^7.16.10", 327 | "@babel/helper-plugin-utils": "^7.16.7" 328 | } 329 | }, 330 | "@babel/plugin-proposal-private-property-in-object": { 331 | "version": "7.16.7", 332 | "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", 333 | "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", 334 | "dev": true, 335 | "requires": { 336 | "@babel/helper-annotate-as-pure": "^7.16.7", 337 | "@babel/helper-create-class-features-plugin": "^7.16.7", 338 | "@babel/helper-plugin-utils": "^7.16.7", 339 | "@babel/plugin-syntax-private-property-in-object": "^7.14.5" 340 | } 341 | }, 342 | "@babel/plugin-syntax-async-generators": { 343 | "version": "7.8.4", 344 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", 345 | "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", 346 | "dev": true, 347 | "requires": { 348 | "@babel/helper-plugin-utils": "^7.8.0" 349 | } 350 | }, 351 | "@babel/plugin-syntax-dynamic-import": { 352 | "version": "7.8.3", 353 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 354 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 355 | "dev": true, 356 | "requires": { 357 | "@babel/helper-plugin-utils": "^7.8.0" 358 | } 359 | }, 360 | "@babel/plugin-syntax-export-namespace-from": { 361 | "version": "7.8.3", 362 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", 363 | "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", 364 | "dev": true, 365 | "requires": { 366 | "@babel/helper-plugin-utils": "^7.8.3" 367 | } 368 | }, 369 | "@babel/plugin-syntax-json-strings": { 370 | "version": "7.8.3", 371 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", 372 | "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", 373 | "dev": true, 374 | "requires": { 375 | "@babel/helper-plugin-utils": "^7.8.0" 376 | } 377 | }, 378 | "@babel/plugin-syntax-logical-assignment-operators": { 379 | "version": "7.10.4", 380 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", 381 | "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", 382 | "dev": true, 383 | "requires": { 384 | "@babel/helper-plugin-utils": "^7.10.4" 385 | } 386 | }, 387 | "@babel/plugin-syntax-nullish-coalescing-operator": { 388 | "version": "7.8.3", 389 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", 390 | "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", 391 | "dev": true, 392 | "requires": { 393 | "@babel/helper-plugin-utils": "^7.8.0" 394 | } 395 | }, 396 | "@babel/plugin-syntax-numeric-separator": { 397 | "version": "7.10.4", 398 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", 399 | "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", 400 | "dev": true, 401 | "requires": { 402 | "@babel/helper-plugin-utils": "^7.10.4" 403 | } 404 | }, 405 | "@babel/plugin-syntax-object-rest-spread": { 406 | "version": "7.8.3", 407 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", 408 | "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", 409 | "dev": true, 410 | "requires": { 411 | "@babel/helper-plugin-utils": "^7.8.0" 412 | } 413 | }, 414 | "@babel/plugin-syntax-optional-catch-binding": { 415 | "version": "7.8.3", 416 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", 417 | "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", 418 | "dev": true, 419 | "requires": { 420 | "@babel/helper-plugin-utils": "^7.8.0" 421 | } 422 | }, 423 | "@babel/plugin-syntax-optional-chaining": { 424 | "version": "7.8.3", 425 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", 426 | "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", 427 | "dev": true, 428 | "requires": { 429 | "@babel/helper-plugin-utils": "^7.8.0" 430 | } 431 | }, 432 | "@babel/plugin-syntax-private-property-in-object": { 433 | "version": "7.14.5", 434 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", 435 | "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", 436 | "dev": true, 437 | "requires": { 438 | "@babel/helper-plugin-utils": "^7.14.5" 439 | } 440 | }, 441 | "@babel/plugin-syntax-typescript": { 442 | "version": "7.17.10", 443 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", 444 | "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", 445 | "dev": true, 446 | "requires": { 447 | "@babel/helper-plugin-utils": "^7.16.7" 448 | } 449 | }, 450 | "@babel/plugin-transform-modules-commonjs": { 451 | "version": "7.16.8", 452 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", 453 | "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", 454 | "dev": true, 455 | "requires": { 456 | "@babel/helper-module-transforms": "^7.16.7", 457 | "@babel/helper-plugin-utils": "^7.16.7", 458 | "@babel/helper-simple-access": "^7.16.7", 459 | "babel-plugin-dynamic-import-node": "^2.3.3" 460 | } 461 | }, 462 | "@babel/plugin-transform-typescript": { 463 | "version": "7.16.8", 464 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", 465 | "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", 466 | "dev": true, 467 | "requires": { 468 | "@babel/helper-create-class-features-plugin": "^7.16.7", 469 | "@babel/helper-plugin-utils": "^7.16.7", 470 | "@babel/plugin-syntax-typescript": "^7.16.7" 471 | } 472 | }, 473 | "@babel/preset-typescript": { 474 | "version": "7.16.7", 475 | "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", 476 | "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", 477 | "dev": true, 478 | "requires": { 479 | "@babel/helper-plugin-utils": "^7.16.7", 480 | "@babel/helper-validator-option": "^7.16.7", 481 | "@babel/plugin-transform-typescript": "^7.16.7" 482 | } 483 | }, 484 | "@babel/template": { 485 | "version": "7.16.7", 486 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", 487 | "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", 488 | "dev": true, 489 | "requires": { 490 | "@babel/code-frame": "^7.16.7", 491 | "@babel/parser": "^7.16.7", 492 | "@babel/types": "^7.16.7" 493 | } 494 | }, 495 | "@babel/traverse": { 496 | "version": "7.17.10", 497 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", 498 | "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", 499 | "dev": true, 500 | "requires": { 501 | "@babel/code-frame": "^7.16.7", 502 | "@babel/generator": "^7.17.10", 503 | "@babel/helper-environment-visitor": "^7.16.7", 504 | "@babel/helper-function-name": "^7.17.9", 505 | "@babel/helper-hoist-variables": "^7.16.7", 506 | "@babel/helper-split-export-declaration": "^7.16.7", 507 | "@babel/parser": "^7.17.10", 508 | "@babel/types": "^7.17.10", 509 | "debug": "^4.1.0", 510 | "globals": "^11.1.0" 511 | } 512 | }, 513 | "@babel/types": { 514 | "version": "7.17.10", 515 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", 516 | "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", 517 | "dev": true, 518 | "requires": { 519 | "@babel/helper-validator-identifier": "^7.16.7", 520 | "to-fast-properties": "^2.0.0" 521 | } 522 | }, 523 | "@eslint/eslintrc": { 524 | "version": "1.2.3", 525 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", 526 | "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", 527 | "dev": true, 528 | "requires": { 529 | "ajv": "^6.12.4", 530 | "debug": "^4.3.2", 531 | "espree": "^9.3.2", 532 | "globals": "^13.9.0", 533 | "ignore": "^5.2.0", 534 | "import-fresh": "^3.2.1", 535 | "js-yaml": "^4.1.0", 536 | "minimatch": "^3.1.2", 537 | "strip-json-comments": "^3.1.1" 538 | }, 539 | "dependencies": { 540 | "globals": { 541 | "version": "13.14.0", 542 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.14.0.tgz", 543 | "integrity": "sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg==", 544 | "dev": true, 545 | "requires": { 546 | "type-fest": "^0.20.2" 547 | } 548 | }, 549 | "minimatch": { 550 | "version": "3.1.2", 551 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 552 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 553 | "dev": true, 554 | "requires": { 555 | "brace-expansion": "^1.1.7" 556 | } 557 | } 558 | } 559 | }, 560 | "@fontsource/fira-mono": { 561 | "version": "4.5.8", 562 | "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.8.tgz", 563 | "integrity": "sha512-sFuSPB/Km8B1fy3CH0NqO5Nb4GmVMzp3XFaw6MwK293xhm3OnB68QJawwTTjLewcrS78wOTAhTUB058qxurJoQ==" 564 | }, 565 | "@humanwhocodes/config-array": { 566 | "version": "0.9.5", 567 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", 568 | "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", 569 | "dev": true, 570 | "requires": { 571 | "@humanwhocodes/object-schema": "^1.2.1", 572 | "debug": "^4.1.1", 573 | "minimatch": "^3.0.4" 574 | } 575 | }, 576 | "@humanwhocodes/object-schema": { 577 | "version": "1.2.1", 578 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", 579 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", 580 | "dev": true 581 | }, 582 | "@iarna/toml": { 583 | "version": "2.2.5", 584 | "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", 585 | "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", 586 | "dev": true 587 | }, 588 | "@jest/types": { 589 | "version": "27.5.1", 590 | "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", 591 | "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", 592 | "dev": true, 593 | "requires": { 594 | "@types/istanbul-lib-coverage": "^2.0.0", 595 | "@types/istanbul-reports": "^3.0.0", 596 | "@types/node": "*", 597 | "@types/yargs": "^16.0.0", 598 | "chalk": "^4.0.0" 599 | }, 600 | "dependencies": { 601 | "ansi-styles": { 602 | "version": "4.3.0", 603 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 604 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 605 | "dev": true, 606 | "requires": { 607 | "color-convert": "^2.0.1" 608 | } 609 | }, 610 | "chalk": { 611 | "version": "4.1.2", 612 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 613 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 614 | "dev": true, 615 | "requires": { 616 | "ansi-styles": "^4.1.0", 617 | "supports-color": "^7.1.0" 618 | } 619 | }, 620 | "color-convert": { 621 | "version": "2.0.1", 622 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 623 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 624 | "dev": true, 625 | "requires": { 626 | "color-name": "~1.1.4" 627 | } 628 | }, 629 | "color-name": { 630 | "version": "1.1.4", 631 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 632 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 633 | "dev": true 634 | }, 635 | "has-flag": { 636 | "version": "4.0.0", 637 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 638 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 639 | "dev": true 640 | }, 641 | "supports-color": { 642 | "version": "7.2.0", 643 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 644 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 645 | "dev": true, 646 | "requires": { 647 | "has-flag": "^4.0.0" 648 | } 649 | } 650 | } 651 | }, 652 | "@jridgewell/gen-mapping": { 653 | "version": "0.1.1", 654 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", 655 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", 656 | "dev": true, 657 | "requires": { 658 | "@jridgewell/set-array": "^1.0.0", 659 | "@jridgewell/sourcemap-codec": "^1.4.10" 660 | } 661 | }, 662 | "@jridgewell/set-array": { 663 | "version": "1.1.1", 664 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", 665 | "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", 666 | "dev": true 667 | }, 668 | "@jridgewell/sourcemap-codec": { 669 | "version": "1.4.13", 670 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", 671 | "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", 672 | "dev": true 673 | }, 674 | "@lukeed/csprng": { 675 | "version": "1.0.1", 676 | "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", 677 | "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" 678 | }, 679 | "@lukeed/uuid": { 680 | "version": "2.0.0", 681 | "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", 682 | "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", 683 | "requires": { 684 | "@lukeed/csprng": "^1.0.0" 685 | } 686 | }, 687 | "@playwright/test": { 688 | "version": "1.21.1", 689 | "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.21.1.tgz", 690 | "integrity": "sha512-XkkTXl5gvEm4fciqeHvY5IuSS/OfQef0MO6RpBNmtm6EuYSdtUvP/sDVuWRKsDqyVdB3WSA0az7iSw79f2//JQ==", 691 | "dev": true, 692 | "requires": { 693 | "@babel/code-frame": "7.16.7", 694 | "@babel/core": "7.16.12", 695 | "@babel/helper-plugin-utils": "7.16.7", 696 | "@babel/plugin-proposal-class-properties": "7.16.7", 697 | "@babel/plugin-proposal-dynamic-import": "7.16.7", 698 | "@babel/plugin-proposal-export-namespace-from": "7.16.7", 699 | "@babel/plugin-proposal-logical-assignment-operators": "7.16.7", 700 | "@babel/plugin-proposal-nullish-coalescing-operator": "7.16.7", 701 | "@babel/plugin-proposal-numeric-separator": "7.16.7", 702 | "@babel/plugin-proposal-optional-chaining": "7.16.7", 703 | "@babel/plugin-proposal-private-methods": "7.16.11", 704 | "@babel/plugin-proposal-private-property-in-object": "7.16.7", 705 | "@babel/plugin-syntax-async-generators": "7.8.4", 706 | "@babel/plugin-syntax-json-strings": "7.8.3", 707 | "@babel/plugin-syntax-object-rest-spread": "7.8.3", 708 | "@babel/plugin-syntax-optional-catch-binding": "7.8.3", 709 | "@babel/plugin-transform-modules-commonjs": "7.16.8", 710 | "@babel/preset-typescript": "7.16.7", 711 | "colors": "1.4.0", 712 | "commander": "8.3.0", 713 | "debug": "4.3.3", 714 | "expect": "27.2.5", 715 | "jest-matcher-utils": "27.2.5", 716 | "json5": "2.2.1", 717 | "mime": "3.0.0", 718 | "minimatch": "3.0.4", 719 | "ms": "2.1.3", 720 | "open": "8.4.0", 721 | "pirates": "4.0.4", 722 | "playwright-core": "1.21.1", 723 | "rimraf": "3.0.2", 724 | "source-map-support": "0.4.18", 725 | "stack-utils": "2.0.5", 726 | "yazl": "2.5.1" 727 | }, 728 | "dependencies": { 729 | "playwright-core": { 730 | "version": "1.21.1", 731 | "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.21.1.tgz", 732 | "integrity": "sha512-SbK5dEsai9ZUKlxcinqegorBq4GnftXd4/GfW+pLsdQIQWrLCM/JNh6YQ2Rf2enVykXCejtoXW8L5vJXBBVSJQ==", 733 | "dev": true, 734 | "requires": { 735 | "colors": "1.4.0", 736 | "commander": "8.3.0", 737 | "debug": "4.3.3", 738 | "extract-zip": "2.0.1", 739 | "https-proxy-agent": "5.0.0", 740 | "jpeg-js": "0.4.3", 741 | "mime": "3.0.0", 742 | "pixelmatch": "5.2.1", 743 | "pngjs": "6.0.0", 744 | "progress": "2.0.3", 745 | "proper-lockfile": "4.1.2", 746 | "proxy-from-env": "1.1.0", 747 | "rimraf": "3.0.2", 748 | "socks-proxy-agent": "6.1.1", 749 | "stack-utils": "2.0.5", 750 | "ws": "8.4.2", 751 | "yauzl": "2.10.0", 752 | "yazl": "2.5.1" 753 | } 754 | } 755 | } 756 | }, 757 | "@rollup/pluginutils": { 758 | "version": "4.2.1", 759 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 760 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 761 | "dev": true, 762 | "requires": { 763 | "estree-walker": "^2.0.1", 764 | "picomatch": "^2.2.2" 765 | } 766 | }, 767 | "@sveltejs/adapter-auto": { 768 | "version": "1.0.0-next.40", 769 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.40.tgz", 770 | "integrity": "sha512-TT6YJUF3asJ/2RbviEpcDJQ/TixPcvmH0L2266fGNT7+KfAf9wbbVdegPWRODk2E2hTN0X+h5YS9l+lap+BK9w==", 771 | "dev": true, 772 | "requires": { 773 | "@sveltejs/adapter-cloudflare": "1.0.0-next.19", 774 | "@sveltejs/adapter-netlify": "1.0.0-next.56", 775 | "@sveltejs/adapter-vercel": "1.0.0-next.50" 776 | } 777 | }, 778 | "@sveltejs/adapter-cloudflare": { 779 | "version": "1.0.0-next.19", 780 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.19.tgz", 781 | "integrity": "sha512-LET3DUYpl+deoKhkWCzhHUT7iipYkgVkOcRIJX7qT4m23A+MAbzcAC3npgwEYSe9RokOSWMVBr3tVujeES5EeA==", 782 | "dev": true, 783 | "requires": { 784 | "esbuild": "^0.14.21", 785 | "worktop": "0.8.0-next.13" 786 | } 787 | }, 788 | "@sveltejs/adapter-netlify": { 789 | "version": "1.0.0-next.56", 790 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.56.tgz", 791 | "integrity": "sha512-fM3aBHsr7syCGfIJcuB1mEoZwynqyOxVijvmyrd9OWHi6MP3bXSP+GhKDMtDpQRwejJJiwuZNTx2PUbV3uirvA==", 792 | "dev": true, 793 | "requires": { 794 | "@iarna/toml": "^2.2.5", 795 | "esbuild": "^0.14.21", 796 | "tiny-glob": "^0.2.9" 797 | } 798 | }, 799 | "@sveltejs/adapter-vercel": { 800 | "version": "1.0.0-next.50", 801 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.50.tgz", 802 | "integrity": "sha512-yta0AkuWEr7qrm8LB34F4ZdCtMxj+cHD4huwrRYCgjv+PSJHLPwe7aH53+Mhrv6La0TgeyQ/f2lTyhBMXZXn9Q==", 803 | "dev": true, 804 | "requires": { 805 | "esbuild": "^0.14.21" 806 | } 807 | }, 808 | "@sveltejs/kit": { 809 | "version": "1.0.0-next.326", 810 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.326.tgz", 811 | "integrity": "sha512-prJqmXZ2H1wmFfnMw7wDujfbkcA8vuubuqUkpVVmXhfh2+SEzQscPTNwxoE5EJxb5sywtLWEvYx3hv1gPS4Lvg==", 812 | "dev": true, 813 | "requires": { 814 | "@sveltejs/vite-plugin-svelte": "^1.0.0-next.32", 815 | "chokidar": "^3.5.3", 816 | "sade": "^1.7.4", 817 | "vite": "^2.9.0" 818 | } 819 | }, 820 | "@sveltejs/vite-plugin-svelte": { 821 | "version": "1.0.0-next.43", 822 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.43.tgz", 823 | "integrity": "sha512-MzeczqGrnDmbAldw/LfXV/dhpLC2bdUzuMhcx0C2j79V2uNzQERHDinxXnG2AVTCTjSpbQxzQwMMmYflnI7W1g==", 824 | "dev": true, 825 | "requires": { 826 | "@rollup/pluginutils": "^4.2.1", 827 | "debug": "^4.3.4", 828 | "deepmerge": "^4.2.2", 829 | "kleur": "^4.1.4", 830 | "magic-string": "^0.26.1", 831 | "svelte-hmr": "^0.14.11" 832 | }, 833 | "dependencies": { 834 | "debug": { 835 | "version": "4.3.4", 836 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 837 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 838 | "dev": true, 839 | "requires": { 840 | "ms": "2.1.2" 841 | } 842 | }, 843 | "ms": { 844 | "version": "2.1.2", 845 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 846 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 847 | "dev": true 848 | } 849 | } 850 | }, 851 | "@types/istanbul-lib-coverage": { 852 | "version": "2.0.4", 853 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", 854 | "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", 855 | "dev": true 856 | }, 857 | "@types/istanbul-lib-report": { 858 | "version": "3.0.0", 859 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", 860 | "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", 861 | "dev": true, 862 | "requires": { 863 | "@types/istanbul-lib-coverage": "*" 864 | } 865 | }, 866 | "@types/istanbul-reports": { 867 | "version": "3.0.1", 868 | "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", 869 | "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", 870 | "dev": true, 871 | "requires": { 872 | "@types/istanbul-lib-report": "*" 873 | } 874 | }, 875 | "@types/node": { 876 | "version": "17.0.31", 877 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", 878 | "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", 879 | "dev": true 880 | }, 881 | "@types/stack-utils": { 882 | "version": "2.0.1", 883 | "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", 884 | "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", 885 | "dev": true 886 | }, 887 | "@types/yargs": { 888 | "version": "16.0.4", 889 | "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", 890 | "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", 891 | "dev": true, 892 | "requires": { 893 | "@types/yargs-parser": "*" 894 | } 895 | }, 896 | "@types/yargs-parser": { 897 | "version": "21.0.0", 898 | "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", 899 | "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", 900 | "dev": true 901 | }, 902 | "@types/yauzl": { 903 | "version": "2.10.0", 904 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", 905 | "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", 906 | "dev": true, 907 | "optional": true, 908 | "requires": { 909 | "@types/node": "*" 910 | } 911 | }, 912 | "acorn": { 913 | "version": "8.7.1", 914 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", 915 | "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", 916 | "dev": true 917 | }, 918 | "acorn-jsx": { 919 | "version": "5.3.2", 920 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 921 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 922 | "dev": true 923 | }, 924 | "agent-base": { 925 | "version": "6.0.2", 926 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 927 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 928 | "dev": true, 929 | "requires": { 930 | "debug": "4" 931 | } 932 | }, 933 | "ajv": { 934 | "version": "6.12.6", 935 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 936 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 937 | "dev": true, 938 | "requires": { 939 | "fast-deep-equal": "^3.1.1", 940 | "fast-json-stable-stringify": "^2.0.0", 941 | "json-schema-traverse": "^0.4.1", 942 | "uri-js": "^4.2.2" 943 | } 944 | }, 945 | "ansi-regex": { 946 | "version": "5.0.1", 947 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 948 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 949 | "dev": true 950 | }, 951 | "ansi-styles": { 952 | "version": "3.2.1", 953 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 954 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 955 | "dev": true, 956 | "requires": { 957 | "color-convert": "^1.9.0" 958 | } 959 | }, 960 | "anymatch": { 961 | "version": "3.1.2", 962 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 963 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 964 | "dev": true, 965 | "requires": { 966 | "normalize-path": "^3.0.0", 967 | "picomatch": "^2.0.4" 968 | } 969 | }, 970 | "argparse": { 971 | "version": "2.0.1", 972 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 973 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 974 | "dev": true 975 | }, 976 | "assert-options": { 977 | "version": "0.7.0", 978 | "resolved": "https://registry.npmjs.org/assert-options/-/assert-options-0.7.0.tgz", 979 | "integrity": "sha512-7q9uNH/Dh8gFgpIIb9ja8PJEWA5AQy3xnBC8jtKs8K/gNVCr1K6kIvlm59HUyYgvM7oEDoLzGgPcGd9FqhtXEQ==" 980 | }, 981 | "babel-plugin-dynamic-import-node": { 982 | "version": "2.3.3", 983 | "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", 984 | "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", 985 | "dev": true, 986 | "requires": { 987 | "object.assign": "^4.1.0" 988 | } 989 | }, 990 | "balanced-match": { 991 | "version": "1.0.2", 992 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 993 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 994 | "dev": true 995 | }, 996 | "binary-extensions": { 997 | "version": "2.2.0", 998 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 999 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1000 | "dev": true 1001 | }, 1002 | "brace-expansion": { 1003 | "version": "1.1.11", 1004 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1005 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1006 | "dev": true, 1007 | "requires": { 1008 | "balanced-match": "^1.0.0", 1009 | "concat-map": "0.0.1" 1010 | } 1011 | }, 1012 | "braces": { 1013 | "version": "3.0.2", 1014 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1015 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1016 | "dev": true, 1017 | "requires": { 1018 | "fill-range": "^7.0.1" 1019 | } 1020 | }, 1021 | "browserslist": { 1022 | "version": "4.20.3", 1023 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", 1024 | "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", 1025 | "dev": true, 1026 | "requires": { 1027 | "caniuse-lite": "^1.0.30001332", 1028 | "electron-to-chromium": "^1.4.118", 1029 | "escalade": "^3.1.1", 1030 | "node-releases": "^2.0.3", 1031 | "picocolors": "^1.0.0" 1032 | } 1033 | }, 1034 | "buffer-crc32": { 1035 | "version": "0.2.13", 1036 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1037 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 1038 | "dev": true 1039 | }, 1040 | "buffer-writer": { 1041 | "version": "2.0.0", 1042 | "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", 1043 | "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" 1044 | }, 1045 | "call-bind": { 1046 | "version": "1.0.2", 1047 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 1048 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 1049 | "dev": true, 1050 | "requires": { 1051 | "function-bind": "^1.1.1", 1052 | "get-intrinsic": "^1.0.2" 1053 | } 1054 | }, 1055 | "callsites": { 1056 | "version": "3.1.0", 1057 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1058 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1059 | "dev": true 1060 | }, 1061 | "caniuse-lite": { 1062 | "version": "1.0.30001339", 1063 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz", 1064 | "integrity": "sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ==", 1065 | "dev": true 1066 | }, 1067 | "chalk": { 1068 | "version": "2.4.2", 1069 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1070 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1071 | "dev": true, 1072 | "requires": { 1073 | "ansi-styles": "^3.2.1", 1074 | "escape-string-regexp": "^1.0.5", 1075 | "supports-color": "^5.3.0" 1076 | } 1077 | }, 1078 | "chokidar": { 1079 | "version": "3.5.3", 1080 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1081 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1082 | "dev": true, 1083 | "requires": { 1084 | "anymatch": "~3.1.2", 1085 | "braces": "~3.0.2", 1086 | "fsevents": "~2.3.2", 1087 | "glob-parent": "~5.1.2", 1088 | "is-binary-path": "~2.1.0", 1089 | "is-glob": "~4.0.1", 1090 | "normalize-path": "~3.0.0", 1091 | "readdirp": "~3.6.0" 1092 | } 1093 | }, 1094 | "color-convert": { 1095 | "version": "1.9.3", 1096 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1097 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1098 | "dev": true, 1099 | "requires": { 1100 | "color-name": "1.1.3" 1101 | } 1102 | }, 1103 | "color-name": { 1104 | "version": "1.1.3", 1105 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1106 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1107 | "dev": true 1108 | }, 1109 | "colors": { 1110 | "version": "1.4.0", 1111 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", 1112 | "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", 1113 | "dev": true 1114 | }, 1115 | "commander": { 1116 | "version": "8.3.0", 1117 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", 1118 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", 1119 | "dev": true 1120 | }, 1121 | "concat-map": { 1122 | "version": "0.0.1", 1123 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1124 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1125 | "dev": true 1126 | }, 1127 | "convert-source-map": { 1128 | "version": "1.8.0", 1129 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 1130 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 1131 | "dev": true, 1132 | "requires": { 1133 | "safe-buffer": "~5.1.1" 1134 | } 1135 | }, 1136 | "cookie": { 1137 | "version": "0.4.2", 1138 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 1139 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" 1140 | }, 1141 | "cross-spawn": { 1142 | "version": "7.0.3", 1143 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1144 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1145 | "dev": true, 1146 | "requires": { 1147 | "path-key": "^3.1.0", 1148 | "shebang-command": "^2.0.0", 1149 | "which": "^2.0.1" 1150 | } 1151 | }, 1152 | "debug": { 1153 | "version": "4.3.3", 1154 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 1155 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 1156 | "dev": true, 1157 | "requires": { 1158 | "ms": "2.1.2" 1159 | }, 1160 | "dependencies": { 1161 | "ms": { 1162 | "version": "2.1.2", 1163 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1164 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1165 | "dev": true 1166 | } 1167 | } 1168 | }, 1169 | "deep-is": { 1170 | "version": "0.1.4", 1171 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1172 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1173 | "dev": true 1174 | }, 1175 | "deepmerge": { 1176 | "version": "4.2.2", 1177 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1178 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1179 | "dev": true 1180 | }, 1181 | "define-lazy-prop": { 1182 | "version": "2.0.0", 1183 | "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", 1184 | "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", 1185 | "dev": true 1186 | }, 1187 | "define-properties": { 1188 | "version": "1.1.4", 1189 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 1190 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 1191 | "dev": true, 1192 | "requires": { 1193 | "has-property-descriptors": "^1.0.0", 1194 | "object-keys": "^1.1.1" 1195 | } 1196 | }, 1197 | "diff-sequences": { 1198 | "version": "27.5.1", 1199 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", 1200 | "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", 1201 | "dev": true 1202 | }, 1203 | "doctrine": { 1204 | "version": "3.0.0", 1205 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1206 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1207 | "dev": true, 1208 | "requires": { 1209 | "esutils": "^2.0.2" 1210 | } 1211 | }, 1212 | "electron-to-chromium": { 1213 | "version": "1.4.137", 1214 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", 1215 | "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", 1216 | "dev": true 1217 | }, 1218 | "end-of-stream": { 1219 | "version": "1.4.4", 1220 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 1221 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 1222 | "dev": true, 1223 | "requires": { 1224 | "once": "^1.4.0" 1225 | } 1226 | }, 1227 | "esbuild": { 1228 | "version": "0.14.38", 1229 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", 1230 | "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", 1231 | "dev": true, 1232 | "requires": { 1233 | "esbuild-android-64": "0.14.38", 1234 | "esbuild-android-arm64": "0.14.38", 1235 | "esbuild-darwin-64": "0.14.38", 1236 | "esbuild-darwin-arm64": "0.14.38", 1237 | "esbuild-freebsd-64": "0.14.38", 1238 | "esbuild-freebsd-arm64": "0.14.38", 1239 | "esbuild-linux-32": "0.14.38", 1240 | "esbuild-linux-64": "0.14.38", 1241 | "esbuild-linux-arm": "0.14.38", 1242 | "esbuild-linux-arm64": "0.14.38", 1243 | "esbuild-linux-mips64le": "0.14.38", 1244 | "esbuild-linux-ppc64le": "0.14.38", 1245 | "esbuild-linux-riscv64": "0.14.38", 1246 | "esbuild-linux-s390x": "0.14.38", 1247 | "esbuild-netbsd-64": "0.14.38", 1248 | "esbuild-openbsd-64": "0.14.38", 1249 | "esbuild-sunos-64": "0.14.38", 1250 | "esbuild-windows-32": "0.14.38", 1251 | "esbuild-windows-64": "0.14.38", 1252 | "esbuild-windows-arm64": "0.14.38" 1253 | } 1254 | }, 1255 | "esbuild-android-64": { 1256 | "version": "0.14.38", 1257 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", 1258 | "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", 1259 | "dev": true, 1260 | "optional": true 1261 | }, 1262 | "esbuild-android-arm64": { 1263 | "version": "0.14.38", 1264 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", 1265 | "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", 1266 | "dev": true, 1267 | "optional": true 1268 | }, 1269 | "esbuild-darwin-64": { 1270 | "version": "0.14.38", 1271 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", 1272 | "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", 1273 | "dev": true, 1274 | "optional": true 1275 | }, 1276 | "esbuild-darwin-arm64": { 1277 | "version": "0.14.38", 1278 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", 1279 | "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", 1280 | "dev": true, 1281 | "optional": true 1282 | }, 1283 | "esbuild-freebsd-64": { 1284 | "version": "0.14.38", 1285 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", 1286 | "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", 1287 | "dev": true, 1288 | "optional": true 1289 | }, 1290 | "esbuild-freebsd-arm64": { 1291 | "version": "0.14.38", 1292 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", 1293 | "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", 1294 | "dev": true, 1295 | "optional": true 1296 | }, 1297 | "esbuild-linux-32": { 1298 | "version": "0.14.38", 1299 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", 1300 | "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", 1301 | "dev": true, 1302 | "optional": true 1303 | }, 1304 | "esbuild-linux-64": { 1305 | "version": "0.14.38", 1306 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", 1307 | "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", 1308 | "dev": true, 1309 | "optional": true 1310 | }, 1311 | "esbuild-linux-arm": { 1312 | "version": "0.14.38", 1313 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", 1314 | "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", 1315 | "dev": true, 1316 | "optional": true 1317 | }, 1318 | "esbuild-linux-arm64": { 1319 | "version": "0.14.38", 1320 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", 1321 | "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", 1322 | "dev": true, 1323 | "optional": true 1324 | }, 1325 | "esbuild-linux-mips64le": { 1326 | "version": "0.14.38", 1327 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", 1328 | "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", 1329 | "dev": true, 1330 | "optional": true 1331 | }, 1332 | "esbuild-linux-ppc64le": { 1333 | "version": "0.14.38", 1334 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", 1335 | "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", 1336 | "dev": true, 1337 | "optional": true 1338 | }, 1339 | "esbuild-linux-riscv64": { 1340 | "version": "0.14.38", 1341 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", 1342 | "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", 1343 | "dev": true, 1344 | "optional": true 1345 | }, 1346 | "esbuild-linux-s390x": { 1347 | "version": "0.14.38", 1348 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", 1349 | "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", 1350 | "dev": true, 1351 | "optional": true 1352 | }, 1353 | "esbuild-netbsd-64": { 1354 | "version": "0.14.38", 1355 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", 1356 | "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", 1357 | "dev": true, 1358 | "optional": true 1359 | }, 1360 | "esbuild-openbsd-64": { 1361 | "version": "0.14.38", 1362 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", 1363 | "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", 1364 | "dev": true, 1365 | "optional": true 1366 | }, 1367 | "esbuild-sunos-64": { 1368 | "version": "0.14.38", 1369 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", 1370 | "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", 1371 | "dev": true, 1372 | "optional": true 1373 | }, 1374 | "esbuild-windows-32": { 1375 | "version": "0.14.38", 1376 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", 1377 | "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", 1378 | "dev": true, 1379 | "optional": true 1380 | }, 1381 | "esbuild-windows-64": { 1382 | "version": "0.14.38", 1383 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", 1384 | "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", 1385 | "dev": true, 1386 | "optional": true 1387 | }, 1388 | "esbuild-windows-arm64": { 1389 | "version": "0.14.38", 1390 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", 1391 | "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", 1392 | "dev": true, 1393 | "optional": true 1394 | }, 1395 | "escalade": { 1396 | "version": "3.1.1", 1397 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1398 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1399 | "dev": true 1400 | }, 1401 | "escape-string-regexp": { 1402 | "version": "1.0.5", 1403 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1404 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1405 | "dev": true 1406 | }, 1407 | "eslint": { 1408 | "version": "8.15.0", 1409 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz", 1410 | "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==", 1411 | "dev": true, 1412 | "requires": { 1413 | "@eslint/eslintrc": "^1.2.3", 1414 | "@humanwhocodes/config-array": "^0.9.2", 1415 | "ajv": "^6.10.0", 1416 | "chalk": "^4.0.0", 1417 | "cross-spawn": "^7.0.2", 1418 | "debug": "^4.3.2", 1419 | "doctrine": "^3.0.0", 1420 | "escape-string-regexp": "^4.0.0", 1421 | "eslint-scope": "^7.1.1", 1422 | "eslint-utils": "^3.0.0", 1423 | "eslint-visitor-keys": "^3.3.0", 1424 | "espree": "^9.3.2", 1425 | "esquery": "^1.4.0", 1426 | "esutils": "^2.0.2", 1427 | "fast-deep-equal": "^3.1.3", 1428 | "file-entry-cache": "^6.0.1", 1429 | "functional-red-black-tree": "^1.0.1", 1430 | "glob-parent": "^6.0.1", 1431 | "globals": "^13.6.0", 1432 | "ignore": "^5.2.0", 1433 | "import-fresh": "^3.0.0", 1434 | "imurmurhash": "^0.1.4", 1435 | "is-glob": "^4.0.0", 1436 | "js-yaml": "^4.1.0", 1437 | "json-stable-stringify-without-jsonify": "^1.0.1", 1438 | "levn": "^0.4.1", 1439 | "lodash.merge": "^4.6.2", 1440 | "minimatch": "^3.1.2", 1441 | "natural-compare": "^1.4.0", 1442 | "optionator": "^0.9.1", 1443 | "regexpp": "^3.2.0", 1444 | "strip-ansi": "^6.0.1", 1445 | "strip-json-comments": "^3.1.0", 1446 | "text-table": "^0.2.0", 1447 | "v8-compile-cache": "^2.0.3" 1448 | }, 1449 | "dependencies": { 1450 | "ansi-styles": { 1451 | "version": "4.3.0", 1452 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1453 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1454 | "dev": true, 1455 | "requires": { 1456 | "color-convert": "^2.0.1" 1457 | } 1458 | }, 1459 | "chalk": { 1460 | "version": "4.1.2", 1461 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1462 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1463 | "dev": true, 1464 | "requires": { 1465 | "ansi-styles": "^4.1.0", 1466 | "supports-color": "^7.1.0" 1467 | } 1468 | }, 1469 | "color-convert": { 1470 | "version": "2.0.1", 1471 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1472 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1473 | "dev": true, 1474 | "requires": { 1475 | "color-name": "~1.1.4" 1476 | } 1477 | }, 1478 | "color-name": { 1479 | "version": "1.1.4", 1480 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1481 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1482 | "dev": true 1483 | }, 1484 | "escape-string-regexp": { 1485 | "version": "4.0.0", 1486 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1487 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1488 | "dev": true 1489 | }, 1490 | "glob-parent": { 1491 | "version": "6.0.2", 1492 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1493 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1494 | "dev": true, 1495 | "requires": { 1496 | "is-glob": "^4.0.3" 1497 | } 1498 | }, 1499 | "globals": { 1500 | "version": "13.14.0", 1501 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.14.0.tgz", 1502 | "integrity": "sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg==", 1503 | "dev": true, 1504 | "requires": { 1505 | "type-fest": "^0.20.2" 1506 | } 1507 | }, 1508 | "has-flag": { 1509 | "version": "4.0.0", 1510 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1511 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1512 | "dev": true 1513 | }, 1514 | "minimatch": { 1515 | "version": "3.1.2", 1516 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1517 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1518 | "dev": true, 1519 | "requires": { 1520 | "brace-expansion": "^1.1.7" 1521 | } 1522 | }, 1523 | "supports-color": { 1524 | "version": "7.2.0", 1525 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1526 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1527 | "dev": true, 1528 | "requires": { 1529 | "has-flag": "^4.0.0" 1530 | } 1531 | } 1532 | } 1533 | }, 1534 | "eslint-plugin-svelte3": { 1535 | "version": "4.0.0", 1536 | "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz", 1537 | "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==", 1538 | "dev": true 1539 | }, 1540 | "eslint-scope": { 1541 | "version": "7.1.1", 1542 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", 1543 | "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", 1544 | "dev": true, 1545 | "requires": { 1546 | "esrecurse": "^4.3.0", 1547 | "estraverse": "^5.2.0" 1548 | } 1549 | }, 1550 | "eslint-utils": { 1551 | "version": "3.0.0", 1552 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", 1553 | "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", 1554 | "dev": true, 1555 | "requires": { 1556 | "eslint-visitor-keys": "^2.0.0" 1557 | }, 1558 | "dependencies": { 1559 | "eslint-visitor-keys": { 1560 | "version": "2.1.0", 1561 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", 1562 | "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", 1563 | "dev": true 1564 | } 1565 | } 1566 | }, 1567 | "eslint-visitor-keys": { 1568 | "version": "3.3.0", 1569 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", 1570 | "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", 1571 | "dev": true 1572 | }, 1573 | "espree": { 1574 | "version": "9.3.2", 1575 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", 1576 | "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", 1577 | "dev": true, 1578 | "requires": { 1579 | "acorn": "^8.7.1", 1580 | "acorn-jsx": "^5.3.2", 1581 | "eslint-visitor-keys": "^3.3.0" 1582 | } 1583 | }, 1584 | "esquery": { 1585 | "version": "1.4.0", 1586 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", 1587 | "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", 1588 | "dev": true, 1589 | "requires": { 1590 | "estraverse": "^5.1.0" 1591 | } 1592 | }, 1593 | "esrecurse": { 1594 | "version": "4.3.0", 1595 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1596 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1597 | "dev": true, 1598 | "requires": { 1599 | "estraverse": "^5.2.0" 1600 | } 1601 | }, 1602 | "estraverse": { 1603 | "version": "5.3.0", 1604 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1605 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1606 | "dev": true 1607 | }, 1608 | "estree-walker": { 1609 | "version": "2.0.2", 1610 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1611 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1612 | "dev": true 1613 | }, 1614 | "esutils": { 1615 | "version": "2.0.3", 1616 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1617 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1618 | "dev": true 1619 | }, 1620 | "expect": { 1621 | "version": "27.2.5", 1622 | "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", 1623 | "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", 1624 | "dev": true, 1625 | "requires": { 1626 | "@jest/types": "^27.2.5", 1627 | "ansi-styles": "^5.0.0", 1628 | "jest-get-type": "^27.0.6", 1629 | "jest-matcher-utils": "^27.2.5", 1630 | "jest-message-util": "^27.2.5", 1631 | "jest-regex-util": "^27.0.6" 1632 | }, 1633 | "dependencies": { 1634 | "ansi-styles": { 1635 | "version": "5.2.0", 1636 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 1637 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 1638 | "dev": true 1639 | } 1640 | } 1641 | }, 1642 | "extract-zip": { 1643 | "version": "2.0.1", 1644 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 1645 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 1646 | "dev": true, 1647 | "requires": { 1648 | "@types/yauzl": "^2.9.1", 1649 | "debug": "^4.1.1", 1650 | "get-stream": "^5.1.0", 1651 | "yauzl": "^2.10.0" 1652 | } 1653 | }, 1654 | "fast-deep-equal": { 1655 | "version": "3.1.3", 1656 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1657 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1658 | "dev": true 1659 | }, 1660 | "fast-json-stable-stringify": { 1661 | "version": "2.1.0", 1662 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1663 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1664 | "dev": true 1665 | }, 1666 | "fast-levenshtein": { 1667 | "version": "2.0.6", 1668 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1669 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1670 | "dev": true 1671 | }, 1672 | "fd-slicer": { 1673 | "version": "1.1.0", 1674 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 1675 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 1676 | "dev": true, 1677 | "requires": { 1678 | "pend": "~1.2.0" 1679 | } 1680 | }, 1681 | "file-entry-cache": { 1682 | "version": "6.0.1", 1683 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1684 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1685 | "dev": true, 1686 | "requires": { 1687 | "flat-cache": "^3.0.4" 1688 | } 1689 | }, 1690 | "fill-range": { 1691 | "version": "7.0.1", 1692 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1693 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1694 | "dev": true, 1695 | "requires": { 1696 | "to-regex-range": "^5.0.1" 1697 | } 1698 | }, 1699 | "flat-cache": { 1700 | "version": "3.0.4", 1701 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1702 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1703 | "dev": true, 1704 | "requires": { 1705 | "flatted": "^3.1.0", 1706 | "rimraf": "^3.0.2" 1707 | } 1708 | }, 1709 | "flatted": { 1710 | "version": "3.2.5", 1711 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", 1712 | "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", 1713 | "dev": true 1714 | }, 1715 | "fs.realpath": { 1716 | "version": "1.0.0", 1717 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1718 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1719 | "dev": true 1720 | }, 1721 | "fsevents": { 1722 | "version": "2.3.2", 1723 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1724 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1725 | "dev": true, 1726 | "optional": true 1727 | }, 1728 | "function-bind": { 1729 | "version": "1.1.1", 1730 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1731 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1732 | "dev": true 1733 | }, 1734 | "functional-red-black-tree": { 1735 | "version": "1.0.1", 1736 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1737 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1738 | "dev": true 1739 | }, 1740 | "gensync": { 1741 | "version": "1.0.0-beta.2", 1742 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1743 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1744 | "dev": true 1745 | }, 1746 | "get-intrinsic": { 1747 | "version": "1.1.1", 1748 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 1749 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 1750 | "dev": true, 1751 | "requires": { 1752 | "function-bind": "^1.1.1", 1753 | "has": "^1.0.3", 1754 | "has-symbols": "^1.0.1" 1755 | } 1756 | }, 1757 | "get-stream": { 1758 | "version": "5.2.0", 1759 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 1760 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1761 | "dev": true, 1762 | "requires": { 1763 | "pump": "^3.0.0" 1764 | } 1765 | }, 1766 | "glob": { 1767 | "version": "7.2.0", 1768 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1769 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1770 | "dev": true, 1771 | "requires": { 1772 | "fs.realpath": "^1.0.0", 1773 | "inflight": "^1.0.4", 1774 | "inherits": "2", 1775 | "minimatch": "^3.0.4", 1776 | "once": "^1.3.0", 1777 | "path-is-absolute": "^1.0.0" 1778 | } 1779 | }, 1780 | "glob-parent": { 1781 | "version": "5.1.2", 1782 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1783 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1784 | "dev": true, 1785 | "requires": { 1786 | "is-glob": "^4.0.1" 1787 | } 1788 | }, 1789 | "globals": { 1790 | "version": "11.12.0", 1791 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1792 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1793 | "dev": true 1794 | }, 1795 | "globalyzer": { 1796 | "version": "0.1.0", 1797 | "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", 1798 | "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", 1799 | "dev": true 1800 | }, 1801 | "globrex": { 1802 | "version": "0.1.2", 1803 | "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", 1804 | "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", 1805 | "dev": true 1806 | }, 1807 | "graceful-fs": { 1808 | "version": "4.2.10", 1809 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 1810 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 1811 | "dev": true 1812 | }, 1813 | "has": { 1814 | "version": "1.0.3", 1815 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1816 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1817 | "dev": true, 1818 | "requires": { 1819 | "function-bind": "^1.1.1" 1820 | } 1821 | }, 1822 | "has-flag": { 1823 | "version": "3.0.0", 1824 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1825 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1826 | "dev": true 1827 | }, 1828 | "has-property-descriptors": { 1829 | "version": "1.0.0", 1830 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1831 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1832 | "dev": true, 1833 | "requires": { 1834 | "get-intrinsic": "^1.1.1" 1835 | } 1836 | }, 1837 | "has-symbols": { 1838 | "version": "1.0.3", 1839 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1840 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1841 | "dev": true 1842 | }, 1843 | "https-proxy-agent": { 1844 | "version": "5.0.0", 1845 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 1846 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 1847 | "dev": true, 1848 | "requires": { 1849 | "agent-base": "6", 1850 | "debug": "4" 1851 | } 1852 | }, 1853 | "ignore": { 1854 | "version": "5.2.0", 1855 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 1856 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 1857 | "dev": true 1858 | }, 1859 | "import-fresh": { 1860 | "version": "3.3.0", 1861 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1862 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1863 | "dev": true, 1864 | "requires": { 1865 | "parent-module": "^1.0.0", 1866 | "resolve-from": "^4.0.0" 1867 | } 1868 | }, 1869 | "imurmurhash": { 1870 | "version": "0.1.4", 1871 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1872 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1873 | "dev": true 1874 | }, 1875 | "inflight": { 1876 | "version": "1.0.6", 1877 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1878 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1879 | "dev": true, 1880 | "requires": { 1881 | "once": "^1.3.0", 1882 | "wrappy": "1" 1883 | } 1884 | }, 1885 | "inherits": { 1886 | "version": "2.0.4", 1887 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1888 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1889 | "dev": true 1890 | }, 1891 | "ip": { 1892 | "version": "1.1.6", 1893 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.6.tgz", 1894 | "integrity": "sha512-/dAvCivFs/VexXAtiAoMIqyhkhStNC9CPD0h1noonimOgB1xrCkexF2c5CjlqQ72GgMPjN6tiV+oreoPv3Ft1g==", 1895 | "dev": true 1896 | }, 1897 | "is-binary-path": { 1898 | "version": "2.1.0", 1899 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1900 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1901 | "dev": true, 1902 | "requires": { 1903 | "binary-extensions": "^2.0.0" 1904 | } 1905 | }, 1906 | "is-core-module": { 1907 | "version": "2.9.0", 1908 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 1909 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 1910 | "dev": true, 1911 | "requires": { 1912 | "has": "^1.0.3" 1913 | } 1914 | }, 1915 | "is-docker": { 1916 | "version": "2.2.1", 1917 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1918 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1919 | "dev": true 1920 | }, 1921 | "is-extglob": { 1922 | "version": "2.1.1", 1923 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1924 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1925 | "dev": true 1926 | }, 1927 | "is-glob": { 1928 | "version": "4.0.3", 1929 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1930 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1931 | "dev": true, 1932 | "requires": { 1933 | "is-extglob": "^2.1.1" 1934 | } 1935 | }, 1936 | "is-number": { 1937 | "version": "7.0.0", 1938 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1939 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1940 | "dev": true 1941 | }, 1942 | "is-wsl": { 1943 | "version": "2.2.0", 1944 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 1945 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 1946 | "dev": true, 1947 | "requires": { 1948 | "is-docker": "^2.0.0" 1949 | } 1950 | }, 1951 | "isexe": { 1952 | "version": "2.0.0", 1953 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1954 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1955 | "dev": true 1956 | }, 1957 | "jest-diff": { 1958 | "version": "27.5.1", 1959 | "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", 1960 | "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", 1961 | "dev": true, 1962 | "requires": { 1963 | "chalk": "^4.0.0", 1964 | "diff-sequences": "^27.5.1", 1965 | "jest-get-type": "^27.5.1", 1966 | "pretty-format": "^27.5.1" 1967 | }, 1968 | "dependencies": { 1969 | "ansi-styles": { 1970 | "version": "4.3.0", 1971 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1972 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1973 | "dev": true, 1974 | "requires": { 1975 | "color-convert": "^2.0.1" 1976 | } 1977 | }, 1978 | "chalk": { 1979 | "version": "4.1.2", 1980 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1981 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1982 | "dev": true, 1983 | "requires": { 1984 | "ansi-styles": "^4.1.0", 1985 | "supports-color": "^7.1.0" 1986 | } 1987 | }, 1988 | "color-convert": { 1989 | "version": "2.0.1", 1990 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1991 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1992 | "dev": true, 1993 | "requires": { 1994 | "color-name": "~1.1.4" 1995 | } 1996 | }, 1997 | "color-name": { 1998 | "version": "1.1.4", 1999 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2000 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2001 | "dev": true 2002 | }, 2003 | "has-flag": { 2004 | "version": "4.0.0", 2005 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2006 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2007 | "dev": true 2008 | }, 2009 | "supports-color": { 2010 | "version": "7.2.0", 2011 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2012 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2013 | "dev": true, 2014 | "requires": { 2015 | "has-flag": "^4.0.0" 2016 | } 2017 | } 2018 | } 2019 | }, 2020 | "jest-get-type": { 2021 | "version": "27.5.1", 2022 | "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", 2023 | "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", 2024 | "dev": true 2025 | }, 2026 | "jest-matcher-utils": { 2027 | "version": "27.2.5", 2028 | "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", 2029 | "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", 2030 | "dev": true, 2031 | "requires": { 2032 | "chalk": "^4.0.0", 2033 | "jest-diff": "^27.2.5", 2034 | "jest-get-type": "^27.0.6", 2035 | "pretty-format": "^27.2.5" 2036 | }, 2037 | "dependencies": { 2038 | "ansi-styles": { 2039 | "version": "4.3.0", 2040 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2041 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2042 | "dev": true, 2043 | "requires": { 2044 | "color-convert": "^2.0.1" 2045 | } 2046 | }, 2047 | "chalk": { 2048 | "version": "4.1.2", 2049 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2050 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2051 | "dev": true, 2052 | "requires": { 2053 | "ansi-styles": "^4.1.0", 2054 | "supports-color": "^7.1.0" 2055 | } 2056 | }, 2057 | "color-convert": { 2058 | "version": "2.0.1", 2059 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2060 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2061 | "dev": true, 2062 | "requires": { 2063 | "color-name": "~1.1.4" 2064 | } 2065 | }, 2066 | "color-name": { 2067 | "version": "1.1.4", 2068 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2069 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2070 | "dev": true 2071 | }, 2072 | "has-flag": { 2073 | "version": "4.0.0", 2074 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2075 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2076 | "dev": true 2077 | }, 2078 | "supports-color": { 2079 | "version": "7.2.0", 2080 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2081 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2082 | "dev": true, 2083 | "requires": { 2084 | "has-flag": "^4.0.0" 2085 | } 2086 | } 2087 | } 2088 | }, 2089 | "jest-message-util": { 2090 | "version": "27.5.1", 2091 | "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", 2092 | "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", 2093 | "dev": true, 2094 | "requires": { 2095 | "@babel/code-frame": "^7.12.13", 2096 | "@jest/types": "^27.5.1", 2097 | "@types/stack-utils": "^2.0.0", 2098 | "chalk": "^4.0.0", 2099 | "graceful-fs": "^4.2.9", 2100 | "micromatch": "^4.0.4", 2101 | "pretty-format": "^27.5.1", 2102 | "slash": "^3.0.0", 2103 | "stack-utils": "^2.0.3" 2104 | }, 2105 | "dependencies": { 2106 | "ansi-styles": { 2107 | "version": "4.3.0", 2108 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2109 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2110 | "dev": true, 2111 | "requires": { 2112 | "color-convert": "^2.0.1" 2113 | } 2114 | }, 2115 | "chalk": { 2116 | "version": "4.1.2", 2117 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2118 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2119 | "dev": true, 2120 | "requires": { 2121 | "ansi-styles": "^4.1.0", 2122 | "supports-color": "^7.1.0" 2123 | } 2124 | }, 2125 | "color-convert": { 2126 | "version": "2.0.1", 2127 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2128 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2129 | "dev": true, 2130 | "requires": { 2131 | "color-name": "~1.1.4" 2132 | } 2133 | }, 2134 | "color-name": { 2135 | "version": "1.1.4", 2136 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2137 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2138 | "dev": true 2139 | }, 2140 | "has-flag": { 2141 | "version": "4.0.0", 2142 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2143 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2144 | "dev": true 2145 | }, 2146 | "supports-color": { 2147 | "version": "7.2.0", 2148 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2149 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2150 | "dev": true, 2151 | "requires": { 2152 | "has-flag": "^4.0.0" 2153 | } 2154 | } 2155 | } 2156 | }, 2157 | "jest-regex-util": { 2158 | "version": "27.5.1", 2159 | "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", 2160 | "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", 2161 | "dev": true 2162 | }, 2163 | "jpeg-js": { 2164 | "version": "0.4.3", 2165 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", 2166 | "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", 2167 | "dev": true 2168 | }, 2169 | "js-tokens": { 2170 | "version": "4.0.0", 2171 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2172 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2173 | "dev": true 2174 | }, 2175 | "js-yaml": { 2176 | "version": "4.1.0", 2177 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2178 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2179 | "dev": true, 2180 | "requires": { 2181 | "argparse": "^2.0.1" 2182 | } 2183 | }, 2184 | "jsesc": { 2185 | "version": "2.5.2", 2186 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2187 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2188 | "dev": true 2189 | }, 2190 | "json-schema-traverse": { 2191 | "version": "0.4.1", 2192 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2193 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2194 | "dev": true 2195 | }, 2196 | "json-stable-stringify-without-jsonify": { 2197 | "version": "1.0.1", 2198 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2199 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 2200 | "dev": true 2201 | }, 2202 | "json5": { 2203 | "version": "2.2.1", 2204 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", 2205 | "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", 2206 | "dev": true 2207 | }, 2208 | "kleur": { 2209 | "version": "4.1.4", 2210 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", 2211 | "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", 2212 | "dev": true 2213 | }, 2214 | "levn": { 2215 | "version": "0.4.1", 2216 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2217 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2218 | "dev": true, 2219 | "requires": { 2220 | "prelude-ls": "^1.2.1", 2221 | "type-check": "~0.4.0" 2222 | } 2223 | }, 2224 | "lodash.merge": { 2225 | "version": "4.6.2", 2226 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2227 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2228 | "dev": true 2229 | }, 2230 | "magic-string": { 2231 | "version": "0.26.1", 2232 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", 2233 | "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", 2234 | "dev": true, 2235 | "requires": { 2236 | "sourcemap-codec": "^1.4.8" 2237 | } 2238 | }, 2239 | "micromatch": { 2240 | "version": "4.0.5", 2241 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2242 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2243 | "dev": true, 2244 | "requires": { 2245 | "braces": "^3.0.2", 2246 | "picomatch": "^2.3.1" 2247 | } 2248 | }, 2249 | "mime": { 2250 | "version": "3.0.0", 2251 | "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", 2252 | "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", 2253 | "dev": true 2254 | }, 2255 | "minimatch": { 2256 | "version": "3.0.4", 2257 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2258 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2259 | "dev": true, 2260 | "requires": { 2261 | "brace-expansion": "^1.1.7" 2262 | } 2263 | }, 2264 | "mri": { 2265 | "version": "1.2.0", 2266 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 2267 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 2268 | "dev": true 2269 | }, 2270 | "mrmime": { 2271 | "version": "1.0.0", 2272 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", 2273 | "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", 2274 | "dev": true 2275 | }, 2276 | "ms": { 2277 | "version": "2.1.3", 2278 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2279 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2280 | "dev": true 2281 | }, 2282 | "nanoid": { 2283 | "version": "3.3.4", 2284 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 2285 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 2286 | "dev": true 2287 | }, 2288 | "natural-compare": { 2289 | "version": "1.4.0", 2290 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2291 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 2292 | "dev": true 2293 | }, 2294 | "node-releases": { 2295 | "version": "2.0.4", 2296 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", 2297 | "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", 2298 | "dev": true 2299 | }, 2300 | "normalize-path": { 2301 | "version": "3.0.0", 2302 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2303 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2304 | "dev": true 2305 | }, 2306 | "object-keys": { 2307 | "version": "1.1.1", 2308 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2309 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2310 | "dev": true 2311 | }, 2312 | "object.assign": { 2313 | "version": "4.1.2", 2314 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", 2315 | "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", 2316 | "dev": true, 2317 | "requires": { 2318 | "call-bind": "^1.0.0", 2319 | "define-properties": "^1.1.3", 2320 | "has-symbols": "^1.0.1", 2321 | "object-keys": "^1.1.1" 2322 | } 2323 | }, 2324 | "once": { 2325 | "version": "1.4.0", 2326 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2327 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2328 | "dev": true, 2329 | "requires": { 2330 | "wrappy": "1" 2331 | } 2332 | }, 2333 | "open": { 2334 | "version": "8.4.0", 2335 | "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", 2336 | "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", 2337 | "dev": true, 2338 | "requires": { 2339 | "define-lazy-prop": "^2.0.0", 2340 | "is-docker": "^2.1.1", 2341 | "is-wsl": "^2.2.0" 2342 | } 2343 | }, 2344 | "optionator": { 2345 | "version": "0.9.1", 2346 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 2347 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 2348 | "dev": true, 2349 | "requires": { 2350 | "deep-is": "^0.1.3", 2351 | "fast-levenshtein": "^2.0.6", 2352 | "levn": "^0.4.1", 2353 | "prelude-ls": "^1.2.1", 2354 | "type-check": "^0.4.0", 2355 | "word-wrap": "^1.2.3" 2356 | } 2357 | }, 2358 | "packet-reader": { 2359 | "version": "1.0.0", 2360 | "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", 2361 | "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" 2362 | }, 2363 | "parent-module": { 2364 | "version": "1.0.1", 2365 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2366 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2367 | "dev": true, 2368 | "requires": { 2369 | "callsites": "^3.0.0" 2370 | } 2371 | }, 2372 | "path-is-absolute": { 2373 | "version": "1.0.1", 2374 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2375 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2376 | "dev": true 2377 | }, 2378 | "path-key": { 2379 | "version": "3.1.1", 2380 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2381 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2382 | "dev": true 2383 | }, 2384 | "path-parse": { 2385 | "version": "1.0.7", 2386 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2387 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2388 | "dev": true 2389 | }, 2390 | "pend": { 2391 | "version": "1.2.0", 2392 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2393 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 2394 | "dev": true 2395 | }, 2396 | "pg": { 2397 | "version": "8.7.1", 2398 | "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.1.tgz", 2399 | "integrity": "sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==", 2400 | "requires": { 2401 | "buffer-writer": "2.0.0", 2402 | "packet-reader": "1.0.0", 2403 | "pg-connection-string": "^2.5.0", 2404 | "pg-pool": "^3.4.1", 2405 | "pg-protocol": "^1.5.0", 2406 | "pg-types": "^2.1.0", 2407 | "pgpass": "1.x" 2408 | } 2409 | }, 2410 | "pg-connection-string": { 2411 | "version": "2.5.0", 2412 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", 2413 | "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" 2414 | }, 2415 | "pg-int8": { 2416 | "version": "1.0.1", 2417 | "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", 2418 | "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" 2419 | }, 2420 | "pg-minify": { 2421 | "version": "1.6.2", 2422 | "resolved": "https://registry.npmjs.org/pg-minify/-/pg-minify-1.6.2.tgz", 2423 | "integrity": "sha512-1KdmFGGTP6jplJoI8MfvRlfvMiyBivMRP7/ffh4a11RUFJ7kC2J0ZHlipoKiH/1hz+DVgceon9U2qbaHpPeyPg==" 2424 | }, 2425 | "pg-pool": { 2426 | "version": "3.5.1", 2427 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz", 2428 | "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==" 2429 | }, 2430 | "pg-promise": { 2431 | "version": "10.11.1", 2432 | "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-10.11.1.tgz", 2433 | "integrity": "sha512-HAv32WSKf2m2RqHerW5RmANn/mcXIwWXbg/gOfGQcoS0SE+8iBi3Jj4JmoR4PNzSEozo/y/npy4e6F16psOItw==", 2434 | "requires": { 2435 | "assert-options": "0.7.0", 2436 | "pg": "8.7.1", 2437 | "pg-minify": "1.6.2", 2438 | "spex": "3.2.0" 2439 | } 2440 | }, 2441 | "pg-protocol": { 2442 | "version": "1.5.0", 2443 | "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", 2444 | "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" 2445 | }, 2446 | "pg-types": { 2447 | "version": "2.2.0", 2448 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", 2449 | "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", 2450 | "requires": { 2451 | "pg-int8": "1.0.1", 2452 | "postgres-array": "~2.0.0", 2453 | "postgres-bytea": "~1.0.0", 2454 | "postgres-date": "~1.0.4", 2455 | "postgres-interval": "^1.1.0" 2456 | } 2457 | }, 2458 | "pgpass": { 2459 | "version": "1.0.5", 2460 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", 2461 | "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", 2462 | "requires": { 2463 | "split2": "^4.1.0" 2464 | } 2465 | }, 2466 | "picocolors": { 2467 | "version": "1.0.0", 2468 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2469 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2470 | "dev": true 2471 | }, 2472 | "picomatch": { 2473 | "version": "2.3.1", 2474 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2475 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2476 | "dev": true 2477 | }, 2478 | "pirates": { 2479 | "version": "4.0.4", 2480 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", 2481 | "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", 2482 | "dev": true 2483 | }, 2484 | "pixelmatch": { 2485 | "version": "5.2.1", 2486 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", 2487 | "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", 2488 | "dev": true, 2489 | "requires": { 2490 | "pngjs": "^4.0.1" 2491 | }, 2492 | "dependencies": { 2493 | "pngjs": { 2494 | "version": "4.0.1", 2495 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", 2496 | "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", 2497 | "dev": true 2498 | } 2499 | } 2500 | }, 2501 | "pngjs": { 2502 | "version": "6.0.0", 2503 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", 2504 | "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", 2505 | "dev": true 2506 | }, 2507 | "postcss": { 2508 | "version": "8.4.13", 2509 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", 2510 | "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", 2511 | "dev": true, 2512 | "requires": { 2513 | "nanoid": "^3.3.3", 2514 | "picocolors": "^1.0.0", 2515 | "source-map-js": "^1.0.2" 2516 | } 2517 | }, 2518 | "postgres-array": { 2519 | "version": "2.0.0", 2520 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", 2521 | "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" 2522 | }, 2523 | "postgres-bytea": { 2524 | "version": "1.0.0", 2525 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", 2526 | "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" 2527 | }, 2528 | "postgres-date": { 2529 | "version": "1.0.7", 2530 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", 2531 | "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" 2532 | }, 2533 | "postgres-interval": { 2534 | "version": "1.2.0", 2535 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", 2536 | "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", 2537 | "requires": { 2538 | "xtend": "^4.0.0" 2539 | } 2540 | }, 2541 | "prelude-ls": { 2542 | "version": "1.2.1", 2543 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2544 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2545 | "dev": true 2546 | }, 2547 | "pretty-format": { 2548 | "version": "27.5.1", 2549 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 2550 | "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 2551 | "dev": true, 2552 | "requires": { 2553 | "ansi-regex": "^5.0.1", 2554 | "ansi-styles": "^5.0.0", 2555 | "react-is": "^17.0.1" 2556 | }, 2557 | "dependencies": { 2558 | "ansi-styles": { 2559 | "version": "5.2.0", 2560 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 2561 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 2562 | "dev": true 2563 | } 2564 | } 2565 | }, 2566 | "progress": { 2567 | "version": "2.0.3", 2568 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2569 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2570 | "dev": true 2571 | }, 2572 | "proper-lockfile": { 2573 | "version": "4.1.2", 2574 | "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", 2575 | "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", 2576 | "dev": true, 2577 | "requires": { 2578 | "graceful-fs": "^4.2.4", 2579 | "retry": "^0.12.0", 2580 | "signal-exit": "^3.0.2" 2581 | } 2582 | }, 2583 | "proxy-from-env": { 2584 | "version": "1.1.0", 2585 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 2586 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", 2587 | "dev": true 2588 | }, 2589 | "pump": { 2590 | "version": "3.0.0", 2591 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2592 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2593 | "dev": true, 2594 | "requires": { 2595 | "end-of-stream": "^1.1.0", 2596 | "once": "^1.3.1" 2597 | } 2598 | }, 2599 | "punycode": { 2600 | "version": "2.1.1", 2601 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 2602 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 2603 | "dev": true 2604 | }, 2605 | "react-is": { 2606 | "version": "17.0.2", 2607 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 2608 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", 2609 | "dev": true 2610 | }, 2611 | "readdirp": { 2612 | "version": "3.6.0", 2613 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2614 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2615 | "dev": true, 2616 | "requires": { 2617 | "picomatch": "^2.2.1" 2618 | } 2619 | }, 2620 | "regexparam": { 2621 | "version": "2.0.0", 2622 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", 2623 | "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==", 2624 | "dev": true 2625 | }, 2626 | "regexpp": { 2627 | "version": "3.2.0", 2628 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 2629 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 2630 | "dev": true 2631 | }, 2632 | "resolve": { 2633 | "version": "1.22.0", 2634 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 2635 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 2636 | "dev": true, 2637 | "requires": { 2638 | "is-core-module": "^2.8.1", 2639 | "path-parse": "^1.0.7", 2640 | "supports-preserve-symlinks-flag": "^1.0.0" 2641 | } 2642 | }, 2643 | "resolve-from": { 2644 | "version": "4.0.0", 2645 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2646 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2647 | "dev": true 2648 | }, 2649 | "retry": { 2650 | "version": "0.12.0", 2651 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", 2652 | "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", 2653 | "dev": true 2654 | }, 2655 | "rimraf": { 2656 | "version": "3.0.2", 2657 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2658 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2659 | "dev": true, 2660 | "requires": { 2661 | "glob": "^7.1.3" 2662 | } 2663 | }, 2664 | "rollup": { 2665 | "version": "2.72.1", 2666 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.1.tgz", 2667 | "integrity": "sha512-NTc5UGy/NWFGpSqF1lFY8z9Adri6uhyMLI6LvPAXdBKoPRFhIIiBUpt+Qg2awixqO3xvzSijjhnb4+QEZwJmxA==", 2668 | "dev": true, 2669 | "requires": { 2670 | "fsevents": "~2.3.2" 2671 | } 2672 | }, 2673 | "sade": { 2674 | "version": "1.8.1", 2675 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 2676 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 2677 | "dev": true, 2678 | "requires": { 2679 | "mri": "^1.1.0" 2680 | } 2681 | }, 2682 | "safe-buffer": { 2683 | "version": "5.1.2", 2684 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2685 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2686 | "dev": true 2687 | }, 2688 | "semver": { 2689 | "version": "6.3.0", 2690 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2691 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2692 | "dev": true 2693 | }, 2694 | "shebang-command": { 2695 | "version": "2.0.0", 2696 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2697 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2698 | "dev": true, 2699 | "requires": { 2700 | "shebang-regex": "^3.0.0" 2701 | } 2702 | }, 2703 | "shebang-regex": { 2704 | "version": "3.0.0", 2705 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2706 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2707 | "dev": true 2708 | }, 2709 | "signal-exit": { 2710 | "version": "3.0.7", 2711 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2712 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2713 | "dev": true 2714 | }, 2715 | "slash": { 2716 | "version": "3.0.0", 2717 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2718 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2719 | "dev": true 2720 | }, 2721 | "smart-buffer": { 2722 | "version": "4.2.0", 2723 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", 2724 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", 2725 | "dev": true 2726 | }, 2727 | "socks": { 2728 | "version": "2.6.2", 2729 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", 2730 | "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", 2731 | "dev": true, 2732 | "requires": { 2733 | "ip": "^1.1.5", 2734 | "smart-buffer": "^4.2.0" 2735 | } 2736 | }, 2737 | "socks-proxy-agent": { 2738 | "version": "6.1.1", 2739 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", 2740 | "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", 2741 | "dev": true, 2742 | "requires": { 2743 | "agent-base": "^6.0.2", 2744 | "debug": "^4.3.1", 2745 | "socks": "^2.6.1" 2746 | } 2747 | }, 2748 | "source-map": { 2749 | "version": "0.5.7", 2750 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2751 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2752 | "dev": true 2753 | }, 2754 | "source-map-js": { 2755 | "version": "1.0.2", 2756 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2757 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2758 | "dev": true 2759 | }, 2760 | "source-map-support": { 2761 | "version": "0.4.18", 2762 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 2763 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 2764 | "dev": true, 2765 | "requires": { 2766 | "source-map": "^0.5.6" 2767 | } 2768 | }, 2769 | "sourcemap-codec": { 2770 | "version": "1.4.8", 2771 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 2772 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 2773 | "dev": true 2774 | }, 2775 | "spex": { 2776 | "version": "3.2.0", 2777 | "resolved": "https://registry.npmjs.org/spex/-/spex-3.2.0.tgz", 2778 | "integrity": "sha512-9srjJM7NaymrpwMHvSmpDeIK5GoRMX/Tq0E8aOlDPS54dDnDUIp30DrP9SphMPEETDLzEM9+4qo+KipmbtPecg==" 2779 | }, 2780 | "split2": { 2781 | "version": "4.1.0", 2782 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", 2783 | "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" 2784 | }, 2785 | "stack-utils": { 2786 | "version": "2.0.5", 2787 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", 2788 | "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", 2789 | "dev": true, 2790 | "requires": { 2791 | "escape-string-regexp": "^2.0.0" 2792 | }, 2793 | "dependencies": { 2794 | "escape-string-regexp": { 2795 | "version": "2.0.0", 2796 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", 2797 | "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", 2798 | "dev": true 2799 | } 2800 | } 2801 | }, 2802 | "strip-ansi": { 2803 | "version": "6.0.1", 2804 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2805 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2806 | "dev": true, 2807 | "requires": { 2808 | "ansi-regex": "^5.0.1" 2809 | } 2810 | }, 2811 | "strip-json-comments": { 2812 | "version": "3.1.1", 2813 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 2814 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 2815 | "dev": true 2816 | }, 2817 | "supports-color": { 2818 | "version": "5.5.0", 2819 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2820 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2821 | "dev": true, 2822 | "requires": { 2823 | "has-flag": "^3.0.0" 2824 | } 2825 | }, 2826 | "supports-preserve-symlinks-flag": { 2827 | "version": "1.0.0", 2828 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2829 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2830 | "dev": true 2831 | }, 2832 | "svelte": { 2833 | "version": "3.48.0", 2834 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", 2835 | "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==", 2836 | "dev": true 2837 | }, 2838 | "svelte-hmr": { 2839 | "version": "0.14.11", 2840 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.11.tgz", 2841 | "integrity": "sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==", 2842 | "dev": true 2843 | }, 2844 | "text-table": { 2845 | "version": "0.2.0", 2846 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2847 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2848 | "dev": true 2849 | }, 2850 | "tiny-glob": { 2851 | "version": "0.2.9", 2852 | "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", 2853 | "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", 2854 | "dev": true, 2855 | "requires": { 2856 | "globalyzer": "0.1.0", 2857 | "globrex": "^0.1.2" 2858 | } 2859 | }, 2860 | "to-fast-properties": { 2861 | "version": "2.0.0", 2862 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2863 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 2864 | "dev": true 2865 | }, 2866 | "to-regex-range": { 2867 | "version": "5.0.1", 2868 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2869 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2870 | "dev": true, 2871 | "requires": { 2872 | "is-number": "^7.0.0" 2873 | } 2874 | }, 2875 | "type-check": { 2876 | "version": "0.4.0", 2877 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 2878 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 2879 | "dev": true, 2880 | "requires": { 2881 | "prelude-ls": "^1.2.1" 2882 | } 2883 | }, 2884 | "type-fest": { 2885 | "version": "0.20.2", 2886 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 2887 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 2888 | "dev": true 2889 | }, 2890 | "uri-js": { 2891 | "version": "4.4.1", 2892 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 2893 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 2894 | "dev": true, 2895 | "requires": { 2896 | "punycode": "^2.1.0" 2897 | } 2898 | }, 2899 | "v8-compile-cache": { 2900 | "version": "2.3.0", 2901 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", 2902 | "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", 2903 | "dev": true 2904 | }, 2905 | "vite": { 2906 | "version": "2.9.8", 2907 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.8.tgz", 2908 | "integrity": "sha512-zsBGwn5UT3YS0NLSJ7hnR54+vUKfgzMUh/Z9CxF1YKEBVIe213+63jrFLmZphgGI5zXwQCSmqIdbPuE8NJywPw==", 2909 | "dev": true, 2910 | "requires": { 2911 | "esbuild": "^0.14.27", 2912 | "fsevents": "~2.3.2", 2913 | "postcss": "^8.4.13", 2914 | "resolve": "^1.22.0", 2915 | "rollup": "^2.59.0" 2916 | } 2917 | }, 2918 | "which": { 2919 | "version": "2.0.2", 2920 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2921 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2922 | "dev": true, 2923 | "requires": { 2924 | "isexe": "^2.0.0" 2925 | } 2926 | }, 2927 | "word-wrap": { 2928 | "version": "1.2.3", 2929 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2930 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2931 | "dev": true 2932 | }, 2933 | "worktop": { 2934 | "version": "0.8.0-next.13", 2935 | "resolved": "https://registry.npmjs.org/worktop/-/worktop-0.8.0-next.13.tgz", 2936 | "integrity": "sha512-aLPWSneFtPJr3RAf841orF9GNlVdVkQd2Wj/BbcGHp3whBZoXx6dcwwClA9fezm7muNan4SuT+ZTyMWdoJSCAg==", 2937 | "dev": true, 2938 | "requires": { 2939 | "mrmime": "^1.0.0", 2940 | "regexparam": "^2.0.0" 2941 | } 2942 | }, 2943 | "wrappy": { 2944 | "version": "1.0.2", 2945 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2946 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2947 | "dev": true 2948 | }, 2949 | "ws": { 2950 | "version": "8.4.2", 2951 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", 2952 | "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", 2953 | "dev": true 2954 | }, 2955 | "xtend": { 2956 | "version": "4.0.2", 2957 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2958 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 2959 | }, 2960 | "yauzl": { 2961 | "version": "2.10.0", 2962 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2963 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 2964 | "dev": true, 2965 | "requires": { 2966 | "buffer-crc32": "~0.2.3", 2967 | "fd-slicer": "~1.1.0" 2968 | } 2969 | }, 2970 | "yazl": { 2971 | "version": "2.5.1", 2972 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", 2973 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", 2974 | "dev": true, 2975 | "requires": { 2976 | "buffer-crc32": "~0.2.3" 2977 | } 2978 | } 2979 | } 2980 | } 2981 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-postgres-demo", 3 | "version": "0.0.1", 4 | "scripts": { 5 | "dev": "svelte-kit dev", 6 | "build": "svelte-kit build", 7 | "package": "svelte-kit package", 8 | "preview": "svelte-kit preview", 9 | "prepare": "svelte-kit sync", 10 | "test": "playwright test", 11 | "lint": "eslint --ignore-path .gitignore ." 12 | }, 13 | "devDependencies": { 14 | "@playwright/test": "^1.21.0", 15 | "@sveltejs/adapter-auto": "next", 16 | "@sveltejs/kit": "next", 17 | "eslint": "^8.12.0", 18 | "eslint-plugin-svelte3": "^4.0.0", 19 | "svelte": "^3.46.0" 20 | }, 21 | "type": "module", 22 | "dependencies": { 23 | "@fontsource/fira-mono": "^4.5.0", 24 | "@lukeed/uuid": "^2.0.0", 25 | "pg-promise": "^10.10.2", 26 | "cookie": "^0.4.1" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /playwright.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('@playwright/test').PlaywrightTestConfig} */ 2 | const config = { 3 | webServer: { 4 | command: 'npm run build && npm run preview', 5 | port: 3000 6 | } 7 | }; 8 | 9 | export default config; 10 | -------------------------------------------------------------------------------- /schema.sql: -------------------------------------------------------------------------------- 1 | CREATE EXTENSION IF NOT EXISTS pgcrypto; 2 | DROP TABLE IF EXISTS todos CASCADE; 3 | 4 | CREATE TABLE todos ( 5 | todo_id uuid PRIMARY KEY DEFAULT gen_random_uuid(), 6 | text varchar(40) UNIQUE NOT NULL, 7 | done BOOLEAN DEFAULT FALSE, 8 | user_id varchar(255) NOT NULL, 9 | created_at timestamptz DEFAULT NOW()::timestamptz 10 | ); 11 | -------------------------------------------------------------------------------- /src/app.css: -------------------------------------------------------------------------------- 1 | @import '@fontsource/fira-mono'; 2 | 3 | :root { 4 | font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, 5 | Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; 6 | --font-mono: 'Fira Mono', monospace; 7 | --pure-white: #ffffff; 8 | --primary-color: #b9c6d2; 9 | --secondary-color: #d0dde9; 10 | --tertiary-color: #edf0f8; 11 | --accent-color: #ff3e00; 12 | --heading-color: rgba(0, 0, 0, 0.7); 13 | --text-color: #444444; 14 | --background-without-opacity: rgba(255, 255, 255, 0.7); 15 | --column-width: 42rem; 16 | --column-margin-top: 4rem; 17 | } 18 | 19 | body { 20 | min-height: 100vh; 21 | margin: 0; 22 | background-color: var(--primary-color); 23 | background: linear-gradient( 24 | 180deg, 25 | var(--primary-color) 0%, 26 | var(--secondary-color) 10.45%, 27 | var(--tertiary-color) 41.35% 28 | ); 29 | } 30 | 31 | body::before { 32 | content: ''; 33 | width: 80vw; 34 | height: 100vh; 35 | position: absolute; 36 | top: 0; 37 | left: 10vw; 38 | z-index: -1; 39 | background: radial-gradient( 40 | 50% 50% at 50% 50%, 41 | var(--pure-white) 0%, 42 | rgba(255, 255, 255, 0) 100% 43 | ); 44 | opacity: 0.05; 45 | } 46 | 47 | #svelte { 48 | min-height: 100vh; 49 | display: flex; 50 | flex-direction: column; 51 | } 52 | 53 | h1, 54 | h2, 55 | p { 56 | font-weight: 400; 57 | color: var(--heading-color); 58 | } 59 | 60 | p { 61 | line-height: 1.5; 62 | } 63 | 64 | a { 65 | color: var(--accent-color); 66 | text-decoration: none; 67 | } 68 | 69 | a:hover { 70 | text-decoration: underline; 71 | } 72 | 73 | h1 { 74 | font-size: 2rem; 75 | text-align: center; 76 | } 77 | 78 | h2 { 79 | font-size: 1rem; 80 | } 81 | 82 | pre { 83 | font-size: 16px; 84 | font-family: var(--font-mono); 85 | background-color: rgba(255, 255, 255, 0.45); 86 | border-radius: 3px; 87 | box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); 88 | padding: 0.5em; 89 | overflow-x: auto; 90 | color: var(--text-color); 91 | } 92 | 93 | input, 94 | button { 95 | font-size: inherit; 96 | font-family: inherit; 97 | } 98 | 99 | button:focus:not(:focus-visible) { 100 | outline: none; 101 | } 102 | 103 | @media (min-width: 720px) { 104 | h1 { 105 | font-size: 2.4rem; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %svelte.head% 8 | 9 | 10 |
%svelte.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/hooks.js: -------------------------------------------------------------------------------- 1 | import { v4 as uuid } from '@lukeed/uuid'; 2 | 3 | import * as cookie from 'cookie'; 4 | 5 | export const handle = async ({ event, resolve }) => { 6 | const cookies = cookie.parse(event.request.headers.get('cookie') || ''); 7 | event.locals.userId = cookies['userId'] || uuid(); 8 | 9 | const response = await resolve(event); 10 | 11 | if (!cookies['userId']) { 12 | // if this is the first time the user has visited this app, 13 | // set a cookie so that we recognise them when they return 14 | response.headers.set( 15 | 'set-cookie', 16 | cookie.serialize('userId', event.locals.userId, { 17 | path: '/', 18 | httpOnly: true 19 | }) 20 | ); 21 | } 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /src/lib/Counter.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 22 | 23 |
24 |
25 | 26 | {Math.floor($displayed_count)} 27 |
28 |
29 | 30 | 35 |
36 | 37 | 104 | -------------------------------------------------------------------------------- /src/lib/_db.js: -------------------------------------------------------------------------------- 1 | import pgPromise from 'pg-promise' 2 | 3 | const pgOptions = { 4 | receive: (data/*, result, e*/) => { 5 | camelizeColumns(data) 6 | } 7 | } 8 | 9 | const camelizeColumns = (data) => { 10 | const template = data[0] 11 | for (const prop in template) { 12 | const camel = pgPromise.utils.camelize(prop) 13 | if (!(camel in template)) { 14 | for (let i = 0; i < data.length; i++) { 15 | const d = data[i] 16 | d[camel] = d[prop] 17 | delete d[prop] 18 | } 19 | } 20 | } 21 | } 22 | 23 | const DB_SSL = import.meta.env.VITE_DB_SSL; 24 | const DB_URL = import.meta.env.VITE_DB_URL; 25 | 26 | const pgp = pgPromise(pgOptions) 27 | 28 | // Configure types 29 | // https://github.com/vitaly-t/pg-promise/wiki/FAQ#how-to-access-the-instance-of-node-postgres-thats-used 30 | 31 | const types = pgp.pg.types 32 | // Use strings to represent timestamps rather than a Date object (pg default) 33 | types.setTypeParser(types.builtins.TIMESTAMPTZ, function (val) { return new Date(val).toJSON() }) 34 | types.setTypeParser(types.builtins.DATE, function (val) { return val }) 35 | 36 | // Default number parsing Postgres -> JS Types (maybe consider going away from numeric for performance gains and automatic conversion to JS floats) 37 | // smallint: parseInt() 38 | // integer: parseInt() 39 | // bigint: string 40 | // decimal: string 41 | // numeric: string 42 | // real: parseFloat() 43 | // double precision: parseFloat() 44 | // smallserial: parseInt() 45 | // serial: parseInt() 46 | // bigserial: string 47 | 48 | // Singleton usage as described here 49 | // https://www.codeoftheprogrammer.com/2020/01/16/postgresql-from-nextjs-api-route/ 50 | 51 | // Avoid self-signed ssl errors (with DigitalOcean) as described here 52 | // https://www.javaniceday.com/post/pg-promise-self-signed-certificate-error-in-postgres 53 | 54 | let ssl = null 55 | if (DB_SSL) { 56 | ssl = { rejectUnauthorized: false } 57 | } 58 | 59 | // Or you can use it this way 60 | const config = { 61 | connectionString: DB_URL, // 'postgres://john:pass123@localhost:5432/products', 62 | max: 30, 63 | ssl 64 | } 65 | 66 | // Use a symbol to store a global instance of a connection, and to access it from the singleton. 67 | const DB_KEY = Symbol.for('Ken.db') 68 | const globalSymbols = Object.getOwnPropertySymbols(global) 69 | const hasDb = (globalSymbols.indexOf(DB_KEY) > -1) 70 | if (!hasDb) { 71 | global[DB_KEY] = pgp(config) 72 | } 73 | 74 | // Create and freeze the singleton object so that it has an instance property. 75 | const singleton = {} 76 | Object.defineProperty(singleton, 'instance', { 77 | get: function () { 78 | return global[DB_KEY] 79 | } 80 | }) 81 | Object.freeze(singleton) 82 | 83 | export default singleton -------------------------------------------------------------------------------- /src/lib/api.js: -------------------------------------------------------------------------------- 1 | import _db from './_db'; 2 | 3 | /** Use a singleton DB instance */ 4 | const db = _db.instance; 5 | 6 | /** 7 | * API 8 | * 9 | * TODO: All data manipulation should be implemented as a Postgres function, including error handling. 10 | */ 11 | export async function getTodos (userId) { 12 | return db.any('SELECT * FROM todos WHERE user_id = $1', [userId]); 13 | } 14 | 15 | export async function createTodo (userId, { text, done }) { 16 | return db.one('INSERT INTO todos(user_id, text, done) VALUES($1, $2, $3) RETURNING *', [userId, text, done]); 17 | } 18 | 19 | export async function deleteTodo (userId, todoId) { 20 | return db.none('DELETE FROM todos WHERE user_id = $1 AND todo_id = $2', [userId, todoId]); 21 | } 22 | 23 | export async function updateTodo(userId, todoId, {text, done}) { 24 | await db.one(...__sqlUpdate('todos', {text, done}, {user_id: userId, todo_id: todoId})); 25 | } 26 | 27 | /** 28 | * Build an SQL Update statement, excluding all attrs that are undefined 29 | * 30 | * @example db.one(...__sqlUpdate('todos', {text: 'some-text', done: undefined}, {todo_id: 'todo-1', user_id: 'user-1'})) 31 | */ 32 | function __sqlUpdate(relation, attrs, wheres) { 33 | const attrKeys = Object.keys(attrs); 34 | const whereKeys = Object.keys(wheres); 35 | const values = []; 36 | const setParts = []; 37 | const whereParts = []; 38 | let argCount = 0; 39 | 40 | for (let i = 0; i < attrKeys.length; i++) { 41 | const key = attrKeys[i]; 42 | const value = attrs[key]; 43 | if (value !== undefined) { 44 | argCount += 1; 45 | values.push(value); 46 | setParts.push(`${key} = $${argCount}`); 47 | } 48 | } 49 | 50 | for (let i = 0; i < whereKeys.length; i++) { 51 | const key = whereKeys[i]; 52 | const value = wheres[key]; 53 | if (value !== undefined) { 54 | argCount += 1; 55 | values.push(value); 56 | whereParts.push(`${key} = $${argCount}`); 57 | } 58 | } 59 | 60 | return [`UPDATE ${relation} SET ${setParts.join(', ')} WHERE ${whereParts.join(' AND ')} RETURNING *`, values]; 61 | } 62 | -------------------------------------------------------------------------------- /src/lib/form.js: -------------------------------------------------------------------------------- 1 | import { invalidate } from '$app/navigation'; 2 | 3 | // this action (https://svelte.dev/tutorial/actions) allows us to 4 | // progressively enhance a
that already works without JS 5 | export function enhance(form, { pending, error, result } = {}) { 6 | let current_token; 7 | 8 | async function handle_submit(e) { 9 | const token = (current_token = {}); 10 | 11 | e.preventDefault(); 12 | 13 | const data = new FormData(form); 14 | 15 | if (pending) pending({ data, form }); 16 | 17 | try { 18 | const response = await fetch(form.action, { 19 | method: form.method, 20 | headers: { 21 | accept: 'application/json' 22 | }, 23 | body: data 24 | }); 25 | 26 | if (token !== current_token) return; 27 | 28 | if (response.ok) { 29 | if (result) result({ data, form, response }); 30 | 31 | const url = new URL(form.action); 32 | url.search = url.hash = ''; 33 | invalidate(url.href); 34 | } else if (error) { 35 | error({ data, form, error: null, response }); 36 | } else { 37 | console.error(await response.text()); 38 | } 39 | } catch (e) { 40 | if (error && e instanceof Error) { 41 | error({ data, form, error: e, response: null }); 42 | } else { 43 | throw e; 44 | } 45 | } 46 | } 47 | 48 | form.addEventListener('submit', handle_submit); 49 | 50 | return { 51 | destroy() { 52 | form.removeEventListener('submit', handle_submit); 53 | } 54 | }; 55 | } 56 | -------------------------------------------------------------------------------- /src/lib/header/Header.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 |
8 | 9 | SvelteKit 10 | 11 |
12 | 13 | 30 | 31 |
32 | 33 |
34 |
35 | 36 | 125 | -------------------------------------------------------------------------------- /src/lib/header/svelte-logo.svg: -------------------------------------------------------------------------------- 1 | svelte-logo -------------------------------------------------------------------------------- /src/routes/__layout.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 |
7 | 8 |
9 | 10 |
11 | 12 | 15 | 16 | 46 | -------------------------------------------------------------------------------- /src/routes/about.svelte: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | About 19 | 20 | 21 | 22 |
23 |

About this app

24 | 25 |

26 | This is a SvelteKit app. You can make your own by typing the 27 | following into your command line and following the prompts: 28 |

29 | 30 |
npm init svelte
31 | 32 |

33 | The page you're looking at is purely static HTML, with no client-side interactivity needed. 34 | Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening 35 | the devtools network panel and reloading. 36 |

37 | 38 |

39 | The TODOs page illustrates SvelteKit's data loading and form handling. Try using 40 | it with JavaScript disabled! 41 |

42 |
43 | 44 | 51 | -------------------------------------------------------------------------------- /src/routes/index.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 10 | Home 11 | 12 | 13 | 14 |
15 |

16 |
17 | 18 | 19 | Welcome 20 | 21 |
22 | 23 | to your new
SvelteKit app 24 |

25 | 26 |

27 | try editing src/routes/index.svelte 28 |

29 | 30 | 31 |
32 | 33 | 61 | -------------------------------------------------------------------------------- /src/routes/todos/index.js: -------------------------------------------------------------------------------- 1 | import { getTodos, createTodo, updateTodo, deleteTodo } from '$lib/api'; 2 | 3 | export const get = async ({ locals }) => { 4 | // locals.userid comes from src/hooks.js 5 | try { 6 | const todos = await getTodos(locals.userId) 7 | return { 8 | body: { 9 | todos 10 | } 11 | }; 12 | } catch (err) { 13 | console.error(err); 14 | return { status: 500 } 15 | } 16 | }; 17 | 18 | export const post = async ({ request, locals }) => { 19 | const form = await request.formData(); 20 | await createTodo(locals.userId, { text: form.get('text'), done: false}) 21 | return {}; 22 | }; 23 | 24 | // If the user has JavaScript disabled, the URL will change to 25 | // include the method override unless we redirect back to /todos 26 | const redirect = { 27 | status: 303, 28 | headers: { 29 | location: '/todos' 30 | } 31 | }; 32 | 33 | export const patch = async ({ request, locals }) => { 34 | const form = await request.formData(); 35 | await updateTodo(locals.userId, form.get('todoId'), { 36 | text: form.has('text') ? form.get('text') : undefined, 37 | done: form.has('done') ? !!form.get('done') : undefined 38 | }); 39 | return redirect; 40 | }; 41 | 42 | export const del = async ({ request, locals }) => { 43 | const form = await request.formData(); 44 | await deleteTodo(locals.userId, form.get('todoId')); 45 | return redirect; 46 | }; 47 | -------------------------------------------------------------------------------- /src/routes/todos/index.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | Todos 11 | 12 | 13 | 14 |
15 |

Todos

16 | 17 | { 23 | form.reset(); 24 | } 25 | }} 26 | > 27 | 28 | 29 | 30 | {#each todos as todo (todo.todoId)} 31 |
37 |
{ 42 | todo.done = !!data.get('done'); 43 | } 44 | }} 45 | > 46 | 47 | 48 |
68 | {/each} 69 |
70 | 71 | 180 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michael/svelte-postgres-demo/2e38ac66c5c52033c0de53a8324d94f05033ea55/static/favicon.png -------------------------------------------------------------------------------- /static/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /static/svelte-welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michael/svelte-postgres-demo/2e38ac66c5c52033c0de53a8324d94f05033ea55/static/svelte-welcome.png -------------------------------------------------------------------------------- /static/svelte-welcome.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michael/svelte-postgres-demo/2e38ac66c5c52033c0de53a8324d94f05033ea55/static/svelte-welcome.webp -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | 3 | /** @type {import('@sveltejs/kit').Config} */ 4 | const config = { 5 | kit: { 6 | adapter: adapter(), 7 | 8 | // Override http methods in the Todo forms 9 | methodOverride: { 10 | allowed: ['PATCH', 'DELETE'] 11 | } 12 | } 13 | }; 14 | 15 | export default config; 16 | -------------------------------------------------------------------------------- /tests/test.js: -------------------------------------------------------------------------------- 1 | import { expect, test } from '@playwright/test'; 2 | 3 | test('about page has expected h1', async ({ page }) => { 4 | await page.goto('/about'); 5 | expect(await page.textContent('h1')).toBe('About this app'); 6 | }); 7 | --------------------------------------------------------------------------------