├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode └── settings.json ├── README.md ├── package.json ├── pnpm-lock.yaml ├── postcss.config.cjs ├── src ├── app.d.ts ├── app.html ├── app.postcss ├── global.css ├── lib │ ├── index.js │ └── svelte-worker-store.ts ├── routes │ ├── +layout.svelte │ ├── +layout.ts │ ├── +page.svelte │ ├── _components │ │ ├── Canvas.svelte │ │ ├── assets │ │ │ └── julia-set.png │ │ └── pi.mjs │ ├── demos │ │ └── julia-set │ │ │ ├── +page.svelte │ │ │ └── juliaSet.js │ └── docs │ │ ├── +layout.svelte │ │ ├── +page.svelte │ │ ├── +page.ts │ │ └── codeblocks.ts └── theme.postcss ├── static ├── favicon.png └── svelte-worker-store.js ├── svelte.config.js ├── tailwind.config.cjs ├── tsconfig.json ├── vite.config.ts └── vite.minify.js /.eslintignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:svelte/recommended', 7 | 'prettier' 8 | ], 9 | parser: '@typescript-eslint/parser', 10 | plugins: ['@typescript-eslint'], 11 | parserOptions: { 12 | sourceType: 'module', 13 | ecmaVersion: 2020, 14 | extraFileExtensions: ['.svelte'] 15 | }, 16 | env: { 17 | browser: true, 18 | es2017: true, 19 | node: true 20 | }, 21 | overrides: [ 22 | { 23 | files: ['*.svelte'], 24 | parser: 'svelte-eslint-parser', 25 | parserOptions: { 26 | parser: '@typescript-eslint/parser' 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /dist 5 | /.svelte-kit 6 | /package 7 | .env 8 | .env.* 9 | !.env.example 10 | vite.config.js.timestamp-* 11 | vite.config.ts.timestamp-* 12 | .vercel 13 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | resolution-mode=highest 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | 10 | # Ignore files for PNPM, NPM and YARN 11 | pnpm-lock.yaml 12 | package-lock.json 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": false, 4 | "trailingComma": "all", 5 | "semi": true, 6 | "printWidth": 80, 7 | "plugins": ["prettier-plugin-svelte"], 8 | "pluginSearchDirs": ["."], 9 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib" 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # svelte-worker-store 2 | 3 | :zap: Turbocharge your app with multithreaded Svelte Stores. 4 | 5 | Demo/Documentation Site: https://svelte-worker-store.vercel.app/ 6 | 7 | > What is this? 8 | 9 | `svelte-worker-store` is a small set of Svelte stores that enable you to use Web Workers to process things off the main thread. 10 | 11 | Based on another library of mine ([nanothreads](https://www.npmjs.com/package/nanothreads)), `svelte-worker-store` is a tiny wrapper around an already tiny library. 12 | 13 | ## Features 14 | 15 | - Simple and easy to use :100: 16 | - Handle resource-heavy workloads without blocking your app! :sunglasses: 17 | - Tiny bundle size :shipit: 18 | - `derived`, `pooled` and `channel` stores 19 | 20 | ## Installation 21 | 22 | ```bash 23 | npm install svelte-worker-store 24 | pnpm install svelte-worker-store 25 | ``` 26 | 27 | ## Usage/Examples 28 | 29 | ### Create a 'channel' 30 | 31 | ```svelte 32 | 40 | 41 |

Output: {$store}

