├── .envrc ├── .gitmodules ├── .github ├── screenshot.png └── workflows │ └── static.yml ├── playground ├── public │ └── favicon.ico ├── postcss.config.cjs ├── src │ ├── vite-env.d.ts │ ├── assets │ │ ├── native │ │ │ ├── wasm4-toywasm-linux.exe │ │ │ ├── wasm4-toywasm-macos.exe │ │ │ └── wasm4-toywasm-windows.exe │ │ ├── windows.svg │ │ ├── html5.svg │ │ ├── macos.svg │ │ ├── wasm.svg │ │ ├── asm.svg │ │ ├── logo.svg │ │ └── linux.svg │ ├── main.ts │ ├── app.css │ ├── worker.ts │ ├── compiler_types.ts │ ├── templates │ │ ├── hello.rol │ │ ├── wasm4.rol │ │ ├── runner.rol │ │ └── snake.ts │ ├── Playground.svelte │ ├── compilers.ts │ ├── components │ │ ├── Download.svelte │ │ ├── Preview.svelte │ │ ├── Editor.svelte │ │ └── Wasm4Game.svelte │ ├── bundle.ts │ ├── utils.ts │ └── App.svelte ├── tsconfig.node.json ├── tailwind.config.cjs ├── svelte.config.js ├── index.html ├── tsconfig.json ├── vite.config.ts ├── package.json └── pnpm-lock.yaml ├── shell.nix ├── Makefile ├── README.md ├── LICENSE └── .gitignore /.envrc: -------------------------------------------------------------------------------- 1 | use nix -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "wasm4"] 2 | path = wasm4 3 | url = https://github.com/aduros/wasm4 4 | -------------------------------------------------------------------------------- /.github/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grantshandy/wasm4-playground/HEAD/.github/screenshot.png -------------------------------------------------------------------------------- /playground/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grantshandy/wasm4-playground/HEAD/playground/public/favicon.ico -------------------------------------------------------------------------------- /playground/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /playground/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | declare const WASM4_GAMEDEV_MODE: boolean -------------------------------------------------------------------------------- /playground/src/assets/native/wasm4-toywasm-linux.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grantshandy/wasm4-playground/HEAD/playground/src/assets/native/wasm4-toywasm-linux.exe -------------------------------------------------------------------------------- /playground/src/assets/native/wasm4-toywasm-macos.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grantshandy/wasm4-playground/HEAD/playground/src/assets/native/wasm4-toywasm-macos.exe -------------------------------------------------------------------------------- /playground/src/assets/native/wasm4-toywasm-windows.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/grantshandy/wasm4-playground/HEAD/playground/src/assets/native/wasm4-toywasm-windows.exe -------------------------------------------------------------------------------- /playground/src/main.ts: -------------------------------------------------------------------------------- 1 | import "./app.css"; 2 | import App from "./App.svelte"; 3 | 4 | const app = new App({ 5 | target: document.getElementById("app"), 6 | }); 7 | 8 | export default app; 9 | -------------------------------------------------------------------------------- /playground/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node" 6 | }, 7 | "include": ["vite.config.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- 1 | let 2 | nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.11"; 3 | pkgs = import nixpkgs { }; 4 | in pkgs.mkShellNoCC { 5 | packages = with pkgs; [ pnpm nodejs esbuild wine64 wine64Packages.wayland ]; 6 | } -------------------------------------------------------------------------------- /playground/tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./index.html", "./src/**/*.svelte"], 4 | plugins: [require("daisyui")], 5 | daisyui: { 6 | themes: ["light"], 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /playground/svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' 2 | 3 | export default { 4 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess 5 | // for more information about preprocessors 6 | preprocess: vitePreprocess(), 7 | } 8 | -------------------------------------------------------------------------------- /playground/src/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | .gamecanvas { 6 | @apply w-full rounded-tr-md rounded-tl-md md:rounded-md; 7 | image-rendering: pixelated; 8 | image-rendering: crisp-edges; 9 | } 10 | 11 | a { 12 | @apply underline; 13 | } -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | cd wasm4/cli && pnpm install && pnpm run package && cd - 3 | mkdir playground/src/assets/build && cp wasm4/cli-build/* playground/src/assets/build/ 4 | cd wasm4/devtools/web && pnpm install && pnpm run build && cd - 5 | cd wasm4/runtimes/web && pnpm install && npx pnpm run build && cd - 6 | cd playground/ && pnpm install && pnpm run build && cd - 7 | -------------------------------------------------------------------------------- /playground/src/worker.ts: -------------------------------------------------------------------------------- 1 | import { Language, type Source } from "./compiler_types"; 2 | import { compileAsm, compileRol } from "./compilers"; 3 | 4 | self.onmessage = async (event: MessageEvent) => { 5 | const compiler = event.data.lang == Language.AssemblyScript ? compileAsm : compileRol; 6 | const result = await compiler(event.data.text); 7 | self.postMessage(result); 8 | } -------------------------------------------------------------------------------- /playground/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | WASM-4 Playground 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | -------------------------------------------------------------------------------- /playground/src/assets/windows.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # wasm4-playground 2 | 3 | Write retro video games in AssemblyScript. 4 | [Visit](https://grantshandy.github.io/wasm4-playground)! 5 | 6 | ![screenshot](./.github/screenshot.png) 7 | 8 |
9 | 10 | Note that this repository contains submodules, so in order to clone and build you must use: 11 | ``` 12 | $ git clone --recurse-submodules https://github.com/grantshandy/wasm4-playground 13 | $ cd wasm4-playground/ && make 14 | ``` 15 | -------------------------------------------------------------------------------- /playground/src/compiler_types.ts: -------------------------------------------------------------------------------- 1 | export type GameArtifact = { 2 | wasm: Uint8Array; 3 | wat: string | null; 4 | }; 5 | 6 | export type ErrorMessage = string; 7 | export type Loading = boolean; 8 | export type CompilationState = GameArtifact | ErrorMessage | Loading | null; 9 | 10 | export enum Language { 11 | AssemblyScript = "ts", 12 | Roland = "rol", 13 | }; 14 | 15 | export type Source = { 16 | text: string; 17 | lang: Language; 18 | }; 19 | -------------------------------------------------------------------------------- /playground/src/assets/html5.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /playground/src/templates/hello.rol: -------------------------------------------------------------------------------- 1 | static SMILEY: [u8; 8] = [ 2 | 0b11000011, 3 | 0b10000001, 4 | 0b00100100, 5 | 0b00100100, 6 | 0b00000000, 7 | 0b00100100, 8 | 0b10011001, 9 | 0b11000011, 10 | ]; 11 | 12 | proc update() { 13 | DRAW_COLORS~ = 2; 14 | text("Hello from Roland!", 10, 10); 15 | 16 | if GAMEPADS~[0] & BUTTON_1 != 0 { 17 | DRAW_COLORS~ = 4; 18 | } 19 | 20 | blit(&SMILEY[0], 76, 76, 8, 8, BLIT_1BPP); 21 | text("Press X to blink", 16, 90); 22 | } 23 | -------------------------------------------------------------------------------- /playground/src/assets/macos.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /playground/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | "compilerOptions": { 4 | "target": "ESNext", 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "resolveJsonModule": true, 8 | /** 9 | * Typecheck JS in `.svelte` and `.js` files by default. 10 | * Disable checkJs if you'd like to use dynamic types in JS. 11 | * Note that setting allowJs false does not prevent the use 12 | * of JS in `.svelte` files. 13 | */ 14 | "allowJs": true, 15 | "checkJs": true, 16 | "isolatedModules": true 17 | }, 18 | "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], 19 | "references": [{ "path": "./tsconfig.node.json" }] 20 | } 21 | -------------------------------------------------------------------------------- /playground/src/assets/wasm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /playground/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import { svelte } from "@sveltejs/vite-plugin-svelte"; 3 | import topLevelAwait from "vite-plugin-top-level-await"; 4 | import wasm from "vite-plugin-wasm"; 5 | 6 | // https://vitejs.dev/config/ 7 | export default defineConfig({ 8 | base: process.env.NODE_ENV === "production" ? "/wasm4-playground/" : "./", 9 | plugins: [ 10 | svelte(), 11 | topLevelAwait({ 12 | // The export name of top-level await promise for each chunk module 13 | promiseExportName: "__tla", 14 | // The function to generate import names of top-level await promise in each chunk module 15 | promiseImportName: (i: any) => `__tla_${i}`, 16 | }), 17 | wasm(), 18 | ], 19 | optimizeDeps: { 20 | exclude: [ 21 | "rolandc_wasm", 22 | ], 23 | }, 24 | define: { 25 | WASM4_GAMEDEV_MODE: "true", 26 | }, 27 | worker: { 28 | format: "es", 29 | }, 30 | build: { 31 | rollupOptions: { 32 | output: { 33 | format: "esm", 34 | }, 35 | }, 36 | }, 37 | }); 38 | -------------------------------------------------------------------------------- /playground/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wasm4-playground", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "check": "svelte-check --tsconfig ./tsconfig.json" 11 | }, 12 | "devDependencies": { 13 | "@sveltejs/vite-plugin-svelte": "^2.0.0", 14 | "@tsconfig/svelte": "^3.0.0", 15 | "autoprefixer": "^10.4.13", 16 | "daisyui": "^4.12.23", 17 | "postcss": "^8.4.21", 18 | "svelte": "^3.59.2", 19 | "svelte-check": "^2.10.0", 20 | "tailwindcss": "^3.2.4", 21 | "tslib": "^2.4.1", 22 | "typescript": "^4.9.3", 23 | "vite": "^4.0.0", 24 | "vite-plugin-top-level-await": "^1.2.2", 25 | "vite-plugin-wasm": "^3.1.1" 26 | }, 27 | "dependencies": { 28 | "@codemirror/lang-javascript": "^6.1.2", 29 | "@codemirror/lang-wast": "^6.0.1", 30 | "assemblyscript": "^0.21.3", 31 | "buffer": "^6.0.3", 32 | "is-mobile": "^3.1.1", 33 | "lz-string": "^1.4.4", 34 | "rolandc_wasm": "0.1.1", 35 | "svelte-codemirror-editor": "^1.4.0" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Grant Handy 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /playground/src/Playground.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 | {#if isError($gameResult)} 17 | 33 | {/if} 34 | 35 |
36 | 37 | 38 |
39 | 40 |
41 | -------------------------------------------------------------------------------- /playground/src/assets/asm.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.github/workflows/static.yml: -------------------------------------------------------------------------------- 1 | # Simple workflow for deploying static content to GitHub Pages 2 | name: Deploy static content to Pages 3 | 4 | on: 5 | # Runs on pushes targeting the default branch 6 | push: 7 | branches: ["main"] 8 | 9 | # Allows you to run this workflow manually from the Actions tab 10 | workflow_dispatch: 11 | 12 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 13 | permissions: 14 | contents: write 15 | pages: write 16 | id-token: write 17 | 18 | # Allow one concurrent deployment 19 | concurrency: 20 | group: "pages" 21 | cancel-in-progress: true 22 | 23 | jobs: 24 | # Single deploy job since we're just deploying 25 | deploy: 26 | environment: 27 | name: github-pages 28 | url: ${{ steps.deployment.outputs.page_url }} 29 | runs-on: ubuntu-latest 30 | steps: 31 | - name: Checkout 32 | uses: actions/checkout@v3 33 | with: 34 | submodules: recursive 35 | 36 | - name: Setup Pages 37 | uses: actions/configure-pages@v2 38 | 39 | - uses: pnpm/action-setup@v4 40 | with: 41 | version: 9 42 | 43 | - name: Install esbuild 44 | run: npm install -g esbuild 45 | 46 | - name: Build Site 47 | run: make 48 | 49 | - name: Upload artifacts 50 | uses: s0/git-publish-subdir-action@develop 51 | env: 52 | REPO: self 53 | BRANCH: site 54 | FOLDER: playground/dist 55 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 56 | -------------------------------------------------------------------------------- /playground/src/compilers.ts: -------------------------------------------------------------------------------- 1 | import initRoland, { compile_wasm4 } from "rolandc_wasm"; 2 | import asHeader from "../../wasm4/cli/assets/templates/assemblyscript/src/wasm4?raw"; 3 | 4 | import { type GameArtifact } from "./compiler_types"; 5 | 6 | export const compileAsm = async (srcText: string): Promise => 7 | import("assemblyscript/dist/asc") 8 | .then((asc) => asc.compileString( 9 | { 10 | "main.ts": srcText, 11 | "wasm4.ts": asHeader 12 | }, 13 | { 14 | runtime: "incremental", 15 | importMemory: true, 16 | initialMemory: 1, 17 | maximumMemory: 1, 18 | noExportMemory: true, 19 | zeroFilledMemory: true, 20 | memoryBase: 6560, 21 | use: ["seed=wasm4/seedHandler", "abort=wasm4/abortHandler", "trace="], 22 | optimizeLevel: 3, 23 | shrinkLevel: 2, 24 | converge: true, 25 | noAssert: true, 26 | debug: false, 27 | 28 | }, 29 | )) 30 | .then((result: any) => { 31 | if (result.error) { 32 | return `${result.error.message}: ${result.stderr.toString()}`; 33 | } 34 | 35 | return { wasm: result.binary, wat: result.text }; 36 | }); 37 | 38 | 39 | let init = false; 40 | export const compileRol = async (srcText: string): Promise => { 41 | if (!init) { 42 | await initRoland(); 43 | init = true; 44 | } 45 | 46 | try { 47 | return { 48 | wasm: compile_wasm4(srcText), 49 | wat: null, 50 | }; 51 | } catch (msg) { 52 | return `Error compiling roland: '${msg}''`; 53 | } 54 | }; -------------------------------------------------------------------------------- /playground/src/components/Download.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 | {#if isSuccess($gameResult)} 13 | Download: 14 |
15 | 22 | 29 | 36 | 43 |
44 | {/if} 45 |
46 | 47 | 52 | -------------------------------------------------------------------------------- /playground/src/components/Preview.svelte: -------------------------------------------------------------------------------- 1 | 31 | 32 |
33 |
34 |

Game Preview

35 | 36 | 42 |
43 | 44 |
45 | {#if isSuccess($gameResult)} 46 | 47 | {/if} 48 |
49 | 50 |
51 | 59 | 62 |
63 | 64 |
65 |
66 |
67 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | 106 | .direnv 107 | -------------------------------------------------------------------------------- /playground/src/bundle.ts: -------------------------------------------------------------------------------- 1 | /// adapted from wasm4/cli/lib/bundle.js 2 | 3 | import { type GameArtifact } from "./utils"; 4 | import { Buffer } from "buffer"; 5 | 6 | import linuxUrl from "./assets/native/wasm4-toywasm-linux.exe?url"; 7 | import windowsUrl from "./assets/native/wasm4-toywasm-windows.exe?url"; 8 | import macosUrl from "./assets/native/wasm4-toywasm-macos.exe?url"; 9 | 10 | export enum OS { Linux, Windows, MacOS } 11 | 12 | let linuxExe: Uint8Array | null = null; 13 | let windowsExe: Uint8Array | null = null; 14 | let macosExe: Uint8Array | null = null; 15 | 16 | const downloadBytes = (url: string): Promise => 17 | fetch(url) 18 | .then((r) => r.blob()) 19 | .then((b) => b.arrayBuffer()) 20 | .then((a) => new Uint8Array(a)); 21 | 22 | const getNativeExe = async (os: OS): Promise => { 23 | switch (os) { 24 | case OS.Linux: 25 | if (!linuxExe) linuxExe = await downloadBytes(linuxUrl); 26 | return linuxExe; 27 | 28 | case OS.Windows: 29 | if (!windowsExe) windowsExe = await downloadBytes(windowsUrl); 30 | return windowsExe; 31 | 32 | case OS.MacOS: 33 | if (!macosExe) macosExe = await downloadBytes(macosUrl); 34 | return macosExe; 35 | 36 | default: 37 | return new Uint8Array(); 38 | }; 39 | }; 40 | 41 | export const downloadBundle = async (os: OS, cart: GameArtifact): Promise => { 42 | const nativeExe = await getNativeExe(os); 43 | 44 | // FileFooter metadata for the native runtime to read 45 | const metaFooter = Buffer.alloc(136); 46 | metaFooter.writeInt32LE(1414676803, 0); // magic 47 | metaFooter.write("Made with wasm4-playground", 4, 127); // title 48 | metaFooter.writeInt32LE(cart.wasm.length, 132); // cartLength 49 | 50 | const executable = Buffer.concat([nativeExe, cart.wasm, metaFooter]); 51 | 52 | let filename = "wasm4-game"; 53 | if (os == OS.Windows) filename += ".exe"; 54 | 55 | const link = document.createElement("a"); 56 | link.download = filename; 57 | link.href = window.URL.createObjectURL( 58 | new Blob([executable], { type: "application/executable" }), 59 | ); 60 | link.click(); 61 | }; -------------------------------------------------------------------------------- /playground/src/utils.ts: -------------------------------------------------------------------------------- 1 | import LzString from "lz-string"; 2 | import { writable, type Writable } from "svelte/store"; 3 | import CompilerWorker from "./worker?worker"; 4 | 5 | import roMain from "./templates/hello.rol?raw" 6 | import asMain from "../../wasm4/cli/assets/templates/assemblyscript/src/main?raw"; 7 | 8 | import { type CompilationState, type ErrorMessage, type GameArtifact, Language, type Loading, type Source } from "./compiler_types"; 9 | export * from "./compiler_types"; 10 | 11 | // export type { CompilationState, ErrorMessage, GameArtifact, Loading, Source }; 12 | 13 | export const isError = (g: CompilationState): g is ErrorMessage => 14 | g != null && typeof (g) == "string"; 15 | export const isSuccess = (g: CompilationState): g is GameArtifact => 16 | g != null && typeof (g) == "object" && g.wasm.length > 0; 17 | export const isLoading = (g: CompilationState): g is Loading => 18 | g != null && typeof (g) == "boolean" && g == true; 19 | 20 | export const gameResult: Writable = writable(null); 21 | 22 | const compiler = new CompilerWorker(); 23 | 24 | /// Compiles language-generic source code into wasm and .wat. 25 | /// Errors are written to the `error` store. 26 | export const compileGame = async (): Promise => { 27 | let src: Source; 28 | source.update((s) => { 29 | src = s; 30 | return s; 31 | }); 32 | 33 | // start "loading" 34 | gameResult.update((_) => true); 35 | 36 | const p = new Promise((resolve) => { 37 | compiler.onmessage = (ev) => resolve(ev.data); 38 | }); 39 | compiler.postMessage(src); 40 | const r = await p; 41 | 42 | gameResult.update((_) => r); 43 | }; 44 | 45 | 46 | /** 47 | * Gets the current source code from (in order of priority) 48 | * - Share URL 49 | * - Local Storage (previous visits) 50 | * - Default hello world for param lang 51 | */ 52 | export const getSourceOrDefault = (lang?: Language): Source => { 53 | const sp = new URL(window.location.href.replace(/#/g, "?")).searchParams; 54 | 55 | if (!lang) lang = sp.get(Language.Roland) 56 | ? Language.Roland 57 | : Language.AssemblyScript; 58 | 59 | const text: string = 60 | LzString.decompressFromEncodedURIComponent(sp.get(lang)) || 61 | LzString.decompressFromBase64(localStorage.getItem(lang)) || 62 | (lang == Language.AssemblyScript ? asMain : roMain); 63 | 64 | return { lang, text }; 65 | } 66 | 67 | export const source: Writable = writable(getSourceOrDefault()); 68 | 69 | source.subscribe((src) => localStorage.setItem(src.lang, LzString.compressToBase64(src.text))); -------------------------------------------------------------------------------- /playground/src/templates/wasm4.rol: -------------------------------------------------------------------------------- 1 | import "shared.rol"; 2 | 3 | // |-- WASM4 4 | // drawing 5 | extern proc blit(sprite_ptr: &u8, x: i32, y: i32, width: u32, height: u32, flags: u32); 6 | extern proc blitSub(sprite_ptr: &u8, x: i32, y: i32, width: u32, height: u32, src_x: i32, src_y: i32, stride: u32, flags: u32); 7 | extern proc line(x1: i32, y1: i32, x2: i32, y2: i32); 8 | extern proc hline(x: i32, y: i32, len: i32); 9 | extern proc vline(x: i32, y: i32, len: i32); 10 | extern proc oval(x: i32, y: i32, width: u32, height: u32); 11 | extern proc rect(x: i32, y: i32, width: u32, height: u32); 12 | extern proc textUtf8(str_pointer: &u8, str_length: usize, x: i32, y: i32); 13 | 14 | const BLIT_2BPP: u32 = 1; 15 | const BLIT_1BPP: u32 = 0; 16 | const BLIT_FLIP_X: u32 = 2; 17 | const BLIT_FLIP_Y: u32 = 4; 18 | const BLIT_ROTATE: u32 = 8; 19 | 20 | // debug 21 | extern proc traceUtf8(str_pointer: &u8, str_length: usize); 22 | 23 | // audio 24 | extern proc tone(frequency: u32, duration: u32, volume: u32, flags: u32); 25 | 26 | const TONE_PULSE1: u32 = 0; 27 | const TONE_PULSE2: u32 = 1; 28 | const TONE_TRIANGLE: u32 = 2; 29 | const TONE_NOISE: u32 = 3; 30 | const TONE_MODE1: u32 = 0; 31 | const TONE_MODE2: u32 = 4; 32 | const TONE_MODE3: u32 = 8; 33 | const TONE_MODE4: u32 = 12; 34 | const TONE_PAN_LEFT: u32 = 16; 35 | const TONE_PAN_RIGHT: u32 = 32; 36 | 37 | // disk 38 | extern proc diskr(dest_ptr: &u8, size: usize) -> usize; 39 | extern proc diskw(src_ptr: &u8, size: usize) -> usize; 40 | 41 | // misc. constants 42 | const PALETTE: &[u32; 4] = 0x04 transmute &[u32; 4]; 43 | const DRAW_COLORS: &u16 = 0x14 transmute &u16; 44 | const GAMEPADS: &[u8; 4] = 0x16 transmute &[u8; 4]; 45 | const MOUSE_X: &i16 = 0x1a transmute &i16; 46 | const MOUSE_Y: &i16 = 0x1c transmute &i16; 47 | const MOUSE_BUTTONS: &u8 = 0x1e transmute &u8; 48 | const SYSTEM_FLAGS: &u8 = 0x1f transmute &u8; 49 | const NETPLAY: &u8 = 0x20 transmute &u8; 50 | const FRAMEBUFFER: &[u8; 6400] = 0xa0 transmute &[u8; 6400]; 51 | 52 | const BUTTON_1: u8 = 1; 53 | const BUTTON_2: u8 = 2; 54 | const BUTTON_LEFT: u8 = 16; 55 | const BUTTON_RIGHT: u8 = 32; 56 | const BUTTON_UP: u8 = 64; 57 | const BUTTON_DOWN: u8 = 128; 58 | 59 | const MOUSE_LEFT: u8 = 1; 60 | const MOUSE_RIGHT: u8 = 2; 61 | const MOUSE_MIDDLE: u8 = 4; 62 | 63 | const SYSTEM_PRESERVE_FRAMEBUFFER: u8 = 1; 64 | const SYSTEM_HIDE_GAMEPAD_OVERLAY: u8 = 2; 65 | // --| 66 | 67 | proc blit_sub(sprite_ptr: &u8, x: i32, y: i32, width: u32, height: u32, src_x: i32, src_y: i32, stride: u32, flags: u32) { 68 | blitSub(sprite_ptr, x, y, width, height, src_x, src_y, stride, flags); 69 | } 70 | 71 | proc text(txt: String, x: i32, y: i32) { 72 | textUtf8(txt.pointer, txt.length, x, y); 73 | } 74 | 75 | proc trace(txt: String) { 76 | traceUtf8(txt.pointer, txt.length); 77 | } -------------------------------------------------------------------------------- /playground/src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 47 | 49 | 55 | 56 | web-assembly-icon 58 | 61 | 64 | 66 | 71 | 75 | 76 | 77 | 78 | 84 | 91 | 98 | 104 | 105 | -------------------------------------------------------------------------------- /playground/src/assets/linux.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /playground/src/App.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 |
18 |
19 |

WASM-4 Playground

20 | wasm4 icon 26 | 27 |
28 |

29 | Create and share WASM-4 retro games in your 30 | web browser. 31 |

32 |
33 | 34 |
35 | 36 | {#if playground} 37 |
38 | 39 |
40 | {:else} 41 |
42 | 43 |
44 | {/if} 45 | 46 |
47 | 48 |
49 |

FAQ

50 | 51 |
52 |

What is WASM-4?

53 |

54 | WASM-4 is a retro game "console" that 55 | runs its games as 56 | webassembly files which allows games 57 | to be written in almost any programming language. 58 |

59 |
60 | 61 |
62 |

What programming language is this?

63 | 64 |
65 |
66 |

67 | AssemblyScript 68 |

69 |

70 | A compiled variant of Typescript that targets WebAssembly. 73 |

74 |
75 | 76 |
77 |

78 | Roland 79 |

80 |

81 | Roland is a work-in-progress programming language similar to Rust. 82 |

83 |
84 |
85 |
86 | 87 |
88 |

89 | What functions do I have access to? 90 |

91 |

92 | Programs are compiled with the standard library and link against 93 | WASM-4's header file, which you can view by clicking the 94 | wasm4 icon 99 | icon. 100 |

101 |
102 | 103 |

104 | Donate ∙ 105 | Source 106 |

107 |

108 | 109 | WASM-4 Logo and Runtime © Bruno Garcia 110 | 111 | ∙ 112 | 115 | Site and Editor © Grant Handy 116 | 117 |

118 |
119 |
120 | -------------------------------------------------------------------------------- /playground/src/templates/runner.rol: -------------------------------------------------------------------------------- 1 | static GAME_OVER: bool = ___; 2 | static PLAYER_X: f64 = ___; 3 | static PLAYER_Y: f64 = ___; 4 | static FORWARD_SPEED: f64 = ___; 5 | static JUMP_SPEED: f64 = ___; 6 | static JUMP_STATE: JumpState = ___; 7 | static RNG: u64 = ___; 8 | static OBSTACLES: [Obstacle; 2] = ___; 9 | static SCORE_BUF: [u8; 10] = ___; 10 | static TIME_DEAD: u64 = ___; 11 | 12 | const OBSTACLE_COUNT: usize = 2; 13 | 14 | struct Obstacle { 15 | x: f64, 16 | y: f64, 17 | } 18 | 19 | enum JumpState { 20 | Standing, 21 | Jumping, 22 | Falling, 23 | } 24 | 25 | proc rand() -> u64 { 26 | RNG = RNG ^ (RNG << 13); 27 | RNG = RNG ^ (RNG >> 7); 28 | RNG = RNG ^ (RNG << 17); 29 | return RNG; 30 | } 31 | 32 | proc rand_range(rand_min: u64, rand_max: u64) -> u64 { 33 | return rand() % (rand_max + 1 - rand_min) + rand_min; 34 | } 35 | 36 | proc one_in(x: u64) -> bool { 37 | return rand_range(0, x - 1) == 0; 38 | } 39 | 40 | proc rectangles_collide(x1: f64, y1: f64, width1: f64, height1: f64, x2: f64, y2: f64, width2: f64, height2: f64) -> bool { 41 | return 42 | (x2 + width2 > x1) & 43 | (y2 + height2 > y1) & 44 | (x1 + width1 > x2) & 45 | (y1 + height1 > y2); 46 | } 47 | 48 | proc reset_game() { 49 | GAME_OVER = false; 50 | TIME_DEAD = 0; 51 | PLAYER_X = 0.0; 52 | PLAYER_Y = 0.0; 53 | FORWARD_SPEED = 1.2; 54 | JUMP_SPEED = 0.0; 55 | JUMP_STATE = JumpState::Standing; 56 | RNG = 2; 57 | for i in 0..OBSTACLE_COUNT { 58 | OBSTACLES[i] = Obstacle { 59 | x: -100.0, 60 | y: -100.0, 61 | }; 62 | } 63 | } 64 | 65 | proc start() { 66 | PALETTE~ = [16774867, 16361589, 15428463, 8142680]; 67 | SYSTEM_FLAGS~ = SYSTEM_HIDE_GAMEPAD_OVERLAY; 68 | reset_game(); 69 | } 70 | 71 | proc update() { 72 | if GAME_OVER { 73 | TIME_DEAD = TIME_DEAD + 1; 74 | } 75 | 76 | // Move player forward 77 | if FORWARD_SPEED < 5.0 and !GAME_OVER { 78 | FORWARD_SPEED = FORWARD_SPEED + 0.001; 79 | } 80 | PLAYER_X = PLAYER_X + FORWARD_SPEED; 81 | 82 | // Handle input 83 | let button_pressed = (GAMEPADS~[0] & BUTTON_1) > 0; 84 | let mouse_pressed = (MOUSE_BUTTONS~ & MOUSE_LEFT) > 0; 85 | if (button_pressed | mouse_pressed) and JUMP_STATE == JumpState::Standing and !GAME_OVER { 86 | JUMP_STATE = JumpState::Jumping; 87 | JUMP_SPEED = 10.0; 88 | tone(300 | (800 << 16), 6, 50, TONE_MODE1); 89 | } else if (button_pressed | mouse_pressed) and TIME_DEAD >= 5 { 90 | reset_game(); 91 | return; 92 | } 93 | 94 | // Do jumping 95 | { 96 | if JUMP_STATE == JumpState::Jumping { 97 | JUMP_SPEED = JUMP_SPEED - 1.0; 98 | PLAYER_Y = PLAYER_Y + JUMP_SPEED; 99 | if (JUMP_SPEED <= 0.0) { 100 | JUMP_SPEED = 0.0; 101 | JUMP_STATE = JumpState::Falling; 102 | } 103 | } else if JUMP_STATE == JumpState::Falling { 104 | JUMP_SPEED = JUMP_SPEED + 0.3; 105 | PLAYER_Y = PLAYER_Y - JUMP_SPEED; 106 | if PLAYER_Y <= 0.0 { 107 | PLAYER_Y = 0.0; 108 | JUMP_STATE = JumpState::Standing; 109 | } 110 | } 111 | } 112 | 113 | // Spawn new obstacles 114 | { 115 | let intended_position = PLAYER_X + 200.0; 116 | 117 | let obstacles_too_close = false; 118 | for i in 0..OBSTACLE_COUNT { 119 | obstacles_too_close = obstacles_too_close | ((intended_position - OBSTACLES[i].x) < 50.0); 120 | } 121 | 122 | if one_in(100) { 123 | if !(OBSTACLES[0].x >= (PLAYER_X - 20.0)) and !obstacles_too_close { 124 | OBSTACLES[0].x = intended_position; 125 | OBSTACLES[0].y = 0.0; 126 | } 127 | } 128 | 129 | if one_in(100) { 130 | if !(OBSTACLES[1].x >= (PLAYER_X - 20.0)) and !obstacles_too_close { 131 | OBSTACLES[1].x = intended_position; 132 | OBSTACLES[1].y = 0.0; 133 | } 134 | } 135 | } 136 | 137 | // Die 138 | for i in 0..OBSTACLE_COUNT { 139 | if rectangles_collide(PLAYER_X, PLAYER_Y, 10.0, 20.0, OBSTACLES[i].x, OBSTACLES[i].y, 10.0, 10.0) { 140 | text("GAME OVER.", 5, 30); 141 | text("Jump to restart.", 5, 50); 142 | GAME_OVER = true; 143 | FORWARD_SPEED = 0.0; 144 | JUMP_STATE = JumpState::Standing; 145 | } 146 | } 147 | 148 | // Draw world 149 | { 150 | // Always keep camera centered 151 | let camera_offset_x = PLAYER_X - 10.0; 152 | let camera_offset_y: f64 = -140.0; 153 | 154 | // Draw player 155 | rect((PLAYER_X - camera_offset_x) truncate i32, (-PLAYER_Y - camera_offset_y) truncate i32, 10, 20); 156 | 157 | // Draw obstacles 158 | for i in 0..OBSTACLE_COUNT { 159 | rect((OBSTACLES[i].x - camera_offset_x) truncate i32, (-OBSTACLES[i].y - camera_offset_y + 10.0) truncate i32, 10, 10); 160 | } 161 | } 162 | 163 | // Draw UI 164 | { 165 | text("SCORE: ", 2, 2); 166 | text(int_to_string((PLAYER_X / 10.0) truncate u32, &SCORE_BUF), 47, 2); 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /playground/src/components/Editor.svelte: -------------------------------------------------------------------------------- 1 | 37 | 38 |
39 |
40 |

Text Editor

41 | 42 |
43 | {#if isLoading($gameResult)} 44 | 45 | {/if} 46 | Save 53 | 56 |
57 |
58 | 59 |
60 | {#if view != View.Code} 61 | 72 | {:else} 73 | 77 | {/if} 78 |
79 | 80 |
81 |
84 | 100 | 101 | 112 | 113 | {#if isSuccess($gameResult) && $gameResult?.wat != null} 114 | 125 | {/if} 126 |
127 | 128 |
129 | 134 | 139 |
140 |
141 |
142 | -------------------------------------------------------------------------------- /playground/src/templates/snake.ts: -------------------------------------------------------------------------------- 1 | import * as w4 from "./wasm4"; 2 | 3 | const TILE_SIZE: u8 = 8; 4 | const GAME_SIZE: u8 = u8(w4.SCREEN_SIZE / TILE_SIZE); 5 | const MOVE_DURATION_FRAMES: u8 = 12; 6 | 7 | store(w4.PALETTE, 0xe0f8cf, 0 * sizeof()); // light 8 | store(w4.PALETTE, 0x7c3f58, 1 * sizeof()); // red 9 | store(w4.PALETTE, 0x306850, 2 * sizeof()); // dark 10 | store(w4.PALETTE, 0x86c06c, 3 * sizeof()); // green 11 | 12 | let game = new Game(); 13 | 14 | export function update(): void { 15 | if (game.isGameOver()) { 16 | const gamepad = load(w4.GAMEPAD1); 17 | if (gamepad & w4.BUTTON_1) { 18 | game = new Game(); 19 | } 20 | } 21 | game.update(); 22 | game.draw(); 23 | } 24 | 25 | class Game { 26 | private readonly snake: Snake = new Snake(); 27 | private fruit: Fruit = this.placeFruit(); 28 | 29 | private score: u16 = 0; 30 | private gameover: boolean = false; 31 | 32 | private previousGamepad: u8 = 0; 33 | private moveDelay: u8 = 0 34 | 35 | update(): void { 36 | if (this.gameover) { 37 | return; 38 | } 39 | 40 | this.gamepadControl(); 41 | 42 | if (this.moveDelay > 0) { 43 | this.moveDelay--; 44 | return; 45 | } 46 | this.moveDelay = MOVE_DURATION_FRAMES; 47 | 48 | this.moveSnake(); 49 | 50 | this.checkCollisions(); 51 | } 52 | 53 | draw(): void { 54 | this.fruit.draw(); 55 | this.snake.draw(); 56 | 57 | this.drawWalls(); 58 | this.drawStats(); 59 | } 60 | 61 | isGameOver(): boolean { 62 | return this.gameover; 63 | } 64 | 65 | private gamepadControl(): void { 66 | const gamepad = load(w4.GAMEPAD1); 67 | const pressed = gamepad & (gamepad ^ this.previousGamepad); 68 | this.previousGamepad = gamepad; 69 | 70 | if (pressed & w4.BUTTON_RIGHT) { 71 | this.snake.turn(Direction.RIGHT); 72 | } 73 | else if (pressed & w4.BUTTON_LEFT) { 74 | this.snake.turn(Direction.LEFT); 75 | } 76 | else if (pressed & w4.BUTTON_UP) { 77 | this.snake.turn(Direction.UP); 78 | } 79 | else if (pressed & w4.BUTTON_DOWN) { 80 | this.snake.turn(Direction.DOWN); 81 | } 82 | } 83 | 84 | private moveSnake(): void { 85 | this.snake.move(); 86 | this.gameover = this.snake.hasFailed(); 87 | 88 | if (this.gameover) { 89 | w4.tone(140 | (20 << 16), 100, 60, w4.TONE_PULSE1 | w4.TONE_MODE1); 90 | } 91 | } 92 | 93 | private checkCollisions(): void { 94 | if (this.snake.collides(this.fruit.position)) { 95 | this.score++; 96 | this.snake.grow(); 97 | this.fruit = this.placeFruit(); 98 | 99 | w4.tone(20 | (60 << 16), 80, 10, w4.TONE_PULSE2 | w4.TONE_MODE3); 100 | } 101 | } 102 | 103 | private placeFruit(): Fruit { 104 | let fruit: Fruit; 105 | do { 106 | fruit = new Fruit(); 107 | } while(this.snake.collides(fruit.position, false)); 108 | 109 | return fruit; 110 | } 111 | 112 | private drawStats(): void { 113 | store(w4.DRAW_COLORS, 0x43); 114 | w4.text("Score: " + (this.score).toString(), 0, 0); 115 | 116 | if (this.gameover) { 117 | store(w4.DRAW_COLORS, 0x44); 118 | w4.rect(30, 56, 100, 25); 119 | store(w4.DRAW_COLORS, 0x41); 120 | w4.text("GAME OVER", 43, 60); 121 | w4.text(" press X ", 43, 70); 122 | } 123 | } 124 | 125 | private drawWalls(): void { 126 | store(w4.DRAW_COLORS, 4); 127 | 128 | for (let i: u8 = 0; i < GAME_SIZE; i++) { 129 | w4.blit(BRICK, i * TILE_SIZE, 0, TILE_SIZE, TILE_SIZE, w4.BLIT_1BPP | w4.BLIT_FLIP_Y); 130 | w4.blit(BRICK, i * TILE_SIZE, (GAME_SIZE - 1) * TILE_SIZE, TILE_SIZE, TILE_SIZE, w4.BLIT_1BPP); 131 | 132 | if (i > 0 && i < GAME_SIZE - 1) { 133 | w4.blit(BRICK, 0, i * TILE_SIZE, TILE_SIZE, TILE_SIZE, w4.BLIT_1BPP | w4.BLIT_FLIP_Y | w4.BLIT_ROTATE); 134 | w4.blit(BRICK, (GAME_SIZE - 1) * TILE_SIZE, i * TILE_SIZE, TILE_SIZE, TILE_SIZE, w4.BLIT_1BPP | w4.BLIT_ROTATE); 135 | } 136 | } 137 | } 138 | } 139 | 140 | class Snake { 141 | private readonly body: Position[] = [new Position(GAME_SIZE / 2, GAME_SIZE / 2)]; 142 | private direction: Direction = Direction.NONE; 143 | 144 | private growing: boolean = false; 145 | private failed: boolean = false; 146 | 147 | move(): void { 148 | if (this.failed || Direction.NONE == this.direction) { 149 | return; 150 | } 151 | const head = this.body[0]; 152 | const newHead = new Position( 153 | head.x + this.direction.x, 154 | head.y + this.direction.y 155 | ); 156 | 157 | if (this.hits(newHead)) { 158 | this.failed = true; 159 | return; 160 | } 161 | 162 | this.body.unshift(newHead); 163 | if (!this.growing) { 164 | this.body.pop(); 165 | } 166 | this.growing = false; 167 | } 168 | 169 | turn(direction: Direction): void { 170 | this.direction = direction; 171 | } 172 | 173 | grow(): void { 174 | this.growing = true; 175 | } 176 | 177 | collides(other: Position, justHead: boolean = true): boolean { 178 | for (let i = 0, l = justHead ? 1 : this.body.length; i < l; i++) { 179 | if (this.body[i].equals(other)) { 180 | return true; 181 | } 182 | } 183 | return false; 184 | } 185 | 186 | hasFailed(): boolean { 187 | return this.failed; 188 | } 189 | 190 | private hits(head: Position): boolean { 191 | if (head.x < 1 || head.x > GAME_SIZE - 2 || head.y < 1 || head.y > GAME_SIZE - 2) { 192 | return true; 193 | } 194 | for (let i = 1; i < this.body.length; i++) { 195 | if (this.body[i].equals(head)) { 196 | return true; 197 | } 198 | } 199 | return false; 200 | } 201 | 202 | draw(): void { 203 | store(w4.DRAW_COLORS, 0x13); 204 | 205 | w4.blit( 206 | SNAKE_HEAD, 207 | this.body[0].x * TILE_SIZE, 208 | this.body[0].y * TILE_SIZE, 209 | TILE_SIZE, TILE_SIZE, 210 | w4.BLIT_1BPP 211 | | (this.direction.y > 0 ? w4.BLIT_FLIP_Y : 0) 212 | | (this.direction.x > 0 ? w4.BLIT_FLIP_Y | w4.BLIT_ROTATE : 0) 213 | | (this.direction.x < 0 ? w4.BLIT_ROTATE : 0) 214 | ); 215 | 216 | for (let i = 1, len = this.body.length; i < len; i++) { 217 | w4.blit( 218 | SNAKE_BODY, 219 | this.body[i].x * TILE_SIZE, 220 | this.body[i].y * TILE_SIZE, 221 | TILE_SIZE, TILE_SIZE, 222 | w4.BLIT_1BPP 223 | ); 224 | } 225 | } 226 | } 227 | 228 | class Fruit { 229 | readonly position: Position = Fruit.distribute(); 230 | 231 | draw(): void { 232 | store(w4.DRAW_COLORS, 2); 233 | w4.blit( 234 | FRUIT, 235 | this.position.x * TILE_SIZE, 236 | this.position.y * TILE_SIZE, 237 | TILE_SIZE, TILE_SIZE, 238 | w4.BLIT_1BPP 239 | ); 240 | } 241 | 242 | private static distribute(): Position { 243 | const min = 1; 244 | const max = GAME_SIZE - 3; 245 | return new Position( 246 | u8(Math.random() * max + min), 247 | u8(Math.random() * max + min) 248 | ); 249 | } 250 | } 251 | 252 | class Position { 253 | constructor(readonly x: u8, readonly y: u8) {} 254 | equals(other: Position): boolean { 255 | return other.x == this.x && other.y == this.y; 256 | } 257 | } 258 | 259 | class Direction { 260 | static NONE: Direction = new Direction(0, 0); 261 | static RIGHT: Direction = new Direction(1, 0); 262 | static LEFT: Direction = new Direction(-1, 0); 263 | static UP: Direction = new Direction(0, -1); 264 | static DOWN: Direction = new Direction(0, 1); 265 | 266 | private constructor(readonly x: i8, readonly y: i8) {} 267 | } 268 | 269 | const FRUIT = memory.data([ 270 | 0b11111001, 271 | 0b11110111, 272 | 0b11000011, 273 | 0b10000001, 274 | 0b00000000, 275 | 0b00000000, 276 | 0b10000001, 277 | 0b11000011, 278 | ]); 279 | 280 | const BRICK = memory.data([ 281 | 0b00000000, 282 | 0b01110111, 283 | 0b00000000, 284 | 0b11011101, 285 | 0b00000000, 286 | 0b01110111, 287 | 0b00000000, 288 | 0b11011101, 289 | ]); 290 | 291 | const SNAKE_HEAD = memory.data([ 292 | 0b11000011, 293 | 0b10000001, 294 | 0b00100100, 295 | 0b00000000, 296 | 0b00000000, 297 | 0b00000000, 298 | 0b00000000, 299 | 0b10000001, 300 | ]); 301 | 302 | const SNAKE_BODY = memory.data([ 303 | 0b10000001, 304 | 0b00000000, 305 | 0b00000000, 306 | 0b00000000, 307 | 0b00000000, 308 | 0b00000000, 309 | 0b00000000, 310 | 0b10000001, 311 | ]); 312 | -------------------------------------------------------------------------------- /playground/src/components/Wasm4Game.svelte: -------------------------------------------------------------------------------- 1 | 238 | 239 |
(focused = true)} 241 | on:blur={() => (focused = false)} 242 | tabindex="-1" 243 | class="w-full rounded-md relative" 244 | > 245 | 249 |
250 | {#if gamepadVisible} 251 |
254 |
255 |
256 |
buttonDown(BUTTON_UP | BUTTON_LEFT)} 258 | on:mouseup={() => buttonUp(BUTTON_UP | BUTTON_LEFT)} 259 | on:mouseenter={(event) => 260 | mouseEnter(event, BUTTON_UP | BUTTON_LEFT)} 261 | on:mouseleave={() => buttonUp(BUTTON_UP | BUTTON_LEFT)} 262 | on:touchstart={() => buttonDown(BUTTON_UP | BUTTON_LEFT)} 263 | on:touchend={() => buttonUp(BUTTON_UP | BUTTON_LEFT)} 264 | /> 265 |
buttonDown(BUTTON_UP)} 267 | on:mouseup={() => buttonUp(BUTTON_UP)} 268 | on:mouseenter={(event) => mouseEnter(event, BUTTON_UP)} 269 | on:mouseleave={() => buttonUp(BUTTON_UP)} 270 | on:touchstart={() => buttonDown(BUTTON_UP)} 271 | on:touchend={() => buttonUp(BUTTON_UP)} 272 | class="bg-neutral rounded-tr-xl rounded-tl-xl" 273 | class:border-t-8={isButtonDown(gamepad[0], BUTTON_UP)} 274 | class:border-gray={isButtonDown(gamepad[0], BUTTON_UP)} 275 | /> 276 |
buttonDown(BUTTON_UP | BUTTON_RIGHT)} 278 | on:mouseup={() => buttonUp(BUTTON_UP | BUTTON_RIGHT)} 279 | on:mouseenter={(event) => 280 | mouseEnter(event, BUTTON_UP | BUTTON_RIGHT)} 281 | on:mouseleave={() => buttonUp(BUTTON_UP | BUTTON_RIGHT)} 282 | on:touchstart={() => buttonDown(BUTTON_UP | BUTTON_RIGHT)} 283 | on:touchend={() => buttonUp(BUTTON_UP | BUTTON_RIGHT)} 284 | /> 285 |
buttonDown(BUTTON_LEFT)} 287 | on:mouseup={() => buttonUp(BUTTON_LEFT)} 288 | on:mouseenter={(event) => mouseEnter(event, BUTTON_LEFT)} 289 | on:mouseleave={() => buttonUp(BUTTON_LEFT)} 290 | on:touchstart={() => buttonDown(BUTTON_LEFT)} 291 | on:touchend={() => buttonUp(BUTTON_LEFT)} 292 | class="bg-neutral rounded-tl-xl rounded-bl-xl" 293 | class:border-l-8={isButtonDown(gamepad[0], BUTTON_LEFT)} 294 | class:border-gray={isButtonDown(gamepad[0], BUTTON_LEFT)} 295 | /> 296 |
297 |
298 |
299 |
buttonDown(BUTTON_RIGHT)} 301 | on:mouseup={() => buttonUp(BUTTON_RIGHT)} 302 | on:mouseenter={(event) => mouseEnter(event, BUTTON_RIGHT)} 303 | on:mouseleave={() => buttonUp(BUTTON_RIGHT)} 304 | on:touchstart={() => buttonDown(BUTTON_RIGHT)} 305 | on:touchend={() => buttonUp(BUTTON_RIGHT)} 306 | class="bg-neutral rounded-tr-xl rounded-br-xl" 307 | class:border-r-8={isButtonDown(gamepad[0], BUTTON_RIGHT)} 308 | class:border-gray={isButtonDown(gamepad[0], BUTTON_RIGHT)} 309 | /> 310 |
buttonDown(BUTTON_DOWN | BUTTON_LEFT)} 312 | on:mouseup={() => buttonUp(BUTTON_DOWN | BUTTON_LEFT)} 313 | on:mouseenter={(event) => 314 | mouseEnter(event, BUTTON_DOWN | BUTTON_LEFT)} 315 | on:mouseleave={() => buttonUp(BUTTON_DOWN | BUTTON_LEFT)} 316 | on:touchstart={() => buttonDown(BUTTON_DOWN | BUTTON_LEFT)} 317 | on:touchend={() => buttonUp(BUTTON_DOWN | BUTTON_LEFT)} 318 | /> 319 |
buttonDown(BUTTON_DOWN)} 321 | on:mouseup={() => buttonUp(BUTTON_DOWN)} 322 | on:mouseenter={(event) => mouseEnter(event, BUTTON_DOWN)} 323 | on:mouseleave={() => buttonUp(BUTTON_DOWN)} 324 | on:touchstart={() => buttonDown(BUTTON_DOWN)} 325 | on:touchend={() => buttonUp(BUTTON_DOWN)} 326 | class="bg-neutral rounded-br-xl rounded-bl-xl" 327 | class:border-b-8={isButtonDown(gamepad[0], BUTTON_DOWN)} 328 | class:border-gray={isButtonDown(gamepad[0], BUTTON_DOWN)} 329 | /> 330 |
buttonDown(BUTTON_DOWN | BUTTON_RIGHT)} 332 | on:mouseup={() => buttonUp(BUTTON_DOWN | BUTTON_RIGHT)} 333 | on:mouseenter={(event) => 334 | mouseEnter(event, BUTTON_DOWN | BUTTON_RIGHT)} 335 | on:mouseleave={() => buttonUp(BUTTON_DOWN | BUTTON_RIGHT)} 336 | on:touchstart={() => buttonDown(BUTTON_DOWN | BUTTON_RIGHT)} 337 | on:touchend={() => buttonUp(BUTTON_DOWN | BUTTON_RIGHT)} 338 | /> 339 |
340 |
341 |
342 |
345 |
346 | X 347 |
buttonDown(BUTTON_X)} 349 | on:touchend={() => buttonUp(BUTTON_X)} 350 | on:mousedown={() => buttonDown(BUTTON_X)} 351 | on:mouseup={() => buttonUp(BUTTON_X)} 352 | class="w-full h-full rounded-full bg-secondary" 353 | class:btn-gamepad-active={isButtonDown(gamepad[0], BUTTON_X)} 354 | /> 355 |
356 |
357 | Z 358 |
buttonDown(BUTTON_Z)} 360 | on:touchend={() => buttonUp(BUTTON_Z)} 361 | on:mousedown={() => buttonDown(BUTTON_Z)} 362 | on:mouseup={() => buttonUp(BUTTON_Z)} 363 | class="w-full h-full rounded-full bg-secondary" 364 | class:btn-gamepad-active={isButtonDown(gamepad[0], BUTTON_Z)} 365 | /> 366 |
367 |
368 |
369 |
370 | {/if} 371 |
372 | -------------------------------------------------------------------------------- /playground/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@codemirror/lang-javascript': 12 | specifier: ^6.1.2 13 | version: 6.2.2 14 | '@codemirror/lang-wast': 15 | specifier: ^6.0.1 16 | version: 6.0.2 17 | assemblyscript: 18 | specifier: ^0.21.3 19 | version: 0.21.7 20 | buffer: 21 | specifier: ^6.0.3 22 | version: 6.0.3 23 | is-mobile: 24 | specifier: ^3.1.1 25 | version: 3.1.1 26 | lz-string: 27 | specifier: ^1.4.4 28 | version: 1.5.0 29 | rolandc_wasm: 30 | specifier: 0.1.1 31 | version: 0.1.1 32 | svelte-codemirror-editor: 33 | specifier: ^1.4.0 34 | version: 1.4.1(codemirror@6.0.1)(svelte@3.59.2) 35 | devDependencies: 36 | '@sveltejs/vite-plugin-svelte': 37 | specifier: ^2.0.0 38 | version: 2.5.3(svelte@3.59.2)(vite@4.5.5(sass@1.83.1)) 39 | '@tsconfig/svelte': 40 | specifier: ^3.0.0 41 | version: 3.0.0 42 | autoprefixer: 43 | specifier: ^10.4.13 44 | version: 10.4.20(postcss@8.4.49) 45 | daisyui: 46 | specifier: ^4.12.23 47 | version: 4.12.23(postcss@8.4.49) 48 | postcss: 49 | specifier: ^8.4.21 50 | version: 8.4.49 51 | svelte: 52 | specifier: ^3.59.2 53 | version: 3.59.2 54 | svelte-check: 55 | specifier: ^2.10.0 56 | version: 2.10.3(postcss-load-config@4.0.2(postcss@8.4.49))(postcss@8.4.49)(sass@1.83.1)(svelte@3.59.2) 57 | tailwindcss: 58 | specifier: ^3.2.4 59 | version: 3.4.17 60 | tslib: 61 | specifier: ^2.4.1 62 | version: 2.8.1 63 | typescript: 64 | specifier: ^4.9.3 65 | version: 4.9.5 66 | vite: 67 | specifier: ^4.0.0 68 | version: 4.5.5(sass@1.83.1) 69 | vite-plugin-top-level-await: 70 | specifier: ^1.2.2 71 | version: 1.4.4(rollup@3.29.5)(vite@4.5.5(sass@1.83.1)) 72 | vite-plugin-wasm: 73 | specifier: ^3.1.1 74 | version: 3.4.1(vite@4.5.5(sass@1.83.1)) 75 | 76 | packages: 77 | 78 | '@alloc/quick-lru@5.2.0': 79 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 80 | engines: {node: '>=10'} 81 | 82 | '@codemirror/autocomplete@6.18.4': 83 | resolution: {integrity: sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA==} 84 | 85 | '@codemirror/commands@6.8.0': 86 | resolution: {integrity: sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==} 87 | 88 | '@codemirror/lang-javascript@6.2.2': 89 | resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==} 90 | 91 | '@codemirror/lang-wast@6.0.2': 92 | resolution: {integrity: sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q==} 93 | 94 | '@codemirror/language@6.10.8': 95 | resolution: {integrity: sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw==} 96 | 97 | '@codemirror/lint@6.8.4': 98 | resolution: {integrity: sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A==} 99 | 100 | '@codemirror/search@6.5.8': 101 | resolution: {integrity: sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig==} 102 | 103 | '@codemirror/state@6.5.0': 104 | resolution: {integrity: sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==} 105 | 106 | '@codemirror/view@6.36.2': 107 | resolution: {integrity: sha512-DZ6ONbs8qdJK0fdN7AB82CgI6tYXf4HWk1wSVa0+9bhVznCuuvhQtX8bFBoy3dv8rZSQqUd8GvhVAcielcidrA==} 108 | 109 | '@esbuild/android-arm64@0.18.20': 110 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 111 | engines: {node: '>=12'} 112 | cpu: [arm64] 113 | os: [android] 114 | 115 | '@esbuild/android-arm@0.18.20': 116 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 117 | engines: {node: '>=12'} 118 | cpu: [arm] 119 | os: [android] 120 | 121 | '@esbuild/android-x64@0.18.20': 122 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 123 | engines: {node: '>=12'} 124 | cpu: [x64] 125 | os: [android] 126 | 127 | '@esbuild/darwin-arm64@0.18.20': 128 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 129 | engines: {node: '>=12'} 130 | cpu: [arm64] 131 | os: [darwin] 132 | 133 | '@esbuild/darwin-x64@0.18.20': 134 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 135 | engines: {node: '>=12'} 136 | cpu: [x64] 137 | os: [darwin] 138 | 139 | '@esbuild/freebsd-arm64@0.18.20': 140 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 141 | engines: {node: '>=12'} 142 | cpu: [arm64] 143 | os: [freebsd] 144 | 145 | '@esbuild/freebsd-x64@0.18.20': 146 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 147 | engines: {node: '>=12'} 148 | cpu: [x64] 149 | os: [freebsd] 150 | 151 | '@esbuild/linux-arm64@0.18.20': 152 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 153 | engines: {node: '>=12'} 154 | cpu: [arm64] 155 | os: [linux] 156 | 157 | '@esbuild/linux-arm@0.18.20': 158 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 159 | engines: {node: '>=12'} 160 | cpu: [arm] 161 | os: [linux] 162 | 163 | '@esbuild/linux-ia32@0.18.20': 164 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 165 | engines: {node: '>=12'} 166 | cpu: [ia32] 167 | os: [linux] 168 | 169 | '@esbuild/linux-loong64@0.18.20': 170 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 171 | engines: {node: '>=12'} 172 | cpu: [loong64] 173 | os: [linux] 174 | 175 | '@esbuild/linux-mips64el@0.18.20': 176 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 177 | engines: {node: '>=12'} 178 | cpu: [mips64el] 179 | os: [linux] 180 | 181 | '@esbuild/linux-ppc64@0.18.20': 182 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 183 | engines: {node: '>=12'} 184 | cpu: [ppc64] 185 | os: [linux] 186 | 187 | '@esbuild/linux-riscv64@0.18.20': 188 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 189 | engines: {node: '>=12'} 190 | cpu: [riscv64] 191 | os: [linux] 192 | 193 | '@esbuild/linux-s390x@0.18.20': 194 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 195 | engines: {node: '>=12'} 196 | cpu: [s390x] 197 | os: [linux] 198 | 199 | '@esbuild/linux-x64@0.18.20': 200 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 201 | engines: {node: '>=12'} 202 | cpu: [x64] 203 | os: [linux] 204 | 205 | '@esbuild/netbsd-x64@0.18.20': 206 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 207 | engines: {node: '>=12'} 208 | cpu: [x64] 209 | os: [netbsd] 210 | 211 | '@esbuild/openbsd-x64@0.18.20': 212 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 213 | engines: {node: '>=12'} 214 | cpu: [x64] 215 | os: [openbsd] 216 | 217 | '@esbuild/sunos-x64@0.18.20': 218 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 219 | engines: {node: '>=12'} 220 | cpu: [x64] 221 | os: [sunos] 222 | 223 | '@esbuild/win32-arm64@0.18.20': 224 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 225 | engines: {node: '>=12'} 226 | cpu: [arm64] 227 | os: [win32] 228 | 229 | '@esbuild/win32-ia32@0.18.20': 230 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 231 | engines: {node: '>=12'} 232 | cpu: [ia32] 233 | os: [win32] 234 | 235 | '@esbuild/win32-x64@0.18.20': 236 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 237 | engines: {node: '>=12'} 238 | cpu: [x64] 239 | os: [win32] 240 | 241 | '@isaacs/cliui@8.0.2': 242 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 243 | engines: {node: '>=12'} 244 | 245 | '@jridgewell/gen-mapping@0.3.8': 246 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 247 | engines: {node: '>=6.0.0'} 248 | 249 | '@jridgewell/resolve-uri@3.1.2': 250 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 251 | engines: {node: '>=6.0.0'} 252 | 253 | '@jridgewell/set-array@1.2.1': 254 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 255 | engines: {node: '>=6.0.0'} 256 | 257 | '@jridgewell/sourcemap-codec@1.5.0': 258 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 259 | 260 | '@jridgewell/trace-mapping@0.3.25': 261 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 262 | 263 | '@lezer/common@1.2.3': 264 | resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} 265 | 266 | '@lezer/highlight@1.2.1': 267 | resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==} 268 | 269 | '@lezer/javascript@1.4.21': 270 | resolution: {integrity: sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==} 271 | 272 | '@lezer/lr@1.4.2': 273 | resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} 274 | 275 | '@marijn/find-cluster-break@1.0.2': 276 | resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==} 277 | 278 | '@nodelib/fs.scandir@2.1.5': 279 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 280 | engines: {node: '>= 8'} 281 | 282 | '@nodelib/fs.stat@2.0.5': 283 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 284 | engines: {node: '>= 8'} 285 | 286 | '@nodelib/fs.walk@1.2.8': 287 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 288 | engines: {node: '>= 8'} 289 | 290 | '@parcel/watcher-android-arm64@2.5.0': 291 | resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} 292 | engines: {node: '>= 10.0.0'} 293 | cpu: [arm64] 294 | os: [android] 295 | 296 | '@parcel/watcher-darwin-arm64@2.5.0': 297 | resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} 298 | engines: {node: '>= 10.0.0'} 299 | cpu: [arm64] 300 | os: [darwin] 301 | 302 | '@parcel/watcher-darwin-x64@2.5.0': 303 | resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} 304 | engines: {node: '>= 10.0.0'} 305 | cpu: [x64] 306 | os: [darwin] 307 | 308 | '@parcel/watcher-freebsd-x64@2.5.0': 309 | resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} 310 | engines: {node: '>= 10.0.0'} 311 | cpu: [x64] 312 | os: [freebsd] 313 | 314 | '@parcel/watcher-linux-arm-glibc@2.5.0': 315 | resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} 316 | engines: {node: '>= 10.0.0'} 317 | cpu: [arm] 318 | os: [linux] 319 | 320 | '@parcel/watcher-linux-arm-musl@2.5.0': 321 | resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} 322 | engines: {node: '>= 10.0.0'} 323 | cpu: [arm] 324 | os: [linux] 325 | 326 | '@parcel/watcher-linux-arm64-glibc@2.5.0': 327 | resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} 328 | engines: {node: '>= 10.0.0'} 329 | cpu: [arm64] 330 | os: [linux] 331 | 332 | '@parcel/watcher-linux-arm64-musl@2.5.0': 333 | resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} 334 | engines: {node: '>= 10.0.0'} 335 | cpu: [arm64] 336 | os: [linux] 337 | 338 | '@parcel/watcher-linux-x64-glibc@2.5.0': 339 | resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} 340 | engines: {node: '>= 10.0.0'} 341 | cpu: [x64] 342 | os: [linux] 343 | 344 | '@parcel/watcher-linux-x64-musl@2.5.0': 345 | resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} 346 | engines: {node: '>= 10.0.0'} 347 | cpu: [x64] 348 | os: [linux] 349 | 350 | '@parcel/watcher-win32-arm64@2.5.0': 351 | resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} 352 | engines: {node: '>= 10.0.0'} 353 | cpu: [arm64] 354 | os: [win32] 355 | 356 | '@parcel/watcher-win32-ia32@2.5.0': 357 | resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} 358 | engines: {node: '>= 10.0.0'} 359 | cpu: [ia32] 360 | os: [win32] 361 | 362 | '@parcel/watcher-win32-x64@2.5.0': 363 | resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} 364 | engines: {node: '>= 10.0.0'} 365 | cpu: [x64] 366 | os: [win32] 367 | 368 | '@parcel/watcher@2.5.0': 369 | resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} 370 | engines: {node: '>= 10.0.0'} 371 | 372 | '@pkgjs/parseargs@0.11.0': 373 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 374 | engines: {node: '>=14'} 375 | 376 | '@rollup/plugin-virtual@3.0.2': 377 | resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} 378 | engines: {node: '>=14.0.0'} 379 | peerDependencies: 380 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 381 | peerDependenciesMeta: 382 | rollup: 383 | optional: true 384 | 385 | '@sveltejs/vite-plugin-svelte-inspector@1.0.4': 386 | resolution: {integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==} 387 | engines: {node: ^14.18.0 || >= 16} 388 | peerDependencies: 389 | '@sveltejs/vite-plugin-svelte': ^2.2.0 390 | svelte: ^3.54.0 || ^4.0.0 391 | vite: ^4.0.0 392 | 393 | '@sveltejs/vite-plugin-svelte@2.5.3': 394 | resolution: {integrity: sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w==} 395 | engines: {node: ^14.18.0 || >= 16} 396 | peerDependencies: 397 | svelte: ^3.54.0 || ^4.0.0 || ^5.0.0-next.0 398 | vite: ^4.0.0 399 | 400 | '@swc/core-darwin-arm64@1.10.4': 401 | resolution: {integrity: sha512-sV/eurLhkjn/197y48bxKP19oqcLydSel42Qsy2zepBltqUx+/zZ8+/IS0Bi7kaWVFxerbW1IPB09uq8Zuvm3g==} 402 | engines: {node: '>=10'} 403 | cpu: [arm64] 404 | os: [darwin] 405 | 406 | '@swc/core-darwin-x64@1.10.4': 407 | resolution: {integrity: sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w==} 408 | engines: {node: '>=10'} 409 | cpu: [x64] 410 | os: [darwin] 411 | 412 | '@swc/core-linux-arm-gnueabihf@1.10.4': 413 | resolution: {integrity: sha512-zd7fXH5w8s+Sfvn2oO464KDWl+ZX1MJiVmE4Pdk46N3PEaNwE0koTfgx2vQRqRG4vBBobzVvzICC3618WcefOA==} 414 | engines: {node: '>=10'} 415 | cpu: [arm] 416 | os: [linux] 417 | 418 | '@swc/core-linux-arm64-gnu@1.10.4': 419 | resolution: {integrity: sha512-+UGfoHDxsMZgFD3tABKLeEZHqLNOkxStu+qCG7atGBhS4Slri6h6zijVvf4yI5X3kbXdvc44XV/hrP/Klnui2A==} 420 | engines: {node: '>=10'} 421 | cpu: [arm64] 422 | os: [linux] 423 | 424 | '@swc/core-linux-arm64-musl@1.10.4': 425 | resolution: {integrity: sha512-cDDj2/uYsOH0pgAnDkovLZvKJpFmBMyXkxEG6Q4yw99HbzO6QzZ5HDGWGWVq/6dLgYKlnnmpjZCPPQIu01mXEg==} 426 | engines: {node: '>=10'} 427 | cpu: [arm64] 428 | os: [linux] 429 | 430 | '@swc/core-linux-x64-gnu@1.10.4': 431 | resolution: {integrity: sha512-qJXh9D6Kf5xSdGWPINpLGixAbB5JX8JcbEJpRamhlDBoOcQC79dYfOMEIxWPhTS1DGLyFakAx2FX/b2VmQmj0g==} 432 | engines: {node: '>=10'} 433 | cpu: [x64] 434 | os: [linux] 435 | 436 | '@swc/core-linux-x64-musl@1.10.4': 437 | resolution: {integrity: sha512-A76lIAeyQnHCVt0RL/pG+0er8Qk9+acGJqSZOZm67Ve3B0oqMd871kPtaHBM0BW3OZAhoILgfHW3Op9Q3mx3Cw==} 438 | engines: {node: '>=10'} 439 | cpu: [x64] 440 | os: [linux] 441 | 442 | '@swc/core-win32-arm64-msvc@1.10.4': 443 | resolution: {integrity: sha512-e6j5kBu4fIY7fFxFxnZI0MlEovRvp50Lg59Fw+DVbtqHk3C85dckcy5xKP+UoXeuEmFceauQDczUcGs19SRGSQ==} 444 | engines: {node: '>=10'} 445 | cpu: [arm64] 446 | os: [win32] 447 | 448 | '@swc/core-win32-ia32-msvc@1.10.4': 449 | resolution: {integrity: sha512-RSYHfdKgNXV/amY5Tqk1EWVsyQnhlsM//jeqMLw5Fy9rfxP592W9UTumNikNRPdjI8wKKzNMXDb1U29tQjN0dg==} 450 | engines: {node: '>=10'} 451 | cpu: [ia32] 452 | os: [win32] 453 | 454 | '@swc/core-win32-x64-msvc@1.10.4': 455 | resolution: {integrity: sha512-1ujYpaqfqNPYdwKBlvJnOqcl+Syn3UrQ4XE0Txz6zMYgyh6cdU6a3pxqLqIUSJ12MtXRA9ZUhEz1ekU3LfLWXw==} 456 | engines: {node: '>=10'} 457 | cpu: [x64] 458 | os: [win32] 459 | 460 | '@swc/core@1.10.4': 461 | resolution: {integrity: sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==} 462 | engines: {node: '>=10'} 463 | peerDependencies: 464 | '@swc/helpers': '*' 465 | peerDependenciesMeta: 466 | '@swc/helpers': 467 | optional: true 468 | 469 | '@swc/counter@0.1.3': 470 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 471 | 472 | '@swc/types@0.1.17': 473 | resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} 474 | 475 | '@tsconfig/svelte@3.0.0': 476 | resolution: {integrity: sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==} 477 | 478 | '@types/pug@2.0.10': 479 | resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} 480 | 481 | '@types/sass@1.45.0': 482 | resolution: {integrity: sha512-jn7qwGFmJHwUSphV8zZneO3GmtlgLsmhs/LQyVvQbIIa+fzGMUiHI4HXJZL3FT8MJmgXWbLGiVVY7ElvHq6vDA==} 483 | deprecated: This is a stub types definition. sass provides its own type definitions, so you do not need this installed. 484 | 485 | ansi-regex@5.0.1: 486 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 487 | engines: {node: '>=8'} 488 | 489 | ansi-regex@6.1.0: 490 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 491 | engines: {node: '>=12'} 492 | 493 | ansi-styles@4.3.0: 494 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 495 | engines: {node: '>=8'} 496 | 497 | ansi-styles@6.2.1: 498 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 499 | engines: {node: '>=12'} 500 | 501 | any-promise@1.3.0: 502 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 503 | 504 | anymatch@3.1.3: 505 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 506 | engines: {node: '>= 8'} 507 | 508 | arg@5.0.2: 509 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 510 | 511 | assemblyscript@0.21.7: 512 | resolution: {integrity: sha512-GPKavCMUVZbrU31KTBMtnsRZa9pPN10ApfkPGNdL70Qpu/rORbTCte/37dnIUnQdXHm+5vHmG+iGRWmwJO5hvA==} 513 | engines: {node: '>=16.0.0', npm: '>=7.0.0'} 514 | hasBin: true 515 | 516 | autoprefixer@10.4.20: 517 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 518 | engines: {node: ^10 || ^12 || >=14} 519 | hasBin: true 520 | peerDependencies: 521 | postcss: ^8.1.0 522 | 523 | balanced-match@1.0.2: 524 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 525 | 526 | base64-js@1.5.1: 527 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 528 | 529 | binary-extensions@2.3.0: 530 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 531 | engines: {node: '>=8'} 532 | 533 | binaryen@110.0.0-nightly.20221006: 534 | resolution: {integrity: sha512-yC7ZLoaZmXhm5cB0+g3rZkz5ujPSlhX+FEQtgaQHVxcL78D8cTXdRSdajhgQD345BVPsooOrSxqhX6tnULgBWg==} 535 | hasBin: true 536 | 537 | brace-expansion@1.1.11: 538 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 539 | 540 | brace-expansion@2.0.1: 541 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 542 | 543 | braces@3.0.3: 544 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 545 | engines: {node: '>=8'} 546 | 547 | browserslist@4.24.4: 548 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 549 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 550 | hasBin: true 551 | 552 | buffer-crc32@0.2.13: 553 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 554 | 555 | buffer@6.0.3: 556 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 557 | 558 | callsites@3.1.0: 559 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 560 | engines: {node: '>=6'} 561 | 562 | camelcase-css@2.0.1: 563 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 564 | engines: {node: '>= 6'} 565 | 566 | caniuse-lite@1.0.30001692: 567 | resolution: {integrity: sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==} 568 | 569 | chokidar@3.6.0: 570 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 571 | engines: {node: '>= 8.10.0'} 572 | 573 | chokidar@4.0.3: 574 | resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 575 | engines: {node: '>= 14.16.0'} 576 | 577 | codemirror@6.0.1: 578 | resolution: {integrity: sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==} 579 | 580 | color-convert@2.0.1: 581 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 582 | engines: {node: '>=7.0.0'} 583 | 584 | color-name@1.1.4: 585 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 586 | 587 | commander@4.1.1: 588 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 589 | engines: {node: '>= 6'} 590 | 591 | concat-map@0.0.1: 592 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 593 | 594 | crelt@1.0.6: 595 | resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} 596 | 597 | cross-spawn@7.0.6: 598 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 599 | engines: {node: '>= 8'} 600 | 601 | css-selector-tokenizer@0.8.0: 602 | resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} 603 | 604 | cssesc@3.0.0: 605 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 606 | engines: {node: '>=4'} 607 | hasBin: true 608 | 609 | culori@3.3.0: 610 | resolution: {integrity: sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==} 611 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 612 | 613 | daisyui@4.12.23: 614 | resolution: {integrity: sha512-EM38duvxutJ5PD65lO/AFMpcw+9qEy6XAZrTpzp7WyaPeO/l+F/Qiq0ECHHmFNcFXh5aVoALY4MGrrxtCiaQCQ==} 615 | engines: {node: '>=16.9.0'} 616 | 617 | debug@4.4.0: 618 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 619 | engines: {node: '>=6.0'} 620 | peerDependencies: 621 | supports-color: '*' 622 | peerDependenciesMeta: 623 | supports-color: 624 | optional: true 625 | 626 | deepmerge@4.3.1: 627 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 628 | engines: {node: '>=0.10.0'} 629 | 630 | detect-indent@6.1.0: 631 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} 632 | engines: {node: '>=8'} 633 | 634 | detect-libc@1.0.3: 635 | resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} 636 | engines: {node: '>=0.10'} 637 | hasBin: true 638 | 639 | didyoumean@1.2.2: 640 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 641 | 642 | dlv@1.1.3: 643 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 644 | 645 | eastasianwidth@0.2.0: 646 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 647 | 648 | electron-to-chromium@1.5.80: 649 | resolution: {integrity: sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==} 650 | 651 | emoji-regex@8.0.0: 652 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 653 | 654 | emoji-regex@9.2.2: 655 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 656 | 657 | es6-promise@3.3.1: 658 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} 659 | 660 | esbuild@0.18.20: 661 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 662 | engines: {node: '>=12'} 663 | hasBin: true 664 | 665 | escalade@3.2.0: 666 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 667 | engines: {node: '>=6'} 668 | 669 | fast-glob@3.3.3: 670 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 671 | engines: {node: '>=8.6.0'} 672 | 673 | fastparse@1.1.2: 674 | resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} 675 | 676 | fastq@1.18.0: 677 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 678 | 679 | fill-range@7.1.1: 680 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 681 | engines: {node: '>=8'} 682 | 683 | foreground-child@3.3.0: 684 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 685 | engines: {node: '>=14'} 686 | 687 | fraction.js@4.3.7: 688 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 689 | 690 | fs.realpath@1.0.0: 691 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 692 | 693 | fsevents@2.3.3: 694 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 695 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 696 | os: [darwin] 697 | 698 | function-bind@1.1.2: 699 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 700 | 701 | glob-parent@5.1.2: 702 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 703 | engines: {node: '>= 6'} 704 | 705 | glob-parent@6.0.2: 706 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 707 | engines: {node: '>=10.13.0'} 708 | 709 | glob@10.4.5: 710 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 711 | hasBin: true 712 | 713 | glob@7.2.3: 714 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 715 | deprecated: Glob versions prior to v9 are no longer supported 716 | 717 | graceful-fs@4.2.11: 718 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 719 | 720 | hasown@2.0.2: 721 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 722 | engines: {node: '>= 0.4'} 723 | 724 | ieee754@1.2.1: 725 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 726 | 727 | immutable@5.0.3: 728 | resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} 729 | 730 | import-fresh@3.3.0: 731 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 732 | engines: {node: '>=6'} 733 | 734 | inflight@1.0.6: 735 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 736 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 737 | 738 | inherits@2.0.4: 739 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 740 | 741 | is-binary-path@2.1.0: 742 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 743 | engines: {node: '>=8'} 744 | 745 | is-core-module@2.16.1: 746 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 747 | engines: {node: '>= 0.4'} 748 | 749 | is-extglob@2.1.1: 750 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 751 | engines: {node: '>=0.10.0'} 752 | 753 | is-fullwidth-code-point@3.0.0: 754 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 755 | engines: {node: '>=8'} 756 | 757 | is-glob@4.0.3: 758 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 759 | engines: {node: '>=0.10.0'} 760 | 761 | is-mobile@3.1.1: 762 | resolution: {integrity: sha512-RRoXXR2HNFxNkUnxtaBdGBXtFlUMFa06S0NUKf/LCF+MuGLu13gi9iBCkoEmc6+rpXuwi5Mso5V8Zf7mNynMBQ==} 763 | 764 | is-number@7.0.0: 765 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 766 | engines: {node: '>=0.12.0'} 767 | 768 | isexe@2.0.0: 769 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 770 | 771 | jackspeak@3.4.3: 772 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 773 | 774 | jiti@1.21.7: 775 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 776 | hasBin: true 777 | 778 | kleur@4.1.5: 779 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 780 | engines: {node: '>=6'} 781 | 782 | lilconfig@3.1.3: 783 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 784 | engines: {node: '>=14'} 785 | 786 | lines-and-columns@1.2.4: 787 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 788 | 789 | long@5.2.3: 790 | resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} 791 | 792 | lru-cache@10.4.3: 793 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 794 | 795 | lz-string@1.5.0: 796 | resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} 797 | hasBin: true 798 | 799 | magic-string@0.25.9: 800 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} 801 | 802 | magic-string@0.30.17: 803 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 804 | 805 | merge2@1.4.1: 806 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 807 | engines: {node: '>= 8'} 808 | 809 | micromatch@4.0.8: 810 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 811 | engines: {node: '>=8.6'} 812 | 813 | min-indent@1.0.1: 814 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 815 | engines: {node: '>=4'} 816 | 817 | minimatch@3.1.2: 818 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 819 | 820 | minimatch@9.0.5: 821 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 822 | engines: {node: '>=16 || 14 >=14.17'} 823 | 824 | minimist@1.2.8: 825 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 826 | 827 | minipass@7.1.2: 828 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 829 | engines: {node: '>=16 || 14 >=14.17'} 830 | 831 | mkdirp@0.5.6: 832 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} 833 | hasBin: true 834 | 835 | mri@1.2.0: 836 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 837 | engines: {node: '>=4'} 838 | 839 | ms@2.1.3: 840 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 841 | 842 | mz@2.7.0: 843 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 844 | 845 | nanoid@3.3.8: 846 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 847 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 848 | hasBin: true 849 | 850 | node-addon-api@7.1.1: 851 | resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 852 | 853 | node-releases@2.0.19: 854 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 855 | 856 | normalize-path@3.0.0: 857 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 858 | engines: {node: '>=0.10.0'} 859 | 860 | normalize-range@0.1.2: 861 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 862 | engines: {node: '>=0.10.0'} 863 | 864 | object-assign@4.1.1: 865 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 866 | engines: {node: '>=0.10.0'} 867 | 868 | object-hash@3.0.0: 869 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 870 | engines: {node: '>= 6'} 871 | 872 | once@1.4.0: 873 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 874 | 875 | package-json-from-dist@1.0.1: 876 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 877 | 878 | parent-module@1.0.1: 879 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 880 | engines: {node: '>=6'} 881 | 882 | path-is-absolute@1.0.1: 883 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 884 | engines: {node: '>=0.10.0'} 885 | 886 | path-key@3.1.1: 887 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 888 | engines: {node: '>=8'} 889 | 890 | path-parse@1.0.7: 891 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 892 | 893 | path-scurry@1.11.1: 894 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 895 | engines: {node: '>=16 || 14 >=14.18'} 896 | 897 | picocolors@1.1.1: 898 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 899 | 900 | picomatch@2.3.1: 901 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 902 | engines: {node: '>=8.6'} 903 | 904 | pify@2.3.0: 905 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 906 | engines: {node: '>=0.10.0'} 907 | 908 | pirates@4.0.6: 909 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 910 | engines: {node: '>= 6'} 911 | 912 | postcss-import@15.1.0: 913 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 914 | engines: {node: '>=14.0.0'} 915 | peerDependencies: 916 | postcss: ^8.0.0 917 | 918 | postcss-js@4.0.1: 919 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 920 | engines: {node: ^12 || ^14 || >= 16} 921 | peerDependencies: 922 | postcss: ^8.4.21 923 | 924 | postcss-load-config@4.0.2: 925 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 926 | engines: {node: '>= 14'} 927 | peerDependencies: 928 | postcss: '>=8.0.9' 929 | ts-node: '>=9.0.0' 930 | peerDependenciesMeta: 931 | postcss: 932 | optional: true 933 | ts-node: 934 | optional: true 935 | 936 | postcss-nested@6.2.0: 937 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 938 | engines: {node: '>=12.0'} 939 | peerDependencies: 940 | postcss: ^8.2.14 941 | 942 | postcss-selector-parser@6.1.2: 943 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 944 | engines: {node: '>=4'} 945 | 946 | postcss-value-parser@4.2.0: 947 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 948 | 949 | postcss@8.4.49: 950 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 951 | engines: {node: ^10 || ^12 || >=14} 952 | 953 | queue-microtask@1.2.3: 954 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 955 | 956 | read-cache@1.0.0: 957 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 958 | 959 | readdirp@3.6.0: 960 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 961 | engines: {node: '>=8.10.0'} 962 | 963 | readdirp@4.0.2: 964 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 965 | engines: {node: '>= 14.16.0'} 966 | 967 | resolve-from@4.0.0: 968 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 969 | engines: {node: '>=4'} 970 | 971 | resolve@1.22.10: 972 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 973 | engines: {node: '>= 0.4'} 974 | hasBin: true 975 | 976 | reusify@1.0.4: 977 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 978 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 979 | 980 | rimraf@2.7.1: 981 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} 982 | deprecated: Rimraf versions prior to v4 are no longer supported 983 | hasBin: true 984 | 985 | rolandc_wasm@0.1.1: 986 | resolution: {integrity: sha512-PcvqpYZjHMcTB/JvMIxUXzyxWtnKlibj6E+qjqCDWP5lZMffvAXuVsuR2LYWhlN4CyHv5R1E6xn4bwDmlKQaBw==} 987 | 988 | rollup@3.29.5: 989 | resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} 990 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 991 | hasBin: true 992 | 993 | run-parallel@1.2.0: 994 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 995 | 996 | sade@1.8.1: 997 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 998 | engines: {node: '>=6'} 999 | 1000 | sander@0.5.1: 1001 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} 1002 | 1003 | sass@1.83.1: 1004 | resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==} 1005 | engines: {node: '>=14.0.0'} 1006 | hasBin: true 1007 | 1008 | shebang-command@2.0.0: 1009 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1010 | engines: {node: '>=8'} 1011 | 1012 | shebang-regex@3.0.0: 1013 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1014 | engines: {node: '>=8'} 1015 | 1016 | signal-exit@4.1.0: 1017 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1018 | engines: {node: '>=14'} 1019 | 1020 | sorcery@0.10.0: 1021 | resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==} 1022 | hasBin: true 1023 | 1024 | source-map-js@1.2.1: 1025 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1026 | engines: {node: '>=0.10.0'} 1027 | 1028 | sourcemap-codec@1.4.8: 1029 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 1030 | deprecated: Please use @jridgewell/sourcemap-codec instead 1031 | 1032 | string-width@4.2.3: 1033 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1034 | engines: {node: '>=8'} 1035 | 1036 | string-width@5.1.2: 1037 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1038 | engines: {node: '>=12'} 1039 | 1040 | strip-ansi@6.0.1: 1041 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1042 | engines: {node: '>=8'} 1043 | 1044 | strip-ansi@7.1.0: 1045 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1046 | engines: {node: '>=12'} 1047 | 1048 | strip-indent@3.0.0: 1049 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1050 | engines: {node: '>=8'} 1051 | 1052 | style-mod@4.1.2: 1053 | resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} 1054 | 1055 | sucrase@3.35.0: 1056 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1057 | engines: {node: '>=16 || 14 >=14.17'} 1058 | hasBin: true 1059 | 1060 | supports-preserve-symlinks-flag@1.0.0: 1061 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1062 | engines: {node: '>= 0.4'} 1063 | 1064 | svelte-check@2.10.3: 1065 | resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} 1066 | hasBin: true 1067 | peerDependencies: 1068 | svelte: ^3.24.0 1069 | 1070 | svelte-codemirror-editor@1.4.1: 1071 | resolution: {integrity: sha512-Pv350iro0Y/AZTT/y2OLaonheQqAwl50Hdfipa2Jv1Z04TSP5kPUyxQnRjqxeRW7DXOX9s5Nd11tHdBl9iYSzw==} 1072 | peerDependencies: 1073 | codemirror: ^6.0.0 1074 | svelte: ^3.0.0 || ^4.0.0 || ^5.0.0 1075 | 1076 | svelte-hmr@0.15.3: 1077 | resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} 1078 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 1079 | peerDependencies: 1080 | svelte: ^3.19.0 || ^4.0.0 1081 | 1082 | svelte-preprocess@4.10.7: 1083 | resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} 1084 | engines: {node: '>= 9.11.2'} 1085 | peerDependencies: 1086 | '@babel/core': ^7.10.2 1087 | coffeescript: ^2.5.1 1088 | less: ^3.11.3 || ^4.0.0 1089 | node-sass: '*' 1090 | postcss: ^7 || ^8 1091 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 1092 | pug: ^3.0.0 1093 | sass: ^1.26.8 1094 | stylus: ^0.55.0 1095 | sugarss: ^2.0.0 1096 | svelte: ^3.23.0 1097 | typescript: ^3.9.5 || ^4.0.0 1098 | peerDependenciesMeta: 1099 | '@babel/core': 1100 | optional: true 1101 | coffeescript: 1102 | optional: true 1103 | less: 1104 | optional: true 1105 | node-sass: 1106 | optional: true 1107 | postcss: 1108 | optional: true 1109 | postcss-load-config: 1110 | optional: true 1111 | pug: 1112 | optional: true 1113 | sass: 1114 | optional: true 1115 | stylus: 1116 | optional: true 1117 | sugarss: 1118 | optional: true 1119 | typescript: 1120 | optional: true 1121 | 1122 | svelte@3.59.2: 1123 | resolution: {integrity: sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==} 1124 | engines: {node: '>= 8'} 1125 | 1126 | tailwindcss@3.4.17: 1127 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} 1128 | engines: {node: '>=14.0.0'} 1129 | hasBin: true 1130 | 1131 | thenify-all@1.6.0: 1132 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1133 | engines: {node: '>=0.8'} 1134 | 1135 | thenify@3.3.1: 1136 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1137 | 1138 | to-regex-range@5.0.1: 1139 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1140 | engines: {node: '>=8.0'} 1141 | 1142 | ts-interface-checker@0.1.13: 1143 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1144 | 1145 | tslib@2.8.1: 1146 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1147 | 1148 | typescript@4.9.5: 1149 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 1150 | engines: {node: '>=4.2.0'} 1151 | hasBin: true 1152 | 1153 | update-browserslist-db@1.1.2: 1154 | resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} 1155 | hasBin: true 1156 | peerDependencies: 1157 | browserslist: '>= 4.21.0' 1158 | 1159 | util-deprecate@1.0.2: 1160 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1161 | 1162 | uuid@10.0.0: 1163 | resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} 1164 | hasBin: true 1165 | 1166 | vite-plugin-top-level-await@1.4.4: 1167 | resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==} 1168 | peerDependencies: 1169 | vite: '>=2.8' 1170 | 1171 | vite-plugin-wasm@3.4.1: 1172 | resolution: {integrity: sha512-ja3nSo2UCkVeitltJGkS3pfQHAanHv/DqGatdI39ja6McgABlpsZ5hVgl6wuR8Qx5etY3T5qgDQhOWzc5RReZA==} 1173 | peerDependencies: 1174 | vite: ^2 || ^3 || ^4 || ^5 || ^6 1175 | 1176 | vite@4.5.5: 1177 | resolution: {integrity: sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==} 1178 | engines: {node: ^14.18.0 || >=16.0.0} 1179 | hasBin: true 1180 | peerDependencies: 1181 | '@types/node': '>= 14' 1182 | less: '*' 1183 | lightningcss: ^1.21.0 1184 | sass: '*' 1185 | stylus: '*' 1186 | sugarss: '*' 1187 | terser: ^5.4.0 1188 | peerDependenciesMeta: 1189 | '@types/node': 1190 | optional: true 1191 | less: 1192 | optional: true 1193 | lightningcss: 1194 | optional: true 1195 | sass: 1196 | optional: true 1197 | stylus: 1198 | optional: true 1199 | sugarss: 1200 | optional: true 1201 | terser: 1202 | optional: true 1203 | 1204 | vitefu@0.2.5: 1205 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 1206 | peerDependencies: 1207 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 1208 | peerDependenciesMeta: 1209 | vite: 1210 | optional: true 1211 | 1212 | w3c-keyname@2.2.8: 1213 | resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} 1214 | 1215 | which@2.0.2: 1216 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1217 | engines: {node: '>= 8'} 1218 | hasBin: true 1219 | 1220 | wrap-ansi@7.0.0: 1221 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1222 | engines: {node: '>=10'} 1223 | 1224 | wrap-ansi@8.1.0: 1225 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1226 | engines: {node: '>=12'} 1227 | 1228 | wrappy@1.0.2: 1229 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1230 | 1231 | yaml@2.7.0: 1232 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 1233 | engines: {node: '>= 14'} 1234 | hasBin: true 1235 | 1236 | snapshots: 1237 | 1238 | '@alloc/quick-lru@5.2.0': {} 1239 | 1240 | '@codemirror/autocomplete@6.18.4': 1241 | dependencies: 1242 | '@codemirror/language': 6.10.8 1243 | '@codemirror/state': 6.5.0 1244 | '@codemirror/view': 6.36.2 1245 | '@lezer/common': 1.2.3 1246 | 1247 | '@codemirror/commands@6.8.0': 1248 | dependencies: 1249 | '@codemirror/language': 6.10.8 1250 | '@codemirror/state': 6.5.0 1251 | '@codemirror/view': 6.36.2 1252 | '@lezer/common': 1.2.3 1253 | 1254 | '@codemirror/lang-javascript@6.2.2': 1255 | dependencies: 1256 | '@codemirror/autocomplete': 6.18.4 1257 | '@codemirror/language': 6.10.8 1258 | '@codemirror/lint': 6.8.4 1259 | '@codemirror/state': 6.5.0 1260 | '@codemirror/view': 6.36.2 1261 | '@lezer/common': 1.2.3 1262 | '@lezer/javascript': 1.4.21 1263 | 1264 | '@codemirror/lang-wast@6.0.2': 1265 | dependencies: 1266 | '@codemirror/language': 6.10.8 1267 | '@lezer/common': 1.2.3 1268 | '@lezer/highlight': 1.2.1 1269 | '@lezer/lr': 1.4.2 1270 | 1271 | '@codemirror/language@6.10.8': 1272 | dependencies: 1273 | '@codemirror/state': 6.5.0 1274 | '@codemirror/view': 6.36.2 1275 | '@lezer/common': 1.2.3 1276 | '@lezer/highlight': 1.2.1 1277 | '@lezer/lr': 1.4.2 1278 | style-mod: 4.1.2 1279 | 1280 | '@codemirror/lint@6.8.4': 1281 | dependencies: 1282 | '@codemirror/state': 6.5.0 1283 | '@codemirror/view': 6.36.2 1284 | crelt: 1.0.6 1285 | 1286 | '@codemirror/search@6.5.8': 1287 | dependencies: 1288 | '@codemirror/state': 6.5.0 1289 | '@codemirror/view': 6.36.2 1290 | crelt: 1.0.6 1291 | 1292 | '@codemirror/state@6.5.0': 1293 | dependencies: 1294 | '@marijn/find-cluster-break': 1.0.2 1295 | 1296 | '@codemirror/view@6.36.2': 1297 | dependencies: 1298 | '@codemirror/state': 6.5.0 1299 | style-mod: 4.1.2 1300 | w3c-keyname: 2.2.8 1301 | 1302 | '@esbuild/android-arm64@0.18.20': 1303 | optional: true 1304 | 1305 | '@esbuild/android-arm@0.18.20': 1306 | optional: true 1307 | 1308 | '@esbuild/android-x64@0.18.20': 1309 | optional: true 1310 | 1311 | '@esbuild/darwin-arm64@0.18.20': 1312 | optional: true 1313 | 1314 | '@esbuild/darwin-x64@0.18.20': 1315 | optional: true 1316 | 1317 | '@esbuild/freebsd-arm64@0.18.20': 1318 | optional: true 1319 | 1320 | '@esbuild/freebsd-x64@0.18.20': 1321 | optional: true 1322 | 1323 | '@esbuild/linux-arm64@0.18.20': 1324 | optional: true 1325 | 1326 | '@esbuild/linux-arm@0.18.20': 1327 | optional: true 1328 | 1329 | '@esbuild/linux-ia32@0.18.20': 1330 | optional: true 1331 | 1332 | '@esbuild/linux-loong64@0.18.20': 1333 | optional: true 1334 | 1335 | '@esbuild/linux-mips64el@0.18.20': 1336 | optional: true 1337 | 1338 | '@esbuild/linux-ppc64@0.18.20': 1339 | optional: true 1340 | 1341 | '@esbuild/linux-riscv64@0.18.20': 1342 | optional: true 1343 | 1344 | '@esbuild/linux-s390x@0.18.20': 1345 | optional: true 1346 | 1347 | '@esbuild/linux-x64@0.18.20': 1348 | optional: true 1349 | 1350 | '@esbuild/netbsd-x64@0.18.20': 1351 | optional: true 1352 | 1353 | '@esbuild/openbsd-x64@0.18.20': 1354 | optional: true 1355 | 1356 | '@esbuild/sunos-x64@0.18.20': 1357 | optional: true 1358 | 1359 | '@esbuild/win32-arm64@0.18.20': 1360 | optional: true 1361 | 1362 | '@esbuild/win32-ia32@0.18.20': 1363 | optional: true 1364 | 1365 | '@esbuild/win32-x64@0.18.20': 1366 | optional: true 1367 | 1368 | '@isaacs/cliui@8.0.2': 1369 | dependencies: 1370 | string-width: 5.1.2 1371 | string-width-cjs: string-width@4.2.3 1372 | strip-ansi: 7.1.0 1373 | strip-ansi-cjs: strip-ansi@6.0.1 1374 | wrap-ansi: 8.1.0 1375 | wrap-ansi-cjs: wrap-ansi@7.0.0 1376 | 1377 | '@jridgewell/gen-mapping@0.3.8': 1378 | dependencies: 1379 | '@jridgewell/set-array': 1.2.1 1380 | '@jridgewell/sourcemap-codec': 1.5.0 1381 | '@jridgewell/trace-mapping': 0.3.25 1382 | 1383 | '@jridgewell/resolve-uri@3.1.2': {} 1384 | 1385 | '@jridgewell/set-array@1.2.1': {} 1386 | 1387 | '@jridgewell/sourcemap-codec@1.5.0': {} 1388 | 1389 | '@jridgewell/trace-mapping@0.3.25': 1390 | dependencies: 1391 | '@jridgewell/resolve-uri': 3.1.2 1392 | '@jridgewell/sourcemap-codec': 1.5.0 1393 | 1394 | '@lezer/common@1.2.3': {} 1395 | 1396 | '@lezer/highlight@1.2.1': 1397 | dependencies: 1398 | '@lezer/common': 1.2.3 1399 | 1400 | '@lezer/javascript@1.4.21': 1401 | dependencies: 1402 | '@lezer/common': 1.2.3 1403 | '@lezer/highlight': 1.2.1 1404 | '@lezer/lr': 1.4.2 1405 | 1406 | '@lezer/lr@1.4.2': 1407 | dependencies: 1408 | '@lezer/common': 1.2.3 1409 | 1410 | '@marijn/find-cluster-break@1.0.2': {} 1411 | 1412 | '@nodelib/fs.scandir@2.1.5': 1413 | dependencies: 1414 | '@nodelib/fs.stat': 2.0.5 1415 | run-parallel: 1.2.0 1416 | 1417 | '@nodelib/fs.stat@2.0.5': {} 1418 | 1419 | '@nodelib/fs.walk@1.2.8': 1420 | dependencies: 1421 | '@nodelib/fs.scandir': 2.1.5 1422 | fastq: 1.18.0 1423 | 1424 | '@parcel/watcher-android-arm64@2.5.0': 1425 | optional: true 1426 | 1427 | '@parcel/watcher-darwin-arm64@2.5.0': 1428 | optional: true 1429 | 1430 | '@parcel/watcher-darwin-x64@2.5.0': 1431 | optional: true 1432 | 1433 | '@parcel/watcher-freebsd-x64@2.5.0': 1434 | optional: true 1435 | 1436 | '@parcel/watcher-linux-arm-glibc@2.5.0': 1437 | optional: true 1438 | 1439 | '@parcel/watcher-linux-arm-musl@2.5.0': 1440 | optional: true 1441 | 1442 | '@parcel/watcher-linux-arm64-glibc@2.5.0': 1443 | optional: true 1444 | 1445 | '@parcel/watcher-linux-arm64-musl@2.5.0': 1446 | optional: true 1447 | 1448 | '@parcel/watcher-linux-x64-glibc@2.5.0': 1449 | optional: true 1450 | 1451 | '@parcel/watcher-linux-x64-musl@2.5.0': 1452 | optional: true 1453 | 1454 | '@parcel/watcher-win32-arm64@2.5.0': 1455 | optional: true 1456 | 1457 | '@parcel/watcher-win32-ia32@2.5.0': 1458 | optional: true 1459 | 1460 | '@parcel/watcher-win32-x64@2.5.0': 1461 | optional: true 1462 | 1463 | '@parcel/watcher@2.5.0': 1464 | dependencies: 1465 | detect-libc: 1.0.3 1466 | is-glob: 4.0.3 1467 | micromatch: 4.0.8 1468 | node-addon-api: 7.1.1 1469 | optionalDependencies: 1470 | '@parcel/watcher-android-arm64': 2.5.0 1471 | '@parcel/watcher-darwin-arm64': 2.5.0 1472 | '@parcel/watcher-darwin-x64': 2.5.0 1473 | '@parcel/watcher-freebsd-x64': 2.5.0 1474 | '@parcel/watcher-linux-arm-glibc': 2.5.0 1475 | '@parcel/watcher-linux-arm-musl': 2.5.0 1476 | '@parcel/watcher-linux-arm64-glibc': 2.5.0 1477 | '@parcel/watcher-linux-arm64-musl': 2.5.0 1478 | '@parcel/watcher-linux-x64-glibc': 2.5.0 1479 | '@parcel/watcher-linux-x64-musl': 2.5.0 1480 | '@parcel/watcher-win32-arm64': 2.5.0 1481 | '@parcel/watcher-win32-ia32': 2.5.0 1482 | '@parcel/watcher-win32-x64': 2.5.0 1483 | optional: true 1484 | 1485 | '@pkgjs/parseargs@0.11.0': 1486 | optional: true 1487 | 1488 | '@rollup/plugin-virtual@3.0.2(rollup@3.29.5)': 1489 | optionalDependencies: 1490 | rollup: 3.29.5 1491 | 1492 | '@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@3.59.2)(vite@4.5.5(sass@1.83.1)))(svelte@3.59.2)(vite@4.5.5(sass@1.83.1))': 1493 | dependencies: 1494 | '@sveltejs/vite-plugin-svelte': 2.5.3(svelte@3.59.2)(vite@4.5.5(sass@1.83.1)) 1495 | debug: 4.4.0 1496 | svelte: 3.59.2 1497 | vite: 4.5.5(sass@1.83.1) 1498 | transitivePeerDependencies: 1499 | - supports-color 1500 | 1501 | '@sveltejs/vite-plugin-svelte@2.5.3(svelte@3.59.2)(vite@4.5.5(sass@1.83.1))': 1502 | dependencies: 1503 | '@sveltejs/vite-plugin-svelte-inspector': 1.0.4(@sveltejs/vite-plugin-svelte@2.5.3(svelte@3.59.2)(vite@4.5.5(sass@1.83.1)))(svelte@3.59.2)(vite@4.5.5(sass@1.83.1)) 1504 | debug: 4.4.0 1505 | deepmerge: 4.3.1 1506 | kleur: 4.1.5 1507 | magic-string: 0.30.17 1508 | svelte: 3.59.2 1509 | svelte-hmr: 0.15.3(svelte@3.59.2) 1510 | vite: 4.5.5(sass@1.83.1) 1511 | vitefu: 0.2.5(vite@4.5.5(sass@1.83.1)) 1512 | transitivePeerDependencies: 1513 | - supports-color 1514 | 1515 | '@swc/core-darwin-arm64@1.10.4': 1516 | optional: true 1517 | 1518 | '@swc/core-darwin-x64@1.10.4': 1519 | optional: true 1520 | 1521 | '@swc/core-linux-arm-gnueabihf@1.10.4': 1522 | optional: true 1523 | 1524 | '@swc/core-linux-arm64-gnu@1.10.4': 1525 | optional: true 1526 | 1527 | '@swc/core-linux-arm64-musl@1.10.4': 1528 | optional: true 1529 | 1530 | '@swc/core-linux-x64-gnu@1.10.4': 1531 | optional: true 1532 | 1533 | '@swc/core-linux-x64-musl@1.10.4': 1534 | optional: true 1535 | 1536 | '@swc/core-win32-arm64-msvc@1.10.4': 1537 | optional: true 1538 | 1539 | '@swc/core-win32-ia32-msvc@1.10.4': 1540 | optional: true 1541 | 1542 | '@swc/core-win32-x64-msvc@1.10.4': 1543 | optional: true 1544 | 1545 | '@swc/core@1.10.4': 1546 | dependencies: 1547 | '@swc/counter': 0.1.3 1548 | '@swc/types': 0.1.17 1549 | optionalDependencies: 1550 | '@swc/core-darwin-arm64': 1.10.4 1551 | '@swc/core-darwin-x64': 1.10.4 1552 | '@swc/core-linux-arm-gnueabihf': 1.10.4 1553 | '@swc/core-linux-arm64-gnu': 1.10.4 1554 | '@swc/core-linux-arm64-musl': 1.10.4 1555 | '@swc/core-linux-x64-gnu': 1.10.4 1556 | '@swc/core-linux-x64-musl': 1.10.4 1557 | '@swc/core-win32-arm64-msvc': 1.10.4 1558 | '@swc/core-win32-ia32-msvc': 1.10.4 1559 | '@swc/core-win32-x64-msvc': 1.10.4 1560 | 1561 | '@swc/counter@0.1.3': {} 1562 | 1563 | '@swc/types@0.1.17': 1564 | dependencies: 1565 | '@swc/counter': 0.1.3 1566 | 1567 | '@tsconfig/svelte@3.0.0': {} 1568 | 1569 | '@types/pug@2.0.10': {} 1570 | 1571 | '@types/sass@1.45.0': 1572 | dependencies: 1573 | sass: 1.83.1 1574 | 1575 | ansi-regex@5.0.1: {} 1576 | 1577 | ansi-regex@6.1.0: {} 1578 | 1579 | ansi-styles@4.3.0: 1580 | dependencies: 1581 | color-convert: 2.0.1 1582 | 1583 | ansi-styles@6.2.1: {} 1584 | 1585 | any-promise@1.3.0: {} 1586 | 1587 | anymatch@3.1.3: 1588 | dependencies: 1589 | normalize-path: 3.0.0 1590 | picomatch: 2.3.1 1591 | 1592 | arg@5.0.2: {} 1593 | 1594 | assemblyscript@0.21.7: 1595 | dependencies: 1596 | binaryen: 110.0.0-nightly.20221006 1597 | long: 5.2.3 1598 | 1599 | autoprefixer@10.4.20(postcss@8.4.49): 1600 | dependencies: 1601 | browserslist: 4.24.4 1602 | caniuse-lite: 1.0.30001692 1603 | fraction.js: 4.3.7 1604 | normalize-range: 0.1.2 1605 | picocolors: 1.1.1 1606 | postcss: 8.4.49 1607 | postcss-value-parser: 4.2.0 1608 | 1609 | balanced-match@1.0.2: {} 1610 | 1611 | base64-js@1.5.1: {} 1612 | 1613 | binary-extensions@2.3.0: {} 1614 | 1615 | binaryen@110.0.0-nightly.20221006: {} 1616 | 1617 | brace-expansion@1.1.11: 1618 | dependencies: 1619 | balanced-match: 1.0.2 1620 | concat-map: 0.0.1 1621 | 1622 | brace-expansion@2.0.1: 1623 | dependencies: 1624 | balanced-match: 1.0.2 1625 | 1626 | braces@3.0.3: 1627 | dependencies: 1628 | fill-range: 7.1.1 1629 | 1630 | browserslist@4.24.4: 1631 | dependencies: 1632 | caniuse-lite: 1.0.30001692 1633 | electron-to-chromium: 1.5.80 1634 | node-releases: 2.0.19 1635 | update-browserslist-db: 1.1.2(browserslist@4.24.4) 1636 | 1637 | buffer-crc32@0.2.13: {} 1638 | 1639 | buffer@6.0.3: 1640 | dependencies: 1641 | base64-js: 1.5.1 1642 | ieee754: 1.2.1 1643 | 1644 | callsites@3.1.0: {} 1645 | 1646 | camelcase-css@2.0.1: {} 1647 | 1648 | caniuse-lite@1.0.30001692: {} 1649 | 1650 | chokidar@3.6.0: 1651 | dependencies: 1652 | anymatch: 3.1.3 1653 | braces: 3.0.3 1654 | glob-parent: 5.1.2 1655 | is-binary-path: 2.1.0 1656 | is-glob: 4.0.3 1657 | normalize-path: 3.0.0 1658 | readdirp: 3.6.0 1659 | optionalDependencies: 1660 | fsevents: 2.3.3 1661 | 1662 | chokidar@4.0.3: 1663 | dependencies: 1664 | readdirp: 4.0.2 1665 | 1666 | codemirror@6.0.1: 1667 | dependencies: 1668 | '@codemirror/autocomplete': 6.18.4 1669 | '@codemirror/commands': 6.8.0 1670 | '@codemirror/language': 6.10.8 1671 | '@codemirror/lint': 6.8.4 1672 | '@codemirror/search': 6.5.8 1673 | '@codemirror/state': 6.5.0 1674 | '@codemirror/view': 6.36.2 1675 | 1676 | color-convert@2.0.1: 1677 | dependencies: 1678 | color-name: 1.1.4 1679 | 1680 | color-name@1.1.4: {} 1681 | 1682 | commander@4.1.1: {} 1683 | 1684 | concat-map@0.0.1: {} 1685 | 1686 | crelt@1.0.6: {} 1687 | 1688 | cross-spawn@7.0.6: 1689 | dependencies: 1690 | path-key: 3.1.1 1691 | shebang-command: 2.0.0 1692 | which: 2.0.2 1693 | 1694 | css-selector-tokenizer@0.8.0: 1695 | dependencies: 1696 | cssesc: 3.0.0 1697 | fastparse: 1.1.2 1698 | 1699 | cssesc@3.0.0: {} 1700 | 1701 | culori@3.3.0: {} 1702 | 1703 | daisyui@4.12.23(postcss@8.4.49): 1704 | dependencies: 1705 | css-selector-tokenizer: 0.8.0 1706 | culori: 3.3.0 1707 | picocolors: 1.1.1 1708 | postcss-js: 4.0.1(postcss@8.4.49) 1709 | transitivePeerDependencies: 1710 | - postcss 1711 | 1712 | debug@4.4.0: 1713 | dependencies: 1714 | ms: 2.1.3 1715 | 1716 | deepmerge@4.3.1: {} 1717 | 1718 | detect-indent@6.1.0: {} 1719 | 1720 | detect-libc@1.0.3: 1721 | optional: true 1722 | 1723 | didyoumean@1.2.2: {} 1724 | 1725 | dlv@1.1.3: {} 1726 | 1727 | eastasianwidth@0.2.0: {} 1728 | 1729 | electron-to-chromium@1.5.80: {} 1730 | 1731 | emoji-regex@8.0.0: {} 1732 | 1733 | emoji-regex@9.2.2: {} 1734 | 1735 | es6-promise@3.3.1: {} 1736 | 1737 | esbuild@0.18.20: 1738 | optionalDependencies: 1739 | '@esbuild/android-arm': 0.18.20 1740 | '@esbuild/android-arm64': 0.18.20 1741 | '@esbuild/android-x64': 0.18.20 1742 | '@esbuild/darwin-arm64': 0.18.20 1743 | '@esbuild/darwin-x64': 0.18.20 1744 | '@esbuild/freebsd-arm64': 0.18.20 1745 | '@esbuild/freebsd-x64': 0.18.20 1746 | '@esbuild/linux-arm': 0.18.20 1747 | '@esbuild/linux-arm64': 0.18.20 1748 | '@esbuild/linux-ia32': 0.18.20 1749 | '@esbuild/linux-loong64': 0.18.20 1750 | '@esbuild/linux-mips64el': 0.18.20 1751 | '@esbuild/linux-ppc64': 0.18.20 1752 | '@esbuild/linux-riscv64': 0.18.20 1753 | '@esbuild/linux-s390x': 0.18.20 1754 | '@esbuild/linux-x64': 0.18.20 1755 | '@esbuild/netbsd-x64': 0.18.20 1756 | '@esbuild/openbsd-x64': 0.18.20 1757 | '@esbuild/sunos-x64': 0.18.20 1758 | '@esbuild/win32-arm64': 0.18.20 1759 | '@esbuild/win32-ia32': 0.18.20 1760 | '@esbuild/win32-x64': 0.18.20 1761 | 1762 | escalade@3.2.0: {} 1763 | 1764 | fast-glob@3.3.3: 1765 | dependencies: 1766 | '@nodelib/fs.stat': 2.0.5 1767 | '@nodelib/fs.walk': 1.2.8 1768 | glob-parent: 5.1.2 1769 | merge2: 1.4.1 1770 | micromatch: 4.0.8 1771 | 1772 | fastparse@1.1.2: {} 1773 | 1774 | fastq@1.18.0: 1775 | dependencies: 1776 | reusify: 1.0.4 1777 | 1778 | fill-range@7.1.1: 1779 | dependencies: 1780 | to-regex-range: 5.0.1 1781 | 1782 | foreground-child@3.3.0: 1783 | dependencies: 1784 | cross-spawn: 7.0.6 1785 | signal-exit: 4.1.0 1786 | 1787 | fraction.js@4.3.7: {} 1788 | 1789 | fs.realpath@1.0.0: {} 1790 | 1791 | fsevents@2.3.3: 1792 | optional: true 1793 | 1794 | function-bind@1.1.2: {} 1795 | 1796 | glob-parent@5.1.2: 1797 | dependencies: 1798 | is-glob: 4.0.3 1799 | 1800 | glob-parent@6.0.2: 1801 | dependencies: 1802 | is-glob: 4.0.3 1803 | 1804 | glob@10.4.5: 1805 | dependencies: 1806 | foreground-child: 3.3.0 1807 | jackspeak: 3.4.3 1808 | minimatch: 9.0.5 1809 | minipass: 7.1.2 1810 | package-json-from-dist: 1.0.1 1811 | path-scurry: 1.11.1 1812 | 1813 | glob@7.2.3: 1814 | dependencies: 1815 | fs.realpath: 1.0.0 1816 | inflight: 1.0.6 1817 | inherits: 2.0.4 1818 | minimatch: 3.1.2 1819 | once: 1.4.0 1820 | path-is-absolute: 1.0.1 1821 | 1822 | graceful-fs@4.2.11: {} 1823 | 1824 | hasown@2.0.2: 1825 | dependencies: 1826 | function-bind: 1.1.2 1827 | 1828 | ieee754@1.2.1: {} 1829 | 1830 | immutable@5.0.3: {} 1831 | 1832 | import-fresh@3.3.0: 1833 | dependencies: 1834 | parent-module: 1.0.1 1835 | resolve-from: 4.0.0 1836 | 1837 | inflight@1.0.6: 1838 | dependencies: 1839 | once: 1.4.0 1840 | wrappy: 1.0.2 1841 | 1842 | inherits@2.0.4: {} 1843 | 1844 | is-binary-path@2.1.0: 1845 | dependencies: 1846 | binary-extensions: 2.3.0 1847 | 1848 | is-core-module@2.16.1: 1849 | dependencies: 1850 | hasown: 2.0.2 1851 | 1852 | is-extglob@2.1.1: {} 1853 | 1854 | is-fullwidth-code-point@3.0.0: {} 1855 | 1856 | is-glob@4.0.3: 1857 | dependencies: 1858 | is-extglob: 2.1.1 1859 | 1860 | is-mobile@3.1.1: {} 1861 | 1862 | is-number@7.0.0: {} 1863 | 1864 | isexe@2.0.0: {} 1865 | 1866 | jackspeak@3.4.3: 1867 | dependencies: 1868 | '@isaacs/cliui': 8.0.2 1869 | optionalDependencies: 1870 | '@pkgjs/parseargs': 0.11.0 1871 | 1872 | jiti@1.21.7: {} 1873 | 1874 | kleur@4.1.5: {} 1875 | 1876 | lilconfig@3.1.3: {} 1877 | 1878 | lines-and-columns@1.2.4: {} 1879 | 1880 | long@5.2.3: {} 1881 | 1882 | lru-cache@10.4.3: {} 1883 | 1884 | lz-string@1.5.0: {} 1885 | 1886 | magic-string@0.25.9: 1887 | dependencies: 1888 | sourcemap-codec: 1.4.8 1889 | 1890 | magic-string@0.30.17: 1891 | dependencies: 1892 | '@jridgewell/sourcemap-codec': 1.5.0 1893 | 1894 | merge2@1.4.1: {} 1895 | 1896 | micromatch@4.0.8: 1897 | dependencies: 1898 | braces: 3.0.3 1899 | picomatch: 2.3.1 1900 | 1901 | min-indent@1.0.1: {} 1902 | 1903 | minimatch@3.1.2: 1904 | dependencies: 1905 | brace-expansion: 1.1.11 1906 | 1907 | minimatch@9.0.5: 1908 | dependencies: 1909 | brace-expansion: 2.0.1 1910 | 1911 | minimist@1.2.8: {} 1912 | 1913 | minipass@7.1.2: {} 1914 | 1915 | mkdirp@0.5.6: 1916 | dependencies: 1917 | minimist: 1.2.8 1918 | 1919 | mri@1.2.0: {} 1920 | 1921 | ms@2.1.3: {} 1922 | 1923 | mz@2.7.0: 1924 | dependencies: 1925 | any-promise: 1.3.0 1926 | object-assign: 4.1.1 1927 | thenify-all: 1.6.0 1928 | 1929 | nanoid@3.3.8: {} 1930 | 1931 | node-addon-api@7.1.1: 1932 | optional: true 1933 | 1934 | node-releases@2.0.19: {} 1935 | 1936 | normalize-path@3.0.0: {} 1937 | 1938 | normalize-range@0.1.2: {} 1939 | 1940 | object-assign@4.1.1: {} 1941 | 1942 | object-hash@3.0.0: {} 1943 | 1944 | once@1.4.0: 1945 | dependencies: 1946 | wrappy: 1.0.2 1947 | 1948 | package-json-from-dist@1.0.1: {} 1949 | 1950 | parent-module@1.0.1: 1951 | dependencies: 1952 | callsites: 3.1.0 1953 | 1954 | path-is-absolute@1.0.1: {} 1955 | 1956 | path-key@3.1.1: {} 1957 | 1958 | path-parse@1.0.7: {} 1959 | 1960 | path-scurry@1.11.1: 1961 | dependencies: 1962 | lru-cache: 10.4.3 1963 | minipass: 7.1.2 1964 | 1965 | picocolors@1.1.1: {} 1966 | 1967 | picomatch@2.3.1: {} 1968 | 1969 | pify@2.3.0: {} 1970 | 1971 | pirates@4.0.6: {} 1972 | 1973 | postcss-import@15.1.0(postcss@8.4.49): 1974 | dependencies: 1975 | postcss: 8.4.49 1976 | postcss-value-parser: 4.2.0 1977 | read-cache: 1.0.0 1978 | resolve: 1.22.10 1979 | 1980 | postcss-js@4.0.1(postcss@8.4.49): 1981 | dependencies: 1982 | camelcase-css: 2.0.1 1983 | postcss: 8.4.49 1984 | 1985 | postcss-load-config@4.0.2(postcss@8.4.49): 1986 | dependencies: 1987 | lilconfig: 3.1.3 1988 | yaml: 2.7.0 1989 | optionalDependencies: 1990 | postcss: 8.4.49 1991 | 1992 | postcss-nested@6.2.0(postcss@8.4.49): 1993 | dependencies: 1994 | postcss: 8.4.49 1995 | postcss-selector-parser: 6.1.2 1996 | 1997 | postcss-selector-parser@6.1.2: 1998 | dependencies: 1999 | cssesc: 3.0.0 2000 | util-deprecate: 1.0.2 2001 | 2002 | postcss-value-parser@4.2.0: {} 2003 | 2004 | postcss@8.4.49: 2005 | dependencies: 2006 | nanoid: 3.3.8 2007 | picocolors: 1.1.1 2008 | source-map-js: 1.2.1 2009 | 2010 | queue-microtask@1.2.3: {} 2011 | 2012 | read-cache@1.0.0: 2013 | dependencies: 2014 | pify: 2.3.0 2015 | 2016 | readdirp@3.6.0: 2017 | dependencies: 2018 | picomatch: 2.3.1 2019 | 2020 | readdirp@4.0.2: {} 2021 | 2022 | resolve-from@4.0.0: {} 2023 | 2024 | resolve@1.22.10: 2025 | dependencies: 2026 | is-core-module: 2.16.1 2027 | path-parse: 1.0.7 2028 | supports-preserve-symlinks-flag: 1.0.0 2029 | 2030 | reusify@1.0.4: {} 2031 | 2032 | rimraf@2.7.1: 2033 | dependencies: 2034 | glob: 7.2.3 2035 | 2036 | rolandc_wasm@0.1.1: {} 2037 | 2038 | rollup@3.29.5: 2039 | optionalDependencies: 2040 | fsevents: 2.3.3 2041 | 2042 | run-parallel@1.2.0: 2043 | dependencies: 2044 | queue-microtask: 1.2.3 2045 | 2046 | sade@1.8.1: 2047 | dependencies: 2048 | mri: 1.2.0 2049 | 2050 | sander@0.5.1: 2051 | dependencies: 2052 | es6-promise: 3.3.1 2053 | graceful-fs: 4.2.11 2054 | mkdirp: 0.5.6 2055 | rimraf: 2.7.1 2056 | 2057 | sass@1.83.1: 2058 | dependencies: 2059 | chokidar: 4.0.3 2060 | immutable: 5.0.3 2061 | source-map-js: 1.2.1 2062 | optionalDependencies: 2063 | '@parcel/watcher': 2.5.0 2064 | 2065 | shebang-command@2.0.0: 2066 | dependencies: 2067 | shebang-regex: 3.0.0 2068 | 2069 | shebang-regex@3.0.0: {} 2070 | 2071 | signal-exit@4.1.0: {} 2072 | 2073 | sorcery@0.10.0: 2074 | dependencies: 2075 | buffer-crc32: 0.2.13 2076 | minimist: 1.2.8 2077 | sander: 0.5.1 2078 | sourcemap-codec: 1.4.8 2079 | 2080 | source-map-js@1.2.1: {} 2081 | 2082 | sourcemap-codec@1.4.8: {} 2083 | 2084 | string-width@4.2.3: 2085 | dependencies: 2086 | emoji-regex: 8.0.0 2087 | is-fullwidth-code-point: 3.0.0 2088 | strip-ansi: 6.0.1 2089 | 2090 | string-width@5.1.2: 2091 | dependencies: 2092 | eastasianwidth: 0.2.0 2093 | emoji-regex: 9.2.2 2094 | strip-ansi: 7.1.0 2095 | 2096 | strip-ansi@6.0.1: 2097 | dependencies: 2098 | ansi-regex: 5.0.1 2099 | 2100 | strip-ansi@7.1.0: 2101 | dependencies: 2102 | ansi-regex: 6.1.0 2103 | 2104 | strip-indent@3.0.0: 2105 | dependencies: 2106 | min-indent: 1.0.1 2107 | 2108 | style-mod@4.1.2: {} 2109 | 2110 | sucrase@3.35.0: 2111 | dependencies: 2112 | '@jridgewell/gen-mapping': 0.3.8 2113 | commander: 4.1.1 2114 | glob: 10.4.5 2115 | lines-and-columns: 1.2.4 2116 | mz: 2.7.0 2117 | pirates: 4.0.6 2118 | ts-interface-checker: 0.1.13 2119 | 2120 | supports-preserve-symlinks-flag@1.0.0: {} 2121 | 2122 | svelte-check@2.10.3(postcss-load-config@4.0.2(postcss@8.4.49))(postcss@8.4.49)(sass@1.83.1)(svelte@3.59.2): 2123 | dependencies: 2124 | '@jridgewell/trace-mapping': 0.3.25 2125 | chokidar: 3.6.0 2126 | fast-glob: 3.3.3 2127 | import-fresh: 3.3.0 2128 | picocolors: 1.1.1 2129 | sade: 1.8.1 2130 | svelte: 3.59.2 2131 | svelte-preprocess: 4.10.7(postcss-load-config@4.0.2(postcss@8.4.49))(postcss@8.4.49)(sass@1.83.1)(svelte@3.59.2)(typescript@4.9.5) 2132 | typescript: 4.9.5 2133 | transitivePeerDependencies: 2134 | - '@babel/core' 2135 | - coffeescript 2136 | - less 2137 | - node-sass 2138 | - postcss 2139 | - postcss-load-config 2140 | - pug 2141 | - sass 2142 | - stylus 2143 | - sugarss 2144 | 2145 | svelte-codemirror-editor@1.4.1(codemirror@6.0.1)(svelte@3.59.2): 2146 | dependencies: 2147 | codemirror: 6.0.1 2148 | svelte: 3.59.2 2149 | 2150 | svelte-hmr@0.15.3(svelte@3.59.2): 2151 | dependencies: 2152 | svelte: 3.59.2 2153 | 2154 | svelte-preprocess@4.10.7(postcss-load-config@4.0.2(postcss@8.4.49))(postcss@8.4.49)(sass@1.83.1)(svelte@3.59.2)(typescript@4.9.5): 2155 | dependencies: 2156 | '@types/pug': 2.0.10 2157 | '@types/sass': 1.45.0 2158 | detect-indent: 6.1.0 2159 | magic-string: 0.25.9 2160 | sorcery: 0.10.0 2161 | strip-indent: 3.0.0 2162 | svelte: 3.59.2 2163 | optionalDependencies: 2164 | postcss: 8.4.49 2165 | postcss-load-config: 4.0.2(postcss@8.4.49) 2166 | sass: 1.83.1 2167 | typescript: 4.9.5 2168 | 2169 | svelte@3.59.2: {} 2170 | 2171 | tailwindcss@3.4.17: 2172 | dependencies: 2173 | '@alloc/quick-lru': 5.2.0 2174 | arg: 5.0.2 2175 | chokidar: 3.6.0 2176 | didyoumean: 1.2.2 2177 | dlv: 1.1.3 2178 | fast-glob: 3.3.3 2179 | glob-parent: 6.0.2 2180 | is-glob: 4.0.3 2181 | jiti: 1.21.7 2182 | lilconfig: 3.1.3 2183 | micromatch: 4.0.8 2184 | normalize-path: 3.0.0 2185 | object-hash: 3.0.0 2186 | picocolors: 1.1.1 2187 | postcss: 8.4.49 2188 | postcss-import: 15.1.0(postcss@8.4.49) 2189 | postcss-js: 4.0.1(postcss@8.4.49) 2190 | postcss-load-config: 4.0.2(postcss@8.4.49) 2191 | postcss-nested: 6.2.0(postcss@8.4.49) 2192 | postcss-selector-parser: 6.1.2 2193 | resolve: 1.22.10 2194 | sucrase: 3.35.0 2195 | transitivePeerDependencies: 2196 | - ts-node 2197 | 2198 | thenify-all@1.6.0: 2199 | dependencies: 2200 | thenify: 3.3.1 2201 | 2202 | thenify@3.3.1: 2203 | dependencies: 2204 | any-promise: 1.3.0 2205 | 2206 | to-regex-range@5.0.1: 2207 | dependencies: 2208 | is-number: 7.0.0 2209 | 2210 | ts-interface-checker@0.1.13: {} 2211 | 2212 | tslib@2.8.1: {} 2213 | 2214 | typescript@4.9.5: {} 2215 | 2216 | update-browserslist-db@1.1.2(browserslist@4.24.4): 2217 | dependencies: 2218 | browserslist: 4.24.4 2219 | escalade: 3.2.0 2220 | picocolors: 1.1.1 2221 | 2222 | util-deprecate@1.0.2: {} 2223 | 2224 | uuid@10.0.0: {} 2225 | 2226 | vite-plugin-top-level-await@1.4.4(rollup@3.29.5)(vite@4.5.5(sass@1.83.1)): 2227 | dependencies: 2228 | '@rollup/plugin-virtual': 3.0.2(rollup@3.29.5) 2229 | '@swc/core': 1.10.4 2230 | uuid: 10.0.0 2231 | vite: 4.5.5(sass@1.83.1) 2232 | transitivePeerDependencies: 2233 | - '@swc/helpers' 2234 | - rollup 2235 | 2236 | vite-plugin-wasm@3.4.1(vite@4.5.5(sass@1.83.1)): 2237 | dependencies: 2238 | vite: 4.5.5(sass@1.83.1) 2239 | 2240 | vite@4.5.5(sass@1.83.1): 2241 | dependencies: 2242 | esbuild: 0.18.20 2243 | postcss: 8.4.49 2244 | rollup: 3.29.5 2245 | optionalDependencies: 2246 | fsevents: 2.3.3 2247 | sass: 1.83.1 2248 | 2249 | vitefu@0.2.5(vite@4.5.5(sass@1.83.1)): 2250 | optionalDependencies: 2251 | vite: 4.5.5(sass@1.83.1) 2252 | 2253 | w3c-keyname@2.2.8: {} 2254 | 2255 | which@2.0.2: 2256 | dependencies: 2257 | isexe: 2.0.0 2258 | 2259 | wrap-ansi@7.0.0: 2260 | dependencies: 2261 | ansi-styles: 4.3.0 2262 | string-width: 4.2.3 2263 | strip-ansi: 6.0.1 2264 | 2265 | wrap-ansi@8.1.0: 2266 | dependencies: 2267 | ansi-styles: 6.2.1 2268 | string-width: 5.1.2 2269 | strip-ansi: 7.1.0 2270 | 2271 | wrappy@1.0.2: {} 2272 | 2273 | yaml@2.7.0: {} 2274 | --------------------------------------------------------------------------------