feat: move calculation intensive part into a web worker

This commit is contained in:
2026-09-13 21:51:13 +02:00
parent a57ead61b9
commit b58bf8af6d
6 changed files with 182 additions and 149 deletions
+8 -7
View File
@@ -13,21 +13,22 @@
"type": "module",
"devDependencies": {
"@sveltejs/adapter-static": "^3.0.10",
"@sveltejs/kit": "^2.61.1",
"@sveltejs/vite-plugin-svelte": "^7.1.2",
"@sveltejs/kit": "^2.70.3",
"@sveltejs/vite-plugin-svelte": "^7.3.0",
"@zerodevx/svelte-toast": "^0.9.6",
"license-checker-rseidelsohn": "^5.0.1",
"svelte": "^5.55.9",
"svelte-check": "^4.4.8",
"svelte": "^5.57.0",
"svelte-check": "^4.7.6",
"svelte-intl-precompile": "^0.12.3",
"tslib": "^2.8.1",
"typescript": "^6.0.3",
"vite": "^8.0.14"
"vite": "^8.2.2"
},
"dependencies": {
"@cryptgeon/shared": "workspace:*",
"@fontsource/fira-mono": "^5.2.7",
"pretty-bytes": "^7.1.0",
"@fontsource/fira-mono": "^5.3.0",
"comlink": "^4.4.2",
"pretty-bytes": "^7.1.3",
"uqr": "^0.1.3"
}
}
+10 -14
View File
@@ -130,20 +130,16 @@
throw new EmptyContentError()
}
const filesInput: NoteInput = {
type: 'files',
files: $state.snapshot(files),
}
const payload = await worker.pack(
isFile
? transfer(
filesInput,
filesInput.files.map((f) => f.data.buffer)
)
: { type: 'text', text: textContent },
customPassword || undefined
)
const noteInput: NoteInput = isFile
? transfer(
{
type: 'files',
files: $state.snapshot(files),
},
files.map((f) => f.data.buffer)
)
: { type: 'text', text: textContent }
const payload = await worker.pack(noteInput, customPassword || undefined)
const serverNote: ServerNote = {
meta: {
...(timeExpiration
+14
View File
@@ -0,0 +1,14 @@
import { wrap } from 'comlink'
import CryptWorker from './worker?worker'
import type { packContent, unpackContent } from '@cryptgeon/shared'
export function createWorker() {
const worker = new CryptWorker()
return wrap<WorkerConract>(worker)
}
export type WorkerConract = {
pack: typeof packContent
unpack: typeof unpackContent
}
@@ -0,0 +1,19 @@
import type { WorkerConract } from '$lib/worker'
import { packContent, unpackContent } from '@cryptgeon/shared'
import { expose, transfer } from 'comlink'
const contract: WorkerConract = {
pack(input, password) {
const content = packContent(input, password)
return transfer(content, [content.data.buffer, content.extra.buffer, content.key.buffer])
},
unpack(data, key) {
const content = unpackContent(data, key)
return transfer(
content,
typeof content.data === 'string' ? [] : content.data.map((f) => f.data.buffer)
)
},
}
expose(contract)
@@ -1,5 +1,13 @@
<script lang="ts">
import { deriveKey, hexToBytes, decode, info, get as apiGet, unpackContent, type FileDTO } from '@cryptgeon/shared'
import {
deriveKey,
hexToBytes,
decode,
info,
get as apiGet,
unpackContent,
type FileDTO,
} from '@cryptgeon/shared'
import { onMount } from 'svelte'
import { t } from 'svelte-intl-precompile'
@@ -8,6 +16,7 @@
import ShowNote, { type DecryptedNote } from '$lib/ui/ShowNote.svelte'
import TextInput from '$lib/ui/TextInput.svelte'
import type { PageData } from './$types'
import { createWorker } from '$lib/worker'
interface Props {
data: PageData
@@ -44,6 +53,8 @@
}
})
const worker = createWorker()
async function show(e: SubmitEvent) {
e.preventDefault()
try {
@@ -69,7 +80,7 @@
key = hexToBytes(password!)
}
const content = unpackContent(serverNote.data, key)
const content = await worker.unpack(serverNote.data, key)
switch (content.type) {
case 'text':
@@ -78,16 +89,16 @@
contents: content.data,
}
break
case 'files':
const files = (content.data as any[]).map((f: any) => ({
...f,
data: f.data instanceof Uint8Array ? f.data : new Uint8Array(f.data as any),
}))
note = {
meta: { type: 'file' },
contents: files,
}
break
case 'files':
const files = (content.data as any[]).map((f: any) => ({
...f,
data: f.data instanceof Uint8Array ? f.data : new Uint8Array(f.data as any),
}))
note = {
meta: { type: 'file' },
contents: files,
}
break
default:
error = $t('show.errors.unsupported_type')
return
@@ -144,4 +155,4 @@ break
flex-direction: column;
gap: 1rem;
}
</style>
</style>
+107 -115
View File
@@ -74,11 +74,14 @@ importers:
specifier: workspace:*
version: link:../shared
'@fontsource/fira-mono':
specifier: ^5.2.7
specifier: ^5.3.0
version: 5.3.0
comlink:
specifier: ^4.4.2
version: 4.4.2
pretty-bytes:
specifier: ^7.1.0
version: 7.1.2
specifier: ^7.1.3
version: 7.1.3
uqr:
specifier: ^0.1.3
version: 0.1.3
@@ -87,10 +90,10 @@ importers:
specifier: ^3.0.10
version: 3.0.10(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0)(vite@8.2.2(@types/node@24.13.3)))(svelte@5.57.0)(typescript@6.0.3)(vite@8.2.2(@types/node@24.13.3)))
'@sveltejs/kit':
specifier: ^2.61.1
specifier: ^2.70.3
version: 2.70.3(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.57.0)(vite@8.2.2(@types/node@24.13.3)))(svelte@5.57.0)(typescript@6.0.3)(vite@8.2.2(@types/node@24.13.3))
'@sveltejs/vite-plugin-svelte':
specifier: ^7.1.2
specifier: ^7.3.0
version: 7.3.0(svelte@5.57.0)(vite@8.2.2(@types/node@24.13.3))
'@zerodevx/svelte-toast':
specifier: ^0.9.6
@@ -99,10 +102,10 @@ importers:
specifier: ^5.0.1
version: 5.0.1
svelte:
specifier: ^5.55.9
specifier: ^5.57.0
version: 5.57.0
svelte-check:
specifier: ^4.4.8
specifier: ^4.7.6
version: 4.7.6(picomatch@4.0.7)(svelte@5.57.0)(typescript@6.0.3)
svelte-intl-precompile:
specifier: ^0.12.3
@@ -114,7 +117,7 @@ importers:
specifier: ^6.0.3
version: 6.0.3
vite:
specifier: ^8.0.14
specifier: ^8.2.2
version: 8.2.2(@types/node@24.13.3)
packages/shared:
@@ -490,8 +493,8 @@ packages:
'@oxc-project/types@0.146.0':
resolution: {integrity: sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==}
'@oxc-project/types@0.147.0':
resolution: {integrity: sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg==}
'@oxc-project/types@0.148.0':
resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==}
'@oxfmt/binding-android-arm-eabi@0.64.0':
resolution: {integrity: sha512-o6uzh/jTOQeAY5TdkAeXdqv7MBRcPxiRA08zrcBtkKj5cSu/FMu0Hl7Q6Fi1KCKyCWZ6lJVjBzdsJvsKltUsGQ==}
@@ -779,98 +782,98 @@ packages:
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
'@rolldown/binding-android-arm-eabi@1.2.6':
resolution: {integrity: sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ==}
'@rolldown/binding-android-arm-eabi@1.2.7':
resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
'@rolldown/binding-android-arm64@1.2.6':
resolution: {integrity: sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q==}
'@rolldown/binding-android-arm64@1.2.7':
resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
'@rolldown/binding-darwin-arm64@1.2.6':
resolution: {integrity: sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA==}
'@rolldown/binding-darwin-arm64@1.2.7':
resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
'@rolldown/binding-darwin-x64@1.2.6':
resolution: {integrity: sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q==}
'@rolldown/binding-darwin-x64@1.2.7':
resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
'@rolldown/binding-freebsd-x64@1.2.6':
resolution: {integrity: sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA==}
'@rolldown/binding-freebsd-x64@1.2.7':
resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
'@rolldown/binding-linux-arm-gnueabihf@1.2.6':
resolution: {integrity: sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w==}
'@rolldown/binding-linux-arm-gnueabihf@1.2.7':
resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
'@rolldown/binding-linux-arm64-gnu@1.2.6':
resolution: {integrity: sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg==}
'@rolldown/binding-linux-arm64-gnu@1.2.7':
resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-arm64-musl@1.2.6':
resolution: {integrity: sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw==}
'@rolldown/binding-linux-arm64-musl@1.2.7':
resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rolldown/binding-linux-ppc64-gnu@1.2.6':
resolution: {integrity: sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ==}
'@rolldown/binding-linux-ppc64-gnu@1.2.7':
resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-s390x-gnu@1.2.6':
resolution: {integrity: sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA==}
'@rolldown/binding-linux-s390x-gnu@1.2.7':
resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-gnu@1.2.6':
resolution: {integrity: sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w==}
'@rolldown/binding-linux-x64-gnu@1.2.7':
resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-musl@1.2.6':
resolution: {integrity: sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ==}
'@rolldown/binding-linux-x64-musl@1.2.7':
resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@rolldown/binding-openharmony-arm64@1.2.6':
resolution: {integrity: sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg==}
'@rolldown/binding-openharmony-arm64@1.2.7':
resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
'@rolldown/binding-win32-arm64-msvc@1.2.6':
resolution: {integrity: sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A==}
'@rolldown/binding-win32-arm64-msvc@1.2.7':
resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
'@rolldown/binding-win32-x64-msvc@1.2.6':
resolution: {integrity: sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ==}
'@rolldown/binding-win32-x64-msvc@1.2.7':
resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -1514,6 +1517,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
comlink@4.4.2:
resolution: {integrity: sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g==}
commander@15.0.0:
resolution: {integrity: sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==}
engines: {node: '>=22.12.0'}
@@ -1585,8 +1591,8 @@ packages:
esm-env@1.2.2:
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
esrap@2.3.6:
resolution: {integrity: sha512-yc0OC12UjPqLoc+fe+v5GNs4TOjAigUw3sTikfC+xeBPGUw7gDRz3DtYaqEhxyMVJojcSWJw7jT0QWR+CbuE/A==}
esrap@2.3.7:
resolution: {integrity: sha512-n2nf7fZR3c9yXf0BPEuHuXqT+KW0SJVj4cN5FMEkpCZ3scLjOQWpiccyCxVzCC2q1wubTghuEGzngJY/7Ah0Ow==}
peerDependencies:
'@typescript-eslint/types': ^8.2.0
peerDependenciesMeta:
@@ -2047,14 +2053,10 @@ packages:
resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
engines: {node: '>=14.19.0'}
postcss-selector-parser@7.1.5:
resolution: {integrity: sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==}
postcss-selector-parser@7.1.6:
resolution: {integrity: sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==}
engines: {node: '>=4'}
postcss@8.5.26:
resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.5.28:
resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==}
engines: {node: ^10 || ^12 || >=14}
@@ -2064,10 +2066,6 @@ packages:
peerDependencies:
svelte: ^3.37.0 || ^4.0.0
pretty-bytes@7.1.2:
resolution: {integrity: sha512-spZIOSORH9joSPGN0L/tYfvINH+xbOpnI3kdcEkq0mzGMjFvDZzyRVbqEOV0wACF0gggdKE9RWO2mosGsBh/Rg==}
engines: {node: '>=20'}
pretty-bytes@7.1.3:
resolution: {integrity: sha512-U2KZ675nqba6XSBppSjU2pRgc9Ffx9+uUtd/RTWYmOawVkZuUbBYuwdtFZQmLv+yMgQ2TQxWWuOpyNje67J9tg==}
engines: {node: '>=20'}
@@ -2101,8 +2099,8 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
rolldown@1.2.6:
resolution: {integrity: sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA==}
rolldown@1.2.7:
resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
@@ -2155,8 +2153,8 @@ packages:
resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
engines: {node: '>= 14'}
socks@2.8.9:
resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==}
socks@2.8.10:
resolution: {integrity: sha512-e0VyvkVTwVYViNovRkZ9aodhxVlyoMn7eJhVUPxZ+eK9P/7CBkxvvsBOHqFPEH416726W8tLXXXjKwqgTErrCQ==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
source-map-js@1.2.1:
@@ -2286,8 +2284,8 @@ packages:
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
undici@6.28.0:
resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==}
undici@6.28.1:
resolution: {integrity: sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==}
engines: {node: '>=18.17'}
update-browserslist-db@1.3.2:
@@ -2457,8 +2455,8 @@ packages:
yuku-parser@0.5.48:
resolution: {integrity: sha512-OWBfhrpgK9+/4+IXG9oT8Bao4AhViQA7vdyNNH7EUg8dQYgwa70XtIBWTpCEme1P1ECyoDNYkn0wT63f8XRcVA==}
zimmerframe@1.1.4:
resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
zimmerframe@1.1.5:
resolution: {integrity: sha512-msJxIvYDYcoNL+PJsu+7qmpDWsYmAxTY+2TNYXXF0hzBzBk0BMecOqDOG/EckUoKCuKwObfbugIl8QpqHDXeFA==}
snapshots:
@@ -2863,7 +2861,7 @@ snapshots:
'@npmcli/query@5.0.0':
dependencies:
postcss-selector-parser: 7.1.5
postcss-selector-parser: 7.1.6
'@npmcli/redact@4.0.0': {}
@@ -2879,7 +2877,7 @@ snapshots:
'@oxc-project/types@0.146.0': {}
'@oxc-project/types@0.147.0': {}
'@oxc-project/types@0.148.0': {}
'@oxfmt/binding-android-arm-eabi@0.64.0':
optional: true
@@ -3021,49 +3019,49 @@ snapshots:
'@polka/url@1.0.0-next.29': {}
'@rolldown/binding-android-arm-eabi@1.2.6':
'@rolldown/binding-android-arm-eabi@1.2.7':
optional: true
'@rolldown/binding-android-arm64@1.2.6':
'@rolldown/binding-android-arm64@1.2.7':
optional: true
'@rolldown/binding-darwin-arm64@1.2.6':
'@rolldown/binding-darwin-arm64@1.2.7':
optional: true
'@rolldown/binding-darwin-x64@1.2.6':
'@rolldown/binding-darwin-x64@1.2.7':
optional: true
'@rolldown/binding-freebsd-x64@1.2.6':
'@rolldown/binding-freebsd-x64@1.2.7':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.2.6':
'@rolldown/binding-linux-arm-gnueabihf@1.2.7':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.2.6':
'@rolldown/binding-linux-arm64-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-arm64-musl@1.2.6':
'@rolldown/binding-linux-arm64-musl@1.2.7':
optional: true
'@rolldown/binding-linux-ppc64-gnu@1.2.6':
'@rolldown/binding-linux-ppc64-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-s390x-gnu@1.2.6':
'@rolldown/binding-linux-s390x-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-x64-gnu@1.2.6':
'@rolldown/binding-linux-x64-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-x64-musl@1.2.6':
'@rolldown/binding-linux-x64-musl@1.2.7':
optional: true
'@rolldown/binding-openharmony-arm64@1.2.6':
'@rolldown/binding-openharmony-arm64@1.2.7':
optional: true
'@rolldown/binding-win32-arm64-msvc@1.2.6':
'@rolldown/binding-win32-arm64-msvc@1.2.7':
optional: true
'@rolldown/binding-win32-x64-msvc@1.2.6':
'@rolldown/binding-win32-x64-msvc@1.2.7':
optional: true
'@rolldown/pluginutils@1.0.1': {}
@@ -3585,6 +3583,8 @@ snapshots:
color-name@1.1.4: {}
comlink@4.4.2: {}
commander@15.0.0: {}
common-ancestor-path@2.0.0: {}
@@ -3623,7 +3623,7 @@ snapshots:
esm-env@1.2.2: {}
esrap@2.3.6:
esrap@2.3.7:
dependencies:
'@jridgewell/sourcemap-codec': 1.6.0
@@ -3917,7 +3917,7 @@ snapshots:
semver: 7.8.5
tar: 7.5.22
tinyglobby: 0.2.17
undici: 6.28.0
undici: 6.28.1
which: 6.0.1
node-releases@2.0.54: {}
@@ -4090,17 +4090,11 @@ snapshots:
pngjs@7.0.0: {}
postcss-selector-parser@7.1.5:
postcss-selector-parser@7.1.6:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss@8.5.26:
dependencies:
nanoid: 3.3.18
picocolors: 1.1.1
source-map-js: 1.2.1
postcss@8.5.28:
dependencies:
nanoid: 3.3.18
@@ -4111,8 +4105,6 @@ snapshots:
dependencies:
svelte: 5.57.0
pretty-bytes@7.1.2: {}
pretty-bytes@7.1.3: {}
pretty-format@27.5.1:
@@ -4135,26 +4127,26 @@ snapshots:
readdirp@4.1.2: {}
rolldown@1.2.6:
rolldown@1.2.7:
dependencies:
'@oxc-project/types': 0.147.0
'@oxc-project/types': 0.148.0
'@rolldown/pluginutils': 1.0.1
optionalDependencies:
'@rolldown/binding-android-arm-eabi': 1.2.6
'@rolldown/binding-android-arm64': 1.2.6
'@rolldown/binding-darwin-arm64': 1.2.6
'@rolldown/binding-darwin-x64': 1.2.6
'@rolldown/binding-freebsd-x64': 1.2.6
'@rolldown/binding-linux-arm-gnueabihf': 1.2.6
'@rolldown/binding-linux-arm64-gnu': 1.2.6
'@rolldown/binding-linux-arm64-musl': 1.2.6
'@rolldown/binding-linux-ppc64-gnu': 1.2.6
'@rolldown/binding-linux-s390x-gnu': 1.2.6
'@rolldown/binding-linux-x64-gnu': 1.2.6
'@rolldown/binding-linux-x64-musl': 1.2.6
'@rolldown/binding-openharmony-arm64': 1.2.6
'@rolldown/binding-win32-arm64-msvc': 1.2.6
'@rolldown/binding-win32-x64-msvc': 1.2.6
'@rolldown/binding-android-arm-eabi': 1.2.7
'@rolldown/binding-android-arm64': 1.2.7
'@rolldown/binding-darwin-arm64': 1.2.7
'@rolldown/binding-darwin-x64': 1.2.7
'@rolldown/binding-freebsd-x64': 1.2.7
'@rolldown/binding-linux-arm-gnueabihf': 1.2.7
'@rolldown/binding-linux-arm64-gnu': 1.2.7
'@rolldown/binding-linux-arm64-musl': 1.2.7
'@rolldown/binding-linux-ppc64-gnu': 1.2.7
'@rolldown/binding-linux-s390x-gnu': 1.2.7
'@rolldown/binding-linux-x64-gnu': 1.2.7
'@rolldown/binding-linux-x64-musl': 1.2.7
'@rolldown/binding-openharmony-arm64': 1.2.7
'@rolldown/binding-win32-arm64-msvc': 1.2.7
'@rolldown/binding-win32-x64-msvc': 1.2.7
run-async@4.0.6: {}
@@ -4201,11 +4193,11 @@ snapshots:
dependencies:
agent-base: 7.1.4
debug: 4.4.3
socks: 2.8.9
socks: 2.8.10
transitivePeerDependencies:
- supports-color
socks@2.8.9:
socks@2.8.10:
dependencies:
ip-address: 10.7.0
smart-buffer: 4.2.0
@@ -4296,11 +4288,11 @@ snapshots:
clsx: 2.1.1
devalue: 5.9.2
esm-env: 1.2.2
esrap: 2.3.6
esrap: 2.3.7
is-reference: 3.0.3
locate-character: 3.0.0
magic-string: 0.30.21
zimmerframe: 1.1.4
zimmerframe: 1.1.5
transitivePeerDependencies:
- '@typescript-eslint/types'
@@ -4377,7 +4369,7 @@ snapshots:
undici-types@7.18.2: {}
undici@6.28.0: {}
undici@6.28.1: {}
update-browserslist-db@1.3.2(browserslist@4.28.9):
dependencies:
@@ -4453,8 +4445,8 @@ snapshots:
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.7
postcss: 8.5.26
rolldown: 1.2.6
postcss: 8.5.28
rolldown: 1.2.7
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 22.20.1
@@ -4464,8 +4456,8 @@ snapshots:
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.7
postcss: 8.5.26
rolldown: 1.2.6
postcss: 8.5.28
rolldown: 1.2.7
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 24.13.3
@@ -4586,4 +4578,4 @@ snapshots:
'@yuku-parser/binding-win32-arm64': 0.5.48
'@yuku-parser/binding-win32-x64': 0.5.48
zimmerframe@1.1.4: {}
zimmerframe@1.1.5: {}