42 | 43 | ``` 44 | 45 | ### Julia Set 46 | 47 | https://svelte-worker-store.vercel.app/demos/julia-set 48 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-worker-store", 3 | "version": "0.0.4", 4 | "scripts": { 5 | "dev": "vite dev", 6 | "build": "vite build", 7 | "preview": "vite preview", 8 | "package": "svelte-kit sync && svelte-package && publint && node ./vite.minify.js", 9 | "prepublishOnly": "npm run package", 10 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 11 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 12 | "lint": "prettier --plugin-search-dir . --check . && eslint .", 13 | "format": "prettier --plugin-search-dir . --write ." 14 | }, 15 | "exports": { 16 | ".": { 17 | "types": "./dist/index.d.ts", 18 | "svelte": "./dist/index.js" 19 | } 20 | }, 21 | "files": [ 22 | "dist", 23 | "!dist/**/*.test.*", 24 | "!dist/**/*.spec.*" 25 | ], 26 | "peerDependencies": { 27 | "svelte": "^3.54.0" 28 | }, 29 | "devDependencies": { 30 | "@skeletonlabs/skeleton": "^1.7.1", 31 | "@sveltejs/adapter-auto": "^2.0.0", 32 | "@sveltejs/kit": "^1.5.0", 33 | "@sveltejs/package": "^2.0.0", 34 | "@typescript-eslint/eslint-plugin": "^5.45.0", 35 | "@typescript-eslint/parser": "^5.45.0", 36 | "autoprefixer": "^10.4.14", 37 | "esbuild": "^0.18.4", 38 | "eslint": "^8.28.0", 39 | "eslint-config-prettier": "^8.5.0", 40 | "eslint-plugin-svelte": "^2.26.0", 41 | "highlight.js": "^11.8.0", 42 | "nanothreads": "^0.3.7", 43 | "prettier": "^2.8.0", 44 | "prettier-plugin-svelte": "^2.8.1", 45 | "publint": "^0.1.9", 46 | "svelte": "^3.54.0", 47 | "svelte-check": "^3.0.1", 48 | "svelte-highlight": "^7.3.0", 49 | "svelte-preprocess": "^5.0.3", 50 | "tailwindcss": "^3.3.1", 51 | "tslib": "^2.4.1", 52 | "typescript": "^5.0.0", 53 | "vite": "^4.3.0" 54 | }, 55 | "svelte": "./dist/index.js", 56 | "types": "./dist/index.d.ts", 57 | "type": "module" 58 | } 59 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@skeletonlabs/skeleton': ^1.7.1 5 | '@sveltejs/adapter-auto': ^2.0.0 6 | '@sveltejs/kit': ^1.5.0 7 | '@sveltejs/package': ^2.0.0 8 | '@typescript-eslint/eslint-plugin': ^5.45.0 9 | '@typescript-eslint/parser': ^5.45.0 10 | autoprefixer: ^10.4.14 11 | esbuild: ^0.18.4 12 | eslint: ^8.28.0 13 | eslint-config-prettier: ^8.5.0 14 | eslint-plugin-svelte: ^2.26.0 15 | highlight.js: ^11.8.0 16 | nanothreads: ^0.3.7 17 | prettier: ^2.8.0 18 | prettier-plugin-svelte: ^2.8.1 19 | publint: ^0.1.9 20 | svelte: ^3.54.0 21 | svelte-check: ^3.0.1 22 | svelte-highlight: ^7.3.0 23 | svelte-preprocess: ^5.0.3 24 | tailwindcss: ^3.3.1 25 | tslib: ^2.4.1 26 | typescript: ^5.0.0 27 | vite: ^4.3.0 28 | 29 | devDependencies: 30 | '@skeletonlabs/skeleton': 1.7.1 31 | '@sveltejs/adapter-auto': 2.1.0_@sveltejs+kit@1.20.2 32 | '@sveltejs/kit': 1.20.2_svelte@3.59.1+vite@4.3.9 33 | '@sveltejs/package': 2.0.2_ew3mtnddoirxihfd3dvwoglzia 34 | '@typescript-eslint/eslint-plugin': 5.59.11_sqfi766b7p7jf53aqxvjxvblnq 35 | '@typescript-eslint/parser': 5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u 36 | autoprefixer: 10.4.14_postcss@8.4.24 37 | esbuild: 0.18.4 38 | eslint: 8.42.0 39 | eslint-config-prettier: 8.8.0_eslint@8.42.0 40 | eslint-plugin-svelte: 2.30.0_3vji2slnup2yzxo42w6sbds3sy 41 | highlight.js: 11.8.0 42 | nanothreads: 0.3.7 43 | prettier: 2.8.8 44 | prettier-plugin-svelte: 2.10.1_blbg2s7pis747igzn3ilcyh5ou 45 | publint: 0.1.12 46 | svelte: 3.59.1 47 | svelte-check: 3.4.3_owwrqxqyw2b26jd4x7iiapyxoq 48 | svelte-highlight: 7.3.0 49 | svelte-preprocess: 5.0.4_jissygmktegc5gmmkgli52p73q 50 | tailwindcss: 3.3.2 51 | tslib: 2.5.3 52 | typescript: 5.1.3 53 | vite: 4.3.9 54 | 55 | packages: 56 | 57 | /@alloc/quick-lru/5.2.0: 58 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 59 | engines: {node: '>=10'} 60 | dev: true 61 | 62 | /@esbuild/android-arm/0.17.19: 63 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 64 | engines: {node: '>=12'} 65 | cpu: [arm] 66 | os: [android] 67 | requiresBuild: true 68 | dev: true 69 | optional: true 70 | 71 | /@esbuild/android-arm/0.18.4: 72 | resolution: {integrity: sha512-yKmQC9IiuvHdsNEbPHSprnMHg6OhL1cSeQZLzPpgzJBJ9ppEg9GAZN8MKj1TcmB4tZZUrq5xjK7KCmhwZP8iDA==} 73 | engines: {node: '>=12'} 74 | cpu: [arm] 75 | os: [android] 76 | requiresBuild: true 77 | dev: true 78 | optional: true 79 | 80 | /@esbuild/android-arm64/0.17.19: 81 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 82 | engines: {node: '>=12'} 83 | cpu: [arm64] 84 | os: [android] 85 | requiresBuild: true 86 | dev: true 87 | optional: true 88 | 89 | /@esbuild/android-arm64/0.18.4: 90 | resolution: {integrity: sha512-yQVgO+V307hA2XhzELQ6F91CBGX7gSnlVGAj5YIqjQOxThDpM7fOcHT2YLJbE6gNdPtgRSafQrsK8rJ9xHCaZg==} 91 | engines: {node: '>=12'} 92 | cpu: [arm64] 93 | os: [android] 94 | requiresBuild: true 95 | dev: true 96 | optional: true 97 | 98 | /@esbuild/android-x64/0.17.19: 99 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 100 | engines: {node: '>=12'} 101 | cpu: [x64] 102 | os: [android] 103 | requiresBuild: true 104 | dev: true 105 | optional: true 106 | 107 | /@esbuild/android-x64/0.18.4: 108 | resolution: {integrity: sha512-yLKXMxQg6sk1ntftxQ5uwyVgG4/S2E7UoOCc5N4YZW7fdkfRiYEXqm7CMuIfY2Vs3FTrNyKmSfNevIuIvJnMww==} 109 | engines: {node: '>=12'} 110 | cpu: [x64] 111 | os: [android] 112 | requiresBuild: true 113 | dev: true 114 | optional: true 115 | 116 | /@esbuild/darwin-arm64/0.17.19: 117 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 118 | engines: {node: '>=12'} 119 | cpu: [arm64] 120 | os: [darwin] 121 | requiresBuild: true 122 | dev: true 123 | optional: true 124 | 125 | /@esbuild/darwin-arm64/0.18.4: 126 | resolution: {integrity: sha512-MVPEoZjZpk2xQ1zckZrb8eQuQib+QCzdmMs3YZAYEQPg+Rztk5pUxGyk8htZOC8Z38NMM29W+MqY9Sqo/sDGKw==} 127 | engines: {node: '>=12'} 128 | cpu: [arm64] 129 | os: [darwin] 130 | requiresBuild: true 131 | dev: true 132 | optional: true 133 | 134 | /@esbuild/darwin-x64/0.17.19: 135 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 136 | engines: {node: '>=12'} 137 | cpu: [x64] 138 | os: [darwin] 139 | requiresBuild: true 140 | dev: true 141 | optional: true 142 | 143 | /@esbuild/darwin-x64/0.18.4: 144 | resolution: {integrity: sha512-uEsRtYRUDsz7i2tXg/t/SyF+5gU1cvi9B6B8i5ebJgtUUHJYWyIPIesmIOL4/+bywjxsDMA/XrNFMgMffLnh5A==} 145 | engines: {node: '>=12'} 146 | cpu: [x64] 147 | os: [darwin] 148 | requiresBuild: true 149 | dev: true 150 | optional: true 151 | 152 | /@esbuild/freebsd-arm64/0.17.19: 153 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 154 | engines: {node: '>=12'} 155 | cpu: [arm64] 156 | os: [freebsd] 157 | requiresBuild: true 158 | dev: true 159 | optional: true 160 | 161 | /@esbuild/freebsd-arm64/0.18.4: 162 | resolution: {integrity: sha512-I8EOigqWnOHRin6Zp5Y1cfH3oT54bd7Sdz/VnpUNksbOtfp8IWRTH4pgkgO5jWaRQPjCpJcOpdRjYAMjPt8wXg==} 163 | engines: {node: '>=12'} 164 | cpu: [arm64] 165 | os: [freebsd] 166 | requiresBuild: true 167 | dev: true 168 | optional: true 169 | 170 | /@esbuild/freebsd-x64/0.17.19: 171 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 172 | engines: {node: '>=12'} 173 | cpu: [x64] 174 | os: [freebsd] 175 | requiresBuild: true 176 | dev: true 177 | optional: true 178 | 179 | /@esbuild/freebsd-x64/0.18.4: 180 | resolution: {integrity: sha512-1bHfgMz/cNMjbpsYxjVgMJ1iwKq+NdDPlACBrWULD7ZdFmBQrhMicMaKb5CdmdVyvIwXmasOuF4r6Iq574kUTA==} 181 | engines: {node: '>=12'} 182 | cpu: [x64] 183 | os: [freebsd] 184 | requiresBuild: true 185 | dev: true 186 | optional: true 187 | 188 | /@esbuild/linux-arm/0.17.19: 189 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 190 | engines: {node: '>=12'} 191 | cpu: [arm] 192 | os: [linux] 193 | requiresBuild: true 194 | dev: true 195 | optional: true 196 | 197 | /@esbuild/linux-arm/0.18.4: 198 | resolution: {integrity: sha512-4XCGqM/Ay1LCXUBH59bL4JbSbbTK1K22dWHymWMGaEh2sQCDOUw+OQxozYV/YdBb91leK2NbuSrE2BRamwgaYw==} 199 | engines: {node: '>=12'} 200 | cpu: [arm] 201 | os: [linux] 202 | requiresBuild: true 203 | dev: true 204 | optional: true 205 | 206 | /@esbuild/linux-arm64/0.17.19: 207 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 208 | engines: {node: '>=12'} 209 | cpu: [arm64] 210 | os: [linux] 211 | requiresBuild: true 212 | dev: true 213 | optional: true 214 | 215 | /@esbuild/linux-arm64/0.18.4: 216 | resolution: {integrity: sha512-J42vLHaYREyiBwH0eQE4/7H1DTfZx8FuxyWSictx4d7ezzuKE3XOkIvOg+SQzRz7T9HLVKzq2tvbAov4UfufBw==} 217 | engines: {node: '>=12'} 218 | cpu: [arm64] 219 | os: [linux] 220 | requiresBuild: true 221 | dev: true 222 | optional: true 223 | 224 | /@esbuild/linux-ia32/0.17.19: 225 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 226 | engines: {node: '>=12'} 227 | cpu: [ia32] 228 | os: [linux] 229 | requiresBuild: true 230 | dev: true 231 | optional: true 232 | 233 | /@esbuild/linux-ia32/0.18.4: 234 | resolution: {integrity: sha512-4ksIqFwhq7OExty7Sl1n0vqQSCqTG4sU6i99G2yuMr28CEOUZ/60N+IO9hwI8sIxBqmKmDgncE1n5CMu/3m0IA==} 235 | engines: {node: '>=12'} 236 | cpu: [ia32] 237 | os: [linux] 238 | requiresBuild: true 239 | dev: true 240 | optional: true 241 | 242 | /@esbuild/linux-loong64/0.17.19: 243 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 244 | engines: {node: '>=12'} 245 | cpu: [loong64] 246 | os: [linux] 247 | requiresBuild: true 248 | dev: true 249 | optional: true 250 | 251 | /@esbuild/linux-loong64/0.18.4: 252 | resolution: {integrity: sha512-bsWtoVHkGQgAsFXioDueXRiUIfSGrVkJjBBz4gcBJxXcD461cWFQFyu8Fxdj9TP+zEeqJ8C/O4LFFMBNi6Fscw==} 253 | engines: {node: '>=12'} 254 | cpu: [loong64] 255 | os: [linux] 256 | requiresBuild: true 257 | dev: true 258 | optional: true 259 | 260 | /@esbuild/linux-mips64el/0.17.19: 261 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 262 | engines: {node: '>=12'} 263 | cpu: [mips64el] 264 | os: [linux] 265 | requiresBuild: true 266 | dev: true 267 | optional: true 268 | 269 | /@esbuild/linux-mips64el/0.18.4: 270 | resolution: {integrity: sha512-LRD9Fu8wJQgIOOV1o3nRyzrheFYjxA0C1IVWZ93eNRRWBKgarYFejd5WBtrp43cE4y4D4t3qWWyklm73Mrsd/g==} 271 | engines: {node: '>=12'} 272 | cpu: [mips64el] 273 | os: [linux] 274 | requiresBuild: true 275 | dev: true 276 | optional: true 277 | 278 | /@esbuild/linux-ppc64/0.17.19: 279 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 280 | engines: {node: '>=12'} 281 | cpu: [ppc64] 282 | os: [linux] 283 | requiresBuild: true 284 | dev: true 285 | optional: true 286 | 287 | /@esbuild/linux-ppc64/0.18.4: 288 | resolution: {integrity: sha512-jtQgoZjM92gauVRxNaaG/TpL3Pr4WcL3Pwqi9QgdrBGrEXzB+twohQiWNSTycs6lUygakos4mm2h0B9/SHveng==} 289 | engines: {node: '>=12'} 290 | cpu: [ppc64] 291 | os: [linux] 292 | requiresBuild: true 293 | dev: true 294 | optional: true 295 | 296 | /@esbuild/linux-riscv64/0.17.19: 297 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 298 | engines: {node: '>=12'} 299 | cpu: [riscv64] 300 | os: [linux] 301 | requiresBuild: true 302 | dev: true 303 | optional: true 304 | 305 | /@esbuild/linux-riscv64/0.18.4: 306 | resolution: {integrity: sha512-7WaU/kRZG0VCV09Xdlkg6LNAsfU9SAxo6XEdaZ8ffO4lh+DZoAhGTx7+vTMOXKxa+r2w1LYDGxfJa2rcgagMRA==} 307 | engines: {node: '>=12'} 308 | cpu: [riscv64] 309 | os: [linux] 310 | requiresBuild: true 311 | dev: true 312 | optional: true 313 | 314 | /@esbuild/linux-s390x/0.17.19: 315 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 316 | engines: {node: '>=12'} 317 | cpu: [s390x] 318 | os: [linux] 319 | requiresBuild: true 320 | dev: true 321 | optional: true 322 | 323 | /@esbuild/linux-s390x/0.18.4: 324 | resolution: {integrity: sha512-D19ed0xreKQvC5t+ArE2njSnm18WPpE+1fhwaiJHf+Xwqsq+/SUaV8Mx0M27nszdU+Atq1HahrgCOZCNNEASUg==} 325 | engines: {node: '>=12'} 326 | cpu: [s390x] 327 | os: [linux] 328 | requiresBuild: true 329 | dev: true 330 | optional: true 331 | 332 | /@esbuild/linux-x64/0.17.19: 333 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 334 | engines: {node: '>=12'} 335 | cpu: [x64] 336 | os: [linux] 337 | requiresBuild: true 338 | dev: true 339 | optional: true 340 | 341 | /@esbuild/linux-x64/0.18.4: 342 | resolution: {integrity: sha512-Rx3AY1sxyiO/gvCGP00nL69L60dfmWyjKWY06ugpB8Ydpdsfi3BHW58HWC24K3CAjAPSwxcajozC2PzA9JBS1g==} 343 | engines: {node: '>=12'} 344 | cpu: [x64] 345 | os: [linux] 346 | requiresBuild: true 347 | dev: true 348 | optional: true 349 | 350 | /@esbuild/netbsd-x64/0.17.19: 351 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 352 | engines: {node: '>=12'} 353 | cpu: [x64] 354 | os: [netbsd] 355 | requiresBuild: true 356 | dev: true 357 | optional: true 358 | 359 | /@esbuild/netbsd-x64/0.18.4: 360 | resolution: {integrity: sha512-AaShPmN9c6w1mKRpliKFlaWcSkpBT4KOlk93UfFgeI3F3cbjzdDKGsbKnOZozmYbE1izZKLmNJiW0sFM+A5JPA==} 361 | engines: {node: '>=12'} 362 | cpu: [x64] 363 | os: [netbsd] 364 | requiresBuild: true 365 | dev: true 366 | optional: true 367 | 368 | /@esbuild/openbsd-x64/0.17.19: 369 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 370 | engines: {node: '>=12'} 371 | cpu: [x64] 372 | os: [openbsd] 373 | requiresBuild: true 374 | dev: true 375 | optional: true 376 | 377 | /@esbuild/openbsd-x64/0.18.4: 378 | resolution: {integrity: sha512-tRGvGwou3BrvHVvF8HxTqEiC5VtPzySudS9fh2jBIKpLX7HCW8jIkW+LunkFDNwhslx4xMAgh0jAHsx/iCymaQ==} 379 | engines: {node: '>=12'} 380 | cpu: [x64] 381 | os: [openbsd] 382 | requiresBuild: true 383 | dev: true 384 | optional: true 385 | 386 | /@esbuild/sunos-x64/0.17.19: 387 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 388 | engines: {node: '>=12'} 389 | cpu: [x64] 390 | os: [sunos] 391 | requiresBuild: true 392 | dev: true 393 | optional: true 394 | 395 | /@esbuild/sunos-x64/0.18.4: 396 | resolution: {integrity: sha512-acORFDI95GKhmAnlH8EarBeuqoy/j3yxIU+FDB91H3+ZON+8HhTadtT450YkaMzX6lEWbhi+mjVUCj00M5yyOQ==} 397 | engines: {node: '>=12'} 398 | cpu: [x64] 399 | os: [sunos] 400 | requiresBuild: true 401 | dev: true 402 | optional: true 403 | 404 | /@esbuild/win32-arm64/0.17.19: 405 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 406 | engines: {node: '>=12'} 407 | cpu: [arm64] 408 | os: [win32] 409 | requiresBuild: true 410 | dev: true 411 | optional: true 412 | 413 | /@esbuild/win32-arm64/0.18.4: 414 | resolution: {integrity: sha512-1NxP+iOk8KSvS1L9SSxEvBAJk39U0GiGZkiiJGbuDF9G4fG7DSDw6XLxZMecAgmvQrwwx7yVKdNN3GgNh0UfKg==} 415 | engines: {node: '>=12'} 416 | cpu: [arm64] 417 | os: [win32] 418 | requiresBuild: true 419 | dev: true 420 | optional: true 421 | 422 | /@esbuild/win32-ia32/0.17.19: 423 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 424 | engines: {node: '>=12'} 425 | cpu: [ia32] 426 | os: [win32] 427 | requiresBuild: true 428 | dev: true 429 | optional: true 430 | 431 | /@esbuild/win32-ia32/0.18.4: 432 | resolution: {integrity: sha512-OKr8jze93vbgqZ/r23woWciTixUwLa976C9W7yNBujtnVHyvsL/ocYG61tsktUfJOpyIz5TsohkBZ6Lo2+PCcQ==} 433 | engines: {node: '>=12'} 434 | cpu: [ia32] 435 | os: [win32] 436 | requiresBuild: true 437 | dev: true 438 | optional: true 439 | 440 | /@esbuild/win32-x64/0.17.19: 441 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 442 | engines: {node: '>=12'} 443 | cpu: [x64] 444 | os: [win32] 445 | requiresBuild: true 446 | dev: true 447 | optional: true 448 | 449 | /@esbuild/win32-x64/0.18.4: 450 | resolution: {integrity: sha512-qJr3wVvcLjPFcV4AMDS3iquhBfTef2zo/jlm8RMxmiRp3Vy2HY8WMxrykJlcbCnqLXZPA0YZxZGND6eug85ogg==} 451 | engines: {node: '>=12'} 452 | cpu: [x64] 453 | os: [win32] 454 | requiresBuild: true 455 | dev: true 456 | optional: true 457 | 458 | /@eslint-community/eslint-utils/4.4.0_eslint@8.42.0: 459 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 460 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 461 | peerDependencies: 462 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 463 | dependencies: 464 | eslint: 8.42.0 465 | eslint-visitor-keys: 3.4.1 466 | dev: true 467 | 468 | /@eslint-community/regexpp/4.5.1: 469 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 470 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 471 | dev: true 472 | 473 | /@eslint/eslintrc/2.0.3: 474 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} 475 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 476 | dependencies: 477 | ajv: 6.12.6 478 | debug: 4.3.4 479 | espree: 9.5.2 480 | globals: 13.20.0 481 | ignore: 5.2.4 482 | import-fresh: 3.3.0 483 | js-yaml: 4.1.0 484 | minimatch: 3.1.2 485 | strip-json-comments: 3.1.1 486 | transitivePeerDependencies: 487 | - supports-color 488 | dev: true 489 | 490 | /@eslint/js/8.42.0: 491 | resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} 492 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 493 | dev: true 494 | 495 | /@humanwhocodes/config-array/0.11.10: 496 | resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} 497 | engines: {node: '>=10.10.0'} 498 | dependencies: 499 | '@humanwhocodes/object-schema': 1.2.1 500 | debug: 4.3.4 501 | minimatch: 3.1.2 502 | transitivePeerDependencies: 503 | - supports-color 504 | dev: true 505 | 506 | /@humanwhocodes/module-importer/1.0.1: 507 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 508 | engines: {node: '>=12.22'} 509 | dev: true 510 | 511 | /@humanwhocodes/object-schema/1.2.1: 512 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 513 | dev: true 514 | 515 | /@jridgewell/gen-mapping/0.3.3: 516 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 517 | engines: {node: '>=6.0.0'} 518 | dependencies: 519 | '@jridgewell/set-array': 1.1.2 520 | '@jridgewell/sourcemap-codec': 1.4.15 521 | '@jridgewell/trace-mapping': 0.3.18 522 | dev: true 523 | 524 | /@jridgewell/resolve-uri/3.1.0: 525 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 526 | engines: {node: '>=6.0.0'} 527 | dev: true 528 | 529 | /@jridgewell/set-array/1.1.2: 530 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 531 | engines: {node: '>=6.0.0'} 532 | dev: true 533 | 534 | /@jridgewell/sourcemap-codec/1.4.14: 535 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 536 | dev: true 537 | 538 | /@jridgewell/sourcemap-codec/1.4.15: 539 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 540 | dev: true 541 | 542 | /@jridgewell/trace-mapping/0.3.18: 543 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} 544 | dependencies: 545 | '@jridgewell/resolve-uri': 3.1.0 546 | '@jridgewell/sourcemap-codec': 1.4.14 547 | dev: true 548 | 549 | /@nodelib/fs.scandir/2.1.5: 550 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 551 | engines: {node: '>= 8'} 552 | dependencies: 553 | '@nodelib/fs.stat': 2.0.5 554 | run-parallel: 1.2.0 555 | dev: true 556 | 557 | /@nodelib/fs.stat/2.0.5: 558 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 559 | engines: {node: '>= 8'} 560 | dev: true 561 | 562 | /@nodelib/fs.walk/1.2.8: 563 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 564 | engines: {node: '>= 8'} 565 | dependencies: 566 | '@nodelib/fs.scandir': 2.1.5 567 | fastq: 1.15.0 568 | dev: true 569 | 570 | /@polka/url/1.0.0-next.21: 571 | resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} 572 | dev: true 573 | 574 | /@skeletonlabs/skeleton/1.7.1: 575 | resolution: {integrity: sha512-464uXRBzKzhZ5UgoBk7JvUDbYvcZpbThuC0ZLEiG8XKQhcabDUEdgZtVUAXmR8+L/vs247iVZZP1OHpW8Uexgg==} 576 | dependencies: 577 | esm-env: 1.0.0 578 | svelte: 3.58.0 579 | dev: true 580 | 581 | /@sveltejs/adapter-auto/2.1.0_@sveltejs+kit@1.20.2: 582 | resolution: {integrity: sha512-o2pZCfATFtA/Gw/BB0Xm7k4EYaekXxaPGER3xGSY3FvzFJGTlJlZjBseaXwYSM94lZ0HniOjTokN3cWaLX6fow==} 583 | peerDependencies: 584 | '@sveltejs/kit': ^1.0.0 585 | dependencies: 586 | '@sveltejs/kit': 1.20.2_svelte@3.59.1+vite@4.3.9 587 | import-meta-resolve: 3.0.0 588 | dev: true 589 | 590 | /@sveltejs/kit/1.20.2_svelte@3.59.1+vite@4.3.9: 591 | resolution: {integrity: sha512-MtR1i+HtmYWcRgtubw1GQqT/+CWXL/z24PegE0xYAdObbhdr7YtEfmoe705D/JZMtMmoPXrmSk4W0MfL5A3lYw==} 592 | engines: {node: ^16.14 || >=18} 593 | hasBin: true 594 | requiresBuild: true 595 | peerDependencies: 596 | svelte: ^3.54.0 || ^4.0.0-next.0 597 | vite: ^4.0.0 598 | dependencies: 599 | '@sveltejs/vite-plugin-svelte': 2.4.1_svelte@3.59.1+vite@4.3.9 600 | '@types/cookie': 0.5.1 601 | cookie: 0.5.0 602 | devalue: 4.3.2 603 | esm-env: 1.0.0 604 | kleur: 4.1.5 605 | magic-string: 0.30.0 606 | mime: 3.0.0 607 | sade: 1.8.1 608 | set-cookie-parser: 2.6.0 609 | sirv: 2.0.3 610 | svelte: 3.59.1 611 | tiny-glob: 0.2.9 612 | undici: 5.22.1 613 | vite: 4.3.9 614 | transitivePeerDependencies: 615 | - supports-color 616 | dev: true 617 | 618 | /@sveltejs/package/2.0.2_ew3mtnddoirxihfd3dvwoglzia: 619 | resolution: {integrity: sha512-cCOCcO8yMHnhHyaR51nQtvKZ3o/vSU9UYI1EXLT1j2CKNPMuH1/g6JNwKcNNrtQGwwquudc69ZeYy8D/TDNwEw==} 620 | engines: {node: ^16.14 || >=18} 621 | hasBin: true 622 | peerDependencies: 623 | svelte: ^3.44.0 624 | dependencies: 625 | chokidar: 3.5.3 626 | kleur: 4.1.5 627 | sade: 1.8.1 628 | svelte: 3.59.1 629 | svelte2tsx: 0.6.15_ew3mtnddoirxihfd3dvwoglzia 630 | transitivePeerDependencies: 631 | - typescript 632 | dev: true 633 | 634 | /@sveltejs/vite-plugin-svelte-inspector/1.0.2_qiij5gx4uovhfqjpd2vh63pzyq: 635 | resolution: {integrity: sha512-Cy1dUMcYCnDVV/hPLXa43YZJ2jGKVW5rA0xuNL9dlmYhT0yoS1g7+FOFSRlgk0BXKk/Oc7grs+8BVA5Iz2fr8A==} 636 | engines: {node: ^14.18.0 || >= 16} 637 | peerDependencies: 638 | '@sveltejs/vite-plugin-svelte': ^2.2.0 639 | svelte: ^3.54.0 || ^4.0.0-next.0 640 | vite: ^4.0.0 641 | dependencies: 642 | '@sveltejs/vite-plugin-svelte': 2.4.1_svelte@3.59.1+vite@4.3.9 643 | debug: 4.3.4 644 | svelte: 3.59.1 645 | vite: 4.3.9 646 | transitivePeerDependencies: 647 | - supports-color 648 | dev: true 649 | 650 | /@sveltejs/vite-plugin-svelte/2.4.1_svelte@3.59.1+vite@4.3.9: 651 | resolution: {integrity: sha512-bNNKvoRY89ptY7udeBSCmTdCVwkjmMcZ0j/z9J5MuedT8jPjq0zrknAo/jF1sToAza4NVaAgR9AkZoD9oJJmnA==} 652 | engines: {node: ^14.18.0 || >= 16} 653 | peerDependencies: 654 | svelte: ^3.54.0 || ^4.0.0-next.0 655 | vite: ^4.0.0 656 | dependencies: 657 | '@sveltejs/vite-plugin-svelte-inspector': 1.0.2_qiij5gx4uovhfqjpd2vh63pzyq 658 | debug: 4.3.4 659 | deepmerge: 4.3.1 660 | kleur: 4.1.5 661 | magic-string: 0.30.0 662 | svelte: 3.59.1 663 | svelte-hmr: 0.15.2_svelte@3.59.1 664 | vite: 4.3.9 665 | vitefu: 0.2.4_vite@4.3.9 666 | transitivePeerDependencies: 667 | - supports-color 668 | dev: true 669 | 670 | /@types/cookie/0.5.1: 671 | resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} 672 | dev: true 673 | 674 | /@types/json-schema/7.0.12: 675 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} 676 | dev: true 677 | 678 | /@types/pug/2.0.6: 679 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} 680 | dev: true 681 | 682 | /@types/semver/7.5.0: 683 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} 684 | dev: true 685 | 686 | /@typescript-eslint/eslint-plugin/5.59.11_sqfi766b7p7jf53aqxvjxvblnq: 687 | resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} 688 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 689 | peerDependencies: 690 | '@typescript-eslint/parser': ^5.0.0 691 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 692 | typescript: '*' 693 | peerDependenciesMeta: 694 | typescript: 695 | optional: true 696 | dependencies: 697 | '@eslint-community/regexpp': 4.5.1 698 | '@typescript-eslint/parser': 5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u 699 | '@typescript-eslint/scope-manager': 5.59.11 700 | '@typescript-eslint/type-utils': 5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u 701 | '@typescript-eslint/utils': 5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u 702 | debug: 4.3.4 703 | eslint: 8.42.0 704 | grapheme-splitter: 1.0.4 705 | ignore: 5.2.4 706 | natural-compare-lite: 1.4.0 707 | semver: 7.5.2 708 | tsutils: 3.21.0_typescript@5.1.3 709 | typescript: 5.1.3 710 | transitivePeerDependencies: 711 | - supports-color 712 | dev: true 713 | 714 | /@typescript-eslint/parser/5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u: 715 | resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} 716 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 717 | peerDependencies: 718 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 719 | typescript: '*' 720 | peerDependenciesMeta: 721 | typescript: 722 | optional: true 723 | dependencies: 724 | '@typescript-eslint/scope-manager': 5.59.11 725 | '@typescript-eslint/types': 5.59.11 726 | '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.1.3 727 | debug: 4.3.4 728 | eslint: 8.42.0 729 | typescript: 5.1.3 730 | transitivePeerDependencies: 731 | - supports-color 732 | dev: true 733 | 734 | /@typescript-eslint/scope-manager/5.59.11: 735 | resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} 736 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 737 | dependencies: 738 | '@typescript-eslint/types': 5.59.11 739 | '@typescript-eslint/visitor-keys': 5.59.11 740 | dev: true 741 | 742 | /@typescript-eslint/type-utils/5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u: 743 | resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} 744 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 745 | peerDependencies: 746 | eslint: '*' 747 | typescript: '*' 748 | peerDependenciesMeta: 749 | typescript: 750 | optional: true 751 | dependencies: 752 | '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.1.3 753 | '@typescript-eslint/utils': 5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u 754 | debug: 4.3.4 755 | eslint: 8.42.0 756 | tsutils: 3.21.0_typescript@5.1.3 757 | typescript: 5.1.3 758 | transitivePeerDependencies: 759 | - supports-color 760 | dev: true 761 | 762 | /@typescript-eslint/types/5.59.11: 763 | resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} 764 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 765 | dev: true 766 | 767 | /@typescript-eslint/typescript-estree/5.59.11_typescript@5.1.3: 768 | resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} 769 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 770 | peerDependencies: 771 | typescript: '*' 772 | peerDependenciesMeta: 773 | typescript: 774 | optional: true 775 | dependencies: 776 | '@typescript-eslint/types': 5.59.11 777 | '@typescript-eslint/visitor-keys': 5.59.11 778 | debug: 4.3.4 779 | globby: 11.1.0 780 | is-glob: 4.0.3 781 | semver: 7.5.2 782 | tsutils: 3.21.0_typescript@5.1.3 783 | typescript: 5.1.3 784 | transitivePeerDependencies: 785 | - supports-color 786 | dev: true 787 | 788 | /@typescript-eslint/utils/5.59.11_tizxnkcvjrb4cldxgwq5h3lj5u: 789 | resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} 790 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 791 | peerDependencies: 792 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 793 | dependencies: 794 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.42.0 795 | '@types/json-schema': 7.0.12 796 | '@types/semver': 7.5.0 797 | '@typescript-eslint/scope-manager': 5.59.11 798 | '@typescript-eslint/types': 5.59.11 799 | '@typescript-eslint/typescript-estree': 5.59.11_typescript@5.1.3 800 | eslint: 8.42.0 801 | eslint-scope: 5.1.1 802 | semver: 7.5.2 803 | transitivePeerDependencies: 804 | - supports-color 805 | - typescript 806 | dev: true 807 | 808 | /@typescript-eslint/visitor-keys/5.59.11: 809 | resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} 810 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 811 | dependencies: 812 | '@typescript-eslint/types': 5.59.11 813 | eslint-visitor-keys: 3.4.1 814 | dev: true 815 | 816 | /acorn-jsx/5.3.2_acorn@8.8.2: 817 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 818 | peerDependencies: 819 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 820 | dependencies: 821 | acorn: 8.8.2 822 | dev: true 823 | 824 | /acorn/8.8.2: 825 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 826 | engines: {node: '>=0.4.0'} 827 | hasBin: true 828 | dev: true 829 | 830 | /ajv/6.12.6: 831 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 832 | dependencies: 833 | fast-deep-equal: 3.1.3 834 | fast-json-stable-stringify: 2.1.0 835 | json-schema-traverse: 0.4.1 836 | uri-js: 4.4.1 837 | dev: true 838 | 839 | /ansi-regex/5.0.1: 840 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 841 | engines: {node: '>=8'} 842 | dev: true 843 | 844 | /ansi-styles/4.3.0: 845 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 846 | engines: {node: '>=8'} 847 | dependencies: 848 | color-convert: 2.0.1 849 | dev: true 850 | 851 | /any-promise/1.3.0: 852 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 853 | dev: true 854 | 855 | /anymatch/3.1.3: 856 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 857 | engines: {node: '>= 8'} 858 | dependencies: 859 | normalize-path: 3.0.0 860 | picomatch: 2.3.1 861 | dev: true 862 | 863 | /arg/5.0.2: 864 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 865 | dev: true 866 | 867 | /argparse/2.0.1: 868 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 869 | dev: true 870 | 871 | /array-union/2.1.0: 872 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 873 | engines: {node: '>=8'} 874 | dev: true 875 | 876 | /autoprefixer/10.4.14_postcss@8.4.24: 877 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 878 | engines: {node: ^10 || ^12 || >=14} 879 | hasBin: true 880 | peerDependencies: 881 | postcss: ^8.1.0 882 | dependencies: 883 | browserslist: 4.21.9 884 | caniuse-lite: 1.0.30001504 885 | fraction.js: 4.2.0 886 | normalize-range: 0.1.2 887 | picocolors: 1.0.0 888 | postcss: 8.4.24 889 | postcss-value-parser: 4.2.0 890 | dev: true 891 | 892 | /balanced-match/1.0.2: 893 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 894 | dev: true 895 | 896 | /binary-extensions/2.2.0: 897 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 898 | engines: {node: '>=8'} 899 | dev: true 900 | 901 | /brace-expansion/1.1.11: 902 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 903 | dependencies: 904 | balanced-match: 1.0.2 905 | concat-map: 0.0.1 906 | dev: true 907 | 908 | /brace-expansion/2.0.1: 909 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 910 | dependencies: 911 | balanced-match: 1.0.2 912 | dev: true 913 | 914 | /braces/3.0.2: 915 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 916 | engines: {node: '>=8'} 917 | dependencies: 918 | fill-range: 7.0.1 919 | dev: true 920 | 921 | /browserslist/4.21.9: 922 | resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} 923 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 924 | hasBin: true 925 | dependencies: 926 | caniuse-lite: 1.0.30001504 927 | electron-to-chromium: 1.4.434 928 | node-releases: 2.0.12 929 | update-browserslist-db: 1.0.11_browserslist@4.21.9 930 | dev: true 931 | 932 | /buffer-crc32/0.2.13: 933 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 934 | dev: true 935 | 936 | /busboy/1.6.0: 937 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 938 | engines: {node: '>=10.16.0'} 939 | dependencies: 940 | streamsearch: 1.1.0 941 | dev: true 942 | 943 | /callsites/3.1.0: 944 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 945 | engines: {node: '>=6'} 946 | dev: true 947 | 948 | /camelcase-css/2.0.1: 949 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 950 | engines: {node: '>= 6'} 951 | dev: true 952 | 953 | /caniuse-lite/1.0.30001504: 954 | resolution: {integrity: sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==} 955 | dev: true 956 | 957 | /chalk/4.1.2: 958 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 959 | engines: {node: '>=10'} 960 | dependencies: 961 | ansi-styles: 4.3.0 962 | supports-color: 7.2.0 963 | dev: true 964 | 965 | /chokidar/3.5.3: 966 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 967 | engines: {node: '>= 8.10.0'} 968 | dependencies: 969 | anymatch: 3.1.3 970 | braces: 3.0.2 971 | glob-parent: 5.1.2 972 | is-binary-path: 2.1.0 973 | is-glob: 4.0.3 974 | normalize-path: 3.0.0 975 | readdirp: 3.6.0 976 | optionalDependencies: 977 | fsevents: 2.3.2 978 | dev: true 979 | 980 | /color-convert/2.0.1: 981 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 982 | engines: {node: '>=7.0.0'} 983 | dependencies: 984 | color-name: 1.1.4 985 | dev: true 986 | 987 | /color-name/1.1.4: 988 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 989 | dev: true 990 | 991 | /commander/4.1.1: 992 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 993 | engines: {node: '>= 6'} 994 | dev: true 995 | 996 | /concat-map/0.0.1: 997 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 998 | dev: true 999 | 1000 | /cookie/0.5.0: 1001 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 1002 | engines: {node: '>= 0.6'} 1003 | dev: true 1004 | 1005 | /cross-spawn/7.0.3: 1006 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1007 | engines: {node: '>= 8'} 1008 | dependencies: 1009 | path-key: 3.1.1 1010 | shebang-command: 2.0.0 1011 | which: 2.0.2 1012 | dev: true 1013 | 1014 | /cssesc/3.0.0: 1015 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1016 | engines: {node: '>=4'} 1017 | hasBin: true 1018 | dev: true 1019 | 1020 | /debug/4.3.4: 1021 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1022 | engines: {node: '>=6.0'} 1023 | peerDependencies: 1024 | supports-color: '*' 1025 | peerDependenciesMeta: 1026 | supports-color: 1027 | optional: true 1028 | dependencies: 1029 | ms: 2.1.2 1030 | dev: true 1031 | 1032 | /dedent-js/1.0.1: 1033 | resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} 1034 | dev: true 1035 | 1036 | /deep-is/0.1.4: 1037 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1038 | dev: true 1039 | 1040 | /deepmerge/4.3.1: 1041 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1042 | engines: {node: '>=0.10.0'} 1043 | dev: true 1044 | 1045 | /detect-indent/6.1.0: 1046 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 1047 | engines: {node: '>=8'} 1048 | dev: true 1049 | 1050 | /devalue/4.3.2: 1051 | resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} 1052 | dev: true 1053 | 1054 | /didyoumean/1.2.2: 1055 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1056 | dev: true 1057 | 1058 | /dir-glob/3.0.1: 1059 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1060 | engines: {node: '>=8'} 1061 | dependencies: 1062 | path-type: 4.0.0 1063 | dev: true 1064 | 1065 | /dlv/1.1.3: 1066 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1067 | dev: true 1068 | 1069 | /doctrine/3.0.0: 1070 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1071 | engines: {node: '>=6.0.0'} 1072 | dependencies: 1073 | esutils: 2.0.3 1074 | dev: true 1075 | 1076 | /electron-to-chromium/1.4.434: 1077 | resolution: {integrity: sha512-5Gvm09UZTQRaWrimRtWRO5rvaX6Kpk5WHAPKDa7A4Gj6NIPuJ8w8WNpnxCXdd+CJJt6RBU6tUw0KyULoW6XuHw==} 1078 | dev: true 1079 | 1080 | /es6-promise/3.3.1: 1081 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 1082 | dev: true 1083 | 1084 | /esbuild/0.17.19: 1085 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 1086 | engines: {node: '>=12'} 1087 | hasBin: true 1088 | requiresBuild: true 1089 | optionalDependencies: 1090 | '@esbuild/android-arm': 0.17.19 1091 | '@esbuild/android-arm64': 0.17.19 1092 | '@esbuild/android-x64': 0.17.19 1093 | '@esbuild/darwin-arm64': 0.17.19 1094 | '@esbuild/darwin-x64': 0.17.19 1095 | '@esbuild/freebsd-arm64': 0.17.19 1096 | '@esbuild/freebsd-x64': 0.17.19 1097 | '@esbuild/linux-arm': 0.17.19 1098 | '@esbuild/linux-arm64': 0.17.19 1099 | '@esbuild/linux-ia32': 0.17.19 1100 | '@esbuild/linux-loong64': 0.17.19 1101 | '@esbuild/linux-mips64el': 0.17.19 1102 | '@esbuild/linux-ppc64': 0.17.19 1103 | '@esbuild/linux-riscv64': 0.17.19 1104 | '@esbuild/linux-s390x': 0.17.19 1105 | '@esbuild/linux-x64': 0.17.19 1106 | '@esbuild/netbsd-x64': 0.17.19 1107 | '@esbuild/openbsd-x64': 0.17.19 1108 | '@esbuild/sunos-x64': 0.17.19 1109 | '@esbuild/win32-arm64': 0.17.19 1110 | '@esbuild/win32-ia32': 0.17.19 1111 | '@esbuild/win32-x64': 0.17.19 1112 | dev: true 1113 | 1114 | /esbuild/0.18.4: 1115 | resolution: {integrity: sha512-9rxWV/Cb2DMUXfe9aUsYtqg0KTlw146ElFH22kYeK9KVV1qT082X4lpmiKsa12ePiCcIcB686TQJxaGAa9TFvA==} 1116 | engines: {node: '>=12'} 1117 | hasBin: true 1118 | requiresBuild: true 1119 | optionalDependencies: 1120 | '@esbuild/android-arm': 0.18.4 1121 | '@esbuild/android-arm64': 0.18.4 1122 | '@esbuild/android-x64': 0.18.4 1123 | '@esbuild/darwin-arm64': 0.18.4 1124 | '@esbuild/darwin-x64': 0.18.4 1125 | '@esbuild/freebsd-arm64': 0.18.4 1126 | '@esbuild/freebsd-x64': 0.18.4 1127 | '@esbuild/linux-arm': 0.18.4 1128 | '@esbuild/linux-arm64': 0.18.4 1129 | '@esbuild/linux-ia32': 0.18.4 1130 | '@esbuild/linux-loong64': 0.18.4 1131 | '@esbuild/linux-mips64el': 0.18.4 1132 | '@esbuild/linux-ppc64': 0.18.4 1133 | '@esbuild/linux-riscv64': 0.18.4 1134 | '@esbuild/linux-s390x': 0.18.4 1135 | '@esbuild/linux-x64': 0.18.4 1136 | '@esbuild/netbsd-x64': 0.18.4 1137 | '@esbuild/openbsd-x64': 0.18.4 1138 | '@esbuild/sunos-x64': 0.18.4 1139 | '@esbuild/win32-arm64': 0.18.4 1140 | '@esbuild/win32-ia32': 0.18.4 1141 | '@esbuild/win32-x64': 0.18.4 1142 | dev: true 1143 | 1144 | /escalade/3.1.1: 1145 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1146 | engines: {node: '>=6'} 1147 | dev: true 1148 | 1149 | /escape-string-regexp/4.0.0: 1150 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1151 | engines: {node: '>=10'} 1152 | dev: true 1153 | 1154 | /eslint-config-prettier/8.8.0_eslint@8.42.0: 1155 | resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} 1156 | hasBin: true 1157 | peerDependencies: 1158 | eslint: '>=7.0.0' 1159 | dependencies: 1160 | eslint: 8.42.0 1161 | dev: true 1162 | 1163 | /eslint-plugin-svelte/2.30.0_3vji2slnup2yzxo42w6sbds3sy: 1164 | resolution: {integrity: sha512-2/qj0BJsfM0U2j4EjGb7iC/0nbUvXx1Gn78CdtyuXpi/rSomLPCPwnsZsloXMzlt6Xwe8LBlpRvZObSKEHLP5A==} 1165 | engines: {node: ^14.17.0 || >=16.0.0} 1166 | peerDependencies: 1167 | eslint: ^7.0.0 || ^8.0.0-0 1168 | svelte: ^3.37.0 || ^4.0.0-0 1169 | peerDependenciesMeta: 1170 | svelte: 1171 | optional: true 1172 | dependencies: 1173 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.42.0 1174 | '@jridgewell/sourcemap-codec': 1.4.15 1175 | debug: 4.3.4 1176 | eslint: 8.42.0 1177 | esutils: 2.0.3 1178 | known-css-properties: 0.27.0 1179 | postcss: 8.4.24 1180 | postcss-load-config: 3.1.4_postcss@8.4.24 1181 | postcss-safe-parser: 6.0.0_postcss@8.4.24 1182 | svelte: 3.59.1 1183 | svelte-eslint-parser: 0.30.0_svelte@3.59.1 1184 | transitivePeerDependencies: 1185 | - supports-color 1186 | - ts-node 1187 | dev: true 1188 | 1189 | /eslint-scope/5.1.1: 1190 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1191 | engines: {node: '>=8.0.0'} 1192 | dependencies: 1193 | esrecurse: 4.3.0 1194 | estraverse: 4.3.0 1195 | dev: true 1196 | 1197 | /eslint-scope/7.2.0: 1198 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 1199 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1200 | dependencies: 1201 | esrecurse: 4.3.0 1202 | estraverse: 5.3.0 1203 | dev: true 1204 | 1205 | /eslint-visitor-keys/3.4.1: 1206 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} 1207 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1208 | dev: true 1209 | 1210 | /eslint/8.42.0: 1211 | resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} 1212 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1213 | hasBin: true 1214 | dependencies: 1215 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.42.0 1216 | '@eslint-community/regexpp': 4.5.1 1217 | '@eslint/eslintrc': 2.0.3 1218 | '@eslint/js': 8.42.0 1219 | '@humanwhocodes/config-array': 0.11.10 1220 | '@humanwhocodes/module-importer': 1.0.1 1221 | '@nodelib/fs.walk': 1.2.8 1222 | ajv: 6.12.6 1223 | chalk: 4.1.2 1224 | cross-spawn: 7.0.3 1225 | debug: 4.3.4 1226 | doctrine: 3.0.0 1227 | escape-string-regexp: 4.0.0 1228 | eslint-scope: 7.2.0 1229 | eslint-visitor-keys: 3.4.1 1230 | espree: 9.5.2 1231 | esquery: 1.5.0 1232 | esutils: 2.0.3 1233 | fast-deep-equal: 3.1.3 1234 | file-entry-cache: 6.0.1 1235 | find-up: 5.0.0 1236 | glob-parent: 6.0.2 1237 | globals: 13.20.0 1238 | graphemer: 1.4.0 1239 | ignore: 5.2.4 1240 | import-fresh: 3.3.0 1241 | imurmurhash: 0.1.4 1242 | is-glob: 4.0.3 1243 | is-path-inside: 3.0.3 1244 | js-yaml: 4.1.0 1245 | json-stable-stringify-without-jsonify: 1.0.1 1246 | levn: 0.4.1 1247 | lodash.merge: 4.6.2 1248 | minimatch: 3.1.2 1249 | natural-compare: 1.4.0 1250 | optionator: 0.9.1 1251 | strip-ansi: 6.0.1 1252 | strip-json-comments: 3.1.1 1253 | text-table: 0.2.0 1254 | transitivePeerDependencies: 1255 | - supports-color 1256 | dev: true 1257 | 1258 | /esm-env/1.0.0: 1259 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 1260 | dev: true 1261 | 1262 | /espree/9.5.2: 1263 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} 1264 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1265 | dependencies: 1266 | acorn: 8.8.2 1267 | acorn-jsx: 5.3.2_acorn@8.8.2 1268 | eslint-visitor-keys: 3.4.1 1269 | dev: true 1270 | 1271 | /esquery/1.5.0: 1272 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1273 | engines: {node: '>=0.10'} 1274 | dependencies: 1275 | estraverse: 5.3.0 1276 | dev: true 1277 | 1278 | /esrecurse/4.3.0: 1279 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1280 | engines: {node: '>=4.0'} 1281 | dependencies: 1282 | estraverse: 5.3.0 1283 | dev: true 1284 | 1285 | /estraverse/4.3.0: 1286 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1287 | engines: {node: '>=4.0'} 1288 | dev: true 1289 | 1290 | /estraverse/5.3.0: 1291 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1292 | engines: {node: '>=4.0'} 1293 | dev: true 1294 | 1295 | /esutils/2.0.3: 1296 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1297 | engines: {node: '>=0.10.0'} 1298 | dev: true 1299 | 1300 | /fast-deep-equal/3.1.3: 1301 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1302 | dev: true 1303 | 1304 | /fast-glob/3.2.12: 1305 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 1306 | engines: {node: '>=8.6.0'} 1307 | dependencies: 1308 | '@nodelib/fs.stat': 2.0.5 1309 | '@nodelib/fs.walk': 1.2.8 1310 | glob-parent: 5.1.2 1311 | merge2: 1.4.1 1312 | micromatch: 4.0.5 1313 | dev: true 1314 | 1315 | /fast-json-stable-stringify/2.1.0: 1316 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1317 | dev: true 1318 | 1319 | /fast-levenshtein/2.0.6: 1320 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1321 | dev: true 1322 | 1323 | /fastq/1.15.0: 1324 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1325 | dependencies: 1326 | reusify: 1.0.4 1327 | dev: true 1328 | 1329 | /file-entry-cache/6.0.1: 1330 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1331 | engines: {node: ^10.12.0 || >=12.0.0} 1332 | dependencies: 1333 | flat-cache: 3.0.4 1334 | dev: true 1335 | 1336 | /fill-range/7.0.1: 1337 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1338 | engines: {node: '>=8'} 1339 | dependencies: 1340 | to-regex-range: 5.0.1 1341 | dev: true 1342 | 1343 | /find-up/5.0.0: 1344 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1345 | engines: {node: '>=10'} 1346 | dependencies: 1347 | locate-path: 6.0.0 1348 | path-exists: 4.0.0 1349 | dev: true 1350 | 1351 | /flat-cache/3.0.4: 1352 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1353 | engines: {node: ^10.12.0 || >=12.0.0} 1354 | dependencies: 1355 | flatted: 3.2.7 1356 | rimraf: 3.0.2 1357 | dev: true 1358 | 1359 | /flatted/3.2.7: 1360 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1361 | dev: true 1362 | 1363 | /fraction.js/4.2.0: 1364 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 1365 | dev: true 1366 | 1367 | /fs.realpath/1.0.0: 1368 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1369 | dev: true 1370 | 1371 | /fsevents/2.3.2: 1372 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1373 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1374 | os: [darwin] 1375 | requiresBuild: true 1376 | dev: true 1377 | optional: true 1378 | 1379 | /function-bind/1.1.1: 1380 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1381 | dev: true 1382 | 1383 | /glob-parent/5.1.2: 1384 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1385 | engines: {node: '>= 6'} 1386 | dependencies: 1387 | is-glob: 4.0.3 1388 | dev: true 1389 | 1390 | /glob-parent/6.0.2: 1391 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1392 | engines: {node: '>=10.13.0'} 1393 | dependencies: 1394 | is-glob: 4.0.3 1395 | dev: true 1396 | 1397 | /glob/7.1.6: 1398 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1399 | dependencies: 1400 | fs.realpath: 1.0.0 1401 | inflight: 1.0.6 1402 | inherits: 2.0.4 1403 | minimatch: 3.1.2 1404 | once: 1.4.0 1405 | path-is-absolute: 1.0.1 1406 | dev: true 1407 | 1408 | /glob/7.2.3: 1409 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1410 | dependencies: 1411 | fs.realpath: 1.0.0 1412 | inflight: 1.0.6 1413 | inherits: 2.0.4 1414 | minimatch: 3.1.2 1415 | once: 1.4.0 1416 | path-is-absolute: 1.0.1 1417 | dev: true 1418 | 1419 | /glob/8.1.0: 1420 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1421 | engines: {node: '>=12'} 1422 | dependencies: 1423 | fs.realpath: 1.0.0 1424 | inflight: 1.0.6 1425 | inherits: 2.0.4 1426 | minimatch: 5.1.6 1427 | once: 1.4.0 1428 | dev: true 1429 | 1430 | /globals/13.20.0: 1431 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1432 | engines: {node: '>=8'} 1433 | dependencies: 1434 | type-fest: 0.20.2 1435 | dev: true 1436 | 1437 | /globalyzer/0.1.0: 1438 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 1439 | dev: true 1440 | 1441 | /globby/11.1.0: 1442 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1443 | engines: {node: '>=10'} 1444 | dependencies: 1445 | array-union: 2.1.0 1446 | dir-glob: 3.0.1 1447 | fast-glob: 3.2.12 1448 | ignore: 5.2.4 1449 | merge2: 1.4.1 1450 | slash: 3.0.0 1451 | dev: true 1452 | 1453 | /globrex/0.1.2: 1454 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1455 | dev: true 1456 | 1457 | /graceful-fs/4.2.11: 1458 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1459 | dev: true 1460 | 1461 | /grapheme-splitter/1.0.4: 1462 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1463 | dev: true 1464 | 1465 | /graphemer/1.4.0: 1466 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1467 | dev: true 1468 | 1469 | /has-flag/4.0.0: 1470 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1471 | engines: {node: '>=8'} 1472 | dev: true 1473 | 1474 | /has/1.0.3: 1475 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1476 | engines: {node: '>= 0.4.0'} 1477 | dependencies: 1478 | function-bind: 1.1.1 1479 | dev: true 1480 | 1481 | /highlight.js/11.8.0: 1482 | resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} 1483 | engines: {node: '>=12.0.0'} 1484 | dev: true 1485 | 1486 | /ignore-walk/5.0.1: 1487 | resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} 1488 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1489 | dependencies: 1490 | minimatch: 5.1.6 1491 | dev: true 1492 | 1493 | /ignore/5.2.4: 1494 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1495 | engines: {node: '>= 4'} 1496 | dev: true 1497 | 1498 | /import-fresh/3.3.0: 1499 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1500 | engines: {node: '>=6'} 1501 | dependencies: 1502 | parent-module: 1.0.1 1503 | resolve-from: 4.0.0 1504 | dev: true 1505 | 1506 | /import-meta-resolve/3.0.0: 1507 | resolution: {integrity: sha512-4IwhLhNNA8yy445rPjD/lWh++7hMDOml2eHtd58eG7h+qK3EryMuuRbsHGPikCoAgIkkDnckKfWSk2iDla/ejg==} 1508 | dev: true 1509 | 1510 | /imurmurhash/0.1.4: 1511 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1512 | engines: {node: '>=0.8.19'} 1513 | dev: true 1514 | 1515 | /inflight/1.0.6: 1516 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1517 | dependencies: 1518 | once: 1.4.0 1519 | wrappy: 1.0.2 1520 | dev: true 1521 | 1522 | /inherits/2.0.4: 1523 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1524 | dev: true 1525 | 1526 | /is-binary-path/2.1.0: 1527 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1528 | engines: {node: '>=8'} 1529 | dependencies: 1530 | binary-extensions: 2.2.0 1531 | dev: true 1532 | 1533 | /is-core-module/2.12.1: 1534 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} 1535 | dependencies: 1536 | has: 1.0.3 1537 | dev: true 1538 | 1539 | /is-extglob/2.1.1: 1540 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1541 | engines: {node: '>=0.10.0'} 1542 | dev: true 1543 | 1544 | /is-glob/4.0.3: 1545 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1546 | engines: {node: '>=0.10.0'} 1547 | dependencies: 1548 | is-extglob: 2.1.1 1549 | dev: true 1550 | 1551 | /is-number/7.0.0: 1552 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1553 | engines: {node: '>=0.12.0'} 1554 | dev: true 1555 | 1556 | /is-path-inside/3.0.3: 1557 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1558 | engines: {node: '>=8'} 1559 | dev: true 1560 | 1561 | /isexe/2.0.0: 1562 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1563 | dev: true 1564 | 1565 | /jiti/1.18.2: 1566 | resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} 1567 | hasBin: true 1568 | dev: true 1569 | 1570 | /js-yaml/4.1.0: 1571 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1572 | hasBin: true 1573 | dependencies: 1574 | argparse: 2.0.1 1575 | dev: true 1576 | 1577 | /json-schema-traverse/0.4.1: 1578 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1579 | dev: true 1580 | 1581 | /json-stable-stringify-without-jsonify/1.0.1: 1582 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1583 | dev: true 1584 | 1585 | /kleur/4.1.5: 1586 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1587 | engines: {node: '>=6'} 1588 | dev: true 1589 | 1590 | /known-css-properties/0.27.0: 1591 | resolution: {integrity: sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==} 1592 | dev: true 1593 | 1594 | /levn/0.4.1: 1595 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1596 | engines: {node: '>= 0.8.0'} 1597 | dependencies: 1598 | prelude-ls: 1.2.1 1599 | type-check: 0.4.0 1600 | dev: true 1601 | 1602 | /lilconfig/2.1.0: 1603 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1604 | engines: {node: '>=10'} 1605 | dev: true 1606 | 1607 | /lines-and-columns/1.2.4: 1608 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1609 | dev: true 1610 | 1611 | /locate-path/6.0.0: 1612 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1613 | engines: {node: '>=10'} 1614 | dependencies: 1615 | p-locate: 5.0.0 1616 | dev: true 1617 | 1618 | /lodash.merge/4.6.2: 1619 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1620 | dev: true 1621 | 1622 | /lower-case/2.0.2: 1623 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1624 | dependencies: 1625 | tslib: 2.5.3 1626 | dev: true 1627 | 1628 | /lru-cache/6.0.0: 1629 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1630 | engines: {node: '>=10'} 1631 | dependencies: 1632 | yallist: 4.0.0 1633 | dev: true 1634 | 1635 | /magic-string/0.27.0: 1636 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 1637 | engines: {node: '>=12'} 1638 | dependencies: 1639 | '@jridgewell/sourcemap-codec': 1.4.15 1640 | dev: true 1641 | 1642 | /magic-string/0.30.0: 1643 | resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} 1644 | engines: {node: '>=12'} 1645 | dependencies: 1646 | '@jridgewell/sourcemap-codec': 1.4.15 1647 | dev: true 1648 | 1649 | /merge2/1.4.1: 1650 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1651 | engines: {node: '>= 8'} 1652 | dev: true 1653 | 1654 | /micromatch/4.0.5: 1655 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1656 | engines: {node: '>=8.6'} 1657 | dependencies: 1658 | braces: 3.0.2 1659 | picomatch: 2.3.1 1660 | dev: true 1661 | 1662 | /mime/3.0.0: 1663 | resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} 1664 | engines: {node: '>=10.0.0'} 1665 | hasBin: true 1666 | dev: true 1667 | 1668 | /min-indent/1.0.1: 1669 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1670 | engines: {node: '>=4'} 1671 | dev: true 1672 | 1673 | /minimatch/3.1.2: 1674 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1675 | dependencies: 1676 | brace-expansion: 1.1.11 1677 | dev: true 1678 | 1679 | /minimatch/5.1.6: 1680 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1681 | engines: {node: '>=10'} 1682 | dependencies: 1683 | brace-expansion: 2.0.1 1684 | dev: true 1685 | 1686 | /minimist/1.2.8: 1687 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1688 | dev: true 1689 | 1690 | /mkdirp/0.5.6: 1691 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 1692 | hasBin: true 1693 | dependencies: 1694 | minimist: 1.2.8 1695 | dev: true 1696 | 1697 | /mri/1.2.0: 1698 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1699 | engines: {node: '>=4'} 1700 | dev: true 1701 | 1702 | /mrmime/1.0.1: 1703 | resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} 1704 | engines: {node: '>=10'} 1705 | dev: true 1706 | 1707 | /ms/2.1.2: 1708 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1709 | dev: true 1710 | 1711 | /mz/2.7.0: 1712 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1713 | dependencies: 1714 | any-promise: 1.3.0 1715 | object-assign: 4.1.1 1716 | thenify-all: 1.6.0 1717 | dev: true 1718 | 1719 | /nanoid/3.3.6: 1720 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1721 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1722 | hasBin: true 1723 | dev: true 1724 | 1725 | /nanothreads/0.3.7: 1726 | resolution: {integrity: sha512-l/gbxnQBeMGspLoa+JKhqDrsBtqMW4G5ElsEgbVigR5gl6IBHzBjpM7URGeu0UQN4k7DK0o+J3GmHgaXv+aDQw==} 1727 | dev: true 1728 | 1729 | /natural-compare-lite/1.4.0: 1730 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 1731 | dev: true 1732 | 1733 | /natural-compare/1.4.0: 1734 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1735 | dev: true 1736 | 1737 | /no-case/3.0.4: 1738 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 1739 | dependencies: 1740 | lower-case: 2.0.2 1741 | tslib: 2.5.3 1742 | dev: true 1743 | 1744 | /node-releases/2.0.12: 1745 | resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} 1746 | dev: true 1747 | 1748 | /normalize-path/3.0.0: 1749 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1750 | engines: {node: '>=0.10.0'} 1751 | dev: true 1752 | 1753 | /normalize-range/0.1.2: 1754 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1755 | engines: {node: '>=0.10.0'} 1756 | dev: true 1757 | 1758 | /npm-bundled/2.0.1: 1759 | resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} 1760 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1761 | dependencies: 1762 | npm-normalize-package-bin: 2.0.0 1763 | dev: true 1764 | 1765 | /npm-normalize-package-bin/2.0.0: 1766 | resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} 1767 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1768 | dev: true 1769 | 1770 | /npm-packlist/5.1.3: 1771 | resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} 1772 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 1773 | hasBin: true 1774 | dependencies: 1775 | glob: 8.1.0 1776 | ignore-walk: 5.0.1 1777 | npm-bundled: 2.0.1 1778 | npm-normalize-package-bin: 2.0.0 1779 | dev: true 1780 | 1781 | /object-assign/4.1.1: 1782 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1783 | engines: {node: '>=0.10.0'} 1784 | dev: true 1785 | 1786 | /object-hash/3.0.0: 1787 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1788 | engines: {node: '>= 6'} 1789 | dev: true 1790 | 1791 | /once/1.4.0: 1792 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1793 | dependencies: 1794 | wrappy: 1.0.2 1795 | dev: true 1796 | 1797 | /optionator/0.9.1: 1798 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1799 | engines: {node: '>= 0.8.0'} 1800 | dependencies: 1801 | deep-is: 0.1.4 1802 | fast-levenshtein: 2.0.6 1803 | levn: 0.4.1 1804 | prelude-ls: 1.2.1 1805 | type-check: 0.4.0 1806 | word-wrap: 1.2.3 1807 | dev: true 1808 | 1809 | /p-limit/3.1.0: 1810 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1811 | engines: {node: '>=10'} 1812 | dependencies: 1813 | yocto-queue: 0.1.0 1814 | dev: true 1815 | 1816 | /p-locate/5.0.0: 1817 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1818 | engines: {node: '>=10'} 1819 | dependencies: 1820 | p-limit: 3.1.0 1821 | dev: true 1822 | 1823 | /parent-module/1.0.1: 1824 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1825 | engines: {node: '>=6'} 1826 | dependencies: 1827 | callsites: 3.1.0 1828 | dev: true 1829 | 1830 | /pascal-case/3.1.2: 1831 | resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 1832 | dependencies: 1833 | no-case: 3.0.4 1834 | tslib: 2.5.3 1835 | dev: true 1836 | 1837 | /path-exists/4.0.0: 1838 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1839 | engines: {node: '>=8'} 1840 | dev: true 1841 | 1842 | /path-is-absolute/1.0.1: 1843 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1844 | engines: {node: '>=0.10.0'} 1845 | dev: true 1846 | 1847 | /path-key/3.1.1: 1848 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1849 | engines: {node: '>=8'} 1850 | dev: true 1851 | 1852 | /path-parse/1.0.7: 1853 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1854 | dev: true 1855 | 1856 | /path-type/4.0.0: 1857 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1858 | engines: {node: '>=8'} 1859 | dev: true 1860 | 1861 | /picocolors/1.0.0: 1862 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1863 | dev: true 1864 | 1865 | /picomatch/2.3.1: 1866 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1867 | engines: {node: '>=8.6'} 1868 | dev: true 1869 | 1870 | /pify/2.3.0: 1871 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1872 | engines: {node: '>=0.10.0'} 1873 | dev: true 1874 | 1875 | /pirates/4.0.5: 1876 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} 1877 | engines: {node: '>= 6'} 1878 | dev: true 1879 | 1880 | /postcss-import/15.1.0_postcss@8.4.24: 1881 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1882 | engines: {node: '>=14.0.0'} 1883 | peerDependencies: 1884 | postcss: ^8.0.0 1885 | dependencies: 1886 | postcss: 8.4.24 1887 | postcss-value-parser: 4.2.0 1888 | read-cache: 1.0.0 1889 | resolve: 1.22.2 1890 | dev: true 1891 | 1892 | /postcss-js/4.0.1_postcss@8.4.24: 1893 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1894 | engines: {node: ^12 || ^14 || >= 16} 1895 | peerDependencies: 1896 | postcss: ^8.4.21 1897 | dependencies: 1898 | camelcase-css: 2.0.1 1899 | postcss: 8.4.24 1900 | dev: true 1901 | 1902 | /postcss-load-config/3.1.4_postcss@8.4.24: 1903 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1904 | engines: {node: '>= 10'} 1905 | peerDependencies: 1906 | postcss: '>=8.0.9' 1907 | ts-node: '>=9.0.0' 1908 | peerDependenciesMeta: 1909 | postcss: 1910 | optional: true 1911 | ts-node: 1912 | optional: true 1913 | dependencies: 1914 | lilconfig: 2.1.0 1915 | postcss: 8.4.24 1916 | yaml: 1.10.2 1917 | dev: true 1918 | 1919 | /postcss-load-config/4.0.1_postcss@8.4.24: 1920 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 1921 | engines: {node: '>= 14'} 1922 | peerDependencies: 1923 | postcss: '>=8.0.9' 1924 | ts-node: '>=9.0.0' 1925 | peerDependenciesMeta: 1926 | postcss: 1927 | optional: true 1928 | ts-node: 1929 | optional: true 1930 | dependencies: 1931 | lilconfig: 2.1.0 1932 | postcss: 8.4.24 1933 | yaml: 2.3.1 1934 | dev: true 1935 | 1936 | /postcss-nested/6.0.1_postcss@8.4.24: 1937 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 1938 | engines: {node: '>=12.0'} 1939 | peerDependencies: 1940 | postcss: ^8.2.14 1941 | dependencies: 1942 | postcss: 8.4.24 1943 | postcss-selector-parser: 6.0.13 1944 | dev: true 1945 | 1946 | /postcss-safe-parser/6.0.0_postcss@8.4.24: 1947 | resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} 1948 | engines: {node: '>=12.0'} 1949 | peerDependencies: 1950 | postcss: ^8.3.3 1951 | dependencies: 1952 | postcss: 8.4.24 1953 | dev: true 1954 | 1955 | /postcss-selector-parser/6.0.13: 1956 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 1957 | engines: {node: '>=4'} 1958 | dependencies: 1959 | cssesc: 3.0.0 1960 | util-deprecate: 1.0.2 1961 | dev: true 1962 | 1963 | /postcss-value-parser/4.2.0: 1964 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1965 | dev: true 1966 | 1967 | /postcss/8.4.24: 1968 | resolution: {integrity: sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==} 1969 | engines: {node: ^10 || ^12 || >=14} 1970 | dependencies: 1971 | nanoid: 3.3.6 1972 | picocolors: 1.0.0 1973 | source-map-js: 1.0.2 1974 | dev: true 1975 | 1976 | /prelude-ls/1.2.1: 1977 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1978 | engines: {node: '>= 0.8.0'} 1979 | dev: true 1980 | 1981 | /prettier-plugin-svelte/2.10.1_blbg2s7pis747igzn3ilcyh5ou: 1982 | resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} 1983 | peerDependencies: 1984 | prettier: ^1.16.4 || ^2.0.0 1985 | svelte: ^3.2.0 || ^4.0.0-next.0 1986 | dependencies: 1987 | prettier: 2.8.8 1988 | svelte: 3.59.1 1989 | dev: true 1990 | 1991 | /prettier/2.8.8: 1992 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1993 | engines: {node: '>=10.13.0'} 1994 | hasBin: true 1995 | dev: true 1996 | 1997 | /publint/0.1.12: 1998 | resolution: {integrity: sha512-8LxkO430t/SOhUl0qXQWdXq34m6oyLcPhE4Kc8eXhOEnB82vCHcShPQ2kH53n/ksC7jWdRWDP7MPGxKJbntQfg==} 1999 | engines: {node: '>=16'} 2000 | hasBin: true 2001 | dependencies: 2002 | npm-packlist: 5.1.3 2003 | picocolors: 1.0.0 2004 | sade: 1.8.1 2005 | dev: true 2006 | 2007 | /punycode/2.3.0: 2008 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 2009 | engines: {node: '>=6'} 2010 | dev: true 2011 | 2012 | /queue-microtask/1.2.3: 2013 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2014 | dev: true 2015 | 2016 | /read-cache/1.0.0: 2017 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2018 | dependencies: 2019 | pify: 2.3.0 2020 | dev: true 2021 | 2022 | /readdirp/3.6.0: 2023 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2024 | engines: {node: '>=8.10.0'} 2025 | dependencies: 2026 | picomatch: 2.3.1 2027 | dev: true 2028 | 2029 | /resolve-from/4.0.0: 2030 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2031 | engines: {node: '>=4'} 2032 | dev: true 2033 | 2034 | /resolve/1.22.2: 2035 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} 2036 | hasBin: true 2037 | dependencies: 2038 | is-core-module: 2.12.1 2039 | path-parse: 1.0.7 2040 | supports-preserve-symlinks-flag: 1.0.0 2041 | dev: true 2042 | 2043 | /reusify/1.0.4: 2044 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2045 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2046 | dev: true 2047 | 2048 | /rimraf/2.7.1: 2049 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 2050 | hasBin: true 2051 | dependencies: 2052 | glob: 7.2.3 2053 | dev: true 2054 | 2055 | /rimraf/3.0.2: 2056 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2057 | hasBin: true 2058 | dependencies: 2059 | glob: 7.2.3 2060 | dev: true 2061 | 2062 | /rollup/3.25.1: 2063 | resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==} 2064 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 2065 | hasBin: true 2066 | optionalDependencies: 2067 | fsevents: 2.3.2 2068 | dev: true 2069 | 2070 | /run-parallel/1.2.0: 2071 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2072 | dependencies: 2073 | queue-microtask: 1.2.3 2074 | dev: true 2075 | 2076 | /sade/1.8.1: 2077 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2078 | engines: {node: '>=6'} 2079 | dependencies: 2080 | mri: 1.2.0 2081 | dev: true 2082 | 2083 | /sander/0.5.1: 2084 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 2085 | dependencies: 2086 | es6-promise: 3.3.1 2087 | graceful-fs: 4.2.11 2088 | mkdirp: 0.5.6 2089 | rimraf: 2.7.1 2090 | dev: true 2091 | 2092 | /semver/7.5.2: 2093 | resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} 2094 | engines: {node: '>=10'} 2095 | hasBin: true 2096 | dependencies: 2097 | lru-cache: 6.0.0 2098 | dev: true 2099 | 2100 | /set-cookie-parser/2.6.0: 2101 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} 2102 | dev: true 2103 | 2104 | /shebang-command/2.0.0: 2105 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2106 | engines: {node: '>=8'} 2107 | dependencies: 2108 | shebang-regex: 3.0.0 2109 | dev: true 2110 | 2111 | /shebang-regex/3.0.0: 2112 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2113 | engines: {node: '>=8'} 2114 | dev: true 2115 | 2116 | /sirv/2.0.3: 2117 | resolution: {integrity: sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==} 2118 | engines: {node: '>= 10'} 2119 | dependencies: 2120 | '@polka/url': 1.0.0-next.21 2121 | mrmime: 1.0.1 2122 | totalist: 3.0.1 2123 | dev: true 2124 | 2125 | /slash/3.0.0: 2126 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2127 | engines: {node: '>=8'} 2128 | dev: true 2129 | 2130 | /sorcery/0.11.0: 2131 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} 2132 | hasBin: true 2133 | dependencies: 2134 | '@jridgewell/sourcemap-codec': 1.4.15 2135 | buffer-crc32: 0.2.13 2136 | minimist: 1.2.8 2137 | sander: 0.5.1 2138 | dev: true 2139 | 2140 | /source-map-js/1.0.2: 2141 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2142 | engines: {node: '>=0.10.0'} 2143 | dev: true 2144 | 2145 | /streamsearch/1.1.0: 2146 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 2147 | engines: {node: '>=10.0.0'} 2148 | dev: true 2149 | 2150 | /strip-ansi/6.0.1: 2151 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2152 | engines: {node: '>=8'} 2153 | dependencies: 2154 | ansi-regex: 5.0.1 2155 | dev: true 2156 | 2157 | /strip-indent/3.0.0: 2158 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 2159 | engines: {node: '>=8'} 2160 | dependencies: 2161 | min-indent: 1.0.1 2162 | dev: true 2163 | 2164 | /strip-json-comments/3.1.1: 2165 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2166 | engines: {node: '>=8'} 2167 | dev: true 2168 | 2169 | /sucrase/3.32.0: 2170 | resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} 2171 | engines: {node: '>=8'} 2172 | hasBin: true 2173 | dependencies: 2174 | '@jridgewell/gen-mapping': 0.3.3 2175 | commander: 4.1.1 2176 | glob: 7.1.6 2177 | lines-and-columns: 1.2.4 2178 | mz: 2.7.0 2179 | pirates: 4.0.5 2180 | ts-interface-checker: 0.1.13 2181 | dev: true 2182 | 2183 | /supports-color/7.2.0: 2184 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2185 | engines: {node: '>=8'} 2186 | dependencies: 2187 | has-flag: 4.0.0 2188 | dev: true 2189 | 2190 | /supports-preserve-symlinks-flag/1.0.0: 2191 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2192 | engines: {node: '>= 0.4'} 2193 | dev: true 2194 | 2195 | /svelte-check/3.4.3_owwrqxqyw2b26jd4x7iiapyxoq: 2196 | resolution: {integrity: sha512-O07soQFY3X0VDt+bcGc6D5naz0cLtjwnmNP9JsEBPVyMemFEqUhL2OdLqvkl5H/u8Jwm50EiAU4BPRn5iin/kg==} 2197 | hasBin: true 2198 | peerDependencies: 2199 | svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 2200 | dependencies: 2201 | '@jridgewell/trace-mapping': 0.3.18 2202 | chokidar: 3.5.3 2203 | fast-glob: 3.2.12 2204 | import-fresh: 3.3.0 2205 | picocolors: 1.0.0 2206 | sade: 1.8.1 2207 | svelte: 3.59.1 2208 | svelte-preprocess: 5.0.4_jissygmktegc5gmmkgli52p73q 2209 | typescript: 5.1.3 2210 | transitivePeerDependencies: 2211 | - '@babel/core' 2212 | - coffeescript 2213 | - less 2214 | - postcss 2215 | - postcss-load-config 2216 | - pug 2217 | - sass 2218 | - stylus 2219 | - sugarss 2220 | dev: true 2221 | 2222 | /svelte-eslint-parser/0.30.0_svelte@3.59.1: 2223 | resolution: {integrity: sha512-H0Cn2TKr70DU9p/Gb04CfwtS7eK28MYumrHYPaDNkIFbfwGDLADpbERBn7u8G1Rcm2RMr2/mL6mq0J2e8iKFlA==} 2224 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2225 | peerDependencies: 2226 | svelte: ^3.37.0 || ^4.0.0-0 2227 | peerDependenciesMeta: 2228 | svelte: 2229 | optional: true 2230 | dependencies: 2231 | eslint-scope: 7.2.0 2232 | eslint-visitor-keys: 3.4.1 2233 | espree: 9.5.2 2234 | svelte: 3.59.1 2235 | dev: true 2236 | 2237 | /svelte-highlight/7.3.0: 2238 | resolution: {integrity: sha512-59oE9/xOFXAdT97qXIt6HMlzL2f+0YNQ+BArzRONwCW96ElxX7TGme1kU5s3tsk1D88G5dhBixcP1chOGOkVsg==} 2239 | dependencies: 2240 | highlight.js: 11.8.0 2241 | dev: true 2242 | 2243 | /svelte-hmr/0.15.2_svelte@3.59.1: 2244 | resolution: {integrity: sha512-q/bAruCvFLwvNbeE1x3n37TYFb3mTBJ6TrCq6p2CoFbSTNhDE9oAtEfpy+wmc9So8AG0Tja+X0/mJzX9tSfvIg==} 2245 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 2246 | peerDependencies: 2247 | svelte: ^3.19.0 || ^4.0.0-next.0 2248 | dependencies: 2249 | svelte: 3.59.1 2250 | dev: true 2251 | 2252 | /svelte-preprocess/5.0.4_jissygmktegc5gmmkgli52p73q: 2253 | resolution: {integrity: sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==} 2254 | engines: {node: '>= 14.10.0'} 2255 | requiresBuild: true 2256 | peerDependencies: 2257 | '@babel/core': ^7.10.2 2258 | coffeescript: ^2.5.1 2259 | less: ^3.11.3 || ^4.0.0 2260 | postcss: ^7 || ^8 2261 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 2262 | pug: ^3.0.0 2263 | sass: ^1.26.8 2264 | stylus: ^0.55.0 2265 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 2266 | svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 2267 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' 2268 | peerDependenciesMeta: 2269 | '@babel/core': 2270 | optional: true 2271 | coffeescript: 2272 | optional: true 2273 | less: 2274 | optional: true 2275 | postcss: 2276 | optional: true 2277 | postcss-load-config: 2278 | optional: true 2279 | pug: 2280 | optional: true 2281 | sass: 2282 | optional: true 2283 | stylus: 2284 | optional: true 2285 | sugarss: 2286 | optional: true 2287 | typescript: 2288 | optional: true 2289 | dependencies: 2290 | '@types/pug': 2.0.6 2291 | detect-indent: 6.1.0 2292 | magic-string: 0.27.0 2293 | postcss: 8.4.24 2294 | sorcery: 0.11.0 2295 | strip-indent: 3.0.0 2296 | svelte: 3.59.1 2297 | typescript: 5.1.3 2298 | dev: true 2299 | 2300 | /svelte/3.58.0: 2301 | resolution: {integrity: sha512-brIBNNB76mXFmU/Kerm4wFnkskBbluBDCjx/8TcpYRb298Yh2dztS2kQ6bhtjMcvUhd5ynClfwpz5h2gnzdQ1A==} 2302 | engines: {node: '>= 8'} 2303 | dev: true 2304 | 2305 | /svelte/3.59.1: 2306 | resolution: {integrity: sha512-pKj8fEBmqf6mq3/NfrB9SLtcJcUvjYSWyePlfCqN9gujLB25RitWK8PvFzlwim6hD/We35KbPlRteuA6rnPGcQ==} 2307 | engines: {node: '>= 8'} 2308 | dev: true 2309 | 2310 | /svelte2tsx/0.6.15_ew3mtnddoirxihfd3dvwoglzia: 2311 | resolution: {integrity: sha512-+j6RmA3g5pPs1DHa/rdzJjjhZuCfWx0IbNPaR99A2bvOSPPY6BlVkBGU0urI+DGcWHhYEG28Flo942KqlAkpEQ==} 2312 | peerDependencies: 2313 | svelte: ^3.55 || ^4.0 2314 | typescript: ^4.9.4 || ^5.0.0 2315 | dependencies: 2316 | dedent-js: 1.0.1 2317 | pascal-case: 3.1.2 2318 | svelte: 3.59.1 2319 | typescript: 5.1.3 2320 | dev: true 2321 | 2322 | /tailwindcss/3.3.2: 2323 | resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} 2324 | engines: {node: '>=14.0.0'} 2325 | hasBin: true 2326 | dependencies: 2327 | '@alloc/quick-lru': 5.2.0 2328 | arg: 5.0.2 2329 | chokidar: 3.5.3 2330 | didyoumean: 1.2.2 2331 | dlv: 1.1.3 2332 | fast-glob: 3.2.12 2333 | glob-parent: 6.0.2 2334 | is-glob: 4.0.3 2335 | jiti: 1.18.2 2336 | lilconfig: 2.1.0 2337 | micromatch: 4.0.5 2338 | normalize-path: 3.0.0 2339 | object-hash: 3.0.0 2340 | picocolors: 1.0.0 2341 | postcss: 8.4.24 2342 | postcss-import: 15.1.0_postcss@8.4.24 2343 | postcss-js: 4.0.1_postcss@8.4.24 2344 | postcss-load-config: 4.0.1_postcss@8.4.24 2345 | postcss-nested: 6.0.1_postcss@8.4.24 2346 | postcss-selector-parser: 6.0.13 2347 | postcss-value-parser: 4.2.0 2348 | resolve: 1.22.2 2349 | sucrase: 3.32.0 2350 | transitivePeerDependencies: 2351 | - ts-node 2352 | dev: true 2353 | 2354 | /text-table/0.2.0: 2355 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2356 | dev: true 2357 | 2358 | /thenify-all/1.6.0: 2359 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 2360 | engines: {node: '>=0.8'} 2361 | dependencies: 2362 | thenify: 3.3.1 2363 | dev: true 2364 | 2365 | /thenify/3.3.1: 2366 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 2367 | dependencies: 2368 | any-promise: 1.3.0 2369 | dev: true 2370 | 2371 | /tiny-glob/0.2.9: 2372 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 2373 | dependencies: 2374 | globalyzer: 0.1.0 2375 | globrex: 0.1.2 2376 | dev: true 2377 | 2378 | /to-regex-range/5.0.1: 2379 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2380 | engines: {node: '>=8.0'} 2381 | dependencies: 2382 | is-number: 7.0.0 2383 | dev: true 2384 | 2385 | /totalist/3.0.1: 2386 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 2387 | engines: {node: '>=6'} 2388 | dev: true 2389 | 2390 | /ts-interface-checker/0.1.13: 2391 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 2392 | dev: true 2393 | 2394 | /tslib/1.14.1: 2395 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2396 | dev: true 2397 | 2398 | /tslib/2.5.3: 2399 | resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} 2400 | dev: true 2401 | 2402 | /tsutils/3.21.0_typescript@5.1.3: 2403 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 2404 | engines: {node: '>= 6'} 2405 | peerDependencies: 2406 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2407 | dependencies: 2408 | tslib: 1.14.1 2409 | typescript: 5.1.3 2410 | dev: true 2411 | 2412 | /type-check/0.4.0: 2413 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2414 | engines: {node: '>= 0.8.0'} 2415 | dependencies: 2416 | prelude-ls: 1.2.1 2417 | dev: true 2418 | 2419 | /type-fest/0.20.2: 2420 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2421 | engines: {node: '>=10'} 2422 | dev: true 2423 | 2424 | /typescript/5.1.3: 2425 | resolution: {integrity: sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==} 2426 | engines: {node: '>=14.17'} 2427 | hasBin: true 2428 | dev: true 2429 | 2430 | /undici/5.22.1: 2431 | resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} 2432 | engines: {node: '>=14.0'} 2433 | dependencies: 2434 | busboy: 1.6.0 2435 | dev: true 2436 | 2437 | /update-browserslist-db/1.0.11_browserslist@4.21.9: 2438 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} 2439 | hasBin: true 2440 | peerDependencies: 2441 | browserslist: '>= 4.21.0' 2442 | dependencies: 2443 | browserslist: 4.21.9 2444 | escalade: 3.1.1 2445 | picocolors: 1.0.0 2446 | dev: true 2447 | 2448 | /uri-js/4.4.1: 2449 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2450 | dependencies: 2451 | punycode: 2.3.0 2452 | dev: true 2453 | 2454 | /util-deprecate/1.0.2: 2455 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2456 | dev: true 2457 | 2458 | /vite/4.3.9: 2459 | resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} 2460 | engines: {node: ^14.18.0 || >=16.0.0} 2461 | hasBin: true 2462 | peerDependencies: 2463 | '@types/node': '>= 14' 2464 | less: '*' 2465 | sass: '*' 2466 | stylus: '*' 2467 | sugarss: '*' 2468 | terser: ^5.4.0 2469 | peerDependenciesMeta: 2470 | '@types/node': 2471 | optional: true 2472 | less: 2473 | optional: true 2474 | sass: 2475 | optional: true 2476 | stylus: 2477 | optional: true 2478 | sugarss: 2479 | optional: true 2480 | terser: 2481 | optional: true 2482 | dependencies: 2483 | esbuild: 0.17.19 2484 | postcss: 8.4.24 2485 | rollup: 3.25.1 2486 | optionalDependencies: 2487 | fsevents: 2.3.2 2488 | dev: true 2489 | 2490 | /vitefu/0.2.4_vite@4.3.9: 2491 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} 2492 | peerDependencies: 2493 | vite: ^3.0.0 || ^4.0.0 2494 | peerDependenciesMeta: 2495 | vite: 2496 | optional: true 2497 | dependencies: 2498 | vite: 4.3.9 2499 | dev: true 2500 | 2501 | /which/2.0.2: 2502 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2503 | engines: {node: '>= 8'} 2504 | hasBin: true 2505 | dependencies: 2506 | isexe: 2.0.0 2507 | dev: true 2508 | 2509 | /word-wrap/1.2.3: 2510 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 2511 | engines: {node: '>=0.10.0'} 2512 | dev: true 2513 | 2514 | /wrappy/1.0.2: 2515 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2516 | dev: true 2517 | 2518 | /yallist/4.0.0: 2519 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2520 | dev: true 2521 | 2522 | /yaml/1.10.2: 2523 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 2524 | engines: {node: '>= 6'} 2525 | dev: true 2526 | 2527 | /yaml/2.3.1: 2528 | resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} 2529 | engines: {node: '>= 14'} 2530 | dev: true 2531 | 2532 | /yocto-queue/0.1.0: 2533 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2534 | engines: {node: '>=10'} 2535 | dev: true 2536 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const tailwindcss = require("tailwindcss"); 2 | const autoprefixer = require("autoprefixer"); 3 | 4 | const config = { 5 | plugins: [ 6 | //Some plugins, like tailwindcss/nesting, need to run before Tailwind, 7 | tailwindcss(), 8 | //But others, like autoprefixer, need to run after, 9 | autoprefixer, 10 | ], 11 | }; 12 | 13 | module.exports = config; 14 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface Platform {} 9 | } 10 | } 11 | 12 | export {}; 13 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 | %sveltekit.body% 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/app.postcss: -------------------------------------------------------------------------------- 1 | /* Write your global styles here, in PostCSS syntax */ 2 | 3 | html { 4 | color-scheme: dark; 5 | min-height:100%; 6 | } 7 | 8 | p { 9 | @apply mb-2 mt-1; 10 | } 11 | *:target { 12 | outline: 1px solid gray; 13 | } 14 | body { 15 | height:100%; 16 | } -------------------------------------------------------------------------------- /src/global.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --sk-back-h: 206; 3 | --sk-back-3-hsl: ; 4 | --sk-back-1: hsl(0, 0%, 100%); 5 | --sk-back-2: hsl(0, 0%, 100%); 6 | --sk-back-3: hsl(206, 64%, 98%); 7 | --sk-back-4: hsl(206, 44%, 93%); 8 | --sk-back-5: hsl(206, 20%, 80%); 9 | --sk-text-1: hsl(0, 0%, 13%); 10 | --sk-text-2: hsl(0, 0%, 27%); 11 | --sk-text-3: hsl(240, 8%, 44%); 12 | --sk-theme-1: hsl(15, 100%, 55%); 13 | --sk-theme-2: hsl(240, 8%, 44%); 14 | --sk-theme-3: hsl(204, 100%, 63%); 15 | --sk-font: "Overpass", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, 16 | Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", 17 | sans-serif; 18 | --sk-font-mono: "Fira Mono", monospace; 19 | } 20 | html { 21 | overflow-y: auto; 22 | } 23 | 24 | html, 25 | body { 26 | background-color: var(--sk-back-3); 27 | color: var(--sk-text-1); 28 | font-family: var(--sk-font); 29 | accent-color: var(--sk-theme-1); 30 | max-height: 100vh; 31 | inset: 0; 32 | height: 100%; 33 | margin: 0; 34 | } 35 | 36 | body { 37 | max-width: calc(100% - 6rem); 38 | margin: 0 auto; 39 | width: 100%; 40 | padding-block: 7vh; 41 | position: relative; 42 | } 43 | 44 | @media (prefers-color-scheme: dark) { 45 | :root { 46 | --sk-back-1: hsl(0, 0%, 4%); 47 | --sk-back-2: hsl(0, 0%, 18%); 48 | --sk-back-3: hsl(0, 0%, 14%); 49 | --sk-back-4: hsl(0, 0%, 22%); 50 | --sk-back-5: hsl(0, 0%, 40%); 51 | --sk-text-1: hsl(0, 0%, 90%); 52 | --sk-text-2: hsl(0, 0%, 80%); 53 | --sk-text-3: hsl(0, 0%, 65%); 54 | } 55 | 56 | html, 57 | body { 58 | color-scheme: dark; 59 | background-color: var(--sk-back-1); 60 | } 61 | 62 | a { 63 | color: var(--sk-theme-3); 64 | } 65 | 66 | a:visited { 67 | color: hsl(267, 100%, 75%); 68 | } 69 | } 70 | 71 | p { 72 | margin: 0 0 0.25em; 73 | } 74 | code, 75 | output { 76 | font-family: monospace; 77 | display: block; 78 | margin-bottom: 1rem; 79 | max-height: 40vh; 80 | overflow-y: hidden; 81 | border: #727272 solid 1px; 82 | border-radius: 0.25rem; 83 | background: #0c0b10bc; 84 | padding: 0.5rem; 85 | overflow-y: auto; 86 | line-height: 1; 87 | white-space: pre; 88 | } 89 | 90 | input[type="number"] { 91 | padding: 0.5rem; 92 | background: var(--sk-back-3); 93 | border-radius: 0.25rem; 94 | border: 1px solid #666; 95 | } 96 | input[type="number"] + button { 97 | margin-left: 0.25rem; 98 | padding: 0.275rem 0.45rem; 99 | min-height: 2rem; 100 | } 101 | .alert { 102 | background-color: var(--sk-back-3); 103 | } 104 | 105 | button { 106 | padding: 0.5rem; 107 | margin-bottom: 1rem; 108 | } 109 | .active { 110 | background-color: var(--sk-back-5); 111 | } 112 | 113 | main { 114 | display: contents; 115 | } 116 | -------------------------------------------------------------------------------- /src/lib/index.js: -------------------------------------------------------------------------------- 1 | // Reexport your entry components here 2 | export * from './svelte-worker-store' -------------------------------------------------------------------------------- /src/lib/svelte-worker-store.ts: -------------------------------------------------------------------------------- 1 | import { 2 | writable, 3 | derived as internalDerived, 4 | type Writable, 5 | } from "svelte/store"; 6 | import { 7 | InlineThread, 8 | Thread, 9 | type ThreadArgs, 10 | ThreadPool, 11 | type WorkerThreadFn, 12 | } from "nanothreads"; 13 | 14 | export { workerInit } from "nanothreads"; 15 | 16 | type Unsubscriber = () => void; 17 | type Subscriber = (value: T) => Unsubscriber | void; 18 | type WorkerScript = string | URL; 19 | 20 | type ScriptOrHandler = Arguments extends void 21 | ? WorkerScript 22 | : WorkerThreadFn; 23 | 24 | export type { 25 | ThreadArgs as ExecutorArgs, 26 | ScriptOrHandler as WorkerOrExecutor, 27 | WorkerScript, 28 | }; 29 | 30 | const SETTER = Symbol("[[Setter]]"); 31 | 32 | /** 33 | * A basic store which updates it's value based on the returned output from the provided Handler, 34 | * 35 | * @template Arguments - The types of arguments the worker function receives. 36 | * @template Result - The type of result returned by the worker function. 37 | * @param {ScriptOrHandler} workerOrExecutor - Worker script or handler function. 38 | * @param {number} [max=1] - The maximum number of concurrent tasks. Defaults to 1. 39 | * 40 | * @example 41 | * ```typescript 42 | * const myChannel = channel<[a: number, b: number], number>((a, b) => a + b); 43 | * 44 | * myChannel.send(1, 2); 45 | * 46 | * $: console.log($myChannel) // output: 3 47 | * ``` 48 | */ 49 | export const channel = ( 50 | workerOrExecutor: ScriptOrHandler | string | URL, 51 | max = 1, 52 | ) => { 53 | let value: Result; 54 | let state: "open" | "closed" = "open"; 55 | 56 | const isInlineWorker = typeof workerOrExecutor === "function"; 57 | 58 | const WorkerConstructor = isInlineWorker ? InlineThread : Thread; 59 | 60 | const thread = new WorkerConstructor( 61 | workerOrExecutor as never, 62 | { 63 | maxConcurrency: max, 64 | type: "module", 65 | }, 66 | ); 67 | 68 | /** 69 | * Subscribes to the channel to receive results from the worker. 70 | * @param {Subscriber} callback - The function to call when new results are available. 71 | */ 72 | const subscribe = (callback: Subscriber): Unsubscriber => { 73 | if (state === "closed") 74 | throw Error("Cannot subscribe to a disposed worker store."); 75 | 76 | const unsubscribe = ( 77 | thread.onMessage.bind(thread) as (typeof thread)["onMessage"] 78 | )((result) => { 79 | value = result; 80 | callback(value); 81 | }); 82 | 83 | callback(value); 84 | return () => unsubscribe(); 85 | }; 86 | 87 | /** 88 | * Sends data to the worker thread. 89 | * @param {...value: Arguments} - The data to send to the worker. 90 | * @returns {Promise} - A promise that resolves with the result from the worker. 91 | */ 92 | const send = (...args: Arguments) => { 93 | if (state === "closed") 94 | throw Error("Cannot call 'send' on a disposed worker store."); 95 | return thread.send(args); 96 | }; 97 | 98 | /** 99 | * Set value and inform subscribers. 100 | * @alias 101 | * @see {@linkplain send} 102 | */ 103 | const set = (...value: Arguments) => send(...value); 104 | 105 | return { 106 | subscribe, 107 | set, 108 | send, 109 | /** @internal */ 110 | [SETTER]: (to: never) => { 111 | value = to; 112 | }, 113 | /** 114 | * Terminates the worker thread permanently 115 | */ 116 | dispose() { 117 | state = "closed"; 118 | 119 | return thread.terminate(); 120 | }, 121 | } as const; 122 | }; 123 | 124 | /** 125 | * Creates a channel that sends the output a store and applies an aggregation function over its input value; 126 | * 127 | * @template Arguments 128 | * @template Result 129 | * @param store = the store to derive from 130 | * @param workerOrExecutor - a URL, string, or inline function 131 | * @param [initial_value] - default value 132 | */ 133 | export const derived = ( 134 | store: Writable, 135 | workerOrExecutor: string | URL | ScriptOrHandler, 136 | initial_value?: Result, 137 | ) => { 138 | const subscribers = new Set>(); 139 | const makeChannel = () => channel(workerOrExecutor, 1); 140 | 141 | let wrappedStore: ReturnType | null = makeChannel(); 142 | let currentValue: Result = initial_value as Result; 143 | 144 | let state: "closed" | "open" = "open"; 145 | 146 | const _internal_ = internalDerived( 147 | store, 148 | (args, set) => { 149 | const isArray = Array.isArray(args); 150 | const normalizedArgs = isArray ? args : ([args] as Arguments); 151 | if (wrappedStore) 152 | wrappedStore.send(...normalizedArgs).then((value) => { 153 | currentValue = value; 154 | set(currentValue); 155 | }); 156 | }, 157 | initial_value, 158 | ); 159 | 160 | /** 161 | * Terminates the worker thread 162 | */ 163 | const dispose = () => { 164 | state = "closed"; 165 | if (wrappedStore) wrappedStore.dispose(); 166 | subscribers.forEach((cb) => cb(currentValue)); 167 | subscribers.clear(); 168 | }; 169 | 170 | return { 171 | subscribe: (...args: Parameters<(typeof _internal_)["subscribe"]>) => { 172 | if (state === "closed") 173 | throw Error("Cannot subscribe to a disposed worker store."); 174 | 175 | if (!wrappedStore) wrappedStore = makeChannel(); 176 | 177 | const unsub = _internal_["subscribe"](...args); 178 | subscribers.add(unsub); 179 | args[0](initial_value as never); 180 | return () => { 181 | subscribers.delete(unsub); 182 | if (subscribers.size === 0) { 183 | dispose(); 184 | } 185 | }; 186 | }, 187 | dispose, 188 | } as const; 189 | }; 190 | 191 | class ThreadPoolStore extends ThreadPool { 192 | private store = writable>({}); 193 | #handlers: Set = new Set([]); 194 | constructor( 195 | ...args: ConstructorParameters> 196 | ) { 197 | super(...args); 198 | 199 | const updater = (threadId: number, value: Result) => 200 | this.store.update(($store) => { 201 | return { 202 | ...$store, 203 | [threadId]: value, 204 | } as Record; 205 | }); 206 | 207 | for (const thread of this.threads) { 208 | const callback = (value: Result) => updater(thread.id, value); 209 | const subscriber = thread.onMessage.bind(thread)(callback as never); 210 | this.#handlers.add(subscriber); 211 | } 212 | } 213 | async terminate(): Promise { 214 | this.#handlers.forEach((s) => s()); 215 | this.#handlers.clear(); 216 | await super.terminate(); 217 | } 218 | public get subscribe() { 219 | return this.store.subscribe; 220 | } 221 | } 222 | 223 | /** 224 | * Returns a communication channel to a ThreadPool which runs your handler on the first avaiable worker thread. 225 | * 226 | * @template Arguments - The types of arguments the worker function will receive. 227 | * @template Result - The value returned by the worker function. 228 | * @param {ScriptOrHandler | URL} workerOrExecutor - URL or path string to a worker script or an inline handler function. 229 | * @param {Object} options - Configuration options for the worker pool. 230 | * @param {number} options.count - The number of worker threads to create. 231 | * @param {number} options.maxConcurrency - The maximum number of concurrent tasks per worker. Defaults to 1. 232 | * 233 | * @example 234 | * ```typescript 235 | * const myPool = pooled<[a: number, b: number], number>((a, b) => { 236 | * return a + b; 237 | * }, { count: 4, maxConcurrency: 2 }); 238 | * 239 | * // await the result if you want the pool values to be returned from `send` 240 | * await myPool.send(1, 2); // output: { "0": 3 } 241 | * 242 | * // or just use auto-subscriptions 243 | * myPool.send(1, 2); 244 | * 245 | * $: value = $myPool; // output: { "0": 3 } 246 | * 247 | * ``` 248 | */ 249 | export const pooled = ( 250 | workerOrExecutor: string | ScriptOrHandler | URL, 251 | { count = 1, maxConcurrency = 1 }: { count: number; maxConcurrency: number }, 252 | ) => { 253 | const task: string | ScriptOrHandler = 254 | workerOrExecutor as never; 255 | 256 | const pool = new ThreadPoolStore({ 257 | task, 258 | count, 259 | maxConcurrency, 260 | type: "module", 261 | }); 262 | 263 | return { 264 | /** 265 | * Sends data to the worker threads. 266 | * @returns {typeof pool['exec']} - The function to call to send data to the worker threads. 267 | */ 268 | send: pool.exec.bind(pool), 269 | subscribe: pool.subscribe, 270 | dispose: pool.terminate.bind(pool), 271 | }; 272 | }; 273 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 | 16 | svelte-worker-store 17 | 18 | 19 | 20 | {#if $page.url.pathname !== "/"} 21 | {$page.url.pathname !== "/" ? `\u003C` : ""} 23 | Back to home 25 | {/if} 26 | 27 | svelte-worker-store{$page.url.pathname !== "/" ? $page.url.pathname : ""} 28 | 29 | 30 | Demos 31 | Documentation 32 | 33 | 34 |
35 | 36 |
37 | -------------------------------------------------------------------------------- /src/routes/+layout.ts: -------------------------------------------------------------------------------- 1 | export const ssr = false; 2 | export const prerender = false; 3 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 |

