diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..2ee25e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@duskflower:registry=https://git.duskflower.dev/api/packages/duskflower/npm/ \ No newline at end of file diff --git a/biome.json b/biome.json index 46a94d3..1c4089f 100644 --- a/biome.json +++ b/biome.json @@ -108,13 +108,7 @@ } } }, - "ignore": [ - "dist/**/*.ts", - "dist/**", - "**/*.mjs", - "eslint.config.js", - "**/*.js" - ] + "ignore": ["dist/**/*.ts", "dist/**", "**/*.mjs", "eslint.config.js", "**/*.js"] }, "javascript": { "formatter": { diff --git a/package.json b/package.json index 47d5729..8fc0e9d 100644 --- a/package.json +++ b/package.json @@ -15,30 +15,31 @@ "@biomejs/biome": "1.9.4", "@commitlint/cli": "^19.6.1", "@commitlint/config-conventional": "^19.6.0", - "@types/node": "^22.10.2", + "@types/node": "^22.10.7", "@types/sql.js": "^1.4.9", "autoprefixer": "^10.4.20", - "better-sqlite3": "^11.7.0", + "better-sqlite3": "^11.8.1", "husky": "^9.1.7", "kysely-codegen": "^0.17.0", - "lint-staged": "^15.2.11", - "postcss": "^8.4.49", + "lint-staged": "^15.4.1", + "postcss": "^8.5.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.2", - "vite": "^6.0.6", + "typescript": "^5.7.3", + "vite": "^6.0.9", "vite-plugin-solid": "^2.11.0", "vite-plugin-wasm": "^3.4.1" }, "dependencies": { - "@duskflower/signal-decrypt-backup-wasm": "^0.2.0", + "@duskflower/signal-decrypt-backup-wasm": "^0.2.1", "@kobalte/core": "^0.13.7", "@kobalte/tailwindcss": "^0.9.0", "@solid-primitives/refs": "^1.0.8", "@solid-primitives/storage": "^4.2.1", + "@solid-primitives/upload": "^0.0.117", "@solid-primitives/workers": "^0.3.0", "@solidjs/meta": "^0.29.4", - "@solidjs/router": "^0.15.2", - "@sqlite.org/sqlite-wasm": "3.47.2-build1", + "@solidjs/router": "^0.15.3", + "@sqlite.org/sqlite-wasm": "3.48.0-build2", "@tanstack/solid-table": "^8.20.5", "chart.js": "^4.4.7", "chartjs-chart-wordcloud": "^4.4.4", @@ -49,9 +50,9 @@ "date-fns": "^4.1.0", "kysely": "^0.27.5", "kysely-wasm": "^0.7.0", - "lucide-solid": "^0.469.0", - "seroval": "^1.1.1", - "solid-js": "^1.9.3", + "lucide-solid": "^0.473.0", + "seroval": "^1.2.0", + "solid-js": "^1.9.4", "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74284cb..c157142 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,35 +9,38 @@ importers: .: dependencies: '@duskflower/signal-decrypt-backup-wasm': - specifier: ^0.2.0 - version: 0.2.0 + specifier: ^0.2.1 + version: 0.2.1 '@kobalte/core': specifier: ^0.13.7 - version: 0.13.7(solid-js@1.9.3) + version: 0.13.7(solid-js@1.9.4) '@kobalte/tailwindcss': specifier: ^0.9.0 version: 0.9.0(tailwindcss@3.4.17) '@solid-primitives/refs': specifier: ^1.0.8 - version: 1.0.8(solid-js@1.9.3) + version: 1.0.8(solid-js@1.9.4) '@solid-primitives/storage': specifier: ^4.2.1 - version: 4.2.1(solid-js@1.9.3) + version: 4.2.1(solid-js@1.9.4) + '@solid-primitives/upload': + specifier: ^0.0.117 + version: 0.0.117(solid-js@1.9.4) '@solid-primitives/workers': specifier: ^0.3.0 - version: 0.3.0(solid-js@1.9.3) + version: 0.3.0(solid-js@1.9.4) '@solidjs/meta': specifier: ^0.29.4 - version: 0.29.4(solid-js@1.9.3) + version: 0.29.4(solid-js@1.9.4) '@solidjs/router': - specifier: ^0.15.2 - version: 0.15.2(solid-js@1.9.3) + specifier: ^0.15.3 + version: 0.15.3(solid-js@1.9.4) '@sqlite.org/sqlite-wasm': - specifier: 3.47.2-build1 - version: 3.47.2-build1 + specifier: 3.48.0-build2 + version: 3.48.0-build2 '@tanstack/solid-table': specifier: ^8.20.5 - version: 8.20.5(solid-js@1.9.3) + version: 8.20.5(solid-js@1.9.4) chart.js: specifier: ^4.4.7 version: 4.4.7 @@ -66,14 +69,14 @@ importers: specifier: ^0.7.0 version: 0.7.0(kysely@0.27.5) lucide-solid: - specifier: ^0.469.0 - version: 0.469.0(solid-js@1.9.3) + specifier: ^0.473.0 + version: 0.473.0(solid-js@1.9.4) seroval: - specifier: ^1.1.1 - version: 1.1.1 + specifier: ^1.2.0 + version: 1.2.0 solid-js: - specifier: ^1.9.3 - version: 1.9.3 + specifier: ^1.9.4 + version: 1.9.4 tailwind-merge: specifier: ^2.6.0 version: 2.6.0 @@ -86,49 +89,49 @@ importers: version: 1.9.4 '@commitlint/cli': specifier: ^19.6.1 - version: 19.6.1(@types/node@22.10.2)(typescript@5.7.2) + version: 19.6.1(@types/node@22.10.7)(typescript@5.7.3) '@commitlint/config-conventional': specifier: ^19.6.0 version: 19.6.0 '@types/node': - specifier: ^22.10.2 - version: 22.10.2 + specifier: ^22.10.7 + version: 22.10.7 '@types/sql.js': specifier: ^1.4.9 version: 1.4.9 autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) better-sqlite3: - specifier: ^11.7.0 - version: 11.7.0 + specifier: ^11.8.1 + version: 11.8.1 husky: specifier: ^9.1.7 version: 9.1.7 kysely-codegen: specifier: ^0.17.0 - version: 0.17.0(better-sqlite3@11.7.0)(kysely@0.27.5) + version: 0.17.0(better-sqlite3@11.8.1)(kysely@0.27.5) lint-staged: - specifier: ^15.2.11 - version: 15.2.11 + specifier: ^15.4.1 + version: 15.4.1 postcss: - specifier: ^8.4.49 - version: 8.4.49 + specifier: ^8.5.1 + version: 8.5.1 tailwindcss: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.2 - version: 5.7.2 + specifier: ^5.7.3 + version: 5.7.3 vite: - specifier: ^6.0.6 - version: 6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1) + specifier: ^6.0.9 + version: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0) vite-plugin-solid: specifier: ^2.11.0 - version: 2.11.0(solid-js@1.9.3)(vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1)) + version: 2.11.0(solid-js@1.9.4)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0)) vite-plugin-wasm: specifier: ^3.4.1 - version: 3.4.1(vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1)) + version: 3.4.1(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0)) packages: @@ -144,20 +147,20 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + '@babel/compat-data@7.26.5': + resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==} engines: {node: '>=6.9.0'} '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} + '@babel/generator@7.26.5': + resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.18.6': @@ -174,8 +177,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.9': @@ -194,8 +197,8 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + '@babel/parser@7.26.5': + resolution: {integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==} engines: {node: '>=6.0.0'} hasBin: true @@ -209,12 +212,12 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + '@babel/traverse@7.26.5': + resolution: {integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + '@babel/types@7.26.5': + resolution: {integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==} engines: {node: '>=6.9.0'} '@biomejs/biome@1.9.4': @@ -344,8 +347,8 @@ packages: peerDependencies: solid-js: ^1.8 - '@duskflower/signal-decrypt-backup-wasm@0.2.0': - resolution: {integrity: sha512-vVDdJZhVFSfEYTsKQsHO85p/zyx9TuVTj6jaPvH1MRYtvL5812VTSQ1MBeERP1XWyySrZhNyNtvy2dV1A0Z0kQ==, tarball: https://git.duskflower.dev/api/packages/duskflower/npm/%40duskflower%2Fsignal-decrypt-backup-wasm/-/0.2.0/signal-decrypt-backup-wasm-0.2.0.tgz} + '@duskflower/signal-decrypt-backup-wasm@0.2.1': + resolution: {integrity: sha512-lYwtubVOUU4kuJNw28Ns8N9Gh2nZB4j6BJz/vLpxF0Vc7zww3VIGnMCQToFWWSAwCs5+cABadeZMkv87SGfyQg==, tarball: https://git.duskflower.dev/api/packages/duskflower/npm/%40duskflower%2Fsignal-decrypt-backup-wasm/-/0.2.1/signal-decrypt-backup-wasm-0.2.1.tgz} '@esbuild/aix-ppc64@0.24.2': resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} @@ -497,17 +500,17 @@ packages: cpu: [x64] os: [win32] - '@floating-ui/core@1.6.8': - resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==} + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} - '@floating-ui/dom@1.6.12': - resolution: {integrity: sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==} + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} - '@floating-ui/utils@0.2.8': - resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} - '@internationalized/date@3.6.0': - resolution: {integrity: sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==} + '@internationalized/date@3.7.0': + resolution: {integrity: sha512-VJ5WS3fcVx0bejE/YHfbDKR/yawZgKqn/if+oEeLqNwBtPzVB06olkfcnojTmEMX+gTpH+FlQ69SHNitJ8/erQ==} '@internationalized/number@3.6.0': resolution: {integrity: sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==} @@ -568,98 +571,98 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@rollup/rollup-android-arm-eabi@4.29.1': - resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} + '@rollup/rollup-android-arm-eabi@4.31.0': + resolution: {integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.29.1': - resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} + '@rollup/rollup-android-arm64@4.31.0': + resolution: {integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.29.1': - resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} + '@rollup/rollup-darwin-arm64@4.31.0': + resolution: {integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.29.1': - resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} + '@rollup/rollup-darwin-x64@4.31.0': + resolution: {integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.29.1': - resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} + '@rollup/rollup-freebsd-arm64@4.31.0': + resolution: {integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.29.1': - resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} + '@rollup/rollup-freebsd-x64@4.31.0': + resolution: {integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': - resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} + '@rollup/rollup-linux-arm-gnueabihf@4.31.0': + resolution: {integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.29.1': - resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} + '@rollup/rollup-linux-arm-musleabihf@4.31.0': + resolution: {integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.29.1': - resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} + '@rollup/rollup-linux-arm64-gnu@4.31.0': + resolution: {integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.29.1': - resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} + '@rollup/rollup-linux-arm64-musl@4.31.0': + resolution: {integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': - resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} + '@rollup/rollup-linux-loongarch64-gnu@4.31.0': + resolution: {integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': - resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} + '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': + resolution: {integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.29.1': - resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} + '@rollup/rollup-linux-riscv64-gnu@4.31.0': + resolution: {integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.29.1': - resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} + '@rollup/rollup-linux-s390x-gnu@4.31.0': + resolution: {integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.29.1': - resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} + '@rollup/rollup-linux-x64-gnu@4.31.0': + resolution: {integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.29.1': - resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} + '@rollup/rollup-linux-x64-musl@4.31.0': + resolution: {integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.29.1': - resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} + '@rollup/rollup-win32-arm64-msvc@4.31.0': + resolution: {integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.29.1': - resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} + '@rollup/rollup-win32-ia32-msvc@4.31.0': + resolution: {integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.29.1': - resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} + '@rollup/rollup-win32-x64-msvc@4.31.0': + resolution: {integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==} cpu: [x64] os: [win32] @@ -668,8 +671,8 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/keyed@1.2.3': - resolution: {integrity: sha512-Tlm2wCKcXEVxqd1speWjPhGvDhuuo/VeWSvNF6r2h77BUOHRKmNwz9uVKKMQmYSaLwiptJTp+fPZY2dOVPWQRQ==} + '@solid-primitives/keyed@1.4.0': + resolution: {integrity: sha512-mYbYAyyDofdcoReCBDVjZu3D6WrglHBIOaQQKVhcHTmHnpfEWJ4a2qG7f+dMASoss9p5hBnsEgUdsPAm6oIY1g==} peerDependencies: solid-js: ^1.6.12 @@ -678,8 +681,8 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/media@2.2.9': - resolution: {integrity: sha512-QUmU62D4/d9YWx/4Dvr/UZasIkIpqNXz7wosA5GLmesRW9XlPa3G5M6uOmTw73SByHNTCw0D6x8bSdtvvLgzvQ==} + '@solid-primitives/media@2.2.10': + resolution: {integrity: sha512-zICx9lXvevycyHmzUp1AfrxmUsF27JGvDygf51mHUpvy/Y2SmxkM6UHKstBDlRSpLUhPTnF0iHCfdfne6g4Fow==} peerDependencies: solid-js: ^1.6.12 @@ -693,8 +696,8 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/resize-observer@2.0.26': - resolution: {integrity: sha512-KbPhwal6ML9OHeUTZszBbt6PYSMj89d4wVCLxlvDYL4U0+p+xlCEaqz6v9dkCwm/0Lb+Wed7W5T1dQZCP3JUUw==} + '@solid-primitives/resize-observer@2.0.27': + resolution: {integrity: sha512-RmusjHqoA4U6MKI/T9yBJVDttASHpWBki1+YwM9zGXEDBqbysTa3lZpnlB244LzphQmobgeXVS78v0KtXVsF9g==} peerDependencies: solid-js: ^1.6.12 @@ -703,8 +706,8 @@ packages: peerDependencies: solid-js: ^1.6.12 - '@solid-primitives/static-store@0.0.8': - resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==} + '@solid-primitives/static-store@0.0.9': + resolution: {integrity: sha512-8zaTXTEnQFqdwfkqWmGVb/OYgSTbRgxJSWQNfLuA+KnuW4RzTRQE2jzgnNJjJjaloruv9EHGvikmJzQJ5aOrEw==} peerDependencies: solid-js: ^1.6.12 @@ -725,6 +728,11 @@ packages: peerDependencies: solid-js: ^1.6.12 + '@solid-primitives/upload@0.0.117': + resolution: {integrity: sha512-szDksm4u67JgiMtkpX8RPccxqfid4OCQ/zpJ1yB1PMFmenLjz8YKldGIIt+Yn3bEcfHBbdkPa2uu/y2FAdPeSw==} + peerDependencies: + solid-js: ^1.6.12 + '@solid-primitives/utils@6.2.3': resolution: {integrity: sha512-CqAwKb2T5Vi72+rhebSsqNZ9o67buYRdEJrIFzRXz3U59QqezuuxPsyzTSVCacwS5Pf109VRsgCJQoxKRoECZQ==} peerDependencies: @@ -740,13 +748,13 @@ packages: peerDependencies: solid-js: '>=1.8.4' - '@solidjs/router@0.15.2': - resolution: {integrity: sha512-UWtliRvOnjfYMONQcTGwtf6BEud5QlF0oHC5L+kcSGYn0jARH5KzC3+3LLZ0al7oQo/5Rc50ssMswPuAuxFvAA==} + '@solidjs/router@0.15.3': + resolution: {integrity: sha512-iEbW8UKok2Oio7o6Y4VTzLj+KFCmQPGEpm1fS3xixwFBdclFVBvaQVeibl1jys4cujfAK5Kn6+uG2uBm3lxOMw==} peerDependencies: solid-js: ^1.8.6 - '@sqlite.org/sqlite-wasm@3.47.2-build1': - resolution: {integrity: sha512-jDRWfcPYmOsJGN1GplXbw5ZlB+PSzihw1EDElzqkenSI+yK7QYOfwhzYnBR9H8Bv5MHi6EUMb4t3CnLfXCSA8A==} + '@sqlite.org/sqlite-wasm@3.48.0-build2': + resolution: {integrity: sha512-nltoBHBbLZmI3VioebwUYaSugTpVcHPvL9rYa0uSkqmiLF0b9ZEM8l9NzoWAHlS6qTMqhGHFtX1lWJ/egyjohQ==} hasBin: true '@swc/helpers@0.5.15': @@ -792,8 +800,8 @@ packages: '@types/hammerjs@2.0.46': resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} - '@types/node@22.10.2': - resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} + '@types/node@22.10.7': + resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} '@types/sql.js@1.4.9': resolution: {integrity: sha512-ep8b36RKHlgWPqjNG9ToUrPiwkhwh0AEzy883mO5Xnd+cL6VBH1EvSjBAAuxLUFF2Vn/moE3Me6v9E1Lo+48GQ==} @@ -852,8 +860,8 @@ packages: peerDependencies: postcss: ^8.1.0 - babel-plugin-jsx-dom-expressions@0.39.3: - resolution: {integrity: sha512-6RzmSu21zYPlV2gNwzjGG9FgODtt9hIWnx7L//OIioIEuRcnpDZoY8Tr+I81Cy1SrH4qoDyKpwHHo6uAMAeyPA==} + babel-plugin-jsx-dom-expressions@0.39.5: + resolution: {integrity: sha512-dwyVkszHRsZCXfFusu3xq1DJS7twhgLrjEpMC1gtTfJG1xSrMMKWWhdl1SFFFNXrvYDsoHiRxSbku/TzLxHNxg==} peerDependencies: '@babel/core': ^7.20.12 @@ -868,8 +876,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - better-sqlite3@11.7.0: - resolution: {integrity: sha512-mXpa5jnIKKHeoGzBrUJrc65cXFKcILGZpU3FXR0pradUEm9MA7UZz02qfEejaMcm9iXrSOCenwwYMJ/tZ1y5Ig==} + better-sqlite3@11.8.1: + resolution: {integrity: sha512-9BxNaBkblMjhJW8sMRZxnxVTRgbRmssZW0Oxc1MPBTfiR+WW21e2Mk4qu8CzrcZb1LwPCnFsfDEzq+SNcBU8eg==} binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} @@ -891,8 +899,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.2: - resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -907,8 +915,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001687: - resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + caniuse-lite@1.0.30001695: + resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -918,8 +926,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} chart.js@4.4.7: @@ -1101,8 +1109,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.71: - resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} + electron-to-chromium@1.5.83: + resolution: {integrity: sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -1158,15 +1166,15 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-uri@3.0.3: - resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fast-uri@3.0.5: + resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} - fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fastq@1.18.0: + resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -1315,8 +1323,8 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.16.0: - resolution: {integrity: sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} is-extglob@2.1.1: @@ -1380,8 +1388,8 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} engines: {node: '>=6'} hasBin: true @@ -1450,8 +1458,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lint-staged@15.2.11: - resolution: {integrity: sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ==} + lint-staged@15.4.1: + resolution: {integrity: sha512-P8yJuVRyLrm5KxCtFx+gjI5Bil+wO7wnTl7C3bXhvtTaAFGirzeB24++D0wGoUwxrUKecNiehemgCob9YL39NA==} engines: {node: '>=18.12.0'} hasBin: true @@ -1504,8 +1512,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-solid@0.469.0: - resolution: {integrity: sha512-kBZl5AFg02g/wcwaapTwOwjHw0VvyyFmZm3BE6McKjs0GjiauWtjYbrhf2bCtDpScEtcinhIG/LpRExBlIV3fA==} + lucide-solid@0.473.0: + resolution: {integrity: sha512-AcmBZle73Z9HOtKI3uXBJ6aRem1kVE4XHuiVrhrIToi8jLlycBewUel6ToBUe2s/5mBtRfMe7ZeVYy6PMqyuOA==} peerDependencies: solid-js: ^1.4.7 @@ -1571,12 +1579,12 @@ packages: napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - node-abi@3.71.0: - resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} + node-abi@3.73.0: + resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} engines: {node: '>=10'} - node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -1715,8 +1723,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} prebuild-install@7.1.2: @@ -1765,8 +1773,9 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve@1.22.9: - resolution: {integrity: sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} hasBin: true restore-cursor@5.1.0: @@ -1780,8 +1789,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.29.1: - resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} + rollup@4.31.0: + resolution: {integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1800,14 +1809,14 @@ packages: engines: {node: '>=10'} hasBin: true - seroval-plugins@1.1.1: - resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} + seroval-plugins@1.2.0: + resolution: {integrity: sha512-hULTbfzSe81jGWLH8TAJjkEvw6JWMqOo9Uq+4V4vg+HNq53hyHldM9ZOfjdzokcFysiTp9aFdV2vJpZFqKeDjQ==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.1.1: - resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} + seroval@1.2.0: + resolution: {integrity: sha512-GURoU99ko2UiAgUC3qDCk59Jb3Ss4Po8VIMGkG8j5PFo2Q7y0YSMP8QG9NuL/fJCoTz9V1XZUbpNIMXPOfaGpA==} engines: {node: '>=10'} shebang-command@2.0.0: @@ -1845,8 +1854,8 @@ packages: resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} engines: {node: '>=18'} - solid-js@1.9.3: - resolution: {integrity: sha512-5ba3taPoZGt9GY3YlsCB24kCg0Lv/rie/HTD4kG6h4daZZz7+yK02xn8Vx8dLYBc9i6Ps5JwAbEiqjmKaLB3Ag==} + solid-js@1.9.4: + resolution: {integrity: sha512-ipQl8FJ31bFUoBNScDQTG3BjN6+9Rg+Q+f10bUbnO6EOTTf5NGerJeHc7wyu5I4RMHEl/WwZwUmy/PTRgxxZ8g==} solid-presence@0.1.8: resolution: {integrity: sha512-pWGtXUFWYYUZNbg5YpG5vkQJyOtzn2KXhxYaMx/4I+lylTLYkITOLevaCwMRN+liCVk0pqB6EayLWojNqBFECA==} @@ -1936,8 +1945,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -1957,8 +1966,8 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinyexec@0.3.1: - resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -1973,8 +1982,8 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -1985,8 +1994,8 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + update-browserslist-db@1.1.2: + resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -2012,8 +2021,8 @@ packages: peerDependencies: vite: ^2 || ^3 || ^4 || ^5 || ^6 - vite@6.0.6: - resolution: {integrity: sha512-NSjmUuckPmDU18bHz7QZ+bTYhRR0iA72cs2QAxCqDpafJ0S6qetco0LB3WW2OxlMHS0JmAv+yZ/R3uPmMyGTjQ==} + vite@6.0.9: + resolution: {integrity: sha512-MSgUxHcaXLtnBPktkbUSoQUANApKYuxZ6DrbVENlIorbhL2dZydTLaZ01tjUoE3szeFzlFk9ANOKk0xurh4MKA==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -2052,8 +2061,8 @@ packages: yaml: optional: true - vitefu@1.0.4: - resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} + vitefu@1.0.5: + resolution: {integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: @@ -2092,6 +2101,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -2119,20 +2133,20 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.3': {} + '@babel/compat-data@7.26.5': {} '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/helper-compilation-targets': 7.25.9 + '@babel/generator': 7.26.5 + '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/parser': 7.26.5 '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 convert-source-map: 2.0.0 debug: 4.4.0 gensync: 1.0.0-beta.2 @@ -2141,30 +2155,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.26.3': + '@babel/generator@7.26.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.0.2 + jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.25.9': + '@babel/helper-compilation-targets@7.26.5': dependencies: - '@babel/compat-data': 7.26.3 + '@babel/compat-data': 7.26.5 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.2 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.5 + '@babel/types': 7.26.5 transitivePeerDependencies: - supports-color @@ -2173,11 +2187,11 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.5 transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-plugin-utils@7.26.5': {} '@babel/helper-string-parser@7.25.9': {} @@ -2188,36 +2202,36 @@ snapshots: '@babel/helpers@7.26.0': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 - '@babel/parser@7.26.3': + '@babel/parser@7.26.5': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 - '@babel/traverse@7.26.4': + '@babel/traverse@7.26.5': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.3': + '@babel/types@7.26.5': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 @@ -2257,14 +2271,14 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true - '@commitlint/cli@19.6.1(@types/node@22.10.2)(typescript@5.7.2)': + '@commitlint/cli@19.6.1(@types/node@22.10.7)(typescript@5.7.3)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.6.0 - '@commitlint/load': 19.6.1(@types/node@22.10.2)(typescript@5.7.2) + '@commitlint/load': 19.6.1(@types/node@22.10.7)(typescript@5.7.3) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 - tinyexec: 0.3.1 + tinyexec: 0.3.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' @@ -2294,7 +2308,7 @@ snapshots: '@commitlint/format@19.5.0': dependencies: '@commitlint/types': 19.5.0 - chalk: 5.3.0 + chalk: 5.4.1 '@commitlint/is-ignored@19.6.0': dependencies: @@ -2308,15 +2322,15 @@ snapshots: '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.6.1(@types/node@22.10.2)(typescript@5.7.2)': + '@commitlint/load@19.6.1(@types/node@22.10.7)(typescript@5.7.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.7.2) - cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.7)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -2338,7 +2352,7 @@ snapshots: '@commitlint/types': 19.5.0 git-raw-commits: 4.0.0 minimist: 1.2.8 - tinyexec: 0.3.1 + tinyexec: 0.3.2 '@commitlint/resolve-extends@19.5.0': dependencies: @@ -2365,14 +2379,14 @@ snapshots: '@commitlint/types@19.5.0': dependencies: '@types/conventional-commits-parser': 5.0.1 - chalk: 5.3.0 + chalk: 5.4.1 - '@corvu/utils@0.4.2(solid-js@1.9.3)': + '@corvu/utils@0.4.2(solid-js@1.9.4)': dependencies: - '@floating-ui/dom': 1.6.12 - solid-js: 1.9.3 + '@floating-ui/dom': 1.6.13 + solid-js: 1.9.4 - '@duskflower/signal-decrypt-backup-wasm@0.2.0': {} + '@duskflower/signal-decrypt-backup-wasm@0.2.1': {} '@esbuild/aix-ppc64@0.24.2': optional: true @@ -2449,18 +2463,18 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@floating-ui/core@1.6.8': + '@floating-ui/core@1.6.9': dependencies: - '@floating-ui/utils': 0.2.8 + '@floating-ui/utils': 0.2.9 - '@floating-ui/dom@1.6.12': + '@floating-ui/dom@1.6.13': dependencies: - '@floating-ui/core': 1.6.8 - '@floating-ui/utils': 0.2.8 + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 - '@floating-ui/utils@0.2.8': {} + '@floating-ui/utils@0.2.9': {} - '@internationalized/date@3.6.0': + '@internationalized/date@3.7.0': dependencies: '@swc/helpers': 0.5.15 @@ -2494,32 +2508,32 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@kobalte/core@0.13.7(solid-js@1.9.3)': + '@kobalte/core@0.13.7(solid-js@1.9.4)': dependencies: - '@floating-ui/dom': 1.6.12 - '@internationalized/date': 3.6.0 + '@floating-ui/dom': 1.6.13 + '@internationalized/date': 3.7.0 '@internationalized/number': 3.6.0 - '@kobalte/utils': 0.9.1(solid-js@1.9.3) - '@solid-primitives/props': 3.1.11(solid-js@1.9.3) - '@solid-primitives/resize-observer': 2.0.26(solid-js@1.9.3) - solid-js: 1.9.3 - solid-presence: 0.1.8(solid-js@1.9.3) - solid-prevent-scroll: 0.1.10(solid-js@1.9.3) + '@kobalte/utils': 0.9.1(solid-js@1.9.4) + '@solid-primitives/props': 3.1.11(solid-js@1.9.4) + '@solid-primitives/resize-observer': 2.0.27(solid-js@1.9.4) + solid-js: 1.9.4 + solid-presence: 0.1.8(solid-js@1.9.4) + solid-prevent-scroll: 0.1.10(solid-js@1.9.4) '@kobalte/tailwindcss@0.9.0(tailwindcss@3.4.17)': dependencies: tailwindcss: 3.4.17 - '@kobalte/utils@0.9.1(solid-js@1.9.3)': + '@kobalte/utils@0.9.1(solid-js@1.9.4)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.3) - '@solid-primitives/keyed': 1.2.3(solid-js@1.9.3) - '@solid-primitives/map': 0.4.13(solid-js@1.9.3) - '@solid-primitives/media': 2.2.9(solid-js@1.9.3) - '@solid-primitives/props': 3.1.11(solid-js@1.9.3) - '@solid-primitives/refs': 1.0.8(solid-js@1.9.3) - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.4) + '@solid-primitives/keyed': 1.4.0(solid-js@1.9.4) + '@solid-primitives/map': 0.4.13(solid-js@1.9.4) + '@solid-primitives/media': 2.2.10(solid-js@1.9.4) + '@solid-primitives/props': 3.1.11(solid-js@1.9.4) + '@solid-primitives/refs': 1.0.8(solid-js@1.9.4) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 '@kurkle/color@0.3.4': {} @@ -2533,181 +2547,186 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 + fastq: 1.18.0 '@pkgjs/parseargs@0.11.0': optional: true - '@rollup/rollup-android-arm-eabi@4.29.1': + '@rollup/rollup-android-arm-eabi@4.31.0': optional: true - '@rollup/rollup-android-arm64@4.29.1': + '@rollup/rollup-android-arm64@4.31.0': optional: true - '@rollup/rollup-darwin-arm64@4.29.1': + '@rollup/rollup-darwin-arm64@4.31.0': optional: true - '@rollup/rollup-darwin-x64@4.29.1': + '@rollup/rollup-darwin-x64@4.31.0': optional: true - '@rollup/rollup-freebsd-arm64@4.29.1': + '@rollup/rollup-freebsd-arm64@4.31.0': optional: true - '@rollup/rollup-freebsd-x64@4.29.1': + '@rollup/rollup-freebsd-x64@4.31.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + '@rollup/rollup-linux-arm-gnueabihf@4.31.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.29.1': + '@rollup/rollup-linux-arm-musleabihf@4.31.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.29.1': + '@rollup/rollup-linux-arm64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.29.1': + '@rollup/rollup-linux-arm64-musl@4.31.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + '@rollup/rollup-linux-loongarch64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.29.1': + '@rollup/rollup-linux-riscv64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.29.1': + '@rollup/rollup-linux-s390x-gnu@4.31.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.29.1': + '@rollup/rollup-linux-x64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-x64-musl@4.29.1': + '@rollup/rollup-linux-x64-musl@4.31.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.29.1': + '@rollup/rollup-win32-arm64-msvc@4.31.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.29.1': + '@rollup/rollup-win32-ia32-msvc@4.31.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.29.1': + '@rollup/rollup-win32-x64-msvc@4.31.0': optional: true - '@solid-primitives/event-listener@2.3.3(solid-js@1.9.3)': + '@solid-primitives/event-listener@2.3.3(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/keyed@1.2.3(solid-js@1.9.3)': + '@solid-primitives/keyed@1.4.0(solid-js@1.9.4)': dependencies: - solid-js: 1.9.3 + solid-js: 1.9.4 - '@solid-primitives/map@0.4.13(solid-js@1.9.3)': + '@solid-primitives/map@0.4.13(solid-js@1.9.4)': dependencies: - '@solid-primitives/trigger': 1.1.0(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/trigger': 1.1.0(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/media@2.2.9(solid-js@1.9.3)': + '@solid-primitives/media@2.2.10(solid-js@1.9.4)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.3) - '@solid-primitives/rootless': 1.4.5(solid-js@1.9.3) - '@solid-primitives/static-store': 0.0.8(solid-js@1.9.3) - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.4) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.4) + '@solid-primitives/static-store': 0.0.9(solid-js@1.9.4) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/props@3.1.11(solid-js@1.9.3)': + '@solid-primitives/props@3.1.11(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/refs@1.0.8(solid-js@1.9.3)': + '@solid-primitives/refs@1.0.8(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/resize-observer@2.0.26(solid-js@1.9.3)': + '@solid-primitives/resize-observer@2.0.27(solid-js@1.9.4)': dependencies: - '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.3) - '@solid-primitives/rootless': 1.4.5(solid-js@1.9.3) - '@solid-primitives/static-store': 0.0.8(solid-js@1.9.3) - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/event-listener': 2.3.3(solid-js@1.9.4) + '@solid-primitives/rootless': 1.4.5(solid-js@1.9.4) + '@solid-primitives/static-store': 0.0.9(solid-js@1.9.4) + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/rootless@1.4.5(solid-js@1.9.3)': + '@solid-primitives/rootless@1.4.5(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/static-store@0.0.8(solid-js@1.9.3)': + '@solid-primitives/static-store@0.0.9(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/storage@4.2.1(solid-js@1.9.3)': + '@solid-primitives/storage@4.2.1(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/trigger@1.1.0(solid-js@1.9.3)': + '@solid-primitives/trigger@1.1.0(solid-js@1.9.4)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.9.3) - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/utils@6.2.3(solid-js@1.9.3)': + '@solid-primitives/upload@0.0.117(solid-js@1.9.4)': dependencies: - solid-js: 1.9.3 + '@solid-primitives/utils': 6.2.3(solid-js@1.9.4) + solid-js: 1.9.4 - '@solid-primitives/workers@0.3.0(solid-js@1.9.3)': + '@solid-primitives/utils@6.2.3(solid-js@1.9.4)': dependencies: - solid-js: 1.9.3 + solid-js: 1.9.4 - '@solidjs/meta@0.29.4(solid-js@1.9.3)': + '@solid-primitives/workers@0.3.0(solid-js@1.9.4)': dependencies: - solid-js: 1.9.3 + solid-js: 1.9.4 - '@solidjs/router@0.15.2(solid-js@1.9.3)': + '@solidjs/meta@0.29.4(solid-js@1.9.4)': dependencies: - solid-js: 1.9.3 + solid-js: 1.9.4 - '@sqlite.org/sqlite-wasm@3.47.2-build1': {} + '@solidjs/router@0.15.3(solid-js@1.9.4)': + dependencies: + solid-js: 1.9.4 + + '@sqlite.org/sqlite-wasm@3.48.0-build2': {} '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - '@tanstack/solid-table@8.20.5(solid-js@1.9.3)': + '@tanstack/solid-table@8.20.5(solid-js@1.9.4)': dependencies: '@tanstack/table-core': 8.20.5 - solid-js: 1.9.3 + solid-js: 1.9.4 '@tanstack/table-core@8.20.5': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 '@types/d3-cloud@1.2.9': dependencies: @@ -2721,14 +2740,14 @@ snapshots: '@types/hammerjs@2.0.46': {} - '@types/node@22.10.2': + '@types/node@22.10.7': dependencies: undici-types: 6.20.0 '@types/sql.js@1.4.9': dependencies: '@types/emscripten': 1.39.13 - '@types/node': 22.10.2 + '@types/node': 22.10.7 JSONStream@1.3.5: dependencies: @@ -2738,7 +2757,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.3 + fast-uri: 3.0.5 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -2773,22 +2792,22 @@ snapshots: array-ify@1.0.0: {} - autoprefixer@10.4.20(postcss@8.4.49): + autoprefixer@10.4.20(postcss@8.5.1): dependencies: - browserslist: 4.24.2 - caniuse-lite: 1.0.30001687 + browserslist: 4.24.4 + caniuse-lite: 1.0.30001695 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.1 postcss-value-parser: 4.2.0 - babel-plugin-jsx-dom-expressions@0.39.3(@babel/core@7.26.0): + babel-plugin-jsx-dom-expressions@0.39.5(@babel/core@7.26.0): dependencies: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.3 + '@babel/types': 7.26.5 html-entities: 2.3.3 parse5: 7.2.1 validate-html-nesting: 1.2.2 @@ -2796,13 +2815,13 @@ snapshots: babel-preset-solid@1.9.3(@babel/core@7.26.0): dependencies: '@babel/core': 7.26.0 - babel-plugin-jsx-dom-expressions: 0.39.3(@babel/core@7.26.0) + babel-plugin-jsx-dom-expressions: 0.39.5(@babel/core@7.26.0) balanced-match@1.0.2: {} base64-js@1.5.1: {} - better-sqlite3@11.7.0: + better-sqlite3@11.8.1: dependencies: bindings: 1.5.0 prebuild-install: 7.1.2 @@ -2832,12 +2851,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.2: + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001687 - electron-to-chromium: 1.5.71 - node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.2) + caniuse-lite: 1.0.30001695 + electron-to-chromium: 1.5.83 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) buffer@5.7.1: dependencies: @@ -2848,7 +2867,7 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001687: {} + caniuse-lite@1.0.30001695: {} chalk@2.4.2: dependencies: @@ -2861,7 +2880,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} + chalk@5.4.1: {} chart.js@4.4.7: dependencies: @@ -2960,21 +2979,21 @@ snapshots: convert-source-map@2.0.0: {} - cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.2)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.7)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): dependencies: - '@types/node': 22.10.2 - cosmiconfig: 9.0.0(typescript@5.7.2) + '@types/node': 22.10.7 + cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 2.4.2 - typescript: 5.7.2 + typescript: 5.7.3 - cosmiconfig@9.0.0(typescript@5.7.2): + cosmiconfig@9.0.0(typescript@5.7.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.7.3 cross-spawn@7.0.6: dependencies: @@ -3026,7 +3045,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.71: {} + electron-to-chromium@1.5.83: {} emoji-regex@10.4.0: {} @@ -3098,7 +3117,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-glob@3.3.2: + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -3106,9 +3125,9 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-uri@3.0.3: {} + fast-uri@3.0.5: {} - fastq@1.17.1: + fastq@1.18.0: dependencies: reusify: 1.0.4 @@ -3240,7 +3259,7 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.16.0: + is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -3288,7 +3307,7 @@ snapshots: dependencies: argparse: 2.0.1 - jsesc@3.0.2: {} + jsesc@3.1.0: {} json-parse-even-better-errors@2.3.1: {} @@ -3298,7 +3317,7 @@ snapshots: jsonparse@1.3.1: {} - kysely-codegen@0.17.0(better-sqlite3@11.7.0)(kysely@0.27.5): + kysely-codegen@0.17.0(better-sqlite3@11.8.1)(kysely@0.27.5): dependencies: chalk: 4.1.2 dotenv: 16.4.7 @@ -3309,7 +3328,7 @@ snapshots: minimist: 1.2.8 pluralize: 8.0.0 optionalDependencies: - better-sqlite3: 11.7.0 + better-sqlite3: 11.8.1 kysely-wasm@0.7.0(kysely@0.27.5): dependencies: @@ -3321,9 +3340,9 @@ snapshots: lines-and-columns@1.2.4: {} - lint-staged@15.2.11: + lint-staged@15.4.1: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 debug: 4.4.0 execa: 8.0.1 @@ -3383,9 +3402,9 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-solid@0.469.0(solid-js@1.9.3): + lucide-solid@0.473.0(solid-js@1.9.4): dependencies: - solid-js: 1.9.3 + solid-js: 1.9.4 meow@12.1.1: {} @@ -3434,11 +3453,11 @@ snapshots: napi-build-utils@1.0.2: {} - node-abi@3.71.0: + node-abi@3.73.0: dependencies: semver: 7.6.3 - node-releases@2.0.18: {} + node-releases@2.0.19: {} normalize-path@3.0.0: {} @@ -3516,28 +3535,28 @@ snapshots: pluralize@8.0.0: {} - postcss-import@15.1.0(postcss@8.4.49): + postcss-import@15.1.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.9 + resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.4.49): + postcss-js@4.0.1(postcss@8.5.1): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.49 + postcss: 8.5.1 - postcss-load-config@4.0.2(postcss@8.4.49): + postcss-load-config@4.0.2(postcss@8.5.1): dependencies: lilconfig: 3.1.3 - yaml: 2.6.1 + yaml: 2.7.0 optionalDependencies: - postcss: 8.4.49 + postcss: 8.5.1 - postcss-nested@6.2.0(postcss@8.4.49): + postcss-nested@6.2.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -3547,7 +3566,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.49: + postcss@8.5.1: dependencies: nanoid: 3.3.8 picocolors: 1.1.1 @@ -3561,11 +3580,11 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.71.0 + node-abi: 3.73.0 pump: 3.0.2 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 2.1.1 + tar-fs: 2.1.2 tunnel-agent: 0.6.0 pump@3.0.2: @@ -3598,7 +3617,7 @@ snapshots: rechoir@0.6.2: dependencies: - resolve: 1.22.9 + resolve: 1.22.10 require-directory@2.1.1: {} @@ -3608,9 +3627,9 @@ snapshots: resolve-from@5.0.0: {} - resolve@1.22.9: + resolve@1.22.10: dependencies: - is-core-module: 2.16.0 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -3623,29 +3642,29 @@ snapshots: rfdc@1.4.1: {} - rollup@4.29.1: + rollup@4.31.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.29.1 - '@rollup/rollup-android-arm64': 4.29.1 - '@rollup/rollup-darwin-arm64': 4.29.1 - '@rollup/rollup-darwin-x64': 4.29.1 - '@rollup/rollup-freebsd-arm64': 4.29.1 - '@rollup/rollup-freebsd-x64': 4.29.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 - '@rollup/rollup-linux-arm-musleabihf': 4.29.1 - '@rollup/rollup-linux-arm64-gnu': 4.29.1 - '@rollup/rollup-linux-arm64-musl': 4.29.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 - '@rollup/rollup-linux-riscv64-gnu': 4.29.1 - '@rollup/rollup-linux-s390x-gnu': 4.29.1 - '@rollup/rollup-linux-x64-gnu': 4.29.1 - '@rollup/rollup-linux-x64-musl': 4.29.1 - '@rollup/rollup-win32-arm64-msvc': 4.29.1 - '@rollup/rollup-win32-ia32-msvc': 4.29.1 - '@rollup/rollup-win32-x64-msvc': 4.29.1 + '@rollup/rollup-android-arm-eabi': 4.31.0 + '@rollup/rollup-android-arm64': 4.31.0 + '@rollup/rollup-darwin-arm64': 4.31.0 + '@rollup/rollup-darwin-x64': 4.31.0 + '@rollup/rollup-freebsd-arm64': 4.31.0 + '@rollup/rollup-freebsd-x64': 4.31.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.31.0 + '@rollup/rollup-linux-arm-musleabihf': 4.31.0 + '@rollup/rollup-linux-arm64-gnu': 4.31.0 + '@rollup/rollup-linux-arm64-musl': 4.31.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.31.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.31.0 + '@rollup/rollup-linux-riscv64-gnu': 4.31.0 + '@rollup/rollup-linux-s390x-gnu': 4.31.0 + '@rollup/rollup-linux-x64-gnu': 4.31.0 + '@rollup/rollup-linux-x64-musl': 4.31.0 + '@rollup/rollup-win32-arm64-msvc': 4.31.0 + '@rollup/rollup-win32-ia32-msvc': 4.31.0 + '@rollup/rollup-win32-x64-msvc': 4.31.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -3658,11 +3677,11 @@ snapshots: semver@7.6.3: {} - seroval-plugins@1.1.1(seroval@1.1.1): + seroval-plugins@1.2.0(seroval@1.2.0): dependencies: - seroval: 1.1.1 + seroval: 1.2.0 - seroval@1.1.1: {} + seroval@1.2.0: {} shebang-command@2.0.0: dependencies: @@ -3698,28 +3717,28 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - solid-js@1.9.3: + solid-js@1.9.4: dependencies: csstype: 3.1.3 - seroval: 1.1.1 - seroval-plugins: 1.1.1(seroval@1.1.1) + seroval: 1.2.0 + seroval-plugins: 1.2.0(seroval@1.2.0) - solid-presence@0.1.8(solid-js@1.9.3): + solid-presence@0.1.8(solid-js@1.9.4): dependencies: - '@corvu/utils': 0.4.2(solid-js@1.9.3) - solid-js: 1.9.3 + '@corvu/utils': 0.4.2(solid-js@1.9.4) + solid-js: 1.9.4 - solid-prevent-scroll@0.1.10(solid-js@1.9.3): + solid-prevent-scroll@0.1.10(solid-js@1.9.4): dependencies: - '@corvu/utils': 0.4.2(solid-js@1.9.3) - solid-js: 1.9.3 + '@corvu/utils': 0.4.2(solid-js@1.9.4) + solid-js: 1.9.4 - solid-refresh@0.6.3(solid-js@1.9.3): + solid-refresh@0.6.3(solid-js@1.9.4): dependencies: - '@babel/generator': 7.26.3 + '@babel/generator': 7.26.5 '@babel/helper-module-imports': 7.25.9 - '@babel/types': 7.26.3 - solid-js: 1.9.3 + '@babel/types': 7.26.5 + solid-js: 1.9.4 transitivePeerDependencies: - supports-color @@ -3796,7 +3815,7 @@ snapshots: chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.21.7 @@ -3805,18 +3824,18 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-nested: 6.2.0(postcss@8.4.49) + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) postcss-selector-parser: 6.1.2 - resolve: 1.22.9 + resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - ts-node - tar-fs@2.1.1: + tar-fs@2.1.2: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -3843,7 +3862,7 @@ snapshots: through@2.3.8: {} - tinyexec@0.3.1: {} + tinyexec@0.3.2: {} to-regex-range@5.0.1: dependencies: @@ -3857,15 +3876,15 @@ snapshots: dependencies: safe-buffer: 5.2.1 - typescript@5.7.2: {} + typescript@5.7.3: {} undici-types@6.20.0: {} unicorn-magic@0.1.0: {} - update-browserslist-db@1.1.1(browserslist@4.24.2): + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: - browserslist: 4.24.2 + browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -3873,37 +3892,37 @@ snapshots: validate-html-nesting@1.2.2: {} - vite-plugin-solid@2.11.0(solid-js@1.9.3)(vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1)): + vite-plugin-solid@2.11.0(solid-js@1.9.4)(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0)): dependencies: '@babel/core': 7.26.0 '@types/babel__core': 7.20.5 babel-preset-solid: 1.9.3(@babel/core@7.26.0) merge-anything: 5.1.7 - solid-js: 1.9.3 - solid-refresh: 0.6.3(solid-js@1.9.3) - vite: 6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1) - vitefu: 1.0.4(vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1)) + solid-js: 1.9.4 + solid-refresh: 0.6.3(solid-js@1.9.4) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0) + vitefu: 1.0.5(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0)) transitivePeerDependencies: - supports-color - vite-plugin-wasm@3.4.1(vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1)): + vite-plugin-wasm@3.4.1(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0)): dependencies: - vite: 6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0) - vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1): + vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0): dependencies: esbuild: 0.24.2 - postcss: 8.4.49 - rollup: 4.29.1 + postcss: 8.5.1 + rollup: 4.31.0 optionalDependencies: - '@types/node': 22.10.2 + '@types/node': 22.10.7 fsevents: 2.3.3 jiti: 2.4.2 - yaml: 2.6.1 + yaml: 2.7.0 - vitefu@1.0.4(vite@6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1)): + vitefu@1.0.5(vite@6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0)): optionalDependencies: - vite: 6.0.6(@types/node@22.10.2)(jiti@2.4.2)(yaml@2.6.1) + vite: 6.0.9(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0) which@2.0.2: dependencies: @@ -3935,6 +3954,8 @@ snapshots: yaml@2.6.1: {} + yaml@2.7.0: {} + yargs-parser@21.1.1: {} yargs@17.7.2: diff --git a/src/db-queries.ts b/src/db/db-queries.ts similarity index 67% rename from src/db-queries.ts rename to src/db/db-queries.ts index c8fc830..19af65b 100644 --- a/src/db-queries.ts +++ b/src/db/db-queries.ts @@ -1,12 +1,8 @@ import { sql, type NotNull } from "kysely"; -import { db, kyselyDb, SELF_ID, setDbHash } from "./db"; -import { cached } from "./lib/db-cache"; -import { hashString } from "./lib/hash"; +import { db, kyselyDb, SELF_ID } from "./db"; +import { cached } from "../lib/db-cache"; -export const loadDb = ( - statements: string[], - progressCallback?: (percentage: number) => void, -) => { +export const loadDb = (statements: string[], progressCallback?: (percentage: number) => void) => { const length = statements.length; let percentage = 0; @@ -15,20 +11,19 @@ export const loadDb = ( const newPercentage = Math.round((i / length) * 100); try { - db.exec(statement); + if (progressCallback && newPercentage !== percentage) { + progressCallback(newPercentage); - if (newPercentage !== percentage) { - progressCallback?.(newPercentage); percentage = newPercentage; } + + db.exec(statement); } catch (e) { throw new Error(`statement failed: ${statement}`, { cause: e, }); } } - - setDbHash(hashString(statements.join())); }; const allThreadsOverviewQueryRaw = () => @@ -38,15 +33,9 @@ const allThreadsOverviewQueryRaw = () => (eb) => eb .selectFrom("message") - .select((eb) => [ - "message.thread_id", - eb.fn.countAll().as("message_count"), - ]) + .select((eb) => ["message.thread_id", eb.fn.countAll().as("message_count")]) .where((eb) => { - return eb.and([ - eb("message.body", "is not", null), - eb("message.body", "is not", ""), - ]); + return eb.and([eb("message.body", "is not", null), eb("message.body", "is not", "")]); }) .groupBy("message.thread_id") .as("message"), @@ -100,9 +89,7 @@ const dmPartnerRecipientQueryRaw = (dmId: number) => "recipient.nickname_joined_name", ]) .innerJoin("thread", "recipient._id", "thread.recipient_id") - .where((eb) => - eb.and([eb("thread._id", "=", dmId), eb("recipient._id", "!=", SELF_ID)]), - ) + .where((eb) => eb.and([eb("thread._id", "=", dmId), eb("recipient._id", "!=", SELF_ID)])) .$narrowType<{ _id: number; }>() @@ -113,25 +100,12 @@ export const dmPartnerRecipientQuery = cached(dmPartnerRecipientQueryRaw); const threadSentMessagesOverviewQueryRaw = (threadId: number) => kyselyDb .selectFrom("message") - .select([ - "from_recipient_id", - sql`datetime(date_sent / 1000, 'unixepoch')`.as( - "message_datetime", - ), - ]) + .select(["from_recipient_id", sql`datetime(date_sent / 1000, 'unixepoch')`.as("message_datetime")]) .orderBy(["message_datetime"]) - .where((eb) => - eb.and([ - eb("body", "is not", null), - eb("body", "!=", ""), - eb("thread_id", "=", threadId), - ]), - ) + .where((eb) => eb.and([eb("body", "is not", null), eb("body", "!=", ""), eb("thread_id", "=", threadId)])) .execute(); -export const threadSentMessagesOverviewQuery = cached( - threadSentMessagesOverviewQueryRaw, -); +export const threadSentMessagesOverviewQuery = cached(threadSentMessagesOverviewQueryRaw); const threadMostUsedWordsQueryRaw = (threadId: number, limit = 10) => kyselyDb @@ -139,20 +113,16 @@ const threadMostUsedWordsQueryRaw = (threadId: number, limit = 10) => return eb .selectFrom("message") .select([ - sql`LOWER(substr(body, 1, instr(body || " ", " ") - 1))`.as("word"), - sql`(substr(body, instr(body || " ", " ") + 1))`.as("rest"), + sql`LOWER(substr(body, 1, instr(body || ' ', ' ') - 1))`.as("word"), + sql`substr(body, instr(body || ' ', ' ') + 1)`.as("rest"), ]) - .where((eb) => - eb.and([eb("body", "is not", null), eb("thread_id", "=", threadId)]), - ) + .where((eb) => eb.and([eb("body", "is not", null), eb("thread_id", "=", threadId)])) .unionAll((ebInner) => { return ebInner .selectFrom("words") .select([ - sql`LOWER(substr(rest, 1, instr(rest || " ", " ") - 1))`.as( - "word", - ), - sql`(substr(rest, instr(rest || " ", " ") + 1))`.as("rest"), + sql`LOWER(substr(rest, 1, instr(rest || ' ', ' ') - 1))`.as("word"), + sql`substr(rest, instr(rest || ' ', ' ') + 1)`.as("rest"), ]) .where("rest", "<>", ""); }); diff --git a/src/db/db-schema.d.ts b/src/db/db-schema.d.ts new file mode 100644 index 0000000..428c612 --- /dev/null +++ b/src/db/db-schema.d.ts @@ -0,0 +1,708 @@ +/** + * This file was generated by kysely-codegen. + * Please do not edit it manually. + */ + +import type { ColumnType } from "kysely"; + +export type Generated = T extends ColumnType + ? ColumnType + : ColumnType; + +export interface Attachment { + _id: Generated; + archive_cdn: Generated; + archive_media_id: Generated; + archive_media_name: Generated; + archive_thumbnail_media_id: Generated; + archive_transfer_file: Generated; + archive_transfer_state: Generated; + attachment_uuid: Generated; + blur_hash: Generated; + borderless: Generated; + caption: Generated; + cdn_number: Generated; + content_type: string | null; + data_file: string | null; + data_hash_end: Generated; + data_hash_start: Generated; + data_random: Buffer | null; + data_size: number | null; + display_order: Generated; + fast_preflight_id: string | null; + file_name: string | null; + height: Generated; + message_id: number | null; + offload_restored_at: Generated; + quote: Generated; + remote_digest: Buffer | null; + remote_incremental_digest: Buffer | null; + remote_incremental_digest_chunk_size: Generated; + remote_iv: Generated; + remote_key: string | null; + remote_location: string | null; + sticker_emoji: Generated; + sticker_id: Generated; + sticker_pack_id: Generated; + sticker_pack_key: Generated; + thumbnail_file: Generated; + thumbnail_random: Generated; + thumbnail_restore_state: Generated; + transfer_file: Generated; + transfer_state: number | null; + transform_properties: Generated; + upload_timestamp: Generated; + video_gif: Generated; + voice_note: Generated; + width: Generated; +} + +export interface AvatarPicker { + _id: Generated; + avatar: Buffer; + group_id: Generated; + last_used: Generated; +} + +export interface Call { + _id: number | null; + call_id: number; + deletion_timestamp: Generated; + direction: number; + event: number; + group_call_active: Generated; + local_joined: Generated; + message_id: Generated; + peer: number; + read: Generated; + ringer: Generated; + timestamp: number; + type: number; +} + +export interface CallLink { + _id: number | null; + admin_key: Buffer | null; + deletion_timestamp: Generated; + expiration: number; + name: string; + recipient_id: number | null; + restrictions: number; + revoked: number; + room_id: string; + root_key: Buffer | null; +} + +export interface Cds { + _id: number | null; + e164: string; + last_seen_at: Generated; +} + +export interface ChatColors { + _id: Generated; + chat_colors: Buffer | null; +} + +export interface ChatFolder { + _id: Generated; + folder_type: Generated; + is_muted: Generated; + name: Generated; + position: Generated; + show_groups: Generated; + show_individual: Generated; + show_muted: Generated; + show_unread: Generated; +} + +export interface ChatFolderMembership { + _id: Generated; + chat_folder_id: number; + membership_type: Generated; + thread_id: number; +} + +export interface DistributionList { + _id: Generated; + allows_replies: Generated; + deletion_timestamp: Generated; + distribution_id: string; + is_unknown: Generated; + name: string; + privacy_mode: Generated; + recipient_id: number | null; +} + +export interface DistributionListMember { + _id: Generated; + list_id: number; + privacy_mode: Generated; + recipient_id: number; +} + +export interface DonationReceipt { + _id: Generated; + amount: string; + currency: string; + receipt_date: number; + receipt_type: string; + subscription_level: number; +} + +export interface Drafts { + _id: number | null; + thread_id: number | null; + type: string | null; + value: string | null; +} + +export interface EmojiSearch { + _id: number | null; + emoji: string; + label: string; + rank: Generated; +} + +export interface GroupMembership { + _id: number | null; + endorsement: Generated; + group_id: string; + recipient_id: number; +} + +export interface GroupReceipts { + _id: number | null; + address: number | null; + mms_id: number | null; + status: number | null; + timestamp: number | null; + unidentified: Generated; +} + +export interface Groups { + _id: number | null; + active: Generated; + avatar_content_type: Generated; + avatar_digest: Generated; + avatar_id: Generated; + avatar_key: Generated; + decrypted_group: Generated; + distribution_id: Generated; + expected_v2_id: Generated; + group_id: string; + group_send_endorsements_expiration: Generated; + last_force_update_timestamp: Generated; + master_key: Generated; + mms: Generated; + recipient_id: number; + revision: Generated; + show_as_story_state: Generated; + timestamp: Generated; + title: Generated; + unmigrated_v1_members: Generated; +} + +export interface Identities { + _id: Generated; + address: number | null; + first_use: Generated; + identity_key: string | null; + nonblocking_approval: Generated; + timestamp: Generated; + verified: Generated; +} + +export interface InAppPayment { + _id: number | null; + data: Buffer; + end_of_period: Generated; + inserted_at: number; + notified: Generated; + state: number; + subscriber_id: string | null; + type: number; + updated_at: number; +} + +export interface InAppPaymentSubscriber { + _id: number | null; + currency_code: string; + payment_method_type: Generated; + requires_cancel: Generated; + subscriber_id: string; + type: number; +} + +export interface KyberPrekey { + _id: number | null; + account_id: string; + key_id: number; + last_resort: number; + serialized: Buffer; + stale_timestamp: Generated; + timestamp: number; +} + +export interface Mention { + _id: Generated; + message_id: number | null; + range_length: number | null; + range_start: number | null; + recipient_id: number | null; + thread_id: number | null; +} + +export interface Message { + _id: Generated; + body: string | null; + ct_l: string | null; + date_received: number; + date_sent: number; + date_server: Generated; + exp: number | null; + expire_started: Generated; + expire_timer_version: Generated; + expires_in: Generated; + export_state: Generated; + exported: Generated; + from_device_id: number | null; + from_recipient_id: number; + has_delivery_receipt: Generated; + has_read_receipt: Generated; + latest_revision_id: Generated; + link_previews: Generated; + m_size: number | null; + m_type: number | null; + mentions_self: Generated; + message_extras: Generated; + message_ranges: Generated; + mismatched_identities: Generated; + network_failures: Generated; + notified: Generated; + notified_timestamp: Generated; + original_message_id: Generated; + parent_story_id: Generated; + quote_author: Generated; + quote_body: Generated; + quote_id: Generated; + quote_mentions: Generated; + quote_missing: Generated; + quote_type: Generated; + reactions_last_seen: Generated; + reactions_unread: Generated; + read: Generated; + receipt_timestamp: Generated; + remote_deleted: Generated; + revision_number: Generated; + scheduled_date: Generated; + server_guid: Generated; + shared_contacts: Generated; + st: number | null; + story_type: Generated; + subscription_id: Generated; + thread_id: number; + to_recipient_id: number; + tr_id: string | null; + type: number; + unidentified: Generated; + view_once: Generated; + viewed: Generated; +} + +export interface MessageFts { + body: string | null; + thread_id: string | null; +} + +export interface MessageFtsConfig { + k: string; + v: string | null; +} + +export interface MessageFtsData { + block: Buffer | null; + id: number | null; +} + +export interface MessageFtsDocsize { + id: number | null; + sz: Buffer | null; +} + +export interface MessageFtsIdx { + pgno: string | null; + segid: string; + term: string; +} + +export interface MslMessage { + _id: number | null; + message_id: number; + payload_id: number; +} + +export interface MslPayload { + _id: number | null; + content: Buffer; + content_hint: number; + date_sent: number; + urgent: Generated; +} + +export interface MslRecipient { + _id: number | null; + device: number; + payload_id: number; + recipient_id: number; +} + +export interface NameCollision { + _id: Generated; + dismissed: Generated; + hash: Generated; + thread_id: number; +} + +export interface NameCollisionMembership { + _id: Generated; + collision_id: number; + profile_change_details: Generated; + recipient_id: number; +} + +export interface NotificationProfile { + _id: Generated; + allow_all_calls: Generated; + allow_all_mentions: Generated; + color: string; + created_at: number; + emoji: string; + name: string; +} + +export interface NotificationProfileAllowedMembers { + _id: Generated; + notification_profile_id: number; + recipient_id: number; +} + +export interface NotificationProfileSchedule { + _id: Generated; + days_enabled: string; + enabled: Generated; + end: number; + notification_profile_id: number; + start: number; +} + +export interface OneTimePrekeys { + _id: number | null; + account_id: string; + key_id: number; + private_key: string; + public_key: string; + stale_timestamp: Generated; +} + +export interface Payments { + _id: number | null; + amount: Buffer; + block_index: Generated; + block_timestamp: Generated; + direction: number | null; + failure_reason: number | null; + fee: Buffer; + note: Generated; + payment_metadata: Generated; + receipt: Generated; + receipt_public_key: Generated; + recipient: Generated; + recipient_address: Generated; + seen: number | null; + state: number | null; + timestamp: number | null; + transaction_record: Generated; + uuid: Generated; +} + +export interface PendingPniSignatureMessage { + _id: number | null; + device_id: number; + recipient_id: number; + sent_timestamp: number; +} + +export interface PendingRetryReceipts { + _id: Generated; + author: string; + device: number; + received_timestamp: string; + sent_timestamp: number; + thread_id: number; +} + +export interface Reaction { + _id: number | null; + author_id: number; + date_received: number; + date_sent: number; + emoji: string; + message_id: number; +} + +export interface Recipient { + _id: Generated; + about: Generated; + about_emoji: Generated; + aci: Generated; + avatar_color: Generated; + badges: Generated; + blocked: Generated; + call_link_room_id: Generated; + call_ringtone: Generated; + call_vibrate: Generated; + capabilities: Generated; + chat_colors: Generated; + custom_chat_colors_id: Generated; + distribution_list_id: Generated; + e164: Generated; + email: Generated; + extras: Generated; + group_id: Generated; + groups_in_common: Generated; + hidden: Generated; + last_profile_fetch: Generated; + last_session_reset: Generated; + mention_setting: Generated; + message_expiration_time: Generated; + message_expiration_time_version: Generated; + message_ringtone: Generated; + message_vibrate: Generated; + mute_until: Generated; + needs_pni_signature: Generated; + nickname_family_name: Generated; + nickname_given_name: Generated; + nickname_joined_name: Generated; + note: Generated; + notification_channel: Generated; + phone_number_discoverable: Generated; + phone_number_sharing: Generated; + pni: Generated; + pni_signature_verified: Generated; + profile_avatar: Generated; + profile_family_name: Generated; + profile_given_name: Generated; + profile_joined_name: Generated; + profile_key: Generated; + profile_key_credential: Generated; + profile_sharing: Generated; + registered: Generated; + reporting_token: Generated; + sealed_sender_mode: Generated; + storage_service_id: Generated; + storage_service_proto: Generated; + system_contact_uri: Generated; + system_family_name: Generated; + system_given_name: Generated; + system_info_pending: Generated; + system_joined_name: Generated; + system_nickname: Generated; + system_phone_label: Generated; + system_phone_type: Generated; + system_photo_uri: Generated; + type: Generated; + unregistered_timestamp: Generated; + username: Generated; + wallpaper: Generated; + wallpaper_uri: Generated; +} + +export interface RemappedRecipients { + _id: Generated; + new_id: number | null; + old_id: number | null; +} + +export interface RemappedThreads { + _id: Generated; + new_id: number | null; + old_id: number | null; +} + +export interface RemoteMegaphone { + _id: number | null; + body: string; + conditional_id: string | null; + countries: string | null; + dont_show_after: number; + dont_show_before: number; + finished_at: Generated; + image_uri: Generated; + image_url: string | null; + minimum_version: number; + primary_action_data: Generated; + primary_action_id: string | null; + primary_action_text: string | null; + priority: number; + secondary_action_data: Generated; + secondary_action_id: string | null; + secondary_action_text: string | null; + seen_count: Generated; + show_for_days: number; + shown_at: Generated; + snoozed_at: Generated; + title: string; + uuid: string; +} + +export interface SenderKeys { + _id: Generated; + address: string; + created_at: number; + device: number; + distribution_id: string; + record: Buffer; +} + +export interface SenderKeyShared { + _id: Generated; + address: string; + device: number; + distribution_id: string; + timestamp: Generated; +} + +export interface Sessions { + _id: Generated; + account_id: string; + address: string; + device: number; + record: Buffer; +} + +export interface SignedPrekeys { + _id: number | null; + account_id: string; + key_id: number; + private_key: string; + public_key: string; + signature: string; + timestamp: Generated; +} + +export interface Sticker { + _id: Generated; + content_type: Generated; + cover: number | null; + emoji: string; + file_length: number | null; + file_path: string; + file_random: Buffer | null; + installed: number | null; + last_used: number | null; + pack_author: string; + pack_id: string; + pack_key: string; + pack_order: number | null; + pack_title: string; + sticker_id: number | null; +} + +export interface StorageKey { + _id: Generated; + key: string | null; + type: number | null; +} + +export interface StorySends { + _id: number | null; + allows_replies: number; + distribution_id: string; + message_id: number; + recipient_id: number; + sent_timestamp: number; +} + +export interface Thread { + _id: Generated; + active: Generated; + archived: Generated; + date: Generated; + error: Generated; + expires_in: Generated; + has_delivery_receipt: Generated; + has_read_receipt: Generated; + has_sent: Generated; + last_scrolled: Generated; + last_seen: Generated; + meaningful_messages: Generated; + pinned: Generated; + read: Generated; + recipient_id: number; + snippet: string | null; + snippet_content_type: Generated; + snippet_extras: Generated; + snippet_message_extras: Generated; + snippet_type: Generated; + snippet_uri: Generated; + status: Generated; + type: Generated; + unread_count: Generated; + unread_self_mention_count: Generated; +} + +export interface DB { + attachment: Attachment; + avatar_picker: AvatarPicker; + call: Call; + call_link: CallLink; + cds: Cds; + chat_colors: ChatColors; + chat_folder: ChatFolder; + chat_folder_membership: ChatFolderMembership; + distribution_list: DistributionList; + distribution_list_member: DistributionListMember; + donation_receipt: DonationReceipt; + drafts: Drafts; + emoji_search: EmojiSearch; + group_membership: GroupMembership; + group_receipts: GroupReceipts; + groups: Groups; + identities: Identities; + in_app_payment: InAppPayment; + in_app_payment_subscriber: InAppPaymentSubscriber; + kyber_prekey: KyberPrekey; + mention: Mention; + message: Message; + message_fts: MessageFts; + message_fts_config: MessageFtsConfig; + message_fts_data: MessageFtsData; + message_fts_docsize: MessageFtsDocsize; + message_fts_idx: MessageFtsIdx; + msl_message: MslMessage; + msl_payload: MslPayload; + msl_recipient: MslRecipient; + name_collision: NameCollision; + name_collision_membership: NameCollisionMembership; + notification_profile: NotificationProfile; + notification_profile_allowed_members: NotificationProfileAllowedMembers; + notification_profile_schedule: NotificationProfileSchedule; + one_time_prekeys: OneTimePrekeys; + payments: Payments; + pending_pni_signature_message: PendingPniSignatureMessage; + pending_retry_receipts: PendingRetryReceipts; + reaction: Reaction; + recipient: Recipient; + remapped_recipients: RemappedRecipients; + remapped_threads: RemappedThreads; + remote_megaphone: RemoteMegaphone; + sender_key_shared: SenderKeyShared; + sender_keys: SenderKeys; + sessions: Sessions; + signed_prekeys: SignedPrekeys; + sticker: Sticker; + storage_key: StorageKey; + story_sends: StorySends; + thread: Thread; +} diff --git a/src/db.ts b/src/db/db.ts similarity index 93% rename from src/db.ts rename to src/db/db.ts index 8e0791c..4ace36b 100644 --- a/src/db.ts +++ b/src/db/db.ts @@ -1,7 +1,7 @@ import { makePersisted } from "@solid-primitives/storage"; import sqlite3InitModule from "@sqlite.org/sqlite-wasm"; import { Kysely } from "kysely"; -import type { DB } from "kysely-codegen"; +import type { DB } from "./db-schema"; import { OfficialWasmDialect } from "kysely-wasm"; import { createSignal } from "solid-js"; diff --git a/src/db/index.ts b/src/db/index.ts new file mode 100644 index 0000000..32b878c --- /dev/null +++ b/src/db/index.ts @@ -0,0 +1,2 @@ +export * from "./db"; +export * from "./db-queries"; diff --git a/src/index.tsx b/src/index.tsx index 76190b7..461f0db 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,9 +1,13 @@ /* @refresh reload */ import { MetaProvider } from "@solidjs/meta"; -import { Router } from "@solidjs/router"; +import { Router, useNavigate } from "@solidjs/router"; import { render } from "solid-js/web"; +import { createEffect, enableScheduling } from "solid-js"; import App from "./App"; +import { db } from "./db/db"; + +enableScheduling(); const root = document.getElementById("root"); @@ -19,18 +23,18 @@ if (root) {
{ - // const navigate = useNavigate(); - // const { pathname } = props.location; + root={(props) => { + const navigate = useNavigate(); + const { pathname } = props.location; - // createEffect(() => { - // if (!db() && pathname !== "/") { - // navigate("/"); - // } - // }); + createEffect(() => { + if (!db && pathname !== "/") { + navigate("/"); + } + }); - // return props.children; - // }} + return props.children; + }} > diff --git a/src/lib/db-cache.ts b/src/lib/db-cache.ts index 9403f06..1a075b6 100644 --- a/src/lib/db-cache.ts +++ b/src/lib/db-cache.ts @@ -1,47 +1,44 @@ import { deserialize, serialize } from "seroval"; -import { createEffect, createMemo, createRoot, on } from "solid-js"; -import { dbHash } from "~/db"; +import {} from "solid-js"; import { hashString } from "./hash"; export const DATABASE_HASH_PREFIX = "database"; // clear the cache on new session so that selecting a different database does not result in wrong cache entries -const clearDbCache = () => { - for (let i = 0, len = localStorage.length; i < len; i++) { - const key = localStorage.key(i); +// const clearDbCache = () => { +// for (let i = 0, len = localStorage.length; i < len; i++) { +// const key = localStorage.key(i); - if (key?.startsWith(DATABASE_HASH_PREFIX)) { - localStorage.removeItem(key); - } - } -}; +// if (key?.startsWith(DATABASE_HASH_PREFIX)) { +// localStorage.removeItem(key); +// } +// } +// }; -let prevDbHash = dbHash(); +// let prevDbHash = dbHash(); -createRoot(() => { - createEffect(() => { - on( - dbHash, - (currentDbHash) => { - if (currentDbHash && currentDbHash !== prevDbHash) { - prevDbHash = currentDbHash; - clearDbCache(); - } - }, - { - defer: true, - }, - ); - }); -}); +// createRoot(() => { +// createEffect(() => { +// on( +// dbHash, +// (currentDbHash) => { +// if (currentDbHash && currentDbHash !== prevDbHash) { +// prevDbHash = currentDbHash; +// clearDbCache(); +// } +// }, +// { +// defer: true, +// }, +// ); +// }); +// }); class LocalStorageCacheAdapter { - keys = new Set( - Object.keys(localStorage).filter((key) => key.startsWith(this.prefix)), - ); + keys = new Set(Object.keys(localStorage).filter((key) => key.startsWith(this.prefix))); prefix = "database"; // TODO: real way of detecting if the db is loaded, on loading the db and opfs (if persisted db?) - #dbLoaded = createMemo(() => !!dbHash()); + // #dbLoaded = createMemo(() => !!dbHash()); #createKey(cacheName: string, key: string): string { return `${this.prefix}-${cacheName}-${key}`; @@ -54,10 +51,7 @@ class LocalStorageCacheAdapter { try { localStorage.setItem(fullKey, serialize({ isPromise, value })); } catch (error: unknown) { - if ( - error instanceof DOMException && - error.name === "QUOTA_EXCEEDED_ERR" - ) { + if (error instanceof DOMException && error.name === "QUOTA_EXCEEDED_ERR") { console.error("Storage quota exceeded, not caching new function calls"); } else { console.error(error); @@ -66,13 +60,13 @@ class LocalStorageCacheAdapter { } has(cacheName: string, key: string): boolean { - if (this.#dbLoaded()) { - return this.keys.has(this.#createKey(cacheName, key)); - } + // if (this.#dbLoaded()) { + return this.keys.has(this.#createKey(cacheName, key)); + // } - console.info("No database loaded"); + // console.info("No database loaded"); - return false; + // return false; } get( @@ -84,18 +78,18 @@ class LocalStorageCacheAdapter { value: R; } | undefined { - if (this.#dbLoaded()) { - const item = localStorage.getItem(this.#createKey(cacheName, key)); + // if (this.#dbLoaded()) { + const item = localStorage.getItem(this.#createKey(cacheName, key)); - if (item) { - return deserialize(item) as { - isPromise: boolean; - value: R; - }; - } - } else { - console.info("No database loaded"); + if (item) { + return deserialize(item) as { + isPromise: boolean; + value: R; + }; } + // } else { + // console.info("No database loaded"); + // } } } @@ -128,10 +122,7 @@ const createHashKey = (...args: unknown[]) => { return hashString(stringToHash); }; -export const cached = ( - fn: (...args: T) => R, - self?: ThisType, -): ((...args: T) => R) => { +export const cached = (fn: (...args: T) => R, self?: ThisType): ((...args: T) => R) => { const cacheName = hashString(fn.toString()).toString(); return (...args: T) => { @@ -140,11 +131,7 @@ export const cached = ( const cachedValue = cache.get(cacheName, cacheKey); if (cachedValue) { - return ( - cachedValue.isPromise - ? Promise.resolve(cachedValue.value) - : cachedValue.value - ) as R; + return (cachedValue.isPromise ? Promise.resolve(cachedValue.value) : cachedValue.value) as R; } let newValue: R; diff --git a/src/pages/dm/dm-id.tsx b/src/pages/dm/dm-id.tsx index e10c445..91d884a 100644 --- a/src/pages/dm/dm-id.tsx +++ b/src/pages/dm/dm-id.tsx @@ -1,7 +1,7 @@ import { Suspense, type Component } from "solid-js"; import { createAsync, type RoutePreloadFunc, type RouteSectionProps } from "@solidjs/router"; -import { dmPartnerRecipientQuery, threadMostUsedWordsQuery, threadSentMessagesOverviewQuery } from "~/db-queries"; +import { dmPartnerRecipientQuery, threadMostUsedWordsQuery, threadSentMessagesOverviewQuery, SELF_ID } from "~/db"; import { getNameFromRecipient } from "~/lib/get-name-from-recipient"; import { Heading } from "~/components/ui/heading"; import { Grid } from "~/components/ui/grid"; @@ -15,7 +15,6 @@ import { DmMessagesPerRecipient } from "./dm-messages-per-recipients"; import { DmMessagesPerWeekday } from "./dm-messages-per-weekday"; import type { MessageOverview } from "~/types"; import { createMessageStatsSources } from "~/lib/messages"; -import { SELF_ID } from "~/db"; import { Flex } from "~/components/ui/flex"; const getDmIdData = (dmId: number) => { diff --git a/src/pages/dm/dm-wordcloud.tsx b/src/pages/dm/dm-wordcloud.tsx index 5ec2b1e..bd24624 100644 --- a/src/pages/dm/dm-wordcloud.tsx +++ b/src/pages/dm/dm-wordcloud.tsx @@ -1,7 +1,7 @@ import type { ChartData } from "chart.js"; import { Show, type Accessor, type Component } from "solid-js"; import { WordCloudChart } from "~/components/ui/charts"; -import type { threadMostUsedWordsQuery } from "~/db-queries"; +import type { threadMostUsedWordsQuery } from "~/db"; const maxWordSize = 100; diff --git a/src/pages/home.tsx b/src/pages/home.tsx index 2ac4777..3701498 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -1,41 +1,60 @@ import { useNavigate, type RouteSectionProps } from "@solidjs/router"; -import { createSignal, Show, type Component, type JSX } from "solid-js"; +import { createSignal, type JSX, Show, type Component } from "solid-js"; import { Title } from "@solidjs/meta"; import { Portal } from "solid-js/web"; import { Flex } from "~/components/ui/flex"; -import { - Progress, - ProgressLabel, - ProgressValueLabel, -} from "~/components/ui/progress"; -// import { db } from "~/db"; -import { loadDb } from "~/db-queries"; +import { Progress, ProgressLabel, ProgressValueLabel } from "~/components/ui/progress"; +import { loadDb } from "~/db/db-queries"; import { decryptBackup } from "~/lib/decryptor"; +import { createDropzone, createFileUploader } from "@solid-primitives/upload"; +import { Button } from "~/components/ui/button"; +import { TextField, TextFieldInput, TextFieldLabel } from "~/components/ui/text-field"; export const Home: Component = () => { - const [decryptionProgress, setDecryptionProgress] = createSignal(); - const [isLoadingDatabase, setIsLoadingDatabase] = createSignal(false); - const [passphrase, setPassphrase] = createSignal(""); const navigate = useNavigate(); - const onFileChange: JSX.ChangeEventHandler = ( - event, - ) => { - const file = event.currentTarget.files?.[0]; + const fileUploader = createFileUploader({ + accept: ".backup", + multiple: false, + }); + + const dropzone = createDropzone({ + onDrop: (files) => { + const file = files.at(0); + + if (file?.name.endsWith(".backup")) { + setBackupFile(file.file); + } + }, + }); + + const [passphrase, setPassphrase] = createSignal(""); + const [backupFile, setBackupFile] = createSignal(); + + const [decryptionProgress, setDecryptionProgress] = createSignal(); + const [loadingProgress, setLoadingProgress] = createSignal(); + // const [isLoadingDatabase, setIsLoadingDatabase] = createSignal(false); + + const onSubmit: JSX.EventHandler = (event) => { + event.preventDefault(); + + const currentBackupFile = backupFile(); const currentPassphrase = passphrase(); - if (file && currentPassphrase) { - decryptBackup(file, currentPassphrase, setDecryptionProgress) + if (currentBackupFile && currentPassphrase) { + decryptBackup(currentBackupFile, currentPassphrase, setDecryptionProgress) .then((result) => { setDecryptionProgress(undefined); - setIsLoadingDatabase(true); + // setIsLoadingDatabase(true); + setLoadingProgress(0); setTimeout(() => { - loadDb(result.database_statements); + loadDb(result.database_statements, (newValue) => (console.log(newValue), setLoadingProgress(newValue))); - setIsLoadingDatabase(false); + // setIsLoadingDatabase(false); + setLoadingProgress(undefined); navigate("/overview"); }, 0); @@ -53,9 +72,10 @@ export const Home: Component = () => { flexDirection="col" alignItems="center" justifyContent="center" - class="fixed inset-0 backdrop-blur-lg backdrop-filter gap-y-8" + class="fixed inset-0 gap-y-8 backdrop-blur-lg backdrop-filter" classList={{ - hidden: decryptionProgress() === undefined && !isLoadingDatabase(), + // hidden: decryptionProgress() === undefined && !isLoadingDatabase(), + hidden: decryptionProgress() === undefined && loadingProgress() === undefined, }} > @@ -73,19 +93,62 @@ export const Home: Component = () => {
- + + {/*

Loading database

+

This can take some time

*/}

Loading database

+ `${value}%`} + class="w-[300px] space-y-1" + > +
+ Loading... + +
+
Signal stats -
- setPassphrase(event.currentTarget.value)} - /> - -
+
+ setPassphrase(value)}> + Passphrase + + + + + + {backupFile() ? backupFile()?.name : "or drop the file here"} + + + +
); }; diff --git a/src/pages/overview/index.tsx b/src/pages/overview/index.tsx index 546e250..424b24a 100644 --- a/src/pages/overview/index.tsx +++ b/src/pages/overview/index.tsx @@ -1,67 +1,48 @@ import type { RouteSectionProps } from "@solidjs/router"; import { type Component, createResource, Show } from "solid-js"; -import { - allThreadsOverviewQuery, - overallSentMessagesQuery, -} from "~/db-queries"; +import { allThreadsOverviewQuery, overallSentMessagesQuery, SELF_ID } from "~/db"; import { Title } from "@solidjs/meta"; -import { SELF_ID } from "~/db"; import { getNameFromRecipient } from "~/lib/get-name-from-recipient"; import { OverviewTable, type RoomOverview } from "./overview-table"; export const Overview: Component = () => { - const [allSelfSentMessagesCount] = createResource(() => - overallSentMessagesQuery(SELF_ID), - ); + const [allSelfSentMessagesCount] = createResource(() => overallSentMessagesQuery(SELF_ID)); - const [roomOverview] = createResource( - async () => { - return (await allThreadsOverviewQuery())?.map((row) => { - const isGroup = row.title !== null; + const [roomOverview] = createResource(async () => { + return (await allThreadsOverviewQuery())?.map((row) => { + const isGroup = row.title !== null; - let name = ""; + let name = ""; - if (row.title !== null) { - name = row.title; - } else { - name = getNameFromRecipient( - row.nickname_joined_name, - row.system_joined_name, - row.profile_joined_name, - ); - } + if (row.title !== null) { + name = row.title; + } else { + name = getNameFromRecipient(row.nickname_joined_name, row.system_joined_name, row.profile_joined_name); + } - return { - threadId: row.thread_id, - recipientId: row.recipient_id, - archived: Boolean(row.archived), - messageCount: row.message_count, - lastMessageDate: row.last_message_date - ? new Date(row.last_message_date) - : undefined, - name, - isGroup, - }; - }); - }, - ); + return { + threadId: row.thread_id, + recipientId: row.recipient_id, + archived: Boolean(row.archived), + messageCount: row.message_count, + lastMessageDate: row.last_message_date ? new Date(row.last_message_date) : undefined, + name, + isGroup, + }; + }); + }); return ( <> Signal statistics overview
-

- All messages: {allSelfSentMessagesCount()?.messageCount as number} -

- +

All messages: {allSelfSentMessagesCount()?.messageCount as number}

+ {(currentRoomOverview) => ( - + console.log(currentRoomOverview()), () )}