├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── app.d.ts ├── app.html ├── lib │ ├── components │ │ ├── PreloadingIndicator.svelte │ │ ├── Search.svelte │ │ └── SearchResults.svelte │ ├── data.json │ ├── data.ts │ └── types.d.ts └── routes │ ├── +layout.svelte │ ├── +page.svelte │ ├── +page.ts │ ├── api │ ├── movie │ │ └── [id] │ │ │ └── +server.ts │ ├── movies.ts │ ├── random │ │ └── +server.ts │ └── search │ │ └── +server.ts │ ├── movie │ └── [id] │ │ ├── +page.svelte │ │ ├── +page.ts │ │ └── missing.svg │ └── search │ ├── +page.svelte │ └── +page.ts ├── static └── favicon.png ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | .env 7 | .env.* 8 | !.env.example 9 | vite.config.js.timestamp-* 10 | vite.config.ts.timestamp-* 11 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore files for PNPM, NPM and YARN 2 | pnpm-lock.yaml 3 | package-lock.json 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "printWidth": 100, 6 | "plugins": ["prettier-plugin-svelte"], 7 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 8 | } 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [sveltekit-movies-demo.vercel.app](https://sveltekit-movies-demo.vercel.app) 2 | 3 | This is an adaptation of [remix-movies.pages.dev](https://remix-movies.pages.dev/) as requested by Ryan Florence: 4 | 5 | --- 6 | 7 | image 8 | 9 | --- 10 | 11 | It's mostly the same, but has a couple of differences: 12 | 13 | - it's built with [SvelteKit](https://kit.svelte.dev) (I'll let you figure out which app has less code and smaller bundles) 14 | - the CSS is mobile-friendly 15 | - the search works without JavaScript 16 | - the search results have some ranking applied 17 | - the dataset is just a `.json` file, so that it runs anywhere 18 | 19 | ## What does this show? 20 | 21 | Okay, the app is pretty basic. The original was showcasing Remix's brand new `clientLoader` functionality, which allows routes to be populated with data in memory (rather than going back to the server all the time). 22 | 23 | SvelteKit has had this functionality since day one, in the form of [universal (as opposed to server) `load` functions](https://kit.svelte.dev/docs/load#universal-vs-server). The details of the design are slightly different, but the outcome is basically the same — by lazily downloading the entire dataset for the application, it's possible to search and navigate entirely client-side. 24 | 25 | ## Disclaimers and credits 26 | 27 | I built this in about 45 minutes while distracted by other things; I may have missed a couple of minor details. 28 | 29 | Ideally the app would be running on the edge (since the data is just a `.json` file), but the data is large enough that it doesn't fit within the 4MB limit for edge functions on Vercel, where the demo is deployed. If I had longer to spend on it I would fix that, but for now it's being served from us-east-1. 30 | 31 | Credits and thanks to Ryan and the Remix team for the original demo, and for inviting comparisons from other frameworks. 32 | 33 | ## Run it yourself 34 | 35 | Clone the repo, install dependencies (this repo uses [pnpm](https://pnpm.io/) but it should work just fine with npm), and do `npm run dev`. 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "movies", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 11 | "lint": "prettier --check .", 12 | "format": "prettier --write ." 13 | }, 14 | "devDependencies": { 15 | "@sveltejs/adapter-auto": "^3.0.0", 16 | "@sveltejs/adapter-vercel": "^5.1.0", 17 | "@sveltejs/kit": "^2.5.4", 18 | "@sveltejs/vite-plugin-svelte": "^3.0.0", 19 | "prettier": "^3.1.1", 20 | "prettier-plugin-svelte": "^3.1.2", 21 | "svelte": "5.0.0-next.79", 22 | "svelte-check": "^3.6.0", 23 | "tslib": "^2.4.1", 24 | "typescript": "^5.0.0", 25 | "vite": "^5.0.3" 26 | }, 27 | "type": "module" 28 | } 29 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | devDependencies: 8 | '@sveltejs/adapter-auto': 9 | specifier: ^3.0.0 10 | version: 3.1.1(@sveltejs/kit@2.5.4) 11 | '@sveltejs/adapter-vercel': 12 | specifier: ^5.1.0 13 | version: 5.1.0(@sveltejs/kit@2.5.4) 14 | '@sveltejs/kit': 15 | specifier: ^2.5.4 16 | version: 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.79)(vite@5.1.5) 17 | '@sveltejs/vite-plugin-svelte': 18 | specifier: ^3.0.0 19 | version: 3.0.2(svelte@5.0.0-next.79)(vite@5.1.5) 20 | prettier: 21 | specifier: ^3.1.1 22 | version: 3.2.5 23 | prettier-plugin-svelte: 24 | specifier: ^3.1.2 25 | version: 3.2.2(prettier@3.2.5)(svelte@5.0.0-next.79) 26 | svelte: 27 | specifier: 5.0.0-next.79 28 | version: 5.0.0-next.79 29 | svelte-check: 30 | specifier: ^3.6.0 31 | version: 3.6.6(svelte@5.0.0-next.79) 32 | tslib: 33 | specifier: ^2.4.1 34 | version: 2.6.2 35 | typescript: 36 | specifier: ^5.0.0 37 | version: 5.4.2 38 | vite: 39 | specifier: ^5.0.3 40 | version: 5.1.5 41 | 42 | packages: 43 | 44 | /@ampproject/remapping@2.3.0: 45 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 46 | engines: {node: '>=6.0.0'} 47 | dependencies: 48 | '@jridgewell/gen-mapping': 0.3.5 49 | '@jridgewell/trace-mapping': 0.3.25 50 | dev: true 51 | 52 | /@esbuild/aix-ppc64@0.19.12: 53 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 54 | engines: {node: '>=12'} 55 | cpu: [ppc64] 56 | os: [aix] 57 | requiresBuild: true 58 | dev: true 59 | optional: true 60 | 61 | /@esbuild/android-arm64@0.19.12: 62 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 63 | engines: {node: '>=12'} 64 | cpu: [arm64] 65 | os: [android] 66 | requiresBuild: true 67 | dev: true 68 | optional: true 69 | 70 | /@esbuild/android-arm@0.19.12: 71 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 72 | engines: {node: '>=12'} 73 | cpu: [arm] 74 | os: [android] 75 | requiresBuild: true 76 | dev: true 77 | optional: true 78 | 79 | /@esbuild/android-x64@0.19.12: 80 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 81 | engines: {node: '>=12'} 82 | cpu: [x64] 83 | os: [android] 84 | requiresBuild: true 85 | dev: true 86 | optional: true 87 | 88 | /@esbuild/darwin-arm64@0.19.12: 89 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 90 | engines: {node: '>=12'} 91 | cpu: [arm64] 92 | os: [darwin] 93 | requiresBuild: true 94 | dev: true 95 | optional: true 96 | 97 | /@esbuild/darwin-x64@0.19.12: 98 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 99 | engines: {node: '>=12'} 100 | cpu: [x64] 101 | os: [darwin] 102 | requiresBuild: true 103 | dev: true 104 | optional: true 105 | 106 | /@esbuild/freebsd-arm64@0.19.12: 107 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 108 | engines: {node: '>=12'} 109 | cpu: [arm64] 110 | os: [freebsd] 111 | requiresBuild: true 112 | dev: true 113 | optional: true 114 | 115 | /@esbuild/freebsd-x64@0.19.12: 116 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 117 | engines: {node: '>=12'} 118 | cpu: [x64] 119 | os: [freebsd] 120 | requiresBuild: true 121 | dev: true 122 | optional: true 123 | 124 | /@esbuild/linux-arm64@0.19.12: 125 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 126 | engines: {node: '>=12'} 127 | cpu: [arm64] 128 | os: [linux] 129 | requiresBuild: true 130 | dev: true 131 | optional: true 132 | 133 | /@esbuild/linux-arm@0.19.12: 134 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 135 | engines: {node: '>=12'} 136 | cpu: [arm] 137 | os: [linux] 138 | requiresBuild: true 139 | dev: true 140 | optional: true 141 | 142 | /@esbuild/linux-ia32@0.19.12: 143 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 144 | engines: {node: '>=12'} 145 | cpu: [ia32] 146 | os: [linux] 147 | requiresBuild: true 148 | dev: true 149 | optional: true 150 | 151 | /@esbuild/linux-loong64@0.19.12: 152 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 153 | engines: {node: '>=12'} 154 | cpu: [loong64] 155 | os: [linux] 156 | requiresBuild: true 157 | dev: true 158 | optional: true 159 | 160 | /@esbuild/linux-mips64el@0.19.12: 161 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 162 | engines: {node: '>=12'} 163 | cpu: [mips64el] 164 | os: [linux] 165 | requiresBuild: true 166 | dev: true 167 | optional: true 168 | 169 | /@esbuild/linux-ppc64@0.19.12: 170 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 171 | engines: {node: '>=12'} 172 | cpu: [ppc64] 173 | os: [linux] 174 | requiresBuild: true 175 | dev: true 176 | optional: true 177 | 178 | /@esbuild/linux-riscv64@0.19.12: 179 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 180 | engines: {node: '>=12'} 181 | cpu: [riscv64] 182 | os: [linux] 183 | requiresBuild: true 184 | dev: true 185 | optional: true 186 | 187 | /@esbuild/linux-s390x@0.19.12: 188 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 189 | engines: {node: '>=12'} 190 | cpu: [s390x] 191 | os: [linux] 192 | requiresBuild: true 193 | dev: true 194 | optional: true 195 | 196 | /@esbuild/linux-x64@0.19.12: 197 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 198 | engines: {node: '>=12'} 199 | cpu: [x64] 200 | os: [linux] 201 | requiresBuild: true 202 | dev: true 203 | optional: true 204 | 205 | /@esbuild/netbsd-x64@0.19.12: 206 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 207 | engines: {node: '>=12'} 208 | cpu: [x64] 209 | os: [netbsd] 210 | requiresBuild: true 211 | dev: true 212 | optional: true 213 | 214 | /@esbuild/openbsd-x64@0.19.12: 215 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 216 | engines: {node: '>=12'} 217 | cpu: [x64] 218 | os: [openbsd] 219 | requiresBuild: true 220 | dev: true 221 | optional: true 222 | 223 | /@esbuild/sunos-x64@0.19.12: 224 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 225 | engines: {node: '>=12'} 226 | cpu: [x64] 227 | os: [sunos] 228 | requiresBuild: true 229 | dev: true 230 | optional: true 231 | 232 | /@esbuild/win32-arm64@0.19.12: 233 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 234 | engines: {node: '>=12'} 235 | cpu: [arm64] 236 | os: [win32] 237 | requiresBuild: true 238 | dev: true 239 | optional: true 240 | 241 | /@esbuild/win32-ia32@0.19.12: 242 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 243 | engines: {node: '>=12'} 244 | cpu: [ia32] 245 | os: [win32] 246 | requiresBuild: true 247 | dev: true 248 | optional: true 249 | 250 | /@esbuild/win32-x64@0.19.12: 251 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 252 | engines: {node: '>=12'} 253 | cpu: [x64] 254 | os: [win32] 255 | requiresBuild: true 256 | dev: true 257 | optional: true 258 | 259 | /@jridgewell/gen-mapping@0.3.5: 260 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 261 | engines: {node: '>=6.0.0'} 262 | dependencies: 263 | '@jridgewell/set-array': 1.2.1 264 | '@jridgewell/sourcemap-codec': 1.4.15 265 | '@jridgewell/trace-mapping': 0.3.25 266 | dev: true 267 | 268 | /@jridgewell/resolve-uri@3.1.2: 269 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 270 | engines: {node: '>=6.0.0'} 271 | dev: true 272 | 273 | /@jridgewell/set-array@1.2.1: 274 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 275 | engines: {node: '>=6.0.0'} 276 | dev: true 277 | 278 | /@jridgewell/sourcemap-codec@1.4.15: 279 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 280 | dev: true 281 | 282 | /@jridgewell/trace-mapping@0.3.25: 283 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 284 | dependencies: 285 | '@jridgewell/resolve-uri': 3.1.2 286 | '@jridgewell/sourcemap-codec': 1.4.15 287 | dev: true 288 | 289 | /@mapbox/node-pre-gyp@1.0.11: 290 | resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} 291 | hasBin: true 292 | dependencies: 293 | detect-libc: 2.0.2 294 | https-proxy-agent: 5.0.1 295 | make-dir: 3.1.0 296 | node-fetch: 2.7.0 297 | nopt: 5.0.0 298 | npmlog: 5.0.1 299 | rimraf: 3.0.2 300 | semver: 7.6.0 301 | tar: 6.2.0 302 | transitivePeerDependencies: 303 | - encoding 304 | - supports-color 305 | dev: true 306 | 307 | /@nodelib/fs.scandir@2.1.5: 308 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 309 | engines: {node: '>= 8'} 310 | dependencies: 311 | '@nodelib/fs.stat': 2.0.5 312 | run-parallel: 1.2.0 313 | dev: true 314 | 315 | /@nodelib/fs.stat@2.0.5: 316 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 317 | engines: {node: '>= 8'} 318 | dev: true 319 | 320 | /@nodelib/fs.walk@1.2.8: 321 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 322 | engines: {node: '>= 8'} 323 | dependencies: 324 | '@nodelib/fs.scandir': 2.1.5 325 | fastq: 1.17.1 326 | dev: true 327 | 328 | /@polka/url@1.0.0-next.25: 329 | resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} 330 | dev: true 331 | 332 | /@rollup/pluginutils@4.2.1: 333 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 334 | engines: {node: '>= 8.0.0'} 335 | dependencies: 336 | estree-walker: 2.0.2 337 | picomatch: 2.3.1 338 | dev: true 339 | 340 | /@rollup/rollup-android-arm-eabi@4.12.1: 341 | resolution: {integrity: sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==} 342 | cpu: [arm] 343 | os: [android] 344 | requiresBuild: true 345 | dev: true 346 | optional: true 347 | 348 | /@rollup/rollup-android-arm64@4.12.1: 349 | resolution: {integrity: sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==} 350 | cpu: [arm64] 351 | os: [android] 352 | requiresBuild: true 353 | dev: true 354 | optional: true 355 | 356 | /@rollup/rollup-darwin-arm64@4.12.1: 357 | resolution: {integrity: sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==} 358 | cpu: [arm64] 359 | os: [darwin] 360 | requiresBuild: true 361 | dev: true 362 | optional: true 363 | 364 | /@rollup/rollup-darwin-x64@4.12.1: 365 | resolution: {integrity: sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==} 366 | cpu: [x64] 367 | os: [darwin] 368 | requiresBuild: true 369 | dev: true 370 | optional: true 371 | 372 | /@rollup/rollup-linux-arm-gnueabihf@4.12.1: 373 | resolution: {integrity: sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==} 374 | cpu: [arm] 375 | os: [linux] 376 | requiresBuild: true 377 | dev: true 378 | optional: true 379 | 380 | /@rollup/rollup-linux-arm64-gnu@4.12.1: 381 | resolution: {integrity: sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==} 382 | cpu: [arm64] 383 | os: [linux] 384 | requiresBuild: true 385 | dev: true 386 | optional: true 387 | 388 | /@rollup/rollup-linux-arm64-musl@4.12.1: 389 | resolution: {integrity: sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==} 390 | cpu: [arm64] 391 | os: [linux] 392 | requiresBuild: true 393 | dev: true 394 | optional: true 395 | 396 | /@rollup/rollup-linux-riscv64-gnu@4.12.1: 397 | resolution: {integrity: sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==} 398 | cpu: [riscv64] 399 | os: [linux] 400 | requiresBuild: true 401 | dev: true 402 | optional: true 403 | 404 | /@rollup/rollup-linux-x64-gnu@4.12.1: 405 | resolution: {integrity: sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==} 406 | cpu: [x64] 407 | os: [linux] 408 | requiresBuild: true 409 | dev: true 410 | optional: true 411 | 412 | /@rollup/rollup-linux-x64-musl@4.12.1: 413 | resolution: {integrity: sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==} 414 | cpu: [x64] 415 | os: [linux] 416 | requiresBuild: true 417 | dev: true 418 | optional: true 419 | 420 | /@rollup/rollup-win32-arm64-msvc@4.12.1: 421 | resolution: {integrity: sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==} 422 | cpu: [arm64] 423 | os: [win32] 424 | requiresBuild: true 425 | dev: true 426 | optional: true 427 | 428 | /@rollup/rollup-win32-ia32-msvc@4.12.1: 429 | resolution: {integrity: sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==} 430 | cpu: [ia32] 431 | os: [win32] 432 | requiresBuild: true 433 | dev: true 434 | optional: true 435 | 436 | /@rollup/rollup-win32-x64-msvc@4.12.1: 437 | resolution: {integrity: sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==} 438 | cpu: [x64] 439 | os: [win32] 440 | requiresBuild: true 441 | dev: true 442 | optional: true 443 | 444 | /@sveltejs/adapter-auto@3.1.1(@sveltejs/kit@2.5.4): 445 | resolution: {integrity: sha512-6LeZft2Fo/4HfmLBi5CucMYmgRxgcETweQl/yQoZo/895K3S9YWYN4Sfm/IhwlIpbJp3QNvhKmwCHbsqQNYQpw==} 446 | peerDependencies: 447 | '@sveltejs/kit': ^2.0.0 448 | dependencies: 449 | '@sveltejs/kit': 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.79)(vite@5.1.5) 450 | import-meta-resolve: 4.0.0 451 | dev: true 452 | 453 | /@sveltejs/adapter-vercel@5.1.0(@sveltejs/kit@2.5.4): 454 | resolution: {integrity: sha512-Z9yRJ4H2/7LcBlvN2/TKu1H0hWoRGonr8kPhP1GJ23LRW76IbiiX5gs/MLc6+ZGogCZYVJ4USmx6m+RFtvQTRw==} 455 | peerDependencies: 456 | '@sveltejs/kit': ^2.4.0 457 | dependencies: 458 | '@sveltejs/kit': 2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.79)(vite@5.1.5) 459 | '@vercel/nft': 0.26.4 460 | esbuild: 0.19.12 461 | transitivePeerDependencies: 462 | - encoding 463 | - supports-color 464 | dev: true 465 | 466 | /@sveltejs/kit@2.5.4(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.79)(vite@5.1.5): 467 | resolution: {integrity: sha512-eDxK2d4EGzk99QsZNoPXe7jlzA5EGqfcCpUwZ912bhnalsZ2ZsG5wGRthkydupVjYyqdmzEanVKFhLxU2vkPSQ==} 468 | engines: {node: '>=18.13'} 469 | hasBin: true 470 | requiresBuild: true 471 | peerDependencies: 472 | '@sveltejs/vite-plugin-svelte': ^3.0.0 473 | svelte: ^4.0.0 || ^5.0.0-next.0 474 | vite: ^5.0.3 475 | dependencies: 476 | '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.79)(vite@5.1.5) 477 | '@types/cookie': 0.6.0 478 | cookie: 0.6.0 479 | devalue: 4.3.2 480 | esm-env: 1.0.0 481 | import-meta-resolve: 4.0.0 482 | kleur: 4.1.5 483 | magic-string: 0.30.8 484 | mrmime: 2.0.0 485 | sade: 1.8.1 486 | set-cookie-parser: 2.6.0 487 | sirv: 2.0.4 488 | svelte: 5.0.0-next.79 489 | tiny-glob: 0.2.9 490 | vite: 5.1.5 491 | dev: true 492 | 493 | /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.79)(vite@5.1.5): 494 | resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} 495 | engines: {node: ^18.0.0 || >=20} 496 | peerDependencies: 497 | '@sveltejs/vite-plugin-svelte': ^3.0.0 498 | svelte: ^4.0.0 || ^5.0.0-next.0 499 | vite: ^5.0.0 500 | dependencies: 501 | '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@5.0.0-next.79)(vite@5.1.5) 502 | debug: 4.3.4 503 | svelte: 5.0.0-next.79 504 | vite: 5.1.5 505 | transitivePeerDependencies: 506 | - supports-color 507 | dev: true 508 | 509 | /@sveltejs/vite-plugin-svelte@3.0.2(svelte@5.0.0-next.79)(vite@5.1.5): 510 | resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==} 511 | engines: {node: ^18.0.0 || >=20} 512 | peerDependencies: 513 | svelte: ^4.0.0 || ^5.0.0-next.0 514 | vite: ^5.0.0 515 | dependencies: 516 | '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@5.0.0-next.79)(vite@5.1.5) 517 | debug: 4.3.4 518 | deepmerge: 4.3.1 519 | kleur: 4.1.5 520 | magic-string: 0.30.8 521 | svelte: 5.0.0-next.79 522 | svelte-hmr: 0.15.3(svelte@5.0.0-next.79) 523 | vite: 5.1.5 524 | vitefu: 0.2.5(vite@5.1.5) 525 | transitivePeerDependencies: 526 | - supports-color 527 | dev: true 528 | 529 | /@types/cookie@0.6.0: 530 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 531 | dev: true 532 | 533 | /@types/estree@1.0.5: 534 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 535 | dev: true 536 | 537 | /@types/pug@2.0.10: 538 | resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} 539 | dev: true 540 | 541 | /@vercel/nft@0.26.4: 542 | resolution: {integrity: sha512-j4jCOOXke2t8cHZCIxu1dzKLHLcFmYzC3yqAK6MfZznOL1QIJKd0xcFsXK3zcqzU7ScsE2zWkiMMNHGMHgp+FA==} 543 | engines: {node: '>=16'} 544 | hasBin: true 545 | dependencies: 546 | '@mapbox/node-pre-gyp': 1.0.11 547 | '@rollup/pluginutils': 4.2.1 548 | acorn: 8.11.3 549 | acorn-import-attributes: 1.9.2(acorn@8.11.3) 550 | async-sema: 3.1.1 551 | bindings: 1.5.0 552 | estree-walker: 2.0.2 553 | glob: 7.2.3 554 | graceful-fs: 4.2.11 555 | micromatch: 4.0.5 556 | node-gyp-build: 4.8.0 557 | resolve-from: 5.0.0 558 | transitivePeerDependencies: 559 | - encoding 560 | - supports-color 561 | dev: true 562 | 563 | /abbrev@1.1.1: 564 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 565 | dev: true 566 | 567 | /acorn-import-attributes@1.9.2(acorn@8.11.3): 568 | resolution: {integrity: sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==} 569 | peerDependencies: 570 | acorn: ^8 571 | dependencies: 572 | acorn: 8.11.3 573 | dev: true 574 | 575 | /acorn-typescript@1.4.13(acorn@8.11.3): 576 | resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==} 577 | peerDependencies: 578 | acorn: '>=8.9.0' 579 | dependencies: 580 | acorn: 8.11.3 581 | dev: true 582 | 583 | /acorn@8.11.3: 584 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 585 | engines: {node: '>=0.4.0'} 586 | hasBin: true 587 | dev: true 588 | 589 | /agent-base@6.0.2: 590 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 591 | engines: {node: '>= 6.0.0'} 592 | dependencies: 593 | debug: 4.3.4 594 | transitivePeerDependencies: 595 | - supports-color 596 | dev: true 597 | 598 | /ansi-regex@5.0.1: 599 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 600 | engines: {node: '>=8'} 601 | dev: true 602 | 603 | /anymatch@3.1.3: 604 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 605 | engines: {node: '>= 8'} 606 | dependencies: 607 | normalize-path: 3.0.0 608 | picomatch: 2.3.1 609 | dev: true 610 | 611 | /aproba@2.0.0: 612 | resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} 613 | dev: true 614 | 615 | /are-we-there-yet@2.0.0: 616 | resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} 617 | engines: {node: '>=10'} 618 | dependencies: 619 | delegates: 1.0.0 620 | readable-stream: 3.6.2 621 | dev: true 622 | 623 | /aria-query@5.3.0: 624 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 625 | dependencies: 626 | dequal: 2.0.3 627 | dev: true 628 | 629 | /async-sema@3.1.1: 630 | resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} 631 | dev: true 632 | 633 | /axobject-query@4.0.0: 634 | resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} 635 | dependencies: 636 | dequal: 2.0.3 637 | dev: true 638 | 639 | /balanced-match@1.0.2: 640 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 641 | dev: true 642 | 643 | /binary-extensions@2.2.0: 644 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 645 | engines: {node: '>=8'} 646 | dev: true 647 | 648 | /bindings@1.5.0: 649 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 650 | dependencies: 651 | file-uri-to-path: 1.0.0 652 | dev: true 653 | 654 | /brace-expansion@1.1.11: 655 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 656 | dependencies: 657 | balanced-match: 1.0.2 658 | concat-map: 0.0.1 659 | dev: true 660 | 661 | /braces@3.0.2: 662 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 663 | engines: {node: '>=8'} 664 | dependencies: 665 | fill-range: 7.0.1 666 | dev: true 667 | 668 | /buffer-crc32@0.2.13: 669 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 670 | dev: true 671 | 672 | /callsites@3.1.0: 673 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 674 | engines: {node: '>=6'} 675 | dev: true 676 | 677 | /chokidar@3.6.0: 678 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 679 | engines: {node: '>= 8.10.0'} 680 | dependencies: 681 | anymatch: 3.1.3 682 | braces: 3.0.2 683 | glob-parent: 5.1.2 684 | is-binary-path: 2.1.0 685 | is-glob: 4.0.3 686 | normalize-path: 3.0.0 687 | readdirp: 3.6.0 688 | optionalDependencies: 689 | fsevents: 2.3.3 690 | dev: true 691 | 692 | /chownr@2.0.0: 693 | resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} 694 | engines: {node: '>=10'} 695 | dev: true 696 | 697 | /color-support@1.1.3: 698 | resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} 699 | hasBin: true 700 | dev: true 701 | 702 | /concat-map@0.0.1: 703 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 704 | dev: true 705 | 706 | /console-control-strings@1.1.0: 707 | resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} 708 | dev: true 709 | 710 | /cookie@0.6.0: 711 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 712 | engines: {node: '>= 0.6'} 713 | dev: true 714 | 715 | /debug@4.3.4: 716 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 717 | engines: {node: '>=6.0'} 718 | peerDependencies: 719 | supports-color: '*' 720 | peerDependenciesMeta: 721 | supports-color: 722 | optional: true 723 | dependencies: 724 | ms: 2.1.2 725 | dev: true 726 | 727 | /deepmerge@4.3.1: 728 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 729 | engines: {node: '>=0.10.0'} 730 | dev: true 731 | 732 | /delegates@1.0.0: 733 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 734 | dev: true 735 | 736 | /dequal@2.0.3: 737 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 738 | engines: {node: '>=6'} 739 | dev: true 740 | 741 | /detect-indent@6.1.0: 742 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 743 | engines: {node: '>=8'} 744 | dev: true 745 | 746 | /detect-libc@2.0.2: 747 | resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} 748 | engines: {node: '>=8'} 749 | dev: true 750 | 751 | /devalue@4.3.2: 752 | resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} 753 | dev: true 754 | 755 | /emoji-regex@8.0.0: 756 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 757 | dev: true 758 | 759 | /es6-promise@3.3.1: 760 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 761 | dev: true 762 | 763 | /esbuild@0.19.12: 764 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 765 | engines: {node: '>=12'} 766 | hasBin: true 767 | requiresBuild: true 768 | optionalDependencies: 769 | '@esbuild/aix-ppc64': 0.19.12 770 | '@esbuild/android-arm': 0.19.12 771 | '@esbuild/android-arm64': 0.19.12 772 | '@esbuild/android-x64': 0.19.12 773 | '@esbuild/darwin-arm64': 0.19.12 774 | '@esbuild/darwin-x64': 0.19.12 775 | '@esbuild/freebsd-arm64': 0.19.12 776 | '@esbuild/freebsd-x64': 0.19.12 777 | '@esbuild/linux-arm': 0.19.12 778 | '@esbuild/linux-arm64': 0.19.12 779 | '@esbuild/linux-ia32': 0.19.12 780 | '@esbuild/linux-loong64': 0.19.12 781 | '@esbuild/linux-mips64el': 0.19.12 782 | '@esbuild/linux-ppc64': 0.19.12 783 | '@esbuild/linux-riscv64': 0.19.12 784 | '@esbuild/linux-s390x': 0.19.12 785 | '@esbuild/linux-x64': 0.19.12 786 | '@esbuild/netbsd-x64': 0.19.12 787 | '@esbuild/openbsd-x64': 0.19.12 788 | '@esbuild/sunos-x64': 0.19.12 789 | '@esbuild/win32-arm64': 0.19.12 790 | '@esbuild/win32-ia32': 0.19.12 791 | '@esbuild/win32-x64': 0.19.12 792 | dev: true 793 | 794 | /esm-env@1.0.0: 795 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 796 | dev: true 797 | 798 | /esrap@1.2.1: 799 | resolution: {integrity: sha512-dhkcOLfN/aDdMFI1iwPEcy/XqAZzGNfgfEJjZozy2tia6u0dQoZyXzkRshHTckuNsM+c0CYQndY+uRFe3N+AIQ==} 800 | dependencies: 801 | '@jridgewell/sourcemap-codec': 1.4.15 802 | '@types/estree': 1.0.5 803 | dev: true 804 | 805 | /estree-walker@2.0.2: 806 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 807 | dev: true 808 | 809 | /fast-glob@3.3.2: 810 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 811 | engines: {node: '>=8.6.0'} 812 | dependencies: 813 | '@nodelib/fs.stat': 2.0.5 814 | '@nodelib/fs.walk': 1.2.8 815 | glob-parent: 5.1.2 816 | merge2: 1.4.1 817 | micromatch: 4.0.5 818 | dev: true 819 | 820 | /fastq@1.17.1: 821 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 822 | dependencies: 823 | reusify: 1.0.4 824 | dev: true 825 | 826 | /file-uri-to-path@1.0.0: 827 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 828 | dev: true 829 | 830 | /fill-range@7.0.1: 831 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 832 | engines: {node: '>=8'} 833 | dependencies: 834 | to-regex-range: 5.0.1 835 | dev: true 836 | 837 | /fs-minipass@2.1.0: 838 | resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} 839 | engines: {node: '>= 8'} 840 | dependencies: 841 | minipass: 3.3.6 842 | dev: true 843 | 844 | /fs.realpath@1.0.0: 845 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 846 | dev: true 847 | 848 | /fsevents@2.3.3: 849 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 850 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 851 | os: [darwin] 852 | requiresBuild: true 853 | dev: true 854 | optional: true 855 | 856 | /gauge@3.0.2: 857 | resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} 858 | engines: {node: '>=10'} 859 | dependencies: 860 | aproba: 2.0.0 861 | color-support: 1.1.3 862 | console-control-strings: 1.1.0 863 | has-unicode: 2.0.1 864 | object-assign: 4.1.1 865 | signal-exit: 3.0.7 866 | string-width: 4.2.3 867 | strip-ansi: 6.0.1 868 | wide-align: 1.1.5 869 | dev: true 870 | 871 | /glob-parent@5.1.2: 872 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 873 | engines: {node: '>= 6'} 874 | dependencies: 875 | is-glob: 4.0.3 876 | dev: true 877 | 878 | /glob@7.2.3: 879 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 880 | dependencies: 881 | fs.realpath: 1.0.0 882 | inflight: 1.0.6 883 | inherits: 2.0.4 884 | minimatch: 3.1.2 885 | once: 1.4.0 886 | path-is-absolute: 1.0.1 887 | dev: true 888 | 889 | /globalyzer@0.1.0: 890 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 891 | dev: true 892 | 893 | /globrex@0.1.2: 894 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 895 | dev: true 896 | 897 | /graceful-fs@4.2.11: 898 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 899 | dev: true 900 | 901 | /has-unicode@2.0.1: 902 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 903 | dev: true 904 | 905 | /https-proxy-agent@5.0.1: 906 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 907 | engines: {node: '>= 6'} 908 | dependencies: 909 | agent-base: 6.0.2 910 | debug: 4.3.4 911 | transitivePeerDependencies: 912 | - supports-color 913 | dev: true 914 | 915 | /import-fresh@3.3.0: 916 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 917 | engines: {node: '>=6'} 918 | dependencies: 919 | parent-module: 1.0.1 920 | resolve-from: 4.0.0 921 | dev: true 922 | 923 | /import-meta-resolve@4.0.0: 924 | resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} 925 | dev: true 926 | 927 | /inflight@1.0.6: 928 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 929 | dependencies: 930 | once: 1.4.0 931 | wrappy: 1.0.2 932 | dev: true 933 | 934 | /inherits@2.0.4: 935 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 936 | dev: true 937 | 938 | /is-binary-path@2.1.0: 939 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 940 | engines: {node: '>=8'} 941 | dependencies: 942 | binary-extensions: 2.2.0 943 | dev: true 944 | 945 | /is-extglob@2.1.1: 946 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 947 | engines: {node: '>=0.10.0'} 948 | dev: true 949 | 950 | /is-fullwidth-code-point@3.0.0: 951 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 952 | engines: {node: '>=8'} 953 | dev: true 954 | 955 | /is-glob@4.0.3: 956 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 957 | engines: {node: '>=0.10.0'} 958 | dependencies: 959 | is-extglob: 2.1.1 960 | dev: true 961 | 962 | /is-number@7.0.0: 963 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 964 | engines: {node: '>=0.12.0'} 965 | dev: true 966 | 967 | /is-reference@3.0.2: 968 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} 969 | dependencies: 970 | '@types/estree': 1.0.5 971 | dev: true 972 | 973 | /kleur@4.1.5: 974 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 975 | engines: {node: '>=6'} 976 | dev: true 977 | 978 | /locate-character@3.0.0: 979 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 980 | dev: true 981 | 982 | /lru-cache@6.0.0: 983 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 984 | engines: {node: '>=10'} 985 | dependencies: 986 | yallist: 4.0.0 987 | dev: true 988 | 989 | /magic-string@0.30.8: 990 | resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} 991 | engines: {node: '>=12'} 992 | dependencies: 993 | '@jridgewell/sourcemap-codec': 1.4.15 994 | dev: true 995 | 996 | /make-dir@3.1.0: 997 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 998 | engines: {node: '>=8'} 999 | dependencies: 1000 | semver: 6.3.1 1001 | dev: true 1002 | 1003 | /merge2@1.4.1: 1004 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1005 | engines: {node: '>= 8'} 1006 | dev: true 1007 | 1008 | /micromatch@4.0.5: 1009 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1010 | engines: {node: '>=8.6'} 1011 | dependencies: 1012 | braces: 3.0.2 1013 | picomatch: 2.3.1 1014 | dev: true 1015 | 1016 | /min-indent@1.0.1: 1017 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1018 | engines: {node: '>=4'} 1019 | dev: true 1020 | 1021 | /minimatch@3.1.2: 1022 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1023 | dependencies: 1024 | brace-expansion: 1.1.11 1025 | dev: true 1026 | 1027 | /minimist@1.2.8: 1028 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1029 | dev: true 1030 | 1031 | /minipass@3.3.6: 1032 | resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} 1033 | engines: {node: '>=8'} 1034 | dependencies: 1035 | yallist: 4.0.0 1036 | dev: true 1037 | 1038 | /minipass@5.0.0: 1039 | resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} 1040 | engines: {node: '>=8'} 1041 | dev: true 1042 | 1043 | /minizlib@2.1.2: 1044 | resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} 1045 | engines: {node: '>= 8'} 1046 | dependencies: 1047 | minipass: 3.3.6 1048 | yallist: 4.0.0 1049 | dev: true 1050 | 1051 | /mkdirp@0.5.6: 1052 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 1053 | hasBin: true 1054 | dependencies: 1055 | minimist: 1.2.8 1056 | dev: true 1057 | 1058 | /mkdirp@1.0.4: 1059 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 1060 | engines: {node: '>=10'} 1061 | hasBin: true 1062 | dev: true 1063 | 1064 | /mri@1.2.0: 1065 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1066 | engines: {node: '>=4'} 1067 | dev: true 1068 | 1069 | /mrmime@2.0.0: 1070 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 1071 | engines: {node: '>=10'} 1072 | dev: true 1073 | 1074 | /ms@2.1.2: 1075 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1076 | dev: true 1077 | 1078 | /nanoid@3.3.7: 1079 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1080 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1081 | hasBin: true 1082 | dev: true 1083 | 1084 | /node-fetch@2.7.0: 1085 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1086 | engines: {node: 4.x || >=6.0.0} 1087 | peerDependencies: 1088 | encoding: ^0.1.0 1089 | peerDependenciesMeta: 1090 | encoding: 1091 | optional: true 1092 | dependencies: 1093 | whatwg-url: 5.0.0 1094 | dev: true 1095 | 1096 | /node-gyp-build@4.8.0: 1097 | resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} 1098 | hasBin: true 1099 | dev: true 1100 | 1101 | /nopt@5.0.0: 1102 | resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} 1103 | engines: {node: '>=6'} 1104 | hasBin: true 1105 | dependencies: 1106 | abbrev: 1.1.1 1107 | dev: true 1108 | 1109 | /normalize-path@3.0.0: 1110 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1111 | engines: {node: '>=0.10.0'} 1112 | dev: true 1113 | 1114 | /npmlog@5.0.1: 1115 | resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} 1116 | dependencies: 1117 | are-we-there-yet: 2.0.0 1118 | console-control-strings: 1.1.0 1119 | gauge: 3.0.2 1120 | set-blocking: 2.0.0 1121 | dev: true 1122 | 1123 | /object-assign@4.1.1: 1124 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1125 | engines: {node: '>=0.10.0'} 1126 | dev: true 1127 | 1128 | /once@1.4.0: 1129 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1130 | dependencies: 1131 | wrappy: 1.0.2 1132 | dev: true 1133 | 1134 | /parent-module@1.0.1: 1135 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1136 | engines: {node: '>=6'} 1137 | dependencies: 1138 | callsites: 3.1.0 1139 | dev: true 1140 | 1141 | /path-is-absolute@1.0.1: 1142 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1143 | engines: {node: '>=0.10.0'} 1144 | dev: true 1145 | 1146 | /picocolors@1.0.0: 1147 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1148 | dev: true 1149 | 1150 | /picomatch@2.3.1: 1151 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1152 | engines: {node: '>=8.6'} 1153 | dev: true 1154 | 1155 | /postcss@8.4.35: 1156 | resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} 1157 | engines: {node: ^10 || ^12 || >=14} 1158 | dependencies: 1159 | nanoid: 3.3.7 1160 | picocolors: 1.0.0 1161 | source-map-js: 1.0.2 1162 | dev: true 1163 | 1164 | /prettier-plugin-svelte@3.2.2(prettier@3.2.5)(svelte@5.0.0-next.79): 1165 | resolution: {integrity: sha512-ZzzE/wMuf48/1+Lf2Ffko0uDa6pyCfgHV6+uAhtg2U0AAXGrhCSW88vEJNAkAxW5qyrFY1y1zZ4J8TgHrjW++Q==} 1166 | peerDependencies: 1167 | prettier: ^3.0.0 1168 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 1169 | dependencies: 1170 | prettier: 3.2.5 1171 | svelte: 5.0.0-next.79 1172 | dev: true 1173 | 1174 | /prettier@3.2.5: 1175 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 1176 | engines: {node: '>=14'} 1177 | hasBin: true 1178 | dev: true 1179 | 1180 | /queue-microtask@1.2.3: 1181 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1182 | dev: true 1183 | 1184 | /readable-stream@3.6.2: 1185 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1186 | engines: {node: '>= 6'} 1187 | dependencies: 1188 | inherits: 2.0.4 1189 | string_decoder: 1.3.0 1190 | util-deprecate: 1.0.2 1191 | dev: true 1192 | 1193 | /readdirp@3.6.0: 1194 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1195 | engines: {node: '>=8.10.0'} 1196 | dependencies: 1197 | picomatch: 2.3.1 1198 | dev: true 1199 | 1200 | /resolve-from@4.0.0: 1201 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1202 | engines: {node: '>=4'} 1203 | dev: true 1204 | 1205 | /resolve-from@5.0.0: 1206 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1207 | engines: {node: '>=8'} 1208 | dev: true 1209 | 1210 | /reusify@1.0.4: 1211 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1212 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1213 | dev: true 1214 | 1215 | /rimraf@2.7.1: 1216 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 1217 | hasBin: true 1218 | dependencies: 1219 | glob: 7.2.3 1220 | dev: true 1221 | 1222 | /rimraf@3.0.2: 1223 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1224 | hasBin: true 1225 | dependencies: 1226 | glob: 7.2.3 1227 | dev: true 1228 | 1229 | /rollup@4.12.1: 1230 | resolution: {integrity: sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==} 1231 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1232 | hasBin: true 1233 | dependencies: 1234 | '@types/estree': 1.0.5 1235 | optionalDependencies: 1236 | '@rollup/rollup-android-arm-eabi': 4.12.1 1237 | '@rollup/rollup-android-arm64': 4.12.1 1238 | '@rollup/rollup-darwin-arm64': 4.12.1 1239 | '@rollup/rollup-darwin-x64': 4.12.1 1240 | '@rollup/rollup-linux-arm-gnueabihf': 4.12.1 1241 | '@rollup/rollup-linux-arm64-gnu': 4.12.1 1242 | '@rollup/rollup-linux-arm64-musl': 4.12.1 1243 | '@rollup/rollup-linux-riscv64-gnu': 4.12.1 1244 | '@rollup/rollup-linux-x64-gnu': 4.12.1 1245 | '@rollup/rollup-linux-x64-musl': 4.12.1 1246 | '@rollup/rollup-win32-arm64-msvc': 4.12.1 1247 | '@rollup/rollup-win32-ia32-msvc': 4.12.1 1248 | '@rollup/rollup-win32-x64-msvc': 4.12.1 1249 | fsevents: 2.3.3 1250 | dev: true 1251 | 1252 | /run-parallel@1.2.0: 1253 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1254 | dependencies: 1255 | queue-microtask: 1.2.3 1256 | dev: true 1257 | 1258 | /sade@1.8.1: 1259 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1260 | engines: {node: '>=6'} 1261 | dependencies: 1262 | mri: 1.2.0 1263 | dev: true 1264 | 1265 | /safe-buffer@5.2.1: 1266 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1267 | dev: true 1268 | 1269 | /sander@0.5.1: 1270 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 1271 | dependencies: 1272 | es6-promise: 3.3.1 1273 | graceful-fs: 4.2.11 1274 | mkdirp: 0.5.6 1275 | rimraf: 2.7.1 1276 | dev: true 1277 | 1278 | /semver@6.3.1: 1279 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1280 | hasBin: true 1281 | dev: true 1282 | 1283 | /semver@7.6.0: 1284 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 1285 | engines: {node: '>=10'} 1286 | hasBin: true 1287 | dependencies: 1288 | lru-cache: 6.0.0 1289 | dev: true 1290 | 1291 | /set-blocking@2.0.0: 1292 | resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} 1293 | dev: true 1294 | 1295 | /set-cookie-parser@2.6.0: 1296 | resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} 1297 | dev: true 1298 | 1299 | /signal-exit@3.0.7: 1300 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1301 | dev: true 1302 | 1303 | /sirv@2.0.4: 1304 | resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} 1305 | engines: {node: '>= 10'} 1306 | dependencies: 1307 | '@polka/url': 1.0.0-next.25 1308 | mrmime: 2.0.0 1309 | totalist: 3.0.1 1310 | dev: true 1311 | 1312 | /sorcery@0.11.0: 1313 | resolution: {integrity: sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==} 1314 | hasBin: true 1315 | dependencies: 1316 | '@jridgewell/sourcemap-codec': 1.4.15 1317 | buffer-crc32: 0.2.13 1318 | minimist: 1.2.8 1319 | sander: 0.5.1 1320 | dev: true 1321 | 1322 | /source-map-js@1.0.2: 1323 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1324 | engines: {node: '>=0.10.0'} 1325 | dev: true 1326 | 1327 | /string-width@4.2.3: 1328 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1329 | engines: {node: '>=8'} 1330 | dependencies: 1331 | emoji-regex: 8.0.0 1332 | is-fullwidth-code-point: 3.0.0 1333 | strip-ansi: 6.0.1 1334 | dev: true 1335 | 1336 | /string_decoder@1.3.0: 1337 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1338 | dependencies: 1339 | safe-buffer: 5.2.1 1340 | dev: true 1341 | 1342 | /strip-ansi@6.0.1: 1343 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1344 | engines: {node: '>=8'} 1345 | dependencies: 1346 | ansi-regex: 5.0.1 1347 | dev: true 1348 | 1349 | /strip-indent@3.0.0: 1350 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1351 | engines: {node: '>=8'} 1352 | dependencies: 1353 | min-indent: 1.0.1 1354 | dev: true 1355 | 1356 | /svelte-check@3.6.6(svelte@5.0.0-next.79): 1357 | resolution: {integrity: sha512-b9q9rOHOMYF3U8XllK7LmXTq1LeWQ98waGfEJzrFutViadkNl1tgdEtxIQ8yuPx+VQ4l7YrknYol+0lfZocaZw==} 1358 | hasBin: true 1359 | peerDependencies: 1360 | svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 1361 | dependencies: 1362 | '@jridgewell/trace-mapping': 0.3.25 1363 | chokidar: 3.6.0 1364 | fast-glob: 3.3.2 1365 | import-fresh: 3.3.0 1366 | picocolors: 1.0.0 1367 | sade: 1.8.1 1368 | svelte: 5.0.0-next.79 1369 | svelte-preprocess: 5.1.3(svelte@5.0.0-next.79)(typescript@5.4.2) 1370 | typescript: 5.4.2 1371 | transitivePeerDependencies: 1372 | - '@babel/core' 1373 | - coffeescript 1374 | - less 1375 | - postcss 1376 | - postcss-load-config 1377 | - pug 1378 | - sass 1379 | - stylus 1380 | - sugarss 1381 | dev: true 1382 | 1383 | /svelte-hmr@0.15.3(svelte@5.0.0-next.79): 1384 | resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} 1385 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 1386 | peerDependencies: 1387 | svelte: ^3.19.0 || ^4.0.0 1388 | dependencies: 1389 | svelte: 5.0.0-next.79 1390 | dev: true 1391 | 1392 | /svelte-preprocess@5.1.3(svelte@5.0.0-next.79)(typescript@5.4.2): 1393 | resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} 1394 | engines: {node: '>= 16.0.0', pnpm: ^8.0.0} 1395 | requiresBuild: true 1396 | peerDependencies: 1397 | '@babel/core': ^7.10.2 1398 | coffeescript: ^2.5.1 1399 | less: ^3.11.3 || ^4.0.0 1400 | postcss: ^7 || ^8 1401 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 1402 | pug: ^3.0.0 1403 | sass: ^1.26.8 1404 | stylus: ^0.55.0 1405 | sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 1406 | svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 1407 | typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' 1408 | peerDependenciesMeta: 1409 | '@babel/core': 1410 | optional: true 1411 | coffeescript: 1412 | optional: true 1413 | less: 1414 | optional: true 1415 | postcss: 1416 | optional: true 1417 | postcss-load-config: 1418 | optional: true 1419 | pug: 1420 | optional: true 1421 | sass: 1422 | optional: true 1423 | stylus: 1424 | optional: true 1425 | sugarss: 1426 | optional: true 1427 | typescript: 1428 | optional: true 1429 | dependencies: 1430 | '@types/pug': 2.0.10 1431 | detect-indent: 6.1.0 1432 | magic-string: 0.30.8 1433 | sorcery: 0.11.0 1434 | strip-indent: 3.0.0 1435 | svelte: 5.0.0-next.79 1436 | typescript: 5.4.2 1437 | dev: true 1438 | 1439 | /svelte@5.0.0-next.79: 1440 | resolution: {integrity: sha512-1yxAVTuzP/PcYROS0KfbsYbev5f7ubA/3PX27gNCYC4JmlWDVsFID5saHCgn082195OAPkBy39bu+z4R6n8n4w==} 1441 | engines: {node: '>=18'} 1442 | dependencies: 1443 | '@ampproject/remapping': 2.3.0 1444 | '@jridgewell/sourcemap-codec': 1.4.15 1445 | '@types/estree': 1.0.5 1446 | acorn: 8.11.3 1447 | acorn-typescript: 1.4.13(acorn@8.11.3) 1448 | aria-query: 5.3.0 1449 | axobject-query: 4.0.0 1450 | esm-env: 1.0.0 1451 | esrap: 1.2.1 1452 | is-reference: 3.0.2 1453 | locate-character: 3.0.0 1454 | magic-string: 0.30.8 1455 | zimmerframe: 1.1.2 1456 | dev: true 1457 | 1458 | /tar@6.2.0: 1459 | resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} 1460 | engines: {node: '>=10'} 1461 | dependencies: 1462 | chownr: 2.0.0 1463 | fs-minipass: 2.1.0 1464 | minipass: 5.0.0 1465 | minizlib: 2.1.2 1466 | mkdirp: 1.0.4 1467 | yallist: 4.0.0 1468 | dev: true 1469 | 1470 | /tiny-glob@0.2.9: 1471 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 1472 | dependencies: 1473 | globalyzer: 0.1.0 1474 | globrex: 0.1.2 1475 | dev: true 1476 | 1477 | /to-regex-range@5.0.1: 1478 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1479 | engines: {node: '>=8.0'} 1480 | dependencies: 1481 | is-number: 7.0.0 1482 | dev: true 1483 | 1484 | /totalist@3.0.1: 1485 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1486 | engines: {node: '>=6'} 1487 | dev: true 1488 | 1489 | /tr46@0.0.3: 1490 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1491 | dev: true 1492 | 1493 | /tslib@2.6.2: 1494 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1495 | dev: true 1496 | 1497 | /typescript@5.4.2: 1498 | resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} 1499 | engines: {node: '>=14.17'} 1500 | hasBin: true 1501 | dev: true 1502 | 1503 | /util-deprecate@1.0.2: 1504 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1505 | dev: true 1506 | 1507 | /vite@5.1.5: 1508 | resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==} 1509 | engines: {node: ^18.0.0 || >=20.0.0} 1510 | hasBin: true 1511 | peerDependencies: 1512 | '@types/node': ^18.0.0 || >=20.0.0 1513 | less: '*' 1514 | lightningcss: ^1.21.0 1515 | sass: '*' 1516 | stylus: '*' 1517 | sugarss: '*' 1518 | terser: ^5.4.0 1519 | peerDependenciesMeta: 1520 | '@types/node': 1521 | optional: true 1522 | less: 1523 | optional: true 1524 | lightningcss: 1525 | optional: true 1526 | sass: 1527 | optional: true 1528 | stylus: 1529 | optional: true 1530 | sugarss: 1531 | optional: true 1532 | terser: 1533 | optional: true 1534 | dependencies: 1535 | esbuild: 0.19.12 1536 | postcss: 8.4.35 1537 | rollup: 4.12.1 1538 | optionalDependencies: 1539 | fsevents: 2.3.3 1540 | dev: true 1541 | 1542 | /vitefu@0.2.5(vite@5.1.5): 1543 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 1544 | peerDependencies: 1545 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 1546 | peerDependenciesMeta: 1547 | vite: 1548 | optional: true 1549 | dependencies: 1550 | vite: 5.1.5 1551 | dev: true 1552 | 1553 | /webidl-conversions@3.0.1: 1554 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1555 | dev: true 1556 | 1557 | /whatwg-url@5.0.0: 1558 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1559 | dependencies: 1560 | tr46: 0.0.3 1561 | webidl-conversions: 3.0.1 1562 | dev: true 1563 | 1564 | /wide-align@1.1.5: 1565 | resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} 1566 | dependencies: 1567 | string-width: 4.2.3 1568 | dev: true 1569 | 1570 | /wrappy@1.0.2: 1571 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1572 | dev: true 1573 | 1574 | /yallist@4.0.0: 1575 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1576 | dev: true 1577 | 1578 | /zimmerframe@1.1.2: 1579 | resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} 1580 | dev: true 1581 | -------------------------------------------------------------------------------- /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 PageState {} 9 | // interface Platform {} 10 | } 11 | } 12 | 13 | export {}; 14 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |
%sveltekit.body%
11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lib/components/PreloadingIndicator.svelte: -------------------------------------------------------------------------------- 1 | 34 | 35 | {#if visible} 36 |
37 |
38 |
39 | {/if} 40 | 41 | {#if $p >= 0.4} 42 |
43 | {/if} 44 | 45 | 83 | -------------------------------------------------------------------------------- /src/lib/components/Search.svelte: -------------------------------------------------------------------------------- 1 | 33 | 34 | { 36 | if (e.key === 'Escape') { 37 | hide(); 38 | } 39 | 40 | if (e.key === 'k' && (e.metaKey || e.ctrlKey)) { 41 | visible = true; 42 | e.preventDefault(); 43 | } 44 | }} 45 | /> 46 | 47 |
48 | 58 |
59 | 60 | {#if visible} 61 | 90 | {/if} 91 | 92 | 133 | -------------------------------------------------------------------------------- /src/lib/components/SearchResults.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | {#if movies.length > 0} 8 |
    9 | {#each movies as movie} 10 |
  • 11 |

    {movie.title}

    12 |

    {movie.extract}

    13 |
  • 14 | {/each} 15 |
16 | {:else} 17 | No results 18 | {/if} 19 | 20 | 35 | -------------------------------------------------------------------------------- /src/lib/data.ts: -------------------------------------------------------------------------------- 1 | import { browser } from '$app/environment'; 2 | import url from './data.json?url'; 3 | import type { Movie } from './types'; 4 | 5 | export let local: Movie[]; 6 | 7 | if (browser) { 8 | fetch(url).then(async (request) => { 9 | local = await request.json(); 10 | }); 11 | } 12 | 13 | export function search(movies: Movie[], query: string | null) { 14 | const results: Movie[] = []; 15 | if (!query) return results; 16 | 17 | const q = query.toLowerCase().trim(); 18 | 19 | for (const movie of movies) { 20 | if (movie.title.toLowerCase().includes(q) || movie.extract.toLowerCase().includes(q)) { 21 | results.push(movie); 22 | 23 | // magic number alert — don't try and sort the entire list 24 | if (results.length === 200) break; 25 | } 26 | } 27 | 28 | results.sort((a, b) => { 29 | const ai = a.title.toLowerCase().indexOf(q); 30 | const bi = b.title.toLowerCase().indexOf(q); 31 | 32 | // prefer title over extract 33 | if (ai === -1) return 1; 34 | if (bi === -1) return -1; 35 | 36 | // prefer earlier matches ("Die Hard") over later ones ("A Good Day To Die Hard") 37 | // and shorter titles over longer ones ("Die Hard 2") 38 | return ai - bi || a.title.length - b.title.length; 39 | }); 40 | 41 | return results.slice(0, 20); 42 | } 43 | -------------------------------------------------------------------------------- /src/lib/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface Movie { 2 | id: number; 3 | title: string; 4 | year: number; 5 | extract: string; 6 | thumbnail: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 | {#if $navigating} 10 | 11 | {/if} 12 | 13 |
14 |

Movies!

15 | 16 |
17 | 18 |
19 | {@render children()} 20 |
21 | 22 | 28 | 29 | 62 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | SvelteKit Movies Demo 7 | 8 | 9 |

Some random movies from the database:

10 | 11 |
    12 | {#each data.movies as movie} 13 |
  • {movie.title}
  • 14 | {/each} 15 |
16 | -------------------------------------------------------------------------------- /src/routes/+page.ts: -------------------------------------------------------------------------------- 1 | import { browser } from '$app/environment'; 2 | import type { Movie } from '$lib/types'; 3 | 4 | let cached: Movie[]; 5 | 6 | export async function load({ fetch }) { 7 | const movies = cached || (await fetch('/api/random').then((r) => r.json())); 8 | 9 | if (browser) { 10 | cached = movies; 11 | } 12 | 13 | return { 14 | movies 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /src/routes/api/movie/[id]/+server.ts: -------------------------------------------------------------------------------- 1 | import { movies } from '../../movies'; 2 | import { error, json } from '@sveltejs/kit'; 3 | 4 | export function GET({ params }) { 5 | const id = Number(params.id); 6 | 7 | const movie = movies.find((movie) => movie.id === id); 8 | if (!movie) error(404); 9 | 10 | return json(movie); 11 | } 12 | -------------------------------------------------------------------------------- /src/routes/api/movies.ts: -------------------------------------------------------------------------------- 1 | import type { Movie } from '$lib/types'; 2 | import data from '$lib/data.json'; 3 | 4 | const movies = data as Movie[]; 5 | 6 | export { movies }; 7 | -------------------------------------------------------------------------------- /src/routes/api/random/+server.ts: -------------------------------------------------------------------------------- 1 | import { movies } from '../movies'; 2 | import { json } from '@sveltejs/kit'; 3 | import type { Movie } from '$lib/types'; 4 | 5 | export function GET() { 6 | const selection: Movie[] = []; 7 | 8 | while (selection.length < 12) { 9 | const i = Math.floor(Math.random() * movies.length); 10 | const movie = movies[i]; 11 | 12 | if (movie.thumbnail !== '' && !selection.includes(movie)) { 13 | selection.push(movie); 14 | } 15 | } 16 | 17 | return json(selection); 18 | } 19 | -------------------------------------------------------------------------------- /src/routes/api/search/+server.ts: -------------------------------------------------------------------------------- 1 | import { movies } from '../movies'; 2 | import { json } from '@sveltejs/kit'; 3 | import { search } from '$lib/data'; 4 | 5 | export function GET({ url }) { 6 | const query = url.searchParams.get('q'); 7 | const results = search(movies, query); 8 | 9 | return json(results); 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/movie/[id]/+page.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | {data.movie.title} ({data.movie.year}) • SvelteKit Movies Demo 9 | 10 | 11 |
12 | movie poster 13 |

{data.movie.title} ({data.movie.year})

14 |

{data.movie.extract}

15 |
16 | 17 | 37 | -------------------------------------------------------------------------------- /src/routes/movie/[id]/+page.ts: -------------------------------------------------------------------------------- 1 | import { browser } from '$app/environment'; 2 | import { local } from '$lib/data'; 3 | import type { Movie } from '$lib/types'; 4 | import { error } from '@sveltejs/kit'; 5 | 6 | export async function load({ fetch, params }) { 7 | const id = Number(params.id); 8 | let movie: Movie | undefined; 9 | 10 | if (local) { 11 | movie = local.find((movie) => movie.id === id); 12 | if (!movie) error(404); 13 | } else { 14 | const response = await fetch(`/api/movie/${id}`); 15 | if (!response.ok) error(response.status); 16 | 17 | movie = (await response.json()) as Movie; 18 | } 19 | 20 | if (browser) { 21 | // start loading thumbnail 22 | const img = new Image(); 23 | img.src = movie.thumbnail; 24 | } 25 | 26 | return { 27 | movie 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /src/routes/movie/[id]/missing.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/routes/search/+page.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | Search results • SvelteKit Movies Demo 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/routes/search/+page.ts: -------------------------------------------------------------------------------- 1 | import { local, search } from '$lib/data.js'; 2 | import type { Movie } from '$lib/types.js'; 3 | 4 | export async function load({ fetch, url }) { 5 | const query = url.searchParams.get('q'); 6 | let movies: Movie[]; 7 | 8 | if (!query) { 9 | movies = []; 10 | } else if (local) { 11 | movies = search(local, query); 12 | } else { 13 | const response = await fetch(`/api/search?q=${query}`); 14 | movies = await response.json(); 15 | } 16 | 17 | return { 18 | movies 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rich-Harris/sveltekit-movies-demo/64c358e91845c3cf58db382cfe12bc472422f6ea/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from '@sveltejs/adapter-auto'; 2 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | // Consult https://kit.svelte.dev/docs/integrations#preprocessors 7 | // for more information about preprocessors 8 | preprocess: vitePreprocess(), 9 | 10 | kit: { 11 | // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. 12 | // If your environment is not supported or you settled on a specific environment, switch out the adapter. 13 | // See https://kit.svelte.dev/docs/adapters for more information about adapters. 14 | adapter: adapter() 15 | } 16 | }; 17 | 18 | export default config; 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "moduleResolution": "bundler" 13 | } 14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 15 | // 16 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 17 | // from the referenced tsconfig.json - TypeScript does not merge them in 18 | } 19 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from '@sveltejs/kit/vite'; 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | plugins: [sveltekit()] 6 | }); 7 | --------------------------------------------------------------------------------