svelte-worker-store

7 |

stores go brrrrrr

8 |
9 |
10 |

11 | svelte-worker-store is a set of highly performant Web Worker-based 12 | Svelte stores. 13 |

14 |

15 | Svelte Apps that do resource-intensive tasks (e.g., image manipulation, code 16 | transpilation, number crunching, etc.) can potentially benefit from this 17 | library greatly in performance as well as reducing the complexity of your 18 | code. 19 |

20 |

21 | Check it out on GitHub 25 | or on the 26 | NPM Registry. 29 |

30 |

Demos

31 |
32 |
33 | julia set 36 |
37 |

4x Julia Set

38 |
39 |
40 | 4 times julia set demo 41 |
42 |
43 |
44 | -------------------------------------------------------------------------------- /src/routes/_components/Canvas.svelte: -------------------------------------------------------------------------------- 1 | 100 | 101 | 102 | 103 | 109 | 118 | 119 | 126 | -------------------------------------------------------------------------------- /src/routes/_components/assets/julia-set.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snuffyDev/svelte-worker-store/e5b127622248de7b033400d15c9c080febba54d2/src/routes/_components/assets/julia-set.png -------------------------------------------------------------------------------- /src/routes/_components/pi.mjs: -------------------------------------------------------------------------------- 1 | export default (n) => { 2 | // Int32 3 | n = +n || 10000; 4 | let i = 0, 5 | k = 0, 6 | d = 0, 7 | k2 = 0, 8 | d3 = 0, 9 | d4 = 0; 10 | let output = ""; 11 | // BigInt 12 | let tmp1 = 0n, // mpz_init(tmp1) 13 | tmp2 = 0n, // mpz_init(tmp2) 14 | acc = 0n, // mpz_init_set_ui(acc, 0) 15 | den = 1n, // mpz_init_set_ui(den, 1) 16 | num = 1n; // mpz_init_set_ui(num, 1) 17 | const chr_0 = "0".charCodeAt(0); 18 | // preallocated buffer size 19 | // let bufsize = (10/*value of pi*/ + 2/*\t:*/ + n.toString().length/*index of slice*/ + 1/*\n*/) * (n / 10)/*line count*/; 20 | // croped buffer size 21 | // for (let i = 10, length = 10 ** (Math.log10(n) >>> 0); i < length; i *= 10) { 22 | // bufsize -= i - 1; 23 | // } 24 | // let buf = Buffer.allocUnsafe(bufsize), 25 | // bufoffs = 0; 26 | for (let i = 0; ; ) { 27 | k++; 28 | //#region inline nextTerm(k) 29 | k2 = k * 2 + 1; 30 | acc += num * 2n; // mpz_addmul_ui(acc, num, 2) 31 | acc *= BigInt(k2); // mpz_mul_ui(acc, acc, k2) 32 | den *= BigInt(k2); // mpz_mul_ui(den, den, k2) 33 | num *= BigInt(k); // mpz_mul_ui(num, num, k) 34 | //#endregion inline nextTerm(k) 35 | if (num > acc /* mpz_cmp(num, acc) > 0 */) continue; 36 | //#region inline extractDigit(3); 37 | tmp1 = num * 3n; // mpz_mul_ui(tmp1, num, nth); 38 | tmp2 = tmp1 + acc; // mpz_add(tmp2, tmp1, acc); 39 | tmp1 = tmp2 / den; // mpz_tdiv_q(tmp1, tmp2, den); 40 | d3 = Number(tmp1) >>> 0; // mpz_get_ui(tmp1) 41 | //#region inline extractDigit(3); 42 | d = d3; 43 | //#region inline extractDigit(4); 44 | tmp1 = num * 4n; // mpz_mul_ui(tmp1, num, nth); 45 | tmp2 = tmp1 + acc; // mpz_add(tmp2, tmp1, acc); 46 | tmp1 = tmp2 / den; // mpz_tdiv_q(tmp1, tmp2, den); 47 | d4 = Number(tmp1) >>> 0; // mpz_get_ui(tmp1) 48 | //#region inline extractDigit(4); 49 | if (d !== d4) continue; 50 | output += String.fromCharCode(d + chr_0); 51 | let iMod10 = ++i % 10; 52 | if (iMod10 === 0) { 53 | output += `\t${i}\n\n`; 54 | } 55 | if (i >= n) { 56 | if (iMod10 > 0) { 57 | for (let idx = 0; idx < 10 - iMod10; idx++) { 58 | output += " "; 59 | } 60 | output += `\t${i}\n`; 61 | } 62 | break; 63 | } 64 | //#region inline eliminateDigit(d) 65 | acc -= den * BigInt(d); // mpz_submul_ui(acc, den, d) 66 | acc *= 10n; // mpz_mul_ui(acc, acc, 10) 67 | num *= 10n; // mpz_mul_ui(num, num, 10) 68 | //#endregion inline eliminateDigit(d) 69 | } 70 | return output; 71 | }; 72 | -------------------------------------------------------------------------------- /src/routes/demos/julia-set/+page.svelte: -------------------------------------------------------------------------------- 1 | 3 | 4 | 74 | 75 |

76 | Julia Set 77 |

78 |

79 | This demo executes the Julia Set fractal algorithm on 4 worker threads 80 | simultaneously, creating a total of 4 different images that will be displayed 81 | below on the left. 82 |

83 |

84 | On the right is an interactive canvas that you can draw on while the images 85 | generate (if you can draw on the canvas, the main thread is not being 86 | blocked.) 87 |

88 |
89 |

Click on "Generate Fractals" to get started!

90 | 91 |
94 |
95 |
96 |

Execution Context:

97 |
98 | 111 | 124 |
125 |
126 | 131 |
132 |
133 |

Drawing Canvas

134 |
135 | 136 |
137 |
138 |
139 |
140 | 149 |
150 | 151 | 159 | -------------------------------------------------------------------------------- /src/routes/demos/julia-set/juliaSet.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/ban-ts-comment */ 2 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 3 | 4 | import { workerInit } from "../../../lib/index.js"; 5 | 6 | /** 7 | * @param {number} value 8 | * @param {number} start1 9 | * @param {number} stop1 10 | * @param {number} start2 11 | * @param {number} stop2 12 | */ 13 | function map(value, start1, stop1, start2, stop2) { 14 | return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1)); 15 | } 16 | 17 | class Complex { 18 | /** 19 | * @param {number} real 20 | * @param {number} imaginary 21 | */ 22 | constructor(real, imaginary) { 23 | this.real = real; 24 | this.imaginary = imaginary; 25 | } 26 | /** 27 | * @param {Complex} other 28 | */ 29 | add(other) { 30 | return new Complex(this.real + other.real, this.imaginary + other.imaginary); 31 | } 32 | /** 33 | * @param {Complex} other 34 | */ 35 | multiply(other) { 36 | return new Complex(this.real * other.real - this.imaginary * other.imaginary, this.real * other.imaginary + this.imaginary * other.real); 37 | } 38 | magnitude() { 39 | return Math.sqrt(this.real * this.real + this.imaginary * this.imaginary); 40 | } 41 | } 42 | 43 | const MAX_ITERATIONS = 20000; 44 | const c = new Complex(-0.8, 0.156); // for Julia set 45 | 46 | // Color palette 47 | const palette = [ 48 | [66, 30, 15], 49 | [25, 7, 26], 50 | [9, 1, 47], 51 | [4, 4, 73], 52 | [0, 7, 100], 53 | [12, 44, 138], 54 | [24, 82, 177], 55 | [57, 125, 209], 56 | [134, 181, 229], 57 | [211, 236, 248], 58 | [241, 233, 191], 59 | [248, 201, 95], 60 | [255, 170, 0], 61 | [204, 128, 0], 62 | [153, 87, 0], 63 | [106, 52, 3] 64 | ]; 65 | 66 | /** 67 | * @param {number} width 68 | * @param {number} height 69 | * @param {number} x 70 | * @param {number} y 71 | */ 72 | function juliaSet(width, height, x, y) { 73 | let zx = map(x, 0, width, -1.5, 1.5); 74 | let zy = map(y, 0, height, -1.5, 1.5); 75 | let z = new Complex(zx, zy); 76 | let iterations = 0; 77 | 78 | while (iterations < MAX_ITERATIONS && z.magnitude() < 2.0) { 79 | z = z.multiply(z).add(c); 80 | iterations++; 81 | } 82 | 83 | if (iterations < MAX_ITERATIONS) { 84 | let log_zn = Math.log(z.real * z.real + z.imaginary * z.imaginary) / 2; 85 | let nu = Math.log(log_zn / Math.log(2)) / Math.log(2); 86 | iterations = iterations + 1 - nu; 87 | } 88 | 89 | return iterations; 90 | } 91 | 92 | /** 93 | * @param {number} width 94 | * @param {number} height 95 | */ 96 | export async function generateJuliaSet(width, height) { 97 | const canvas = new OffscreenCanvas(width, height); 98 | const context = canvas.getContext("2d"); 99 | // @ts-ignore 100 | width = ~~width; 101 | // @ts-ignore 102 | height = ~~height; 103 | // @ts-ignore 104 | canvas.width = width; 105 | canvas.height = height; 106 | // @ts-ignore 107 | const imageData = context.createImageData(width, height); 108 | 109 | const data = imageData.data; 110 | for (let y = 0; y < height; y++) { 111 | for (let x = 0; x < width; x++) { 112 | let value = juliaSet(width, height, x, y); 113 | let color = palette[Math.floor(value) % palette.length]; // color from the palette 114 | 115 | let pix = (x + y * width) * 4; 116 | data[pix + 0] = color[0]; 117 | data[pix + 1] = color[1]; 118 | data[pix + 2] = color[2]; 119 | data[pix + 3] = 255; // fully opaque 120 | } 121 | } 122 | 123 | 124 | context?.putImageData(imageData, 0, 0); 125 | return await canvas.convertToBlob(); 126 | } 127 | 128 | // eslint-disable-next-line no-undef 129 | export default workerInit(globalThis, async (/** @type {[width: number, height: number]} args */ ...args ) => await generateJuliaSet(...args)); 130 | 131 | -------------------------------------------------------------------------------- /src/routes/docs/+layout.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 |
6 | 7 |
8 | 9 | 16 |
17 | 18 | 35 | -------------------------------------------------------------------------------- /src/routes/docs/+page.svelte: -------------------------------------------------------------------------------- 1 | 23 | 24 | 25 | {@html ghDark} 26 | 27 | 28 |
29 |

