diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 9b3b058..d30414a 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -65,13 +65,13 @@ jobs: steps: - uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - name: Checkout uses: actions/checkout@v4 - name: build and test run: | cd website - pnpm install + pnpm install --frozen-lockfile pnpm run lint build-website: @@ -81,13 +81,13 @@ jobs: steps: - uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - name: Checkout uses: actions/checkout@v4 - name: build and test run: | cd website - pnpm install + pnpm install --frozen-lockfile pnpm run build pnpm run test:unit @@ -98,7 +98,7 @@ jobs: steps: - uses: pnpm/action-setup@v4 with: - version: 8 + version: 9 - uses: actions/checkout@v4 - name: Install deps run: | diff --git a/website/.eslintrc.cjs b/website/.eslintrc.cjs index ebc1958..04fd192 100644 --- a/website/.eslintrc.cjs +++ b/website/.eslintrc.cjs @@ -1,30 +1,30 @@ module.exports = { - root: true, - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:svelte/recommended', - 'prettier' - ], - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - parserOptions: { - sourceType: 'module', - ecmaVersion: 2020, - extraFileExtensions: ['.svelte'] - }, - env: { - browser: true, - es2017: true, - node: true - }, - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser' - } - } - ] + root: true, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:svelte/recommended", + "prettier", + ], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + parserOptions: { + sourceType: "module", + ecmaVersion: 2020, + extraFileExtensions: [".svelte"], + }, + env: { + browser: true, + es2017: true, + node: true, + }, + overrides: [ + { + files: ["*.svelte"], + parser: "svelte-eslint-parser", + parserOptions: { + parser: "@typescript-eslint/parser", + }, + }, + ], }; diff --git a/website/.prettierrc b/website/.prettierrc deleted file mode 100644 index a77fdde..0000000 --- a/website/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "useTabs": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "pluginSearchDirs": ["."], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] -} diff --git a/website/.prettierrc.toml b/website/.prettierrc.toml new file mode 100644 index 0000000..aac17a3 --- /dev/null +++ b/website/.prettierrc.toml @@ -0,0 +1,3 @@ +tabWidth = 2 +plugins = ["prettier-plugin-svelte"] + overrides = [{ files = "*.svelte", options = { parser = "svelte" }}] diff --git a/website/package.json b/website/package.json index 37feeb0..c9aee61 100644 --- a/website/package.json +++ b/website/package.json @@ -1,49 +1,51 @@ { - "name": "website", - "version": "0.0.1", - "private": true, - "packageManager": "pnpm@9.15.9", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview", - "test": "pnpm run test:integration && pnpm run test:unit", - "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --plugin-search-dir . --check . && eslint .", - "format": "prettier --plugin-search-dir . --write .", - "test:integration": "playwright test", - "test:integration-ui": "playwright test --ui", - "test:unit": "vitest" - }, - "devDependencies": { - "@playwright/test": "^1.45.2", - "@sveltejs/adapter-auto": "^3.0.0", - "@sveltejs/adapter-node": "^2.0.0", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "@zerodevx/svelte-toast": "^0.9.5", - "autoprefixer": "^10.4.19", - "eslint": "^8.57.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-svelte": "^2.43.0", - "monaco-editor": "0.40.0", - "postcss": "^8.4.39", - "prettier": "^2.8.8", - "prettier-plugin-svelte": "^2.10.1", - "svelte": "^4.2.18", - "svelte-adapter-bun": "^0.5.2", - "svelte-check": "^3.8.4", - "tailwindcss": "^3.4.6", - "tslib": "^2.6.3", - "typescript": "^5.5.3", - "vite": "^5.0.0", - "vitest": "^1.0.0" - }, - "type": "module", - "dependencies": { - "monaco-vim": "^0.4.1" - } + "name": "website", + "version": "0.0.1", + "private": true, + "packageManager": "pnpm@9.15.9", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "test": "pnpm run test:integration && pnpm run test:unit", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --check . && eslint .", + "format": "prettier --write .", + "test:integration": "playwright test", + "test:integration-ui": "playwright test --ui", + "test:unit": "vitest" + }, + "devDependencies": { + "@gregofi1/regex-tooling": "^0.0.6", + "@playwright/test": "^1.45.2", + "@sveltejs/adapter-auto": "^3.0.0", + "@sveltejs/adapter-node": "^2.0.0", + "@sveltejs/kit": "^2.5.27", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@viz-js/viz": "^3.14.0", + "@zerodevx/svelte-toast": "^0.9.6", + "autoprefixer": "^10.4.19", + "eslint": "^8.57.0", + "eslint-config-prettier": "^8.10.0", + "eslint-plugin-svelte": "^2.45.1", + "monaco-editor": "0.52.2", + "postcss": "^8.4.39", + "prettier": "^3.1.0", + "prettier-plugin-svelte": "^3.2.6", + "svelte": "^5.0.0", + "svelte-adapter-bun": "^0.5.2", + "svelte-check": "^4.0.0", + "tailwindcss": "^3.4.6", + "tslib": "^2.6.3", + "typescript": "^5.5.3", + "vite": "^5.4.4", + "vitest": "^1.0.0" + }, + "type": "module", + "dependencies": { + "monaco-vim": "^0.4.1" + } } diff --git a/website/playwright.config.ts b/website/playwright.config.ts index 27fdf9a..abb7ae7 100644 --- a/website/playwright.config.ts +++ b/website/playwright.config.ts @@ -1,11 +1,11 @@ -import type { PlaywrightTestConfig } from '@playwright/test'; +import type { PlaywrightTestConfig } from "@playwright/test"; const config: PlaywrightTestConfig = { - use: { - baseURL: 'http://localhost:80' - }, - testDir: 'tests', - testMatch: /(.+\.)?(test|spec)\.[jt]s/ + use: { + baseURL: "http://localhost:80", + }, + testDir: "tests", + testMatch: /(.+\.)?(test|spec)\.[jt]s/, }; export default config; diff --git a/website/pnpm-lock.yaml b/website/pnpm-lock.yaml index 155cde4..cc3732c 100644 --- a/website/pnpm-lock.yaml +++ b/website/pnpm-lock.yaml @@ -10,32 +10,38 @@ importers: dependencies: monaco-vim: specifier: ^0.4.1 - version: 0.4.1(monaco-editor@0.40.0) + version: 0.4.1(monaco-editor@0.52.2) devDependencies: + '@gregofi1/regex-tooling': + specifier: ^0.0.6 + version: 0.0.6 '@playwright/test': specifier: ^1.45.2 version: 1.45.2 '@sveltejs/adapter-auto': specifier: ^3.0.0 - version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11))) + version: 3.2.2(@sveltejs/kit@2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11))) '@sveltejs/adapter-node': specifier: ^2.0.0 - version: 2.1.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11))) + version: 2.1.2(@sveltejs/kit@2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11))) '@sveltejs/kit': - specifier: ^2.0.0 - version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) + specifier: ^2.5.27 + version: 2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) '@sveltejs/vite-plugin-svelte': - specifier: ^3.0.0 - version: 3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) + specifier: ^4.0.0 + version: 4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) '@typescript-eslint/eslint-plugin': specifier: ^6.21.0 version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) '@typescript-eslint/parser': specifier: ^6.21.0 version: 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@viz-js/viz': + specifier: ^3.14.0 + version: 3.14.0 '@zerodevx/svelte-toast': - specifier: ^0.9.5 - version: 0.9.5(svelte@4.2.18) + specifier: ^0.9.6 + version: 0.9.6(svelte@5.34.7) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.39) @@ -46,29 +52,29 @@ importers: specifier: ^8.10.0 version: 8.10.0(eslint@8.57.0) eslint-plugin-svelte: - specifier: ^2.43.0 - version: 2.43.0(eslint@8.57.0)(svelte@4.2.18) + specifier: ^2.45.1 + version: 2.46.1(eslint@8.57.0)(svelte@5.34.7) monaco-editor: - specifier: 0.40.0 - version: 0.40.0 + specifier: 0.52.2 + version: 0.52.2 postcss: specifier: ^8.4.39 version: 8.4.39 prettier: - specifier: ^2.8.8 - version: 2.8.8 + specifier: ^3.1.0 + version: 3.5.3 prettier-plugin-svelte: - specifier: ^2.10.1 - version: 2.10.1(prettier@2.8.8)(svelte@4.2.18) + specifier: ^3.2.6 + version: 3.4.0(prettier@3.5.3)(svelte@5.34.7) svelte: - specifier: ^4.2.18 - version: 4.2.18 + specifier: ^5.0.0 + version: 5.34.7 svelte-adapter-bun: specifier: ^0.5.2 version: 0.5.2 svelte-check: - specifier: ^3.8.4 - version: 3.8.4(postcss-load-config@4.0.2(postcss@8.4.39))(postcss@8.4.39)(svelte@4.2.18) + specifier: ^4.0.0 + version: 4.2.2(svelte@5.34.7)(typescript@5.5.3) tailwindcss: specifier: ^3.4.6 version: 3.4.6 @@ -79,8 +85,8 @@ importers: specifier: ^5.5.3 version: 5.5.3 vite: - specifier: ^5.0.0 - version: 5.3.4(@types/node@20.14.11) + specifier: ^5.4.4 + version: 5.4.19(@types/node@20.14.11) vitest: specifier: ^1.0.0 version: 1.6.0(@types/node@20.14.11) @@ -251,6 +257,9 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@gregofi1/regex-tooling@0.0.6': + resolution: {integrity: sha512-Yuag7cgbFMxBTMIwWhs2fBxd0kGA8GWz2/I3vbWx1ytgybZIJlznGK3rP5Qo926nrOvdb5czTsncb+eRn0qnAg==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -355,84 +364,189 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.44.0': + resolution: {integrity: sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.19.0': resolution: {integrity: sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.44.0': + resolution: {integrity: sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.19.0': resolution: {integrity: sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.44.0': + resolution: {integrity: sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.19.0': resolution: {integrity: sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.44.0': + resolution: {integrity: sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.44.0': + resolution: {integrity: sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.44.0': + resolution: {integrity: sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.19.0': resolution: {integrity: sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.19.0': resolution: {integrity: sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.44.0': + resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.19.0': resolution: {integrity: sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.44.0': + resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.19.0': resolution: {integrity: sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.44.0': + resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.19.0': resolution: {integrity: sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.19.0': resolution: {integrity: sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.44.0': + resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.44.0': + resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.19.0': resolution: {integrity: sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.44.0': + resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.19.0': resolution: {integrity: sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.44.0': + resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.19.0': resolution: {integrity: sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.44.0': + resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.19.0': resolution: {integrity: sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.44.0': + resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.19.0': resolution: {integrity: sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.44.0': + resolution: {integrity: sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.19.0': resolution: {integrity: sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.44.0': + resolution: {integrity: sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==} + cpu: [x64] + os: [win32] + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@sveltejs/acorn-typescript@1.0.5': + resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==} + peerDependencies: + acorn: ^8.9.0 + '@sveltejs/adapter-auto@3.2.2': resolution: {integrity: sha512-Mso5xPCA8zgcKrv+QioVlqMZkyUQ5MjDJiEPuG/Z7cV/5tmwV7LmcVWk5tZ+H0NCOV1x12AsoSpt/CwFwuVXMA==} peerDependencies: @@ -443,28 +557,28 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 - '@sveltejs/kit@2.5.18': - resolution: {integrity: sha512-+g06hvpVAnH7b4CDjhnTDgFWBKBiQJpuSmQeGYOuzbO3SC3tdYjRNlDCrafvDtKbGiT2uxY5Dn9qdEUGVZdWOQ==} + '@sveltejs/kit@2.22.0': + resolution: {integrity: sha512-DJm0UxVgzXq+1MUfiJK4Ridk7oIQsIets6JwHiEl97sI6nXScfXe+BeqNhzB7jQIVBb3BM51U4hNk8qQxRXBAA==} engines: {node: '>=18.13'} hasBin: true peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 svelte: ^4.0.0 || ^5.0.0-next.0 - vite: ^5.0.3 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 - '@sveltejs/vite-plugin-svelte-inspector@2.1.0': - resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} - engines: {node: ^18.0.0 || >=20} + '@sveltejs/vite-plugin-svelte-inspector@3.0.1': + resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^3.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 + '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 + svelte: ^5.0.0-next.96 || ^5.0.0 vite: ^5.0.0 - '@sveltejs/vite-plugin-svelte@3.1.1': - resolution: {integrity: sha512-rimpFEAboBBHIlzISibg94iP09k/KYdHgVhJlcsTfn7KMBhc70jFX/GRWkRdFCc2fdnk+4+Bdfej23cMDnJS6A==} - engines: {node: ^18.0.0 || >=20} + '@sveltejs/vite-plugin-svelte@4.0.4': + resolution: {integrity: sha512-0ba1RQ/PHen5FGpdSrW7Y3fAMQjrXantECALeOiOdBdzR5+5vPP6HVZRLmZaQL+W8m++o+haIAKq5qT+MiZ7VA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - svelte: ^4.0.0 || ^5.0.0-next.0 + svelte: ^5.0.0-next.96 || ^5.0.0 vite: ^5.0.0 '@types/cookie@0.6.0': @@ -473,15 +587,15 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/node@20.14.11': resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} - '@types/pug@2.0.10': - resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -564,10 +678,13 @@ packages: '@vitest/utils@1.6.0': resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} - '@zerodevx/svelte-toast@0.9.5': - resolution: {integrity: sha512-JLeB/oRdJfT+dz9A5bgd3Z7TuQnBQbeUtXrGIrNWMGqWbabpepBF2KxtWVhL2qtxpRqhae2f6NAOzH7xs4jUSw==} + '@viz-js/viz@3.14.0': + resolution: {integrity: sha512-bL+ZNMdT8egeQD2JvODQVfTpnBtuCXA6mvFL1S5d/JBc8qGVWIadRT+1Qin9oUQTJwB0irxE6V1XUkrR9L1Neg==} + + '@zerodevx/svelte-toast@0.9.6': + resolution: {integrity: sha512-nHlTrCjverlPK9yukK6fqbG3e/R+f10ldrc4nJHOe2qNDScuPTuYVSFEk2dDDtzWAwTN5pmdEXgA3M2RbT8jiw==} peerDependencies: - svelte: ^3.57.0 || ^4.0.0 + svelte: ^3.57.0 || ^4.0.0 || ^5.0.0 acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -583,6 +700,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -619,8 +741,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -662,10 +785,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -700,8 +819,13 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - code-red@1.0.4: - resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -731,10 +855,6 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - css-tree@2.3.1: - resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -749,6 +869,15 @@ packages: supports-color: optional: true + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + deep-eql@4.1.4: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} @@ -760,16 +889,8 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - - devalue@5.0.0: - resolution: {integrity: sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA==} + devalue@5.1.1: + resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -801,9 +922,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - es6-promise@3.3.1: - resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -829,12 +947,12 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-svelte@2.43.0: - resolution: {integrity: sha512-REkxQWvg2pp7QVLxQNa+dJ97xUqRe7Y2JJbSWkHSuszu0VcblZtXkPBPckkivk99y5CdLw4slqfPylL2d/X4jQ==} + eslint-plugin-svelte@2.46.1: + resolution: {integrity: sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true @@ -852,8 +970,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - esm-env@1.0.0: - resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} + esm-env@1.2.2: + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -863,6 +981,9 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} + esrap@1.4.9: + resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -901,6 +1022,14 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -985,9 +1114,6 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -1063,8 +1189,8 @@ packages: is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + is-reference@3.0.3: + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -1103,8 +1229,8 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - known-css-properties@0.34.0: - resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} + known-css-properties@0.35.0: + resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -1144,8 +1270,8 @@ packages: magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} - mdn-data@2.0.30: - resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -1162,10 +1288,6 @@ packages: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1181,22 +1303,15 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - mlly@1.7.1: resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} - monaco-editor@0.40.0: - resolution: {integrity: sha512-1wymccLEuFSMBvCk/jT1YDW/GuxMLYwnFwF9CDyYCxoTw2Pt379J3FUhwy9c43j51JdcxVPjwk0jm0EVDsBS2g==} + monaco-editor@0.52.2: + resolution: {integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==} monaco-vim@0.4.1: resolution: {integrity: sha512-+cy0TE9xarjLIgUexqxIEbat3K1l7WbiFSLZKAO2kYl1qFRvkeWn4ro/C4c6dK0i9+WQKUC4Dhu/nyCbZfA37w==} @@ -1214,9 +1329,17 @@ packages: ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1311,12 +1434,12 @@ packages: pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -1407,19 +1530,23 @@ packages: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-svelte@2.10.1: - resolution: {integrity: sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==} + prettier-plugin-svelte@3.4.0: + resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} peerDependencies: - prettier: ^1.16.4 || ^2.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} hasBin: true pretty-format@29.7.0: @@ -1443,6 +1570,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -1455,11 +1586,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -1470,6 +1596,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.44.0: + resolution: {integrity: sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -1477,9 +1608,6 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - sander@0.5.1: - resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} - semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} @@ -1503,22 +1631,22 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} + sirv@3.0.1: + resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==} + engines: {node: '>=18'} slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - sorcery@0.11.1: - resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==} - hasBin: true - source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -1545,10 +1673,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1572,67 +1696,26 @@ packages: svelte-adapter-bun@0.5.2: resolution: {integrity: sha512-xEtFgaal6UgrCwwkSIcapO9kopoFNUYCYqyKCikdqxX9bz2TDYnrWQZ7qBnkunMxi1HOIERUCvTcebYGiarZLA==} - svelte-check@3.8.4: - resolution: {integrity: sha512-61aHMkdinWyH8BkkTX9jPLYxYzaAAz/FK/VQqdr2FiCQQ/q04WCwDlpGbHff1GdrMYTmW8chlTFvRWL9k0A8vg==} + svelte-check@4.2.2: + resolution: {integrity: sha512-1+31EOYZ7NKN0YDMKusav2hhEoA51GD9Ws6o//0SphMT0ve9mBTsTUEX7OmDMadUP3KjNHsSKtJrqdSaD8CrGQ==} + engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: - svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + svelte: ^4.0.0 || ^5.0.0-next.0 + typescript: '>=5.0.0' - svelte-eslint-parser@0.41.0: - resolution: {integrity: sha512-L6f4hOL+AbgfBIB52Z310pg1d2QjRqm7wy3kI1W6hhdhX5bvu7+f0R6w4ykp5HoDdzq+vGhIJmsisaiJDGmVfA==} + svelte-eslint-parser@0.43.0: + resolution: {integrity: sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - svelte: ^3.37.0 || ^4.0.0 || ^5.0.0-next.191 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true - svelte-hmr@0.16.0: - resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - peerDependencies: - svelte: ^3.19.0 || ^4.0.0 - - svelte-preprocess@5.1.4: - resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@babel/core': ^7.10.2 - coffeescript: ^2.5.1 - less: ^3.11.3 || ^4.0.0 - postcss: ^7 || ^8 - postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - pug: ^3.0.0 - sass: ^1.26.8 - stylus: ^0.55.0 - sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 - svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 - typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0' - peerDependenciesMeta: - '@babel/core': - optional: true - coffeescript: - optional: true - less: - optional: true - postcss: - optional: true - postcss-load-config: - optional: true - pug: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - typescript: - optional: true - - svelte@4.2.18: - resolution: {integrity: sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==} - engines: {node: '>=16'} + svelte@5.34.7: + resolution: {integrity: sha512-5PEg+QQKce4t1qiOtVUhUS3AQRTtxJyGBTpxLcNWnr0Ve8q4r06bMo0Gv8uhtCPWlztZHoi3Ye7elLhu+PCTMg==} + engines: {node: '>=18'} tailwindcss@3.4.6: resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} @@ -1723,8 +1806,8 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite@5.3.4: - resolution: {integrity: sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA==} + vite@5.4.19: + resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -1732,6 +1815,7 @@ packages: less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -1744,6 +1828,8 @@ packages: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -1751,10 +1837,10 @@ packages: terser: optional: true - vitefu@0.2.5: - resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + vitefu@1.0.7: + resolution: {integrity: sha512-eRWXLBbJjW3X5z5P5IHcSm2yYbYRPb2kQuc+oqsbAl99WB5kVsPbiiox+cymo8twTzifA6itvhr2CmjnaZZp0Q==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 peerDependenciesMeta: vite: optional: true @@ -1826,6 +1912,9 @@ packages: resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} + zimmerframe@1.1.2: + resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + snapshots: '@alloc/quick-lru@5.2.0': {} @@ -1927,6 +2016,8 @@ snapshots: '@eslint/js@8.57.0': {} + '@gregofi1/regex-tooling@0.0.6': {} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -2029,104 +2120,172 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.19.0': optional: true + '@rollup/rollup-android-arm-eabi@4.44.0': + optional: true + '@rollup/rollup-android-arm64@4.19.0': optional: true + '@rollup/rollup-android-arm64@4.44.0': + optional: true + '@rollup/rollup-darwin-arm64@4.19.0': optional: true + '@rollup/rollup-darwin-arm64@4.44.0': + optional: true + '@rollup/rollup-darwin-x64@4.19.0': optional: true + '@rollup/rollup-darwin-x64@4.44.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.44.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.44.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.19.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.44.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.19.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.44.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.19.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.44.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.19.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.44.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.44.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.19.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.19.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.44.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.44.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.19.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.44.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.19.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.44.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.19.0': optional: true + '@rollup/rollup-linux-x64-musl@4.44.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.19.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.44.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.19.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.44.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.19.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.44.0': + optional: true + '@sinclair/typebox@0.27.8': {} - '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))': + '@sveltejs/acorn-typescript@1.0.5(acorn@8.12.1)': dependencies: - '@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) + acorn: 8.12.1 + + '@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)': + dependencies: + acorn: 8.15.0 + + '@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))': + dependencies: + '@sveltejs/kit': 2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) import-meta-resolve: 4.1.0 - '@sveltejs/adapter-node@2.1.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))': + '@sveltejs/adapter-node@2.1.2(@sveltejs/kit@2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))': dependencies: '@rollup/plugin-commonjs': 25.0.8(rollup@4.19.0) '@rollup/plugin-json': 6.1.0(rollup@4.19.0) '@rollup/plugin-node-resolve': 15.2.3(rollup@4.19.0) - '@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) + '@sveltejs/kit': 2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) rollup: 4.19.0 - '@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11))': + '@sveltejs/kit@2.22.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) + '@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) '@types/cookie': 0.6.0 + acorn: 8.15.0 cookie: 0.6.0 - devalue: 5.0.0 - esm-env: 1.0.0 - import-meta-resolve: 4.1.0 + devalue: 5.1.1 + esm-env: 1.2.2 kleur: 4.1.5 magic-string: 0.30.10 mrmime: 2.0.0 sade: 1.8.1 set-cookie-parser: 2.6.0 - sirv: 2.0.4 - svelte: 4.2.18 - tiny-glob: 0.2.9 - vite: 5.3.4(@types/node@20.14.11) + sirv: 3.0.1 + svelte: 5.34.7 + vite: 5.4.19(@types/node@20.14.11) + vitefu: 1.0.7(vite@5.4.19(@types/node@20.14.11)) - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11))': + '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) - debug: 4.3.5 - svelte: 4.2.18 - vite: 5.3.4(@types/node@20.14.11) + '@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) + debug: 4.4.1 + svelte: 5.34.7 + vite: 5.4.19(@types/node@20.14.11) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11))': + '@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)))(svelte@4.2.18)(vite@5.3.4(@types/node@20.14.11)) - debug: 4.3.5 + '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)))(svelte@5.34.7)(vite@5.4.19(@types/node@20.14.11)) + debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.10 - svelte: 4.2.18 - svelte-hmr: 0.16.0(svelte@4.2.18) - vite: 5.3.4(@types/node@20.14.11) - vitefu: 0.2.5(vite@5.3.4(@types/node@20.14.11)) + magic-string: 0.30.17 + svelte: 5.34.7 + vite: 5.4.19(@types/node@20.14.11) + vitefu: 1.0.7(vite@5.4.19(@types/node@20.14.11)) transitivePeerDependencies: - supports-color @@ -2134,6 +2293,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.8': {} + '@types/json-schema@7.0.15': {} '@types/node@20.14.11': @@ -2141,8 +2302,6 @@ snapshots: undici-types: 5.26.5 optional: true - '@types/pug@2.0.10': {} - '@types/resolve@1.20.2': {} '@types/semver@7.5.8': {} @@ -2264,9 +2423,11 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@zerodevx/svelte-toast@0.9.5(svelte@4.2.18)': + '@viz-js/viz@3.14.0': {} + + '@zerodevx/svelte-toast@0.9.6(svelte@5.34.7)': dependencies: - svelte: 4.2.18 + svelte: 5.34.7 acorn-jsx@5.3.2(acorn@8.12.1): dependencies: @@ -2278,6 +2439,8 @@ snapshots: acorn@8.12.1: {} + acorn@8.15.0: {} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -2308,9 +2471,7 @@ snapshots: argparse@2.0.1: {} - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 + aria-query@5.3.2: {} array-union@2.1.0: {} @@ -2352,8 +2513,6 @@ snapshots: node-releases: 2.0.17 update-browserslist-db: 1.1.0(browserslist@4.23.2) - buffer-crc32@1.0.0: {} - builtin-modules@3.3.0: {} cac@6.7.14: {} @@ -2395,13 +2554,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - code-red@1.0.4: + chokidar@4.0.3: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.5 - acorn: 8.12.1 - estree-walker: 3.0.3 - periscopic: 3.1.0 + readdirp: 4.1.2 + + clsx@2.1.1: {} color-convert@2.0.1: dependencies: @@ -2425,17 +2582,16 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-tree@2.3.1: - dependencies: - mdn-data: 2.0.30 - source-map-js: 1.2.0 - cssesc@3.0.0: {} debug@4.3.5: dependencies: ms: 2.1.2 + debug@4.4.1: + dependencies: + ms: 2.1.3 + deep-eql@4.1.4: dependencies: type-detect: 4.0.8 @@ -2444,11 +2600,7 @@ snapshots: deepmerge@4.3.1: {} - dequal@2.0.3: {} - - detect-indent@6.1.0: {} - - devalue@5.0.0: {} + devalue@5.1.1: {} didyoumean@1.2.2: {} @@ -2472,8 +2624,6 @@ snapshots: emoji-regex@9.2.2: {} - es6-promise@3.3.1: {} - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -2513,22 +2663,22 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-svelte@2.43.0(eslint@8.57.0)(svelte@4.2.18): + eslint-plugin-svelte@2.46.1(eslint@8.57.0)(svelte@5.34.7): dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@jridgewell/sourcemap-codec': 1.5.0 eslint: 8.57.0 eslint-compat-utils: 0.5.1(eslint@8.57.0) esutils: 2.0.3 - known-css-properties: 0.34.0 + known-css-properties: 0.35.0 postcss: 8.4.39 postcss-load-config: 3.1.4(postcss@8.4.39) postcss-safe-parser: 6.0.0(postcss@8.4.39) postcss-selector-parser: 6.1.1 semver: 7.6.3 - svelte-eslint-parser: 0.41.0(svelte@4.2.18) + svelte-eslint-parser: 0.43.0(svelte@5.34.7) optionalDependencies: - svelte: 4.2.18 + svelte: 5.34.7 transitivePeerDependencies: - ts-node @@ -2582,7 +2732,7 @@ snapshots: transitivePeerDependencies: - supports-color - esm-env@1.0.0: {} + esm-env@1.2.2: {} espree@9.6.1: dependencies: @@ -2594,6 +2744,10 @@ snapshots: dependencies: estraverse: 5.3.0 + esrap@1.4.9: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -2638,6 +2792,8 @@ snapshots: dependencies: reusify: 1.0.4 + fdir@6.4.6: {} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -2731,8 +2887,6 @@ snapshots: globrex@0.1.2: {} - graceful-fs@4.2.11: {} - graphemer@1.4.0: {} has-flag@4.0.0: {} @@ -2791,9 +2945,9 @@ snapshots: dependencies: '@types/estree': 1.0.5 - is-reference@3.0.2: + is-reference@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.8 is-stream@3.0.0: {} @@ -2825,7 +2979,7 @@ snapshots: kleur@4.1.5: {} - known-css-properties@0.34.0: {} + known-css-properties@0.35.0: {} levn@0.4.1: dependencies: @@ -2861,7 +3015,9 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - mdn-data@2.0.30: {} + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 merge-stream@2.0.0: {} @@ -2874,8 +3030,6 @@ snapshots: mimic-fn@4.0.0: {} - min-indent@1.0.1: {} - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -2892,14 +3046,8 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} - minipass@7.1.2: {} - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - mlly@1.7.1: dependencies: acorn: 8.12.1 @@ -2907,11 +3055,11 @@ snapshots: pkg-types: 1.1.3 ufo: 1.5.4 - monaco-editor@0.40.0: {} + monaco-editor@0.52.2: {} - monaco-vim@0.4.1(monaco-editor@0.40.0): + monaco-vim@0.4.1(monaco-editor@0.52.2): dependencies: - monaco-editor: 0.40.0 + monaco-editor: 0.52.2 mri@1.2.0: {} @@ -2919,12 +3067,16 @@ snapshots: ms@2.1.2: {} + ms@2.1.3: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.11: {} + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -2999,14 +3151,10 @@ snapshots: pathval@1.1.1: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} pify@2.3.0: {} @@ -3079,14 +3227,20 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} - prettier-plugin-svelte@2.10.1(prettier@2.8.8)(svelte@4.2.18): + prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.34.7): dependencies: - prettier: 2.8.8 - svelte: 4.2.18 + prettier: 3.5.3 + svelte: 5.34.7 - prettier@2.8.8: {} + prettier@3.5.3: {} pretty-format@29.7.0: dependencies: @@ -3108,6 +3262,8 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.1.2: {} + resolve-from@4.0.0: {} resolve@1.22.8: @@ -3118,10 +3274,6 @@ snapshots: reusify@1.0.4: {} - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -3148,6 +3300,32 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.19.0 fsevents: 2.3.3 + rollup@4.44.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.44.0 + '@rollup/rollup-android-arm64': 4.44.0 + '@rollup/rollup-darwin-arm64': 4.44.0 + '@rollup/rollup-darwin-x64': 4.44.0 + '@rollup/rollup-freebsd-arm64': 4.44.0 + '@rollup/rollup-freebsd-x64': 4.44.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.0 + '@rollup/rollup-linux-arm-musleabihf': 4.44.0 + '@rollup/rollup-linux-arm64-gnu': 4.44.0 + '@rollup/rollup-linux-arm64-musl': 4.44.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-gnu': 4.44.0 + '@rollup/rollup-linux-riscv64-musl': 4.44.0 + '@rollup/rollup-linux-s390x-gnu': 4.44.0 + '@rollup/rollup-linux-x64-gnu': 4.44.0 + '@rollup/rollup-linux-x64-musl': 4.44.0 + '@rollup/rollup-win32-arm64-msvc': 4.44.0 + '@rollup/rollup-win32-ia32-msvc': 4.44.0 + '@rollup/rollup-win32-x64-msvc': 4.44.0 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -3156,13 +3334,6 @@ snapshots: dependencies: mri: 1.2.0 - sander@0.5.1: - dependencies: - es6-promise: 3.3.1 - graceful-fs: 4.2.11 - mkdirp: 0.5.6 - rimraf: 2.7.1 - semver@7.6.3: {} set-cookie-parser@2.6.0: {} @@ -3177,7 +3348,7 @@ snapshots: signal-exit@4.1.0: {} - sirv@2.0.4: + sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.25 mrmime: 2.0.0 @@ -3185,15 +3356,10 @@ snapshots: slash@3.0.0: {} - sorcery@0.11.1: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - buffer-crc32: 1.0.0 - minimist: 1.2.8 - sander: 0.5.1 - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + stackback@0.0.2: {} std-env@3.7.0: {} @@ -3220,10 +3386,6 @@ snapshots: strip-final-newline@3.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@3.1.1: {} strip-literal@2.1.0: @@ -3250,27 +3412,19 @@ snapshots: dependencies: tiny-glob: 0.2.9 - svelte-check@3.8.4(postcss-load-config@4.0.2(postcss@8.4.39))(postcss@8.4.39)(svelte@4.2.18): + svelte-check@4.2.2(svelte@5.34.7)(typescript@5.5.3): dependencies: '@jridgewell/trace-mapping': 0.3.25 - chokidar: 3.6.0 + chokidar: 4.0.3 + fdir: 6.4.6 picocolors: 1.0.1 sade: 1.8.1 - svelte: 4.2.18 - svelte-preprocess: 5.1.4(postcss-load-config@4.0.2(postcss@8.4.39))(postcss@8.4.39)(svelte@4.2.18)(typescript@5.5.3) + svelte: 5.34.7 typescript: 5.5.3 transitivePeerDependencies: - - '@babel/core' - - coffeescript - - less - - postcss - - postcss-load-config - - pug - - sass - - stylus - - sugarss + - picomatch - svelte-eslint-parser@0.41.0(svelte@4.2.18): + svelte-eslint-parser@0.43.0(svelte@5.34.7): dependencies: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -3278,41 +3432,24 @@ snapshots: postcss: 8.4.39 postcss-scss: 4.0.9(postcss@8.4.39) optionalDependencies: - svelte: 4.2.18 + svelte: 5.34.7 - svelte-hmr@0.16.0(svelte@4.2.18): - dependencies: - svelte: 4.2.18 - - svelte-preprocess@5.1.4(postcss-load-config@4.0.2(postcss@8.4.39))(postcss@8.4.39)(svelte@4.2.18)(typescript@5.5.3): - dependencies: - '@types/pug': 2.0.10 - detect-indent: 6.1.0 - magic-string: 0.30.10 - sorcery: 0.11.1 - strip-indent: 3.0.0 - svelte: 4.2.18 - optionalDependencies: - postcss: 8.4.39 - postcss-load-config: 4.0.2(postcss@8.4.39) - typescript: 5.5.3 - - svelte@4.2.18: + svelte@5.34.7: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@sveltejs/acorn-typescript': 1.0.5(acorn@8.12.1) '@types/estree': 1.0.5 acorn: 8.12.1 - aria-query: 5.3.0 + aria-query: 5.3.2 axobject-query: 4.1.0 - code-red: 1.0.4 - css-tree: 2.3.1 - estree-walker: 3.0.3 - is-reference: 3.0.2 + clsx: 2.1.1 + esm-env: 1.2.2 + esrap: 1.4.9 + is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.10 - periscopic: 3.1.0 + magic-string: 0.30.17 + zimmerframe: 1.1.2 tailwindcss@3.4.6: dependencies: @@ -3409,29 +3546,30 @@ snapshots: debug: 4.3.5 pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.3.4(@types/node@20.14.11) + vite: 5.4.19(@types/node@20.14.11) transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vite@5.3.4(@types/node@20.14.11): + vite@5.4.19(@types/node@20.14.11): dependencies: esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.19.0 + postcss: 8.5.6 + rollup: 4.44.0 optionalDependencies: '@types/node': 20.14.11 fsevents: 2.3.3 - vitefu@0.2.5(vite@5.3.4(@types/node@20.14.11)): + vitefu@1.0.7(vite@5.4.19(@types/node@20.14.11)): optionalDependencies: - vite: 5.3.4(@types/node@20.14.11) + vite: 5.4.19(@types/node@20.14.11) vitest@1.6.0(@types/node@20.14.11): dependencies: @@ -3452,7 +3590,7 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.3.4(@types/node@20.14.11) + vite: 5.4.19(@types/node@20.14.11) vite-node: 1.6.0(@types/node@20.14.11) why-is-node-running: 2.3.0 optionalDependencies: @@ -3461,6 +3599,7 @@ snapshots: - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -3498,3 +3637,5 @@ snapshots: yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} + + zimmerframe@1.1.2: {} diff --git a/website/postcss.config.js b/website/postcss.config.js index 0f77216..2aa7205 100644 --- a/website/postcss.config.js +++ b/website/postcss.config.js @@ -1,6 +1,6 @@ export default { - plugins: { - tailwindcss: {}, - autoprefixer: {} - } + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, }; diff --git a/website/src/app.d.ts b/website/src/app.d.ts index f59b884..899c7e8 100644 --- a/website/src/app.d.ts +++ b/website/src/app.d.ts @@ -1,12 +1,12 @@ // See https://kit.svelte.dev/docs/types#app // for information about these interfaces declare global { - namespace App { - // interface Error {} - // interface Locals {} - // interface PageData {} - // interface Platform {} - } + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface Platform {} + } } export {}; diff --git a/website/src/app.html b/website/src/app.html index 7dd209b..994c2cc 100644 --- a/website/src/app.html +++ b/website/src/app.html @@ -1,13 +1,13 @@ - + - - CodeRunner - - - - %sveltekit.head% - - -
%sveltekit.body%
- + + CodeRunner + + + + %sveltekit.head% + + +
%sveltekit.body%
+ diff --git a/website/src/hooks.ts b/website/src/hooks.ts index c511d8b..e148176 100644 --- a/website/src/hooks.ts +++ b/website/src/hooks.ts @@ -1,7 +1,7 @@ -import type { Reroute } from '@sveltejs/kit'; +import type { Reroute } from "@sveltejs/kit"; export const reroute: Reroute = ({ url }) => { - if (url.pathname.startsWith('/code/s')) { - return '/code'; - } + if (url.pathname.startsWith("/code/s")) { + return "/code"; + } }; diff --git a/website/src/index.test.ts b/website/src/index.test.ts index e07cbbd..dadc7e4 100644 --- a/website/src/index.test.ts +++ b/website/src/index.test.ts @@ -1,7 +1,7 @@ -import { describe, it, expect } from 'vitest'; +import { describe, it, expect } from "vitest"; -describe('sum test', () => { - it('adds 1 + 2 to equal 3', () => { - expect(1 + 2).toBe(3); - }); +describe("sum test", () => { + it("adds 1 + 2 to equal 3", () => { + expect(1 + 2).toBe(3); + }); }); diff --git a/website/src/lib/OutputBox.svelte b/website/src/lib/OutputBox.svelte index a3cace1..a4a2238 100644 --- a/website/src/lib/OutputBox.svelte +++ b/website/src/lib/OutputBox.svelte @@ -1,30 +1,34 @@
-
-
{lastResult?.stdout}
- {#if isRequestPending} - - {/if} -
-
-
{lastResult?.stderr}
- {#if isRequestPending} - - {/if} -
+
+
{lastResult?.stdout}
+ {#if isRequestPending} + + {/if} +
+
+
{lastResult?.stderr}
+ {#if isRequestPending} + + {/if} +
diff --git a/website/src/lib/ShareBox.svelte b/website/src/lib/ShareBox.svelte index 388f617..a61e538 100644 --- a/website/src/lib/ShareBox.svelte +++ b/website/src/lib/ShareBox.svelte @@ -1,80 +1,83 @@ -
-
- Your link is ready! - -
-
- - -
-
+
+
+ Your link is ready! + +
+
+ + +
+
diff --git a/website/src/lib/Spinner.svelte b/website/src/lib/Spinner.svelte index 7892199..79935b9 100644 --- a/website/src/lib/Spinner.svelte +++ b/website/src/lib/Spinner.svelte @@ -1,4 +1,4 @@
+>
diff --git a/website/src/lib/constants.ts b/website/src/lib/constants.ts index aa4ac93..f0fb1cb 100644 --- a/website/src/lib/constants.ts +++ b/website/src/lib/constants.ts @@ -1,74 +1,74 @@ -import type { ILanguage, LangKey } from './types'; +import type { ILanguage, LangKey } from "./types"; export const languages: { [key in LangKey]: ILanguage } = { - lua: { - name: 'lua', - server_name: 'lua', - editor_name: 'lua', - text: 'Lua', - executors: ['lua5.4.6', 'lua5.3.6', 'lua5.2.4', 'lua5.1.5'] - }, - js: { - name: 'js', - server_name: 'js', - editor_name: 'javascript', - text: 'Javascript', - executors: ['nodejs-bookworm'] - }, - python3: { - name: 'python3', - server_name: 'python3', - editor_name: 'python', - text: 'Python 3', - executors: ['python3-bookworm'] - }, - racket: { - name: 'racket', - server_name: 'racket', - editor_name: 'scheme', - text: 'Racket', - executors: ['racket-v8.11.1'] - }, - bash: { - name: 'bash', - server_name: 'bash', - editor_name: 'shell', - text: 'Bash', - executors: ['bash-bookworm'] - }, - c: { - name: 'c', - server_name: 'c', - editor_name: 'c', - text: 'C', - compilers: ['gcc-bookworm'] - }, - cpp: { - name: 'cpp', - server_name: 'cpp', - editor_name: 'cpp', - text: 'C++', - compilers: ['gcc-bookworm'] - }, - haskell: { - name: 'haskell', - server_name: 'haskell', - editor_name: 'haskell', - text: 'Haskell', - compilers: ['ghc-bookworm'] - }, - rust: { - name: 'rust', - server_name: 'rust', - editor_name: 'rust', - text: 'Rust', - compilers: ['rustc-bookworm'] - }, - mjolnir: { - name: 'mjolnir', - server_name: 'mjolnir', - editor_name: 'mjolnir', - text: 'Mjolnir', - executors: ['master'] - } + lua: { + name: "lua", + server_name: "lua", + editor_name: "lua", + text: "Lua", + executors: ["lua5.4.6", "lua5.3.6", "lua5.2.4", "lua5.1.5"], + }, + js: { + name: "js", + server_name: "js", + editor_name: "javascript", + text: "Javascript", + executors: ["nodejs-bookworm"], + }, + python3: { + name: "python3", + server_name: "python3", + editor_name: "python", + text: "Python 3", + executors: ["python3-bookworm"], + }, + racket: { + name: "racket", + server_name: "racket", + editor_name: "scheme", + text: "Racket", + executors: ["racket-v8.11.1"], + }, + bash: { + name: "bash", + server_name: "bash", + editor_name: "shell", + text: "Bash", + executors: ["bash-bookworm"], + }, + c: { + name: "c", + server_name: "c", + editor_name: "c", + text: "C", + compilers: ["gcc-bookworm"], + }, + cpp: { + name: "cpp", + server_name: "cpp", + editor_name: "cpp", + text: "C++", + compilers: ["gcc-bookworm"], + }, + haskell: { + name: "haskell", + server_name: "haskell", + editor_name: "haskell", + text: "Haskell", + compilers: ["ghc-bookworm"], + }, + rust: { + name: "rust", + server_name: "rust", + editor_name: "rust", + text: "Rust", + compilers: ["rustc-bookworm"], + }, + mjolnir: { + name: "mjolnir", + server_name: "mjolnir", + editor_name: "mjolnir", + text: "Mjolnir", + executors: ["master"], + }, }; diff --git a/website/src/lib/defaultPrograms.ts b/website/src/lib/defaultPrograms.ts index 5e87f48..959d4c7 100644 --- a/website/src/lib/defaultPrograms.ts +++ b/website/src/lib/defaultPrograms.ts @@ -1,101 +1,104 @@ export interface IPrograms { - [key: string]: string; + [key: string]: string; } export const defaultPrograms: IPrograms = { - lua: [ - 'local function fact(n)', - ' if n == 0 then', - ' return 1', - ' else', - ' return n * fact(n - 1)', - ' end', - 'end', - '', - 'print(fact(5))' - ].join('\n'), - javascript: [ - 'function fact(n) {', - ' if (n === 0) {', - ' return 1;', - ' } else {', - ' return n * fact(n - 1);', - ' }', - '}', - '', - 'console.log(fact(5));' - ].join('\n'), - scheme: [ - '#lang racket', - '', - '(define (fact n)', - ' (if (= n 0)', - ' 1', - ' (* n (fact (- n 1)))))', - '', - '(display (fact 5))' - ].join('\n'), - python: [ - 'def fact(n):', - ' if n == 0:', - ' return 1', - ' else:', - ' return n * fact(n - 1)', - '', - 'print(fact(5))' - ].join('\n'), - shell: ['#!/bin/bash', '', "echo 'Hello, World!'"].join('\n'), - c: [ - '#include ', - '', - 'int fact(int n) {', - ' if (n == 0) {', - ' return 1;', - ' } else {', - ' return n * fact(n - 1);', - ' }', - '}', - '', - 'int main() {', - ' printf("%d\\n", fact(5));', - ' return 0;', - '}' - ].join('\n'), - cpp: [ - '#include ', - '', - 'int fact(int n) {', - ' if (n == 0) {', - ' return 1;', - ' } else {', - ' return n * fact(n - 1);', - ' }', - '}', - '', - 'int main() {', - ' std::cout << fact(5) << "\\n";', - ' return 0;', - '}' - ].join('\n'), - haskell: ['fact 0 = 1', 'fact n = n * fact (n - 1)', '', 'main = putStrLn $ show $ fact 5'].join( - '\n' - ), - rust: [ - 'fn fact(n: u64) -> u64 {', - ' if n == 0 {', - ' 1', - ' } else {', - ' n * fact(n - 1)', - ' }', - '}', - '', - 'fn main() {', - ' println!("{}", fact(5));', - '}' - ].join('\n'), - mjolnir: [ - 'fn fact(n: Int): Int = if n == 0 { 1 } else { n * fact(n - 1) }', - '', - 'fn main() -> Int = fact(5)' - ].join('\n') + lua: [ + "local function fact(n)", + " if n == 0 then", + " return 1", + " else", + " return n * fact(n - 1)", + " end", + "end", + "", + "print(fact(5))", + ].join("\n"), + javascript: [ + "function fact(n) {", + " if (n === 0) {", + " return 1;", + " } else {", + " return n * fact(n - 1);", + " }", + "}", + "", + "console.log(fact(5));", + ].join("\n"), + scheme: [ + "#lang racket", + "", + "(define (fact n)", + " (if (= n 0)", + " 1", + " (* n (fact (- n 1)))))", + "", + "(display (fact 5))", + ].join("\n"), + python: [ + "def fact(n):", + " if n == 0:", + " return 1", + " else:", + " return n * fact(n - 1)", + "", + "print(fact(5))", + ].join("\n"), + shell: ["#!/bin/bash", "", "echo 'Hello, World!'"].join("\n"), + c: [ + "#include ", + "", + "int fact(int n) {", + " if (n == 0) {", + " return 1;", + " } else {", + " return n * fact(n - 1);", + " }", + "}", + "", + "int main() {", + ' printf("%d\\n", fact(5));', + " return 0;", + "}", + ].join("\n"), + cpp: [ + "#include ", + "", + "int fact(int n) {", + " if (n == 0) {", + " return 1;", + " } else {", + " return n * fact(n - 1);", + " }", + "}", + "", + "int main() {", + ' std::cout << fact(5) << "\\n";', + " return 0;", + "}", + ].join("\n"), + haskell: [ + "fact 0 = 1", + "fact n = n * fact (n - 1)", + "", + "main = putStrLn $ show $ fact 5", + ].join("\n"), + rust: [ + "fn fact(n: u64) -> u64 {", + " if n == 0 {", + " 1", + " } else {", + " n * fact(n - 1)", + " }", + "}", + "", + "fn main() {", + ' println!("{}", fact(5));', + "}", + ].join("\n"), + mjolnir: [ + "fn fact(n: Int): Int = if n == 0 { 1 } else { n * fact(n - 1) }", + "", + "fn main() -> Int = fact(5)", + ].join("\n"), }; diff --git a/website/src/lib/monaco/MonacoEditor.svelte b/website/src/lib/monaco/MonacoEditor.svelte index 58c384e..dde0545 100644 --- a/website/src/lib/monaco/MonacoEditor.svelte +++ b/website/src/lib/monaco/MonacoEditor.svelte @@ -1,95 +1,95 @@
-
+
diff --git a/website/src/lib/monaco/monaco.ts b/website/src/lib/monaco/monaco.ts index e13cca7..b4fc4da 100644 --- a/website/src/lib/monaco/monaco.ts +++ b/website/src/lib/monaco/monaco.ts @@ -1,36 +1,36 @@ -import * as monaco from 'monaco-editor'; +import * as monaco from "monaco-editor"; -import './syntax-highlight/haskell'; +import "./syntax-highlight/haskell"; // Import the workers in a production-safe way. // This is different than in Monaco's documentation for Vite, // but avoids a weird error ("Unexpected usage") at runtime -import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; -import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'; -import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'; -import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'; -import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'; +import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker"; +import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker"; +import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker"; +import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker"; +import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker"; self.MonacoEnvironment = { - getWorker: function (_: string, label: string) { - switch (label) { - case 'json': - return new jsonWorker(); - case 'css': - case 'scss': - case 'less': - return new cssWorker(); - case 'html': - case 'handlebars': - case 'razor': - return new htmlWorker(); - case 'typescript': - case 'javascript': - return new tsWorker(); - default: - return new editorWorker(); - } - } + getWorker: function (_: string, label: string) { + switch (label) { + case "json": + return new jsonWorker(); + case "css": + case "scss": + case "less": + return new cssWorker(); + case "html": + case "handlebars": + case "razor": + return new htmlWorker(); + case "typescript": + case "javascript": + return new tsWorker(); + default: + return new editorWorker(); + } + }, }; export default monaco; diff --git a/website/src/lib/monaco/syntax-highlight/haskell.ts b/website/src/lib/monaco/syntax-highlight/haskell.ts index 1e42085..46d3a7c 100644 --- a/website/src/lib/monaco/syntax-highlight/haskell.ts +++ b/website/src/lib/monaco/syntax-highlight/haskell.ts @@ -1,107 +1,114 @@ -import * as monaco from 'monaco-editor'; +import * as monaco from "monaco-editor"; // TODO: This is definitely not a correct version // but it at least provides some colors... const syntax = (): monaco.languages.IMonarchLanguage => ({ - keywords: [ - 'as', - 'case', - 'of', - 'class', - 'data', - 'default', - 'deriving', - 'do', - 'forall', - 'if', - 'then', - 'else', - 'import', - 'let', - 'in', - 'where' - ], + keywords: [ + "as", + "case", + "of", + "class", + "data", + "default", + "deriving", + "do", + "forall", + "if", + "then", + "else", + "import", + "let", + "in", + "where", + ], - typeKeywords: ['Int', 'Real', 'String'], + typeKeywords: ["Int", "Real", "String"], - operators: [ - '!', - "'", - '"', - '-', - '--', - '-<', - '-<<', - '->', - '::', - ';', - '<-', - ',', - '=', - '=>', - '>', - '?', - '#', - '*', - '@', - '\\', - '_', - '`', - '|', - '~', - '$' - ], + operators: [ + "!", + "'", + '"', + "-", + "--", + "-<", + "-<<", + "->", + "::", + ";", + "<-", + ",", + "=", + "=>", + ">", + "?", + "#", + "*", + "@", + "\\", + "_", + "`", + "|", + "~", + "$", + ], - // we include these common regular expressions - symbols: /[=>](?!@symbols)/, '@brackets'], - [/@symbols/, { cases: { '@operators': 'operator', '@default': '' } }], + // delimiters and operators + [/[{}()[\]]/, "@brackets"], + [/[<>](?!@symbols)/, "@brackets"], + [/@symbols/, { cases: { "@operators": "operator", "@default": "" } }], - // numbers - [/[0-9]+/, 'number'], + // numbers + [/[0-9]+/, "number"], - // strings - [/"([^"\\]|\\.)*$/, 'string.invalid'], // non-teminated string - [/"/, { token: 'string.quote', bracket: '@open', next: '@string' }], + // strings + [/"([^"\\]|\\.)*$/, "string.invalid"], // non-teminated string + [/"/, { token: "string.quote", bracket: "@open", next: "@string" }], - // characters - [/'[^\\']'/, 'string'], - [/(')(@escapes)(')/, ['string', 'string.escape', 'string']], - [/'/, 'string.invalid'] - ], + // characters + [/'[^\\']'/, "string"], + [/(')(@escapes)(')/, ["string", "string.escape", "string"]], + [/'/, "string.invalid"], + ], - string: [ - [/[^\\"]+/, 'string'], - [/@escapes/, 'string.escape'], - [/\\./, 'string.escape.invalid'], - [/"/, { token: 'string.quote', bracket: '@close', next: '@pop' }] - ], + string: [ + [/[^\\"]+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [/"/, { token: "string.quote", bracket: "@close", next: "@pop" }], + ], - whitespace: [ - [/[ \t\r\n]+/, 'white'], - [/--.*$/, 'comment'] - ] - } + whitespace: [ + [/[ \t\r\n]+/, "white"], + [/--.*$/, "comment"], + ], + }, }); -monaco.languages.register({ id: 'haskell' }); -monaco.languages.setMonarchTokensProvider('haskell', syntax()); +monaco.languages.register({ id: "haskell" }); +monaco.languages.setMonarchTokensProvider("haskell", syntax()); diff --git a/website/src/lib/remoteUtils.ts b/website/src/lib/remoteUtils.ts index 0cb7202..f064c51 100644 --- a/website/src/lib/remoteUtils.ts +++ b/website/src/lib/remoteUtils.ts @@ -1,73 +1,73 @@ -import type { LangKey, LinkData, Result } from '$lib/types'; +import type { LangKey, LinkData, Result } from "$lib/types"; const TOO_MANY_REQUESTS = 429; export const sendCodeToServer = async ( - code: string, - language: LangKey, - compiler?: string, - executor?: string, - compilerOptions?: string + code: string, + language: LangKey, + compiler?: string, + executor?: string, + compilerOptions?: string, ): Promise => { - const body = JSON.stringify({ - code, - language, - compiler, - compiler_args: compilerOptions?.split(' '), - executor - }); - const response = await fetch('/api/code-eval', { - method: 'POST', - body, - mode: 'cors', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - } - }); - if (response.ok) { - return await response.json(); - } else { - throw new Error('Could not evaluate'); - } + const body = JSON.stringify({ + code, + language, + compiler, + compiler_args: compilerOptions?.split(" "), + executor, + }); + const response = await fetch("/api/code-eval", { + method: "POST", + body, + mode: "cors", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + }); + if (response.ok) { + return await response.json(); + } else { + throw new Error("Could not evaluate"); + } }; export const generateNewLink = async (data: LinkData): Promise => { - const body = JSON.stringify(data); + const body = JSON.stringify(data); - const response = await fetch('/api/link', { - method: 'POST', - body, - mode: 'cors', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - } - }); + const response = await fetch("/api/link", { + method: "POST", + body, + mode: "cors", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + }); - if (response.ok) { - const { key } = await response.json(); - return key; - } else if (response.status === TOO_MANY_REQUESTS) { - throw new Error('Too many requests, please try again later.'); - } else { - throw new Error('Could not generate link'); - } + if (response.ok) { + const { key } = await response.json(); + return key; + } else if (response.status === TOO_MANY_REQUESTS) { + throw new Error("Too many requests, please try again later."); + } else { + throw new Error("Could not generate link"); + } }; export const getLinkData = async (key: string): Promise => { - const response = await fetch(`/api/link/${key}`, { - method: 'GET', - mode: 'cors', - headers: { - Accept: 'application/json' - } - }); + const response = await fetch(`/api/link/${key}`, { + method: "GET", + mode: "cors", + headers: { + Accept: "application/json", + }, + }); - if (response.ok) { - const { value } = await response.json(); - return JSON.parse(value); - } else { - throw new Error('Could not fetch link data'); - } + if (response.ok) { + const { value } = await response.json(); + return JSON.parse(value); + } else { + throw new Error("Could not fetch link data"); + } }; diff --git a/website/src/lib/settings.ts b/website/src/lib/settings.ts index 6e963a9..e444a3b 100644 --- a/website/src/lib/settings.ts +++ b/website/src/lib/settings.ts @@ -1,26 +1,26 @@ export interface Settings { - vimMode: boolean; + vimMode: boolean; } const defaultSettings: Settings = { - vimMode: false + vimMode: false, }; export const getSettings = (): Settings => { - const settings = localStorage.getItem('settings'); - if (settings) { - return JSON.parse(settings); - } else { - return defaultSettings; - } + const settings = localStorage.getItem("settings"); + if (settings) { + return JSON.parse(settings); + } else { + return defaultSettings; + } }; export const setVimMode = (vimMode: boolean) => { - const settings = getSettings(); - settings.vimMode = vimMode; - setSettings(settings); + const settings = getSettings(); + settings.vimMode = vimMode; + setSettings(settings); }; export const setSettings = (settings: Settings) => { - localStorage.setItem('settings', JSON.stringify(settings)); + localStorage.setItem("settings", JSON.stringify(settings)); }; diff --git a/website/src/lib/toastPresets.ts b/website/src/lib/toastPresets.ts index b6222a6..2587746 100644 --- a/website/src/lib/toastPresets.ts +++ b/website/src/lib/toastPresets.ts @@ -1,13 +1,13 @@ -import { toast } from '@zerodevx/svelte-toast'; +import { toast } from "@zerodevx/svelte-toast"; type ToastOpts = Parameters[1]; export const errorToast: ToastOpts = { - theme: { - '--toastBackground': 'rgba(196, 0, 0, 1.0)', - '--toastColor': 'white', - '--toastProgressBackground': 'rgba(255, 255, 255, 0.5)' - }, - duration: 5000, - dismissable: true + theme: { + "--toastBackground": "rgba(196, 0, 0, 1.0)", + "--toastColor": "white", + "--toastProgressBackground": "rgba(255, 255, 255, 0.5)", + }, + duration: 5000, + dismissable: true, }; diff --git a/website/src/lib/types.ts b/website/src/lib/types.ts index 950f3e7..2e696e6 100644 --- a/website/src/lib/types.ts +++ b/website/src/lib/types.ts @@ -1,20 +1,20 @@ export type ILanguage = { - name: string; - // Name of the language as used by the server - server_name: string; - // Name of the language as used by the monaco editor. - // This can be different from the actual language, - // for example for Racket we use Scheme. - editor_name: string; - // The text representation, what is shown in the dropdown. - text: string; - executors?: string[]; - compilers?: string[]; + name: string; + // Name of the language as used by the server + server_name: string; + // Name of the language as used by the monaco editor. + // This can be different from the actual language, + // for example for Racket we use Scheme. + editor_name: string; + // The text representation, what is shown in the dropdown. + text: string; + executors?: string[]; + compilers?: string[]; }; export type Result = { - stdout: string; - stderr: string; + stdout: string; + stderr: string; }; /// What the user has currently selected. @@ -23,26 +23,26 @@ export type Result = { /// you add warants a change of all items /// in the DB, unless you make it optional. export type Selection = { - language: LangKey; - executor?: string; - compiler?: string; - compilerOptions?: string; + language: LangKey; + executor?: string; + compiler?: string; + compilerOptions?: string; }; /// Data that are saved in the DB under links export type LinkData = { - selection: Selection; - code: string; + selection: Selection; + code: string; }; export type LangKey = - | 'lua' - | 'js' - | 'python3' - | 'racket' - | 'bash' - | 'c' - | 'cpp' - | 'rust' - | 'mjolnir' - | 'haskell'; + | "lua" + | "js" + | "python3" + | "racket" + | "bash" + | "c" + | "cpp" + | "rust" + | "mjolnir" + | "haskell"; diff --git a/website/src/routes/+layout.svelte b/website/src/routes/+layout.svelte index 6bfc726..ae59a42 100644 --- a/website/src/routes/+layout.svelte +++ b/website/src/routes/+layout.svelte @@ -1,28 +1,33 @@ -
- -
- CodeRunner3000 -

Run code in browser

- -
+ > + CodeRunner3000 +

Run code in browser

+ + - + {@render children?.()}
diff --git a/website/src/routes/+page.svelte b/website/src/routes/+page.svelte index 00ab41e..903d737 100644 --- a/website/src/routes/+page.svelte +++ b/website/src/routes/+page.svelte @@ -1,8 +1,8 @@ diff --git a/website/src/routes/algorithms/+page.svelte b/website/src/routes/algorithms/+page.svelte new file mode 100644 index 0000000..166a2ce --- /dev/null +++ b/website/src/routes/algorithms/+page.svelte @@ -0,0 +1 @@ +Regexes diff --git a/website/src/routes/algorithms/regexes/+page.svelte b/website/src/routes/algorithms/regexes/+page.svelte new file mode 100644 index 0000000..c3b506f --- /dev/null +++ b/website/src/routes/algorithms/regexes/+page.svelte @@ -0,0 +1,91 @@ + + +
+

+ Regular Expression Compiler to Finite Automater +

+

+ Enter a regular expression to visualize its NFA and DFA. We only support + limited features of regular expression, namely +

+
    +
  • - Implicit Concatenation
  • +
  • - Union (|)
  • +
  • - Kleene Star and Plus (e.g., a*, a+)
  • +
  • - Optional (using ?)
  • +
  • - Grouping (using parentheses)
  • +
+ +
+

Conversion Algorithm from Regex to NFA/eNFA:

+ +
+ +
+ +
+ +
+

NFA

+
+
+ +
+ +
+

DFA

+
+
+
diff --git a/website/src/routes/api/code-eval/+server.ts b/website/src/routes/api/code-eval/+server.ts index 390c45c..c7fa3f0 100644 --- a/website/src/routes/api/code-eval/+server.ts +++ b/website/src/routes/api/code-eval/+server.ts @@ -1,30 +1,30 @@ -import type { RequestEvent } from '@sveltejs/kit'; -import { error } from '@sveltejs/kit'; +import type { RequestEvent } from "@sveltejs/kit"; +import { error } from "@sveltejs/kit"; export async function POST({ request }: RequestEvent): Promise { - const url = import.meta.env.VITE_CODERUNNER_BACKEND_URL as string; - const api = import.meta.env.VITE_CODERUNNER_BACKEND_API_PATH as string; - if (!url || !api) { - console.log('Coderunner backend API URL is not set'); - error(400, 'Internal server error'); - } - const body = await request.text(); - console.log('Request body', body); - try { - const response = await fetch(`${url}${api}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json' - }, - body - }); - return response; - } catch (e) { - console.log('Failed to compile code'); - console.log(' - Backend URL', url); - console.log(' - Backend API', api); - console.log(e); - error(500, `Internal server error`); - } + const url = import.meta.env.VITE_CODERUNNER_BACKEND_URL as string; + const api = import.meta.env.VITE_CODERUNNER_BACKEND_API_PATH as string; + if (!url || !api) { + console.log("Coderunner backend API URL is not set"); + error(400, "Internal server error"); + } + const body = await request.text(); + console.log("Request body", body); + try { + const response = await fetch(`${url}${api}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + body, + }); + return response; + } catch (e) { + console.log("Failed to compile code"); + console.log(" - Backend URL", url); + console.log(" - Backend API", api); + console.log(e); + error(500, `Internal server error`); + } } diff --git a/website/src/routes/api/link/+server.ts b/website/src/routes/api/link/+server.ts index e5b0923..0692bb7 100644 --- a/website/src/routes/api/link/+server.ts +++ b/website/src/routes/api/link/+server.ts @@ -1,38 +1,42 @@ -import type { RequestEvent } from '@sveltejs/kit'; +import type { RequestEvent } from "@sveltejs/kit"; const TOO_MANY_REQUESTS = 429; const backendUrl = import.meta.env.VITE_CODERUNNER_BACKEND_URL as string; -export async function POST({ request, getClientAddress }: RequestEvent): Promise { - if (backendUrl === undefined) { - throw new Error('Backend URL is not set'); - } - const url = `${backendUrl}/api/v1/link/new`; - - const body = await request.text(); - - // This will most likely be behind a proxy. Still, if forwarded is not set - // we have to send some ip address. - const xforwardedfor = request.headers.get('x-forwarded-for') || getClientAddress(); - - const response = await fetch(url, { - method: 'POST', - body, - headers: { - 'content-type': request.headers.get('content-type') ?? 'text/plain', - accept: 'application/json', - 'X-Forwarded-For': xforwardedfor - } - }); - - if (!response.ok) { - if (response.status === TOO_MANY_REQUESTS) { - throw new Error('Too many requests to link generator, try again later'); - } - - throw new Error('Failed to fetch link data'); - } - - return response; +export async function POST({ + request, + getClientAddress, +}: RequestEvent): Promise { + if (backendUrl === undefined) { + throw new Error("Backend URL is not set"); + } + const url = `${backendUrl}/api/v1/link/new`; + + const body = await request.text(); + + // This will most likely be behind a proxy. Still, if forwarded is not set + // we have to send some ip address. + const xforwardedfor = + request.headers.get("x-forwarded-for") || getClientAddress(); + + const response = await fetch(url, { + method: "POST", + body, + headers: { + "content-type": request.headers.get("content-type") ?? "text/plain", + accept: "application/json", + "X-Forwarded-For": xforwardedfor, + }, + }); + + if (!response.ok) { + if (response.status === TOO_MANY_REQUESTS) { + throw new Error("Too many requests to link generator, try again later"); + } + + throw new Error("Failed to fetch link data"); + } + + return response; } diff --git a/website/src/routes/api/link/[key]/+server.ts b/website/src/routes/api/link/[key]/+server.ts index ddad89b..6f88912 100644 --- a/website/src/routes/api/link/[key]/+server.ts +++ b/website/src/routes/api/link/[key]/+server.ts @@ -1,26 +1,31 @@ -import type { RequestEvent } from '@sveltejs/kit'; +import type { RequestEvent } from "@sveltejs/kit"; const backendUrl = import.meta.env.VITE_CODERUNNER_BACKEND_URL as string; -export async function GET({ params, request, getClientAddress }: RequestEvent): Promise { - if (!backendUrl) { - throw new Error('No backend URL provided'); - } +export async function GET({ + params, + request, + getClientAddress, +}: RequestEvent): Promise { + if (!backendUrl) { + throw new Error("No backend URL provided"); + } - const key = params.key; - if (!key) { - throw new Error('No key provided'); - } + const key = params.key; + if (!key) { + throw new Error("No key provided"); + } - const url = `${backendUrl}/api/v1/link/get/${key}`; - // This will most likely be behind a proxy. Still, if forwarded is not set - // we have to send some ip address. - const xforwardedfor = request.headers.get('x-forwarded-for') || getClientAddress(); + const url = `${backendUrl}/api/v1/link/get/${key}`; + // This will most likely be behind a proxy. Still, if forwarded is not set + // we have to send some ip address. + const xforwardedfor = + request.headers.get("x-forwarded-for") || getClientAddress(); - return await fetch(url, { - method: 'GET', - headers: { - 'X-Forwarded-For': xforwardedfor - } - }); + return await fetch(url, { + method: "GET", + headers: { + "X-Forwarded-For": xforwardedfor, + }, + }); } diff --git a/website/src/routes/code/+page.svelte b/website/src/routes/code/+page.svelte index 6a9a6da..cb14d68 100644 --- a/website/src/routes/code/+page.svelte +++ b/website/src/routes/code/+page.svelte @@ -1,314 +1,329 @@
-
-
- - - {#if langObj.executors?.length ?? 0 > 0} - - {/if} - {#if langObj.compilers?.length ?? 0 > 0} - - {/if} - - Vim - {#if langObj.compilers} - - {/if} - - - - - -
-
- -
-
- +
+
+ + + {#if langObj.executors?.length ?? 0 > 0} + + {/if} + {#if langObj.compilers?.length ?? 0 > 0} + + {/if} + + Vim + {#if langObj.compilers} + + {/if} + + + + + +
+
+ +
+
+
diff --git a/website/svelte.config.js b/website/svelte.config.js index dfdb468..1b58bb9 100644 --- a/website/svelte.config.js +++ b/website/svelte.config.js @@ -1,22 +1,22 @@ -import adapter from '@sveltejs/adapter-node'; -import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; +import adapter from "@sveltejs/adapter-node"; +import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; /** @type {import('@sveltejs/kit').Config} */ const config = { - // Consult https://kit.svelte.dev/docs/integrations#preprocessors - // for more information about preprocessors - preprocess: vitePreprocess(), + // Consult https://kit.svelte.dev/docs/integrations#preprocessors + // for more information about preprocessors + preprocess: vitePreprocess(), - kit: { - // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. - // If your environment is not supported or you settled on a specific environment, switch out the adapter. - // See https://kit.svelte.dev/docs/adapters for more information about adapters. - adapter: adapter({ - out: 'build', - envPrefix: 'WEBSITE_', - dynamic_origin: true - }) - } + kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. + // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // See https://kit.svelte.dev/docs/adapters for more information about adapters. + adapter: adapter({ + out: "build", + envPrefix: "WEBSITE_", + dynamic_origin: true, + }), + }, }; export default config; diff --git a/website/tailwind.config.js b/website/tailwind.config.js index bfe0bc2..03114c6 100644 --- a/website/tailwind.config.js +++ b/website/tailwind.config.js @@ -1,8 +1,8 @@ /** @type {import('tailwindcss').Config} */ export default { - content: ['./src/**/*.{html,js,svelte,ts}'], - theme: { - extend: {} - }, - plugins: [] + content: ["./src/**/*.{html,js,svelte,ts}"], + theme: { + extend: {}, + }, + plugins: [], }; diff --git a/website/tests/basic_test.ts b/website/tests/basic_test.ts index 8bf89c8..bded1f9 100644 --- a/website/tests/basic_test.ts +++ b/website/tests/basic_test.ts @@ -1,46 +1,50 @@ -import { test, expect } from '@playwright/test'; +import { test, expect } from "@playwright/test"; declare global { - interface Window { - getMonacoEditorValue: () => string; - setMonacoEditorValue: (value: string) => void; - } + interface Window { + getMonacoEditorValue: () => string; + setMonacoEditorValue: (value: string) => void; + } } -test('test basic lang, compiler and executor.', async ({ page }) => { - await page.goto('/code', { waitUntil: 'networkidle' }); +test("test basic lang, compiler and executor.", async ({ page }) => { + await page.goto("/code", { waitUntil: "networkidle" }); - const monacoValue1 = await page.evaluate(() => window.getMonacoEditorValue()); - expect(monacoValue1).toBeTruthy(); + const monacoValue1 = await page.evaluate(() => window.getMonacoEditorValue()); + expect(monacoValue1).toBeTruthy(); - const language = page.locator('[name="language"]'); - await expect(language).toBeVisible(); - await expect(language.locator('option:checked')).toHaveText('Lua'); + const language = page.locator('[name="language"]'); + await expect(language).toBeVisible(); + await expect(language.locator("option:checked")).toHaveText("Lua"); - const executor = page.locator('[name="executor"]'); - await expect(executor).toBeVisible(); - await executor.selectOption({ value: 'lua5.1.5' }); - await expect(executor).toHaveValue('lua5.1.5'); - const monacoValue2 = await page.evaluate(() => window.getMonacoEditorValue()); - expect(monacoValue2).toBeTruthy(); + const executor = page.locator('[name="executor"]'); + await expect(executor).toBeVisible(); + await executor.selectOption({ value: "lua5.1.5" }); + await expect(executor).toHaveValue("lua5.1.5"); + const monacoValue2 = await page.evaluate(() => window.getMonacoEditorValue()); + expect(monacoValue2).toBeTruthy(); - const compilerSelect = page.locator('[name="compiler"]'); - await expect(compilerSelect).not.toBeVisible(); + const compilerSelect = page.locator('[name="compiler"]'); + await expect(compilerSelect).not.toBeVisible(); }); -test('test changing lang, should change editor', async ({ page }) => { - await page.goto('/code', { waitUntil: 'networkidle' }); +test("test changing lang, should change editor", async ({ page }) => { + await page.goto("/code", { waitUntil: "networkidle" }); - const monacoValueLua = await page.evaluate(() => window.getMonacoEditorValue()); - expect(monacoValueLua).toBeTruthy(); - const language = page.locator('[name="language"]'); - await expect(language).toBeVisible(); - await expect(language.locator('option:checked')).toHaveText('Lua'); + const monacoValueLua = await page.evaluate(() => + window.getMonacoEditorValue(), + ); + expect(monacoValueLua).toBeTruthy(); + const language = page.locator('[name="language"]'); + await expect(language).toBeVisible(); + await expect(language.locator("option:checked")).toHaveText("Lua"); - await language.selectOption({ value: 'python3' }); - await expect(language).toHaveValue('python3'); + await language.selectOption({ value: "python3" }); + await expect(language).toHaveValue("python3"); - const monacoValuePython = await page.evaluate(() => window.getMonacoEditorValue()); + const monacoValuePython = await page.evaluate(() => + window.getMonacoEditorValue(), + ); - expect(monacoValuePython).not.toEqual(monacoValueLua); + expect(monacoValuePython).not.toEqual(monacoValueLua); }); diff --git a/website/tests/share_test.ts b/website/tests/share_test.ts index e942423..f6dd26f 100644 --- a/website/tests/share_test.ts +++ b/website/tests/share_test.ts @@ -1,47 +1,55 @@ -import { test, expect } from '@playwright/test'; - -test('test generating share link and accessing it', async ({ page }) => { - await page.goto('/code', { waitUntil: 'networkidle' }); - - // switch executor - const executor = page.locator('[name="executor"]'); - await expect(executor).toBeVisible(); - await executor.selectOption({ value: 'lua5.1.5' }); - - // edit the code a bit - await page.evaluate(() => window.setMonacoEditorValue('print("hello from lua5.1.5")')); - - const triggerShareBtn = page.locator('[name="share-dialog-btn"]'); - const shareDialog = page.locator('[data-pw="share-dialog"]'); - const closeButton = page.locator('[name="share-dialog-close-btn"]'); - - await expect(shareDialog).not.toBeVisible(); - - await triggerShareBtn.click(); - await expect(shareDialog).toBeVisible(); - - const link = await page.locator('[name="share-dialog-link-input"]').inputValue(); - expect(link).toBeTruthy(); - - await closeButton.click(); - await expect(shareDialog).not.toBeVisible(); - - // change values because the previous code will be in local storage - const language = page.locator('[name="language"]'); - await expect(language).toBeVisible(); - await language.selectOption({ value: 'python3' }); - await page.evaluate(() => window.setMonacoEditorValue('print("hello from python3")')); - - // go to the share link - await page.goto(link, { waitUntil: 'networkidle' }); - const editorValueAfter = await page.evaluate(() => window.getMonacoEditorValue()); - expect(editorValueAfter).toEqual('print("hello from lua5.1.5")'); - - const languageAfter = page.locator('[name="language"]'); - await expect(languageAfter).toBeVisible(); - await expect(languageAfter.locator('option:checked')).toHaveText('Lua'); - - const executorAfter = page.locator('[name="executor"]'); - await expect(executorAfter).toBeVisible(); - await expect(executorAfter).toHaveValue('lua5.1.5'); +import { test, expect } from "@playwright/test"; + +test("test generating share link and accessing it", async ({ page }) => { + await page.goto("/code", { waitUntil: "networkidle" }); + + // switch executor + const executor = page.locator('[name="executor"]'); + await expect(executor).toBeVisible(); + await executor.selectOption({ value: "lua5.1.5" }); + + // edit the code a bit + await page.evaluate(() => + window.setMonacoEditorValue('print("hello from lua5.1.5")'), + ); + + const triggerShareBtn = page.locator('[name="share-dialog-btn"]'); + const shareDialog = page.locator('[data-pw="share-dialog"]'); + const closeButton = page.locator('[name="share-dialog-close-btn"]'); + + await expect(shareDialog).not.toBeVisible(); + + await triggerShareBtn.click(); + await expect(shareDialog).toBeVisible(); + + const link = await page + .locator('[name="share-dialog-link-input"]') + .inputValue(); + expect(link).toBeTruthy(); + + await closeButton.click(); + await expect(shareDialog).not.toBeVisible(); + + // change values because the previous code will be in local storage + const language = page.locator('[name="language"]'); + await expect(language).toBeVisible(); + await language.selectOption({ value: "python3" }); + await page.evaluate(() => + window.setMonacoEditorValue('print("hello from python3")'), + ); + + // go to the share link + await page.goto(link, { waitUntil: "networkidle" }); + const editorValueAfter = await page.evaluate(() => + window.getMonacoEditorValue(), + ); + expect(editorValueAfter).toEqual('print("hello from lua5.1.5")'); + + const languageAfter = page.locator('[name="language"]'); + await expect(languageAfter).toBeVisible(); + await expect(languageAfter.locator("option:checked")).toHaveText("Lua"); + + const executorAfter = page.locator('[name="executor"]'); + await expect(executorAfter).toBeVisible(); + await expect(executorAfter).toHaveValue("lua5.1.5"); }); diff --git a/website/tsconfig.json b/website/tsconfig.json index a3ea88e..0cd1665 100644 --- a/website/tsconfig.json +++ b/website/tsconfig.json @@ -1,18 +1,18 @@ { - "extends": "./.svelte-kit/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "strictNullChecks": true - } - // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias - // - // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes - // from the referenced tsconfig.json - TypeScript does not merge them in + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "strictNullChecks": true + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in } diff --git a/website/vite.config.ts b/website/vite.config.ts index 37b6a84..49c9e7c 100644 --- a/website/vite.config.ts +++ b/website/vite.config.ts @@ -1,9 +1,9 @@ -import { sveltekit } from '@sveltejs/kit/vite'; -import { defineConfig } from 'vitest/config'; +import { sveltekit } from "@sveltejs/kit/vite"; +import { defineConfig } from "vitest/config"; export default defineConfig({ - plugins: [sveltekit()], - test: { - include: ['src/**/*.{test,spec}.{js,ts}'] - } + plugins: [sveltekit()], + test: { + include: ["src/**/*.{test,spec}.{js,ts}"], + }, });