From 58ae33a7c9a274789ad003633b3a1fa5fe7e2865 Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:50:47 -0400 Subject: [PATCH 01/11] chore: migrate from bun to pnpm --- README.md | 6 +- bun.lockb | Bin 96863 -> 0 bytes pnpm-lock.yaml | 2738 +++++++++++++++++++++++++++++++++++++++++++ pnpm-workspace.yaml | 2 + 4 files changed, 2743 insertions(+), 3 deletions(-) delete mode 100755 bun.lockb create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml diff --git a/README.md b/README.md index ad9fe84..18474ba 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ Web app to reduce the size of GeoJSON files. ## Developing -1. Install dependencies: `bun install` -1. Run: `bun run dev` +1. Install dependencies: `pnpm install` +1. Run: `pnpm dev` ## Building To create a production version: ```bash -bun run build +pnpm build ``` \ No newline at end of file diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 861e0ff3718cd836030b4a84830a2b661aa12ca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96863 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 gOB2o@f+XP=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + + '@rollup/rollup-android-arm-eabi@4.53.2': + resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.2': + resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.2': + resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.2': + resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.2': + resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.2': + resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.2': + resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.2': + resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.2': + resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.2': + resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.2': + resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.2': + resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.2': + resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.2': + resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.2': + resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.2': + resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.2': + resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.2': + resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + cpu: [x64] + os: [win32] + + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + + '@sveltejs/acorn-typescript@1.0.6': + resolution: {integrity: sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==} + peerDependencies: + acorn: ^8.9.0 + + '@sveltejs/adapter-netlify@5.2.4': + resolution: {integrity: sha512-UtPcZq1HUA43hM8uLi+nsm5Q+YjHNj7/SMFoyeLZeY/VTloVWABEZ0tJ5WodTUmy/8j5QJ7oLZjj28aQxi8y3g==} + peerDependencies: + '@sveltejs/kit': ^2.4.0 + + '@sveltejs/kit@2.48.4': + resolution: {integrity: sha512-TGFX1pZUt9qqY20Cv5NyYvy0iLWHf2jXi8s+eCGsig7jQMdwZWKUFMR6TbvFNhfDSUpc1sH/Y5EHv20g3HHA3g==} + engines: {node: '>=18.13'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + + '@sveltejs/vite-plugin-svelte-inspector@5.0.1': + resolution: {integrity: sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@sveltejs/vite-plugin-svelte@6.2.1': + resolution: {integrity: sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==} + engines: {node: ^20.19 || ^22.12 || >=24} + peerDependencies: + svelte: ^5.0.0 + vite: ^6.3.0 || ^7.0.0 + + '@turf/helpers@7.2.0': + resolution: {integrity: sha512-cXo7bKNZoa7aC7ydLmUR02oB3IgDe7MxiPuRz3cCtYQHn+BJ6h1tihmamYDWWUlPHgSNF0i3ATc4WmDECZafKw==} + + '@turf/meta@7.2.0': + resolution: {integrity: sha512-igzTdHsQc8TV1RhPuOLVo74Px/hyPrVgVOTgjWQZzt3J9BVseCdpfY/0cJBdlSRI4S/yTmmHl7gAqjhpYH5Yaw==} + + '@turf/truncate@7.2.0': + resolution: {integrity: sha512-jyFzxYbPugK4XjV5V/k6Xr3taBjjvo210IbPHJXw0Zh7Y6sF+hGxeRVtSuZ9VP/6oRyqAOHKUrze+OOkPqBgUg==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/geojson@7946.0.16': + resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@typescript-eslint/eslint-plugin@8.46.4': + resolution: {integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.4 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/parser@8.46.4': + resolution: {integrity: sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.46.4': + resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.46.4': + resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.4': + resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/type-utils@8.46.4': + resolution: {integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.46.4': + resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.46.4': + resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/utils@8.46.4': + resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.46.4': + resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitest/expect@2.1.9': + resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} + + '@vitest/mocker@2.1.9': + resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.9': + resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + + '@vitest/runner@2.1.9': + resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} + + '@vitest/snapshot@2.1.9': + resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} + + '@vitest/spy@2.1.9': + resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} + + '@vitest/utils@2.1.9': + resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + devalue@5.5.0: + resolution: {integrity: sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-svelte@3.13.0: + resolution: {integrity: sha512-2ohCCQJJTNbIpQCSDSTWj+FN0OVfPmSO03lmSNT7ytqMaWF6kpT86LdzDqtm4sh7TVPl/OEWJ/d7R87bXP2Vjg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.1 || ^9.0.0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrap@2.1.2: + resolution: {integrity: sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + locate-character@3.0.0: + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-svelte@3.4.0: + resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.53.2: + resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} + engines: {node: '>=10'} + hasBin: true + + set-cookie-parser@2.7.2: + resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + svelte-check@4.3.4: + resolution: {integrity: sha512-DVWvxhBrDsd+0hHWKfjP99lsSXASeOhHJYyuKOFYJcP7ThfSCKgjVarE8XfuMWpS5JV3AlDf+iK1YGGo2TACdw==} + engines: {node: '>= 18.0.0'} + hasBin: true + peerDependencies: + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' + + svelte-eslint-parser@1.4.0: + resolution: {integrity: sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.18.3} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + svelte@5.43.6: + resolution: {integrity: sha512-RnyO9VXI85Bmsf4b8AuQFBKFYL3LKUl+ZrifOjvlrQoboAROj5IITVLK1yOXBjwUWUn2BI5cfmurktgCzuZ5QA==} + engines: {node: '>=18'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typescript-eslint@8.46.4: + resolution: {integrity: sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + vite-node@2.1.9: + resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vite@7.2.2: + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.1.1: + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + peerDependenciesMeta: + vite: + optional: true + + vitest@2.1.9: + resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.9 + '@vitest/ui': 2.1.9 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + +snapshots: + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': + dependencies: + eslint: 9.39.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.21.1': + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.39.1': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@iarna/toml@2.2.5': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@polka/url@1.0.0-next.29': {} + + '@rollup/rollup-android-arm-eabi@4.53.2': + optional: true + + '@rollup/rollup-android-arm64@4.53.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.2': + optional: true + + '@rollup/rollup-darwin-x64@4.53.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.2': + optional: true + + '@standard-schema/spec@1.0.0': {} + + '@sveltejs/acorn-typescript@1.0.6(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/adapter-netlify@5.2.4(@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2))(svelte@5.43.6)(vite@7.2.2))': + dependencies: + '@iarna/toml': 2.2.5 + '@sveltejs/kit': 2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2))(svelte@5.43.6)(vite@7.2.2) + esbuild: 0.25.12 + set-cookie-parser: 2.7.2 + + '@sveltejs/kit@2.48.4(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2))(svelte@5.43.6)(vite@7.2.2)': + dependencies: + '@standard-schema/spec': 1.0.0 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.6)(vite@7.2.2) + '@types/cookie': 0.6.0 + acorn: 8.15.0 + cookie: 0.6.0 + devalue: 5.5.0 + esm-env: 1.2.2 + kleur: 4.1.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + sade: 1.8.1 + set-cookie-parser: 2.7.2 + sirv: 3.0.2 + svelte: 5.43.6 + vite: 7.2.2 + + '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2))(svelte@5.43.6)(vite@7.2.2)': + dependencies: + '@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.43.6)(vite@7.2.2) + debug: 4.4.3 + svelte: 5.43.6 + vite: 7.2.2 + transitivePeerDependencies: + - supports-color + + '@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2)': + dependencies: + '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.43.6)(vite@7.2.2))(svelte@5.43.6)(vite@7.2.2) + debug: 4.4.3 + deepmerge: 4.3.1 + magic-string: 0.30.21 + svelte: 5.43.6 + vite: 7.2.2 + vitefu: 1.1.1(vite@7.2.2) + transitivePeerDependencies: + - supports-color + + '@turf/helpers@7.2.0': + dependencies: + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/meta@7.2.0': + dependencies: + '@turf/helpers': 7.2.0 + '@types/geojson': 7946.0.16 + + '@turf/truncate@7.2.0': + dependencies: + '@turf/helpers': 7.2.0 + '@turf/meta': 7.2.0 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@types/cookie@0.6.0': {} + + '@types/estree@1.0.8': {} + + '@types/geojson@7946.0.16': {} + + '@types/json-schema@7.0.15': {} + + '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.46.4(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/type-utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.4 + eslint: 9.39.1 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.46.4(eslint@9.39.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.4 + debug: 4.4.3 + eslint: 9.39.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.46.4': + dependencies: + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/visitor-keys': 8.46.4 + + '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1)(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3) + debug: 4.4.3 + eslint: 9.39.1 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.46.4': {} + + '@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.4(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/visitor-keys': 8.46.4 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.4(eslint@9.39.1)(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + eslint: 9.39.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.46.4': + dependencies: + '@typescript-eslint/types': 8.46.4 + eslint-visitor-keys: 4.2.1 + + '@vitest/expect@2.1.9': + dependencies: + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.3.3 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.9(vite@5.4.21)': + dependencies: + '@vitest/spy': 2.1.9 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 5.4.21 + + '@vitest/pretty-format@2.1.9': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.9': + dependencies: + '@vitest/utils': 2.1.9 + pathe: 1.1.2 + + '@vitest/snapshot@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + magic-string: 0.30.21 + pathe: 1.1.2 + + '@vitest/spy@2.1.9': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.1.9': + dependencies: + '@vitest/pretty-format': 2.1.9 + loupe: 3.2.1 + tinyrainbow: 1.2.0 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + aria-query@5.3.2: {} + + assertion-error@2.0.1: {} + + axobject-query@4.1.0: {} + + balanced-match@1.0.2: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + cac@6.7.14: {} + + callsites@3.1.0: {} + + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@2.1.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + clsx@2.1.1: {} + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + cookie@0.6.0: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + deep-eql@5.0.2: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + devalue@5.5.0: {} + + es-module-lexer@1.7.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@9.39.1): + dependencies: + eslint: 9.39.1 + + eslint-plugin-svelte@3.13.0(eslint@9.39.1)(svelte@5.43.6): + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@jridgewell/sourcemap-codec': 1.5.5 + eslint: 9.39.1 + esutils: 2.0.3 + globals: 16.5.0 + known-css-properties: 0.37.0 + postcss: 8.5.6 + postcss-load-config: 3.1.4(postcss@8.5.6) + postcss-safe-parser: 7.0.1(postcss@8.5.6) + semver: 7.7.3 + svelte-eslint-parser: 1.4.0(svelte@5.43.6) + optionalDependencies: + svelte: 5.43.6 + transitivePeerDependencies: + - ts-node + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.1: + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.39.1 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + esm-env@1.2.2: {} + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrap@2.1.2: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + expect-type@1.2.2: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + fsevents@2.3.3: + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + globals@14.0.0: {} + + globals@15.15.0: {} + + globals@16.5.0: {} + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-reference@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + isexe@2.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@4.1.5: {} + + known-css-properties@0.37.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + + locate-character@3.0.0: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + loupe@3.2.1: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + mri@1.2.0: {} + + mrmime@2.0.1: {} + + ms@2.1.3: {} + + nanoid@3.3.11: {} + + natural-compare@1.4.0: {} + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + pathe@1.1.2: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + postcss-load-config@3.1.4(postcss@8.5.6): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.5.6 + + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prelude-ls@1.2.1: {} + + prettier-plugin-svelte@3.4.0(prettier@3.6.2)(svelte@5.43.6): + dependencies: + prettier: 3.6.2 + svelte: 5.43.6 + + prettier@3.6.2: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + readdirp@4.1.2: {} + + resolve-from@4.0.0: {} + + reusify@1.1.0: {} + + rollup@4.53.2: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.2 + '@rollup/rollup-android-arm64': 4.53.2 + '@rollup/rollup-darwin-arm64': 4.53.2 + '@rollup/rollup-darwin-x64': 4.53.2 + '@rollup/rollup-freebsd-arm64': 4.53.2 + '@rollup/rollup-freebsd-x64': 4.53.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 + '@rollup/rollup-linux-arm-musleabihf': 4.53.2 + '@rollup/rollup-linux-arm64-gnu': 4.53.2 + '@rollup/rollup-linux-arm64-musl': 4.53.2 + '@rollup/rollup-linux-loong64-gnu': 4.53.2 + '@rollup/rollup-linux-ppc64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-musl': 4.53.2 + '@rollup/rollup-linux-s390x-gnu': 4.53.2 + '@rollup/rollup-linux-x64-gnu': 4.53.2 + '@rollup/rollup-linux-x64-musl': 4.53.2 + '@rollup/rollup-openharmony-arm64': 4.53.2 + '@rollup/rollup-win32-arm64-msvc': 4.53.2 + '@rollup/rollup-win32-ia32-msvc': 4.53.2 + '@rollup/rollup-win32-x64-gnu': 4.53.2 + '@rollup/rollup-win32-x64-msvc': 4.53.2 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sade@1.8.1: + dependencies: + mri: 1.2.0 + + semver@7.7.3: {} + + set-cookie-parser@2.7.2: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + siginfo@2.0.0: {} + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + + std-env@3.10.0: {} + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + svelte-check@4.3.4(picomatch@4.0.3)(svelte@5.43.6)(typescript@5.9.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + chokidar: 4.0.3 + fdir: 6.5.0(picomatch@4.0.3) + picocolors: 1.1.1 + sade: 1.8.1 + svelte: 5.43.6 + typescript: 5.9.3 + transitivePeerDependencies: + - picomatch + + svelte-eslint-parser@1.4.0(svelte@5.43.6): + dependencies: + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + postcss: 8.5.6 + postcss-scss: 4.0.9(postcss@8.5.6) + postcss-selector-parser: 7.1.0 + optionalDependencies: + svelte: 5.43.6 + + svelte@5.43.6: + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + '@sveltejs/acorn-typescript': 1.0.6(acorn@8.15.0) + '@types/estree': 1.0.8 + acorn: 8.15.0 + aria-query: 5.3.2 + axobject-query: 4.1.0 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 2.1.2 + is-reference: 3.0.3 + locate-character: 3.0.0 + magic-string: 0.30.21 + zimmerframe: 1.1.4 + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinypool@1.1.1: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + totalist@3.0.1: {} + + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.46.4(eslint@9.39.1)(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.4(eslint@9.39.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.4(eslint@9.39.1)(typescript@5.9.3) + eslint: 9.39.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + typescript@5.9.3: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + vite-node@2.1.9: + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 1.1.2 + vite: 5.4.21 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.21: + dependencies: + esbuild: 0.21.5 + postcss: 8.5.6 + rollup: 4.53.2 + optionalDependencies: + fsevents: 2.3.3 + + vite@7.2.2: + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.2 + tinyglobby: 0.2.15 + optionalDependencies: + fsevents: 2.3.3 + + vitefu@1.1.1(vite@7.2.2): + optionalDependencies: + vite: 7.2.2 + + vitest@2.1.9: + dependencies: + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.21) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 1.1.2 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.1.1 + tinyrainbow: 1.2.0 + vite: 5.4.21 + vite-node: 2.1.9 + why-is-node-running: 2.3.0 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + yaml@1.10.2: {} + + yocto-queue@0.1.0: {} + + zimmerframe@1.1.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..efc037a --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - esbuild From 5bb6c61dc9bbd741463a8a01d4c4c7e1603b5e58 Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:51:56 -0400 Subject: [PATCH 02/11] chore: upgrade to svelte 5 --- package.json | 21 ++++++++++----------- src/app.d.ts | 12 ++++++++++++ src/app.html | 2 +- src/routes/+layout.svelte | 5 +++++ svelte.config.js | 4 ++-- 5 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 src/routes/+layout.svelte diff --git a/package.json b/package.json index d25d2d4..9e111a5 100644 --- a/package.json +++ b/package.json @@ -14,26 +14,25 @@ }, "devDependencies": { "@playwright/test": "^1.28.1", - "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/adapter-netlify": "^2.0.8", - "@sveltejs/kit": "^1.20.4", + "@sveltejs/adapter-netlify": "^5.2.4", + "@sveltejs/kit": "^2.20.3", + "@sveltejs/vite-plugin-svelte": "^6.2.1", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", - "bun-types": "^1.0.7", "eslint": "^8.28.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-svelte": "^2.30.0", "prettier": "^2.8.0", "prettier-plugin-svelte": "^2.10.1", - "svelte": "^4.0.5", - "svelte-check": "^3.4.3", - "tslib": "^2.4.1", - "typescript": "^5.0.0", - "vite": "^4.4.2" + "svelte": "^5.43.6", + "svelte-check": "^4.2.6", + "tslib": "^2.8.1", + "typescript": "^5.7.2", + "vite": "^7.2.2" }, "type": "module", "dependencies": { - "@turf/truncate": "^6.5.0", - "@types/geojson": "^7946.0.12" + "@turf/truncate": "^7.2.0", + "@types/geojson": "^7946.0.14" } } diff --git a/src/app.d.ts b/src/app.d.ts index f59b884..54ecc30 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -5,8 +5,20 @@ declare global { // interface Error {} // interface Locals {} // interface PageData {} + // interface PageState {} // interface Platform {} } } export {}; + +// Type declaration for @turf/truncate v7 +declare module '@turf/truncate' { + export interface TruncateOptions { + precision?: number; + coordinates?: number; + mutate?: boolean; + } + + export function truncate(geojson: any, options?: TruncateOptions): any; +} diff --git a/src/app.html b/src/app.html index 6769ed5..77a5ff5 100644 --- a/src/app.html +++ b/src/app.html @@ -1,4 +1,4 @@ - + diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..0639b37 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,5 @@ + + + diff --git a/svelte.config.js b/svelte.config.js index 28939fd..a384bef 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,5 +1,5 @@ import adapter from '@sveltejs/adapter-netlify'; -import { vitePreprocess } from '@sveltejs/kit/vite'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */ const config = { @@ -15,4 +15,4 @@ const config = { } }; -export default config; \ No newline at end of file +export default config; From 38845a0cdb61266b834de7f232b16b23e533fb31 Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:52:24 -0400 Subject: [PATCH 03/11] chore: upgrade eslint and prettier --- .eslintignore | 13 ------------- .eslintrc.cjs | 30 ------------------------------ .prettierrc | 1 - eslint.config.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 19 ++++++++++--------- 5 files changed, 57 insertions(+), 53 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.cjs create mode 100644 eslint.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 3897265..0000000 --- a/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index ebc1958..0000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:svelte/recommended', - 'prettier' - ], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020, - extraFileExtensions: ['.svelte'] - }, - env: { - browser: true, - es2017: true, - node: true - }, - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser' - } - } - ] -}; diff --git a/.prettierrc b/.prettierrc index a77fdde..9573023 100644 --- a/.prettierrc +++ b/.prettierrc @@ -4,6 +4,5 @@ "trailingComma": "none", "printWidth": 100, "plugins": ["prettier-plugin-svelte"], - "pluginSearchDirs": ["."], "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] } diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..caaaa99 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,47 @@ +import js from '@eslint/js'; +import ts from 'typescript-eslint'; +import svelte from 'eslint-plugin-svelte'; +import prettier from 'eslint-config-prettier'; +import globals from 'globals'; + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { + ignores: [ + 'build/', + '.svelte-kit/', + 'dist/', + 'node_modules/', + '.netlify/', + 'test-results/', + 'playwright-report/' + ] + }, + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs['flat/recommended'], + prettier, + ...svelte.configs['flat/prettier'], + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.node + } + } + }, + { + files: ['**/*.svelte'], + languageOptions: { + parserOptions: { + parser: ts.parser + } + } + }, + { + files: ['src/app.d.ts'], + rules: { + '@typescript-eslint/no-explicit-any': 'off' + } + } +]; diff --git a/package.json b/package.json index 9e111a5..48d9c8c 100644 --- a/package.json +++ b/package.json @@ -9,25 +9,26 @@ "test": "playwright test", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write ." + "lint": "prettier --check . && eslint .", + "format": "prettier --write ." }, "devDependencies": { + "@eslint/js": "^9.39.1", "@playwright/test": "^1.28.1", "@sveltejs/adapter-netlify": "^5.2.4", "@sveltejs/kit": "^2.20.3", "@sveltejs/vite-plugin-svelte": "^6.2.1", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint": "^8.28.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-svelte": "^2.30.0", - "prettier": "^2.8.0", - "prettier-plugin-svelte": "^2.10.1", + "eslint": "^9.39.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.13.0", + "globals": "^15.14.0", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.3", "svelte": "^5.43.6", "svelte-check": "^4.2.6", "tslib": "^2.8.1", "typescript": "^5.7.2", + "typescript-eslint": "^8.46.4", "vite": "^7.2.2" }, "type": "module", From d6fab41117dff6ca66ca2202b89e06f410edfbb8 Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:53:46 -0400 Subject: [PATCH 04/11] chore: replace playwright e2e tests with vitest unit tests --- .gitignore | 1 + package.json | 7 ++++--- playwright.config.ts | 12 ------------ tests/test.ts | 6 ------ vitest.config.ts | 8 ++++++++ 5 files changed, 13 insertions(+), 21 deletions(-) delete mode 100644 playwright.config.ts delete mode 100644 tests/test.ts create mode 100644 vitest.config.ts diff --git a/.gitignore b/.gitignore index 6635cf5..2ffbeff 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ node_modules !.env.example vite.config.js.timestamp-* vite.config.ts.timestamp-* +test-results/ diff --git a/package.json b/package.json index 48d9c8c..57928f9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "vite dev", "build": "vite build", "preview": "vite preview", - "test": "playwright test", + "test": "vitest run", + "test:watch": "vitest", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --check . && eslint .", @@ -14,7 +15,6 @@ }, "devDependencies": { "@eslint/js": "^9.39.1", - "@playwright/test": "^1.28.1", "@sveltejs/adapter-netlify": "^5.2.4", "@sveltejs/kit": "^2.20.3", "@sveltejs/vite-plugin-svelte": "^6.2.1", @@ -29,7 +29,8 @@ "tslib": "^2.8.1", "typescript": "^5.7.2", "typescript-eslint": "^8.46.4", - "vite": "^7.2.2" + "vite": "^7.2.2", + "vitest": "^2.1.8" }, "type": "module", "dependencies": { diff --git a/playwright.config.ts b/playwright.config.ts deleted file mode 100644 index 1c5d7a1..0000000 --- a/playwright.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { PlaywrightTestConfig } from '@playwright/test'; - -const config: PlaywrightTestConfig = { - webServer: { - command: 'npm run build && npm run preview', - port: 4173 - }, - testDir: 'tests', - testMatch: /(.+\.)?(test|spec)\.[jt]s/ -}; - -export default config; diff --git a/tests/test.ts b/tests/test.ts deleted file mode 100644 index 5816be4..0000000 --- a/tests/test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { expect, test } from '@playwright/test'; - -test('index page has expected h1', async ({ page }) => { - await page.goto('/'); - await expect(page.getByRole('heading', { name: 'Welcome to SvelteKit' })).toBeVisible(); -}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..90910aa --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + environment: 'node', + globals: true + } +}); From 1c520a39a2b7fcef103bdf2179911b9004f1561b Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:53:57 -0400 Subject: [PATCH 05/11] feat: extract geojson utilities and reducer core --- src/lib/geojson-utils.ts | 21 +++++++++++++++++++++ src/lib/reducer.ts | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/lib/geojson-utils.ts create mode 100644 src/lib/reducer.ts diff --git a/src/lib/geojson-utils.ts b/src/lib/geojson-utils.ts new file mode 100644 index 0000000..89a48e6 --- /dev/null +++ b/src/lib/geojson-utils.ts @@ -0,0 +1,21 @@ +export function formatFileSize(size: number): string { + if (size < 10 ** 3) { + return `${size} B`; + } else if (size < 10 ** 6) { + return `${(size / 10 ** 3).toFixed(2)} KB`; + } else if (size < 10 ** 9) { + return `${(size / 10 ** 6).toFixed(2)} MB`; + } else { + return `${(size / 10 ** 9).toFixed(2)} GB`; + } +} + +export function calculatePercentageReduction( + originalSize: number | null, + reducedSize: number | null +): number | null { + if (originalSize == null || reducedSize == null || originalSize === 0) { + return null; + } + return ((originalSize - reducedSize) / originalSize) * 100; +} diff --git a/src/lib/reducer.ts b/src/lib/reducer.ts new file mode 100644 index 0000000..8159946 --- /dev/null +++ b/src/lib/reducer.ts @@ -0,0 +1,32 @@ +import { truncate } from '@turf/truncate'; +import type { FeatureCollection } from 'geojson'; + +export type ReductionOptions = { + precision: number; + propertiesToKeep: Set; +}; + +export function reduceFeatureCollection( + fc: FeatureCollection, + options: ReductionOptions +): FeatureCollection { + const filtered = filterProperties(fc, options.propertiesToKeep); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return truncate(filtered as any, { precision: options.precision }); +} + +function filterProperties(fc: FeatureCollection, propertiesToKeep: Set): FeatureCollection { + return { + type: 'FeatureCollection', + features: fc.features.map((feature) => { + const props = feature.properties ?? {}; + const filteredProps: Record = {}; + for (const key of Object.keys(props)) { + if (propertiesToKeep.has(key)) { + filteredProps[key] = props[key]; + } + } + return { ...feature, properties: filteredProps }; + }) + }; +} From 68cebd3fec2246970b48fc97031ce57ebd8ef41e Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:54:06 -0400 Subject: [PATCH 06/11] test: add unit tests for utils and reducer --- src/lib/geojson-utils.test.ts | 50 +++++++++++++ src/lib/reducer.test.ts | 130 ++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 src/lib/geojson-utils.test.ts create mode 100644 src/lib/reducer.test.ts diff --git a/src/lib/geojson-utils.test.ts b/src/lib/geojson-utils.test.ts new file mode 100644 index 0000000..00ea092 --- /dev/null +++ b/src/lib/geojson-utils.test.ts @@ -0,0 +1,50 @@ +import { describe, it, expect } from 'vitest'; +import { formatFileSize, calculatePercentageReduction } from './geojson-utils'; + +describe('formatFileSize', () => { + it('formats bytes correctly', () => { + expect(formatFileSize(500)).toBe('500 B'); + }); + + it('formats kilobytes correctly', () => { + expect(formatFileSize(1500)).toBe('1.50 KB'); + }); + + it('formats megabytes correctly', () => { + expect(formatFileSize(1500000)).toBe('1.50 MB'); + }); + + it('formats gigabytes correctly', () => { + expect(formatFileSize(1500000000)).toBe('1.50 GB'); + }); +}); + +describe('calculatePercentageReduction', () => { + it('calculates percentage reduction correctly', () => { + expect(calculatePercentageReduction(1000, 500)).toBe(50); + }); + + it('returns null for zero original size', () => { + expect(calculatePercentageReduction(0, 500)).toBe(null); + }); + + it('returns null for null original size', () => { + expect(calculatePercentageReduction(null, 500)).toBe(null); + }); + + it('returns null for null reduced size', () => { + expect(calculatePercentageReduction(1000, null)).toBe(null); + }); + + it('returns null for both null', () => { + expect(calculatePercentageReduction(null, null)).toBe(null); + }); + + it('calculates 100% reduction correctly', () => { + expect(calculatePercentageReduction(1000, 0)).toBe(100); + }); + + it('calculates small reductions correctly', () => { + expect(calculatePercentageReduction(1000, 900)).toBe(10); + }); +}); diff --git a/src/lib/reducer.test.ts b/src/lib/reducer.test.ts new file mode 100644 index 0000000..17102b9 --- /dev/null +++ b/src/lib/reducer.test.ts @@ -0,0 +1,130 @@ +import { describe, it, expect } from 'vitest'; +import { reduceFeatureCollection } from './reducer'; +import type { FeatureCollection } from 'geojson'; + +describe('reduceFeatureCollection', () => { + it('filters properties and truncates coordinates', () => { + const input: FeatureCollection = { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [1.123456789, 2.987654321] + }, + properties: { + name: 'Test Point', + value: 42, + description: 'A test feature' + } + } + ] + }; + + const propertiesToKeep = new Set(['name', 'value']); + const result = reduceFeatureCollection(input, { + precision: 2, + propertiesToKeep + }); + + expect(result.type).toBe('FeatureCollection'); + expect(result.features).toHaveLength(1); + + const feature = result.features[0]; + expect(feature.properties).toEqual({ + name: 'Test Point', + value: 42 + }); + expect(feature.properties).not.toHaveProperty('description'); + + // Check that coordinates are truncated to 2 decimal places + if (feature.geometry.type === 'Point') { + expect(feature.geometry.coordinates[0]).toBe(1.12); + expect(feature.geometry.coordinates[1]).toBe(2.99); + } + }); + + it('handles features with null properties', () => { + const input: FeatureCollection = { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [1.0, 2.0] + }, + properties: null + } + ] + }; + + const result = reduceFeatureCollection(input, { + precision: 2, + propertiesToKeep: new Set(['name']) + }); + + expect(result.features).toHaveLength(1); + expect(result.features[0].properties).toEqual({}); + }); + + it('handles empty property set', () => { + const input: FeatureCollection = { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [1.123456, 2.987654] + }, + properties: { + name: 'Test', + value: 123 + } + } + ] + }; + + const result = reduceFeatureCollection(input, { + precision: 3, + propertiesToKeep: new Set() + }); + + expect(result.features[0].properties).toEqual({}); + }); + + it('handles multiple features', () => { + const input: FeatureCollection = { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [1.1111, 2.2222] + }, + properties: { name: 'A', keep: true, remove: 'x' } + }, + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [3.3333, 4.4444] + }, + properties: { name: 'B', keep: false, remove: 'y' } + } + ] + }; + + const result = reduceFeatureCollection(input, { + precision: 2, + propertiesToKeep: new Set(['name', 'keep']) + }); + + expect(result.features).toHaveLength(2); + expect(result.features[0].properties).toEqual({ name: 'A', keep: true }); + expect(result.features[1].properties).toEqual({ name: 'B', keep: false }); + }); +}); From a75faf4b4ffb479b03c34326444ad77ada009838 Mon Sep 17 00:00:00 2001 From: Jo Kroese Date: Fri, 28 Nov 2025 08:54:26 -0400 Subject: [PATCH 07/11] feat: improve GeoJSON reducer UI and state handling --- src/routes/+page.svelte | 262 +++++++++++++++++++++++++--------------- src/style.css | 64 ++++++---- 2 files changed, 202 insertions(+), 124 deletions(-) diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 7efe384..80329a3 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,44 +1,33 @@