Documentation

30 |
31 |

Installation

32 |
 33 | 			
 34 | 				pnpm add -D svelte-worker-store
 35 | 				npm add -D svelte-worker-store
 36 | 			
 37 | 		
38 |
39 |
40 |
41 |

Concepts

42 |

Stores as Channels

43 |

44 | This library heavily relies on the idea of "stores as channels", which 45 | means that you aren't the source of truth for your data. Rather, 46 | your code directly is. 47 |

48 |
49 |

What does that mean, exactly?

50 |
51 |

52 | Using shorthand $store = 5 doesn't work as you'd expect (this 53 | library uses is as an alias for .send). If you call 54 | store.set(5), the store's value does not explicitly update to 55 | 5 (depending on your handler, of course!) 56 |

57 |
58 |

59 | The benefits for this approach (simplicity, readability, reliability) are 60 | most likely will be more noticable in larger apps that handle a lot of 61 | data, but still want to maintain reactivity. 62 |

63 |

64 | Essentially, it's a multi-producer (.set, 65 | .send) / 66 | single-consumer (the worker) approach. This flow of data reduces 67 | the cognitive overhead of keeping track of how and where your store is 68 | used 69 |

70 | 71 |

Transferable Objects

72 |

TBD

73 |

74 | For more information, please visit the MDN Web Docs 79 |

