my website at ewancroft.uk

fix: optimise for Vercel

ewancroft.uk 326d1bc3 bf4d71d7

verified
+14 -3
.cspell.json
··· 146 146 "vuepress", 147 147 "vurl", 148 148 "WCAG", 149 + "webp", 149 150 "wght", 150 151 "whitebreeze", 151 152 "WhiteWind", ··· 155 156 "xrpc" 156 157 ], 157 158 "flagWords": [], 158 - "ignorePaths": ["node_modules", "package-lock.json", "dist", "build"], 159 - "ignoreRegExpList": ["/(\\w+)'s/g"], 159 + "ignorePaths": [ 160 + "node_modules", 161 + "package-lock.json", 162 + "dist", 163 + "build" 164 + ], 165 + "ignoreRegExpList": [ 166 + "/(\\w+)'s/g" 167 + ], 160 168 "overrides": [ 161 169 { 162 170 "filename": "**/*.svelte", 163 - "ignoreRegExpList": ["/>.*</", "/(\\w+)'s/g"] 171 + "ignoreRegExpList": [ 172 + "/>.*</", 173 + "/(\\w+)'s/g" 174 + ] 164 175 } 165 176 ] 166 177 }
+35
.vercelignore
··· 1 + # Dependencies 2 + node_modules 3 + npm-debug.log 4 + .pnpm-debug.log 5 + yarn-error.log 6 + 7 + # Build outputs 8 + .svelte-kit 9 + build 10 + dist 11 + .vercel_build_output 12 + 13 + # Environment files (keep .env.example) 14 + .env 15 + .env.* 16 + !.env.example 17 + 18 + # IDE files 19 + .vscode 20 + .idea 21 + *.swp 22 + *.swo 23 + *~ 24 + 25 + # OS files 26 + .DS_Store 27 + Thumbs.db 28 + 29 + # Testing 30 + coverage 31 + .nyc_output 32 + 33 + # Misc 34 + *.log 35 + .cache
+489 -43
package-lock.json
··· 13 13 "hls.js": "^1.6.15" 14 14 }, 15 15 "devDependencies": { 16 - "@sveltejs/adapter-auto": "^7.0.0", 16 + "@sveltejs/adapter-vercel": "^6.2.0", 17 17 "@sveltejs/kit": "^2.49.0", 18 18 "@sveltejs/vite-plugin-svelte": "^6.2.1", 19 19 "@tailwindcss/typography": "^0.5.19", ··· 29 29 } 30 30 }, 31 31 "node_modules/@atproto/api": { 32 - "version": "0.18.1", 33 - "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.18.1.tgz", 34 - "integrity": "sha512-eK8Us3kRfK+KjxEq/abF3XL4qtqxh7a5GbKHaUGQqPxNGmLiIdFn4Ve4PkpP/OsDfcRMZF5CK47Jr7SARc7ttg==", 32 + "version": "0.18.3", 33 + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.18.3.tgz", 34 + "integrity": "sha512-CBqyZfkcKYsr348KP4CKb9plMlZ5A96HwA/DnYscPBl6fvMZkAezAjniZX+xUILASHQJg5c+NaNw9xP8ZuyyDQ==", 35 35 "license": "MIT", 36 36 "dependencies": { 37 - "@atproto/common-web": "^0.4.3", 38 - "@atproto/lexicon": "^0.5.1", 37 + "@atproto/common-web": "^0.4.5", 38 + "@atproto/lexicon": "^0.5.2", 39 39 "@atproto/syntax": "^0.4.1", 40 - "@atproto/xrpc": "^0.7.5", 40 + "@atproto/xrpc": "^0.7.6", 41 41 "await-lock": "^2.2.2", 42 42 "multiformats": "^9.9.0", 43 43 "tlds": "^1.234.0", ··· 45 45 } 46 46 }, 47 47 "node_modules/@atproto/common-web": { 48 - "version": "0.4.3", 49 - "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.3.tgz", 50 - "integrity": "sha512-nRDINmSe4VycJzPo6fP/hEltBcULFxt9Kw7fQk6405FyAWZiTluYHlXOnU7GkQfeUK44OENG1qFTBcmCJ7e8pg==", 48 + "version": "0.4.5", 49 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.5.tgz", 50 + "integrity": "sha512-Tx0xUafLm3vRvOQpbBl5eb9V8xlC7TaRXs6dAulHRkDG3Kb+P9qn3pkDteq+aeMshbVXbVa1rm3Ok4vFyuoyYA==", 51 51 "license": "MIT", 52 52 "dependencies": { 53 - "graphemer": "^1.4.0", 53 + "@atproto/lex-data": "0.0.1", 54 + "@atproto/lex-json": "0.0.1", 55 + "zod": "^3.23.8" 56 + } 57 + }, 58 + "node_modules/@atproto/lex-data": { 59 + "version": "0.0.1", 60 + "resolved": "https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.1.tgz", 61 + "integrity": "sha512-DrS/8cQcQs3s5t9ELAFNtyDZ8/PdiCx47ALtFEP2GnX2uCBHZRkqWG7xmu6ehjc787nsFzZBvlnz3T/gov5fGA==", 62 + "license": "MIT", 63 + "dependencies": { 64 + "@atproto/syntax": "0.4.1", 54 65 "multiformats": "^9.9.0", 66 + "tslib": "^2.8.1", 55 67 "uint8arrays": "3.0.0", 56 - "zod": "^3.23.8" 68 + "unicode-segmenter": "^0.14.0" 69 + } 70 + }, 71 + "node_modules/@atproto/lex-json": { 72 + "version": "0.0.1", 73 + "resolved": "https://registry.npmjs.org/@atproto/lex-json/-/lex-json-0.0.1.tgz", 74 + "integrity": "sha512-ivcF7+pDRuD/P97IEKQ/9TruunXj0w58Khvwk3M6psaI5eZT6LRsRZ4cWcKaXiFX4SHnjy+x43g0f7pPtIsERg==", 75 + "license": "MIT", 76 + "dependencies": { 77 + "@atproto/lex-data": "0.0.1", 78 + "tslib": "^2.8.1" 57 79 } 58 80 }, 59 81 "node_modules/@atproto/lexicon": { 60 - "version": "0.5.1", 61 - "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.5.1.tgz", 62 - "integrity": "sha512-y8AEtYmfgVl4fqFxqXAeGvhesiGkxiy3CWoJIfsFDDdTlZUC8DFnZrYhcqkIop3OlCkkljvpSJi1hbeC1tbi8A==", 82 + "version": "0.5.2", 83 + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.5.2.tgz", 84 + "integrity": "sha512-lRmJgMA8f5j7VB5Iu5cp188ald5FuI4FlmZ7nn6EBrk1dgOstWVrI5Ft6K3z2vjyLZRG6nzknlsw+tDP63p7bQ==", 63 85 "license": "MIT", 64 86 "dependencies": { 65 - "@atproto/common-web": "^0.4.3", 87 + "@atproto/common-web": "^0.4.4", 66 88 "@atproto/syntax": "^0.4.1", 67 89 "iso-datestring-validator": "^2.2.2", 68 90 "multiformats": "^9.9.0", ··· 76 98 "license": "MIT" 77 99 }, 78 100 "node_modules/@atproto/xrpc": { 79 - "version": "0.7.5", 80 - "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.5.tgz", 81 - "integrity": "sha512-MUYNn5d2hv8yVegRL0ccHvTHAVj5JSnW07bkbiaz96UH45lvYNRVwt44z+yYVnb0/mvBzyD3/ZQ55TRGt7fHkA==", 101 + "version": "0.7.6", 102 + "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.6.tgz", 103 + "integrity": "sha512-RvCf4j0JnKYWuz3QzsYCntJi3VuiAAybQsMIUw2wLWcHhchO9F7UaBZINLL2z0qc/cYWPv5NSwcVydMseoCZLA==", 82 104 "license": "MIT", 83 105 "dependencies": { 84 - "@atproto/lexicon": "^0.5.1", 106 + "@atproto/lexicon": "^0.5.2", 85 107 "zod": "^3.23.8" 86 108 } 87 109 }, ··· 527 549 "node": ">=18" 528 550 } 529 551 }, 552 + "node_modules/@isaacs/balanced-match": { 553 + "version": "4.0.1", 554 + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", 555 + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", 556 + "dev": true, 557 + "license": "MIT", 558 + "engines": { 559 + "node": "20 || >=22" 560 + } 561 + }, 562 + "node_modules/@isaacs/brace-expansion": { 563 + "version": "5.0.0", 564 + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", 565 + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", 566 + "dev": true, 567 + "license": "MIT", 568 + "dependencies": { 569 + "@isaacs/balanced-match": "^4.0.1" 570 + }, 571 + "engines": { 572 + "node": "20 || >=22" 573 + } 574 + }, 575 + "node_modules/@isaacs/fs-minipass": { 576 + "version": "4.0.1", 577 + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", 578 + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", 579 + "dev": true, 580 + "license": "ISC", 581 + "dependencies": { 582 + "minipass": "^7.0.4" 583 + }, 584 + "engines": { 585 + "node": ">=18.0.0" 586 + } 587 + }, 530 588 "node_modules/@jridgewell/gen-mapping": { 531 589 "version": "0.3.13", 532 590 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", ··· 581 639 "svelte": "^5" 582 640 } 583 641 }, 642 + "node_modules/@mapbox/node-pre-gyp": { 643 + "version": "2.0.3", 644 + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", 645 + "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", 646 + "dev": true, 647 + "license": "BSD-3-Clause", 648 + "dependencies": { 649 + "consola": "^3.2.3", 650 + "detect-libc": "^2.0.0", 651 + "https-proxy-agent": "^7.0.5", 652 + "node-fetch": "^2.6.7", 653 + "nopt": "^8.0.0", 654 + "semver": "^7.5.3", 655 + "tar": "^7.4.0" 656 + }, 657 + "bin": { 658 + "node-pre-gyp": "bin/node-pre-gyp" 659 + }, 660 + "engines": { 661 + "node": ">=18" 662 + } 663 + }, 584 664 "node_modules/@polka/url": { 585 665 "version": "1.0.0-next.29", 586 666 "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", ··· 588 668 "dev": true, 589 669 "license": "MIT" 590 670 }, 671 + "node_modules/@rollup/pluginutils": { 672 + "version": "5.3.0", 673 + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", 674 + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", 675 + "dev": true, 676 + "license": "MIT", 677 + "dependencies": { 678 + "@types/estree": "^1.0.0", 679 + "estree-walker": "^2.0.2", 680 + "picomatch": "^4.0.2" 681 + }, 682 + "engines": { 683 + "node": ">=14.0.0" 684 + }, 685 + "peerDependencies": { 686 + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" 687 + }, 688 + "peerDependenciesMeta": { 689 + "rollup": { 690 + "optional": true 691 + } 692 + } 693 + }, 591 694 "node_modules/@rollup/rollup-android-arm-eabi": { 592 695 "version": "4.53.3", 593 696 "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", ··· 912 1015 "acorn": "^8.9.0" 913 1016 } 914 1017 }, 915 - "node_modules/@sveltejs/adapter-auto": { 916 - "version": "7.0.0", 917 - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-7.0.0.tgz", 918 - "integrity": "sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw==", 1018 + "node_modules/@sveltejs/adapter-vercel": { 1019 + "version": "6.2.0", 1020 + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-6.2.0.tgz", 1021 + "integrity": "sha512-JojC+3dcxNKxO6ixoHq7k1QRL2KCX7RzwfXp1vwbLZkKZrPc5KvhbutVYYiIe0C3aky7VJU6kWp1k9a4b1mgoA==", 919 1022 "dev": true, 920 1023 "license": "MIT", 1024 + "dependencies": { 1025 + "@vercel/nft": "^1.0.0", 1026 + "esbuild": "^0.25.4" 1027 + }, 1028 + "engines": { 1029 + "node": ">=20.0" 1030 + }, 921 1031 "peerDependencies": { 922 - "@sveltejs/kit": "^2.0.0" 1032 + "@sveltejs/kit": "^2.4.0" 923 1033 } 924 1034 }, 925 1035 "node_modules/@sveltejs/kit": { ··· 1300 1410 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1301 1411 "license": "MIT" 1302 1412 }, 1413 + "node_modules/@vercel/nft": { 1414 + "version": "1.1.1", 1415 + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-1.1.1.tgz", 1416 + "integrity": "sha512-mKMGa7CEUcXU75474kOeqHbtvK1kAcu4wiahhmlUenB5JbTQB8wVlDI8CyHR3rpGo0qlzoRWqcDzI41FUoBJCA==", 1417 + "dev": true, 1418 + "license": "MIT", 1419 + "dependencies": { 1420 + "@mapbox/node-pre-gyp": "^2.0.0", 1421 + "@rollup/pluginutils": "^5.1.3", 1422 + "acorn": "^8.6.0", 1423 + "acorn-import-attributes": "^1.9.5", 1424 + "async-sema": "^3.1.1", 1425 + "bindings": "^1.4.0", 1426 + "estree-walker": "2.0.2", 1427 + "glob": "^13.0.0", 1428 + "graceful-fs": "^4.2.9", 1429 + "node-gyp-build": "^4.2.2", 1430 + "picomatch": "^4.0.2", 1431 + "resolve-from": "^5.0.0" 1432 + }, 1433 + "bin": { 1434 + "nft": "out/cli.js" 1435 + }, 1436 + "engines": { 1437 + "node": ">=20" 1438 + } 1439 + }, 1440 + "node_modules/abbrev": { 1441 + "version": "3.0.1", 1442 + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", 1443 + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", 1444 + "dev": true, 1445 + "license": "ISC", 1446 + "engines": { 1447 + "node": "^18.17.0 || >=20.5.0" 1448 + } 1449 + }, 1303 1450 "node_modules/acorn": { 1304 1451 "version": "8.15.0", 1305 1452 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", ··· 1313 1460 "node": ">=0.4.0" 1314 1461 } 1315 1462 }, 1463 + "node_modules/acorn-import-attributes": { 1464 + "version": "1.9.5", 1465 + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", 1466 + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", 1467 + "dev": true, 1468 + "license": "MIT", 1469 + "peerDependencies": { 1470 + "acorn": "^8" 1471 + } 1472 + }, 1473 + "node_modules/agent-base": { 1474 + "version": "7.1.4", 1475 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", 1476 + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", 1477 + "dev": true, 1478 + "license": "MIT", 1479 + "engines": { 1480 + "node": ">= 14" 1481 + } 1482 + }, 1316 1483 "node_modules/aria-query": { 1317 1484 "version": "5.3.2", 1318 1485 "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", ··· 1322 1489 "node": ">= 0.4" 1323 1490 } 1324 1491 }, 1492 + "node_modules/async-sema": { 1493 + "version": "3.1.1", 1494 + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", 1495 + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", 1496 + "dev": true, 1497 + "license": "MIT" 1498 + }, 1325 1499 "node_modules/await-lock": { 1326 1500 "version": "2.2.2", 1327 1501 "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz", ··· 1337 1511 "node": ">= 0.4" 1338 1512 } 1339 1513 }, 1514 + "node_modules/bindings": { 1515 + "version": "1.5.0", 1516 + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 1517 + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 1518 + "dev": true, 1519 + "license": "MIT", 1520 + "dependencies": { 1521 + "file-uri-to-path": "1.0.0" 1522 + } 1523 + }, 1340 1524 "node_modules/chokidar": { 1341 1525 "version": "4.0.3", 1342 1526 "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", ··· 1353 1537 "url": "https://paulmillr.com/funding/" 1354 1538 } 1355 1539 }, 1540 + "node_modules/chownr": { 1541 + "version": "3.0.0", 1542 + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", 1543 + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", 1544 + "dev": true, 1545 + "license": "BlueOak-1.0.0", 1546 + "engines": { 1547 + "node": ">=18" 1548 + } 1549 + }, 1356 1550 "node_modules/clsx": { 1357 1551 "version": "2.1.1", 1358 1552 "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", ··· 1362 1556 "node": ">=6" 1363 1557 } 1364 1558 }, 1559 + "node_modules/consola": { 1560 + "version": "3.4.2", 1561 + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", 1562 + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", 1563 + "dev": true, 1564 + "license": "MIT", 1565 + "engines": { 1566 + "node": "^14.18.0 || >=16.10.0" 1567 + } 1568 + }, 1365 1569 "node_modules/cookie": { 1366 1570 "version": "0.6.0", 1367 1571 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", ··· 1427 1631 "version": "5.5.0", 1428 1632 "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", 1429 1633 "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", 1430 - "dev": true, 1431 1634 "license": "MIT" 1432 1635 }, 1433 1636 "node_modules/enhanced-resolve": { ··· 1493 1696 "license": "MIT" 1494 1697 }, 1495 1698 "node_modules/esrap": { 1496 - "version": "2.1.3", 1497 - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.3.tgz", 1498 - "integrity": "sha512-T/Dhhv/QH+yYmiaLz9SA3PW+YyenlnRKDNdtlYJrSOBmNsH4nvPux+mTwx7p+wAedlJrGoZtXNI0a0MjQ2QkVg==", 1699 + "version": "2.2.0", 1700 + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.0.tgz", 1701 + "integrity": "sha512-WBmtxe7R9C5mvL4n2le8nMUe4mD5V9oiK2vJpQ9I3y20ENPUomPcphBXE8D1x/Bm84oN1V+lOfgXxtqmxTp3Xg==", 1499 1702 "license": "MIT", 1500 1703 "dependencies": { 1501 1704 "@jridgewell/sourcemap-codec": "^1.4.15" 1502 1705 } 1503 1706 }, 1707 + "node_modules/estree-walker": { 1708 + "version": "2.0.2", 1709 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1710 + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1711 + "dev": true, 1712 + "license": "MIT" 1713 + }, 1504 1714 "node_modules/fdir": { 1505 1715 "version": "6.5.0", 1506 1716 "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", ··· 1519 1729 } 1520 1730 } 1521 1731 }, 1732 + "node_modules/file-uri-to-path": { 1733 + "version": "1.0.0", 1734 + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 1735 + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", 1736 + "dev": true, 1737 + "license": "MIT" 1738 + }, 1522 1739 "node_modules/fsevents": { 1523 1740 "version": "2.3.3", 1524 1741 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", ··· 1534 1751 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1535 1752 } 1536 1753 }, 1754 + "node_modules/glob": { 1755 + "version": "13.0.0", 1756 + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", 1757 + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", 1758 + "dev": true, 1759 + "license": "BlueOak-1.0.0", 1760 + "dependencies": { 1761 + "minimatch": "^10.1.1", 1762 + "minipass": "^7.1.2", 1763 + "path-scurry": "^2.0.0" 1764 + }, 1765 + "engines": { 1766 + "node": "20 || >=22" 1767 + }, 1768 + "funding": { 1769 + "url": "https://github.com/sponsors/isaacs" 1770 + } 1771 + }, 1537 1772 "node_modules/graceful-fs": { 1538 1773 "version": "4.2.11", 1539 1774 "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", ··· 1541 1776 "dev": true, 1542 1777 "license": "ISC" 1543 1778 }, 1544 - "node_modules/graphemer": { 1545 - "version": "1.4.0", 1546 - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1547 - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1548 - "license": "MIT" 1549 - }, 1550 1779 "node_modules/hls.js": { 1551 1780 "version": "1.6.15", 1552 1781 "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz", 1553 1782 "integrity": "sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==", 1554 1783 "license": "Apache-2.0" 1784 + }, 1785 + "node_modules/https-proxy-agent": { 1786 + "version": "7.0.6", 1787 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 1788 + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 1789 + "dev": true, 1790 + "license": "MIT", 1791 + "dependencies": { 1792 + "agent-base": "^7.1.2", 1793 + "debug": "4" 1794 + }, 1795 + "engines": { 1796 + "node": ">= 14" 1797 + } 1555 1798 }, 1556 1799 "node_modules/is-reference": { 1557 1800 "version": "3.0.3", ··· 1855 2098 "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1856 2099 "license": "MIT" 1857 2100 }, 2101 + "node_modules/lru-cache": { 2102 + "version": "11.2.2", 2103 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", 2104 + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", 2105 + "dev": true, 2106 + "license": "ISC", 2107 + "engines": { 2108 + "node": "20 || >=22" 2109 + } 2110 + }, 1858 2111 "node_modules/magic-string": { 1859 2112 "version": "0.30.21", 1860 2113 "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", ··· 1864 2117 "@jridgewell/sourcemap-codec": "^1.5.5" 1865 2118 } 1866 2119 }, 2120 + "node_modules/minimatch": { 2121 + "version": "10.1.1", 2122 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", 2123 + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", 2124 + "dev": true, 2125 + "license": "BlueOak-1.0.0", 2126 + "dependencies": { 2127 + "@isaacs/brace-expansion": "^5.0.0" 2128 + }, 2129 + "engines": { 2130 + "node": "20 || >=22" 2131 + }, 2132 + "funding": { 2133 + "url": "https://github.com/sponsors/isaacs" 2134 + } 2135 + }, 2136 + "node_modules/minipass": { 2137 + "version": "7.1.2", 2138 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 2139 + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 2140 + "dev": true, 2141 + "license": "ISC", 2142 + "engines": { 2143 + "node": ">=16 || 14 >=14.17" 2144 + } 2145 + }, 2146 + "node_modules/minizlib": { 2147 + "version": "3.1.0", 2148 + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", 2149 + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", 2150 + "dev": true, 2151 + "license": "MIT", 2152 + "dependencies": { 2153 + "minipass": "^7.1.2" 2154 + }, 2155 + "engines": { 2156 + "node": ">= 18" 2157 + } 2158 + }, 1867 2159 "node_modules/mri": { 1868 2160 "version": "1.2.0", 1869 2161 "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", ··· 1916 2208 "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1917 2209 } 1918 2210 }, 2211 + "node_modules/node-fetch": { 2212 + "version": "2.7.0", 2213 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 2214 + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 2215 + "dev": true, 2216 + "license": "MIT", 2217 + "dependencies": { 2218 + "whatwg-url": "^5.0.0" 2219 + }, 2220 + "engines": { 2221 + "node": "4.x || >=6.0.0" 2222 + }, 2223 + "peerDependencies": { 2224 + "encoding": "^0.1.0" 2225 + }, 2226 + "peerDependenciesMeta": { 2227 + "encoding": { 2228 + "optional": true 2229 + } 2230 + } 2231 + }, 2232 + "node_modules/node-gyp-build": { 2233 + "version": "4.8.4", 2234 + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", 2235 + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", 2236 + "dev": true, 2237 + "license": "MIT", 2238 + "bin": { 2239 + "node-gyp-build": "bin.js", 2240 + "node-gyp-build-optional": "optional.js", 2241 + "node-gyp-build-test": "build-test.js" 2242 + } 2243 + }, 2244 + "node_modules/nopt": { 2245 + "version": "8.1.0", 2246 + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", 2247 + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", 2248 + "dev": true, 2249 + "license": "ISC", 2250 + "dependencies": { 2251 + "abbrev": "^3.0.0" 2252 + }, 2253 + "bin": { 2254 + "nopt": "bin/nopt.js" 2255 + }, 2256 + "engines": { 2257 + "node": "^18.17.0 || >=20.5.0" 2258 + } 2259 + }, 2260 + "node_modules/path-scurry": { 2261 + "version": "2.0.1", 2262 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", 2263 + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", 2264 + "dev": true, 2265 + "license": "BlueOak-1.0.0", 2266 + "dependencies": { 2267 + "lru-cache": "^11.0.0", 2268 + "minipass": "^7.1.2" 2269 + }, 2270 + "engines": { 2271 + "node": "20 || >=22" 2272 + }, 2273 + "funding": { 2274 + "url": "https://github.com/sponsors/isaacs" 2275 + } 2276 + }, 1919 2277 "node_modules/picocolors": { 1920 2278 "version": "1.1.1", 1921 2279 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", ··· 1929 2287 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 1930 2288 "dev": true, 1931 2289 "license": "MIT", 1932 - "peer": true, 1933 2290 "engines": { 1934 2291 "node": ">=12" 1935 2292 }, ··· 1981 2338 } 1982 2339 }, 1983 2340 "node_modules/prettier": { 1984 - "version": "3.6.2", 1985 - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", 1986 - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 2341 + "version": "3.7.2", 2342 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.2.tgz", 2343 + "integrity": "sha512-n3HV2J6QhItCXndGa3oMWvWFAgN1ibnS7R9mt6iokScBOC0Ul9/iZORmU2IWUMcyAQaMPjTlY3uT34TqocUxMA==", 1987 2344 "dev": true, 1988 2345 "license": "MIT", 1989 2346 "peer": true, ··· 2102 2459 "url": "https://paulmillr.com/funding/" 2103 2460 } 2104 2461 }, 2462 + "node_modules/resolve-from": { 2463 + "version": "5.0.0", 2464 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2465 + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2466 + "dev": true, 2467 + "license": "MIT", 2468 + "engines": { 2469 + "node": ">=8" 2470 + } 2471 + }, 2105 2472 "node_modules/rollup": { 2106 2473 "version": "4.53.3", 2107 2474 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", 2108 2475 "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", 2109 2476 "dev": true, 2110 2477 "license": "MIT", 2478 + "peer": true, 2111 2479 "dependencies": { 2112 2480 "@types/estree": "1.0.8" 2113 2481 }, ··· 2157 2525 "node": ">=6" 2158 2526 } 2159 2527 }, 2528 + "node_modules/semver": { 2529 + "version": "7.7.3", 2530 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 2531 + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 2532 + "dev": true, 2533 + "license": "ISC", 2534 + "bin": { 2535 + "semver": "bin/semver.js" 2536 + }, 2537 + "engines": { 2538 + "node": ">=10" 2539 + } 2540 + }, 2160 2541 "node_modules/set-cookie-parser": { 2161 2542 "version": "2.7.2", 2162 2543 "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", ··· 2190 2571 } 2191 2572 }, 2192 2573 "node_modules/svelte": { 2193 - "version": "5.43.14", 2194 - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.43.14.tgz", 2195 - "integrity": "sha512-pHeUrp1A5S6RGaXhJB7PtYjL1VVjbVrJ2EfuAoPu9/1LeoMaJa/pcdCsCSb0gS4eUHAHnhCbUDxORZyvGK6kOQ==", 2574 + "version": "5.45.2", 2575 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.45.2.tgz", 2576 + "integrity": "sha512-yyXdW2u3H0H/zxxWoGwJoQlRgaSJLp+Vhktv12iRw2WRDlKqUPT54Fi0K/PkXqrdkcQ98aBazpy0AH4BCBVfoA==", 2196 2577 "license": "MIT", 2197 2578 "peer": true, 2198 2579 "dependencies": { ··· 2204 2585 "aria-query": "^5.3.1", 2205 2586 "axobject-query": "^4.1.0", 2206 2587 "clsx": "^2.1.1", 2588 + "devalue": "^5.5.0", 2207 2589 "esm-env": "^1.2.1", 2208 - "esrap": "^2.1.0", 2590 + "esrap": "^2.2.0", 2209 2591 "is-reference": "^3.0.3", 2210 2592 "locate-character": "^3.0.0", 2211 2593 "magic-string": "^0.30.11", ··· 2261 2643 "url": "https://opencollective.com/webpack" 2262 2644 } 2263 2645 }, 2646 + "node_modules/tar": { 2647 + "version": "7.5.2", 2648 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", 2649 + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", 2650 + "dev": true, 2651 + "license": "BlueOak-1.0.0", 2652 + "dependencies": { 2653 + "@isaacs/fs-minipass": "^4.0.0", 2654 + "chownr": "^3.0.0", 2655 + "minipass": "^7.1.2", 2656 + "minizlib": "^3.1.0", 2657 + "yallist": "^5.0.0" 2658 + }, 2659 + "engines": { 2660 + "node": ">=18" 2661 + } 2662 + }, 2264 2663 "node_modules/tinyglobby": { 2265 2664 "version": "0.2.15", 2266 2665 "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", ··· 2297 2696 "node": ">=6" 2298 2697 } 2299 2698 }, 2699 + "node_modules/tr46": { 2700 + "version": "0.0.3", 2701 + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2702 + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 2703 + "dev": true, 2704 + "license": "MIT" 2705 + }, 2706 + "node_modules/tslib": { 2707 + "version": "2.8.1", 2708 + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2709 + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 2710 + "license": "0BSD" 2711 + }, 2300 2712 "node_modules/typescript": { 2301 2713 "version": "5.9.3", 2302 2714 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", ··· 2321 2733 "multiformats": "^9.4.2" 2322 2734 } 2323 2735 }, 2736 + "node_modules/unicode-segmenter": { 2737 + "version": "0.14.0", 2738 + "resolved": "https://registry.npmjs.org/unicode-segmenter/-/unicode-segmenter-0.14.0.tgz", 2739 + "integrity": "sha512-AH4lhPCJANUnSLEKnM4byboctePJzltF4xj8b+NbNiYeAkAXGh7px2K/4NANFp7dnr6+zB3e6HLu8Jj8SKyvYg==", 2740 + "license": "MIT" 2741 + }, 2324 2742 "node_modules/util-deprecate": { 2325 2743 "version": "1.0.2", 2326 2744 "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", ··· 2422 2840 "vite": { 2423 2841 "optional": true 2424 2842 } 2843 + } 2844 + }, 2845 + "node_modules/webidl-conversions": { 2846 + "version": "3.0.1", 2847 + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2848 + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 2849 + "dev": true, 2850 + "license": "BSD-2-Clause" 2851 + }, 2852 + "node_modules/whatwg-url": { 2853 + "version": "5.0.0", 2854 + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2855 + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2856 + "dev": true, 2857 + "license": "MIT", 2858 + "dependencies": { 2859 + "tr46": "~0.0.3", 2860 + "webidl-conversions": "^3.0.0" 2861 + } 2862 + }, 2863 + "node_modules/yallist": { 2864 + "version": "5.0.0", 2865 + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", 2866 + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", 2867 + "dev": true, 2868 + "license": "BlueOak-1.0.0", 2869 + "engines": { 2870 + "node": ">=18" 2425 2871 } 2426 2872 }, 2427 2873 "node_modules/zimmerframe": {
+1 -1
package.json
··· 14 14 "lint": "prettier --check ." 15 15 }, 16 16 "devDependencies": { 17 - "@sveltejs/adapter-auto": "^7.0.0", 17 + "@sveltejs/adapter-vercel": "^6.2.0", 18 18 "@sveltejs/kit": "^2.49.0", 19 19 "@sveltejs/vite-plugin-svelte": "^6.2.1", 20 20 "@tailwindcss/typography": "^0.5.19",
+46 -7
svelte.config.js
··· 1 - import adapter from '@sveltejs/adapter-auto'; 1 + import adapter from '@sveltejs/adapter-vercel'; 2 2 import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 3 3 4 4 /** @type {import('@sveltejs/kit').Config} */ 5 5 const config = { 6 - // Consult https://svelte.dev/docs/kit/integrations 7 - // for more information about preprocessors 8 6 preprocess: vitePreprocess(), 7 + 9 8 kit: { 10 - // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 11 - // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 12 - // See https://svelte.dev/docs/kit/adapters for more information about adapters. 13 - adapter: adapter() 9 + adapter: adapter({ 10 + // Vercel adapter configuration 11 + runtime: 'nodejs20.x', 12 + regions: ['iad1'], // Default to US East (adjust based on your target audience) 13 + split: false, // Set to true to deploy routes as individual functions 14 + 15 + // Edge runtime configuration (uncomment to use Edge Functions) 16 + // runtime: 'edge', 17 + // regions: 'all', // Deploy to all edge regions 18 + 19 + // Memory and execution limits 20 + memory: 1024, // MB (256, 512, 1024, 3008) 21 + maxDuration: 10 // seconds (max execution time) 22 + }), 23 + 24 + // Alias configuration for cleaner imports 25 + alias: { 26 + $components: 'src/lib/components', 27 + $lib: 'src/lib', 28 + $utils: 'src/lib/utils', 29 + $services: 'src/lib/services', 30 + $helper: 'src/lib/helper' 31 + }, 32 + 33 + // Prerender configuration 34 + prerender: { 35 + handleHttpError: 'warn', 36 + handleMissingId: 'warn', 37 + entries: ['*'] // Prerender all discoverable pages 38 + }, 39 + 40 + // CSP configuration for security 41 + csp: { 42 + mode: 'auto', 43 + directives: { 44 + 'default-src': ['self'], 45 + 'script-src': ['self', 'unsafe-inline'], 46 + 'style-src': ['self', 'unsafe-inline'], 47 + 'img-src': ['self', 'data:', 'https:'], 48 + 'font-src': ['self', 'data:'], 49 + 'connect-src': ['self', 'https:'], 50 + 'media-src': ['self', 'https:'] 51 + } 52 + } 14 53 } 15 54 }; 16 55
+56
vercel.json
··· 1 + { 2 + "$schema": "https://openapi.vercel.sh/vercel.json", 3 + "buildCommand": "npm run build", 4 + "devCommand": "npm run dev", 5 + "installCommand": "npm install", 6 + "framework": "sveltekit", 7 + "git": { 8 + "deploymentEnabled": { 9 + "main": true 10 + } 11 + }, 12 + "headers": [ 13 + { 14 + "source": "/fonts/:path*", 15 + "headers": [ 16 + { 17 + "key": "Cache-Control", 18 + "value": "public, max-age=31536000, immutable" 19 + } 20 + ] 21 + }, 22 + { 23 + "source": "/_app/immutable/:path*", 24 + "headers": [ 25 + { 26 + "key": "Cache-Control", 27 + "value": "public, max-age=31536000, immutable" 28 + } 29 + ] 30 + }, 31 + { 32 + "source": "/favicon.ico", 33 + "headers": [ 34 + { 35 + "key": "Cache-Control", 36 + "value": "public, max-age=86400" 37 + } 38 + ] 39 + }, 40 + { 41 + "source": "/:path*.(jpg|jpeg|png|gif|ico|svg|webp|avif)", 42 + "headers": [ 43 + { 44 + "key": "Cache-Control", 45 + "value": "public, max-age=31536000, immutable" 46 + } 47 + ] 48 + } 49 + ], 50 + "rewrites": [ 51 + { 52 + "source": "/(.*)", 53 + "destination": "/" 54 + } 55 + ] 56 + }
+37 -1
vite.config.ts
··· 3 3 import { defineConfig } from 'vite'; 4 4 5 5 export default defineConfig({ 6 - plugins: [tailwindcss(), sveltekit()] 6 + plugins: [tailwindcss(), sveltekit()], 7 + 8 + build: { 9 + // Optimize chunk splitting for better caching 10 + rollupOptions: { 11 + output: { 12 + manualChunks: { 13 + // Split vendor code into separate chunks 14 + 'atproto': ['@atproto/api'], 15 + 'lucide': ['@lucide/svelte'], 16 + 'hls': ['hls.js'] 17 + } 18 + } 19 + }, 20 + // Target modern browsers for smaller bundle size 21 + target: 'es2022', 22 + // Enable minification 23 + minify: 'esbuild', 24 + // Source maps for production debugging (set to false to reduce bundle size) 25 + sourcemap: false, 26 + // CSS code splitting 27 + cssCodeSplit: true, 28 + // Chunk size warnings 29 + chunkSizeWarningLimit: 1000 30 + }, 31 + 32 + optimizeDeps: { 33 + include: ['@atproto/api', '@lucide/svelte', 'hls.js'], 34 + exclude: [] 35 + }, 36 + 37 + server: { 38 + // Development server configuration 39 + fs: { 40 + strict: true 41 + } 42 + } 7 43 });