From ac62a7620b7925905e047a1f20e08f0111e3b1fb Mon Sep 17 00:00:00 2001 From: Roman Krasilnikov Date: Tue, 11 Nov 2025 02:25:40 +0300 Subject: [PATCH 01/13] Flake update --- flake.lock | 40 ++++++++++++++++++++-------------------- flake.nix | 6 +++--- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/flake.lock b/flake.lock index f3bd50d8..7c67d904 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1736490741, - "narHash": "sha256-bDvp2cajJ4IaXk4hqtdtsKpLTxmx1GO9nIi651ko6hE=", + "lastModified": 1741934023, + "narHash": "sha256-PMzzgtK4a70hpaUbjASuvSzLGjJP/3P7mGnqQOyTBiM=", "owner": "nix-community", "repo": "fenix", - "rev": "ff8cb1e6d1755aa3ace7c662f79f74882cc5022f", + "rev": "4f956eacc9ec619bcd98f4580c663a8749978cc8", "type": "github" }, "original": { @@ -47,11 +47,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1737609450, - "narHash": "sha256-gcY66PnhbGfeWy0guQwSUWHPzJVTk+cGUcaqf1C0BkI=", + "lastModified": 1753826400, + "narHash": "sha256-bR+F00lpAM4rJ+Nj4l5ST6kh4It4hP5IIiku7jJRC34=", "owner": "x0k", "repo": "mk", - "rev": "c830ff0a400177830f2e5e579340bd55cd371bba", + "rev": "057b75637e95b12c32575a2d31ce5c58da39e5c7", "type": "github" }, "original": { @@ -62,16 +62,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1736200483, - "narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=", + "lastModified": 1753489912, + "narHash": "sha256-uDCFHeXdRIgJpYmtcUxGEsZ+hYlLPBhR83fdU+vbC1s=", "owner": "nixos", "repo": "nixpkgs", - "rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751", + "rev": "13e8d35b7d6028b7198f8186bc0347c6abaa2701", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -94,11 +94,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1739446958, - "narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=", + "lastModified": 1762596750, + "narHash": "sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV+3DSADBX7/9YQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2ff53fe64443980e139eaa286017f53f88336dd0", + "rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e", "type": "github" }, "original": { @@ -110,16 +110,16 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1739357830, - "narHash": "sha256-9xim3nJJUFbVbJCz48UP4fGRStVW5nv4VdbimbKxJ3I=", + "lastModified": 1762756533, + "narHash": "sha256-HiRDeUOD1VLklHeOmaKDzf+8Hb7vSWPVFcWwaTrpm+U=", "owner": "nixos", "repo": "nixpkgs", - "rev": "0ff09db9d034a04acd4e8908820ba0b410d7a33a", + "rev": "c2448301fb856e351aab33e64c33a3fc8bcf637d", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -135,11 +135,11 @@ "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1736424758, - "narHash": "sha256-OvLkhb1Bh4XzeJEROwN4XLdv9exyMD/H93cFsGV0vXA=", + "lastModified": 1741895161, + "narHash": "sha256-D8SLPa4vxA1EQdFi1SNJKeFOSCKk79hIv2l0ovfk2is=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "cc016df54b03d8c1bbb1aae761da01dbfae5f126", + "rev": "185f9deb452760f3abc2fde0500398e3198678cd", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c700c6d6..f9370077 100644 --- a/flake.nix +++ b/flake.nix @@ -1,6 +1,6 @@ { inputs = { - nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-24.11"; + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05"; nixpkgs-unstable.url = "github:nixos/nixpkgs?ref=nixos-unstable"; nixpkgs-old.url = "github:NixOS/nixpkgs/nixos-21.11"; # For Node.js 12 mk.url = "github:x0k/mk"; @@ -52,10 +52,10 @@ mk.packages.${system}.default pkgs.zip pkgs.curl - pkgs.nodejs_23 + pkgs.nodejs_24 pkgs.bun pkgs.pnpm - pkgs-unstable.go_1_24 + pkgs.go_1_25 pkgs.gleam pkgs.python314 pkgs.dotnetCorePackages.dotnet_9.sdk From 8a548cdf8f59174987bb33a4ecb67e9027372b03 Mon Sep 17 00:00:00 2001 From: Roman Krasilnikov Date: Tue, 11 Nov 2025 15:21:09 +0300 Subject: [PATCH 02/13] Bump vite --- mkfile | 2 +- pnpm-lock.yaml | 1155 ++++++++++++++++++++++++++++--------------- pnpm-workspace.yaml | 8 +- 3 files changed, 765 insertions(+), 400 deletions(-) diff --git a/mkfile b/mkfile index 4f534e02..44f01393 100644 --- a/mkfile +++ b/mkfile @@ -14,7 +14,7 @@ b: p: pnpm run preview -ppp/: +app/: pushd apps/ppp c: pnpm run check diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 974f9420..41871074 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,17 +7,17 @@ settings: catalogs: default: vite: - specifier: ^6.1.1 - version: 6.1.1 + specifier: ^7.2.2 + version: 7.2.2 vite-plugin-dts: - specifier: ^4.5.0 - version: 4.5.0 + specifier: ^4.5.4 + version: 4.5.4 vite-plugin-static-copy: - specifier: ^2.2.0 - version: 2.2.0 + specifier: ^3.1.4 + version: 3.1.4 vitest: - specifier: ^3.0.6 - version: 3.0.6 + specifier: ^4.0.8 + version: 4.0.8 patchedDependencies: browserfs@1.4.3: @@ -48,13 +48,13 @@ importers: dependencies: '@astrojs/check': specifier: ^0.9.4 - version: 0.9.4(prettier@3.5.0)(typescript@5.7.3) + version: 0.9.4(prettier@3.5.0)(typescript@5.8.2) '@astrojs/mdx': specifier: 4.0.8 - version: 4.0.8(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1)) + version: 4.0.8(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1)) '@astrojs/svelte': specifier: 7.0.4 - version: 7.0.4(@types/node@22.12.0)(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1))(jiti@2.4.2)(lightningcss@1.29.1)(svelte@5.20.2)(typescript@5.7.3)(yaml@2.5.1) + version: 7.0.4(@types/node@22.12.0)(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1))(jiti@2.4.2)(lightningcss@1.29.1)(svelte@5.20.2)(typescript@5.8.2)(yaml@2.5.1) '@tailwindcss/vite': specifier: ^4.0.8 version: 4.0.8(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) @@ -66,7 +66,7 @@ importers: version: 5.5.0 astro: specifier: 5.3.0 - version: 5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1) + version: 5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1) astro-icon: specifier: ^1.1.5 version: 1.1.5 @@ -148,7 +148,7 @@ importers: version: 0.1.6 vite-plugin-static-copy: specifier: 'catalog:' - version: 2.2.0(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 3.1.4(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/dotnet-runtime: dependencies: @@ -158,13 +158,13 @@ importers: devDependencies: vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) vite-plugin-static-copy: specifier: 'catalog:' - version: 2.2.0(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 3.1.4(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/gleam-runtime: dependencies: @@ -174,13 +174,13 @@ importers: devDependencies: vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) vite-plugin-static-copy: specifier: 'catalog:' - version: 2.2.0(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 3.1.4(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/go-runtime: dependencies: @@ -193,10 +193,10 @@ importers: version: 1.15.2 vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/java-runtime: dependencies: @@ -227,10 +227,10 @@ importers: version: 22.12.0 vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vitest: specifier: 'catalog:' - version: 3.0.6(@types/debug@4.1.12)(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 4.0.8(@types/debug@4.1.12)(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) packages/php-runtime: dependencies: @@ -246,10 +246,10 @@ importers: devDependencies: vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/python-runtime: dependencies: @@ -262,13 +262,13 @@ importers: devDependencies: vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) vite-plugin-static-copy: specifier: 'catalog:' - version: 2.2.0(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 3.1.4(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/ruby-runtime: dependencies: @@ -287,13 +287,13 @@ importers: version: 2.7.1 vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) vite-plugin-static-copy: specifier: 'catalog:' - version: 2.2.0(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 3.1.4(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/rust-runtime: dependencies: @@ -306,10 +306,10 @@ importers: devDependencies: vite: specifier: 'catalog:' - version: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + version: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite-plugin-dts: specifier: 'catalog:' - version: 4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + version: 4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) packages/typescript-runtime: dependencies: @@ -431,150 +431,306 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.24.2': resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.24.2': resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.24.2': resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.24.2': resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.24.2': resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.24.2': resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.24.2': resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.24.2': resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.24.2': resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.24.2': resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.24.2': resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/netbsd-arm64@0.24.2': resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.24.2': resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.24.2': resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@iconify-json/lucide@1.2.26': resolution: {integrity: sha512-arD/8mK0lRxFY2LgLf345NhWVWiOtV8sOxJuLnq4QRz3frMiOwVwGxEgp5Xe/bRGzxO2CxxCBok0bPRpCkYZQQ==} @@ -708,6 +864,14 @@ packages: resolution: {integrity: sha512-KPiZbI7fKmGf/7aRrrluAG/KGJn/tgBvz/4IoXKIEZvljh9Mog/kYTHu3MkF2IsOSxr9ZE42VaPXTpUzURvOlA==} engines: {node: '>=18.0.0'} + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -723,6 +887,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -736,11 +903,11 @@ packages: '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} - '@microsoft/api-extractor-model@7.30.2': - resolution: {integrity: sha512-3/t2F+WhkJgBzSNwlkTIL0tBgUoBqDqL66pT+nh2mPbM0NIDGVGtpqbGWPgHIzn/mn7kGS/Ep8D8po58e8UUIw==} + '@microsoft/api-extractor-model@7.31.3': + resolution: {integrity: sha512-dv4quQI46p0U03TCEpasUf6JrJL3qjMN7JUAobsPElxBv4xayYYvWW9aPpfYV+Jx6hqUcVaLVOeV7+5hxsyoFQ==} - '@microsoft/api-extractor@7.49.1': - resolution: {integrity: sha512-jRTR/XbQF2kb+dYn8hfYSicOGA99+Fo00GrsdMwdfE3eIgLtKdH6Qa2M3wZV9S2XmbgCaGX1OdPtYctbfu5jQg==} + '@microsoft/api-extractor@7.54.0': + resolution: {integrity: sha512-t0SEcbVUPy4yAVykPafTNWktBg728X6p9t8qCuGDsYr1/lz2VQFihYDP2CnBFSArP5vwJPcvxktoKVSqH326cA==} hasBin: true '@microsoft/tsdoc-config@0.17.1': @@ -820,8 +987,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.34.8': - resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} + '@rollup/rollup-android-arm-eabi@4.53.2': + resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} cpu: [arm] os: [android] @@ -830,8 +997,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.34.8': - resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} + '@rollup/rollup-android-arm64@4.53.2': + resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} cpu: [arm64] os: [android] @@ -840,8 +1007,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.34.8': - resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} + '@rollup/rollup-darwin-arm64@4.53.2': + resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} cpu: [arm64] os: [darwin] @@ -850,18 +1017,18 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.8': - resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} + '@rollup/rollup-darwin-x64@4.53.2': + resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.8': - resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} + '@rollup/rollup-freebsd-arm64@4.53.2': + resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.8': - resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} + '@rollup/rollup-freebsd-x64@4.53.2': + resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} cpu: [x64] os: [freebsd] @@ -870,8 +1037,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-gnueabihf@4.34.8': - resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} cpu: [arm] os: [linux] @@ -880,8 +1047,8 @@ packages: cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.8': - resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} + '@rollup/rollup-linux-arm-musleabihf@4.53.2': + resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} cpu: [arm] os: [linux] @@ -890,8 +1057,8 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.8': - resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} + '@rollup/rollup-linux-arm64-gnu@4.53.2': + resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} cpu: [arm64] os: [linux] @@ -900,13 +1067,13 @@ packages: cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.8': - resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} + '@rollup/rollup-linux-arm64-musl@4.53.2': + resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.8': - resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} + '@rollup/rollup-linux-loong64-gnu@4.53.2': + resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} cpu: [loong64] os: [linux] @@ -915,8 +1082,8 @@ packages: cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': - resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} + '@rollup/rollup-linux-ppc64-gnu@4.53.2': + resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} cpu: [ppc64] os: [linux] @@ -925,8 +1092,13 @@ packages: cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.8': - resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.2': + resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} cpu: [riscv64] os: [linux] @@ -935,8 +1107,8 @@ packages: cpu: [s390x] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.8': - resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} + '@rollup/rollup-linux-s390x-gnu@4.53.2': + resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} cpu: [s390x] os: [linux] @@ -945,8 +1117,8 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.8': - resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} + '@rollup/rollup-linux-x64-gnu@4.53.2': + resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} cpu: [x64] os: [linux] @@ -955,18 +1127,23 @@ packages: cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.8': - resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} + '@rollup/rollup-linux-x64-musl@4.53.2': + resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} cpu: [x64] os: [linux] + '@rollup/rollup-openharmony-arm64@4.53.2': + resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.24.0': resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.34.8': - resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} + '@rollup/rollup-win32-arm64-msvc@4.53.2': + resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} cpu: [arm64] os: [win32] @@ -975,18 +1152,23 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.8': - resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} + '@rollup/rollup-win32-ia32-msvc@4.53.2': + resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.53.2': + resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.24.0': resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.8': - resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} + '@rollup/rollup-win32-x64-msvc@4.53.2': + resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} cpu: [x64] os: [win32] @@ -996,27 +1178,35 @@ packages: '@ruby/wasm-wasi@2.7.1': resolution: {integrity: sha512-2f4NqiJuFoeYiXNr60PH3TbH5c+z/xP2Hq36Av2yahp05AaLDyJxWZwr9EGmfoFsmVTmeDdEW2KjPTfpue6xeg==} - '@rushstack/node-core-library@5.10.2': - resolution: {integrity: sha512-xOF/2gVJZTfjTxbo4BDj9RtQq/HFnrrKdtem4JkyRLnwsRz2UDTg8gA1/et10fBx5RxmZD9bYVGST69W8ME5OQ==} + '@rushstack/node-core-library@5.18.0': + resolution: {integrity: sha512-XDebtBdw5S3SuZIt+Ra2NieT8kQ3D2Ow1HxhDQ/2soinswnOu9e7S69VSwTOLlQnx5mpWbONu+5JJjDxMAb6Fw==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/rig-package@0.5.3': - resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + '@rushstack/problem-matcher@0.1.1': + resolution: {integrity: sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.6.0': + resolution: {integrity: sha512-ZQmfzsLE2+Y91GF15c65L/slMRVhF6Hycq04D4TwtdGaUAbIXXg9c5pKA5KFU7M4QMaihoobp9JJYpYcaY3zOw==} - '@rushstack/terminal@0.14.5': - resolution: {integrity: sha512-TEOpNwwmsZVrkp0omnuTUTGZRJKTr6n6m4OITiNjkqzLAkcazVpwR1SOtBg6uzpkIBLgrcNHETqI8rbw3uiUfw==} + '@rushstack/terminal@0.19.3': + resolution: {integrity: sha512-0P8G18gK9STyO+CNBvkKPnWGMxESxecTYqOcikHOVIHXa9uAuTK+Fw8TJq2Gng1w7W6wTC9uPX6hGNvrMll2wA==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.23.3': - resolution: {integrity: sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==} + '@rushstack/ts-command-line@5.1.3': + resolution: {integrity: sha512-Kdv0k/BnnxIYFlMVC1IxrIS0oGQd4T4b7vKfx52Y2+wk2WZSDFIvedr7JrhenzSlm3ou5KwtoTGTGd5nbODRug==} '@shikijs/core@1.29.1': resolution: {integrity: sha512-Mo1gGGkuOYjDu5H8YwzmOuly9vNr8KDVkqj9xiKhhhFS8jisAtDSEWB9hzqRHLVQgFdA310e8XRJcW4tYhRB2A==} @@ -1064,6 +1254,9 @@ packages: resolution: {integrity: sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ==} hasBin: true + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} @@ -1175,6 +1368,9 @@ packages: '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/color-convert@2.0.3': resolution: {integrity: sha512-2Q6wzrNiuEvYxVQqhh7sXM2mhIhvZR/Paq4FdsQkOMgWsCIkKvSGj8Le1/XalulrmgOzPMqNa0ix+ePY4hTrfg==} @@ -1190,12 +1386,18 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/golang-wasm-exec@1.15.2': resolution: {integrity: sha512-NA77toY4yOiiV5foDVT/rfxmtoox7ASHqGs4Eek8xTMcKWwAhZLOD3SYfLQKq4P2jtOLQQkeISq3zSuQ1Y+apg==} @@ -1235,34 +1437,34 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vitest/expect@3.0.6': - resolution: {integrity: sha512-zBduHf/ja7/QRX4HdP1DSq5XrPgdN+jzLOwaTq/0qZjYfgETNFCKf9nOAp2j3hmom3oTbczuUzrzg9Hafh7hNg==} + '@vitest/expect@4.0.8': + resolution: {integrity: sha512-Rv0eabdP/xjAHQGr8cjBm+NnLHNoL268lMDK85w2aAGLFoVKLd8QGnVon5lLtkXQCoYaNL0wg04EGnyKkkKhPA==} - '@vitest/mocker@3.0.6': - resolution: {integrity: sha512-KPztr4/tn7qDGZfqlSPQoF2VgJcKxnDNhmfR3VgZ6Fy1bO8T9Fc1stUiTXtqz0yG24VpD00pZP5f8EOFknjNuQ==} + '@vitest/mocker@4.0.8': + resolution: {integrity: sha512-9FRM3MZCedXH3+pIh+ME5Up2NBBHDq0wqwhOKkN4VnvCiKbVxddqH9mSGPZeawjd12pCOGnl+lo/ZGHt0/dQSg==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 + vite: ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.0.6': - resolution: {integrity: sha512-Zyctv3dbNL+67qtHfRnUE/k8qxduOamRfAL1BurEIQSyOEFffoMvx2pnDSSbKAAVxY0Ej2J/GH2dQKI0W2JyVg==} + '@vitest/pretty-format@4.0.8': + resolution: {integrity: sha512-qRrjdRkINi9DaZHAimV+8ia9Gq6LeGz2CgIEmMLz3sBDYV53EsnLZbJMR1q84z1HZCMsf7s0orDgZn7ScXsZKg==} - '@vitest/runner@3.0.6': - resolution: {integrity: sha512-JopP4m/jGoaG1+CBqubV/5VMbi7L+NQCJTu1J1Pf6YaUbk7bZtaq5CX7p+8sY64Sjn1UQ1XJparHfcvTTdu9cA==} + '@vitest/runner@4.0.8': + resolution: {integrity: sha512-mdY8Sf1gsM8hKJUQfiPT3pn1n8RF4QBcJYFslgWh41JTfrK1cbqY8whpGCFzBl45LN028g0njLCYm0d7XxSaQQ==} - '@vitest/snapshot@3.0.6': - resolution: {integrity: sha512-qKSmxNQwT60kNwwJHMVwavvZsMGXWmngD023OHSgn873pV0lylK7dwBTfYP7e4URy5NiBCHHiQGA9DHkYkqRqg==} + '@vitest/snapshot@4.0.8': + resolution: {integrity: sha512-Nar9OTU03KGiubrIOFhcfHg8FYaRaNT+bh5VUlNz8stFhCZPNrJvmZkhsr1jtaYvuefYFwK2Hwrq026u4uPWCw==} - '@vitest/spy@3.0.6': - resolution: {integrity: sha512-HfOGx/bXtjy24fDlTOpgiAEJbRfFxoX3zIGagCqACkFKKZ/TTOE6gYMKXlqecvxEndKFuNHcHqP081ggZ2yM0Q==} + '@vitest/spy@4.0.8': + resolution: {integrity: sha512-nvGVqUunyCgZH7kmo+Ord4WgZ7lN0sOULYXUOYuHr55dvg9YvMz3izfB189Pgp28w0vWFbEEfNc/c3VTrqrXeA==} - '@vitest/utils@3.0.6': - resolution: {integrity: sha512-18ktZpf4GQFTbf9jK543uspU03Q2qya7ZGya5yiZ0Gx0nnnalBvd5ZBislbl2EhLjM8A8rt4OilqKG7QwcGkvQ==} + '@vitest/utils@4.0.8': + resolution: {integrity: sha512-pdk2phO5NDvEFfUTxcTP8RFYjVj/kfLSPIN5ebP2Mu9kcIMeAQTbknqcFEyBcC4z2pJlJI9aS5UQjcYfhmKAow==} '@volar/kit@2.4.5': resolution: {integrity: sha512-ZzyErW5UiDfiIuJ/lpqc2Kx5PHDGDZ/bPlPJYpRcxlrn8Z8aDhRlsLHkNKcNiH65TmNahk2kbLaiejiqu6BD3A==} @@ -1517,10 +1719,6 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1532,9 +1730,9 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + engines: {node: '>=18'} chalk@5.3.0: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} @@ -1552,10 +1750,6 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -1645,6 +1839,9 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + consola@3.4.0: resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -1724,6 +1921,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -1738,10 +1944,6 @@ packages: babel-plugin-macros: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1795,6 +1997,10 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} + engines: {node: '>=0.3.1'} + dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} @@ -1866,6 +2072,9 @@ packages: es-module-lexer@1.6.0: resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + esast-util-from-estree@2.0.0: resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} @@ -1877,6 +2086,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1930,14 +2144,17 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - expect-type@1.1.0: - resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} express@4.19.2: resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -1969,6 +2186,15 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2016,14 +2242,10 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} - fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -2303,9 +2525,6 @@ packages: jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -2396,6 +2615,10 @@ packages: resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==} engines: {node: '>=14'} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} @@ -2418,9 +2641,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -2437,6 +2657,9 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -2646,8 +2869,9 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2722,6 +2946,11 @@ packages: muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + 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.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2793,6 +3022,10 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} + engines: {node: '>=18'} + p-queue@8.1.0: resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==} engines: {node: '>=18'} @@ -2862,19 +3095,12 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} - engines: {node: '>= 14.16'} - peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2886,6 +3112,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -2897,6 +3127,9 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} @@ -2905,8 +3138,8 @@ packages: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} preferred-pm@4.1.1: @@ -2968,6 +3201,9 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -3096,8 +3332,8 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.34.8: - resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} + rollup@4.53.2: + resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3207,8 +3443,8 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.8.0: - resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -3303,16 +3539,12 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinypool@1.0.2: - resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} - tinyspy@3.0.2: - resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} to-buffer@1.1.1: @@ -3397,13 +3629,13 @@ packages: typescript-auto-import-cache@0.3.3: resolution: {integrity: sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==} - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -3462,10 +3694,6 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} @@ -3567,16 +3795,11 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@3.0.6: - resolution: {integrity: sha512-s51RzrTkXKJrhNbUzQRsarjmAae7VmMPAsRT7lppVpIg6mK3zGthP9Hgz0YQQKuNcF+Ii7DfYk3Fxz40jRmePw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite-plugin-cross-origin-isolation@0.1.6: resolution: {integrity: sha512-OY0naW9nPUDrKTffYnY7FRYXOgZdHoNwMGpPxUmj/n32mGZi01fcq+J536jkmwGWX7DLT95XBQVHHbrAJzTvrw==} - vite-plugin-dts@4.5.0: - resolution: {integrity: sha512-M1lrPTdi7gilLYRZoLmGYnl4fbPryVYsehPN9JgaxjJKTs8/f7tuAlvCCvOLB5gRDQTTKnptBcB0ACsaw2wNLw==} + vite-plugin-dts@4.5.4: + resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: typescript: '*' vite: '*' @@ -3584,11 +3807,11 @@ packages: vite: optional: true - vite-plugin-static-copy@2.2.0: - resolution: {integrity: sha512-ytMrKdR9iWEYHbUxs6x53m+MRl4SJsOSoMu1U1+Pfg0DjPeMlsRVx3RR5jvoonineDquIue83Oq69JvNsFSU5w==} + vite-plugin-static-copy@3.1.4: + resolution: {integrity: sha512-iCmr4GSw4eSnaB+G8zc2f4dxSuDjbkjwpuBLLGvQYR9IW7rnDzftnUjOH5p4RYR+d4GsiBqXRvzuFhs5bnzVyw==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^5.0.0 || ^6.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 vite@6.0.11: resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==} @@ -3630,19 +3853,19 @@ packages: yaml: optional: true - vite@6.1.1: - resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.2.2: + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -3686,16 +3909,18 @@ packages: vite: optional: true - vitest@3.0.6: - resolution: {integrity: sha512-/iL1Sc5VeDZKPDe58oGK4HUFLhw6b5XdY1MYawjuSaDA4sEfYlY9HnS6aCEG26fX+MgUi7MwlduTBHHAI/OvMA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.0.8: + resolution: {integrity: sha512-urzu3NCEV0Qa0Y2PwvBtRgmNtxhj5t5ULw7cuKhIHh3OrkKTLlut0lnBOv9qe5OvbkMH2g38G7KPDCTpIytBVg==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.0.6 - '@vitest/ui': 3.0.6 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.8 + '@vitest/browser-preview': 4.0.8 + '@vitest/browser-webdriverio': 4.0.8 + '@vitest/ui': 4.0.8 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -3705,7 +3930,11 @@ packages: optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -3968,12 +4197,12 @@ snapshots: '@antfu/utils@0.7.10': {} - '@astrojs/check@0.9.4(prettier@3.5.0)(typescript@5.7.3)': + '@astrojs/check@0.9.4(prettier@3.5.0)(typescript@5.8.2)': dependencies: - '@astrojs/language-server': 2.15.0(prettier@3.5.0)(typescript@5.7.3) + '@astrojs/language-server': 2.15.0(prettier@3.5.0)(typescript@5.8.2) chokidar: 4.0.1 kleur: 4.1.5 - typescript: 5.7.3 + typescript: 5.8.2 yargs: 17.7.2 transitivePeerDependencies: - prettier @@ -3983,12 +4212,12 @@ snapshots: '@astrojs/internal-helpers@0.5.1': {} - '@astrojs/language-server@2.15.0(prettier@3.5.0)(typescript@5.7.3)': + '@astrojs/language-server@2.15.0(prettier@3.5.0)(typescript@5.8.2)': dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/yaml2ts': 0.2.1 '@jridgewell/sourcemap-codec': 1.5.0 - '@volar/kit': 2.4.5(typescript@5.7.3) + '@volar/kit': 2.4.5(typescript@5.8.2) '@volar/language-core': 2.4.5 '@volar/language-server': 2.4.5 '@volar/language-service': 2.4.5 @@ -4033,12 +4262,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.0.8(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1))': + '@astrojs/mdx@4.0.8(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1))': dependencies: '@astrojs/markdown-remark': 6.1.0 '@mdx-js/mdx': 3.1.0(acorn@8.14.0) acorn: 8.14.0 - astro: 5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1) + astro: 5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1) es-module-lexer: 1.6.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.4 @@ -4056,13 +4285,13 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/svelte@7.0.4(@types/node@22.12.0)(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1))(jiti@2.4.2)(lightningcss@1.29.1)(svelte@5.20.2)(typescript@5.7.3)(yaml@2.5.1)': + '@astrojs/svelte@7.0.4(@types/node@22.12.0)(astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1))(jiti@2.4.2)(lightningcss@1.29.1)(svelte@5.20.2)(typescript@5.8.2)(yaml@2.5.1)': dependencies: '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.20.2)(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) - astro: 5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1) + astro: 5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1) svelte: 5.20.2 - svelte2tsx: 0.7.34(svelte@5.20.2)(typescript@5.7.3) - typescript: 5.7.3 + svelte2tsx: 0.7.34(svelte@5.20.2)(typescript@5.8.2) + typescript: 5.8.2 vite: 6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) transitivePeerDependencies: - '@types/node' @@ -4141,78 +4370,156 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/android-arm64@0.24.2': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm@0.24.2': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-x64@0.24.2': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.24.2': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.24.2': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.24.2': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.24.2': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.24.2': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm@0.24.2': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-ia32@0.24.2': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-loong64@0.24.2': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.24.2': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.24.2': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.24.2': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-s390x@0.24.2': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-x64@0.24.2': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.24.2': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.24.2': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.24.2': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.24.2': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-ia32@0.24.2': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-x64@0.24.2': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@iconify-json/lucide@1.2.26': dependencies: '@iconify/types': 2.0.0 @@ -4354,6 +4661,12 @@ snapshots: transitivePeerDependencies: - babel-plugin-macros + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -4366,6 +4679,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -4415,29 +4730,30 @@ snapshots: - acorn - supports-color - '@microsoft/api-extractor-model@7.30.2(@types/node@22.12.0)': + '@microsoft/api-extractor-model@7.31.3(@types/node@22.12.0)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.2(@types/node@22.12.0) + '@rushstack/node-core-library': 5.18.0(@types/node@22.12.0) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.49.1(@types/node@22.12.0)': + '@microsoft/api-extractor@7.54.0(@types/node@22.12.0)': dependencies: - '@microsoft/api-extractor-model': 7.30.2(@types/node@22.12.0) + '@microsoft/api-extractor-model': 7.31.3(@types/node@22.12.0) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.2(@types/node@22.12.0) - '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.5(@types/node@22.12.0) - '@rushstack/ts-command-line': 4.23.3(@types/node@22.12.0) + '@rushstack/node-core-library': 5.18.0(@types/node@22.12.0) + '@rushstack/rig-package': 0.6.0 + '@rushstack/terminal': 0.19.3(@types/node@22.12.0) + '@rushstack/ts-command-line': 5.1.3(@types/node@22.12.0) + diff: 8.0.2 lodash: 4.17.21 - minimatch: 3.0.8 + minimatch: 10.0.3 resolve: 1.22.8 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.7.2 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' @@ -4549,117 +4865,126 @@ snapshots: - supports-color - utf-8-validate - '@rollup/pluginutils@5.1.4(rollup@4.34.8)': + '@rollup/pluginutils@5.1.4(rollup@4.53.2)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.8 + rollup: 4.53.2 '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm-eabi@4.34.8': + '@rollup/rollup-android-arm-eabi@4.53.2': optional: true '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.34.8': + '@rollup/rollup-android-arm64@4.53.2': optional: true '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.34.8': + '@rollup/rollup-darwin-arm64@4.53.2': optional: true '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.34.8': + '@rollup/rollup-darwin-x64@4.53.2': optional: true - '@rollup/rollup-freebsd-arm64@4.34.8': + '@rollup/rollup-freebsd-arm64@4.53.2': optional: true - '@rollup/rollup-freebsd-x64@4.34.8': + '@rollup/rollup-freebsd-x64@4.53.2': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + '@rollup/rollup-linux-arm-gnueabihf@4.53.2': optional: true '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.8': + '@rollup/rollup-linux-arm-musleabihf@4.53.2': optional: true '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.8': + '@rollup/rollup-linux-arm64-gnu@4.53.2': optional: true '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.8': + '@rollup/rollup-linux-arm64-musl@4.53.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + '@rollup/rollup-linux-loong64-gnu@4.53.2': optional: true '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + '@rollup/rollup-linux-ppc64-gnu@4.53.2': optional: true '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.8': + '@rollup/rollup-linux-riscv64-gnu@4.53.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.2': optional: true '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.8': + '@rollup/rollup-linux-s390x-gnu@4.53.2': optional: true '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.8': + '@rollup/rollup-linux-x64-gnu@4.53.2': optional: true '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.34.8': + '@rollup/rollup-linux-x64-musl@4.53.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.2': optional: true '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.8': + '@rollup/rollup-win32-arm64-msvc@4.53.2': optional: true '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.8': + '@rollup/rollup-win32-ia32-msvc@4.53.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.2': optional: true '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.8': + '@rollup/rollup-win32-x64-msvc@4.53.2': optional: true '@ruby/3.4-wasm-wasi@2.7.1': @@ -4671,12 +4996,12 @@ snapshots: '@bjorn3/browser_wasi_shim': 0.3.0 tslib: 2.8.1 - '@rushstack/node-core-library@5.10.2(@types/node@22.12.0)': + '@rushstack/node-core-library@5.18.0(@types/node@22.12.0)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 7.0.1 + fs-extra: 11.3.2 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.8 @@ -4684,21 +5009,26 @@ snapshots: optionalDependencies: '@types/node': 22.12.0 - '@rushstack/rig-package@0.5.3': + '@rushstack/problem-matcher@0.1.1(@types/node@22.12.0)': + optionalDependencies: + '@types/node': 22.12.0 + + '@rushstack/rig-package@0.6.0': dependencies: resolve: 1.22.8 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.5(@types/node@22.12.0)': + '@rushstack/terminal@0.19.3(@types/node@22.12.0)': dependencies: - '@rushstack/node-core-library': 5.10.2(@types/node@22.12.0) + '@rushstack/node-core-library': 5.18.0(@types/node@22.12.0) + '@rushstack/problem-matcher': 0.1.1(@types/node@22.12.0) supports-color: 8.1.1 optionalDependencies: '@types/node': 22.12.0 - '@rushstack/ts-command-line@4.23.3(@types/node@22.12.0)': + '@rushstack/ts-command-line@5.1.3(@types/node@22.12.0)': dependencies: - '@rushstack/terminal': 0.14.5(@types/node@22.12.0) + '@rushstack/terminal': 0.19.3(@types/node@22.12.0) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -4777,6 +5107,8 @@ snapshots: '@sqlite.org/sqlite-wasm@3.48.0-build4': {} + '@standard-schema/spec@1.0.0': {} + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.20.2)(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)))(svelte@5.20.2)(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1))': dependencies: '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.20.2)(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) @@ -4878,6 +5210,11 @@ snapshots: '@types/argparse@1.0.38': {} + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + '@types/color-convert@2.0.3': dependencies: '@types/color-name': 1.1.4 @@ -4894,12 +5231,16 @@ snapshots: dependencies: '@types/ms': 0.7.34 + '@types/deep-eql@4.0.2': {} + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.6 '@types/estree@1.0.6': {} + '@types/estree@1.0.8': {} + '@types/golang-wasm-exec@1.15.2': {} '@types/hast@3.0.4': @@ -4942,52 +5283,51 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitest/expect@3.0.6': + '@vitest/expect@4.0.8': dependencies: - '@vitest/spy': 3.0.6 - '@vitest/utils': 3.0.6 - chai: 5.2.0 - tinyrainbow: 2.0.0 + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.8 + '@vitest/utils': 4.0.8 + chai: 6.2.1 + tinyrainbow: 3.0.3 - '@vitest/mocker@3.0.6(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1))': + '@vitest/mocker@4.0.8(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1))': dependencies: - '@vitest/spy': 3.0.6 + '@vitest/spy': 4.0.8 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: - vite: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + vite: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) - '@vitest/pretty-format@3.0.6': + '@vitest/pretty-format@4.0.8': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.0.3 - '@vitest/runner@3.0.6': + '@vitest/runner@4.0.8': dependencies: - '@vitest/utils': 3.0.6 + '@vitest/utils': 4.0.8 pathe: 2.0.3 - '@vitest/snapshot@3.0.6': + '@vitest/snapshot@4.0.8': dependencies: - '@vitest/pretty-format': 3.0.6 - magic-string: 0.30.17 + '@vitest/pretty-format': 4.0.8 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.0.6': - dependencies: - tinyspy: 3.0.2 + '@vitest/spy@4.0.8': {} - '@vitest/utils@3.0.6': + '@vitest/utils@4.0.8': dependencies: - '@vitest/pretty-format': 3.0.6 - loupe: 3.1.3 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.0.8 + tinyrainbow: 3.0.3 - '@volar/kit@2.4.5(typescript@5.7.3)': + '@volar/kit@2.4.5(typescript@5.8.2)': dependencies: '@volar/language-service': 2.4.5 '@volar/typescript': 2.4.5 typesafe-path: 0.2.2 - typescript: 5.7.3 + typescript: 5.8.2 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 @@ -5062,7 +5402,7 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/language-core@2.2.0(typescript@5.7.3)': + '@vue/language-core@2.2.0(typescript@5.8.2)': dependencies: '@volar/language-core': 2.4.11 '@vue/compiler-dom': 3.5.7 @@ -5073,7 +5413,7 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 '@vue/shared@3.5.7': {} @@ -5198,14 +5538,14 @@ snapshots: - debug - supports-color - astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.8)(typescript@5.7.3)(yaml@2.5.1): + astro@5.3.0(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.53.2)(typescript@5.8.2)(yaml@2.5.1): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.5.1 '@astrojs/markdown-remark': 6.1.0 '@astrojs/telemetry': 3.2.0 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@rollup/pluginutils': 5.1.4(rollup@4.53.2) '@types/cookie': 0.6.0 acorn: 8.14.0 aria-query: 5.3.2 @@ -5245,7 +5585,7 @@ snapshots: semver: 7.7.1 shiki: 1.29.2 tinyexec: 0.3.2 - tsconfck: 3.1.4(typescript@5.7.3) + tsconfck: 3.1.4(typescript@5.8.2) ultrahtml: 1.5.3 unist-util-visit: 5.0.0 unstorage: 1.14.4 @@ -5258,7 +5598,7 @@ snapshots: yocto-spinner: 0.2.0 zod: 3.24.1 zod-to-json-schema: 3.24.1(zod@3.24.1) - zod-to-ts: 1.2.0(typescript@5.7.3)(zod@3.24.1) + zod-to-ts: 1.2.0(typescript@5.8.2)(zod@3.24.1) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: @@ -5391,8 +5731,6 @@ snapshots: bytes@3.1.2: {} - cac@6.7.14: {} - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -5405,13 +5743,7 @@ snapshots: ccount@2.0.1: {} - chai@5.2.0: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 + chai@6.2.1: {} chalk@5.3.0: {} @@ -5423,8 +5755,6 @@ snapshots: character-reference-invalid@2.0.1: {} - check-error@2.1.1: {} - cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -5528,6 +5858,8 @@ snapshots: confbox@0.1.8: {} + confbox@0.2.2: {} + consola@3.4.0: {} content-disposition@0.5.4: @@ -5588,6 +5920,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 @@ -5596,8 +5932,6 @@ snapshots: dedent@1.5.1: {} - deep-eql@5.0.2: {} - deepmerge@4.3.1: {} define-data-property@1.1.4: @@ -5635,6 +5969,8 @@ snapshots: diff@5.2.0: {} + diff@8.0.2: {} + dlv@1.1.3: {} dom-serializer@2.0.0: @@ -5715,6 +6051,8 @@ snapshots: es-module-lexer@1.6.0: {} + es-module-lexer@1.7.0: {} + esast-util-from-estree@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 @@ -5757,6 +6095,35 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -5810,7 +6177,7 @@ snapshots: eventemitter3@5.0.1: {} - expect-type@1.1.0: {} + expect-type@1.2.2: {} express@4.19.2: dependencies: @@ -5848,6 +6215,8 @@ snapshots: transitivePeerDependencies: - supports-color + exsolve@1.0.8: {} + extend@3.0.2: {} extract-zip@2.0.1: @@ -5890,6 +6259,10 @@ snapshots: dependencies: pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -5934,18 +6307,12 @@ snapshots: fs-constants@1.0.0: {} - fs-extra@11.2.0: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@7.0.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -6291,10 +6658,6 @@ snapshots: jsonc-parser@3.3.1: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 - jsonfile@6.1.0: dependencies: universalify: 2.0.1 @@ -6366,6 +6729,12 @@ snapshots: mlly: 1.7.4 pkg-types: 1.3.1 + local-pkg@1.1.2: + dependencies: + mlly: 1.7.4 + pkg-types: 2.3.0 + quansync: 0.2.11 + locate-character@3.0.0: {} locate-path@5.0.0: @@ -6382,8 +6751,6 @@ snapshots: longest-streak@3.1.0: {} - loupe@3.1.3: {} - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -6402,6 +6769,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: dependencies: '@babel/parser': 7.25.8 @@ -6873,9 +7244,9 @@ snapshots: mime@3.0.0: {} - minimatch@3.0.8: + minimatch@10.0.3: dependencies: - brace-expansion: 1.1.11 + '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: @@ -6939,6 +7310,8 @@ snapshots: muggle-string@0.4.1: {} + nanoid@3.3.11: {} + nanoid@3.3.8: {} negotiator@0.6.3: {} @@ -7011,6 +7384,8 @@ snapshots: dependencies: p-limit: 2.3.0 + p-map@7.0.4: {} + p-queue@8.1.0: dependencies: eventemitter3: 5.0.1 @@ -7082,8 +7457,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} - peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 @@ -7092,14 +7465,14 @@ snapshots: pend@1.2.0: {} - picocolors@1.1.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@4.0.2: {} + picomatch@4.0.3: {} + pify@4.0.1: {} pkg-dir@4.2.0: @@ -7112,6 +7485,12 @@ snapshots: mlly: 1.7.4 pathe: 2.0.2 + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + postcss-selector-parser@6.0.10: dependencies: cssesc: 3.0.0 @@ -7123,9 +7502,9 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.3: + postcss@8.5.6: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -7193,6 +7572,8 @@ snapshots: dependencies: side-channel: 1.0.6 + quansync@0.2.11: {} + queue-microtask@1.2.3: {} radix3@1.1.2: {} @@ -7413,29 +7794,32 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 - rollup@4.34.8: + rollup@4.53.2: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.8 - '@rollup/rollup-android-arm64': 4.34.8 - '@rollup/rollup-darwin-arm64': 4.34.8 - '@rollup/rollup-darwin-x64': 4.34.8 - '@rollup/rollup-freebsd-arm64': 4.34.8 - '@rollup/rollup-freebsd-x64': 4.34.8 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 - '@rollup/rollup-linux-arm-musleabihf': 4.34.8 - '@rollup/rollup-linux-arm64-gnu': 4.34.8 - '@rollup/rollup-linux-arm64-musl': 4.34.8 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 - '@rollup/rollup-linux-riscv64-gnu': 4.34.8 - '@rollup/rollup-linux-s390x-gnu': 4.34.8 - '@rollup/rollup-linux-x64-gnu': 4.34.8 - '@rollup/rollup-linux-x64-musl': 4.34.8 - '@rollup/rollup-win32-arm64-msvc': 4.34.8 - '@rollup/rollup-win32-ia32-msvc': 4.34.8 - '@rollup/rollup-win32-x64-msvc': 4.34.8 + '@rollup/rollup-android-arm-eabi': 4.53.2 + '@rollup/rollup-android-arm64': 4.53.2 + '@rollup/rollup-darwin-arm64': 4.53.2 + '@rollup/rollup-darwin-x64': 4.53.2 + '@rollup/rollup-freebsd-arm64': 4.53.2 + '@rollup/rollup-freebsd-x64': 4.53.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 + '@rollup/rollup-linux-arm-musleabihf': 4.53.2 + '@rollup/rollup-linux-arm64-gnu': 4.53.2 + '@rollup/rollup-linux-arm64-musl': 4.53.2 + '@rollup/rollup-linux-loong64-gnu': 4.53.2 + '@rollup/rollup-linux-ppc64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-gnu': 4.53.2 + '@rollup/rollup-linux-riscv64-musl': 4.53.2 + '@rollup/rollup-linux-s390x-gnu': 4.53.2 + '@rollup/rollup-linux-x64-gnu': 4.53.2 + '@rollup/rollup-linux-x64-musl': 4.53.2 + '@rollup/rollup-openharmony-arm64': 4.53.2 + '@rollup/rollup-win32-arm64-msvc': 4.53.2 + '@rollup/rollup-win32-ia32-msvc': 4.53.2 + '@rollup/rollup-win32-x64-gnu': 4.53.2 + '@rollup/rollup-win32-x64-msvc': 4.53.2 fsevents: 2.3.3 run-parallel@1.2.0: @@ -7586,7 +7970,7 @@ snapshots: statuses@2.0.1: {} - std-env@3.8.0: {} + std-env@3.10.0: {} stream-shift@1.0.3: {} @@ -7639,12 +8023,12 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte2tsx@0.7.34(svelte@5.20.2)(typescript@5.7.3): + svelte2tsx@0.7.34(svelte@5.20.2)(typescript@5.8.2): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 svelte: 5.20.2 - typescript: 5.7.3 + typescript: 5.8.2 svelte@5.20.2: dependencies: @@ -7712,11 +8096,12 @@ snapshots: tinyexec@0.3.2: {} - tinypool@1.0.2: {} - - tinyrainbow@2.0.0: {} + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - tinyspy@3.0.2: {} + tinyrainbow@3.0.3: {} to-buffer@1.1.1: {} @@ -7732,9 +8117,9 @@ snapshots: trough@2.2.0: {} - tsconfck@3.1.4(typescript@5.7.3): + tsconfck@3.1.4(typescript@5.8.2): optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 tslib@2.8.1: {} @@ -7778,10 +8163,10 @@ snapshots: dependencies: semver: 7.6.3 - typescript@5.7.2: {} - typescript@5.7.3: {} + typescript@5.8.2: {} + ufo@1.5.4: {} ultrahtml@1.5.3: {} @@ -7858,8 +8243,6 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - universalify@0.1.2: {} - universalify@2.0.1: {} unpipe@1.0.0: {} @@ -7909,63 +8292,42 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.6(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1): - dependencies: - cac: 6.7.14 - debug: 4.4.0 - es-module-lexer: 1.6.0 - pathe: 2.0.3 - vite: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vite-plugin-cross-origin-isolation@0.1.6: {} - vite-plugin-dts@4.5.0(@types/node@22.12.0)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)): + vite-plugin-dts@4.5.4(@types/node@22.12.0)(rollup@4.53.2)(typescript@5.8.2)(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)): dependencies: - '@microsoft/api-extractor': 7.49.1(@types/node@22.12.0) - '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@microsoft/api-extractor': 7.54.0(@types/node@22.12.0) + '@rollup/pluginutils': 5.1.4(rollup@4.53.2) '@volar/typescript': 2.4.11 - '@vue/language-core': 2.2.0(typescript@5.7.3) + '@vue/language-core': 2.2.0(typescript@5.8.2) compare-versions: 6.1.1 debug: 4.4.0 kolorist: 1.8.0 - local-pkg: 0.5.1 + local-pkg: 1.1.2 magic-string: 0.30.17 - typescript: 5.7.3 + typescript: 5.8.2 optionalDependencies: - vite: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + vite: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@2.2.0(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)): + vite-plugin-static-copy@3.1.4(vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)): dependencies: chokidar: 3.6.0 - fast-glob: 3.3.2 - fs-extra: 11.2.0 - picocolors: 1.1.0 + p-map: 7.0.4 + picocolors: 1.1.1 + tinyglobby: 0.2.15 vite: 6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) - vite-plugin-static-copy@2.2.0(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)): + vite-plugin-static-copy@3.1.4(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)): dependencies: chokidar: 3.6.0 - fast-glob: 3.3.2 - fs-extra: 11.2.0 - picocolors: 1.1.0 - vite: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + p-map: 7.0.4 + picocolors: 1.1.1 + tinyglobby: 0.2.15 + vite: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) vite@6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1): dependencies: @@ -7979,11 +8341,14 @@ snapshots: lightningcss: 1.29.1 yaml: 2.5.1 - vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1): + vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1): dependencies: - esbuild: 0.24.2 - postcss: 8.5.3 - rollup: 4.34.8 + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.2 + tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.12.0 fsevents: 2.3.3 @@ -7999,27 +8364,27 @@ snapshots: optionalDependencies: vite: 6.0.11(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) - vitest@3.0.6(@types/debug@4.1.12)(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1): - dependencies: - '@vitest/expect': 3.0.6 - '@vitest/mocker': 3.0.6(vite@6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) - '@vitest/pretty-format': 3.0.6 - '@vitest/runner': 3.0.6 - '@vitest/snapshot': 3.0.6 - '@vitest/spy': 3.0.6 - '@vitest/utils': 3.0.6 - chai: 5.2.0 - debug: 4.4.0 - expect-type: 1.1.0 - magic-string: 0.30.17 + vitest@4.0.8(@types/debug@4.1.12)(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1): + dependencies: + '@vitest/expect': 4.0.8 + '@vitest/mocker': 4.0.8(vite@7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1)) + '@vitest/pretty-format': 4.0.8 + '@vitest/runner': 4.0.8 + '@vitest/snapshot': 4.0.8 + '@vitest/spy': 4.0.8 + '@vitest/utils': 4.0.8 + debug: 4.4.3 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 pathe: 2.0.3 - std-env: 3.8.0 + picomatch: 4.0.3 + std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 - vite: 6.1.1(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) - vite-node: 3.0.6(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.2(@types/node@22.12.0)(jiti@2.4.2)(lightningcss@1.29.1)(yaml@2.5.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -8253,9 +8618,9 @@ snapshots: dependencies: zod: 3.24.1 - zod-to-ts@1.2.0(typescript@5.7.3)(zod@3.24.1): + zod-to-ts@1.2.0(typescript@5.8.2)(zod@3.24.1): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 zod: 3.24.1 zod@3.24.1: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2df38933..7c8e7254 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,7 @@ packages: - "apps/*" catalog: - vite: ^6.1.1 - vitest: ^3.0.6 - vite-plugin-dts: ^4.5.0 - vite-plugin-static-copy: ^2.2.0 + vite: ^7.2.2 + vitest: ^4.0.8 + vite-plugin-dts: ^4.5.4 + vite-plugin-static-copy: ^3.1.4 From f0308936e8b421d709935e454218a4c62c26c9c4 Mon Sep 17 00:00:00 2001 From: Roman Krasilnikov Date: Tue, 11 Nov 2025 20:13:49 +0300 Subject: [PATCH 03/13] Init sveltekit app --- .github/workflows/deploy.yml | 23 +- apps/ppp-sveltekit/.gitignore | 26 + apps/ppp-sveltekit/.npmrc | 1 + apps/ppp-sveltekit/.prettierignore | 9 + apps/ppp-sveltekit/.prettierrc | 16 + apps/ppp-sveltekit/eslint.config.js | 41 + apps/ppp-sveltekit/messages/en.json | 4 + apps/ppp-sveltekit/messages/ru.json | 16 + apps/ppp-sveltekit/package.json | 73 + apps/ppp-sveltekit/project.inlang/.gitignore | 1 + apps/ppp-sveltekit/project.inlang/project_id | 1 + .../project.inlang/settings.json | 12 + apps/ppp-sveltekit/src/app.css | 10 + apps/ppp-sveltekit/src/app.d.ts | 15 + apps/ppp-sveltekit/src/app.html | 11 + apps/ppp-sveltekit/src/hooks.server.ts | 13 + apps/ppp-sveltekit/src/hooks.ts | 3 + .../src/lib/assets/enable-threads.js | 75 + apps/ppp-sveltekit/src/lib/assets/favicon.svg | 1 + .../src/lib/components/dropdown.svelte | 89 + .../lib/components/editor/context.svelte.ts | 23 + .../editor/controls/checkbox.svelte | 13 + .../lib/components/editor/controls/index.ts | 2 + .../components/editor/controls/number.svelte | 17 + .../src/lib/components/editor/editor.svelte | 51 + .../src/lib/components/editor/index.ts | 6 + .../components/editor/panel/context.svelte.ts | 21 + .../src/lib/components/editor/panel/index.ts | 7 + .../src/lib/components/editor/panel/model.ts | 6 + .../editor/panel/panel-toggle.svelte | 68 + .../lib/components/editor/panel/panel.svelte | 36 + .../editor/panel/tab-content.svelte | 20 + .../lib/components/editor/panel/tab.svelte | 43 + .../lib/components/editor/panel/tabs.svelte | 23 + .../editor/panel/terminal-tab.svelte | 51 + .../lib/components/editor/panel/tests.svelte | 32 + .../src/lib/components/editor/process.ts | 1 + .../lib/components/editor/run-button.svelte | 26 + .../src/lib/components/editor/terminal.ts | 93 + .../lib/components/editor/vim-status.svelte | 28 + .../src/lib/components/hint.astro | 19 + .../src/lib/components/logo.svelte | 10 + .../src/lib/components/resizable-panel.svelte | 79 + .../src/lib/components/resizer/index.ts | 2 + .../src/lib/components/resizer/model.ts | 9 + .../src/lib/components/resizer/resizer.svelte | 61 + .../src/lib/components/select.svelte | 16 + .../ppp-sveltekit/src/lib/editor-panel-tab.ts | 14 + .../src/lib/editor-provider.svelte | 32 + apps/ppp-sveltekit/src/lib/gleam/LICENSE.txt | 211 ++ apps/ppp-sveltekit/src/lib/gleam/README.md | 3 + .../src/lib/gleam/gleam.tmLanguage.json | 176 ++ .../src/lib/gleam/language-configuration.ts | 26 + .../src/lib/language-icons.svelte | 30 + apps/ppp-sveltekit/src/lib/language.ts | 27 + apps/ppp-sveltekit/src/lib/monaco.ts | 52 + apps/ppp-sveltekit/src/lib/path.ts | 3 + .../src/lib/runtime/descriptions.ts | 27 + .../lib/runtime/dotnet/compiler-factory.ts | 242 ++ .../src/lib/runtime/dotnet/description.svelte | 9 + .../src/lib/runtime/dotnet/info.svelte | 24 + .../runtime/dotnet/test-compiler-factory.ts | 268 ++ .../runtime/dotnet/test-description.svelte | 7 + .../src/lib/runtime/dotnet/test-worker.ts | 19 + .../src/lib/runtime/dotnet/worker.ts | 6 + .../src/lib/runtime/gleam/compiler-factory.ts | 44 + .../src/lib/runtime/gleam/description.svelte | 17 + .../runtime/gleam/test-compiler-factory.ts | 54 + .../src/lib/runtime/gleam/test-worker.ts | 16 + .../src/lib/runtime/gleam/worker.ts | 6 + .../src/lib/runtime/go/compiler-factory.ts | 26 + .../src/lib/runtime/go/description.svelte | 19 + .../lib/runtime/go/test-compiler-factory.ts | 45 + .../src/lib/runtime/go/test-worker.ts | 16 + .../src/lib/runtime/go/worker.ts | 6 + .../src/lib/runtime/java/compiler-factory.ts | 30 + .../src/lib/runtime/java/description.svelte | 9 + .../src/lib/runtime/java/info.svelte | 14 + .../lib/runtime/java/test-compiler-factory.ts | 92 + .../lib/runtime/java/test-description.svelte | 9 + .../src/lib/runtime/java/test-worker.ts | 19 + .../src/lib/runtime/java/worker.ts | 6 + .../src/lib/runtime/js/compiler-factory.ts | 15 + .../src/lib/runtime/js/description.svelte | 11 + .../lib/runtime/js/test-compiler-factory.ts | 36 + .../src/lib/runtime/js/test-worker.ts | 16 + .../src/lib/runtime/js/worker.ts | 6 + .../src/lib/runtime/php/compiler-factory.ts | 14 + .../src/lib/runtime/php/description.svelte | 16 + .../lib/runtime/php/test-compiler-factory.ts | 34 + .../src/lib/runtime/php/test-worker.ts | 16 + .../src/lib/runtime/php/worker.ts | 6 + .../lib/runtime/python/compiler-factory.ts | 26 + .../src/lib/runtime/python/description.svelte | 16 + .../runtime/python/test-compiler-factory.ts | 44 + .../src/lib/runtime/python/test-worker.ts | 16 + .../src/lib/runtime/python/worker.ts | 6 + .../src/lib/runtime/ruby/compiler-factory.ts | 19 + .../src/lib/runtime/ruby/description.svelte | 22 + .../lib/runtime/ruby/test-compiler-factory.ts | 37 + .../src/lib/runtime/ruby/test-worker.ts | 16 + .../src/lib/runtime/ruby/worker.ts | 6 + .../src/lib/runtime/rust/compiler-factory.ts | 45 + .../src/lib/runtime/rust/description.svelte | 38 + .../lib/runtime/rust/test-compiler-factory.ts | 62 + .../src/lib/runtime/rust/test-worker.ts | 14 + .../src/lib/runtime/rust/worker.ts | 6 + .../src/lib/runtime/test-descriptions.ts | 27 + .../src/lib/runtime/ts/compiler-factory.ts | 19 + .../src/lib/runtime/ts/description.svelte | 26 + .../lib/runtime/ts/test-compiler-factory.ts | 37 + .../src/lib/runtime/ts/test-worker.ts | 16 + .../src/lib/runtime/ts/worker.ts | 6 + apps/ppp-sveltekit/src/lib/storage.ts | 23 + .../src/lib/sync-storage.svelte.ts | 29 + apps/ppp-sveltekit/src/routes/+layout.svelte | 26 + apps/ppp-sveltekit/src/routes/+page.svelte | 1 + .../src/routes/editor/+layout.svelte | 9 + .../src/routes/editor/+layout.ts | 1 + .../src/routes/editor/+page.svelte | 269 ++ .../src/routes/editor/_program.cs | 9 + .../src/routes/editor/_program.gleam | 5 + .../src/routes/editor/_program.go | 5 + .../src/routes/editor/_program.java | 5 + .../src/routes/editor/_program.js | 1 + .../src/routes/editor/_program.php | 3 + .../src/routes/editor/_program.py | 1 + .../src/routes/editor/_program.rb | 1 + .../src/routes/editor/_program.rs | 3 + .../src/routes/editor/_program.ts | 1 + .../src/routes/editor/_runtimes.ts | 73 + apps/ppp-sveltekit/static/robots.txt | 3 + apps/ppp-sveltekit/svelte.config.js | 20 + apps/ppp-sveltekit/tsconfig.json | 20 + apps/ppp-sveltekit/vite.config.ts | 85 + mkfile | 2 +- package.json | 6 +- packages/go-runtime/public/compiler.wasm | Bin 40328843 -> 133 bytes pnpm-lock.yaml | 2331 +++++++++++++++-- 139 files changed, 6235 insertions(+), 178 deletions(-) create mode 100644 apps/ppp-sveltekit/.gitignore create mode 100644 apps/ppp-sveltekit/.npmrc create mode 100644 apps/ppp-sveltekit/.prettierignore create mode 100644 apps/ppp-sveltekit/.prettierrc create mode 100644 apps/ppp-sveltekit/eslint.config.js create mode 100644 apps/ppp-sveltekit/messages/en.json create mode 100644 apps/ppp-sveltekit/messages/ru.json create mode 100644 apps/ppp-sveltekit/package.json create mode 100644 apps/ppp-sveltekit/project.inlang/.gitignore create mode 100644 apps/ppp-sveltekit/project.inlang/project_id create mode 100644 apps/ppp-sveltekit/project.inlang/settings.json create mode 100644 apps/ppp-sveltekit/src/app.css create mode 100644 apps/ppp-sveltekit/src/app.d.ts create mode 100644 apps/ppp-sveltekit/src/app.html create mode 100644 apps/ppp-sveltekit/src/hooks.server.ts create mode 100644 apps/ppp-sveltekit/src/hooks.ts create mode 100644 apps/ppp-sveltekit/src/lib/assets/enable-threads.js create mode 100644 apps/ppp-sveltekit/src/lib/assets/favicon.svg create mode 100644 apps/ppp-sveltekit/src/lib/components/dropdown.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/context.svelte.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/controls/checkbox.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/controls/index.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/controls/number.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/editor.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/index.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/context.svelte.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/index.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/model.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/panel-toggle.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/panel.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/tab-content.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/tab.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/tabs.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/terminal-tab.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/panel/tests.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/process.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/run-button.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/terminal.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/editor/vim-status.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/hint.astro create mode 100644 apps/ppp-sveltekit/src/lib/components/logo.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/resizable-panel.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/resizer/index.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/resizer/model.ts create mode 100644 apps/ppp-sveltekit/src/lib/components/resizer/resizer.svelte create mode 100644 apps/ppp-sveltekit/src/lib/components/select.svelte create mode 100644 apps/ppp-sveltekit/src/lib/editor-panel-tab.ts create mode 100644 apps/ppp-sveltekit/src/lib/editor-provider.svelte create mode 100644 apps/ppp-sveltekit/src/lib/gleam/LICENSE.txt create mode 100644 apps/ppp-sveltekit/src/lib/gleam/README.md create mode 100644 apps/ppp-sveltekit/src/lib/gleam/gleam.tmLanguage.json create mode 100644 apps/ppp-sveltekit/src/lib/gleam/language-configuration.ts create mode 100644 apps/ppp-sveltekit/src/lib/language-icons.svelte create mode 100644 apps/ppp-sveltekit/src/lib/language.ts create mode 100644 apps/ppp-sveltekit/src/lib/monaco.ts create mode 100644 apps/ppp-sveltekit/src/lib/path.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/descriptions.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/info.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/test-description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/dotnet/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/gleam/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/gleam/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/gleam/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/gleam/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/gleam/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/go/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/go/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/go/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/go/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/go/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/info.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/test-description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/java/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/js/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/js/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/js/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/js/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/js/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/php/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/php/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/php/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/php/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/php/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/python/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/python/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/python/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/python/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/python/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ruby/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ruby/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ruby/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ruby/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ruby/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/rust/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/rust/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/rust/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/rust/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/rust/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/test-descriptions.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ts/compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ts/description.svelte create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ts/test-compiler-factory.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ts/test-worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/runtime/ts/worker.ts create mode 100644 apps/ppp-sveltekit/src/lib/storage.ts create mode 100644 apps/ppp-sveltekit/src/lib/sync-storage.svelte.ts create mode 100644 apps/ppp-sveltekit/src/routes/+layout.svelte create mode 100644 apps/ppp-sveltekit/src/routes/+page.svelte create mode 100644 apps/ppp-sveltekit/src/routes/editor/+layout.svelte create mode 100644 apps/ppp-sveltekit/src/routes/editor/+layout.ts create mode 100644 apps/ppp-sveltekit/src/routes/editor/+page.svelte create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.cs create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.gleam create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.go create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.java create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.js create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.php create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.py create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.rb create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.rs create mode 100644 apps/ppp-sveltekit/src/routes/editor/_program.ts create mode 100644 apps/ppp-sveltekit/src/routes/editor/_runtimes.ts create mode 100644 apps/ppp-sveltekit/static/robots.txt create mode 100644 apps/ppp-sveltekit/svelte.config.js create mode 100644 apps/ppp-sveltekit/tsconfig.json create mode 100644 apps/ppp-sveltekit/vite.config.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f68b1b64..bbfbffe3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -9,25 +9,20 @@ on: workflow_dispatch: # Allow this job to clone the repo and create a page deployment -permissions: - contents: read - pages: write - id-token: write - jobs: build: runs-on: ubuntu-latest steps: - name: Checkout your repository using git - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Setup pnpm uses: pnpm/action-setup@v4 - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: 20 + node-version: 24 cache: pnpm - name: Install dependencies @@ -43,18 +38,26 @@ jobs: - name: Build run: pnpm run build + env: + BASE_PATH: "/${{ github.event.repository.name }}" - name: Upload Pages Artifact - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v4 with: - path: "apps/ppp/dist/" + path: "apps/ppp-sveltekit/build/" deploy: needs: build runs-on: ubuntu-latest + + permissions: + pages: write + id-token: write + environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} + steps: - name: Deploy to GitHub Pages id: deployment diff --git a/apps/ppp-sveltekit/.gitignore b/apps/ppp-sveltekit/.gitignore new file mode 100644 index 00000000..83eb0159 --- /dev/null +++ b/apps/ppp-sveltekit/.gitignore @@ -0,0 +1,26 @@ +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* + +# Paraglide +src/lib/paraglide diff --git a/apps/ppp-sveltekit/.npmrc b/apps/ppp-sveltekit/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/apps/ppp-sveltekit/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/apps/ppp-sveltekit/.prettierignore b/apps/ppp-sveltekit/.prettierignore new file mode 100644 index 00000000..7d74fe24 --- /dev/null +++ b/apps/ppp-sveltekit/.prettierignore @@ -0,0 +1,9 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock +bun.lock +bun.lockb + +# Miscellaneous +/static/ diff --git a/apps/ppp-sveltekit/.prettierrc b/apps/ppp-sveltekit/.prettierrc new file mode 100644 index 00000000..8103a0b5 --- /dev/null +++ b/apps/ppp-sveltekit/.prettierrc @@ -0,0 +1,16 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ], + "tailwindStylesheet": "./src/app.css" +} diff --git a/apps/ppp-sveltekit/eslint.config.js b/apps/ppp-sveltekit/eslint.config.js new file mode 100644 index 00000000..2c49fa64 --- /dev/null +++ b/apps/ppp-sveltekit/eslint.config.js @@ -0,0 +1,41 @@ +import prettier from 'eslint-config-prettier'; +import { fileURLToPath } from 'node:url'; +import { includeIgnoreFile } from '@eslint/compat'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import { defineConfig } from 'eslint/config'; +import globals from 'globals'; +import ts from 'typescript-eslint'; +import svelteConfig from './svelte.config.js'; + +const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url)); + +export default defineConfig( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ...ts.configs.recommended, + ...svelte.configs.recommended, + prettier, + ...svelte.configs.prettier, + { + languageOptions: { + globals: { ...globals.browser, ...globals.node } + }, + rules: { + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + 'no-undef': 'off' + } + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + projectService: true, + extraFileExtensions: ['.svelte'], + parser: ts.parser, + svelteConfig + } + } + } +); diff --git a/apps/ppp-sveltekit/messages/en.json b/apps/ppp-sveltekit/messages/en.json new file mode 100644 index 00000000..42d4e472 --- /dev/null +++ b/apps/ppp-sveltekit/messages/en.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "hello_world": "Hello, {name} from en!" +} \ No newline at end of file diff --git a/apps/ppp-sveltekit/messages/ru.json b/apps/ppp-sveltekit/messages/ru.json new file mode 100644 index 00000000..142d40c9 --- /dev/null +++ b/apps/ppp-sveltekit/messages/ru.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "hello_world": "Hello, {name} from ru!", + "problemsPageTitle": "Проблемы", + "editorPageTitle": "Редактор", + "designPatterns": "Паттерны проектирования", + "tests": "Тесты", + "output": "Вывод", + "settings": "Настройки", + "vimMode": "Режим Vim", + "run": "Запустить", + "stop": "Остановить", + "forceStop": "Остановить принудительно", + "executionTimeout": "Таймаут выполнения (мс)", + "executionTimeoutDescription": "Используйте ноль для отключения" +} \ No newline at end of file diff --git a/apps/ppp-sveltekit/package.json b/apps/ppp-sveltekit/package.json new file mode 100644 index 00000000..b11b845e --- /dev/null +++ b/apps/ppp-sveltekit/package.json @@ -0,0 +1,73 @@ +{ + "name": "ppp-sveltekit", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "prepare": "svelte-kit sync || echo ''", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check . && eslint .", + "test:unit": "vitest", + "test": "npm run test:unit -- --run" + }, + "dependencies": { + "@xterm/addon-fit": "^0.10.0", + "@xterm/xterm": "^5.5.0", + "dotnet-runtime": "workspace:*", + "gleam-runtime": "workspace:*", + "go-runtime": "workspace:*", + "java-runtime": "workspace:*", + "javascript-runtime": "workspace:*", + "libs": "workspace:*", + "monaco-editor": "^0.54.0", + "monaco-editor-textmate": "^4.0.0", + "monaco-textmate": "^3.0.1", + "monaco-vim": "^0.4.2", + "onigasm": "^2.2.5", + "php-runtime": "workspace:*", + "python-runtime": "workspace:*", + "ruby-runtime": "workspace:*", + "rust-runtime": "workspace:*", + "typescript-runtime": "workspace:*" + }, + "devDependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/js": "^9.39.1", + "@iconify-json/lucide": "^1.2.73", + "@iconify-json/vscode-icons": "^1.2.33", + "@inlang/paraglide-js": "^2.4.0", + "@sveltejs/adapter-static": "^3.0.10", + "@sveltejs/kit": "^2.48.4", + "@sveltejs/vite-plugin-svelte": "^6.2.1", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.1.17", + "@types/color": "^4.2.0", + "@types/node": "^24.10.0", + "@vitest/browser-playwright": "^4.0.8", + "daisyui": "^5.5.0", + "eslint": "^9.39.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.13.0", + "globals": "^16.5.0", + "playwright": "^1.56.1", + "prettier": "^3.6.2", + "prettier-plugin-svelte": "^3.4.0", + "prettier-plugin-tailwindcss": "^0.7.1", + "svelte": "^5.43.6", + "svelte-check": "^4.3.4", + "tailwindcss": "^4.1.17", + "typescript": "^5.9.3", + "typescript-eslint": "^8.46.4", + "unplugin-icons": "^22.5.0", + "vite": "catalog:", + "vite-plugin-devtools-json": "^1.0.0", + "vite-plugin-static-copy": "catalog:", + "vitest": "catalog:", + "vitest-browser-svelte": "^2.0.1" + } +} diff --git a/apps/ppp-sveltekit/project.inlang/.gitignore b/apps/ppp-sveltekit/project.inlang/.gitignore new file mode 100644 index 00000000..5e465967 --- /dev/null +++ b/apps/ppp-sveltekit/project.inlang/.gitignore @@ -0,0 +1 @@ +cache \ No newline at end of file diff --git a/apps/ppp-sveltekit/project.inlang/project_id b/apps/ppp-sveltekit/project.inlang/project_id new file mode 100644 index 00000000..b1a3045d --- /dev/null +++ b/apps/ppp-sveltekit/project.inlang/project_id @@ -0,0 +1 @@ +W3FRZowYgYcngenlzc \ No newline at end of file diff --git a/apps/ppp-sveltekit/project.inlang/settings.json b/apps/ppp-sveltekit/project.inlang/settings.json new file mode 100644 index 00000000..6ce3e224 --- /dev/null +++ b/apps/ppp-sveltekit/project.inlang/settings.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://inlang.com/schema/project-settings", + "modules": [ + "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js" + ], + "plugin.inlang.messageFormat": { + "pathPattern": "./messages/{locale}.json" + }, + "baseLocale": "en", + "locales": ["en", "ru"] +} diff --git a/apps/ppp-sveltekit/src/app.css b/apps/ppp-sveltekit/src/app.css new file mode 100644 index 00000000..d6b892c7 --- /dev/null +++ b/apps/ppp-sveltekit/src/app.css @@ -0,0 +1,10 @@ +@import 'tailwindcss'; +@plugin '@tailwindcss/typography'; +@plugin "daisyui" { + themes: business --default; +} +@plugin "daisyui/theme" { + name: "business"; + default: true; + --color-base-100: oklch(28% 0 0); +} diff --git a/apps/ppp-sveltekit/src/app.d.ts b/apps/ppp-sveltekit/src/app.d.ts new file mode 100644 index 00000000..a900936a --- /dev/null +++ b/apps/ppp-sveltekit/src/app.d.ts @@ -0,0 +1,15 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +import 'unplugin-icons/types/svelte' + +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/apps/ppp-sveltekit/src/app.html b/apps/ppp-sveltekit/src/app.html new file mode 100644 index 00000000..50bd0b52 --- /dev/null +++ b/apps/ppp-sveltekit/src/app.html @@ -0,0 +1,11 @@ + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/apps/ppp-sveltekit/src/hooks.server.ts b/apps/ppp-sveltekit/src/hooks.server.ts new file mode 100644 index 00000000..ad77efcf --- /dev/null +++ b/apps/ppp-sveltekit/src/hooks.server.ts @@ -0,0 +1,13 @@ +import type { Handle } from '@sveltejs/kit'; +import { paraglideMiddleware } from '$lib/paraglide/server'; + +const handleParaglide: Handle = ({ event, resolve }) => + paraglideMiddleware(event.request, ({ request, locale }) => { + event.request = request; + + return resolve(event, { + transformPageChunk: ({ html }) => html.replace('%paraglide.lang%', locale) + }); + }); + +export const handle: Handle = handleParaglide; diff --git a/apps/ppp-sveltekit/src/hooks.ts b/apps/ppp-sveltekit/src/hooks.ts new file mode 100644 index 00000000..e75600b3 --- /dev/null +++ b/apps/ppp-sveltekit/src/hooks.ts @@ -0,0 +1,3 @@ +import { deLocalizeUrl } from '$lib/paraglide/runtime'; + +export const reroute = (request) => deLocalizeUrl(request.url).pathname; diff --git a/apps/ppp-sveltekit/src/lib/assets/enable-threads.js b/apps/ppp-sveltekit/src/lib/assets/enable-threads.js new file mode 100644 index 00000000..881bd26c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/assets/enable-threads.js @@ -0,0 +1,75 @@ +// NOTE: This file creates a service worker that cross-origin-isolates the page (read more here: https://web.dev/coop-coep/) which allows us to use wasm threads. +// Normally you would set the COOP and COEP headers on the server to do this, but Github Pages doesn't allow this, so this is a hack to do that. + +/* Edited version of: coi-serviceworker v0.1.6 - Guido Zuidhof, licensed under MIT */ +// From here: https://github.com/gzuidhof/coi-serviceworker +if(typeof window === 'undefined') { + self.addEventListener("install", () => self.skipWaiting()); + self.addEventListener("activate", e => e.waitUntil(self.clients.claim())); + + async function handleFetch(request) { + if(request.cache === "only-if-cached" && request.mode !== "same-origin") { + return; + } + + if(request.mode === "no-cors") { // We need to set `credentials` to "omit" for no-cors requests, per this comment: https://bugs.chromium.org/p/chromium/issues/detail?id=1309901#c7 + request = new Request(request.url, { + cache: request.cache, + credentials: "omit", + headers: request.headers, + integrity: request.integrity, + destination: request.destination, + keepalive: request.keepalive, + method: request.method, + mode: request.mode, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + signal: request.signal, + }); + } + + let r = await fetch(request).catch(e => console.error(e)); + + if(r.status === 0) { + return r; + } + + const headers = new Headers(r.headers); + headers.set("Cross-Origin-Embedder-Policy", "credentialless"); // or: require-corp + headers.set("Cross-Origin-Opener-Policy", "same-origin"); + + return new Response(r.body, { status: r.status, statusText: r.statusText, headers }); + } + + self.addEventListener("fetch", function(e) { + e.respondWith(handleFetch(e.request)); // respondWith must be executed synchonously (but can be passed a Promise) + }); + +} else { + (async function() { + if(window.crossOriginIsolated !== false) return; + + let registration = await navigator.serviceWorker.register(window.document.currentScript.src).catch(e => console.error("COOP/COEP Service Worker failed to register:", e)); + if(registration) { + console.log("COOP/COEP Service Worker registered", registration.scope); + + registration.addEventListener("updatefound", () => { + console.log("Reloading page to make use of updated COOP/COEP Service Worker."); + window.location.reload(); + }); + + // If the registration is active, but it's not controlling the page + if(registration.active && !navigator.serviceWorker.controller) { + console.log("Reloading page to make use of COOP/COEP Service Worker."); + window.location.reload(); + } + } + })(); +} + +// Code to deregister: +// let registrations = await navigator.serviceWorker.getRegistrations(); +// for(let registration of registrations) { +// await registration.unregister(); +// } \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/lib/assets/favicon.svg b/apps/ppp-sveltekit/src/lib/assets/favicon.svg new file mode 100644 index 00000000..cc5dc66a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/assets/favicon.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/lib/components/dropdown.svelte b/apps/ppp-sveltekit/src/lib/components/dropdown.svelte new file mode 100644 index 00000000..c445719e --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/dropdown.svelte @@ -0,0 +1,89 @@ + + + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/context.svelte.ts b/apps/ppp-sveltekit/src/lib/components/editor/context.svelte.ts new file mode 100644 index 00000000..27c7a00e --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/context.svelte.ts @@ -0,0 +1,23 @@ +import { getContext, setContext } from "svelte"; +import type { editor } from "monaco-editor"; +import type { Terminal } from "@xterm/xterm"; +import type { FitAddon } from '@xterm/addon-fit'; + +export class EditorContext { + editor = $state(); + constructor( + public model: editor.ITextModel, + public terminal: Terminal, + public terminalFitAddon: FitAddon + ) {} +} + +const EDITOR_CONTEXT = Symbol("editor-context"); + +export function setEditorContext(ctx: EditorContext) { + setContext(EDITOR_CONTEXT, ctx); +} + +export function getEditorContext() { + return getContext(EDITOR_CONTEXT); +} diff --git a/apps/ppp-sveltekit/src/lib/components/editor/controls/checkbox.svelte b/apps/ppp-sveltekit/src/lib/components/editor/controls/checkbox.svelte new file mode 100644 index 00000000..c9b260ab --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/controls/checkbox.svelte @@ -0,0 +1,13 @@ + + + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/controls/index.ts b/apps/ppp-sveltekit/src/lib/components/editor/controls/index.ts new file mode 100644 index 00000000..01db85c0 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/controls/index.ts @@ -0,0 +1,2 @@ +export { default as CheckBox } from "./checkbox.svelte"; +export { default as Number } from "./number.svelte"; diff --git a/apps/ppp-sveltekit/src/lib/components/editor/controls/number.svelte b/apps/ppp-sveltekit/src/lib/components/editor/controls/number.svelte new file mode 100644 index 00000000..d13d452d --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/controls/number.svelte @@ -0,0 +1,17 @@ + + +
+ {title} + + {#if alt} +

{alt}

+ {/if} +
diff --git a/apps/ppp-sveltekit/src/lib/components/editor/editor.svelte b/apps/ppp-sveltekit/src/lib/components/editor/editor.svelte new file mode 100644 index 00000000..0bb198e7 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/editor.svelte @@ -0,0 +1,51 @@ + + +
diff --git a/apps/ppp-sveltekit/src/lib/components/editor/index.ts b/apps/ppp-sveltekit/src/lib/components/editor/index.ts new file mode 100644 index 00000000..950e3b22 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/index.ts @@ -0,0 +1,6 @@ +export * from './process'; +export * from "./terminal"; +export * from "./context.svelte"; +export { default as Editor } from "./editor.svelte"; +export { default as VimStatus } from "./vim-status.svelte"; +export { default as RunButton } from "./run-button.svelte"; diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/context.svelte.ts b/apps/ppp-sveltekit/src/lib/components/editor/panel/context.svelte.ts new file mode 100644 index 00000000..7283945b --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/context.svelte.ts @@ -0,0 +1,21 @@ +import { getContext, setContext } from "svelte"; + +import { EditorPanelTab } from "$lib/editor-panel-tab"; + +export class EditorPanelContext { + selectedTab = $state(); + + constructor(selectedTab: EditorPanelTab) { + this.selectedTab = selectedTab; + } +} + +const EDITOR_PANEL_CONTEXT = Symbol("editor-panel-context"); + +export function setEditorPanelContext(ctx: EditorPanelContext) { + setContext(EDITOR_PANEL_CONTEXT, ctx); +} + +export function getEditorPanelContext() { + return getContext(EDITOR_PANEL_CONTEXT); +} diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/index.ts b/apps/ppp-sveltekit/src/lib/components/editor/panel/index.ts new file mode 100644 index 00000000..22cc38da --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/index.ts @@ -0,0 +1,7 @@ +export * from "./model"; +export { default as Panel } from "./panel.svelte"; +export { default as Tab } from "./tab.svelte"; +export { default as Tabs } from "./tabs.svelte"; +export { default as TerminalTab } from "./terminal-tab.svelte"; +export { default as TabContent } from "./tab-content.svelte"; +export { default as PanelToggle } from "./panel-toggle.svelte"; diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/model.ts b/apps/ppp-sveltekit/src/lib/components/editor/panel/model.ts new file mode 100644 index 00000000..29b95688 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/model.ts @@ -0,0 +1,6 @@ +export const PANEL_BORDER_HEIGHT = 1; +export const PANEL_HEADER_VERTICAL_PADDING = 4 * 2; +export const MIN_PANEL_HEIGHT = + 36 /* ??? */ + + PANEL_HEADER_VERTICAL_PADDING + + PANEL_BORDER_HEIGHT; diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/panel-toggle.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/panel-toggle.svelte new file mode 100644 index 00000000..287bd604 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/panel-toggle.svelte @@ -0,0 +1,68 @@ + + + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/panel.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/panel.svelte new file mode 100644 index 00000000..8012ca51 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/panel.svelte @@ -0,0 +1,36 @@ + + + + {@render children()} + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/tab-content.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/tab-content.svelte new file mode 100644 index 00000000..6652381e --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/tab-content.svelte @@ -0,0 +1,20 @@ + + +{#if ctx.selectedTab === tab} + {@render children()} +{/if} diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/tab.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/tab.svelte new file mode 100644 index 00000000..b01c596b --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/tab.svelte @@ -0,0 +1,43 @@ + + + + + { + ctx.selectedTab = tab + }} +> + {EDITOR_PANEL_TAB_TO_LABEL[tab]()} + {#if append} + {@render append()} + {/if} + + + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/tabs.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/tabs.svelte new file mode 100644 index 00000000..dbd2f457 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/tabs.svelte @@ -0,0 +1,23 @@ + + +
+ {@render children()} +
+ + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/terminal-tab.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/terminal-tab.svelte new file mode 100644 index 00000000..ec3ef054 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/terminal-tab.svelte @@ -0,0 +1,51 @@ + + +
diff --git a/apps/ppp-sveltekit/src/lib/components/editor/panel/tests.svelte b/apps/ppp-sveltekit/src/lib/components/editor/panel/tests.svelte new file mode 100644 index 00000000..4f2eb434 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/panel/tests.svelte @@ -0,0 +1,32 @@ + + +
+ {#each testCases as testCase, i} +
+
+ {#if lastTestId === i} + + {:else if i < lastTestId} + + {:else} + + {/if} + Case {i + 1} +
+
{JSON.stringify(testCase.input, null, 2)}
+
+ {/each} +
diff --git a/apps/ppp-sveltekit/src/lib/components/editor/process.ts b/apps/ppp-sveltekit/src/lib/components/editor/process.ts new file mode 100644 index 00000000..1395bec4 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/process.ts @@ -0,0 +1 @@ +export type ProcessStatus = 'stopped' | 'stopping' | 'running' \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/lib/components/editor/run-button.svelte b/apps/ppp-sveltekit/src/lib/components/editor/run-button.svelte new file mode 100644 index 00000000..2b245dce --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/run-button.svelte @@ -0,0 +1,26 @@ + + + diff --git a/apps/ppp-sveltekit/src/lib/components/editor/terminal.ts b/apps/ppp-sveltekit/src/lib/components/editor/terminal.ts new file mode 100644 index 00000000..8264e915 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/terminal.ts @@ -0,0 +1,93 @@ +import { onDestroy } from "svelte"; +import { FitAddon } from "@xterm/addon-fit"; +import { Terminal, type ITheme } from "@xterm/xterm"; +import type { Streams, Writer } from "libs/io"; +import { BACKSPACE, makeErrorWriter } from "libs/logger"; + +export function makeTerminalTheme(): ITheme { + return { + background: "oklch(22.648% 0 0)", + }; +} + +export interface TerminalConfig { + theme?: ITheme; +} + +export function createTerminal({ + theme = makeTerminalTheme(), +}: TerminalConfig = {}) { + const terminal = new Terminal({ + theme, + fontFamily: "monospace", + convertEol: true, + rows: 1, + }); + const fitAddon = new FitAddon(); + terminal.loadAddon(fitAddon); + return { terminal, fitAddon }; +} + +export function createStreams(terminal: Terminal): Streams { + const out: Writer = { + write(data) { + terminal.write(data); + }, + }; + const handlers = new Set<(data: Uint8Array) => void>(); + function handleData(data: Uint8Array) { + for (const handler of handlers) { + handler(data); + } + } + const encoder = new TextEncoder(); + let buffer = new Uint8Array(1024); + let offset = 0; + const emptyArray = new Uint8Array(); + const disposable = terminal.onData((data) => { + if (data === "\r") { + terminal.write("\r\n"); + handleData(emptyArray); + return; + } + // Backspace + if (data === "\x7f") { + terminal.write("\b \b"); + if (offset > 0) { + offset--; + } + handleData(BACKSPACE); + return; + } + terminal.write(data); + const input = encoder.encode(data); + if (offset + input.length > buffer.length) { + const next = new Uint8Array((offset + input.length) * 2); + next.set(buffer); + buffer = next; + } + buffer.set(input, offset); + offset += input.length; + handleData(input); + }); + onDestroy(() => disposable.dispose()); + return { + out, + err: makeErrorWriter(out), + in: { + read() { + const chunk = buffer.subarray(0, offset); + offset = 0; + return chunk; + }, + onData(handler) { + handlers.add(handler); + return { + [Symbol.dispose]() { + handlers.delete(handler); + }, + }; + }, + }, + }; +} \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/lib/components/editor/vim-status.svelte b/apps/ppp-sveltekit/src/lib/components/editor/vim-status.svelte new file mode 100644 index 00000000..665942af --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/editor/vim-status.svelte @@ -0,0 +1,28 @@ + + +
diff --git a/apps/ppp-sveltekit/src/lib/components/hint.astro b/apps/ppp-sveltekit/src/lib/components/hint.astro new file mode 100644 index 00000000..10a0514d --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/hint.astro @@ -0,0 +1,19 @@ +--- +import { Icon } from "astro-icon/components"; + +export interface Props { + title: string; +} + +const { title } = Astro.props; +--- + +
+
+ +
+ {title} +
+
+
+
diff --git a/apps/ppp-sveltekit/src/lib/components/logo.svelte b/apps/ppp-sveltekit/src/lib/components/logo.svelte new file mode 100644 index 00000000..194c52cd --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/logo.svelte @@ -0,0 +1,10 @@ + + + +
+ 3P +
+
diff --git a/apps/ppp-sveltekit/src/lib/components/resizable-panel.svelte b/apps/ppp-sveltekit/src/lib/components/resizable-panel.svelte new file mode 100644 index 00000000..c14aa93c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/resizable-panel.svelte @@ -0,0 +1,79 @@ + + + + +
+ { + start = { x: size, y: e[coord] }; + }} + onMove={(e) => { + size = normalizeSize(op(start.y, e[coord], start.x), size); + }} + /> + {@render children()} +
diff --git a/apps/ppp-sveltekit/src/lib/components/resizer/index.ts b/apps/ppp-sveltekit/src/lib/components/resizer/index.ts new file mode 100644 index 00000000..f12e0d38 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/resizer/index.ts @@ -0,0 +1,2 @@ +export * from './model' +export { default as Resizer } from './resizer.svelte' diff --git a/apps/ppp-sveltekit/src/lib/components/resizer/model.ts b/apps/ppp-sveltekit/src/lib/components/resizer/model.ts new file mode 100644 index 00000000..1d2710d1 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/resizer/model.ts @@ -0,0 +1,9 @@ +export enum Orientation { + Vertical = "vertical", + Horizontal = "horizontal", +} + +export enum Alignment { + Start = "start", + End = "end", +} diff --git a/apps/ppp-sveltekit/src/lib/components/resizer/resizer.svelte b/apps/ppp-sveltekit/src/lib/components/resizer/resizer.svelte new file mode 100644 index 00000000..0ca1155f --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/resizer/resizer.svelte @@ -0,0 +1,61 @@ + + +
diff --git a/apps/ppp-sveltekit/src/lib/components/select.svelte b/apps/ppp-sveltekit/src/lib/components/select.svelte new file mode 100644 index 00000000..99783e3a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/components/select.svelte @@ -0,0 +1,16 @@ + + + diff --git a/apps/ppp-sveltekit/src/lib/editor-panel-tab.ts b/apps/ppp-sveltekit/src/lib/editor-panel-tab.ts new file mode 100644 index 00000000..88286ab0 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/editor-panel-tab.ts @@ -0,0 +1,14 @@ +import { m } from '$lib/paraglide/messages'; + +export enum EditorPanelTab { + Tests = "tests", + Output = "output", + Settings = "settings", +} + +export const EDITOR_PANEL_TAB_TO_LABEL: Record string> = { + [EditorPanelTab.Tests]: m.tests, + [EditorPanelTab.Output]: m.output, + [EditorPanelTab.Settings]: m.settings, +}; + diff --git a/apps/ppp-sveltekit/src/lib/editor-provider.svelte b/apps/ppp-sveltekit/src/lib/editor-provider.svelte new file mode 100644 index 00000000..a4cf08fc --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/editor-provider.svelte @@ -0,0 +1,32 @@ + + +{#await promise then} + {@render children()} +{/await} + diff --git a/apps/ppp-sveltekit/src/lib/gleam/LICENSE.txt b/apps/ppp-sveltekit/src/lib/gleam/LICENSE.txt new file mode 100644 index 00000000..22335952 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/gleam/LICENSE.txt @@ -0,0 +1,211 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2016 - present Louis Pilfold + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +## Runtime Library Exception to the Apache 2.0 License: ## + + + As an exception, if you use this Software to compile your source code and + portions of this Software are embedded into the binary product as a result, + you may redistribute such product without providing attribution as would + otherwise be required by Sections 4(a), 4(b) and 4(d) of the License. diff --git a/apps/ppp-sveltekit/src/lib/gleam/README.md b/apps/ppp-sveltekit/src/lib/gleam/README.md new file mode 100644 index 00000000..77677c07 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/gleam/README.md @@ -0,0 +1,3 @@ +# Credits + +This files are extracted from the [vscode-gleam](https://github.com/gleam-lang/vscode-gleam) with Apache-2.0 license. diff --git a/apps/ppp-sveltekit/src/lib/gleam/gleam.tmLanguage.json b/apps/ppp-sveltekit/src/lib/gleam/gleam.tmLanguage.json new file mode 100644 index 00000000..c5ab3755 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/gleam/gleam.tmLanguage.json @@ -0,0 +1,176 @@ +{ + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Gleam", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#keywords" + }, + { + "include": "#strings" + }, + { + "include": "#constant" + }, + { + "include": "#entity" + }, + { + "include": "#discards" + } + ], + "repository": { + "keywords": { + "patterns": [ + { + "name": "keyword.control.gleam", + "match": "\\b(as|use|case|if|fn|import|let|assert|pub|type|opaque|const|todo|panic)\\b" + }, + { + "name": "keyword.operator.arrow.gleam", + "match": "(<\\-|\\->)" + }, + { + "name": "keyword.operator.pipe.gleam", + "match": "\\|>" + }, + { + "name": "keyword.operator.splat.gleam", + "match": "\\.\\." + }, + { + "name": "keyword.operator.comparison.float.gleam", + "match": "(<=\\.|>=\\.|==\\.|!=\\.|<\\.|>\\.)" + }, + { + "name": "keyword.operator.comparison.int.gleam", + "match": "(<=|>=|==|!=|<|>)" + }, + { + "name": "keyword.operator.logical.gleam", + "match": "(&&|\\|\\|)" + }, + { + "name": "keyword.operator.string.gleam", + "match": "<>" + }, + { + "name": "keyword.operator.other.gleam", + "match": "\\|" + }, + { + "name": "keyword.operator.arithmetic.float.gleam", + "match": "(\\+\\.|\\-\\.|/\\.|\\*\\.|%\\.)" + }, + { + "name": "keyword.operator.arithmetic.int.gleam", + "match": "(\\+|\\-|/|\\*|%)" + }, + { + "name": "keyword.operator.assignment.gleam", + "match": "=" + } + ] + }, + "strings": { + "name": "string.quoted.double.gleam", + "begin": "\"", + "end": "\"", + "patterns": [ + { + "name": "constant.character.escape.gleam", + "match": "\\\\." + } + ] + }, + "comments": { + "patterns": [ + { + "name": "comment.line.gleam", + "match": "\/\/.*" + } + ] + }, + "constant": { + "patterns": [ + { + "include": "#binary_number" + }, + { + "include": "#octal_number" + }, + { + "include": "#hexadecimal_number" + }, + { + "include": "#decimal_number" + }, + { + "include": "#boolean" + }, + { + "name": "entity.name.type.gleam", + "match": "[[:upper:]][[:word:]]*" + } + ] + }, + "binary_number": { + "name": "constant.numeric.binary.gleam", + "match": "\\b0[bB](_?[01])+\\b", + "patterns": [] + }, + "octal_number": { + "name": "constant.numeric.octal.gleam", + "match": "\\b0[oO](_?[0-7])+\\b", + "patterns": [] + }, + "decimal_number": { + "name": "constant.numeric.decimal.gleam", + "match": "\\b[[:digit:]]+(_?[[:digit:]])*(\\.[[:digit:]]*)?(e-?[[:digit:]]*)?\\b", + "patterns": [] + }, + "hexadecimal_number": { + "name": "constant.numeric.hexadecimal.gleam", + "match": "\\b0[xX](_?[[:xdigit:]])+\\b", + "patterns": [] + }, + "boolean": { + "name": "constant.language.boolean.gleam", + "match": "\\b(True|False)\\b", + "patterns": [] + }, + "entity": { + "patterns": [ + { + "begin": "\\b([[:lower:]][[:word:]]*)([[:space:]]*)?\\(", + "end": "\\)", + "patterns": [ + { + "include": "$self" + } + ], + "captures": { + "1": { + "name": "entity.name.function.gleam" + } + } + }, + { + "name": "variable.parameter.gleam", + "match": "\\b([[:lower:]][[:word:]]*):\\s" + }, + { + "name": "entity.name.namespace.gleam", + "match": "\\b([[:lower:]][[:word:]]*):" + } + ] + }, + "discards": { + "name": "comment.unused.gleam", + "match": "\\b_(?:[[:word:]]+)?\\b" + } + }, + "scopeName": "source.gleam" +} \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/lib/gleam/language-configuration.ts b/apps/ppp-sveltekit/src/lib/gleam/language-configuration.ts new file mode 100644 index 00000000..b4ca0c1a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/gleam/language-configuration.ts @@ -0,0 +1,26 @@ +import type { languages } from "monaco-editor"; + +export default { + comments: { + lineComment: "//", + }, + brackets: [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ], + autoClosingPairs: [ + { open:"{", close:"}" }, + { open:"[", close:"]" }, + { open:"(", close:")" }, + { open:'"', close:'"' }, + { open:"'", close:"'" }, + ], + surroundingPairs: [ + { open:"{", close: "}"}, + { open:"[", close: "]"}, + { open:"(", close: ")"}, + { open:'"', close: '"'}, + { open:"'", close: "'"}, + ], +} satisfies languages.LanguageConfiguration; diff --git a/apps/ppp-sveltekit/src/lib/language-icons.svelte b/apps/ppp-sveltekit/src/lib/language-icons.svelte new file mode 100644 index 00000000..ffce6967 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/language-icons.svelte @@ -0,0 +1,30 @@ + diff --git a/apps/ppp-sveltekit/src/lib/language.ts b/apps/ppp-sveltekit/src/lib/language.ts new file mode 100644 index 00000000..0142b3f9 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/language.ts @@ -0,0 +1,27 @@ +export enum Language { + JavaScript = "javascript", + TypeScript = "typescript", + Python = "python", + PHP = "php", + Go = "go", + Rust = "rust", + Gleam = "gleam", + CSharp = "csharp", + Java = "java", + Ruby = "ruby", +} + +export const LANGUAGES = Object.values(Language); + +export const LANGUAGE_TITLE: Record = { + [Language.PHP]: "PHP", + [Language.TypeScript]: "TypeScript", + [Language.Python]: "Python", + [Language.JavaScript]: "JavaScript", + [Language.Go]: "Go", + [Language.Rust]: "Rust", + [Language.Gleam]: "Gleam", + [Language.CSharp]: "CSharp", + [Language.Java]: "Java", + [Language.Ruby]: "Ruby", +}; diff --git a/apps/ppp-sveltekit/src/lib/monaco.ts b/apps/ppp-sveltekit/src/lib/monaco.ts new file mode 100644 index 00000000..bd5fa1e7 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/monaco.ts @@ -0,0 +1,52 @@ +import { loadWASM } from "onigasm"; +import * as monaco from "monaco-editor"; +import { Registry } from "monaco-textmate"; +import { wireTmGrammars } from "monaco-editor-textmate"; + +import onigasmWasmUrl from "onigasm/lib/onigasm.wasm?url"; + +import { Language } from "$lib/language"; +import gleamConfiguration from "$lib/gleam/language-configuration"; +import gleamGrammarUrl from "$lib/gleam/gleam.tmLanguage.json?url"; + +export const MONACO_LANGUAGE_ID: Record = { + [Language.PHP]: "php", + [Language.TypeScript]: "typescript", + [Language.JavaScript]: "javascript", + [Language.Python]: "python", + [Language.Go]: "go", + [Language.Rust]: "rust", + [Language.Gleam]: Language.Gleam, + [Language.CSharp]: "csharp", + [Language.Java]: "java", + [Language.Ruby]: "ruby", +}; + +const LANGUAGE_ID_SCOPE_NAME = { + [Language.Gleam]: "source.gleam", +}; + +monaco.languages.register({ id: Language.Gleam }); +monaco.languages.setLanguageConfiguration(Language.Gleam, gleamConfiguration); + +export async function loadTmGrammars() { + await loadWASM(onigasmWasmUrl); + + const registry = new Registry({ + getGrammarDefinition: async (scopeName) => { + switch (scopeName) { + case LANGUAGE_ID_SCOPE_NAME[Language.Gleam]: + return { + format: "json", + content: await (await fetch(gleamGrammarUrl)).json(), + }; + default: + throw new Error(`Unknown scope name: ${scopeName}`); + } + }, + }); + + const grammars = new Map(Object.entries(LANGUAGE_ID_SCOPE_NAME)); + + return wireTmGrammars(monaco, registry, grammars); +} diff --git a/apps/ppp-sveltekit/src/lib/path.ts b/apps/ppp-sveltekit/src/lib/path.ts new file mode 100644 index 00000000..1974fef5 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/path.ts @@ -0,0 +1,3 @@ +export function join(...path: string[]) { + +} \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/lib/runtime/descriptions.ts b/apps/ppp-sveltekit/src/lib/runtime/descriptions.ts new file mode 100644 index 00000000..3536c2b1 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/descriptions.ts @@ -0,0 +1,27 @@ +import type { Component } from "svelte"; + +import { Language } from "$lib/language"; + +import JsDescription from "./js/description.svelte"; +import TsDescription from "./ts/description.svelte"; +import PhpDescription from "./php/description.svelte"; +import PyDescription from "./python/description.svelte"; +import GoDescription from "./go/description.svelte"; +import RustDescription from "./rust/description.svelte"; +import GleamDescription from "./gleam/description.svelte"; +import DotnetDescription from "./dotnet/description.svelte"; +import JavaDescription from "./java/description.svelte"; +import RubyDescription from "./ruby/description.svelte"; + +export const DESCRIPTIONS: Record = { + [Language.JavaScript]: JsDescription, + [Language.TypeScript]: TsDescription, + [Language.PHP]: PhpDescription, + [Language.Python]: PyDescription, + [Language.Go]: GoDescription, + [Language.Rust]: RustDescription, + [Language.Gleam]: GleamDescription, + [Language.CSharp]: DotnetDescription, + [Language.Java]: JavaDescription, + [Language.Ruby]: RubyDescription, +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/dotnet/compiler-factory.ts new file mode 100644 index 00000000..63f83839 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/compiler-factory.ts @@ -0,0 +1,242 @@ +import { + type CompilerModuleExports, + type CompilerModuleImports, + type DotnetModule, + DotnetProgram, + DotnetCompilerFactory, + DotnetRuntimeFactory, +} from "dotnet-runtime"; +import type { CompilerFactory, Program } from "libs/compiler"; +import { inContext } from "libs/context"; +import { createLogger, redirect } from "libs/logger"; +import { patch } from "libs/patcher"; + +import { base } from '$app/paths'; + +const dotnetUrl = new URL( + `${base}/assets/dotnet/compiler/dotnet.js`, + globalThis.location.origin +).toString(); + +const precompiledLibsIndexUrl = new URL( + `${base}/assets/dotnet/lib`, + globalThis.location.origin +).toString(); + +export const LIBS = [ + "Humanizer.dll", + "Microsoft.Bcl.AsyncInterfaces.dll", + "Microsoft.CSharp.dll", + // "Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + // "Microsoft.CodeAnalysis.CSharp.dll", + // "Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll", + // "Microsoft.CodeAnalysis.VisualBasic.dll", + // "Microsoft.CodeAnalysis.Workspaces.dll", + // "Microsoft.CodeAnalysis.dll", + // "Microsoft.JSInterop.WebAssembly.dll", + // "Microsoft.JSInterop.dll", + // "Microsoft.VisualBasic.Core.dll", + // "Microsoft.VisualBasic.dll", + // "Microsoft.Win32.Primitives.dll", + // "Microsoft.Win32.Registry.dll", + "System.AppContext.dll", + "System.Buffers.dll", + "System.Collections.Concurrent.dll", + "System.Collections.Immutable.dll", + "System.Collections.NonGeneric.dll", + "System.Collections.Specialized.dll", + "System.Collections.dll", + // "System.ComponentModel.Annotations.dll", + // "System.ComponentModel.DataAnnotations.dll", + // "System.ComponentModel.EventBasedAsync.dll", + // "System.ComponentModel.Primitives.dll", + // "System.ComponentModel.TypeConverter.dll", + // "System.ComponentModel.dll", + // "System.Composition.AttributedModel.dll", + // "System.Composition.Convention.dll", + // "System.Composition.Hosting.dll", + // "System.Composition.Runtime.dll", + // "System.Composition.TypedParts.dll", + // "System.Configuration.dll", + "System.Console.dll", + "System.Core.dll", + // "System.Data.Common.dll", + // "System.Data.DataSetExtensions.dll", + // "System.Data.dll", + // "System.Diagnostics.Contracts.dll", + "System.Diagnostics.Debug.dll", + // "System.Diagnostics.DiagnosticSource.dll", + // "System.Diagnostics.FileVersionInfo.dll", + // "System.Diagnostics.Process.dll", + // "System.Diagnostics.StackTrace.dll", + // "System.Diagnostics.TextWriterTraceListener.dll", + // "System.Diagnostics.Tools.dll", + // "System.Diagnostics.TraceSource.dll", + // "System.Diagnostics.Tracing.dll", + // "System.Drawing.Primitives.dll", + // "System.Drawing.dll", + // "System.Dynamic.Runtime.dll", + // "System.Formats.Asn1.dll", + // "System.Formats.Tar.dll", + "System.Globalization.Calendars.dll", + "System.Globalization.Extensions.dll", + "System.Globalization.dll", + // "System.IO.Compression.Brotli.dll", + // "System.IO.Compression.FileSystem.dll", + // "System.IO.Compression.ZipFile.dll", + // "System.IO.Compression.dll", + // "System.IO.FileSystem.AccessControl.dll", + // "System.IO.FileSystem.DriveInfo.dll", + // "System.IO.FileSystem.Primitives.dll", + // "System.IO.FileSystem.Watcher.dll", + "System.IO.FileSystem.dll", + // "System.IO.IsolatedStorage.dll", + // "System.IO.MemoryMappedFiles.dll", + // "System.IO.Pipelines.dll", + // "System.IO.Pipes.AccessControl.dll", + // "System.IO.Pipes.dll", + "System.IO.UnmanagedMemoryStream.dll", + "System.IO.dll", + "System.Linq.Expressions.dll", + "System.Linq.Parallel.dll", + "System.Linq.Queryable.dll", + "System.Linq.dll", + "System.Memory.dll", + "System.Net.Http.Json.dll", + "System.Net.Http.dll", + "System.Net.HttpListener.dll", + // "System.Net.Mail.dll", + "System.Net.NameResolution.dll", + "System.Net.NetworkInformation.dll", + // "System.Net.Ping.dll", + "System.Net.Primitives.dll", + // "System.Net.Quic.dll", + "System.Net.Requests.dll", + // "System.Net.Security.dll", + // "System.Net.ServicePoint.dll", + "System.Net.Sockets.dll", + "System.Net.WebClient.dll", + "System.Net.WebHeaderCollection.dll", + // "System.Net.WebProxy.dll", + // "System.Net.WebSockets.Client.dll", + // "System.Net.WebSockets.dll", + "System.Net.dll", + "System.Numerics.Vectors.dll", + "System.Numerics.dll", + "System.ObjectModel.dll", + "System.Private.CoreLib.dll", + // "System.Private.DataContractSerialization.dll", + "System.Private.Uri.dll", + // "System.Private.Xml.Linq.dll", + // "System.Private.Xml.dll", + // "System.Reflection.DispatchProxy.dll", + // "System.Reflection.Emit.ILGeneration.dll", + // "System.Reflection.Emit.Lightweight.dll", + // "System.Reflection.Emit.dll", + // "System.Reflection.Extensions.dll", + // "System.Reflection.Metadata.dll", + // "System.Reflection.Primitives.dll", + // "System.Reflection.TypeExtensions.dll", + "System.Reflection.dll", + "System.Resources.Reader.dll", + "System.Resources.ResourceManager.dll", + "System.Resources.Writer.dll", + // "System.Runtime.CompilerServices.Unsafe.dll", + // "System.Runtime.CompilerServices.VisualC.dll", + "System.Runtime.Extensions.dll", + "System.Runtime.Handles.dll", + // "System.Runtime.InteropServices.JavaScript.dll", + "System.Runtime.InteropServices.RuntimeInformation.dll", + "System.Runtime.InteropServices.dll", + // "System.Runtime.Intrinsics.dll", + // "System.Runtime.Loader.dll", + // "System.Runtime.Numerics.dll", + // "System.Runtime.Serialization.Formatters.dll", + "System.Runtime.Serialization.Json.dll", + // "System.Runtime.Serialization.Primitives.dll", + // "System.Runtime.Serialization.Xml.dll", + // "System.Runtime.Serialization.dll", + "System.Runtime.dll", + // "System.Security.AccessControl.dll", + // "System.Security.Claims.dll", + // "System.Security.Cryptography.Algorithms.dll", + // "System.Security.Cryptography.Cng.dll", + // "System.Security.Cryptography.Csp.dll", + // "System.Security.Cryptography.Encoding.dll", + // "System.Security.Cryptography.OpenSsl.dll", + // "System.Security.Cryptography.Primitives.dll", + // "System.Security.Cryptography.X509Certificates.dll", + // "System.Security.Cryptography.dll", + // "System.Security.Principal.Windows.dll", + "System.Security.Principal.dll", + "System.Security.SecureString.dll", + "System.Security.dll", + // "System.ServiceModel.Web.dll", + // "System.ServiceProcess.dll", + // "System.Text.Encoding.CodePages.dll", + "System.Text.Encoding.Extensions.dll", + "System.Text.Encoding.dll", + "System.Text.Encodings.Web.dll", + "System.Text.Json.dll", + "System.Text.RegularExpressions.dll", + // "System.Threading.Channels.dll", + // "System.Threading.Overlapped.dll", + // "System.Threading.Tasks.Dataflow.dll", + "System.Threading.Tasks.Extensions.dll", + "System.Threading.Tasks.Parallel.dll", + "System.Threading.Tasks.dll", + "System.Threading.Thread.dll", + "System.Threading.ThreadPool.dll", + "System.Threading.Timer.dll", + "System.Threading.dll", + // "System.Transactions.Local.dll", + "System.Transactions.dll", + "System.ValueTuple.dll", + "System.Web.HttpUtility.dll", + // "System.Web.dll", + // "System.Windows.dll", + // "System.Xml.Linq.dll", + // "System.Xml.ReaderWriter.dll", + // "System.Xml.Serialization.dll", + // "System.Xml.XDocument.dll", + // "System.Xml.XPath.XDocument.dll", + // "System.Xml.XPath.dll", + // "System.Xml.XmlDocument.dll", + // "System.Xml.XmlSerializer.dll", + // "System.Xml.dll", + "System.dll", + "WebAssembly.dll", + // "WindowsBase.dll", + // "compiler.dll", + "mscorlib.dll", + "netstandard.dll", +]; + +export const makeDotnetCompiler: CompilerFactory = async (ctx, streams) => { + const log = createLogger(streams.out); + const patchedConsole = redirect(globalThis.console, log); + + const { dotnet } = await inContext(ctx, import(/* @vite-ignore */ dotnetUrl)); + using _ = patch(globalThis, "console", patchedConsole); + const compilerModule: DotnetModule< + CompilerModuleImports, + CompilerModuleExports + > = await inContext(ctx, dotnet.create()); + const compiler = await inContext( + ctx, + new DotnetCompilerFactory(log, compilerModule).create( + precompiledLibsIndexUrl, + LIBS + ) + ); + const runtimeFactory = new DotnetRuntimeFactory(compiler); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const runtime = runtimeFactory.create(ctx, files[0].content); + return new DotnetProgram(runtime); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/dotnet/description.svelte new file mode 100644 index 00000000..bf0f9c61 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/description.svelte @@ -0,0 +1,9 @@ + + +

+ Class Program with a public static method Main is required. +

+ + diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/info.svelte b/apps/ppp-sveltekit/src/lib/runtime/dotnet/info.svelte new file mode 100644 index 00000000..34d2a0db --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/info.svelte @@ -0,0 +1,24 @@ + + +

+ .NET {version} +

+ +

+ Your code is compiled by the Roslyn compiler (compiled to WebAssembly with a + several .NET assemblies) and is executed in a web worker environment. +

+ +

Available libraries:

+ +
+ {#each LIBS as lib} +

+ {lib} +

+ {/each} +
diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-compiler-factory.ts new file mode 100644 index 00000000..2cc7c5a2 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-compiler-factory.ts @@ -0,0 +1,268 @@ +import { inContext, type Context } from "libs/context"; +import { createLogger, redirect, type Logger } from "libs/logger"; +import type { Streams } from "libs/io"; +import { patch } from "libs/patcher"; +import type { TestCompiler } from "libs/testing"; +import { + DotnetCompilerFactory, + DotnetRuntimeFactory, + type DotnetModule, + type CompilerModuleImports, + type CompilerModuleExports, + DotnetTestProgram, +} from "dotnet-runtime"; + +import { base } from '$app/paths'; + +const dotnetUrl = new URL( + `${base}/assets/dotnet/compiler/dotnet.js`, + globalThis.location.origin +).toString(); + +const precompiledLibsIndexUrl = new URL( + `${base}/assets/dotnet/lib`, + globalThis.location.origin +).toString(); + +export const LIBS = [ + "Humanizer.dll", + "Microsoft.Bcl.AsyncInterfaces.dll", + "Microsoft.CSharp.dll", + // "Microsoft.CodeAnalysis.CSharp.Workspaces.dll", + // "Microsoft.CodeAnalysis.CSharp.dll", + // "Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll", + // "Microsoft.CodeAnalysis.VisualBasic.dll", + // "Microsoft.CodeAnalysis.Workspaces.dll", + // "Microsoft.CodeAnalysis.dll", + // "Microsoft.JSInterop.WebAssembly.dll", + // "Microsoft.JSInterop.dll", + // "Microsoft.VisualBasic.Core.dll", + // "Microsoft.VisualBasic.dll", + // "Microsoft.Win32.Primitives.dll", + // "Microsoft.Win32.Registry.dll", + "System.AppContext.dll", + "System.Buffers.dll", + "System.Collections.Concurrent.dll", + "System.Collections.Immutable.dll", + "System.Collections.NonGeneric.dll", + "System.Collections.Specialized.dll", + "System.Collections.dll", + // "System.ComponentModel.Annotations.dll", + // "System.ComponentModel.DataAnnotations.dll", + // "System.ComponentModel.EventBasedAsync.dll", + // "System.ComponentModel.Primitives.dll", + // "System.ComponentModel.TypeConverter.dll", + // "System.ComponentModel.dll", + // "System.Composition.AttributedModel.dll", + // "System.Composition.Convention.dll", + // "System.Composition.Hosting.dll", + // "System.Composition.Runtime.dll", + // "System.Composition.TypedParts.dll", + // "System.Configuration.dll", + "System.Console.dll", + "System.Core.dll", + // "System.Data.Common.dll", + // "System.Data.DataSetExtensions.dll", + // "System.Data.dll", + // "System.Diagnostics.Contracts.dll", + "System.Diagnostics.Debug.dll", + // "System.Diagnostics.DiagnosticSource.dll", + // "System.Diagnostics.FileVersionInfo.dll", + // "System.Diagnostics.Process.dll", + // "System.Diagnostics.StackTrace.dll", + // "System.Diagnostics.TextWriterTraceListener.dll", + // "System.Diagnostics.Tools.dll", + // "System.Diagnostics.TraceSource.dll", + // "System.Diagnostics.Tracing.dll", + // "System.Drawing.Primitives.dll", + // "System.Drawing.dll", + // "System.Dynamic.Runtime.dll", + // "System.Formats.Asn1.dll", + // "System.Formats.Tar.dll", + "System.Globalization.Calendars.dll", + "System.Globalization.Extensions.dll", + "System.Globalization.dll", + // "System.IO.Compression.Brotli.dll", + // "System.IO.Compression.FileSystem.dll", + // "System.IO.Compression.ZipFile.dll", + // "System.IO.Compression.dll", + // "System.IO.FileSystem.AccessControl.dll", + // "System.IO.FileSystem.DriveInfo.dll", + // "System.IO.FileSystem.Primitives.dll", + // "System.IO.FileSystem.Watcher.dll", + "System.IO.FileSystem.dll", + // "System.IO.IsolatedStorage.dll", + // "System.IO.MemoryMappedFiles.dll", + // "System.IO.Pipelines.dll", + // "System.IO.Pipes.AccessControl.dll", + // "System.IO.Pipes.dll", + "System.IO.UnmanagedMemoryStream.dll", + "System.IO.dll", + "System.Linq.Expressions.dll", + "System.Linq.Parallel.dll", + "System.Linq.Queryable.dll", + "System.Linq.dll", + "System.Memory.dll", + "System.Net.Http.Json.dll", + "System.Net.Http.dll", + "System.Net.HttpListener.dll", + // "System.Net.Mail.dll", + "System.Net.NameResolution.dll", + "System.Net.NetworkInformation.dll", + // "System.Net.Ping.dll", + "System.Net.Primitives.dll", + // "System.Net.Quic.dll", + "System.Net.Requests.dll", + // "System.Net.Security.dll", + // "System.Net.ServicePoint.dll", + "System.Net.Sockets.dll", + "System.Net.WebClient.dll", + "System.Net.WebHeaderCollection.dll", + // "System.Net.WebProxy.dll", + // "System.Net.WebSockets.Client.dll", + // "System.Net.WebSockets.dll", + "System.Net.dll", + "System.Numerics.Vectors.dll", + "System.Numerics.dll", + "System.ObjectModel.dll", + "System.Private.CoreLib.dll", + // "System.Private.DataContractSerialization.dll", + "System.Private.Uri.dll", + // "System.Private.Xml.Linq.dll", + // "System.Private.Xml.dll", + // "System.Reflection.DispatchProxy.dll", + // "System.Reflection.Emit.ILGeneration.dll", + // "System.Reflection.Emit.Lightweight.dll", + // "System.Reflection.Emit.dll", + // "System.Reflection.Extensions.dll", + // "System.Reflection.Metadata.dll", + // "System.Reflection.Primitives.dll", + // "System.Reflection.TypeExtensions.dll", + "System.Reflection.dll", + "System.Resources.Reader.dll", + "System.Resources.ResourceManager.dll", + "System.Resources.Writer.dll", + // "System.Runtime.CompilerServices.Unsafe.dll", + // "System.Runtime.CompilerServices.VisualC.dll", + "System.Runtime.Extensions.dll", + "System.Runtime.Handles.dll", + // "System.Runtime.InteropServices.JavaScript.dll", + "System.Runtime.InteropServices.RuntimeInformation.dll", + "System.Runtime.InteropServices.dll", + // "System.Runtime.Intrinsics.dll", + // "System.Runtime.Loader.dll", + // "System.Runtime.Numerics.dll", + // "System.Runtime.Serialization.Formatters.dll", + "System.Runtime.Serialization.Json.dll", + // "System.Runtime.Serialization.Primitives.dll", + // "System.Runtime.Serialization.Xml.dll", + // "System.Runtime.Serialization.dll", + "System.Runtime.dll", + // "System.Security.AccessControl.dll", + // "System.Security.Claims.dll", + // "System.Security.Cryptography.Algorithms.dll", + // "System.Security.Cryptography.Cng.dll", + // "System.Security.Cryptography.Csp.dll", + // "System.Security.Cryptography.Encoding.dll", + // "System.Security.Cryptography.OpenSsl.dll", + // "System.Security.Cryptography.Primitives.dll", + // "System.Security.Cryptography.X509Certificates.dll", + // "System.Security.Cryptography.dll", + // "System.Security.Principal.Windows.dll", + "System.Security.Principal.dll", + "System.Security.SecureString.dll", + "System.Security.dll", + // "System.ServiceModel.Web.dll", + // "System.ServiceProcess.dll", + // "System.Text.Encoding.CodePages.dll", + "System.Text.Encoding.Extensions.dll", + "System.Text.Encoding.dll", + "System.Text.Encodings.Web.dll", + "System.Text.Json.dll", + "System.Text.RegularExpressions.dll", + // "System.Threading.Channels.dll", + // "System.Threading.Overlapped.dll", + // "System.Threading.Tasks.Dataflow.dll", + "System.Threading.Tasks.Extensions.dll", + "System.Threading.Tasks.Parallel.dll", + "System.Threading.Tasks.dll", + "System.Threading.Thread.dll", + "System.Threading.ThreadPool.dll", + "System.Threading.Timer.dll", + "System.Threading.dll", + // "System.Transactions.Local.dll", + "System.Transactions.dll", + "System.ValueTuple.dll", + "System.Web.HttpUtility.dll", + // "System.Web.dll", + // "System.Windows.dll", + // "System.Xml.Linq.dll", + // "System.Xml.ReaderWriter.dll", + // "System.Xml.Serialization.dll", + // "System.Xml.XDocument.dll", + // "System.Xml.XPath.XDocument.dll", + // "System.Xml.XPath.dll", + // "System.Xml.XmlDocument.dll", + // "System.Xml.XmlSerializer.dll", + // "System.Xml.dll", + "System.dll", + "WebAssembly.dll", + // "WindowsBase.dll", + // "compiler.dll", + "mscorlib.dll", + "netstandard.dll", +]; + +export interface Options { + typeFullName?: string; + methodName?: string; + executionCode: string; +} + +export class DotnetTestCompilerFactory { + protected readonly log: Logger; + protected readonly patchedConsole: Console; + constructor(streams: Streams) { + this.log = createLogger(streams.out); + this.patchedConsole = redirect(globalThis.console, this.log); + } + async create( + ctx: Context, + { + typeFullName = "test.Test", + methodName = "Execute", + executionCode, + }: Options + ): Promise> { + const { dotnet } = await inContext( + ctx, + import(/* @vite-ignore */ dotnetUrl) + ); + using _ = patch(globalThis, "console", this.patchedConsole); + const compilerModule: DotnetModule< + CompilerModuleImports, + CompilerModuleExports + > = await inContext(ctx, dotnet.create()); + const compiler = await inContext( + ctx, + new DotnetCompilerFactory(this.log, compilerModule).create( + precompiledLibsIndexUrl, + LIBS + ) + ); + const runtimeFactory = new DotnetRuntimeFactory(compiler); + return { + async compile(ctx, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const runtime = runtimeFactory.create( + ctx, + files[0].content, + executionCode + ); + return new DotnetTestProgram(typeFullName, methodName, runtime); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-description.svelte b/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-description.svelte new file mode 100644 index 00000000..ae87a4a6 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-description.svelte @@ -0,0 +1,7 @@ + + +

Namespace test is reserved.

+ + diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-worker.ts new file mode 100644 index 00000000..fafe6ca4 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/test-worker.ts @@ -0,0 +1,19 @@ +import { startTestCompilerActor } from "libs/testing/actor"; +import { makeExecutionCode } from "dotnet-runtime"; +import { createContext } from "libs/context"; + +import { DotnetTestCompilerFactory } from "./test-compiler-factory"; + +export interface DotnetTestWorkerConfig { + dotnetTestCompilerFactory: DotnetTestCompilerFactory; + makeExecutionCode: typeof makeExecutionCode; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + dotnetTestCompilerFactory: new DotnetTestCompilerFactory(streams), + makeExecutionCode, + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/dotnet/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/dotnet/worker.ts new file mode 100644 index 00000000..c1f2920b --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/dotnet/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeDotnetCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeDotnetCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/gleam/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/gleam/compiler-factory.ts new file mode 100644 index 00000000..5bb52bf5 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/gleam/compiler-factory.ts @@ -0,0 +1,44 @@ +import { redirect, createLogger } from "libs/logger"; +import type { CompilerFactory, Program } from "libs/compiler"; +import { + GleamModuleCompiler, + type GleamModule, + GleamProgram, +} from "gleam-runtime"; + +import compilerWasmUrl from "gleam-runtime/compiler.wasm?url"; +import { compileJsModule } from "libs/js"; + +import { base } from '$app/paths'; + +const precompiledGleamStdlibIndexUrl = new URL( + `${base}/assets/gleam`, + globalThis.location.origin +).toString(); + +export const makeGleamCompiler: CompilerFactory = async (ctx, streams) => { + const patchedConsole = redirect(globalThis.console, createLogger(streams.out)); + const compiler = new GleamModuleCompiler( + streams.out, + precompiledGleamStdlibIndexUrl, + await WebAssembly.compileStreaming( + fetch(compilerWasmUrl, { signal: ctx.signal }) + ) + ); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const jsCode = compiler.compile(files[0].content); + const jsModule = await compileJsModule(jsCode); + if (!jsModule || typeof jsModule !== "object") { + throw new Error("Compilation failed"); + } + if (!("main" in jsModule) || typeof jsModule.main !== "function") { + throw new Error("Main function is missing"); + } + return new GleamProgram(jsModule as GleamModule, patchedConsole); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/gleam/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/gleam/description.svelte new file mode 100644 index 00000000..1d11b89a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/gleam/description.svelte @@ -0,0 +1,17 @@ + + +

+ Gleam {version} +

+ +

+ Your code is compiled by Gleam compiler (compiled to WebAssembly with stdlib) to a JavaScript module and is executed in + a web worker environment. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/gleam/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/gleam/test-compiler-factory.ts new file mode 100644 index 00000000..8933482f --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/gleam/test-compiler-factory.ts @@ -0,0 +1,54 @@ +import type { Context } from "libs/context"; +import type { Streams } from "libs/io"; +import { createLogger, redirect } from "libs/logger"; +import { compileJsModule } from "libs/js"; +import type { TestCompiler } from "libs/testing"; +import { JsTestProgram } from "javascript-runtime"; +import { GleamModuleCompiler } from "gleam-runtime"; + +import { base } from '$app/paths'; + +import compilerWasmUrl from "gleam-runtime/compiler.wasm?url"; + +const precompiledGleamStdlibIndexUrl = new URL( + `${base}/assets/gleam`, + globalThis.location.origin +).toString(); + +export type ExecuteTest = (m: M, input: I) => Promise; + +export class GleamTestCompilerFactory { + + protected readonly patchedConsole: Console; + + constructor(protected readonly streams: Streams) { + this.patchedConsole = redirect(globalThis.console, createLogger(streams.out)); + } + + async create( + ctx: Context, + executeTest: ExecuteTest + ): Promise> { + class TestProgram extends JsTestProgram { + override async executeTest(m: M, input: I): Promise { + return executeTest(m, input); + } + } + const compiler = new GleamModuleCompiler( + this.streams.out, + precompiledGleamStdlibIndexUrl, + await WebAssembly.compileStreaming( + fetch(compilerWasmUrl, { signal: ctx.signal }) + ) + ); + return { + compile: async (_, files) => { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const jsCode = compiler.compile(files[0].content); + return new TestProgram(await compileJsModule(jsCode), this.patchedConsole); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/gleam/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/gleam/test-worker.ts new file mode 100644 index 00000000..b32a4242 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/gleam/test-worker.ts @@ -0,0 +1,16 @@ +import { startTestCompilerActor } from "libs/testing/actor"; +import { createContext } from "libs/context"; + +import { GleamTestCompilerFactory } from "./test-compiler-factory"; + +export interface GleamTestWorkerConfig { + gleamTestCompilerFactory: GleamTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + gleamTestCompilerFactory: new GleamTestCompilerFactory(streams), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/gleam/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/gleam/worker.ts new file mode 100644 index 00000000..9571e4be --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/gleam/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeGleamCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeGleamCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/go/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/go/compiler-factory.ts new file mode 100644 index 00000000..de5250a6 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/go/compiler-factory.ts @@ -0,0 +1,26 @@ +import { + GoProgram, + makeCompilerFactory, + makeGoCompilerFactory, + makeGoExecutorFactory, +} from "go-runtime"; +import type { CompilerFactory, Program } from "libs/compiler"; +import { inContext } from "libs/context"; + +import wasmInit from "go-runtime/compiler.wasm?init"; + +export const makeGoCompiler: CompilerFactory = async (ctx, streams) => { + const goExecutorFactory = makeGoExecutorFactory( + makeGoCompilerFactory( + await makeCompilerFactory((imports) => inContext(ctx, wasmInit(imports))) + ) + ); + return { + async compile(ctx, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new GoProgram(await goExecutorFactory(ctx, streams, files[0].content)); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/go/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/go/description.svelte new file mode 100644 index 00000000..909fb7dc --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/go/description.svelte @@ -0,0 +1,19 @@ + + +

+ Your code is interpreted by Yaegi (compiled in WebAssembly with stdlib using go{version}) in a web worker environment. +

+ +

+ Solution is inspired by Better Go Playground. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/go/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/go/test-compiler-factory.ts new file mode 100644 index 00000000..10df4b68 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/go/test-compiler-factory.ts @@ -0,0 +1,45 @@ +import { inContext, type Context } from "libs/context"; +import type { Streams } from "libs/io"; +import type { TestCompiler } from "libs/testing"; +import { + makeCompilerFactory, + makeGoCompilerFactory, + makeGoEvaluatorFactory, + GoTestProgram, +} from "go-runtime"; + +import wasmInit from "go-runtime/compiler.wasm?init"; + +export type GenerateCaseExecutionCode = (input: I) => string; + +export class GoTestCompilerFactory { + constructor(protected readonly streams: Streams) {} + + async create( + ctx: Context, + generateCaseExecutionCode: GenerateCaseExecutionCode + ): Promise> { + class TestProgram extends GoTestProgram { + protected override generateCaseExecutionCode(input: I): string { + return generateCaseExecutionCode(input); + } + } + const goEvaluatorFactory = makeGoEvaluatorFactory( + makeGoCompilerFactory( + await makeCompilerFactory((imports) => + inContext(ctx, wasmInit(imports)) + ) + ) + ); + return { + compile: async (ctx, files) => { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new TestProgram( + await goEvaluatorFactory(ctx, this.streams, files[0].content) + ); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/go/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/go/test-worker.ts new file mode 100644 index 00000000..154ee1ba --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/go/test-worker.ts @@ -0,0 +1,16 @@ +import { startTestCompilerActor } from "libs/testing/actor"; +import { createContext } from "libs/context"; + +import { GoTestCompilerFactory } from "./test-compiler-factory"; + +export interface GoTestWorkerConfig { + goTestCompilerFactory: GoTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, out, factory) => + factory(ctx, { + goTestCompilerFactory: new GoTestCompilerFactory(out), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/go/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/go/worker.ts new file mode 100644 index 00000000..a15f1b2a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/go/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeGoCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeGoCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/java/compiler-factory.ts new file mode 100644 index 00000000..1472660c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/compiler-factory.ts @@ -0,0 +1,30 @@ +import { + initFs, + JavaCompiler, + JavaProgram, + makeJVMFactory, +} from "java-runtime"; +import type { CompilerFactory, Program } from "libs/compiler"; + +import libZipUrl from "java-runtime/doppio.zip?url"; + +const CLASSNAME = "Program"; + +export const makeJavaCompiler: CompilerFactory = async (ctx, streams) => { + const jvmFactory = makeJVMFactory(streams); + const libZipData = await fetch(libZipUrl, { + signal: ctx.signal, + cache: "force-cache", + }).then((response) => response.arrayBuffer()); + const fs = await initFs(libZipData); + const compiler = new JavaCompiler(jvmFactory, `/home/${CLASSNAME}.java`, fs); + return { + async compile(ctx, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + await compiler.compile(ctx, files[0].content); + return new JavaProgram(CLASSNAME, jvmFactory); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/java/description.svelte new file mode 100644 index 00000000..a3dc1fad --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/description.svelte @@ -0,0 +1,9 @@ + + +

+ Class Program with a public static method main is required. +

+ + diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/info.svelte b/apps/ppp-sveltekit/src/lib/runtime/java/info.svelte new file mode 100644 index 00000000..26c72baa --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/info.svelte @@ -0,0 +1,14 @@ + + +

+ {version} +

+ +

+ Your code is compiled by Javac and executed in + DoppioJVM in a web worker environment. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/java/test-compiler-factory.ts new file mode 100644 index 00000000..00e84c1a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/test-compiler-factory.ts @@ -0,0 +1,92 @@ +import type { Context } from "libs/context"; +import type { Streams } from "libs/io"; +import type { TestCompiler } from "libs/testing"; + +import { + JavaCompiler, + JavaTestProgram, + initFs, + makeJVMFactory, +} from "java-runtime"; + +// @ts-expect-error vite url import +import libZipUrl from "java-runtime/doppio.zip"; + +export interface Options { + className?: string; + classDefinitions: string; + mainMethodBody: string; + nativesFactory: ( + input: I, + saveOutput: (output: O) => void + ) => Record; +} + +export class JavaTestCompilerFactory { + constructor(private readonly streams: Streams) {} + async create( + ctx: Context, + { + className = "Test", + classDefinitions, + mainMethodBody, + nativesFactory, + }: Options + ): Promise> { + const jvmFactory = makeJVMFactory(this.streams); + const libZipData = await fetch(libZipUrl, { + signal: ctx.signal, + cache: "force-cache", + }).then((response) => response.arrayBuffer()); + const fs = await initFs(libZipData); + const compiler = new JavaCompiler( + jvmFactory, + `/home/${className}.java`, + fs + ); + class TestProgram extends JavaTestProgram implements Disposable { + private output?: O; + private saveOutput(output: O) { + this.output = output; + } + protected override getNatives(input: I): Record { + this.output = undefined; + return nativesFactory(input, this.saveOutput.bind(this)); + } + protected override getResult(): O { + if (this.output === undefined) { + throw new Error("No output"); + } + return this.output; + } + [Symbol.dispose]() { + this.output = undefined; + } + } + return { + async compile(ctx, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + // TODO: Fix handling compilation errors or at least remove previous + // compilation output + await compiler.compile( + ctx, + `${files[0].content} + +public class ${className} { + ${classDefinitions} + public static void main(String[] args) { + ${mainMethodBody} + } +}` + ); + const program = new TestProgram(className, jvmFactory); + ctx.onCancel(() => { + program[Symbol.dispose]() + }); + return program + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/test-description.svelte b/apps/ppp-sveltekit/src/lib/runtime/java/test-description.svelte new file mode 100644 index 00000000..787d3dfd --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/test-description.svelte @@ -0,0 +1,9 @@ + + +

+ Public class Test is reserved. +

+ + diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/java/test-worker.ts new file mode 100644 index 00000000..5f881e51 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/test-worker.ts @@ -0,0 +1,19 @@ +import { util } from "java-runtime"; +import { startTestCompilerActor } from "libs/testing/actor"; +import { createContext } from "libs/context"; + +import { JavaTestCompilerFactory } from "./test-compiler-factory"; + +export interface JavaTestWorkerConfig { + javaTestCompilerFactory: JavaTestCompilerFactory; + util: typeof util; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + javaTestCompilerFactory: new JavaTestCompilerFactory(streams), + util, + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/java/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/java/worker.ts new file mode 100644 index 00000000..5a8a8bbc --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/java/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeJavaCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeJavaCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/js/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/js/compiler-factory.ts new file mode 100644 index 00000000..c124f015 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/js/compiler-factory.ts @@ -0,0 +1,15 @@ +import { redirect, createLogger } from "libs/logger"; +import type { CompilerFactory, Program } from "libs/compiler"; +import { JsProgram } from "javascript-runtime"; + +export const makeJsCompiler: CompilerFactory = async (_, streams) => { + const patchedConsole = redirect(globalThis.console, createLogger(streams.out)); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new JsProgram(files[0].content, patchedConsole); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/js/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/js/description.svelte new file mode 100644 index 00000000..1e90cf5c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/js/description.svelte @@ -0,0 +1,11 @@ +

Your code is executed in a web worker environment.

+ +

+ + Check supported features in your browser + . +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/js/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/js/test-compiler-factory.ts new file mode 100644 index 00000000..af5924af --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/js/test-compiler-factory.ts @@ -0,0 +1,36 @@ +import type { Streams } from "libs/io"; +import { createLogger, redirect } from "libs/logger"; +import { compileJsModule } from "libs/js"; +import type { TestCompiler } from "libs/testing"; +import { JsTestProgram } from "javascript-runtime"; + +export type InvokeTestMethod = (m: M, input: I) => Promise; + +export class JsTestCompilerFactory { + protected readonly patchedConsole: Console; + + constructor(streams: Streams) { + this.patchedConsole = redirect(globalThis.console, createLogger(streams.out)); + } + + create( + invokeTestMethod: InvokeTestMethod + ): TestCompiler { + class TestProgram extends JsTestProgram { + override executeTest(m: M, input: I): Promise { + return invokeTestMethod(m, input); + } + } + return { + compile: async (_, files) => { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new TestProgram( + await compileJsModule(files[0].content), + this.patchedConsole + ); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/js/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/js/test-worker.ts new file mode 100644 index 00000000..26872f80 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/js/test-worker.ts @@ -0,0 +1,16 @@ +import { createContext } from "libs/context"; +import { startTestCompilerActor } from "libs/testing/actor"; + +import { JsTestCompilerFactory } from "./test-compiler-factory"; + +export interface JsTestWorkerConfig { + jsTestCompilerFactory: JsTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + jsTestCompilerFactory: new JsTestCompilerFactory(streams), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/js/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/js/worker.ts new file mode 100644 index 00000000..28c54480 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/js/worker.ts @@ -0,0 +1,6 @@ +import { createContext } from 'libs/context'; +import { startCompilerActor } from "libs/compiler/actor"; + +import { makeJsCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeJsCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/php/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/php/compiler-factory.ts new file mode 100644 index 00000000..b4d676f9 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/php/compiler-factory.ts @@ -0,0 +1,14 @@ +import type { CompilerFactory, Program } from "libs/compiler"; +import { phpCompilerFactory, PHPProgram } from "php-runtime"; + +export const makePhpCompiler: CompilerFactory = async (ctx, streams) => { + const php = await phpCompilerFactory(ctx); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new PHPProgram(files[0].content, php, streams); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/php/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/php/description.svelte new file mode 100644 index 00000000..f7001d88 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/php/description.svelte @@ -0,0 +1,16 @@ + + +

+ PHP {version}. +

+ +

+ Your code is executed by WebAssembly PHP in a web worker environment. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/php/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/php/test-compiler-factory.ts new file mode 100644 index 00000000..dc9d933c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/php/test-compiler-factory.ts @@ -0,0 +1,34 @@ +import type { Context } from 'libs/context'; +import type { Streams } from "libs/io"; +import { phpCompilerFactory, PHPTestProgram } from "php-runtime"; +import type { TestCompiler } from "libs/testing"; + +export type GenerateCaseExecutionCode = (input: I) => string; + +export class PhpTestCompilerFactory { + constructor(protected readonly streams: Streams) {} + + async create( + ctx: Context, + generateCaseExecutionCode: GenerateCaseExecutionCode + ): Promise> { + class TestProgram extends PHPTestProgram { + protected override caseExecutionCode(data: I): string { + return generateCaseExecutionCode(data); + } + } + const php = await phpCompilerFactory(ctx); + return { + compile: async (ctx, files) => { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const program = new TestProgram(this.streams, php, files[0].content); + ctx.onCancel(() => { + program[Symbol.dispose]() + }) + return program + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/php/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/php/test-worker.ts new file mode 100644 index 00000000..c231e35f --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/php/test-worker.ts @@ -0,0 +1,16 @@ +import { startTestCompilerActor } from "libs/testing/actor"; +import { createContext } from "libs/context"; + +import { PhpTestCompilerFactory } from "./test-compiler-factory"; + +export interface PhpTestWorkerConfig { + phpTestCompilerFactory: PhpTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + phpTestCompilerFactory: new PhpTestCompilerFactory(streams), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/php/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/php/worker.ts new file mode 100644 index 00000000..8677999d --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/php/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makePhpCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makePhpCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/python/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/python/compiler-factory.ts new file mode 100644 index 00000000..d04dc6d7 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/python/compiler-factory.ts @@ -0,0 +1,26 @@ +import type { CompilerFactory, Program } from "libs/compiler"; +import { PyProgram, pyRuntimeFactory } from "python-runtime"; + +import wasmUrl from "python-runtime/pyodide.wasm?url"; +import stdlibUrl from "python-runtime/python-stdlib.zip?url"; + +export const makePythonCompiler: CompilerFactory = async (ctx, streams) => { + const pyRuntime = await pyRuntimeFactory( + ctx, + streams, + (ctx, imports) => + WebAssembly.instantiateStreaming( + fetch(wasmUrl, { signal: ctx.signal }), + imports + ), + stdlibUrl + ); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new PyProgram(files[0].content, pyRuntime); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/python/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/python/description.svelte new file mode 100644 index 00000000..62a2fcdf --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/python/description.svelte @@ -0,0 +1,16 @@ + + +

+ Python {version}. +

+ +

+ Your code is executed by Pyodide (Python distribution based on WebAssembly) in a web worker environment. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/python/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/python/test-compiler-factory.ts new file mode 100644 index 00000000..b07f6cd3 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/python/test-compiler-factory.ts @@ -0,0 +1,44 @@ +import type { Context } from "libs/context"; +import type { Streams } from "libs/io"; +import type { TestCompiler } from "libs/testing"; +import { pyRuntimeFactory, PyTestProgram } from "python-runtime"; + +// @ts-ignore +import wasmUrl from "python-runtime/pyodide.wasm"; +// @ts-ignore +import stdlibUrl from "python-runtime/python-stdlib.zip"; + +export type GenerateCaseExecutionCode = (input: I) => string; + +export class PythonTestCompilerFactory { + constructor(protected readonly streams: Streams) {} + + async create( + ctx: Context, + generateCaseExecutionCode: GenerateCaseExecutionCode + ): Promise> { + class TestProgram extends PyTestProgram { + protected override caseExecutionCode(data: I): string { + return generateCaseExecutionCode(data); + } + } + const pyRuntime = await pyRuntimeFactory( + ctx, + this.streams, + (ctx, imports) => + WebAssembly.instantiateStreaming( + fetch(wasmUrl, { signal: ctx.signal }), + imports + ), + stdlibUrl + ); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new TestProgram(pyRuntime, files[0].content); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/python/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/python/test-worker.ts new file mode 100644 index 00000000..91876a29 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/python/test-worker.ts @@ -0,0 +1,16 @@ +import { startTestCompilerActor } from "libs/testing/actor"; +import { createContext } from "libs/context"; + +import { PythonTestCompilerFactory } from "./test-compiler-factory"; + +export interface PythonTestWorkerConfig { + pythonTestCompilerFactory: PythonTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + pythonTestCompilerFactory: new PythonTestCompilerFactory(streams), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/python/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/python/worker.ts new file mode 100644 index 00000000..caf4867c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/python/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makePythonCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makePythonCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/ruby/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/ruby/compiler-factory.ts new file mode 100644 index 00000000..df9ab2d5 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ruby/compiler-factory.ts @@ -0,0 +1,19 @@ +import type { CompilerFactory, Program } from "libs/compiler"; +import { RubyProgram, createRubyVM } from "ruby-runtime"; + +import rubyWasmUrl from "ruby-runtime/ruby.wasm?url"; + +export const makeRubyCompiler: CompilerFactory = async (ctx, streams) => { + const rubyWasmModule = await WebAssembly.compileStreaming( + fetch(rubyWasmUrl, { signal: ctx.signal, cache: "force-cache" }) + ); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const vm = await createRubyVM(ctx, streams, rubyWasmModule); + return new RubyProgram(files[0].content, vm); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/ruby/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/ruby/description.svelte new file mode 100644 index 00000000..481444a9 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ruby/description.svelte @@ -0,0 +1,22 @@ + + +

+ Ruby {version} +

+ +

+ Your code is interpreted by CRuby (ported to WebAssembly with stdlib) in a web worker environment. +

+ +

+ Notable Limitations. + + The current WASI target build does not yet support Thread related APIs. + Also there is no support for networking. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/ruby/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/ruby/test-compiler-factory.ts new file mode 100644 index 00000000..f6cc897c --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ruby/test-compiler-factory.ts @@ -0,0 +1,37 @@ +import type { Streams, Writer } from "libs/io"; +import { inContext, type Context } from "libs/context"; +import type { TestCompiler } from "libs/testing"; +import { RubyTestProgram, createRubyVM } from "ruby-runtime"; + +//@ts-expect-error .wasm is an asset +import rubyWasmUrl from "ruby-runtime/ruby.wasm"; + +export type GenerateCaseExecutionCode = (input: I) => string; + +export class RubyTestCompilerFactory { + constructor(protected readonly streams: Streams) {} + + async create( + ctx: Context, + generateCaseExecutionCode: GenerateCaseExecutionCode + ): Promise> { + class TestProgram extends RubyTestProgram { + protected override caseExecutionCode(input: I): string { + return generateCaseExecutionCode(input); + } + } + const rubyWasmModule = await WebAssembly.compileStreaming( + fetch(rubyWasmUrl, { signal: ctx.signal, cache: "force-cache" }) + ); + return { + compile: async (ctx, files) => { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + const rubyVm = await createRubyVM(ctx, this.streams, rubyWasmModule); + await inContext(ctx, rubyVm.evalAsync(files[0].content)); + return new TestProgram(rubyVm); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/ruby/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/ruby/test-worker.ts new file mode 100644 index 00000000..31d6d99d --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ruby/test-worker.ts @@ -0,0 +1,16 @@ +import { createContext } from "libs/context"; +import { startTestCompilerActor } from "libs/testing/actor"; + +import { RubyTestCompilerFactory } from "./test-compiler-factory"; + +export interface RubyTestWorkerConfig { + rubyTestCompilerFactory: RubyTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + rubyTestCompilerFactory: new RubyTestCompilerFactory(streams), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/ruby/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/ruby/worker.ts new file mode 100644 index 00000000..51cce6e0 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ruby/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeRubyCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeRubyCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/rust/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/rust/compiler-factory.ts new file mode 100644 index 00000000..0861cace --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/rust/compiler-factory.ts @@ -0,0 +1,45 @@ +import type { Context } from "libs/context"; +import type { CompilerFactory, Program } from "libs/compiler"; +import { RustProgram, createWASI } from "rust-runtime"; + +import miriWasmUrl from "rust-runtime/miri.wasm?url"; + +const libsUrls = import.meta.glob("/node_modules/rust-runtime/dist/lib/*", { + eager: true, + import: "default", +}) as Record; + +// TODO: manual cache for large assets +function loadLibs(ctx: Context) { + return Promise.all( + Object.entries(libsUrls).map(async ([lib, url]) => { + const response = await fetch(url, { + signal: ctx.signal, + cache: "force-cache", + }); + const buffer = await response.arrayBuffer(); + return [lib.slice(36), buffer] as [string, ArrayBuffer]; + }) + ); +} + +export const makeRustCompiler: CompilerFactory = async ( + ctx, + streams +) => { + const [miri, libs] = await Promise.all([ + await WebAssembly.compileStreaming( + fetch(miriWasmUrl, { signal: ctx.signal, cache: "force-cache" }) + ), + loadLibs(ctx), + ]); + const wasi = createWASI(streams, libs); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new RustProgram(files[0].content, wasi, miri); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/rust/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/rust/description.svelte new file mode 100644 index 00000000..913999f6 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/rust/description.svelte @@ -0,0 +1,38 @@ + + +

+ Rust {version} +

+ +

+ Your code is interpreted by Miri (compiled to WebAssembly) in a web worker environment. +

+ +

Anything not supported by Miri or WASM is unsupported.

+ +

+ This solution is based on bjorn3 + work on + porting Rust to WebAssembly + and + browser WASI shim. +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/rust/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/rust/test-compiler-factory.ts new file mode 100644 index 00000000..76ad5db9 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/rust/test-compiler-factory.ts @@ -0,0 +1,62 @@ +import type { Context } from "libs/context"; +import type { Streams } from "libs/io"; +import type { TestCompiler } from "libs/testing"; +import { RustTestProgram, createWASI } from "rust-runtime"; + +import miriWasmUrl from "rust-runtime/miri.wasm?url"; + +const libsUrls = import.meta.glob("/node_modules/rust-runtime/dist/lib/*", { + eager: true, + import: "default", +}) as Record; + +// TODO: manual cache for large assets +function loadLibs(ctx: Context) { + return Promise.all( + Object.entries(libsUrls).map(async ([lib, url]) => { + const response = await fetch(url, { + signal: ctx.signal, + cache: "force-cache", + }); + const buffer = await response.arrayBuffer(); + return [lib.slice(36), buffer] as [string, ArrayBuffer]; + }) + ); +} + +export type GenerateOutputContentCode = (input: I) => string; +export type TransformResult = (result: string) => O; + +export class RustTestCompilerFactory { + constructor(protected readonly streams: Streams) {} + + async create( + ctx: Context, + generateOutputContentCode: GenerateOutputContentCode, + transformResult: TransformResult + ): Promise> { + class TestProgram extends RustTestProgram { + protected override generateOutputContentCode(input: I): string { + return generateOutputContentCode(input); + } + protected override transformResult(data: string): O { + return transformResult(data); + } + } + const [miri, libs] = await Promise.all([ + await WebAssembly.compileStreaming( + fetch(miriWasmUrl, { signal: ctx.signal, cache: "force-cache" }) + ), + loadLibs(ctx), + ]); + const wasi = createWASI(this.streams, libs); + return { + async compile(_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new TestProgram(files[0].content, wasi, miri, "case_output"); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/rust/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/rust/test-worker.ts new file mode 100644 index 00000000..8ac04d0d --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/rust/test-worker.ts @@ -0,0 +1,14 @@ +import { startTestCompilerActor } from "libs/testing/actor"; +import { createContext } from 'libs/context'; + +import { RustTestCompilerFactory } from "./test-compiler-factory"; + +export interface RustTestWorkerConfig { + rustTestCompilerFactory: RustTestCompilerFactory; +} + +startTestCompilerActor(createContext(), (ctx, out, factory) => + factory(ctx, { + rustTestCompilerFactory: new RustTestCompilerFactory(out), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/rust/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/rust/worker.ts new file mode 100644 index 00000000..ed7404e4 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/rust/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeRustCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeRustCompiler); diff --git a/apps/ppp-sveltekit/src/lib/runtime/test-descriptions.ts b/apps/ppp-sveltekit/src/lib/runtime/test-descriptions.ts new file mode 100644 index 00000000..d64c57d6 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/test-descriptions.ts @@ -0,0 +1,27 @@ +import type { Component } from "svelte"; + +import { Language } from "$lib/language"; + +import JsDescription from "./js/description.svelte"; +import TsDescription from "./ts/description.svelte"; +import PhpDescription from "./php/description.svelte"; +import PyDescription from "./python/description.svelte"; +import GoDescription from "./go/description.svelte"; +import RustDescription from "./rust/description.svelte"; +import GleamDescription from "./gleam/description.svelte"; +import DotnetDescription from "./dotnet/test-description.svelte"; +import JavaDescription from "./java/test-description.svelte"; +import RubyDescription from "./ruby/description.svelte"; + +export const DESCRIPTIONS: Record = { + [Language.JavaScript]: JsDescription, + [Language.TypeScript]: TsDescription, + [Language.PHP]: PhpDescription, + [Language.Python]: PyDescription, + [Language.Go]: GoDescription, + [Language.Rust]: RustDescription, + [Language.Gleam]: GleamDescription, + [Language.CSharp]: DotnetDescription, + [Language.Java]: JavaDescription, + [Language.Ruby]: RubyDescription, +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/ts/compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/ts/compiler-factory.ts new file mode 100644 index 00000000..e3e4b7c5 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ts/compiler-factory.ts @@ -0,0 +1,19 @@ +import { redirect, createLogger } from "libs/logger"; +import type { CompilerFactory, Program } from "libs/compiler"; +import { JsProgram } from "javascript-runtime"; +import { compileTsModule } from "typescript-runtime"; + +export const makeTsCompiler: CompilerFactory = async (_, streams) => { + const patchedConsole = redirect(globalThis.console, createLogger(streams.out)); + return { + async compile (_, files) { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new JsProgram( + compileTsModule(files[0].content), + patchedConsole + ); + }, + }; +}; diff --git a/apps/ppp-sveltekit/src/lib/runtime/ts/description.svelte b/apps/ppp-sveltekit/src/lib/runtime/ts/description.svelte new file mode 100644 index 00000000..213faf51 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ts/description.svelte @@ -0,0 +1,26 @@ + + +

TypeScript {version}. Transpilation options:

+ +
+
+target: ScriptTarget.ES2022,
+strict: true,
+strictBindCallApply: true,
+strictFunctionTypes: true,
+
+
+ +

Transpiled code is executed in a web worker environment.

+ +

+ + Check supported features in your browser + . +

diff --git a/apps/ppp-sveltekit/src/lib/runtime/ts/test-compiler-factory.ts b/apps/ppp-sveltekit/src/lib/runtime/ts/test-compiler-factory.ts new file mode 100644 index 00000000..ea482fe1 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ts/test-compiler-factory.ts @@ -0,0 +1,37 @@ +import type { Streams, Writer } from "libs/io"; +import { compileJsModule } from "libs/js"; +import { createLogger, redirect } from "libs/logger"; +import type { TestCompiler } from "libs/testing"; +import { JsTestProgram } from "javascript-runtime"; +import { compileTsModule } from "typescript-runtime"; + +export type InvokeTestMethod = (m: M, input: I) => Promise; + +export class TsTestCompilerFactory { + protected readonly patchedConsole: Console; + + constructor(streams: Streams) { + this.patchedConsole = redirect(globalThis.console, createLogger(streams.out)); + } + + create( + invokeTestMethod: InvokeTestMethod + ): TestCompiler { + class TestProgram extends JsTestProgram { + override async executeTest(m: M, input: I): Promise { + return invokeTestMethod(m, input); + } + } + return { + compile: async (_, files) => { + if (files.length !== 1) { + throw new Error("Compilation of multiple files is not implemented"); + } + return new TestProgram( + await compileJsModule(compileTsModule(files[0].content)), + this.patchedConsole + ); + }, + }; + } +} diff --git a/apps/ppp-sveltekit/src/lib/runtime/ts/test-worker.ts b/apps/ppp-sveltekit/src/lib/runtime/ts/test-worker.ts new file mode 100644 index 00000000..c484355a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ts/test-worker.ts @@ -0,0 +1,16 @@ +import { createContext } from "libs/context"; +import { startTestCompilerActor } from "libs/testing/actor"; + +import { TsTestCompilerFactory } from "./test-compiler-factory"; + +export interface TsTestWorkerConfig { + tsTestCompilerFactory: TsTestCompilerFactory; +} + +startTestCompilerActor( + createContext(), + (ctx, streams, factory) => + factory(ctx, { + tsTestCompilerFactory: new TsTestCompilerFactory(streams), + }) +); diff --git a/apps/ppp-sveltekit/src/lib/runtime/ts/worker.ts b/apps/ppp-sveltekit/src/lib/runtime/ts/worker.ts new file mode 100644 index 00000000..686aa1cb --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/runtime/ts/worker.ts @@ -0,0 +1,6 @@ +import { startCompilerActor } from "libs/compiler/actor"; +import { createContext } from 'libs/context'; + +import { makeTsCompiler } from "./compiler-factory"; + +startCompilerActor(createContext(), makeTsCompiler); diff --git a/apps/ppp-sveltekit/src/lib/storage.ts b/apps/ppp-sveltekit/src/lib/storage.ts new file mode 100644 index 00000000..db63716a --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/storage.ts @@ -0,0 +1,23 @@ +import type { SyncStorage } from "$lib/sync-storage.svelte"; + +export function createSyncStorage( + storage: Storage, + key: string, + defaultValue: T +): SyncStorage { + return { + load(): T { + const stored = storage.getItem(key); + if (stored === null) { + return defaultValue; + } + return JSON.parse(stored); + }, + save(data: T): void { + storage.setItem(key, JSON.stringify(data)); + }, + clear(): void { + storage.removeItem(key); + }, + }; +} diff --git a/apps/ppp-sveltekit/src/lib/sync-storage.svelte.ts b/apps/ppp-sveltekit/src/lib/sync-storage.svelte.ts new file mode 100644 index 00000000..e8ec8ae6 --- /dev/null +++ b/apps/ppp-sveltekit/src/lib/sync-storage.svelte.ts @@ -0,0 +1,29 @@ +export interface SyncStorage { + load(): T + save(data: T): void + clear(): void +} + +export function immediateSave(storage: SyncStorage, value: () => T) { + $effect(() => { + storage.save(value()); + }); +} + +export function debouncedSave( + storage: SyncStorage, + value: () => T, + debounce: number +) { + let callbackId: NodeJS.Timeout; + $effect(() => { + clearTimeout(callbackId); + const newValue = value(); + callbackId = setTimeout(() => { + storage.save(newValue); + }, debounce); + return () => { + clearTimeout(callbackId); + }; + }); +} diff --git a/apps/ppp-sveltekit/src/routes/+layout.svelte b/apps/ppp-sveltekit/src/routes/+layout.svelte new file mode 100644 index 00000000..ced0f0b7 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/+layout.svelte @@ -0,0 +1,26 @@ + + + + + + + + +
+ {#each locales as locale} + {locale} + {/each} +
+ +{@render children()} diff --git a/apps/ppp-sveltekit/src/routes/+page.svelte b/apps/ppp-sveltekit/src/routes/+page.svelte new file mode 100644 index 00000000..26dfc169 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/+page.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/ppp-sveltekit/src/routes/editor/+layout.svelte b/apps/ppp-sveltekit/src/routes/editor/+layout.svelte new file mode 100644 index 00000000..364789d8 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/+layout.svelte @@ -0,0 +1,9 @@ + + + diff --git a/apps/ppp-sveltekit/src/routes/editor/+layout.ts b/apps/ppp-sveltekit/src/routes/editor/+layout.ts new file mode 100644 index 00000000..a3d15781 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/+layout.ts @@ -0,0 +1 @@ +export const ssr = false; diff --git a/apps/ppp-sveltekit/src/routes/editor/+page.svelte b/apps/ppp-sveltekit/src/routes/editor/+page.svelte new file mode 100644 index 00000000..b7c512fb --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/+page.svelte @@ -0,0 +1,269 @@ + + +
+ + +
+ + + + + +
+ + + {#snippet preLabel(lang)} + {@const Icon = LANGUAGE_ICONS[lang]} + + {/snippet} + {#snippet label(lang)} + {LANGUAGE_TITLE[lang]} + {/snippet} + {#snippet postLabel(lang)} + { + describedLanguage = lang; + e.stopPropagation(); + descriptionDialogElement.showModal(); + }} + class="invisible group-hover:visible" + /> + {/snippet} + {#snippet children()} +
  • + + + GitHub + +
  • + {/snippet} +
    + +
    +
    + + +
    + + +
    +
    +
    +
    +
    + + + + e.stopPropagation()} +> + + + diff --git a/apps/ppp-sveltekit/src/routes/editor/_program.cs b/apps/ppp-sveltekit/src/routes/editor/_program.cs new file mode 100644 index 00000000..a547cbca --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/_program.cs @@ -0,0 +1,9 @@ +using System; + +public class Program +{ + public static void Main() + { + Console.WriteLine("Hello, World!"); + } +} diff --git a/apps/ppp-sveltekit/src/routes/editor/_program.gleam b/apps/ppp-sveltekit/src/routes/editor/_program.gleam new file mode 100644 index 00000000..3d3f3e04 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/_program.gleam @@ -0,0 +1,5 @@ +import gleam/io + +pub fn main() { + io.println("Hello, World!") +} diff --git a/apps/ppp-sveltekit/src/routes/editor/_program.go b/apps/ppp-sveltekit/src/routes/editor/_program.go new file mode 100644 index 00000000..16e2b22a --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/_program.go @@ -0,0 +1,5 @@ +package main + +func main() { + println("Hello, World!") +} diff --git a/apps/ppp-sveltekit/src/routes/editor/_program.java b/apps/ppp-sveltekit/src/routes/editor/_program.java new file mode 100644 index 00000000..a42f5de4 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/_program.java @@ -0,0 +1,5 @@ +class Program { + public static void main(String[] args) { + System.out.println("Hello, World!"); + } +} diff --git a/apps/ppp-sveltekit/src/routes/editor/_program.js b/apps/ppp-sveltekit/src/routes/editor/_program.js new file mode 100644 index 00000000..184dfcc9 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/_program.js @@ -0,0 +1 @@ +console.log("Hello, World!"); diff --git a/apps/ppp-sveltekit/src/routes/editor/_program.php b/apps/ppp-sveltekit/src/routes/editor/_program.php new file mode 100644 index 00000000..38d1be64 --- /dev/null +++ b/apps/ppp-sveltekit/src/routes/editor/_program.php @@ -0,0 +1,3 @@ +; +} + +export const RUNTIMES: Record = { + [Language.JavaScript]: { + initialValue: jsProgram, + compilerFactory: makeRemoteCompilerFactory(JsWorker), + }, + [Language.TypeScript]: { + initialValue: tsProgram, + compilerFactory: makeRemoteCompilerFactory(TsWorker), + }, + [Language.Python]: { + initialValue: pythonProgram, + compilerFactory: makeRemoteCompilerFactory(PythonWorker), + }, + [Language.PHP]: { + initialValue: phpProgram, + compilerFactory: makeRemoteCompilerFactory(PhpWorker), + }, + [Language.Go]: { + initialValue: goProgram, + compilerFactory: makeRemoteCompilerFactory(GoWorker), + }, + [Language.Rust]: { + initialValue: rustProgram, + compilerFactory: makeRemoteCompilerFactory(RustWorker), + }, + [Language.Gleam]: { + initialValue: gleamProgram, + compilerFactory: makeRemoteCompilerFactory(GleamWorker), + }, + [Language.CSharp]: { + initialValue: csProgram, + compilerFactory: makeRemoteCompilerFactory(DotnetWorker), + }, + [Language.Java]: { + initialValue: javaProgram, + compilerFactory: makeRemoteCompilerFactory(JavaWorker), + }, + [Language.Ruby]: { + initialValue: rubyProgram, + compilerFactory: makeRemoteCompilerFactory(RubyWorker), + }, +}; diff --git a/apps/ppp-sveltekit/static/robots.txt b/apps/ppp-sveltekit/static/robots.txt new file mode 100644 index 00000000..b6dd6670 --- /dev/null +++ b/apps/ppp-sveltekit/static/robots.txt @@ -0,0 +1,3 @@ +# allow crawling everything by default +User-agent: * +Disallow: diff --git a/apps/ppp-sveltekit/svelte.config.js b/apps/ppp-sveltekit/svelte.config.js new file mode 100644 index 00000000..118f4264 --- /dev/null +++ b/apps/ppp-sveltekit/svelte.config.js @@ -0,0 +1,20 @@ +import adapter from '@sveltejs/adapter-static'; +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + // Consult https://svelte.dev/docs/kit/integrations + // for more information about preprocessors + preprocess: vitePreprocess(), + kit: { + adapter: adapter({ + fallback: '404.html', + // assets: 'build/assets' + }), + paths: { + base: process.argv.includes('dev') ? '' : process.env.BASE_PATH + } + } +}; + +export default config; diff --git a/apps/ppp-sveltekit/tsconfig.json b/apps/ppp-sveltekit/tsconfig.json new file mode 100644 index 00000000..5a3b413e --- /dev/null +++ b/apps/ppp-sveltekit/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowImportingTsExtensions": true, + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // To make changes to top-level options such as include and exclude, we recommend extending + // the generated config; see https://svelte.dev/docs/kit/configuration#typescript +} diff --git a/apps/ppp-sveltekit/vite.config.ts b/apps/ppp-sveltekit/vite.config.ts new file mode 100644 index 00000000..e34a7fd8 --- /dev/null +++ b/apps/ppp-sveltekit/vite.config.ts @@ -0,0 +1,85 @@ +import { paraglideVitePlugin } from '@inlang/paraglide-js'; +import devtoolsJson from 'vite-plugin-devtools-json'; +import tailwindcss from '@tailwindcss/vite'; +import { defineConfig } from 'vitest/config'; +import { playwright } from '@vitest/browser-playwright'; +import { sveltekit } from '@sveltejs/kit/vite'; +import { viteStaticCopy } from 'vite-plugin-static-copy'; +import Icons from 'unplugin-icons/vite' + +export default defineConfig({ + worker: { + format: 'es' + }, + esbuild: { + target: 'es2022' + }, + // https://github.com/chaosprint/vite-plugin-cross-origin-isolation/issues/3#issuecomment-1126879870 + server: { + headers: { + 'Cross-Origin-Embedder-Policy': 'require-corp', + 'Cross-Origin-Opener-Policy': 'same-origin' + } + }, + build: { + rollupOptions: { + external: ['sharp'] + } + }, + // assetsInclude: ['**/*.wasm', '**/*.zip', '**/*.rlib', '**/*.so'], + assetsInclude: ['**/*.rlib', '**/*.so'], + plugins: [ + tailwindcss(), + sveltekit(), + Icons({ compiler: 'svelte' }), + devtoolsJson(), + paraglideVitePlugin({ + project: './project.inlang', + outdir: './src/lib/paraglide' + }), + viteStaticCopy({ + targets: [ + { + src: 'node_modules/gleam-runtime/dist/precompiled', + dest: 'assets', + rename: 'gleam' + }, + { + src: 'node_modules/dotnet-runtime/dist/compiler', + dest: 'assets/dotnet' + }, + { + src: 'node_modules/dotnet-runtime/dist/lib', + dest: 'assets/dotnet' + } + ] + }) + ], + test: { + expect: { requireAssertions: true }, + projects: [ + { + extends: './vite.config.ts', + test: { + name: 'client', + browser: { + enabled: true, + provider: playwright(), + instances: [{ browser: 'chromium', headless: true }] + }, + include: ['src/**/*.svelte.{test,spec}.{js,ts}'], + exclude: ['src/lib/server/**'] + } + }, + { + extends: './vite.config.ts', + test: { + name: 'server', + environment: 'node', + include: ['src/**/*.{test,spec}.{js,ts}'], + exclude: ['src/**/*.svelte.{test,spec}.{js,ts}'] + } + } + ] + } +}); diff --git a/mkfile b/mkfile index 44f01393..29e1b656 100644 --- a/mkfile +++ b/mkfile @@ -15,7 +15,7 @@ p: pnpm run preview app/: - pushd apps/ppp + pushd apps/ppp-sveltekit c: pnpm run check d: diff --git a/package.json b/package.json index 89c0b122..53982c43 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,10 @@ "patchedDependencies": { "browserfs@1.4.3": "patches/browserfs@1.4.3.patch", "doppiojvm@0.5.0": "patches/doppiojvm@0.5.0.patch" - } + }, + "onlyBuiltDependencies": [ + "esbuild", + "@tailwindcss/oxide" + ] } } \ No newline at end of file diff --git a/packages/go-runtime/public/compiler.wasm b/packages/go-runtime/public/compiler.wasm index ac0906f569b6380af5929f9d4f765b2cd4fdc66e..0d5a6069f0c238ac6b664c1cc1c8fc4aa271389b 100755 GIT binary patch literal 133 zcmWN?OA^8$3;@u5Pr(H&pAbTOo1_q7Mr}uG7oJ|<=3VtY`u;NQJdd$jd++D%p=18v zJ~D6n(~hHV_VUx-iy4grrqv-TBa!IhDCH`J!h)WJSyWO4grZ8SL6QeZ%;bd-n9*y- OFpd7LCOQZ?N0@$VOei-1 literal 40328843 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

    4Ns#C9`jag6mU;5us`@) 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%0D&YhFJ{JFvbxI>dAy3s3_4#2Gf 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