80 |
81 | 82 |
83 |

Usage

84 |

API

85 |

Channel

86 |

87 | A basic store which updates it's value based on the returned output from 88 | the provided Handler 89 |

90 | { return a + b }, 2); 97 | 98 | await store.send(1, 2) // returns 3 99 | $store // returns 3`} 100 | > 101 | 102 | 103 |
104 | 105 |
106 |
107 |

Vite

108 |

Using a script file

109 |

110 | When using Vite with svelte-worker-store & using file-based Worker scripts 111 | you may encounter a problem that results in your script's imports not 112 | working. 113 |

114 |

Assume we have the following Worker script ./worker.js:

115 | 121 | 122 | 123 |

124 | Trying to import the URL for the script will point to the correct file, 125 | even in production. However it will not run the file through the build 126 | step. 127 |

128 | 133 | 134 | 135 |

136 | This will lead to problems since none of your imports will be transformed 137 | to point to the proper path once built. 138 |

139 |

140 | To fix this, you need to import the URL using &worker?url as the 141 | import query. 142 |

143 | 148 | 149 | 150 |

151 | Importing the script with &worker?url will run the file through 152 | Vite's build step, and the file will now work as expected. 153 |

154 |
155 |
156 | 157 | 193 | -------------------------------------------------------------------------------- /src/routes/docs/+page.ts: -------------------------------------------------------------------------------- 1 | export const ssr = false; 2 | -------------------------------------------------------------------------------- /src/routes/docs/codeblocks.ts: -------------------------------------------------------------------------------- 1 | export const viteExampleCode = [ 2 | ` 3 | // worker.js 4 | import { toUppercase } from '$lib/utils'; 5 | import { workerInit } from 'svelte-worker-store'; 6 | 7 | workerInit(globalThis, (input) => toUppercase(input)); 8 | 9 | export {}; 10 | 11 | `, 12 | ` 13 |