flora is a fast and secure runtime that lets you write discord bots for your servers, with a rich TypeScript SDK, without worrying about running infrastructure. [mirror]
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: migrate to vite-plus and task cache, modernize codebase

stuff

stuff

WIP

k

k

+4470 -4331
+1
.agents/skills/vite-plus
··· 1 + ../../node_modules/vite-plus/skills/vite-plus
+4 -14
.cargo/clippy.toml
··· 1 1 # Be strict but not masochistic 2 - warn = [ 3 - "clippy::all", 4 - "clippy::pedantic", 5 - ] 2 + warn = ["clippy::all", "clippy::pedantic"] 6 3 7 4 # Allow a few pedantic lints that are mostly noise in real code 8 5 allow = [ ··· 12 9 "clippy::must_use_candidate", 13 10 "clippy::similar_names", 14 11 "clippy::too_many_lines", 15 - "clippy::struct_excessive_bools", 12 + "clippy::struct_excessive_bools" 16 13 ] 17 14 18 15 # Performance matters 19 16 deny = [ 20 17 "clippy::inefficient_to_string", 21 18 "clippy::unnecessary_collect", 22 - "clippy::large_enum_variant", 19 + "clippy::large_enum_variant" 23 20 ] 24 21 25 22 # Style and readability tuning ··· 39 36 allow-expect-in-tests = true 40 37 41 38 # Docs 42 - doc-valid-idents = [ 43 - "GitHub", 44 - "GitLab", 45 - "PostgreSQL", 46 - "TypeScript", 47 - "JavaScript", 48 - "WebAssembly", 49 - ] 39 + doc-valid-idents = ["GitHub", "GitLab", "PostgreSQL", "TypeScript", "JavaScript", "WebAssembly"]
-39
.dprint.json
··· 1 - { 2 - "lineWidth": 100, 3 - "typescript": { 4 - "quoteStyle": "preferSingle", 5 - "binaryExpression.operatorPosition": "sameLine", 6 - "semiColons": "asi", 7 - "trailingCommas": "never" 8 - }, 9 - "json": { 10 - "indentWidth": 2 11 - }, 12 - "yaml": { 13 - "quotes": "preferSingle" 14 - }, 15 - "markdown": {}, 16 - "toml": {}, 17 - "malva": {}, 18 - "markup": {}, 19 - "excludes": [ 20 - "**/node_modules", 21 - "**/*-lock.json", 22 - "pnpm-lock.yaml", 23 - "**/bun.lock", 24 - "**/submodules/**", 25 - "**/dist", 26 - "**/trash", 27 - "**/target", 28 - "**/refs/**" 29 - ], 30 - "plugins": [ 31 - "https://plugins.dprint.dev/typescript-0.95.10.wasm", 32 - "https://plugins.dprint.dev/json-0.20.0.wasm", 33 - "https://plugins.dprint.dev/markdown-0.19.0.wasm", 34 - "https://plugins.dprint.dev/toml-0.7.0.wasm", 35 - "https://plugins.dprint.dev/g-plane/malva-v0.14.2.wasm", 36 - "https://plugins.dprint.dev/g-plane/markup_fmt-v0.23.2.wasm", 37 - "https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.1.wasm" 38 - ] 39 - }
+1
.vite-hooks/pre-commit
··· 1 + vp staged
+1 -1
.vscode/extensions.json
··· 2 2 "recommendations": [ 3 3 "rust-lang.rust-analyzer", 4 4 "fill-labs.dependi", 5 - "gplane.dprint2", 5 + "VoidZero.vite-plus-extension-pack", 6 6 "vue.volar" 7 7 ] 8 8 }
+6 -4
.vscode/settings.json
··· 1 1 { 2 - "editor.formatOnSave": true, 3 - "[typescript,javascript,typescriptreact,javascriptreact,json,jsonc,toml]": { 4 - "editor.defaultFormatter": "gplane.dprint2" 5 - }, 6 2 "rust-analyzer.files.exclude": [ 7 3 "trash", 8 4 "**/trash", ··· 17 13 "**/target/**": true, 18 14 "**/node_modules/**": true, 19 15 "**/trash/**": true 16 + }, 17 + "editor.defaultFormatter": "oxc.oxc-vscode", 18 + "editor.formatOnSave": true, 19 + "editor.formatOnSaveMode": "file", 20 + "editor.codeActionsOnSave": { 21 + "source.fixAll.oxc": "explicit" 20 22 } 21 23 }
+77
AGENTS.md
··· 422 422 4. `cargo test` (all tests pass) 423 423 5. `pnpm test` (SDK tests pass, if applicable) 424 424 6. Verify no secrets in changed files (`.env`, credentials) 425 + 426 + <!--VITE PLUS START--> 427 + 428 + # Using Vite+, the Unified Toolchain for the Web 429 + 430 + This project is using Vite+, a unified toolchain built on top of Vite, Rolldown, Vitest, tsdown, Oxlint, Oxfmt, and Vite Task. Vite+ wraps runtime management, package management, and frontend tooling in a single global CLI called `vp`. Vite+ is distinct from Vite, but it invokes Vite through `vp dev` and `vp build`. 431 + 432 + ## Vite+ Workflow 433 + 434 + `vp` is a global binary that handles the full development lifecycle. Run `vp help` to print a list of commands and `vp <command> --help` for information about a specific command. 435 + 436 + ### Start 437 + 438 + - create - Create a new project from a template 439 + - migrate - Migrate an existing project to Vite+ 440 + - config - Configure hooks and agent integration 441 + - staged - Run linters on staged files 442 + - install (`i`) - Install dependencies 443 + - env - Manage Node.js versions 444 + 445 + ### Develop 446 + 447 + - dev - Run the development server 448 + - check - Run format, lint, and TypeScript type checks 449 + - lint - Lint code 450 + - fmt - Format code 451 + - test - Run tests 452 + 453 + ### Execute 454 + 455 + - run - Run monorepo tasks 456 + - exec - Execute a command from local `node_modules/.bin` 457 + - dlx - Execute a package binary without installing it as a dependency 458 + - cache - Manage the task cache 459 + 460 + ### Build 461 + 462 + - build - Build for production 463 + - pack - Build libraries 464 + - preview - Preview production build 465 + 466 + ### Manage Dependencies 467 + 468 + Vite+ automatically detects and wraps the underlying package manager such as pnpm, npm, or Yarn through the `packageManager` field in `package.json` or package manager-specific lockfiles. 469 + 470 + - add - Add packages to dependencies 471 + - remove (`rm`, `un`, `uninstall`) - Remove packages from dependencies 472 + - update (`up`) - Update packages to latest versions 473 + - dedupe - Deduplicate dependencies 474 + - outdated - Check for outdated packages 475 + - list (`ls`) - List installed packages 476 + - why (`explain`) - Show why a package is installed 477 + - info (`view`, `show`) - View package information from the registry 478 + - link (`ln`) / unlink - Manage local package links 479 + - pm - Forward a command to the package manager 480 + 481 + ### Maintain 482 + 483 + - upgrade - Update `vp` itself to the latest version 484 + 485 + These commands map to their corresponding tools. For example, `vp dev --port 3000` runs Vite's dev server and works the same as Vite. `vp test` runs JavaScript tests through the bundled Vitest. The version of all tools can be checked using `vp --version`. This is useful when researching documentation, features, and bugs. 486 + 487 + ## Common Pitfalls 488 + 489 + - **Using the package manager directly:** Do not use pnpm, npm, or Yarn directly. Vite+ can handle all package manager operations. 490 + - **Always use Vite commands to run tools:** Don't attempt to run `vp vitest` or `vp oxlint`. They do not exist. Use `vp test` and `vp lint` instead. 491 + - **Running scripts:** Vite+ commands take precedence over `package.json` scripts. If there is a `test` script defined in `scripts` that conflicts with the built-in `vp test` command, run it using `vp run test`. 492 + - **Do not install Vitest, Oxlint, Oxfmt, or tsdown directly:** Vite+ wraps these tools. They must not be installed directly. You cannot upgrade these tools by installing their latest versions. Always use Vite+ commands. 493 + - **Use Vite+ wrappers for one-off binaries:** Use `vp dlx` instead of package-manager-specific `dlx`/`npx` commands. 494 + - **Import JavaScript modules from `vite-plus`:** Instead of importing from `vite` or `vitest`, all modules should be imported from the project's `vite-plus` dependency. For example, `import { defineConfig } from 'vite-plus';` or `import { expect, test, vi } from 'vite-plus/test';`. You must not install `vitest` to import test utilities. 495 + - **Type-Aware Linting:** There is no need to install `oxlint-tsgolint`, `vp lint --type-aware` works out of the box. 496 + 497 + ## Review Checklist for Agents 498 + 499 + - [ ] Run `vp install` after pulling remote changes and before getting started. 500 + - [ ] Run `vp check` and `vp test` to validate changes. 501 + <!--VITE PLUS END-->
+32 -5
Cargo.toml
··· 18 18 cookie = "0.18" 19 19 croner = "3.0" 20 20 dashmap = "6.1.0" 21 - deno_core = { git = "file:///home/tasky/flora/submodules/deno_core", branch = "flora-locker-compat", default-features = false, features = ["v8_use_custom_libcxx"] } 21 + deno_core = { git = "file:///home/tasky/flora/submodules/deno_core", branch = "flora-locker-compat", default-features = false, features = [ 22 + "v8_use_custom_libcxx" 23 + ] } 22 24 deno_error = "0.7.1" 23 25 deno_fetch = "0.249.0" 24 26 deno_net = "0.217.0" ··· 37 39 http = "1" 38 40 num_cpus = "1.16" 39 41 openssl = { version = "0.10.75", features = ["vendored"] } 40 - oxc = { version = "0.101.0", features = ["full", "oxc_regular_expression", "semantic", "transformer"] } 42 + oxc = { version = "0.101.0", features = [ 43 + "full", 44 + "oxc_regular_expression", 45 + "semantic", 46 + "transformer" 47 + ] } 41 48 oxc_sourcemap = "6.0.2" 42 49 parking_lot = "0.12" 43 50 proc-macro2 = "1.0.106" ··· 46 53 reqwest = { version = "0.12.25", features = ["json", "multipart", "stream"] } 47 54 serde = { version = "1", features = ["derive"] } 48 55 serde_json = "1.0.149" 49 - serenity = { git = "https://github.com/serenity-rs/serenity", default-features = false, branch = "next", features = ["typesize", "temp_cache", "tokio_task_builder", "transport_compression_zstd", "rustls_backend"] } 56 + serenity = { git = "https://github.com/serenity-rs/serenity", default-features = false, branch = "next", features = [ 57 + "typesize", 58 + "temp_cache", 59 + "tokio_task_builder", 60 + "transport_compression_zstd", 61 + "rustls_backend" 62 + ] } 50 63 sha2 = "0.10" 51 64 sled = "0.34" 52 - sqlx = { version = "0.8.6", features = ["chrono", "macros", "postgres", "runtime-tokio-rustls", "uuid"] } 65 + sqlx = { version = "0.8.6", features = [ 66 + "chrono", 67 + "macros", 68 + "postgres", 69 + "runtime-tokio-rustls", 70 + "uuid" 71 + ] } 53 72 syn = { version = "2.0.117", features = ["full", "extra-traits", "parsing"] } 54 73 sys_traits = { version = "0.1.17", features = ["libc", "real"] } 55 74 t0x = { version = "0.1.8", features = ["serde-json-impl"] } ··· 66 85 tracing-subscriber = { version = "0.3.22", features = ["chrono", "env-filter", "serde", "time"] } 67 86 url = "2.5.8" 68 87 urlencoding = "2.1" 69 - utoipa = { version = "5.4.0", features = ["auto_into_responses", "axum_extras", "chrono", "config", "debug", "url", "uuid"] } 88 + utoipa = { version = "5.4.0", features = [ 89 + "auto_into_responses", 90 + "axum_extras", 91 + "chrono", 92 + "config", 93 + "debug", 94 + "url", 95 + "uuid" 96 + ] } 70 97 utoipa-scalar = { version = "0.3.0", features = ["axum"] } 71 98 uuid = { version = "1.21.0", features = ["v4"] } 72 99
+8 -10
apps/build-service/package.json
··· 1 1 { 2 - "name": "@uwu/flora-build-service", 2 + "name": "@flora-internal/build-service", 3 3 "version": "0.0.0", 4 4 "private": true, 5 5 "description": "flora server-side build service", 6 6 "type": "module", 7 7 "scripts": { 8 - "dev": "tsx --watch src/index.ts", 8 + "build": "vp pack", 9 + "dev": "vp pack --watch", 9 10 "start": "node dist/index.mjs", 10 - "build": "tsdown", 11 11 "typecheck": "tsgo --noEmit" 12 12 }, 13 13 "dependencies": { 14 - "h3": "2.0.1-rc.14", 15 - "rolldown": "^1.0.0-beta.43", 16 14 "consola": "^3.4.2", 17 - "fflate": "^0.8.2" 15 + "fflate": "^0.8.2", 16 + "h3": "2.0.1-rc.14", 17 + "rolldown": "^1.0.0-beta.43" 18 18 }, 19 19 "devDependencies": { 20 - "@types/node": "^24.3.0", 20 + "@types/node": "catalog:", 21 21 "@typescript/native-preview": "catalog:", 22 - "tsdown": "^0.20.3", 23 - "tsx": "^4.20.6", 24 - "typescript": "^5.9.3" 22 + "vite-plus": "catalog:" 25 23 } 26 24 }
+4 -9
apps/build-service/src/index.ts
··· 49 49 50 50 serve(app, { port, hostname: getHost() }) 51 51 52 - function formatRequestLog( 53 - method: string, 54 - path: string, 55 - status: number, 56 - elapsedMs: number 57 - ): string { 58 - return `${colorMethod(method)} ${colors.white(path)} -> ${colorStatus(status)} ${ 59 - colors.gray(`(${elapsedMs}ms)`) 60 - }` 52 + function formatRequestLog(method: string, path: string, status: number, elapsedMs: number): string { 53 + return `${colorMethod(method)} ${colors.white(path)} -> ${colorStatus(status)} ${colors.gray( 54 + `(${elapsedMs}ms)` 55 + )}` 61 56 } 62 57 63 58 function colorMethod(method: string): string {
+8 -8
apps/build-service/src/lib/bundle.ts
··· 26 26 const minifyEnabled = isBundleMinifyEnabled() 27 27 const minifyOption = minifyEnabled 28 28 ? { 29 - compress: { 30 - keepNames: { 31 - function: true, 32 - class: true 29 + compress: { 30 + keepNames: { 31 + function: true, 32 + class: true 33 + } 34 + }, 35 + mangle: { 36 + keepNames: true 33 37 } 34 - }, 35 - mangle: { 36 - keepNames: true 37 38 } 38 - } 39 39 : false 40 40 41 41 const result = await build({
+2 -6
apps/build-service/src/lib/pipeline.ts
··· 45 45 // 1. extract zip 46 46 log('Extracting project...') 47 47 const extracted = await extractZip(zipData, tmpDir) 48 - log( 49 - `Extracted ${extracted.fileCount} files (${formatBytes(extracted.totalSize)})` 50 - ) 48 + log(`Extracted ${extracted.fileCount} files (${formatBytes(extracted.totalSize)})`) 51 49 52 50 // 2. validate & sanitize package.json 53 51 log('Validating package.json...') 54 52 const pkg = await validateAndSanitizePackageJson(tmpDir) 55 - const depCount = pkg.dependencies 56 - ? Object.keys(pkg.dependencies).length 57 - : 0 53 + const depCount = pkg.dependencies ? Object.keys(pkg.dependencies).length : 0 58 54 log(`Found ${depCount} dependencies`) 59 55 60 56 // 3. install dependencies (only if there are any)
+22 -17
apps/build-service/src/lib/pnpm.ts
··· 54 54 55 55 function runPnpm(cwd: string, args: string[], onLog: (line: string) => void): Promise<void> { 56 56 return new Promise((resolve, reject) => { 57 - const child = execFile('pnpm', args, { 58 - cwd, 59 - timeout: PNPM_INSTALL_TIMEOUT, 60 - env: { 61 - ...process.env, 62 - CI: 'true', 63 - FORCE_COLOR: '1', 64 - npm_config_color: 'always', 65 - npm_config_ignore_scripts: 'true' 57 + const child = execFile( 58 + 'pnpm', 59 + args, 60 + { 61 + cwd, 62 + timeout: PNPM_INSTALL_TIMEOUT, 63 + env: { 64 + ...process.env, 65 + CI: 'true', 66 + FORCE_COLOR: '1', 67 + npm_config_color: 'always', 68 + npm_config_ignore_scripts: 'true' 69 + } 70 + }, 71 + (error, stdout, stderr) => { 72 + if (error) { 73 + emitBufferedLines(stderr, onLog) 74 + reject(new Error(`pnpm ${args.join(' ')} failed: ${error.message}`)) 75 + return 76 + } 77 + resolve() 66 78 } 67 - }, (error, stdout, stderr) => { 68 - if (error) { 69 - emitBufferedLines(stderr, onLog) 70 - reject(new Error(`pnpm ${args.join(' ')} failed: ${error.message}`)) 71 - return 72 - } 73 - resolve() 74 - }) 79 + ) 75 80 76 81 streamLines(child.stdout, onLog) 77 82 streamLines(child.stderr, onLog)
+4 -14
apps/build-service/src/lib/validate-package.ts
··· 58 58 59 59 for (const [name, specifier] of entries) { 60 60 if (typeof specifier !== 'string') { 61 - throw new Error( 62 - `Invalid specifier for dependency "${name}": must be a string` 63 - ) 61 + throw new Error(`Invalid specifier for dependency "${name}": must be a string`) 64 62 } 65 63 66 64 for (const prefix of DISALLOWED_SPECIFIER_PREFIXES) { ··· 71 69 } 72 70 } 73 71 74 - if ( 75 - specifier.startsWith('/') || 76 - specifier.startsWith('./') || 77 - specifier.startsWith('../') 78 - ) { 79 - throw new Error( 80 - `Disallowed local path specifier for dependency "${name}": "${specifier}"` 81 - ) 72 + if (specifier.startsWith('/') || specifier.startsWith('./') || specifier.startsWith('../')) { 73 + throw new Error(`Disallowed local path specifier for dependency "${name}": "${specifier}"`) 82 74 } 83 75 84 76 // Block bare GitHub shorthands like "user/repo" or "user/repo#ref" 85 77 // Scoped packages like "@org/pkg" are safe — they start with "@" 86 78 if (!specifier.startsWith('@') && BARE_GIT_SHORTHAND_RE.test(specifier)) { 87 - throw new Error( 88 - `Disallowed bare Git shorthand for dependency "${name}": "${specifier}"` 89 - ) 79 + throw new Error(`Disallowed bare Git shorthand for dependency "${name}": "${specifier}"`) 90 80 } 91 81 92 82 validDeps[name] = specifier
+2 -4
apps/build-service/src/lib/zip.ts
··· 32 32 33 33 const data = entries[name]! 34 34 if (data.byteLength > MAX_INDIVIDUAL_FILE_SIZE) { 35 - throw new Error( 36 - `File ${name} exceeds maximum size of ${MAX_INDIVIDUAL_FILE_SIZE} bytes` 37 - ) 35 + throw new Error(`File ${name} exceeds maximum size of ${MAX_INDIVIDUAL_FILE_SIZE} bytes`) 38 36 } 39 37 40 38 totalSize += data.byteLength ··· 58 56 } 59 57 60 58 return { 61 - fileCount: entryNames.filter(n => !n.endsWith('/')).length, 59 + fileCount: entryNames.filter((n) => !n.endsWith('/')).length, 62 60 totalSize 63 61 } 64 62 }
+14 -9
apps/build-service/tsconfig.json
··· 1 1 { 2 - "extends": "../../tsconfig.json", 3 2 "compilerOptions": { 4 - "target": "ES2022", 5 - "module": "ESNext", 6 - "moduleResolution": "Bundler", 7 - "lib": ["ES2022"], 3 + "target": "esnext", 4 + "lib": ["es2023"], 5 + "moduleDetection": "force", 6 + "module": "preserve", 7 + "moduleResolution": "bundler", 8 + "resolveJsonModule": true, 9 + "types": ["node"], 8 10 "strict": true, 9 - "resolveJsonModule": true, 10 - "skipLibCheck": true, 11 - "noEmit": true, 12 - "types": ["node"] 11 + "noUnusedLocals": true, 12 + "declaration": true, 13 + "emitDeclarationOnly": true, 14 + "esModuleInterop": true, 15 + "isolatedModules": true, 16 + "verbatimModuleSyntax": true, 17 + "skipLibCheck": true 13 18 }, 14 19 "include": ["src"] 15 20 }
+4 -1
apps/build-service/tsdown.config.ts
··· 1 - import { defineConfig } from 'tsdown' 1 + import { defineConfig } from 'vite-plus/pack' 2 2 3 3 export default defineConfig({ 4 + dts: { 5 + tsgo: true 6 + }, 4 7 entry: ['src/index.ts'], 5 8 outDir: 'dist', 6 9 format: 'esm',
+7
apps/build-service/vite.config.ts
··· 1 + import tsdownConfig from './tsdown.config.js' 2 + 3 + import { defineConfig } from 'vite-plus' 4 + 5 + export default defineConfig({ 6 + pack: tsdownConfig 7 + })
apps/cli/.gitignore packages/cli/.gitignore
apps/cli/README.md packages/cli/README.md
+15 -13
apps/cli/package.json packages/cli/package.json
··· 3 3 "version": "0.0.0", 4 4 "private": false, 5 5 "description": "flora command line interface", 6 - "type": "module", 7 6 "bin": { 8 7 "flora": "./dist/index.mjs" 9 8 }, ··· 12 11 "README.md", 13 12 "package.json" 14 13 ], 15 - "scripts": { 16 - "build": "tsdown", 17 - "dev": "tsx src/index.ts", 18 - "typecheck": "tsgo --noEmit", 19 - "test": "vite test --run" 20 - }, 14 + "type": "module", 21 15 "publishConfig": { 22 16 "access": "public" 23 17 }, 18 + "scripts": { 19 + "build": "vp pack", 20 + "dev": "vp pack --watch", 21 + "test": "vp test", 22 + "typecheck": "tsgo --noEmit", 23 + "release": "bumpp", 24 + "prepublishOnly": "pnpm run build" 25 + }, 24 26 "dependencies": { 25 27 "@clack/prompts": "^1.0.1", 26 28 "@uwu/flora-api-client": "workspace:*", 27 29 "c12": "^3.3.2", 28 30 "citty": "^0.2.1", 31 + "conf": "^15.1.0", 29 32 "consola": "^3.4.2", 30 33 "fflate": "^0.8.2", 31 - "conf": "^15.1.0", 32 34 "ignore": "^7.0.5", 33 - "rolldown": "^1.0.0-beta.43", 35 + "rolldown": "^0.15.1", 34 36 "tinyglobby": "^0.2.15" 35 37 }, 36 38 "devDependencies": { 37 - "@types/node": "^24.3.0", 39 + "@types/node": "catalog:", 38 40 "@typescript/native-preview": "catalog:", 39 - "tsdown": "^0.20.3", 40 - "tsx": "^4.20.6", 41 - "typescript": "^5.9.3", 41 + "bumpp": "^11.0.0", 42 + "typescript": "catalog:", 43 + "vite-plus": "catalog:", 42 44 "vitest": "catalog:" 43 45 } 44 46 }
apps/cli/pnpm-lock.yaml packages/cli/pnpm-lock.yaml
+4 -4
apps/cli/src/commands/deployments.ts packages/cli/src/commands/deployments.ts
··· 32 32 const formData = new FormData() 33 33 formData.append('guild_id', guild) 34 34 formData.append('entry', entryRel) 35 - formData.append('project_zip', new Blob([zip as BlobPart]), 'project.zip') 35 + formData.append('project_zip', new Blob([zip]), 'project.zip') 36 36 37 37 const baseUrl = config.apiUrl 38 38 const headers = authHeaders(config) ··· 107 107 bundle: build.artifact.bundle, 108 108 source_map: build.artifact.source_map 109 109 ? { 110 - path: 'bundle.js.map', 111 - contents: build.artifact.source_map 112 - } 110 + path: 'bundle.js.map', 111 + contents: build.artifact.source_map 112 + } 113 113 : undefined 114 114 }) 115 115 })
+1 -3
apps/cli/src/commands/kv.ts packages/cli/src/commands/kv.ts
··· 23 23 }) 24 24 ) 25 25 26 - logger.log( 27 - `Created KV store '${response.store.store_name}' for guild ${response.store.guild_id}` 28 - ) 26 + logger.log(`Created KV store '${response.store.store_name}' for guild ${response.store.guild_id}`) 29 27 } 30 28 31 29 export async function listStores(config: CliConfig, guildArg?: string): Promise<void> {
apps/cli/src/commands/login.ts packages/cli/src/commands/login.ts
+13 -13
apps/cli/src/commands/logs.ts packages/cli/src/commands/logs.ts
··· 8 8 9 9 const entries = guild 10 10 ? await expectOk( 11 - client.GET('/logs/{guild_id}', { 12 - params: { 13 - path: { guild_id: guild }, 14 - query: { limit } 15 - }, 16 - headers: authHeaders(config) 17 - }) 18 - ) 11 + client.GET('/logs/{guild_id}', { 12 + params: { 13 + path: { guild_id: guild }, 14 + query: { limit } 15 + }, 16 + headers: authHeaders(config) 17 + }) 18 + ) 19 19 : await expectOk( 20 - client.GET('/logs', { 21 - params: { query: { limit } }, 22 - headers: authHeaders(config) 23 - }) 24 - ) 20 + client.GET('/logs', { 21 + params: { query: { limit } }, 22 + headers: authHeaders(config) 23 + }) 24 + ) 25 25 26 26 if (entries.length === 0) { 27 27 logger.log('No logs found')
+20 -43
apps/cli/src/index.ts packages/cli/src/index.ts
··· 30 30 function resolveConfig(args: Record<string, unknown>): CliConfig { 31 31 const config = loadConfig() 32 32 const argApiUrl = args['api'] 33 - const apiUrl = (typeof argApiUrl === 'string' ? argApiUrl : undefined) ?? 34 - process.env.FLORA_API_URL 33 + const apiUrl = 34 + (typeof argApiUrl === 'string' ? argApiUrl : undefined) ?? process.env.FLORA_API_URL 35 35 36 36 if (apiUrl) { 37 37 config.apiUrl = apiUrl ··· 48 48 subCommands: { 49 49 'create-store': defineCommand({ 50 50 args: { 51 - 'api': { type: 'string', required: false, alias: 'a' }, 51 + api: { type: 'string', required: false, alias: 'a' }, 52 52 guild: { type: 'string', required: false }, 53 53 name: { type: 'string', required: false } 54 54 }, ··· 59 59 }), 60 60 'list-stores': defineCommand({ 61 61 args: { 62 - 'api': { type: 'string', required: false, alias: 'a' }, 62 + api: { type: 'string', required: false, alias: 'a' }, 63 63 guild: { type: 'string', required: false } 64 64 }, 65 65 async run({ args }) { ··· 69 69 }), 70 70 'delete-store': defineCommand({ 71 71 args: { 72 - 'api': { type: 'string', required: false, alias: 'a' }, 72 + api: { type: 'string', required: false, alias: 'a' }, 73 73 guild: { type: 'string', required: false }, 74 74 name: { type: 'string', required: false } 75 75 }, ··· 80 80 }), 81 81 set: defineCommand({ 82 82 args: { 83 - 'api': { type: 'string', required: false, alias: 'a' }, 83 + api: { type: 'string', required: false, alias: 'a' }, 84 84 guild: { type: 'string', required: false }, 85 85 store: { type: 'string', required: false }, 86 86 key: { type: 'string', required: false }, ··· 91 91 const config = resolveConfig(args) 92 92 const value = positional(args, 0) 93 93 const expiration = args.expiration ? Number(args.expiration) : undefined 94 - await setValue( 95 - config, 96 - args.guild, 97 - args.store, 98 - args.key, 99 - value, 100 - expiration, 101 - args.metadata 102 - ) 94 + await setValue(config, args.guild, args.store, args.key, value, expiration, args.metadata) 103 95 } 104 96 }), 105 97 get: defineCommand({ 106 98 args: { 107 - 'api': { type: 'string', required: false, alias: 'a' }, 99 + api: { type: 'string', required: false, alias: 'a' }, 108 100 guild: { type: 'string', required: false }, 109 101 store: { type: 'string', required: false } 110 102 }, 111 103 async run({ args }) { 112 104 const config = resolveConfig(args) 113 105 const key = positional(args, 0) 114 - await getValue( 115 - config, 116 - args.guild, 117 - args.store, 118 - key 119 - ) 106 + await getValue(config, args.guild, args.store, key) 120 107 } 121 108 }), 122 109 delete: defineCommand({ 123 110 args: { 124 - 'api': { type: 'string', required: false, alias: 'a' }, 111 + api: { type: 'string', required: false, alias: 'a' }, 125 112 guild: { type: 'string', required: false }, 126 113 store: { type: 'string', required: false } 127 114 }, 128 115 async run({ args }) { 129 116 const config = resolveConfig(args) 130 117 const key = positional(args, 0) 131 - await deleteValue( 132 - config, 133 - args.guild, 134 - args.store, 135 - key 136 - ) 118 + await deleteValue(config, args.guild, args.store, key) 137 119 } 138 120 }), 139 121 'list-keys': defineCommand({ 140 122 args: { 141 - 'api': { type: 'string', required: false, alias: 'a' }, 123 + api: { type: 'string', required: false, alias: 'a' }, 142 124 guild: { type: 'string', required: false }, 143 125 store: { type: 'string', required: false }, 144 126 prefix: { type: 'string', required: false }, ··· 167 149 version 168 150 }, 169 151 args: { 170 - 'api': { 152 + api: { 171 153 type: 'string', 172 154 required: false, 173 155 alias: 'a' ··· 176 158 subCommands: { 177 159 deploy: defineCommand({ 178 160 args: { 179 - 'api': { type: 'string', required: false, alias: 'a' }, 161 + api: { type: 'string', required: false, alias: 'a' }, 180 162 guild: { type: 'string', required: false }, 181 163 root: { type: 'string', required: false } 182 164 }, 183 165 async run({ args }) { 184 166 const config = resolveConfig(args) 185 167 const entry = positional(args, 0) 186 - await deploy( 187 - config, 188 - args.guild, 189 - entry, 190 - args.root 191 - ) 168 + await deploy(config, args.guild, entry, args.root) 192 169 } 193 170 }), 194 171 get: defineCommand({ 195 172 args: { 196 - 'api': { type: 'string', required: false, alias: 'a' }, 173 + api: { type: 'string', required: false, alias: 'a' }, 197 174 guild: { type: 'string', required: false } 198 175 }, 199 176 async run({ args }) { ··· 203 180 }), 204 181 list: defineCommand({ 205 182 args: { 206 - 'api': { type: 'string', required: false, alias: 'a' } 183 + api: { type: 'string', required: false, alias: 'a' } 207 184 }, 208 185 async run({ args }) { 209 186 const config = resolveConfig(args) ··· 212 189 }), 213 190 health: defineCommand({ 214 191 args: { 215 - 'api': { type: 'string', required: false, alias: 'a' } 192 + api: { type: 'string', required: false, alias: 'a' } 216 193 }, 217 194 async run({ args }) { 218 195 const config = resolveConfig(args) ··· 225 202 }, 226 203 async run({ args }) { 227 204 const positionalToken = positional(args, 0) 228 - await login((args.token) ?? positionalToken) 205 + await login(args.token ?? positionalToken) 229 206 } 230 207 }), 231 208 logs: defineCommand({ 232 209 args: { 233 - 'api': { type: 'string', required: false, alias: 'a' }, 210 + api: { type: 'string', required: false, alias: 'a' }, 234 211 guild: { type: 'string', required: false }, 235 212 follow: { type: 'boolean', required: false, alias: 'f' }, 236 213 limit: { type: 'string', required: false, alias: 'n' }
apps/cli/src/lib/config.ts packages/cli/src/lib/config.ts
apps/cli/src/lib/deploy_bundle.ts packages/cli/src/lib/deploy_bundle.ts
+2 -3
apps/cli/src/lib/files.ts packages/cli/src/lib/files.ts
··· 117 117 } 118 118 119 119 const withTree = pattern.endsWith('/') ? `${pattern}**` : pattern 120 - const fullPattern = rooted || withTree.includes('/') 121 - ? `${prefix}${withTree}` 122 - : `${prefix}**/${withTree}` 120 + const fullPattern = 121 + rooted || withTree.includes('/') ? `${prefix}${withTree}` : `${prefix}**/${withTree}` 123 122 124 123 return negated ? `!${fullPattern}` : fullPattern 125 124 }
+4 -1
apps/cli/src/lib/http.ts packages/cli/src/lib/http.ts
··· 20 20 const { data, error, response } = await promise 21 21 if (!response.ok) { 22 22 if ( 23 - error && typeof error === 'object' && 'message' in error && typeof error.message === 'string' 23 + error && 24 + typeof error === 'object' && 25 + 'message' in error && 26 + typeof error.message === 'string' 24 27 ) { 25 28 throw new Error(error.message) 26 29 }
apps/cli/src/lib/logger.ts packages/cli/src/lib/logger.ts
apps/cli/src/lib/logs.ts packages/cli/src/lib/logs.ts
apps/cli/src/lib/prompts.ts packages/cli/src/lib/prompts.ts
apps/cli/src/lib/types.ts packages/cli/src/lib/types.ts
apps/cli/src/lib/zip.ts packages/cli/src/lib/zip.ts
apps/cli/test/collect_files_ignore.test.ts packages/cli/test/collect_files_ignore.test.ts
apps/cli/test/deploy_bundle.test.ts packages/cli/test/deploy_bundle.test.ts
+3 -11
apps/cli/test/deployments.test.ts packages/cli/test/deployments.test.ts
··· 3 3 import { deploy } from '../src/commands/deployments' 4 4 import type { CliConfig } from '../src/lib/types' 5 5 6 - const { 7 - loadProjectConfigMock, 8 - zipProjectMock, 9 - fetchMock 10 - } = vi.hoisted(() => ({ 6 + const { loadProjectConfigMock, zipProjectMock, fetchMock } = vi.hoisted(() => ({ 11 7 loadProjectConfigMock: vi.fn(), 12 8 zipProjectMock: vi.fn(), 13 9 fetchMock: vi.fn() ··· 52 48 .mockResolvedValueOnce(new Response(JSON.stringify({ build_id: 'b1', status: 'queued' }))) 53 49 .mockResolvedValueOnce(new Response('event: done\ndata: ok\n\n')) 54 50 .mockResolvedValueOnce( 55 - new Response( 56 - JSON.stringify({ status: 'success', guild_id: '123', entry: 'src/main.ts' }) 57 - ) 51 + new Response(JSON.stringify({ status: 'success', guild_id: '123', entry: 'src/main.ts' })) 58 52 ) 59 53 60 54 await deploy(config, '123', undefined) ··· 94 88 .mockResolvedValueOnce(new Response(JSON.stringify({ build_id: 'b3', status: 'queued' }))) 95 89 .mockResolvedValueOnce(new Response('event: done\ndata: ok\n\n')) 96 90 .mockResolvedValueOnce( 97 - new Response( 98 - JSON.stringify({ status: 'success', guild_id: '123', entry: 'src/main.ts' }) 99 - ) 91 + new Response(JSON.stringify({ status: 'success', guild_id: '123', entry: 'src/main.ts' })) 100 92 ) 101 93 102 94 await deploy(config, '123', undefined, './cli-root')
apps/cli/test/files.test.ts packages/cli/test/files.test.ts
apps/cli/test/project_config.test.ts packages/cli/test/project_config.test.ts
-15
apps/cli/tsconfig.json
··· 1 - { 2 - "extends": "../../tsconfig.json", 3 - "compilerOptions": { 4 - "target": "ES2022", 5 - "module": "ESNext", 6 - "moduleResolution": "Bundler", 7 - "lib": ["ES2022", "DOM", "DOM.Iterable"], 8 - "strict": true, 9 - "resolveJsonModule": true, 10 - "skipLibCheck": true, 11 - "noEmit": true, 12 - "types": ["node"] 13 - }, 14 - "include": ["src", "test"] 15 - }
+4 -1
apps/cli/tsdown.config.ts packages/cli/tsdown.config.ts
··· 1 - import { defineConfig } from 'tsdown' 1 + import { defineConfig } from 'vite-plus/pack' 2 2 3 3 export default defineConfig({ 4 + dts: { 5 + tsgo: true 6 + }, 4 7 entry: ['src/index.ts'], 5 8 outDir: 'dist', 6 9 format: 'esm',
-53
apps/frontend/.oxlintrc.json
··· 1 - { 2 - "$schema": "./node_modules/oxlint/configuration_schema.json", 3 - "plugins": [ 4 - "eslint", 5 - "typescript", 6 - "unicorn", 7 - "react", 8 - "react-perf", 9 - "oxc", 10 - "jsx-a11y", 11 - "promise" 12 - ], 13 - "categories": {}, 14 - "rules": {}, 15 - "options": { 16 - "typeAware": true, 17 - "typeCheck": true 18 - }, 19 - "settings": { 20 - "jsx-a11y": { 21 - "polymorphicPropName": null, 22 - "components": {}, 23 - "attributes": {} 24 - }, 25 - "next": { 26 - "rootDir": [] 27 - }, 28 - "react": { 29 - "formComponents": [], 30 - "linkComponents": [], 31 - "version": null, 32 - "componentWrapperFunctions": [] 33 - }, 34 - "jsdoc": { 35 - "ignorePrivate": false, 36 - "ignoreInternal": false, 37 - "ignoreReplacesDocs": true, 38 - "overrideReplacesDocs": true, 39 - "augmentsExtendsReplacesDocs": false, 40 - "implementsReplacesDocs": false, 41 - "exemptDestructuredRootsFromChecks": false, 42 - "tagNamePreference": {} 43 - }, 44 - "vitest": { 45 - "typecheck": false 46 - } 47 - }, 48 - "env": { 49 - "builtin": true 50 - }, 51 - "globals": {}, 52 - "ignorePatterns": [] 53 - }
+2 -2
apps/frontend/index.html
··· 1 - <!DOCTYPE html> 1 + <!doctype html> 2 2 <html lang="en"> 3 3 <head> 4 4 <script type="module"> 5 - if (import.meta.env.DEV) { 5 + if (import.meta.env.DEV) { 6 6 import('react-grab') 7 7 import('@react-grab/mcp/client') 8 8 }
+15 -16
apps/frontend/package.json
··· 1 1 { 2 - "name": "frontend", 3 - "private": true, 2 + "name": "@flora-internal/frontend", 4 3 "version": "0.0.0", 4 + "private": true, 5 5 "type": "module", 6 6 "scripts": { 7 - "dev": "vite dev", 8 7 "typecheck": "tsgo -b", 9 - "build": "tsc -b && vite build", 10 - "lint": "oxlint", 11 - "lint:fix": "oxlint --fix", 12 - "preview": "vite preview", 13 - "generate:api": "openapi-typescript http://localhost:3000/api-docs/openapi.json -o src/lib/openapi-schema.ts" 8 + "dev": "vp dev", 9 + "build": "tsgo -b && vp build", 10 + "lint": "vp lint", 11 + "lint:fix": "vp lint --fix", 12 + "preview": "vp preview" 14 13 }, 15 14 "dependencies": { 16 15 "@base-ui/react": "^1.0.0", ··· 59 58 "wouter": "^3.9.0" 60 59 }, 61 60 "devDependencies": { 61 + "@babel/core": "catalog:", 62 62 "@react-grab/mcp": "0.1.25", 63 - "@types/node": "^25.0.1", 63 + "@rolldown/plugin-babel": "catalog:", 64 + "@types/babel__core": "catalog:", 65 + "@types/node": "catalog:", 64 66 "@types/react": "^19.2.5", 65 67 "@types/react-dom": "^19.2.3", 66 68 "@typescript/native-preview": "catalog:", 67 - "@vitejs/plugin-react": "^5.1.1", 69 + "@vitejs/plugin-react": "^6.0.1", 68 70 "babel-plugin-react-compiler": "1.0.0", 69 - "openapi-typescript": "^7.10.1", 70 - "oxlint": "1.51.0", 71 - "oxlint-tsgolint": "0.16.0", 72 71 "react-scan": "0.5.3", 73 - "typescript": "~5.9.3", 74 - "typescript-eslint": "^8.46.4", 75 - "vite": "8.0.0-beta.18" 72 + "typescript": "catalog:", 73 + "vite": "catalog:", 74 + "vite-plus": "catalog:" 76 75 } 77 76 }
+11 -8
apps/frontend/src/components/docs-stack/documentation-stack.tsx
··· 85 85 scale = 1 86 86 } else { 87 87 const rowWidth = (STACK_CARDS.length - 1) * COLLAPSED_ROW.spacing 88 - x = COLLAPSED_ROW.offsetX + index * COLLAPSED_ROW.spacing - rowWidth / 2 + 88 + x = 89 + COLLAPSED_ROW.offsetX + 90 + index * COLLAPSED_ROW.spacing - 91 + rowWidth / 2 + 89 92 collapsed.offsetX 90 93 y = COLLAPSED_ROW.offsetY + collapsed.offsetY 91 94 rotate = collapsed.rotation ··· 95 98 const titleTop = isSelected 96 99 ? metrics.padding + metrics.graphicH + 16 97 100 : metrics.cardH - metrics.padding - metrics.titleLineH * card.titleLines 98 - const introY = y - metrics.cardH / 2 + Math.max(25, 50 * Math.abs(index - 2)) + 99 - 48 * index 101 + const introY = 102 + y - metrics.cardH / 2 + Math.max(25, 50 * Math.abs(index - 2)) + 48 * index 100 103 const delay = 0.5 + 0.016 * index 101 - const descriptionTop = expanded.padding + expanded.graphicH + 16 + 102 - expanded.titleLineH * card.titleLines + 12 104 + const descriptionTop = 105 + expanded.padding + expanded.graphicH + 16 + expanded.titleLineH * card.titleLines + 12 103 106 const descriptionWidth = expanded.cardW - 2 * expanded.padding 104 107 105 108 return ( ··· 113 116 initial={{ x: x - metrics.cardW / 2 + (2 - index) * 50, y: introY, scale, rotate }} 114 117 style={{ left: '50%', top: '50%', zIndex: index + 1 }} 115 118 animate={{ x: x - metrics.cardW / 2, y: y - metrics.cardH / 2, scale, rotate }} 116 - whileHover={selectedCardId 117 - ? {} 118 - : { scale: 1.03 * scale, y: y - metrics.cardH / 2 - 8 }} 119 + whileHover={ 120 + selectedCardId ? {} : { scale: 1.03 * scale, y: y - metrics.cardH / 2 - 8 } 121 + } 119 122 transition={{ 120 123 ...STACK_ANIMATION.card, 121 124 ...(animationsReady ? {} : { delay }),
+17 -9
apps/frontend/src/components/docs-stack/stack-card-graphic.tsx
··· 11 11 12 12 function withAlpha(hex: string, alpha: number) { 13 13 const base = hex.replace('#', '') 14 - const pairs = base.length === 3 15 - ? base.split('').map((v) => v + v) 16 - : [base.slice(0, 2), base.slice(2, 4), base.slice(4, 6)] 17 - return `rgba(${parseInt(pairs[0], 16)}, ${parseInt(pairs[1], 16)}, ${ 18 - parseInt(pairs[2], 16) 19 - }, ${alpha})` 14 + const pairs = 15 + base.length === 3 16 + ? base.split('').map((v) => v + v) 17 + : [base.slice(0, 2), base.slice(2, 4), base.slice(4, 6)] 18 + return `rgba(${parseInt(pairs[0], 16)}, ${parseInt(pairs[1], 16)}, ${parseInt( 19 + pairs[2], 20 + 16 21 + )}, ${alpha})` 20 22 } 21 23 22 - export function StackCardGraphic( 23 - { type, seed, foreground }: { type: GraphicType; seed: number; foreground: string } 24 - ) { 24 + export function StackCardGraphic({ 25 + type, 26 + seed, 27 + foreground 28 + }: { 29 + type: GraphicType 30 + seed: number 31 + foreground: string 32 + }) { 25 33 const ref = useRef<HTMLCanvasElement | null>(null) 26 34 27 35 useEffect(() => {
+6 -5
apps/frontend/src/components/editor/deploy-flow.ts
··· 27 27 const { guildId, fileContents, preferredEntry, fallbackEntry, onBuildLog } = args 28 28 const { zip, fileNames } = createZipFromFiles(fileContents) 29 29 30 - const entry = fileContents[preferredEntry] != null 31 - ? preferredEntry 32 - : fileContents['src/main.ts'] != null 33 - ? 'src/main.ts' 34 - : fallbackEntry 30 + const entry = 31 + fileContents[preferredEntry] != null 32 + ? preferredEntry 33 + : fileContents['src/main.ts'] != null 34 + ? 'src/main.ts' 35 + : fallbackEntry 35 36 36 37 const formData = new FormData() 37 38 formData.append('guild_id', guildId)
+3 -5
apps/frontend/src/components/editor/editor-modals.tsx
··· 15 15 {state.mode === 'create_file' 16 16 ? 'Create File' 17 17 : state.mode === 'create_folder' 18 - ? 'Create Folder' 19 - : 'Rename'} 18 + ? 'Create Folder' 19 + : 'Rename'} 20 20 </div> 21 21 <textarea 22 22 rows={2} ··· 66 66 <div className='fixed inset-0 z-50 flex items-center justify-center bg-black/35 p-4'> 67 67 <div className='w-full max-w-sm rounded-xl border bg-popover p-4 shadow-2xl'> 68 68 <div className='mb-2 text-sm font-semibold'>Delete {target.kind}?</div> 69 - <div className='mb-4 rounded border bg-muted/40 p-2 font-mono text-xs'> 70 - {target.path} 71 - </div> 69 + <div className='mb-4 rounded border bg-muted/40 p-2 font-mono text-xs'>{target.path}</div> 72 70 <div className='flex justify-end gap-2'> 73 71 <button 74 72 type='button'
+2 -7
apps/frontend/src/components/editor/editor-side-panel.tsx
··· 76 76 <DropdownMenu> 77 77 <DropdownMenuTrigger 78 78 render={ 79 - <button 80 - type='button' 81 - className={deployButtonClass} 82 - > 79 + <button type='button' className={deployButtonClass}> 83 80 <Upload className='h-3 w-3' /> 84 81 {deployLabel} 85 82 </button> ··· 150 147 <div className='h-full w-72 border-l bg-muted/10'> 151 148 <div className='flex h-12 items-center justify-between px-3'> 152 149 <div className='text-sm font-medium'>Deploy</div> 153 - <div className='flex items-center gap-1'> 154 - {deployAction} 155 - </div> 150 + <div className='flex items-center gap-1'>{deployAction}</div> 156 151 </div> 157 152 <Separator /> 158 153 <div className='h-[calc(100%-3.05rem)]'>
+13 -6
apps/frontend/src/components/editor/editor-utils.ts
··· 42 42 export function getLanguageFromPath(path: string): string { 43 43 if (path.endsWith('.json')) return 'json' 44 44 if ( 45 - path.endsWith('.ts') || path.endsWith('.tsx') || path.endsWith('.cts') || path.endsWith('.mts') 45 + path.endsWith('.ts') || 46 + path.endsWith('.tsx') || 47 + path.endsWith('.cts') || 48 + path.endsWith('.mts') 46 49 ) { 47 50 return 'typescript' 48 51 } 49 52 if ( 50 - path.endsWith('.js') || path.endsWith('.jsx') || path.endsWith('.cjs') || path.endsWith('.mjs') 53 + path.endsWith('.js') || 54 + path.endsWith('.jsx') || 55 + path.endsWith('.cjs') || 56 + path.endsWith('.mjs') 51 57 ) { 52 58 return 'javascript' 53 59 } ··· 141 147 if (!normalized) continue 142 148 const fileName = normalized.split('/').pop() ?? normalized 143 149 if (BUILD_LOCKFILES.has(fileName)) continue 144 - const shouldIncludeInBuild = normalized.startsWith('src/') || 145 - BUILD_TOP_LEVEL_FILES.has(normalized) 150 + const shouldIncludeInBuild = 151 + normalized.startsWith('src/') || BUILD_TOP_LEVEL_FILES.has(normalized) 146 152 if (!shouldIncludeInBuild) continue 147 153 if (normalized === 'package.json') hasPackageJson = true 148 154 entries[normalized] = textEncoder.encode(contents) ··· 183 189 if (commaIndex === -1) return null 184 190 185 191 const endIndex = bundle.indexOf('\n', commaIndex) 186 - const encoded = 187 - (endIndex === -1 ? bundle.slice(commaIndex + 1) : bundle.slice(commaIndex + 1, endIndex)).trim() 192 + const encoded = ( 193 + endIndex === -1 ? bundle.slice(commaIndex + 1) : bundle.slice(commaIndex + 1, endIndex) 194 + ).trim() 188 195 if (!encoded) return null 189 196 190 197 try {
+9 -9
apps/frontend/src/components/editor/workbench.tsx
··· 35 35 import * as monaco from 'monaco-editor' 36 36 import { useEffect, useRef, useState } from 'react' 37 37 38 - import floraSdkGlobalTypes from '../../../../../sdk/global-types.d.ts?raw' 38 + import floraSdkGlobalTypes from '../../../../../packages/sdk/global-types.d.ts?raw' 39 39 import { getParentFolder, normalizePath } from './editor-utils' 40 40 41 41 const WORKSPACE_ROOT = '/workspace' ··· 226 226 }, 227 227 defaultLayout: entryFile 228 228 ? { 229 - editors: [ 230 - { 231 - uri: toWorkspaceUri(entryFile), 232 - viewColumn: 1 233 - } 234 - ], 235 - force: true 236 - } 229 + editors: [ 230 + { 231 + uri: toWorkspaceUri(entryFile), 232 + viewColumn: 1 233 + } 234 + ], 235 + force: true 236 + } 237 237 : undefined 238 238 } 239 239
+24 -21
apps/frontend/src/components/editor/workspace-sidebar.tsx
··· 115 115 )} 116 116 style={{ paddingLeft: `${8 + depth * 14}px` }} 117 117 > 118 - {isOpen 119 - ? <FolderOpen className='h-3.5 w-3.5 shrink-0' /> 120 - : <Folder className='h-3.5 w-3.5 shrink-0' />} 118 + {isOpen ? ( 119 + <FolderOpen className='h-3.5 w-3.5 shrink-0' /> 120 + ) : ( 121 + <Folder className='h-3.5 w-3.5 shrink-0' /> 122 + )} 121 123 <span className='truncate'>{node.name}</span> 122 124 </button> 123 125 {isOpen && node.children?.map((child) => renderTreeNode(child, depth + 1))} ··· 140 142 )} 141 143 style={{ paddingLeft: `${8 + depth * 14}px` }} 142 144 > 143 - {language === 'json' 144 - ? <FileJson2 className='h-3.5 w-3.5 shrink-0' /> 145 - : language === 'plaintext' 146 - ? <FileText className='h-3.5 w-3.5 shrink-0' /> 147 - : <FileCode2 className='h-3.5 w-3.5 shrink-0' />} 145 + {language === 'json' ? ( 146 + <FileJson2 className='h-3.5 w-3.5 shrink-0' /> 147 + ) : language === 'plaintext' ? ( 148 + <FileText className='h-3.5 w-3.5 shrink-0' /> 149 + ) : ( 150 + <FileCode2 className='h-3.5 w-3.5 shrink-0' /> 151 + )} 148 152 <span className='truncate'>{node.name}</span> 149 153 </button> 150 154 ) ··· 163 167 <DropdownMenu> 164 168 <DropdownMenuTrigger 165 169 render={ 166 - <button 167 - type='button' 168 - className={deployButtonClass} 169 - > 170 + <button type='button' className={deployButtonClass}> 170 171 <Upload className='h-3 w-3' /> 171 172 {deployLabel} 172 173 </button> ··· 277 278 type='button' 278 279 className='flex h-8 w-full items-center gap-1 px-2 text-[11px] font-semibold tracking-wide text-muted-foreground hover:text-foreground' 279 280 > 280 - {filesSectionOpen 281 - ? <ChevronDown className='h-3.5 w-3.5 shrink-0' /> 282 - : <ChevronRight className='h-3.5 w-3.5 shrink-0' />} 281 + {filesSectionOpen ? ( 282 + <ChevronDown className='h-3.5 w-3.5 shrink-0' /> 283 + ) : ( 284 + <ChevronRight className='h-3.5 w-3.5 shrink-0' /> 285 + )} 283 286 FILES 284 287 </button> 285 288 } ··· 289 292 className='h-full px-2 py-1' 290 293 onContextMenu={(event) => onOpenContextMenu(event, null)} 291 294 > 292 - <div className='space-y-0.5'> 293 - {fileTree.map((node) => renderTreeNode(node, 0))} 294 - </div> 295 + <div className='space-y-0.5'>{fileTree.map((node) => renderTreeNode(node, 0))}</div> 295 296 </ScrollArea> 296 297 </CollapsibleContent> 297 298 </Collapsible> ··· 310 311 type='button' 311 312 className='flex h-8 items-center gap-1 text-[11px] font-semibold tracking-wide text-muted-foreground hover:text-foreground' 312 313 > 313 - {logsSectionOpen 314 - ? <ChevronDown className='h-3.5 w-3.5 shrink-0' /> 315 - : <ChevronRight className='h-3.5 w-3.5 shrink-0' />} 314 + {logsSectionOpen ? ( 315 + <ChevronDown className='h-3.5 w-3.5 shrink-0' /> 316 + ) : ( 317 + <ChevronRight className='h-3.5 w-3.5 shrink-0' /> 318 + )} 316 319 LOGS 317 320 </button> 318 321 <button
+82 -114
apps/frontend/src/components/features/DeploymentHistory.tsx
··· 157 157 Select a revision to inspect metadata and source diffs. 158 158 </div> 159 159 )) 160 - .with( 161 - { hasRevision: true, shouldLoadDiffs: true, isLoading: true }, 162 - () => ( 163 - <div className='flex items-center gap-2 text-sm text-muted-foreground'> 164 - <Loader2 className='size-4 animate-spin' /> 165 - Loading Revision Details… 166 - </div> 167 - ) 168 - ) 160 + .with({ hasRevision: true, shouldLoadDiffs: true, isLoading: true }, () => ( 161 + <div className='flex items-center gap-2 text-sm text-muted-foreground'> 162 + <Loader2 className='size-4 animate-spin' /> 163 + Loading Revision Details… 164 + </div> 165 + )) 169 166 .with({ hasRevision: true, isError: true }, () => ( 170 167 <div className='text-sm text-destructive'> 171 168 Failed to load revision: {toErrorMessage(selectedRevisionQuery.error)} ··· 191 188 {formatDateTime(selectedRevision.deployed_at)} 192 189 </div> 193 190 </div> 194 - {!isLatestRevision 195 - ? ( 196 - <Button 197 - size='sm' 198 - variant='outline' 199 - disabled={rollbackMutation.isPending || selectedRevision.status !== 'success'} 200 - onClick={() => { 201 - if (selectedRevision.id) rollbackMutation.mutate(selectedRevision.id) 202 - }} 203 - > 204 - {rollbackMutation.isPending 205 - ? ( 206 - <> 207 - <Loader2 className='mr-1 size-4 animate-spin' /> 208 - Rolling back… 209 - </> 210 - ) 211 - : ( 212 - <> 213 - <RotateCcw className='mr-1 size-4' /> 214 - Rollback to this 215 - </> 216 - )} 217 - </Button> 218 - ) 219 - : null} 191 + {!isLatestRevision ? ( 192 + <Button 193 + size='sm' 194 + variant='outline' 195 + disabled={rollbackMutation.isPending || selectedRevision.status !== 'success'} 196 + onClick={() => { 197 + if (selectedRevision.id) rollbackMutation.mutate(selectedRevision.id) 198 + }} 199 + > 200 + {rollbackMutation.isPending ? ( 201 + <> 202 + <Loader2 className='mr-1 size-4 animate-spin' /> 203 + Rolling back… 204 + </> 205 + ) : ( 206 + <> 207 + <RotateCcw className='mr-1 size-4' /> 208 + Rollback to this 209 + </> 210 + )} 211 + </Button> 212 + ) : null} 220 213 </div> 221 214 222 - {rollbackMutation.isError 223 - ? ( 224 - <div className='text-xs text-destructive'> 225 - Rollback failed: {toErrorMessage(rollbackMutation.error)} 226 - </div> 227 - ) 228 - : null} 215 + {rollbackMutation.isError ? ( 216 + <div className='text-xs text-destructive'> 217 + Rollback failed: {toErrorMessage(rollbackMutation.error)} 218 + </div> 219 + ) : null} 229 220 230 221 <div className='grid gap-3 md:grid-cols-2'> 231 222 <div className='rounded-md border p-2'> ··· 234 225 </div> 235 226 <div className='rounded-md border p-2'> 236 227 <div className='text-[11px] text-muted-foreground'>Actor</div> 237 - <div className='mt-1 text-sm font-medium'> 238 - {formatActor(selectedRevision.actor)} 239 - </div> 228 + <div className='mt-1 text-sm font-medium'>{formatActor(selectedRevision.actor)}</div> 240 229 </div> 241 230 </div> 242 231 ··· 259 248 </div> 260 249 </div> 261 250 262 - {selectedRevision.error_message 263 - ? ( 264 - <pre className='overflow-x-auto rounded border bg-muted/30 p-2 text-xs text-destructive'> 265 - {selectedRevision.error_message} 266 - </pre> 267 - ) 268 - : null} 251 + {selectedRevision.error_message ? ( 252 + <pre className='overflow-x-auto rounded border bg-muted/30 p-2 text-xs text-destructive'> 253 + {selectedRevision.error_message} 254 + </pre> 255 + ) : null} 269 256 </div> 270 257 ) 271 258 }) ··· 279 266 hasDiffFiles: diffFiles.length > 0, 280 267 diffOpen 281 268 }) 282 - .with( 283 - { shouldLoadDiffs: true, isRevisionLoading: true }, 284 - () => <div className='text-sm text-muted-foreground'>Loading revision files…</div> 285 - ) 286 - .with( 287 - { hasBaseRevision: true, isBaseLoading: true }, 288 - () => <div className='text-sm text-muted-foreground'>Loading base revision…</div> 289 - ) 269 + .with({ shouldLoadDiffs: true, isRevisionLoading: true }, () => ( 270 + <div className='text-sm text-muted-foreground'>Loading revision files…</div> 271 + )) 272 + .with({ hasBaseRevision: true, isBaseLoading: true }, () => ( 273 + <div className='text-sm text-muted-foreground'>Loading base revision…</div> 274 + )) 290 275 .with({ isBaseError: true }, () => ( 291 276 <div className='text-sm text-destructive'> 292 277 Failed to load base revision: {toErrorMessage(baseRevisionQuery.error)} 293 278 </div> 294 279 )) 295 - .with( 296 - { hasBaseRevision: false }, 297 - () => <div className='text-sm text-muted-foreground'>No base revision for this entry.</div> 298 - ) 299 - .with( 300 - { hasDiffFiles: false }, 301 - () => <div className='text-sm text-muted-foreground'>No diffable source-file changes.</div> 302 - ) 280 + .with({ hasBaseRevision: false }, () => ( 281 + <div className='text-sm text-muted-foreground'>No base revision for this entry.</div> 282 + )) 283 + .with({ hasDiffFiles: false }, () => ( 284 + <div className='text-sm text-muted-foreground'>No diffable source-file changes.</div> 285 + )) 303 286 .with({ diffOpen: false }, () => null) 304 287 .otherwise(() => ( 305 288 <div className='max-h-[42dvh] space-y-3 overflow-auto'> ··· 333 316 isError: historyQuery.isError, 334 317 hasEntries: Boolean(historyQuery.data?.length) 335 318 }) 336 - .with( 337 - { isLoading: true }, 338 - () => ( 339 - <div className='flex h-full items-center justify-center gap-2 text-sm text-muted-foreground'> 340 - <Loader2 className='size-4 animate-spin' /> 341 - Loading Deployment History… 342 - </div> 343 - ) 344 - ) 345 - .with( 346 - { isError: true }, 347 - () => ( 348 - <div className='flex h-full items-center justify-center text-sm text-destructive'> 349 - Failed to load history: {toErrorMessage(historyQuery.error)} 350 - </div> 351 - ) 352 - ) 353 - .with( 354 - { hasEntries: false }, 355 - () => ( 356 - <div className='flex h-full items-center justify-center text-sm text-muted-foreground'> 357 - No deployments yet for this guild. 358 - </div> 359 - ) 360 - ) 319 + .with({ isLoading: true }, () => ( 320 + <div className='flex h-full items-center justify-center gap-2 text-sm text-muted-foreground'> 321 + <Loader2 className='size-4 animate-spin' /> 322 + Loading Deployment History… 323 + </div> 324 + )) 325 + .with({ isError: true }, () => ( 326 + <div className='flex h-full items-center justify-center text-sm text-destructive'> 327 + Failed to load history: {toErrorMessage(historyQuery.error)} 328 + </div> 329 + )) 330 + .with({ hasEntries: false }, () => ( 331 + <div className='flex h-full items-center justify-center text-sm text-muted-foreground'> 332 + No deployments yet for this guild. 333 + </div> 334 + )) 361 335 .otherwise(() => ( 362 336 <div className='h-full overflow-auto'> 363 337 <Table> ··· 403 377 <TableCell className='font-mono text-xs'>{row.entry}</TableCell> 404 378 <TableCell className='font-mono text-xs'>{row.build_id ?? '—'}</TableCell> 405 379 <TableCell className='max-w-60 text-xs'> 406 - {row.error_message 407 - ? ( 408 - <TooltipProvider> 409 - <Tooltip> 410 - <TooltipTrigger> 411 - <span className='block truncate text-destructive'> 412 - {row.error_message} 413 - </span> 414 - </TooltipTrigger> 415 - <TooltipContent className='max-w-lg'> 380 + {row.error_message ? ( 381 + <TooltipProvider> 382 + <Tooltip> 383 + <TooltipTrigger> 384 + <span className='block truncate text-destructive'> 416 385 {row.error_message} 417 - </TooltipContent> 418 - </Tooltip> 419 - </TooltipProvider> 420 - ) 421 - : '—'} 386 + </span> 387 + </TooltipTrigger> 388 + <TooltipContent className='max-w-lg'>{row.error_message}</TooltipContent> 389 + </Tooltip> 390 + </TooltipProvider> 391 + ) : ( 392 + '—' 393 + )} 422 394 </TableCell> 423 395 </TableRow> 424 396 ) ··· 430 402 431 403 return ( 432 404 <div className='flex h-full min-h-0 flex-col gap-4'> 433 - <div className='rounded-lg border bg-card p-4'> 434 - {revisionSummary} 435 - </div> 405 + <div className='rounded-lg border bg-card p-4'>{revisionSummary}</div> 436 406 437 407 <Collapsible open={diffOpen} onOpenChange={setDiffOpen} className='rounded-lg border bg-card'> 438 408 <CollapsibleTrigger className='flex w-full items-center justify-between px-4 py-3 text-left'> ··· 442 412 </div> 443 413 <ChevronDown className={cn('size-4 transition-transform', diffOpen && 'rotate-180')} /> 444 414 </CollapsibleTrigger> 445 - <CollapsibleContent className='border-t p-3'> 446 - {diffContent} 447 - </CollapsibleContent> 415 + <CollapsibleContent className='border-t p-3'>{diffContent}</CollapsibleContent> 448 416 </Collapsible> 449 417 450 418 <div className='min-h-0 flex-1 overflow-hidden rounded-lg border bg-card'>
+1 -4
apps/frontend/src/components/features/KvManager.tsx
··· 455 455 /> 456 456 457 457 <div className='flex flex-wrap gap-2'> 458 - <Button 459 - onClick={handleSaveKey} 460 - disabled={!activeStore || setKeyMutation.isPending} 461 - > 458 + <Button onClick={handleSaveKey} disabled={!activeStore || setKeyMutation.isPending}> 462 459 Save key 463 460 </Button> 464 461 <Button variant='outline' onClick={handleClearEditor} disabled={!activeStore}>
+46 -47
apps/frontend/src/components/sidebar/app-sidebar.tsx
··· 50 50 if (isMobile) setOpenMobile(false) 51 51 } 52 52 53 - const routes: Route[] = guilds.data?.map((guild) => ({ 54 - id: guild.id, 55 - title: guild.name, 56 - icon: ( 57 - <Avatar className='h-6 w-6 text-[10px]'> 58 - <AvatarImage 59 - src={guild.icon 60 - ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=128` 61 - : undefined} 62 - /> 63 - <AvatarFallback>{getGuildInitials(guild.name)}</AvatarFallback> 64 - </Avatar> 65 - ), 66 - isActive: selectedGuild === guild.id, 67 - onClick: () => handleGuildClick(guild.id), 68 - subs: [ 69 - { 70 - title: 'Overview', 71 - onClick: () => setLocation(`/${guild.id}`), 72 - isActive: view === 'overview' && selectedGuild === guild.id, 73 - icon: <BookText className='h-4 w-4' /> 74 - }, 75 - { 76 - title: 'Editor', 77 - onClick: () => setLocation(`/${guild.id}/editor`), 78 - isActive: view === 'editor' && selectedGuild === guild.id, 79 - icon: <FileCode2 className='h-4 w-4' /> 80 - }, 81 - { 82 - title: 'Deployments', 83 - onClick: () => setLocation(`/${guild.id}/deployments`), 84 - isActive: view === 'deployments' && selectedGuild === guild.id, 85 - icon: <ListChecks className='h-4 w-4' /> 86 - }, 87 - { 88 - title: 'KV', 89 - onClick: () => setLocation(`/${guild.id}/kv`), 90 - isActive: view === 'kv' && selectedGuild === guild.id, 91 - icon: <Database className='h-4 w-4' /> 92 - } 93 - ] 94 - })) || [] 53 + const routes: Route[] = 54 + guilds.data?.map((guild) => ({ 55 + id: guild.id, 56 + title: guild.name, 57 + icon: ( 58 + <Avatar className='h-6 w-6 text-[10px]'> 59 + <AvatarImage 60 + src={ 61 + guild.icon 62 + ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=128` 63 + : undefined 64 + } 65 + /> 66 + <AvatarFallback>{getGuildInitials(guild.name)}</AvatarFallback> 67 + </Avatar> 68 + ), 69 + isActive: selectedGuild === guild.id, 70 + onClick: () => handleGuildClick(guild.id), 71 + subs: [ 72 + { 73 + title: 'Overview', 74 + onClick: () => setLocation(`/${guild.id}`), 75 + isActive: view === 'overview' && selectedGuild === guild.id, 76 + icon: <BookText className='h-4 w-4' /> 77 + }, 78 + { 79 + title: 'Editor', 80 + onClick: () => setLocation(`/${guild.id}/editor`), 81 + isActive: view === 'editor' && selectedGuild === guild.id, 82 + icon: <FileCode2 className='h-4 w-4' /> 83 + }, 84 + { 85 + title: 'Deployments', 86 + onClick: () => setLocation(`/${guild.id}/deployments`), 87 + isActive: view === 'deployments' && selectedGuild === guild.id, 88 + icon: <ListChecks className='h-4 w-4' /> 89 + }, 90 + { 91 + title: 'KV', 92 + onClick: () => setLocation(`/${guild.id}/kv`), 93 + isActive: view === 'kv' && selectedGuild === guild.id, 94 + icon: <Database className='h-4 w-4' /> 95 + } 96 + ] 97 + })) || [] 95 98 96 99 const guildsContent = match({ isLoading: guilds.loading, hasRoutes: routes.length > 0 }) 97 100 .with({ isLoading: true }, () => ( ··· 133 136 }} 134 137 > 135 138 <img src='/logo.svg' alt='flora logo' className='h-8 w-8' /> 136 - {!isCollapsed && ( 137 - <span className='font-semibold text-black dark:text-white'> 138 - flora 139 - </span> 140 - )} 139 + {!isCollapsed && <span className='font-semibold text-black dark:text-white'>flora</span>} 141 140 </button> 142 141 143 142 <LazyMotion features={domAnimation}>
+61 -61
apps/frontend/src/components/sidebar/nav-main.tsx
··· 46 46 47 47 return ( 48 48 <SidebarMenuItem key={route.id}> 49 - {hasSubRoutes 50 - ? ( 51 - <Collapsible 52 - open={isOpen} 53 - onOpenChange={(open) => setOpenCollapsible(open ? route.id : null)} 54 - className='w-full' 55 - > 56 - <CollapsibleTrigger 57 - render={ 58 - <SidebarMenuButton 59 - className={cn( 60 - 'w-full justify-between group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:!p-0', 61 - isOpen && 'bg-sidebar-accent text-sidebar-accent-foreground' 62 - )} 63 - tooltip={route.title} 64 - > 65 - <div className='flex items-center gap-2'> 66 - {route.icon} 67 - {!isCollapsed && <span>{route.title}</span>} 68 - </div> 69 - {!isCollapsed && 70 - (isOpen 71 - ? <ChevronUp className='size-4' /> 72 - : <ChevronDown className='size-4' />)} 73 - </SidebarMenuButton> 74 - } 75 - /> 49 + {hasSubRoutes ? ( 50 + <Collapsible 51 + open={isOpen} 52 + onOpenChange={(open) => setOpenCollapsible(open ? route.id : null)} 53 + className='w-full' 54 + > 55 + <CollapsibleTrigger 56 + render={ 57 + <SidebarMenuButton 58 + className={cn( 59 + 'w-full justify-between group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:!p-0', 60 + isOpen && 'bg-sidebar-accent text-sidebar-accent-foreground' 61 + )} 62 + tooltip={route.title} 63 + > 64 + <div className='flex items-center gap-2'> 65 + {route.icon} 66 + {!isCollapsed && <span>{route.title}</span>} 67 + </div> 68 + {!isCollapsed && 69 + (isOpen ? ( 70 + <ChevronUp className='size-4' /> 71 + ) : ( 72 + <ChevronDown className='size-4' /> 73 + ))} 74 + </SidebarMenuButton> 75 + } 76 + /> 76 77 77 - <CollapsibleContent> 78 - <SidebarMenuSub> 79 - {route.subs?.map((subRoute) => ( 80 - <SidebarMenuSubItem key={`${route.id}-${subRoute.title}`}> 81 - <SidebarMenuSubButton 82 - isActive={subRoute.isActive} 83 - onClick={() => { 84 - setOpenCollapsible(route.id) 85 - subRoute.onClick?.() 86 - }} 87 - render={ 88 - <button className='flex w-full cursor-pointer items-center gap-2'> 89 - {subRoute.icon} 90 - <span>{subRoute.title}</span> 91 - </button> 92 - } 93 - /> 94 - </SidebarMenuSubItem> 95 - ))} 96 - </SidebarMenuSub> 97 - </CollapsibleContent> 98 - </Collapsible> 99 - ) 100 - : ( 101 - <SidebarMenuButton 102 - tooltip={route.title} 103 - isActive={route.isActive} 104 - onClick={route.onClick} 105 - className='cursor-pointer group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:!p-0' 106 - > 107 - {route.icon} 108 - {!isCollapsed && <span>{route.title}</span>} 109 - </SidebarMenuButton> 110 - )} 78 + <CollapsibleContent> 79 + <SidebarMenuSub> 80 + {route.subs?.map((subRoute) => ( 81 + <SidebarMenuSubItem key={`${route.id}-${subRoute.title}`}> 82 + <SidebarMenuSubButton 83 + isActive={subRoute.isActive} 84 + onClick={() => { 85 + setOpenCollapsible(route.id) 86 + subRoute.onClick?.() 87 + }} 88 + render={ 89 + <button className='flex w-full cursor-pointer items-center gap-2'> 90 + {subRoute.icon} 91 + <span>{subRoute.title}</span> 92 + </button> 93 + } 94 + /> 95 + </SidebarMenuSubItem> 96 + ))} 97 + </SidebarMenuSub> 98 + </CollapsibleContent> 99 + </Collapsible> 100 + ) : ( 101 + <SidebarMenuButton 102 + tooltip={route.title} 103 + isActive={route.isActive} 104 + onClick={route.onClick} 105 + className='cursor-pointer group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:!p-0' 106 + > 107 + {route.icon} 108 + {!isCollapsed && <span>{route.title}</span>} 109 + </SidebarMenuButton> 110 + )} 111 111 </SidebarMenuItem> 112 112 ) 113 113 })}
+5 -3
apps/frontend/src/components/sidebar/nav-user.tsx
··· 102 102 </DropdownMenuItem> 103 103 <DropdownMenuSeparator /> 104 104 <DropdownMenuItem onClick={toggleTheme} className='cursor-pointer'> 105 - {theme === 'dark' 106 - ? <Sun className='mr-2 h-4 w-4' /> 107 - : <Moon className='mr-2 h-4 w-4' />} 105 + {theme === 'dark' ? ( 106 + <Sun className='mr-2 h-4 w-4' /> 107 + ) : ( 108 + <Moon className='mr-2 h-4 w-4' /> 109 + )} 108 110 {theme === 'dark' ? 'Light mode' : 'Dark mode'} 109 111 </DropdownMenuItem> 110 112 <DropdownMenuSeparator />
+11 -12
apps/frontend/src/components/ui/avatar.tsx
··· 48 48 49 49 type AvatarImageProps = React.ComponentProps<'img'> 50 50 51 - function AvatarImage( 52 - { className, src, onLoad, onError, loading, decoding, ...props }: AvatarImageProps 53 - ) { 51 + function AvatarImage({ 52 + className, 53 + src, 54 + onLoad, 55 + onError, 56 + loading, 57 + decoding, 58 + ...props 59 + }: AvatarImageProps) { 54 60 const { setStatus } = useAvatarContext() 55 61 const cached = Boolean(src && loadedAvatarImages.has(src)) 56 62 const [isLoaded, setIsLoaded] = React.useState(cached) ··· 114 120 delay?: number 115 121 } 116 122 117 - function AvatarFallback({ 118 - className, 119 - delay = 150, 120 - ...props 121 - }: AvatarFallbackProps) { 123 + function AvatarFallback({ className, delay = 150, ...props }: AvatarFallbackProps) { 122 124 const { status } = useAvatarContext() 123 125 const [delayPassed, setDelayPassed] = React.useState(delay === undefined) 124 126 ··· 183 185 ) 184 186 } 185 187 186 - function AvatarGroupCount({ 187 - className, 188 - ...props 189 - }: React.ComponentProps<'div'>) { 188 + function AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>) { 190 189 return ( 191 190 <div 192 191 data-slot='avatar-group-count'
+1 -2
apps/frontend/src/components/ui/button.tsx
··· 24 24 size: { 25 25 default: 26 26 'h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5', 27 - xs: 28 - "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3", 27 + xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3", 29 28 sm: 'h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2', 30 29 lg: 'h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3', 31 30 icon: 'size-9',
+6 -25
apps/frontend/src/components/ui/dropdown-menu.tsx
··· 25 25 sideOffset = 4, 26 26 className, 27 27 ...props 28 - }: 29 - & MenuPrimitive.Popup.Props 30 - & Pick< 31 - MenuPrimitive.Positioner.Props, 32 - 'align' | 'alignOffset' | 'side' | 'sideOffset' 33 - >) 34 - { 28 + }: MenuPrimitive.Popup.Props & 29 + Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) { 35 30 return ( 36 31 <MenuPrimitive.Portal> 37 32 <MenuPrimitive.Positioner ··· 69 64 <MenuPrimitive.GroupLabel 70 65 data-slot='dropdown-menu-label' 71 66 data-inset={inset} 72 - className={cn( 73 - 'px-3 py-2.5 text-xs text-muted-foreground data-inset:pl-9.5', 74 - className 75 - )} 67 + className={cn('px-3 py-2.5 text-xs text-muted-foreground data-inset:pl-9.5', className)} 76 68 {...props} 77 69 /> 78 70 ) ··· 187 179 } 188 180 189 181 function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) { 190 - return ( 191 - <MenuPrimitive.RadioGroup 192 - data-slot='dropdown-menu-radio-group' 193 - {...props} 194 - /> 195 - ) 182 + return <MenuPrimitive.RadioGroup data-slot='dropdown-menu-radio-group' {...props} /> 196 183 } 197 184 198 185 function DropdownMenuRadioItem({ ··· 226 213 ) 227 214 } 228 215 229 - function DropdownMenuSeparator({ 230 - className, 231 - ...props 232 - }: MenuPrimitive.Separator.Props) { 216 + function DropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props) { 233 217 return ( 234 218 <MenuPrimitive.Separator 235 219 data-slot='dropdown-menu-separator' ··· 239 223 ) 240 224 } 241 225 242 - function DropdownMenuShortcut({ 243 - className, 244 - ...props 245 - }: React.ComponentProps<'span'>) { 226 + function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) { 246 227 return ( 247 228 <span 248 229 data-slot='dropdown-menu-shortcut'
+2 -2
apps/frontend/src/components/ui/field.tsx
··· 187 187 188 188 return ( 189 189 <ul className='ml-4 flex list-disc flex-col gap-1'> 190 - {uniqueErrors.map((error) => 191 - error?.message && <li key={error.message}>{error.message}</li> 190 + {uniqueErrors.map( 191 + (error) => error?.message && <li key={error.message}>{error.message}</li> 192 192 )} 193 193 </ul> 194 194 )
+2 -4
apps/frontend/src/components/ui/scroll-area.tsx
··· 32 32 orientation={orientation} 33 33 className={cn( 34 34 'flex touch-none select-none transition-colors', 35 - orientation === 'vertical' && 36 - 'h-full w-2.5 border-l border-l-transparent p-[1px]', 37 - orientation === 'horizontal' && 38 - 'h-2.5 flex-col border-t border-t-transparent p-[1px]', 35 + orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]', 36 + orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]', 39 37 className 40 38 )} 41 39 {...props}
+1 -5
apps/frontend/src/components/ui/separator.tsx
··· 2 2 3 3 import { cn } from '@/lib/utils' 4 4 5 - function Separator({ 6 - className, 7 - orientation = 'horizontal', 8 - ...props 9 - }: SeparatorPrimitive.Props) { 5 + function Separator({ className, orientation = 'horizontal', ...props }: SeparatorPrimitive.Props) { 10 6 return ( 11 7 <SeparatorPrimitive 12 8 data-slot='separator'
+2 -11
apps/frontend/src/components/ui/sheet.tsx
··· 60 60 {showCloseButton && ( 61 61 <SheetPrimitive.Close 62 62 data-slot='sheet-close' 63 - render={ 64 - <Button 65 - variant='ghost' 66 - className='absolute top-4 right-4' 67 - size='icon-sm' 68 - /> 69 - } 63 + render={<Button variant='ghost' className='absolute top-4 right-4' size='icon-sm' />} 70 64 > 71 65 <XIcon /> 72 66 <span className='sr-only'>Close</span> ··· 107 101 ) 108 102 } 109 103 110 - function SheetDescription({ 111 - className, 112 - ...props 113 - }: SheetPrimitive.Description.Props) { 104 + function SheetDescription({ className, ...props }: SheetPrimitive.Description.Props) { 114 105 return ( 115 106 <SheetPrimitive.Description 116 107 data-slot='sheet-description'
+36 -71
apps/frontend/src/components/ui/sidebar.tsx
··· 79 79 } 80 80 81 81 // This sets the cookie to keep the sidebar state. 82 - document.cookie = 83 - `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}` 82 + document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}` 84 83 }, 85 84 [setOpenProp, open] 86 85 ) ··· 93 92 // Adds a keyboard shortcut to toggle the sidebar. 94 93 React.useEffect(() => { 95 94 const handleKeyDown = (event: KeyboardEvent) => { 96 - if ( 97 - event.key === SIDEBAR_KEYBOARD_SHORTCUT && 98 - (event.metaKey || event.ctrlKey) 99 - ) { 95 + if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) { 100 96 event.preventDefault() 101 97 toggleSidebar() 102 98 } ··· 127 123 <SidebarContext.Provider value={contextValue}> 128 124 <div 129 125 data-slot='sidebar-wrapper' 130 - style={{ 131 - '--sidebar-width': SIDEBAR_WIDTH, 132 - '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, 133 - ...style 134 - } as React.CSSProperties} 126 + style={ 127 + { 128 + '--sidebar-width': SIDEBAR_WIDTH, 129 + '--sidebar-width-icon': SIDEBAR_WIDTH_ICON, 130 + ...style 131 + } as React.CSSProperties 132 + } 135 133 className={cn( 136 134 'group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar', 137 135 className ··· 183 181 data-slot='sidebar' 184 182 data-mobile='true' 185 183 className='w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden' 186 - style={{ 187 - '--sidebar-width': SIDEBAR_WIDTH_MOBILE 188 - } as React.CSSProperties} 184 + style={ 185 + { 186 + '--sidebar-width': SIDEBAR_WIDTH_MOBILE 187 + } as React.CSSProperties 188 + } 189 189 side={side} 190 190 > 191 191 <SheetHeader className='sr-only'> ··· 244 244 ) 245 245 } 246 246 247 - function SidebarTrigger({ 248 - className, 249 - onClick, 250 - ...props 251 - }: React.ComponentProps<typeof Button>) { 247 + function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) { 252 248 const { toggleSidebar } = useSidebar() 253 249 254 250 return ( ··· 308 304 ) 309 305 } 310 306 311 - function SidebarInput({ 312 - className, 313 - ...props 314 - }: React.ComponentProps<typeof Input>) { 307 + function SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) { 315 308 return ( 316 309 <Input 317 310 data-slot='sidebar-input' ··· 327 320 <div 328 321 data-slot='sidebar-header' 329 322 data-sidebar='header' 330 - className={cn( 331 - 'flex flex-col gap-2 p-2 [--radius:var(--radius-xl)]', 332 - className 333 - )} 323 + className={cn('flex flex-col gap-2 p-2 [--radius:var(--radius-xl)]', className)} 334 324 {...props} 335 325 /> 336 326 ) ··· 347 337 ) 348 338 } 349 339 350 - function SidebarSeparator({ 351 - className, 352 - ...props 353 - }: React.ComponentProps<typeof Separator>) { 340 + function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) { 354 341 return ( 355 342 <Separator 356 343 data-slot='sidebar-separator' ··· 434 421 }) 435 422 } 436 423 437 - function SidebarGroupContent({ 438 - className, 439 - ...props 440 - }: React.ComponentProps<'div'>) { 424 + function SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) { 441 425 return ( 442 426 <div 443 427 data-slot='sidebar-group-content' ··· 500 484 tooltip, 501 485 className, 502 486 ...props 503 - }: 504 - & useRender.ComponentProps<'button'> 505 - & React.ComponentProps<'button'> 506 - & { 487 + }: useRender.ComponentProps<'button'> & 488 + React.ComponentProps<'button'> & { 507 489 isActive?: boolean 508 490 tooltip?: string | React.ComponentProps<typeof TooltipContent> 509 - } 510 - & VariantProps<typeof sidebarMenuButtonVariants>) 511 - { 491 + } & VariantProps<typeof sidebarMenuButtonVariants>) { 512 492 const { isMobile, state } = useSidebar() 513 493 const comp = useRender({ 514 494 defaultTagName: 'button', ··· 555 535 render, 556 536 showOnHover = false, 557 537 ...props 558 - }: 559 - & useRender.ComponentProps<'button'> 560 - & React.ComponentProps<'button'> 561 - & { 538 + }: useRender.ComponentProps<'button'> & 539 + React.ComponentProps<'button'> & { 562 540 showOnHover?: boolean 563 - }) 564 - { 541 + }) { 565 542 return useRender({ 566 543 defaultTagName: 'button', 567 544 props: mergeProps<'button'>( ··· 583 560 }) 584 561 } 585 562 586 - function SidebarMenuBadge({ 587 - className, 588 - ...props 589 - }: React.ComponentProps<'div'>) { 563 + function SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) { 590 564 return ( 591 565 <div 592 566 data-slot='sidebar-menu-badge' ··· 619 593 className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)} 620 594 {...props} 621 595 > 622 - {showIcon && ( 623 - <Skeleton 624 - className='size-4 rounded-md' 625 - data-sidebar='menu-skeleton-icon' 626 - /> 627 - )} 596 + {showIcon && <Skeleton className='size-4 rounded-md' data-sidebar='menu-skeleton-icon' />} 628 597 <Skeleton 629 598 className='h-4 max-w-(--skeleton-width) flex-1' 630 599 data-sidebar='menu-skeleton-text' 631 - style={{ 632 - '--skeleton-width': width 633 - } as React.CSSProperties} 600 + style={ 601 + { 602 + '--skeleton-width': width 603 + } as React.CSSProperties 604 + } 634 605 /> 635 606 </div> 636 607 ) ··· 650 621 ) 651 622 } 652 623 653 - function SidebarMenuSubItem({ 654 - className, 655 - ...props 656 - }: React.ComponentProps<'li'>) { 624 + function SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) { 657 625 return ( 658 626 <li 659 627 data-slot='sidebar-menu-sub-item' ··· 670 638 isActive = false, 671 639 className, 672 640 ...props 673 - }: 674 - & useRender.ComponentProps<'a'> 675 - & React.ComponentProps<'a'> 676 - & { 641 + }: useRender.ComponentProps<'a'> & 642 + React.ComponentProps<'a'> & { 677 643 size?: 'sm' | 'md' 678 644 isActive?: boolean 679 - }) 680 - { 645 + }) { 681 646 return useRender({ 682 647 defaultTagName: 'a', 683 648 props: mergeProps<'a'>(
+4 -18
apps/frontend/src/components/ui/tooltip.tsx
··· 4 4 5 5 import { cn } from '@/lib/utils' 6 6 7 - function TooltipProvider({ 8 - delay = 0, 9 - ...props 10 - }: TooltipPrimitive.Provider.Props) { 11 - return ( 12 - <TooltipPrimitive.Provider 13 - data-slot='tooltip-provider' 14 - delay={delay} 15 - {...props} 16 - /> 17 - ) 7 + function TooltipProvider({ delay = 0, ...props }: TooltipPrimitive.Provider.Props) { 8 + return <TooltipPrimitive.Provider data-slot='tooltip-provider' delay={delay} {...props} /> 18 9 } 19 10 20 11 function Tooltip({ ...props }: TooltipPrimitive.Root.Props) { ··· 33 24 alignOffset = 0, 34 25 children, 35 26 ...props 36 - }: 37 - & TooltipPrimitive.Popup.Props 38 - & Pick< 39 - TooltipPrimitive.Positioner.Props, 40 - 'align' | 'alignOffset' | 'side' | 'sideOffset' 41 - >) 42 - { 27 + }: TooltipPrimitive.Popup.Props & 28 + Pick<TooltipPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) { 43 29 return ( 44 30 <TooltipPrimitive.Portal> 45 31 <TooltipPrimitive.Positioner
+10 -7
apps/frontend/src/hooks/use-recent-guilds.ts
··· 34 34 } 35 35 }, []) 36 36 37 - const pushRecentGuild = useCallback((guildId: string) => { 38 - const current = readRecentGuildIds() 39 - const next = [guildId, ...current.filter((id) => id !== guildId)].slice(0, limit) 40 - window.localStorage.setItem(RECENT_GUILDS_KEY, JSON.stringify(next)) 41 - emitRecentGuildsChanged() 42 - setRecentGuildIds(next) 43 - }, [limit]) 37 + const pushRecentGuild = useCallback( 38 + (guildId: string) => { 39 + const current = readRecentGuildIds() 40 + const next = [guildId, ...current.filter((id) => id !== guildId)].slice(0, limit) 41 + window.localStorage.setItem(RECENT_GUILDS_KEY, JSON.stringify(next)) 42 + emitRecentGuildsChanged() 43 + setRecentGuildIds(next) 44 + }, 45 + [limit] 46 + ) 44 47 45 48 const clearRecentGuilds = useCallback(() => { 46 49 window.localStorage.removeItem(RECENT_GUILDS_KEY)
+6 -6
apps/frontend/src/index.css
··· 1 - @import "tailwindcss"; 2 - @import "tw-animate-css"; 3 - @import "shadcn/tailwind.css"; 4 - @import "@fontsource-variable/geist"; 1 + @import 'tailwindcss'; 2 + @import 'tw-animate-css'; 3 + @import 'shadcn/tailwind.css'; 4 + @import '@fontsource-variable/geist'; 5 5 6 6 @custom-variant dark (&:is(.dark *)); 7 7 ··· 47 47 --card-foreground: oklch(0.985 0 0); 48 48 --popover: oklch(0.205 0 0); 49 49 --popover-foreground: oklch(0.985 0 0); 50 - --primary: oklch(0.87 0.00 0); 50 + --primary: oklch(0.87 0 0); 51 51 --primary-foreground: oklch(0.205 0 0); 52 52 --secondary: oklch(0.269 0 0); 53 53 --secondary-foreground: oklch(0.985 0 0); ··· 75 75 } 76 76 77 77 @theme inline { 78 - --font-sans: "Geist Variable", sans-serif; 78 + --font-sans: 'Geist Variable', sans-serif; 79 79 --color-sidebar-ring: var(--sidebar-ring); 80 80 --color-sidebar-border: var(--sidebar-border); 81 81 --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+7 -3
apps/frontend/src/lib/seo.tsx
··· 38 38 return `${getSiteOrigin()}${path}` 39 39 } 40 40 41 - export function Seo( 42 - { title, description = DEFAULT_DESCRIPTION, path, imagePath, noindex = false }: SeoProps 43 - ) { 41 + export function Seo({ 42 + title, 43 + description = DEFAULT_DESCRIPTION, 44 + path, 45 + imagePath, 46 + noindex = false 47 + }: SeoProps) { 44 48 const pageTitle = title ? `${title} | ${SITE_NAME}` : SITE_NAME 45 49 const canonical = toCanonicalUrl(path) 46 50 const imageUrl = toAbsoluteImageUrl(imagePath)
+21 -16
apps/frontend/src/pages/dashboard.tsx
··· 11 11 import { useLocation } from 'wouter' 12 12 13 13 function getGuildInitials(name: string) { 14 - return name.trim().split(/\s+/).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? '').join('') 14 + return name 15 + .trim() 16 + .split(/\s+/) 17 + .slice(0, 2) 18 + .map((part) => part[0]?.toUpperCase() ?? '') 19 + .join('') 15 20 } 16 21 17 22 export function Dashboard() { ··· 22 27 23 28 const recentGuilds = useMemo(() => { 24 29 const all = guilds.data ?? [] 25 - const fromRecent = recentGuildIds.map((id) => all.find((guild) => guild.id === id)).filter(( 26 - guild 27 - ): guild is NonNullable<typeof guild> => Boolean(guild)) 30 + const fromRecent = recentGuildIds 31 + .map((id) => all.find((guild) => guild.id === id)) 32 + .filter((guild): guild is NonNullable<typeof guild> => Boolean(guild)) 28 33 if (fromRecent.length >= recentGuildLimit) return fromRecent.slice(0, recentGuildLimit) 29 34 const rest = all.filter((guild) => !fromRecent.some((recent) => recent.id === guild.id)) 30 35 return [...fromRecent, ...rest].slice(0, recentGuildLimit) ··· 32 37 33 38 const welcomeUsername = session?.username 34 39 const recentGuildsContent = match(recentGuilds.length) 35 - .with( 36 - 0, 37 - () => ( 38 - <div className='rounded-xl border border-dashed p-8 text-sm text-muted-foreground'> 39 - Pick a server from the sidebar to create your recent list. 40 - </div> 41 - ) 42 - ) 40 + .with(0, () => ( 41 + <div className='rounded-xl border border-dashed p-8 text-sm text-muted-foreground'> 42 + Pick a server from the sidebar to create your recent list. 43 + </div> 44 + )) 43 45 .otherwise(() => ( 44 46 <div className='grid gap-4 sm:grid-cols-2 lg:grid-cols-4'> 45 47 {recentGuilds.map((guild) => ( ··· 56 58 <div className='mb-4 flex items-center gap-3'> 57 59 <Avatar className='h-10 w-10'> 58 60 <AvatarImage 59 - src={guild.icon 60 - ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=128` 61 - : undefined} 61 + src={ 62 + guild.icon 63 + ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=128` 64 + : undefined 65 + } 62 66 /> 63 67 <AvatarFallback>{getGuildInitials(guild.name)}</AvatarFallback> 64 68 </Avatar> 65 69 <div className='font-medium'>{guild.name}</div> 66 70 </div> 67 71 <div className='inline-flex items-center gap-2 text-sm text-muted-foreground group-hover:text-foreground'> 68 - <Clock4 className='h-4 w-4' />Continue managing guild 72 + <Clock4 className='h-4 w-4' /> 73 + Continue managing guild 69 74 </div> 70 75 </button> 71 76 ))}
+5 -3
apps/frontend/src/pages/deployments-page.tsx
··· 33 33 <div className='ml-auto' /> 34 34 </header> 35 35 <div className='flex-1 overflow-y-auto p-4 md:p-6 lg:p-8'> 36 - {!guildId 37 - ? <div className='text-sm text-destructive'>Missing guild id</div> 38 - : <DeploymentHistory guildId={guildId} />} 36 + {!guildId ? ( 37 + <div className='text-sm text-destructive'>Missing guild id</div> 38 + ) : ( 39 + <DeploymentHistory guildId={guildId} /> 40 + )} 39 41 </div> 40 42 </SidebarInset> 41 43 </div>
+17 -16
apps/frontend/src/pages/editor-page.tsx
··· 76 76 useEffect(() => { 77 77 const root = logsAreaRef.current 78 78 if (!root) return 79 - const viewport = root.querySelector('[data-radix-scroll-area-viewport]') as 80 - | HTMLDivElement 81 - | null 79 + const viewport = root.querySelector( 80 + '[data-radix-scroll-area-viewport]' 81 + ) as HTMLDivElement | null 82 82 if (!viewport) return 83 83 84 84 const onScroll = () => { ··· 96 96 if (!tailLogs || !logsSectionOpen) return 97 97 const root = logsAreaRef.current 98 98 if (!root) return 99 - const viewport = root.querySelector('[data-radix-scroll-area-viewport]') as 100 - | HTMLDivElement 101 - | null 99 + const viewport = root.querySelector( 100 + '[data-radix-scroll-area-viewport]' 101 + ) as HTMLDivElement | null 102 102 if (!viewport) return 103 103 viewport.scrollTop = viewport.scrollHeight 104 104 }, [logsQuery.data, tailLogs, logsSectionOpen]) ··· 143 143 bundle: buildResult.build.artifact.bundle, 144 144 source_map: buildResult.build.artifact.source_map 145 145 ? { 146 - path: 'bundle.js.map', 147 - contents: buildResult.build.artifact.source_map 148 - } 146 + path: 'bundle.js.map', 147 + contents: buildResult.build.artifact.source_map 148 + } 149 149 : undefined 150 150 } 151 151 }) ··· 180 180 window.setTimeout(() => setCopyState('idle'), 1200) 181 181 } 182 182 183 - const deployLabel = deployState === 'deploying' 184 - ? 'Deploying...' 185 - : deployState === 'success' 186 - ? 'Deployed' 187 - : deployState === 'error' 188 - ? 'Deploy Failed' 189 - : 'Deploy' 183 + const deployLabel = 184 + deployState === 'deploying' 185 + ? 'Deploying...' 186 + : deployState === 'success' 187 + ? 'Deployed' 188 + : deployState === 'error' 189 + ? 'Deploy Failed' 190 + : 'Deploy' 190 191 const deployButtonClass = cn( 191 192 'inline-flex items-center gap-1 rounded-md border px-2 py-1 text-[10px] font-medium transition-all duration-300 disabled:opacity-50', 192 193 deployState === 'deploying' &&
+5 -3
apps/frontend/src/pages/kv-page.tsx
··· 33 33 <div className='ml-auto' /> 34 34 </header> 35 35 <div className='flex-1 overflow-y-auto p-4 md:p-6 lg:p-8'> 36 - {!guildId 37 - ? <div className='text-sm text-destructive'>Missing guild id</div> 38 - : <KvManager guildId={guildId} />} 36 + {!guildId ? ( 37 + <div className='text-sm text-destructive'>Missing guild id</div> 38 + ) : ( 39 + <KvManager guildId={guildId} /> 40 + )} 39 41 </div> 40 42 </SidebarInset> 41 43 </div>
+5 -9
apps/frontend/src/pages/login-page.tsx
··· 48 48 ) 49 49 } 50 50 51 - export function LoginForm({ 52 - className, 53 - ...props 54 - }: React.ComponentProps<'div'>) { 51 + export function LoginForm({ className, ...props }: React.ComponentProps<'div'>) { 55 52 const redirectToLogin = useLoginRedirect() 56 53 57 54 return ( ··· 87 84 </form> 88 85 <div className='mt-6 space-y-3'> 89 86 <FieldDescription className='text-pretty text-center text-xs text-muted-foreground'> 90 - flora is currently in{' '} 91 - <strong>alpha</strong>. Things are subject to change. Please report any bugs, issues, or 92 - security vulnerabilities to <a href='https://uwu.network/~tasky'>tasky</a>. 87 + flora is currently in <strong>alpha</strong>. Things are subject to change. Please 88 + report any bugs, issues, or security vulnerabilities to{' '} 89 + <a href='https://uwu.network/~tasky'>tasky</a>. 93 90 </FieldDescription> 94 91 <FieldDescription className='text-pretty text-center text-xs text-muted-foreground'> 95 - By clicking continue, you agree to our <a href='/terms-of-service'>Terms of Service</a> 96 - {' '} 92 + By clicking continue, you agree to our <a href='/terms-of-service'>Terms of Service</a>{' '} 97 93 and <a href='/privacy-policy'>Privacy Policy</a>. 98 94 </FieldDescription> 99 95 </div>
+1 -3
apps/frontend/tsconfig.app.json
··· 24 24 "noFallthroughCasesInSwitch": true, 25 25 "noUncheckedSideEffectImports": true, 26 26 "paths": { 27 - "@/*": [ 28 - "./src/*" 29 - ] 27 + "@/*": ["./src/*"] 30 28 } 31 29 }, 32 30 "include": ["src"]
+1 -4
apps/frontend/tsconfig.json
··· 1 1 { 2 2 "files": [], 3 - "references": [ 4 - { "path": "./tsconfig.app.json" }, 5 - { "path": "./tsconfig.node.json" } 6 - ], 3 + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }], 7 4 "compilerOptions": { 8 5 "baseUrl": ".", 9 6 "paths": {
+4 -13
apps/frontend/vite.config.ts
··· 1 1 import tailwindcss from '@tailwindcss/vite' 2 - import react from '@vitejs/plugin-react' 2 + import react, { reactCompilerPreset } from '@vitejs/plugin-react' 3 3 import path from 'path' 4 4 import { defineConfig } from 'vite' 5 + import babel from '@rolldown/plugin-babel' 5 6 6 7 // https://vite.dev/config/ 7 8 export default defineConfig(({ mode }) => { 8 9 const API_HOST = 'http://localhost:3000' 9 10 console.log(`API: ${API_HOST}`) 10 11 return { 11 - plugins: [ 12 - react({ 13 - babel: { 14 - plugins: ['babel-plugin-react-compiler'] 15 - } 16 - }), 17 - tailwindcss() 18 - ], 12 + plugins: [react(), babel({ presets: [reactCompilerPreset()] }), tailwindcss()], 19 13 optimizeDeps: { 20 14 exclude: ['modern-monaco', 'modern-monaco/core'] 21 15 }, 22 16 resolve: { 23 17 alias: { 24 18 '@': path.resolve(__dirname, './src'), 25 - 'modern-monaco/core': path.resolve( 26 - __dirname, 27 - 'node_modules/modern-monaco/dist/core.mjs' 28 - ), 19 + 'modern-monaco/core': path.resolve(__dirname, 'node_modules/modern-monaco/dist/core.mjs'), 29 20 'monaco-themes/themes/themelist.json': path.resolve( 30 21 __dirname, 31 22 'node_modules/monaco-themes/themes/themelist.json'
+6 -5
apps/uwu.network/package.json
··· 1 1 { 2 2 "name": "@flora-internal/uwu.network", 3 + "private": true, 3 4 "type": "module", 4 - "private": true, 5 + "scripts": { 6 + "build": "tsgo --noEmit", 7 + "typecheck": "tsgo --noEmit" 8 + }, 5 9 "dependencies": { 6 10 "dayjs": "^1.11.18" 7 11 }, ··· 9 13 "@typescript/native-preview": "catalog:", 10 14 "@uwu/flora-cli": "workspace:*", 11 15 "@uwu/flora-sdk": "workspace:*", 12 - "typescript": "^5.0.0" 13 - }, 14 - "scripts": { 15 - "typecheck": "tsgo --noEmit" 16 + "typescript": "catalog:" 16 17 } 17 18 }
+5 -7
apps/uwu.network/src/main.ts
··· 110 110 url = json.html_url 111 111 } 112 112 113 - const req = await fetch( 114 - `https://api.github.com/repos/${owner}/${repo}/issues/${issue}`, 115 - { headers } 116 - ) 113 + const req = await fetch(`https://api.github.com/repos/${owner}/${repo}/issues/${issue}`, { 114 + headers 115 + }) 117 116 if (!req.ok) continue 118 117 const json = (await req.json()) as any 119 118 ··· 171 170 172 171 if (embeds.length > 0) { 173 172 const limited = embeds.slice(0, 10) 174 - const content = embeds.length > 10 175 - ? `Showing ${limited.length} of ${embeds.length} GitHub links.` 176 - : undefined 173 + const content = 174 + embeds.length > 10 ? `Showing ${limited.length} of ${embeds.length} GitHub links.` : undefined 177 175 await ctx.reply({ embeds: limited, content }) 178 176 await ctx.edit({ flags: MessageFlags.SUPPRESS_EMBEDS }) 179 177 }
+1 -3
apps/www/.vitepress/config.mts
··· 31 31 } 32 32 ], 33 33 34 - socialLinks: [ 35 - { icon: 'github', link: 'https://github.com/uwu/flora' } 36 - ] 34 + socialLinks: [{ icon: 'github', link: 'https://github.com/uwu/flora' }] 37 35 }, 38 36 vite: { 39 37 // @ts-expect-error: some weird types error again wow
+9 -18
apps/www/.vitepress/theme/components/Index.vue
··· 83 83 z-index: 1; 84 84 pointer-events: none; 85 85 background: 86 - radial-gradient( 87 - 130% 80% at 50% 10%, 88 - rgb(0 0 0 / 0%) 38%, 89 - rgb(0 0 0 / 52%) 100% 90 - ), 91 - linear-gradient( 92 - to bottom, 93 - rgb(29 32 33 / 24%) 0%, 94 - rgb(29 32 33 / 70%) 74%, 95 - var(--gb-bg) 100% 96 - ); 86 + radial-gradient(130% 80% at 50% 10%, rgb(0 0 0 / 0%) 38%, rgb(0 0 0 / 52%) 100%), 87 + linear-gradient(to bottom, rgb(29 32 33 / 24%) 0%, rgb(29 32 33 / 70%) 74%, var(--gb-bg) 100%); 97 88 } 98 89 99 90 @keyframes hero-bg-in { ··· 106 97 } 107 98 108 99 .page-footer { 109 - --uno: "px-6 py-7"; 100 + --uno: 'px-6 py-7'; 110 101 background: #0e0f10; 111 102 } 112 103 113 104 .page-footer-inner { 114 - --uno: "max-w-5xl mx-auto flex items-center justify-between gap-4"; 105 + --uno: 'max-w-5xl mx-auto flex items-center justify-between gap-4'; 115 106 } 116 107 117 108 .page-footer-copy { 118 - --uno: "m-0 text-sm"; 109 + --uno: 'm-0 text-sm'; 119 110 color: var(--gb-fg-soft); 120 111 } 121 112 ··· 134 125 } 135 126 136 127 .page-footer-sep { 137 - --uno: "mx-2"; 128 + --uno: 'mx-2'; 138 129 color: var(--gb-muted); 139 130 } 140 131 141 132 @media (max-width: 600px) { 142 133 .page-footer { 143 - --uno: "px-5 py-6"; 134 + --uno: 'px-5 py-6'; 144 135 } 145 136 146 137 .page-footer-inner { 147 - --uno: "flex-col items-start gap-3"; 138 + --uno: 'flex-col items-start gap-3'; 148 139 } 149 140 150 141 .page-footer-copy { 151 - --uno: "text-xs"; 142 + --uno: 'text-xs'; 152 143 line-height: 1.6; 153 144 } 154 145 }
+9 -8
apps/www/.vitepress/theme/components/IndexPage/FeatureSnippetBox.vue
··· 7 7 feature: IndexFeature 8 8 }>() 9 9 10 - const cliSnippetHtml = 11 - `<span class="t-prompt">λ</span> <span class="t-cmd">pnpm flora deploy --guild 847291053618249801</span> 10 + const cliSnippetHtml = `<span class="t-prompt">λ</span> <span class="t-cmd">pnpm flora deploy --guild 847291053618249801</span> 12 11 <span class="t-info">ℹ</span> <span class="t-text">Uploading project...</span> 13 12 <span class="t-ok">✔</span> <span class="t-text">Upload complete (3 files, 1kb)</span> 14 13 <span class="t-info">ℹ</span> <span class="t-text">Building... (a3f1c82d-91e7-4b3a-b052-7e8d4a19f603)</span> ··· 19 18 <span class="t-ok">✔</span> <span class="t-text">Deployed guild 847291053618249801</span>` 20 19 21 20 const snippetHtml = computed(() => 22 - props.feature.id === 'cli' ? cliSnippetHtml : props.feature.snippetHtml ?? '' 21 + props.feature.id === 'cli' ? cliSnippetHtml : (props.feature.snippetHtml ?? '') 23 22 ) 24 23 </script> 25 24 ··· 33 32 34 33 <style scoped> 35 34 .feature-codebox { 36 - --uno: "absolute rounded-2.5 border overflow-hidden"; 35 + --uno: 'absolute rounded-2.5 border overflow-hidden'; 37 36 border-color: var(--gb-border); 38 37 top: 34px; 39 38 right: 34px; 40 39 z-index: 6; 41 40 width: min(760px, 74vw); 42 41 background: color-mix(in srgb, var(--background) 82%, #282828); 43 - box-shadow: 0 10px 28px oklch(0% 0 0 / 0.35), 0 2px 10px oklch(0% 0 0 / 0.22); 42 + box-shadow: 43 + 0 10px 28px oklch(0% 0 0 / 0.35), 44 + 0 2px 10px oklch(0% 0 0 / 0.22); 44 45 } 45 46 46 47 .terminal-body { 47 - --uno: "p-5 px-6 overflow-x-auto"; 48 + --uno: 'p-5 px-6 overflow-x-auto'; 48 49 min-height: 300px; 49 50 } 50 51 51 52 .terminal-body pre { 52 - --uno: "m-0 font-mono"; 53 + --uno: 'm-0 font-mono'; 53 54 color: var(--gb-fg-soft); 54 55 font-size: 14px; 55 56 line-height: 1.7; ··· 126 127 } 127 128 128 129 .terminal-body { 129 - --uno: "p-4 px-5 overflow-x-auto"; 130 + --uno: 'p-4 px-5 overflow-x-auto'; 130 131 min-height: 320px; 131 132 } 132 133 }
+10 -10
apps/www/.vitepress/theme/components/IndexPage/FeaturesSection.vue
··· 69 69 70 70 <style scoped> 71 71 .features { 72 - --uno: "bg-[#0e0f10]"; 72 + --uno: 'bg-[#0e0f10]'; 73 73 background: #0e0f10; 74 74 padding: 120px 32px; 75 75 } 76 76 77 77 .features-inner { 78 - --uno: "max-w-5xl mx-auto"; 78 + --uno: 'max-w-5xl mx-auto'; 79 79 } 80 80 81 81 .features-heading { 82 - --uno: "font-600 m-0 mb-14"; 82 + --uno: 'font-600 m-0 mb-14'; 83 83 color: var(--gb-fg); 84 84 font-size: 36px; 85 85 letter-spacing: -0.03em; 86 86 } 87 87 88 88 .features-carousel { 89 - --uno: "relative rounded-4 overflow-hidden border"; 89 + --uno: 'relative rounded-4 overflow-hidden border'; 90 90 border-color: var(--gb-border); 91 91 aspect-ratio: 16 / 9; 92 92 } ··· 105 105 } 106 106 107 107 .feature-slide-bg { 108 - --uno: "absolute inset-0 w-full h-full object-cover"; 108 + --uno: 'absolute inset-0 w-full h-full object-cover'; 109 109 } 110 110 111 111 .feature-slide-overlay { ··· 120 120 } 121 121 122 122 .feature-slide-content { 123 - --uno: "absolute bottom-0 left-0 p-10"; 123 + --uno: 'absolute bottom-0 left-0 p-10'; 124 124 } 125 125 126 126 .feature-slide-content h3 { 127 - --uno: "font-600 m-0 mb-2"; 127 + --uno: 'font-600 m-0 mb-2'; 128 128 color: var(--gb-fg); 129 129 font-size: 24px; 130 130 letter-spacing: -0.02em; 131 131 } 132 132 133 133 .feature-slide-content p { 134 - --uno: "m-0"; 134 + --uno: 'm-0'; 135 135 color: var(--gb-fg-soft); 136 136 font-size: 15px; 137 137 line-height: 1.6; ··· 177 177 } 178 178 179 179 .feature-slide-content { 180 - --uno: "left-0 right-0 p-8"; 180 + --uno: 'left-0 right-0 p-8'; 181 181 bottom: 14px; 182 182 } 183 183 ··· 196 196 } 197 197 198 198 .feature-slide-content { 199 - --uno: "left-0 right-0 p-6"; 199 + --uno: 'left-0 right-0 p-6'; 200 200 bottom: 8px; 201 201 } 202 202
+11 -18
apps/www/.vitepress/theme/components/IndexPage/HeroSection.vue
··· 13 13 class="btn-common btn-primary ring-offset-background focus-visible:ring-ring inline-flex items-center justify-center gap-1 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 select-none border border-transparent rounded-md px-3 py-1.5 text-lg [&_svg]:size-5 [&_svg]:stroke-[1.5px] font-sans w-fit rail-tick-start" 14 14 > 15 15 Dashboard 16 - <svg 17 - viewBox="0 0 24 24" 18 - fill="none" 19 - stroke="currentColor" 20 - stroke-width="2" 21 - > 16 + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 22 17 <path d="M3 3h7v7H3zM14 3h7v5h-7zM14 10h7v11h-7zM3 14h7v7H3z" /> 23 18 </svg> 24 19 </a> ··· 42 37 class="btn-common btn-secondary ring-offset-background focus-visible:ring-ring inline-flex items-center justify-center gap-1 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 select-none border rounded-md px-3 py-1.5 text-lg [&_svg]:size-5 [&_svg]:stroke-[1.5px] font-sans w-fit rail-tick-start" 43 38 > 44 39 View on GitHub 45 - <svg 46 - viewBox="0 0 24 24" 47 - fill="none" 48 - stroke="currentColor" 49 - stroke-width="2" 50 - > 40 + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> 51 41 <path d="M7 17L17 7M17 7H7M17 7v10" /> 52 42 </svg> 53 43 </a> ··· 57 47 58 48 <style scoped> 59 49 .hero { 60 - --uno: "max-w-5xl mx-auto flex flex-col items-start text-left"; 50 + --uno: 'max-w-5xl mx-auto flex flex-col items-start text-left'; 61 51 position: relative; 62 52 z-index: 2; 63 53 padding: 140px 32px 80px; 64 54 } 65 55 66 56 .hero-description { 67 - --uno: "mb-8"; 57 + --uno: 'mb-8'; 68 58 color: var(--gb-fg-soft); 69 59 max-width: 640px; 70 60 font-size: 22px; ··· 74 64 } 75 65 76 66 .hero-actions { 77 - --uno: "flex gap-3 items-center"; 67 + --uno: 'flex gap-3 items-center'; 78 68 } 79 69 80 70 .btn-common { 81 - --uno: "no-underline"; 71 + --uno: 'no-underline'; 82 72 transform: translateY(0); 83 73 } 84 74 85 75 .btn-primary { 86 76 color: var(--primary-foreground); 87 77 background-color: #d3dbd2; 88 - transition: background-color 150ms ease, color 150ms ease, transform 100ms ease; 78 + transition: 79 + background-color 150ms ease, 80 + color 150ms ease, 81 + transform 100ms ease; 89 82 } 90 83 91 84 .btn-primary:hover { ··· 128 121 } 129 122 130 123 .hero-actions { 131 - --uno: "flex-col"; 124 + --uno: 'flex-col'; 132 125 width: min(100%, 360px); 133 126 } 134 127
+17 -13
apps/www/.vitepress/theme/components/IndexPage/NavBar.vue
··· 12 12 <a href="/docs/examples">Examples</a> 13 13 <a href="https://github.com/uwu/flora" class="nav-gh"> 14 14 <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> 15 - <path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /> 15 + <path 16 + d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" 17 + /> 16 18 </svg> 17 19 </a> 18 20 </div> ··· 27 29 left: 0; 28 30 right: 0; 29 31 z-index: 100; 30 - transition: opacity 220ms ease, transform 220ms ease; 32 + transition: 33 + opacity 220ms ease, 34 + transform 220ms ease; 31 35 } 32 36 33 37 .nav-inner { 34 - --uno: "max-w-5xl mx-auto px-8 h-14 flex items-center justify-between"; 38 + --uno: 'max-w-5xl mx-auto px-8 h-14 flex items-center justify-between'; 35 39 } 36 40 37 41 .nav-left { 38 - --uno: "flex items-center gap-2.5"; 42 + --uno: 'flex items-center gap-2.5'; 39 43 } 40 44 41 45 .nav-logo { 42 - --uno: "size-8"; 46 + --uno: 'size-8'; 43 47 } 44 48 45 49 .nav-brand { 46 - --uno: "text-lg font-600 tracking-tight"; 50 + --uno: 'text-lg font-600 tracking-tight'; 47 51 color: var(--gb-fg); 48 52 } 49 53 50 54 .nav-links { 51 - --uno: "flex items-center gap-6"; 55 + --uno: 'flex items-center gap-6'; 52 56 } 53 57 54 58 .nav-links a { 55 - --uno: "text-sm no-underline"; 59 + --uno: 'text-sm no-underline'; 56 60 color: var(--gb-muted); 57 61 transition: color 150ms ease; 58 62 } ··· 62 66 } 63 67 64 68 .nav-gh { 65 - --uno: "flex items-center"; 69 + --uno: 'flex items-center'; 66 70 } 67 71 68 72 @media (max-width: 760px) { 69 73 .nav-inner { 70 - --uno: "px-4 h-13"; 74 + --uno: 'px-4 h-13'; 71 75 } 72 76 73 77 .nav-links a:not(.nav-gh) { ··· 77 81 78 82 @media (max-width: 600px) { 79 83 .nav-left { 80 - --uno: "gap-2"; 84 + --uno: 'gap-2'; 81 85 } 82 86 83 87 .nav-logo { 84 - --uno: "size-7"; 88 + --uno: 'size-7'; 85 89 } 86 90 87 91 .nav-brand { 88 - --uno: "text-base"; 92 + --uno: 'text-base'; 89 93 } 90 94 } 91 95 </style>
+6 -6
apps/www/.vitepress/theme/components/IndexPage/PurposeSection.vue
··· 24 24 25 25 <style scoped> 26 26 .purpose { 27 - --uno: "px-8 py-18"; 27 + --uno: 'px-8 py-18'; 28 28 background: #0e0f10; 29 29 } 30 30 31 31 .purpose-inner { 32 - --uno: "max-w-5xl mx-auto grid gap-8 items-center"; 32 + --uno: 'max-w-5xl mx-auto grid gap-8 items-center'; 33 33 grid-template-columns: minmax(0, 1fr) auto; 34 34 } 35 35 ··· 38 38 } 39 39 40 40 .purpose-art { 41 - --uno: "self-end"; 41 + --uno: 'self-end'; 42 42 } 43 43 44 44 .purpose-art img { ··· 53 53 } 54 54 55 55 .purpose-title { 56 - --uno: "m-0 mb-5 font-600"; 56 + --uno: 'm-0 mb-5 font-600'; 57 57 color: var(--gb-fg); 58 58 font-size: clamp(30px, 4vw, 44px); 59 59 line-height: 1.08; ··· 69 69 } 70 70 71 71 .purpose-copy { 72 - --uno: "m-0 text-base"; 72 + --uno: 'm-0 text-base'; 73 73 color: var(--gb-fg-soft); 74 74 max-width: 860px; 75 75 line-height: 1.75; ··· 91 91 92 92 @media (max-width: 600px) { 93 93 .purpose { 94 - --uno: "px-5 py-14"; 94 + --uno: 'px-5 py-14'; 95 95 } 96 96 97 97 .purpose-heading {
+4 -8
apps/www/.vitepress/theme/components/IndexPage/features.ts
··· 4 4 { 5 5 id: 'sdk', 6 6 title: 'TypeScript SDK', 7 - desc: 8 - 'Write bots with a rich, typed SDK. Slash commands, prefix commands, embeds — all first-class.', 7 + desc: 'Write bots with a rich, typed SDK. Slash commands, prefix commands, embeds — all first-class.', 9 8 bg: '/monet02.jpg', 10 - snippetHtml: 11 - `<span class="ts-key">const</span> <span class="ts-var">ping</span> <span class="ts-op">=</span> <span class="ts-fn">slash</span><span class="ts-punc">(</span><span class="ts-punc">{</span> 9 + snippetHtml: `<span class="ts-key">const</span> <span class="ts-var">ping</span> <span class="ts-op">=</span> <span class="ts-fn">slash</span><span class="ts-punc">(</span><span class="ts-punc">{</span> 12 10 <span class="ts-prop">name</span><span class="ts-punc">:</span> <span class="ts-str">'ping'</span><span class="ts-punc">,</span> 13 11 <span class="ts-prop">description</span><span class="ts-punc">:</span> <span class="ts-str">'Pong'</span><span class="ts-punc">,</span> 14 12 <span class="ts-prop">handler</span><span class="ts-punc">:</span> <span class="ts-key">async</span> <span class="ts-punc">(</span><span class="ts-var">i</span><span class="ts-punc">)</span> <span class="ts-op">=&gt;</span> <span class="ts-var">i</span><span class="ts-punc">.</span><span class="ts-fn">reply</span><span class="ts-punc">(</span><span class="ts-punc">{</span> <span class="ts-prop">content</span><span class="ts-punc">:</span> <span class="ts-str">'Pong!'</span> <span class="ts-punc">}</span><span class="ts-punc">)</span> ··· 25 23 { 26 24 id: 'cli', 27 25 title: 'CLI Deploy', 28 - desc: 29 - 'One command to bundle and deploy your bot to any guild. No infra to manage, no containers to run.', 26 + desc: 'One command to bundle and deploy your bot to any guild. No infra to manage, no containers to run.', 30 27 bg: '/monet01.jpg' 31 28 }, 32 29 { 33 30 id: 'runtime', 34 31 title: 'Batteries Included', 35 - desc: 36 - 'Key-value storage, secrets management, sandboxing, and more — all built in, with more to come.', 32 + desc: 'Key-value storage, secrets management, sandboxing, and more — all built in, with more to come.', 37 33 bg: '/monet04.jpg', 38 34 snippetHtml: `<span class="ts-cmt">// kv</span> 39 35 <span class="ts-key">const</span> <span class="ts-var">guildKv</span> <span class="ts-op">=</span> <span class="ts-var">storage</span><span class="ts-punc">.</span><span class="ts-fn">kv</span><span class="ts-punc">(</span><span class="ts-str">'guild:847291053618249801'</span><span class="ts-punc">)</span>
+19 -71
apps/www/.vitepress/theme/style.css
··· 4 4 --vp-c-default-3: var(--vp-c-gray-3); 5 5 --vp-c-default-soft: var(--vp-c-gray-soft); 6 6 7 - --vp-c-brand-1: color-mix( 8 - in srgb, 9 - theme("colors.green.500") 55%, 10 - theme("colors.slate.200") 11 - ); 12 - --vp-c-brand-2: color-mix( 13 - in srgb, 14 - theme("colors.green.400") 55%, 15 - theme("colors.slate.100") 16 - ); 17 - --vp-c-brand-3: color-mix( 18 - in srgb, 19 - theme("colors.green.300") 60%, 20 - theme("colors.slate.50") 21 - ); 7 + --vp-c-brand-1: color-mix(in srgb, theme('colors.green.500') 55%, theme('colors.slate.200')); 8 + --vp-c-brand-2: color-mix(in srgb, theme('colors.green.400') 55%, theme('colors.slate.100')); 9 + --vp-c-brand-3: color-mix(in srgb, theme('colors.green.300') 60%, theme('colors.slate.50')); 22 10 --vp-c-brand-soft: color-mix( 23 11 in srgb, 24 - theme("colors.green.300") 22%, 25 - theme("colors.slate.100") 18%, 12 + theme('colors.green.300') 22%, 13 + theme('colors.slate.100') 18%, 26 14 transparent 27 15 ); 28 16 ··· 31 19 --vp-c-tip-3: var(--vp-c-brand-3); 32 20 --vp-c-tip-soft: var(--vp-c-brand-soft); 33 21 34 - --vp-c-warning-1: color-mix( 35 - in srgb, 36 - theme("colors.amber.500") 60%, 37 - theme("colors.slate.200") 38 - ); 39 - --vp-c-warning-2: color-mix( 40 - in srgb, 41 - theme("colors.amber.400") 60%, 42 - theme("colors.slate.100") 43 - ); 44 - --vp-c-warning-3: color-mix( 45 - in srgb, 46 - theme("colors.amber.300") 65%, 47 - theme("colors.slate.50") 48 - ); 22 + --vp-c-warning-1: color-mix(in srgb, theme('colors.amber.500') 60%, theme('colors.slate.200')); 23 + --vp-c-warning-2: color-mix(in srgb, theme('colors.amber.400') 60%, theme('colors.slate.100')); 24 + --vp-c-warning-3: color-mix(in srgb, theme('colors.amber.300') 65%, theme('colors.slate.50')); 49 25 --vp-c-warning-soft: color-mix( 50 26 in srgb, 51 - theme("colors.amber.300") 20%, 52 - theme("colors.slate.100") 18%, 27 + theme('colors.amber.300') 20%, 28 + theme('colors.slate.100') 18%, 53 29 transparent 54 30 ); 55 31 56 - --vp-c-danger-1: color-mix( 57 - in srgb, 58 - theme("colors.red.500") 60%, 59 - theme("colors.slate.200") 60 - ); 61 - --vp-c-danger-2: color-mix( 62 - in srgb, 63 - theme("colors.red.400") 60%, 64 - theme("colors.slate.100") 65 - ); 66 - --vp-c-danger-3: color-mix( 67 - in srgb, 68 - theme("colors.red.300") 65%, 69 - theme("colors.slate.50") 70 - ); 32 + --vp-c-danger-1: color-mix(in srgb, theme('colors.red.500') 60%, theme('colors.slate.200')); 33 + --vp-c-danger-2: color-mix(in srgb, theme('colors.red.400') 60%, theme('colors.slate.100')); 34 + --vp-c-danger-3: color-mix(in srgb, theme('colors.red.300') 65%, theme('colors.slate.50')); 71 35 --vp-c-danger-soft: color-mix( 72 36 in srgb, 73 - theme("colors.red.300") 20%, 74 - theme("colors.slate.100") 18%, 37 + theme('colors.red.300') 20%, 38 + theme('colors.slate.100') 18%, 75 39 transparent 76 40 ); 77 41 } ··· 100 64 --vp-home-hero-name-color: transparent; 101 65 --vp-home-hero-name-background: -webkit-linear-gradient( 102 66 120deg, 103 - color-mix( 104 - in srgb, 105 - theme("colors.emerald.400") 60%, 106 - theme("colors.slate.200") 107 - ) 30%, 108 - color-mix( 109 - in srgb, 110 - theme("colors.green.300") 55%, 111 - theme("colors.slate.100") 112 - ) 67 + color-mix(in srgb, theme('colors.emerald.400') 60%, theme('colors.slate.200')) 30%, 68 + color-mix(in srgb, theme('colors.green.300') 55%, theme('colors.slate.100')) 113 69 ); 114 70 115 71 --vp-home-hero-image-background-image: linear-gradient( 116 72 -45deg, 117 - color-mix( 118 - in srgb, 119 - theme("colors.emerald.300") 55%, 120 - theme("colors.slate.100") 121 - ) 50%, 122 - color-mix( 123 - in srgb, 124 - theme("colors.green.200") 55%, 125 - theme("colors.slate.50") 126 - ) 50% 73 + color-mix(in srgb, theme('colors.emerald.300') 55%, theme('colors.slate.100')) 50%, 74 + color-mix(in srgb, theme('colors.green.200') 55%, theme('colors.slate.50')) 50% 127 75 ); 128 76 --vp-home-hero-image-filter: blur(44px); 129 77 }
+1 -3
apps/www/docs/examples.md
··· 42 42 const echo = slash({ 43 43 name: 'echo', 44 44 description: 'Echo text', 45 - options: [ 46 - { name: 'text', description: 'Text to echo', type: 'string', required: true } 47 - ], 45 + options: [{ name: 'text', description: 'Text to echo', type: 'string', required: true }], 48 46 run: async (ctx) => { 49 47 const text = ctx.options.text as string 50 48 await ctx.reply({ content: text, ephemeral: true })
+9 -4
apps/www/docs/limitations.md
··· 34 34 **Duplicate execution on crash:** If the runtime crashes while a cron job is executing, the `is_running` flag is lost. On restart, the job may run again if it's due. Use `skipIfRunning: true` and design handlers to be idempotent where possible. 35 35 36 36 ```ts 37 - cron('daily-cleanup', '0 0 * * *', async () => { 38 - // This handler should be safe to run twice 39 - await cleanupOldMessages() 40 - }, { skipIfRunning: true }) 37 + cron( 38 + 'daily-cleanup', 39 + '0 0 * * *', 40 + async () => { 41 + // This handler should be safe to run twice 42 + await cleanupOldMessages() 43 + }, 44 + { skipIfRunning: true } 45 + ) 41 46 ``` 42 47 43 48 **Schedule drift:** If the runtime is down for an extended period, jobs won't "catch up" on missed executions. A job scheduled for midnight won't run at 2 AM if the bot was down at midnight — it will wait for the next midnight.
+9 -6
apps/www/docs/sdk.md
··· 80 80 const echo = slash({ 81 81 name: 'echo', 82 82 description: 'Echo your input', 83 - options: [ 84 - { name: 'text', description: 'Text to echo', type: 'string', required: true } 85 - ], 83 + options: [{ name: 'text', description: 'Text to echo', type: 'string', required: true }], 86 84 run: async (ctx) => { 87 85 const text = ctx.options.text as string 88 86 await ctx.reply({ content: text, ephemeral: true }) ··· 242 240 243 241 ```ts 244 242 // Skip execution if previous run is still active 245 - cron('long-task', '*/5 * * * *', async (ctx) => { 246 - await someLongRunningTask() 247 - }, { skipIfRunning: true }) 243 + cron( 244 + 'long-task', 245 + '*/5 * * * *', 246 + async (ctx) => { 247 + await someLongRunningTask() 248 + }, 249 + { skipIfRunning: true } 250 + ) 248 251 ``` 249 252 250 253 - `skipIfRunning`: If `true`, the job won't start a new execution if the previous one is still running. Default: `false`.
+10 -10
apps/www/package.json
··· 1 1 { 2 - "name": "@flora/www", 2 + "name": "@flora-internal/www", 3 3 "private": true, 4 4 "scripts": { 5 5 "dev": "vitepress dev", 6 6 "build": "vitepress build", 7 7 "preview": "vitepress preview" 8 8 }, 9 - "devDependencies": { 10 - "@iconify-json/lucide": "1.2.95", 11 - "@types/bun": "latest", 12 - "oxc-minify": "0.116.0", 13 - "sass": "^1.97.2", 14 - "typescript": "^5", 15 - "unocss": "^66.5.12", 16 - "wrangler": "^4.58.0" 17 - }, 18 9 "dependencies": { 19 10 "@vueuse/core": "^14.2.1", 20 11 "motion-v": "2.0.0", 21 12 "pasito": "0.1.3", 22 13 "vitepress": "2.0.0-alpha.16", 23 14 "vue": "^3.5.29" 15 + }, 16 + "devDependencies": { 17 + "@iconify-json/lucide": "1.2.95", 18 + "@types/node": "catalog:", 19 + "oxc-minify": "0.116.0", 20 + "sass": "^1.97.2", 21 + "typescript": "catalog:", 22 + "unocss": "^66.5.12", 23 + "wrangler": "^4.58.0" 24 24 } 25 25 }
+2 -2
apps/www/wrangler.jsonc
··· 4 4 "account_id": "e145778ed3aad11a3ecd703f78d797a4", 5 5 "compatibility_date": "2026-01-11", 6 6 "assets": { 7 - "directory": ".vitepress/dist", 8 - }, 7 + "directory": ".vitepress/dist" 8 + } 9 9 }
+7 -6
docker-compose.yaml
··· 17 17 networks: 18 18 - flora 19 19 healthcheck: 20 - test: [ 21 - 'CMD', 22 - 'node', 23 - '-e', 24 - "fetch('http://localhost:3001/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))", 25 - ] 20 + test: 21 + [ 22 + 'CMD', 23 + 'node', 24 + '-e', 25 + "fetch('http://localhost:3001/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" 26 + ] 26 27 interval: 30s 27 28 timeout: 5s 28 29 retries: 5
+2 -2
examples/basic/package.json
··· 1 1 { 2 2 "name": "@uwu/flora-example-basic", 3 - "type": "module", 4 3 "private": true, 4 + "type": "module", 5 5 "devDependencies": { 6 - "@uwu/flora-sdk": "latest" 6 + "@uwu/flora-sdk": "workspace:" 7 7 } 8 8 }
+1 -1
examples/basic/src/main.ts
··· 49 49 description: 'Increment the counter', 50 50 run: async (ctx) => { 51 51 const store = kv.store('counters') 52 - const current = parseInt(await store.get('main') || '0', 10) 52 + const current = parseInt((await store.get('main')) || '0', 10) 53 53 const newCount = current + 1 54 54 await store.set('main', String(newCount)) 55 55 await ctx.reply(`Count is now: ${newCount}`)
-61
flake.lock
··· 1 - { 2 - "nodes": { 3 - "flake-utils": { 4 - "inputs": { 5 - "systems": "systems" 6 - }, 7 - "locked": { 8 - "lastModified": 1731533236, 9 - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 10 - "owner": "numtide", 11 - "repo": "flake-utils", 12 - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 13 - "type": "github" 14 - }, 15 - "original": { 16 - "owner": "numtide", 17 - "repo": "flake-utils", 18 - "type": "github" 19 - } 20 - }, 21 - "nixpkgs": { 22 - "locked": { 23 - "lastModified": 1765186076, 24 - "narHash": "sha256-hM20uyap1a0M9d344I692r+ik4gTMyj60cQWO+hAYP8=", 25 - "owner": "NixOS", 26 - "repo": "nixpkgs", 27 - "rev": "addf7cf5f383a3101ecfba091b98d0a1263dc9b8", 28 - "type": "github" 29 - }, 30 - "original": { 31 - "owner": "NixOS", 32 - "ref": "nixos-unstable", 33 - "repo": "nixpkgs", 34 - "type": "github" 35 - } 36 - }, 37 - "root": { 38 - "inputs": { 39 - "flake-utils": "flake-utils", 40 - "nixpkgs": "nixpkgs" 41 - } 42 - }, 43 - "systems": { 44 - "locked": { 45 - "lastModified": 1681028828, 46 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 47 - "owner": "nix-systems", 48 - "repo": "default", 49 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 50 - "type": "github" 51 - }, 52 - "original": { 53 - "owner": "nix-systems", 54 - "repo": "default", 55 - "type": "github" 56 - } 57 - } 58 - }, 59 - "root": "root", 60 - "version": 7 61 - }
-24
flake.nix
··· 1 - { 2 - inputs = { 3 - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 4 - flake-utils.url = "github:numtide/flake-utils"; 5 - }; 6 - 7 - outputs = { self, nixpkgs, flake-utils }: 8 - flake-utils.lib.eachDefaultSystem (system: 9 - let 10 - pkgs = nixpkgs.legacyPackages.${system}; 11 - in 12 - { 13 - devShells.default = pkgs.mkShell { 14 - buildInputs = with pkgs; [ 15 - rustc 16 - cargo 17 - rustfmt 18 - clippy 19 - sqlx-cli 20 - ]; 21 - }; 22 - } 23 - ); 24 - }
-10
lefthook.yml
··· 1 - pre-commit: 2 - parallel: true 3 - commands: 4 - rustfmt: 5 - glob: '*.rs' 6 - run: cargo fmt 7 - stage_fixed: true 8 - dprint: 9 - run: bun format 10 - stage_fixed: true
+8 -15
package.json
··· 1 1 { 2 2 "name": "@flora-monorepo/flora", 3 3 "private": true, 4 - "workspaces": [ 5 - "sdk", 6 - "examples/*", 7 - "apps/*", 8 - "packages/*" 9 - ], 10 4 "scripts": { 11 - "format": "dprint fmt" 5 + "prepare": "vp config", 6 + "format": "cargo fmt && vp fmt", 7 + "ready": "vp fmt && vp lint && vp run test -r && vp run build -r" 12 8 }, 13 9 "devDependencies": { 14 10 "@uwu/flora-cli": "workspace:*", 15 - "@voidzero-dev/vite-plus-core": "0.1.11", 16 - "dprint": "0.51.1", 17 - "lefthook": "^2.0.15", 18 - "typescript": "^5.7.2", 19 - "vite-plus": "0.1.11", 20 - "vitest": "npm:@voidzero-dev/vite-plus-test@0.1.11", 21 - "vue-tsc": "3.2.4" 11 + "vite-plus": "catalog:" 12 + }, 13 + "engines": { 14 + "node": ">=22.12.0" 22 15 }, 23 - "packageManager": "pnpm@10.28.0" 16 + "packageManager": "pnpm@10.32.1" 24 17 }
+26 -8
packages/api-client/package.json
··· 2 2 "name": "@uwu/flora-api-client", 3 3 "version": "0.0.0", 4 4 "private": false, 5 + "description": "Flora OpenAPI API client.", 6 + "homepage": "https://github.com/uwu/flora/#readme", 7 + "bugs": { 8 + "url": "https://github.com/uwu/flora/issues" 9 + }, 10 + "license": "MIT", 11 + "author": "taskylizard", 12 + "repository": { 13 + "type": "git", 14 + "url": "git+https://github.com/uwu/flora.git" 15 + }, 16 + "files": [ 17 + "dist", 18 + "package.json" 19 + ], 5 20 "type": "module", 21 + "types": "./dist/index.d.ts", 6 22 "exports": { 7 23 ".": { 8 24 "types": "./dist/index.d.ts", 9 25 "default": "./dist/index.js" 10 26 } 11 27 }, 12 - "types": "./dist/index.d.ts", 13 - "files": [ 14 - "dist", 15 - "package.json" 16 - ], 17 28 "scripts": { 18 - "build": "tsdown", 29 + "build": "vp pack", 30 + "dev": "vp pack --watch", 31 + "test": "vp test", 32 + "typecheck": "tsgo --noEmit", 33 + "release": "bumpp", 34 + "prepublishOnly": "pnpm run build", 19 35 "generate:api": "openapi-typescript http://localhost:3000/api-docs/openapi.json -o src/generated/openapi-schema.ts" 20 36 }, 21 37 "dependencies": { ··· 23 39 }, 24 40 "devDependencies": { 25 41 "@typescript/native-preview": "catalog:", 42 + "bumpp": "^11.0.0", 26 43 "openapi-typescript": "^7.13.0", 27 - "tsdown": "^0.20.3", 28 - "typescript": "^5.9.3" 44 + "typescript": "catalog:", 45 + "vite-plus": "catalog:", 46 + "vitest": "catalog:" 29 47 } 30 48 }
+19
packages/api-client/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "esnext", 4 + "lib": ["es2023", "DOM"], 5 + "moduleDetection": "force", 6 + "module": "preserve", 7 + "moduleResolution": "bundler", 8 + "resolveJsonModule": true, 9 + "strict": true, 10 + "noUnusedLocals": true, 11 + "declaration": true, 12 + "emitDeclarationOnly": true, 13 + "esModuleInterop": true, 14 + "isolatedModules": true, 15 + "verbatimModuleSyntax": true, 16 + "skipLibCheck": true 17 + }, 18 + "include": ["src"] 19 + }
+4 -2
packages/api-client/tsdown.config.ts
··· 1 - import { defineConfig } from 'tsdown' 1 + import { defineConfig } from 'vite-plus/pack' 2 2 3 3 export default defineConfig({ 4 + dts: { 5 + tsgo: true 6 + }, 4 7 entry: ['src/index.ts'], 5 8 outDir: 'dist', 6 9 format: 'esm', 7 10 platform: 'neutral', 8 11 target: 'es2022', 9 - clean: true, 10 12 shims: false, 11 13 minify: false 12 14 })
+7
packages/api-client/vite.config.ts
··· 1 + import tsdownConfig from './tsdown.config.js' 2 + 3 + import { defineConfig } from 'vite-plus' 4 + 5 + export default defineConfig({ 6 + pack: tsdownConfig 7 + })
+20
packages/cli/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "esnext", 4 + "lib": ["es2023"], 5 + "moduleDetection": "force", 6 + "module": "preserve", 7 + "moduleResolution": "bundler", 8 + "resolveJsonModule": true, 9 + "types": ["node"], 10 + "strict": true, 11 + "noUnusedLocals": true, 12 + "declaration": true, 13 + "emitDeclarationOnly": true, 14 + "esModuleInterop": true, 15 + "isolatedModules": true, 16 + "verbatimModuleSyntax": true, 17 + "skipLibCheck": true 18 + }, 19 + "include": ["src"] 20 + }
+7
packages/cli/vite.config.ts
··· 1 + import tsdownConfig from './tsdown.config.js' 2 + 3 + import { defineConfig } from 'vite-plus' 4 + 5 + export default defineConfig({ 6 + pack: tsdownConfig 7 + })
+130
packages/runtime-dist/runtime_prelude.js
··· 1 + //#region src/runtime/normalize.ts 2 + function normalizeReply(message, payload) { 3 + if (payload?.interactionToken) return normalizeInteractionReply(message, payload) 4 + const base = { channelId: payload.channelId } 5 + const replyId = payload.id ?? payload.messageId 6 + if (typeof message === 'string') 7 + return { 8 + ...base, 9 + messageId: replyId, 10 + content: message 11 + } 12 + if (message && typeof message === 'object') { 13 + const normalized = { 14 + ...base, 15 + ...message 16 + } 17 + const explicitReplyTo = message.replyTo ?? message.replyTo 18 + if (explicitReplyTo === null) delete normalized.messageId 19 + else if (explicitReplyTo !== void 0) normalized.messageId = explicitReplyTo 20 + else if (replyId) normalized.messageId = replyId 21 + delete normalized.replyTo 22 + delete normalized.reply_to 23 + return normalized 24 + } 25 + return { 26 + ...base, 27 + messageId: replyId, 28 + content: String(message) 29 + } 30 + } 31 + function normalizeEdit(message, payload) { 32 + const messageId = payload.id ?? payload.messageId 33 + if (!messageId || !payload?.channelId) throw new Error('Message edit requires a message payload') 34 + const base = { 35 + channelId: payload.channelId, 36 + messageId 37 + } 38 + if (typeof message === 'string') 39 + return { 40 + ...base, 41 + content: message 42 + } 43 + if (message && typeof message === 'object') 44 + return { 45 + ...base, 46 + ...message 47 + } 48 + return { 49 + ...base, 50 + content: String(message) 51 + } 52 + } 53 + function normalizeInteractionReply(message, payload) { 54 + const base = { 55 + interactionId: payload.interactionId ?? payload.id, 56 + token: payload.interactionToken 57 + } 58 + if (typeof message === 'string') 59 + return { 60 + ...base, 61 + content: message 62 + } 63 + if (message && typeof message === 'object') { 64 + const normalized = { 65 + ...base, 66 + ...message 67 + } 68 + if (message.ephemeral !== void 0) normalized.ephemeral = message.ephemeral 69 + return normalized 70 + } 71 + return { 72 + ...base, 73 + content: String(message) 74 + } 75 + } 76 + //#endregion 77 + //#region src/runtime/index.ts 78 + const core = Deno.core 79 + globalThis.__floraHandlers = {} 80 + globalThis.secrets = { 81 + get(name) { 82 + return core.ops.op_secret_placeholder(name) 83 + } 84 + } 85 + globalThis.on = function on(event, handler) { 86 + if (!globalThis.__floraHandlers[event]) globalThis.__floraHandlers[event] = [] 87 + globalThis.__floraHandlers[event].push(handler) 88 + } 89 + globalThis.__floraDispatch = async function __floraDispatch(event, payload) { 90 + const handlers = globalThis.__floraHandlers[event] || [] 91 + for (const handler of handlers) 92 + await handler({ 93 + msg: payload, 94 + reply(message) { 95 + const options = normalizeReply(message, payload) 96 + if (options['interactionId'] && options['token']) 97 + return core.ops.op_send_interaction_response(options) 98 + return core.ops.op_send_message(options) 99 + }, 100 + edit(message) { 101 + const options = normalizeEdit(message, payload) 102 + return core.ops.op_edit_message(options) 103 + } 104 + }) 105 + } 106 + globalThis.console = { log: (...args) => core.ops.op_log(args) } 107 + globalThis.registerSlashCommands = function registerSlashCommands(commands) { 108 + if (!globalThis.__floraGuildId) return 109 + return core.ops.op_upsert_guild_commands({ 110 + guildId: globalThis.__floraGuildId, 111 + commands 112 + }) 113 + } 114 + const CRON_EVENT_PREFIX = '__cron:' 115 + globalThis.cron = function cron(name, cronExpr, handler, options) { 116 + if (typeof name !== 'string' || !name.length) 117 + throw new TypeError('cron name must be a non-empty string') 118 + if (typeof cronExpr !== 'string' || !cronExpr.length) 119 + throw new TypeError('cron expression must be a non-empty string') 120 + if (typeof handler !== 'function') throw new TypeError('cron handler must be a function') 121 + const eventName = CRON_EVENT_PREFIX + name 122 + if (!globalThis.__floraHandlers[eventName]) globalThis.__floraHandlers[eventName] = [] 123 + globalThis.__floraHandlers[eventName].push(handler) 124 + core.ops.op_register_cron({ 125 + name, 126 + expr: cronExpr, 127 + skipIfRunning: options?.skipIfRunning ?? false 128 + }) 129 + } 130 + //#endregion
+955
packages/runtime-dist/runtime_sdk_bundle.js
··· 1 + var flora = (function (exports) { 2 + Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }) 3 + //#region src/sdk/commands.ts 4 + function prefix(command) { 5 + return command 6 + } 7 + function slash(command) { 8 + return command 9 + } 10 + function getCreateBotState() { 11 + const state = globalThis.__floraCreateBotState 12 + if (state) return state 13 + const initialState = { initialized: false } 14 + globalThis.__floraCreateBotState = initialState 15 + return initialState 16 + } 17 + function createBot(options) { 18 + const state = getCreateBotState() 19 + if (state.initialized) { 20 + console.log('[flora/sdk] createBot called multiple times; skipping duplicate registration') 21 + return 22 + } 23 + state.initialized = true 24 + const prefix = options.prefix ?? '!' 25 + const commands = options.commands ?? options.prefixCommands ?? [] 26 + const slashCommands = options.slashCommands ?? [] 27 + on('messageCreate', async (ctx) => { 28 + if (!ctx.msg || !ctx.msg.content) return 29 + if (ctx.msg.author?.bot) return 30 + const content = ctx.msg.content.trim() 31 + if (!content.startsWith(prefix)) return 32 + const [commandName, ...args] = content.slice(prefix.length).trim().split(/\s+/) 33 + const command = commands.find((cmd) => cmd.name === commandName) 34 + if (!command) return 35 + await command.run({ 36 + ...ctx, 37 + args 38 + }) 39 + }) 40 + on('interactionCreate', async (ctx) => { 41 + if (!ctx.msg) return 42 + const command = slashCommands.find((cmd) => cmd.name === ctx.msg.commandName) 43 + if (!command) return 44 + if (command.subcommands && command.subcommands.length > 0) 45 + await handleSubcommand(ctx, command) 46 + else if (command.run) { 47 + const rawData = ctx.msg.data 48 + const options = flattenInteractionOptions(rawData?.options || []) 49 + await command.run({ 50 + ...ctx, 51 + options 52 + }) 53 + } 54 + }) 55 + if (slashCommands.length && typeof registerSlashCommands === 'function') { 56 + const flattenedCommands = flattenCommands(slashCommands) 57 + registerSlashCommands(flattenedCommands) 58 + } 59 + } 60 + function flattenCommands(commands) { 61 + const subcommands = globalThis.__floraSubcommands 62 + globalThis.__floraSubcommands = subcommands || {} 63 + return commands.map((cmd) => { 64 + if (cmd.subcommands && cmd.subcommands.length > 0) { 65 + const submap = {} 66 + cmd.subcommands.forEach((sub) => { 67 + submap[sub.name] = sub.run 68 + }) 69 + globalThis.__floraSubcommands[cmd.name] = submap 70 + return { 71 + name: cmd.name, 72 + description: cmd.description, 73 + options: cmd.subcommands.map((sub) => ({ 74 + name: sub.name, 75 + description: sub.description, 76 + type: 'subcommand', 77 + options: sub.options 78 + })) 79 + } 80 + } 81 + return { 82 + name: cmd.name, 83 + description: cmd.description, 84 + options: cmd.options 85 + } 86 + }) 87 + } 88 + async function handleSubcommand(ctx, command) { 89 + const rawData = ctx.msg.data 90 + if (!rawData?.options || !Array.isArray(rawData.options)) return 91 + const firstOption = rawData.options[0] 92 + if (!firstOption) return 93 + const subcommandName = firstOption.name 94 + const subcommandMap = globalThis.__floraSubcommands?.[command.name] 95 + if (!subcommandMap) return 96 + const subcommandHandler = subcommandMap[subcommandName] 97 + if (!subcommandHandler) return 98 + const flatOptions = flattenInteractionOptions(firstOption.options || []) 99 + await subcommandHandler({ 100 + ...ctx, 101 + options: flatOptions 102 + }) 103 + } 104 + function flattenInteractionOptions(options) { 105 + const result = {} 106 + for (const opt of options) 107 + if (opt.type === 1 || opt.type === 2) 108 + Object.assign(result, flattenInteractionOptions(opt.options || [])) 109 + else result[opt.name] = opt.value 110 + return result 111 + } 112 + //#endregion 113 + //#region src/generated.ts 114 + const ButtonStyle = { 115 + Primary: 1, 116 + Secondary: 2, 117 + Success: 3, 118 + Danger: 4 119 + } 120 + const ComponentType = { 121 + ActionRow: 1, 122 + Button: 2, 123 + StringSelect: 3, 124 + InputText: 4, 125 + UserSelect: 5, 126 + RoleSelect: 6, 127 + MentionableSelect: 7, 128 + ChannelSelect: 8, 129 + Section: 9, 130 + TextDisplay: 10, 131 + Thumbnail: 11, 132 + MediaGallery: 12, 133 + File: 13, 134 + Separator: 14, 135 + Container: 17, 136 + Label: 18, 137 + FileUpload: 19 138 + } 139 + const InputTextStyle = { 140 + Short: 1, 141 + Paragraph: 2 142 + } 143 + const MessageFlags = { 144 + CROSSPOSTED: 1, 145 + IS_CROSSPOST: 2, 146 + SUPPRESS_EMBEDS: 4, 147 + SOURCE_MESSAGE_DELETED: 8, 148 + URGENT: 16, 149 + HAS_THREAD: 32, 150 + EPHEMERAL: 64, 151 + LOADING: 128, 152 + FAILED_TO_MENTION_SOME_ROLES_IN_THREAD: 256, 153 + SUPPRESS_NOTIFICATIONS: 4096, 154 + IS_VOICE_MESSAGE: 8192, 155 + IS_COMPONENTS_V2: 32768 156 + } 157 + //#endregion 158 + //#region src/sdk/components.ts 159 + const isBuilder = (value) => typeof value?.toJSON === 'function' 160 + const resolveComponent = (value) => (isBuilder(value) ? value.toJSON() : value) 161 + var ActionRowBuilder = class { 162 + #components = [] 163 + addComponents(...components) { 164 + this.#components.push(...components) 165 + return this 166 + } 167 + setComponents(components) { 168 + this.#components = [...components] 169 + return this 170 + } 171 + toJSON() { 172 + return { 173 + type: ComponentType.ActionRow, 174 + components: this.#components.map(resolveComponent) 175 + } 176 + } 177 + } 178 + var ButtonBuilder = class { 179 + #data = { type: ComponentType.Button } 180 + setStyle(style) { 181 + this.#data.style = style 182 + return this 183 + } 184 + setCustomId(customId) { 185 + this.#data.custom_id = customId 186 + return this 187 + } 188 + setUrl(url) { 189 + this.#data.style = 5 190 + this.#data.url = url 191 + return this 192 + } 193 + setSkuId(skuId) { 194 + this.#data.style = 6 195 + this.#data.sku_id = skuId 196 + return this 197 + } 198 + setLabel(label) { 199 + this.#data.label = label 200 + return this 201 + } 202 + setEmoji(emoji) { 203 + this.#data.emoji = emoji 204 + return this 205 + } 206 + setDisabled(disabled = true) { 207 + this.#data.disabled = disabled 208 + return this 209 + } 210 + toJSON() { 211 + return { ...this.#data } 212 + } 213 + } 214 + var SelectMenuBuilderBase = class { 215 + data 216 + constructor(type, customId) { 217 + this.data = { 218 + type, 219 + custom_id: customId 220 + } 221 + } 222 + setCustomId(customId) { 223 + this.data.custom_id = customId 224 + return this 225 + } 226 + setPlaceholder(placeholder) { 227 + this.data.placeholder = placeholder 228 + return this 229 + } 230 + setMinValues(min) { 231 + this.data.min_values = min 232 + return this 233 + } 234 + setMaxValues(max) { 235 + this.data.max_values = max 236 + return this 237 + } 238 + setRequired(required = true) { 239 + this.data.required = required 240 + return this 241 + } 242 + setDisabled(disabled = true) { 243 + this.data.disabled = disabled 244 + return this 245 + } 246 + setChannelTypes(types) { 247 + this.data.channel_types = [...types] 248 + return this 249 + } 250 + setDefaultValues(values) { 251 + this.data.default_values = values.map((value) => ({ ...value })) 252 + return this 253 + } 254 + setDefaultUsers(ids) { 255 + this.data.default_users = [...ids] 256 + return this 257 + } 258 + setDefaultRoles(ids) { 259 + this.data.default_roles = [...ids] 260 + return this 261 + } 262 + setDefaultChannels(ids) { 263 + this.data.default_channels = [...ids] 264 + return this 265 + } 266 + addDefaultUser(id) { 267 + const current = this.data.default_users ?? [] 268 + this.data.default_users = [...current, id] 269 + return this 270 + } 271 + addDefaultRole(id) { 272 + const current = this.data.default_roles ?? [] 273 + this.data.default_roles = [...current, id] 274 + return this 275 + } 276 + addDefaultChannel(id) { 277 + const current = this.data.default_channels ?? [] 278 + this.data.default_channels = [...current, id] 279 + return this 280 + } 281 + addDefaultValue(id, type) { 282 + const current = this.data.default_values ?? [] 283 + this.data.default_values = [ 284 + ...current, 285 + { 286 + id, 287 + type 288 + } 289 + ] 290 + return this 291 + } 292 + toJSON() { 293 + return { ...this.data } 294 + } 295 + } 296 + var StringSelectMenuBuilder = class extends SelectMenuBuilderBase { 297 + constructor(customId) { 298 + super(ComponentType.StringSelect, customId) 299 + } 300 + setOptions(options) { 301 + this.data.options = options.map((option) => ({ ...option })) 302 + return this 303 + } 304 + addOptions(...options) { 305 + const current = this.data.options ?? [] 306 + this.data.options = [...current, ...options.map((option) => ({ ...option }))] 307 + return this 308 + } 309 + } 310 + var UserSelectMenuBuilder = class extends SelectMenuBuilderBase { 311 + constructor(customId) { 312 + super(ComponentType.UserSelect, customId) 313 + } 314 + } 315 + var RoleSelectMenuBuilder = class extends SelectMenuBuilderBase { 316 + constructor(customId) { 317 + super(ComponentType.RoleSelect, customId) 318 + } 319 + } 320 + var MentionableSelectMenuBuilder = class extends SelectMenuBuilderBase { 321 + constructor(customId) { 322 + super(ComponentType.MentionableSelect, customId) 323 + } 324 + } 325 + var ChannelSelectMenuBuilder = class extends SelectMenuBuilderBase { 326 + constructor(customId) { 327 + super(ComponentType.ChannelSelect, customId) 328 + } 329 + } 330 + var InputTextBuilder = class { 331 + #data 332 + constructor(customId) { 333 + this.#data = { 334 + type: ComponentType.InputText, 335 + custom_id: customId 336 + } 337 + } 338 + setCustomId(customId) { 339 + this.#data.custom_id = customId 340 + return this 341 + } 342 + setStyle(style) { 343 + this.#data.style = style 344 + return this 345 + } 346 + setMinLength(min) { 347 + this.#data.min_length = min 348 + return this 349 + } 350 + setMaxLength(max) { 351 + this.#data.max_length = max 352 + return this 353 + } 354 + setRequired(required = true) { 355 + this.#data.required = required 356 + return this 357 + } 358 + setValue(value) { 359 + this.#data.value = value 360 + return this 361 + } 362 + setPlaceholder(placeholder) { 363 + this.#data.placeholder = placeholder 364 + return this 365 + } 366 + toJSON() { 367 + return { ...this.#data } 368 + } 369 + } 370 + var TextDisplayBuilder = class { 371 + #data 372 + constructor(content) { 373 + this.#data = { 374 + type: ComponentType.TextDisplay, 375 + content 376 + } 377 + } 378 + setContent(content) { 379 + this.#data.content = content 380 + return this 381 + } 382 + toJSON() { 383 + return { ...this.#data } 384 + } 385 + } 386 + var ThumbnailBuilder = class { 387 + #data 388 + constructor(url) { 389 + this.#data = { 390 + type: ComponentType.Thumbnail, 391 + media: { url } 392 + } 393 + } 394 + setUrl(url) { 395 + this.#data.media = { url } 396 + return this 397 + } 398 + setDescription(description) { 399 + this.#data.description = description 400 + return this 401 + } 402 + setSpoiler(spoiler = true) { 403 + this.#data.spoiler = spoiler 404 + return this 405 + } 406 + toJSON() { 407 + return { ...this.#data } 408 + } 409 + } 410 + var SectionBuilder = class { 411 + #components = [] 412 + #accessory 413 + addComponents(...components) { 414 + this.#components.push(...components) 415 + return this 416 + } 417 + setComponents(components) { 418 + this.#components = [...components] 419 + return this 420 + } 421 + setAccessory(accessory) { 422 + this.#accessory = accessory 423 + return this 424 + } 425 + toJSON() { 426 + return { 427 + type: ComponentType.Section, 428 + components: this.#components.map(resolveComponent), 429 + accessory: this.#accessory ? resolveComponent(this.#accessory) : null 430 + } 431 + } 432 + } 433 + var MediaGalleryBuilder = class { 434 + #items = [] 435 + addItem(url, options) { 436 + const item = { 437 + media: { url }, 438 + description: options?.description, 439 + spoiler: options?.spoiler 440 + } 441 + this.#items.push(item) 442 + return this 443 + } 444 + setItems(items) { 445 + this.#items = items.map((item) => ({ 446 + ...item, 447 + media: { ...item.media } 448 + })) 449 + return this 450 + } 451 + toJSON() { 452 + return { 453 + type: ComponentType.MediaGallery, 454 + items: this.#items.map((item) => ({ 455 + ...item, 456 + media: { ...item.media } 457 + })) 458 + } 459 + } 460 + } 461 + var FileBuilder = class { 462 + #data 463 + constructor(url) { 464 + this.#data = { 465 + type: ComponentType.File, 466 + file: { url } 467 + } 468 + } 469 + setUrl(url) { 470 + this.#data.file = { url } 471 + return this 472 + } 473 + setSpoiler(spoiler = true) { 474 + this.#data.spoiler = spoiler 475 + return this 476 + } 477 + toJSON() { 478 + return { ...this.#data } 479 + } 480 + } 481 + var SeparatorBuilder = class { 482 + #data 483 + constructor(divider = true) { 484 + this.#data = { 485 + type: ComponentType.Separator, 486 + divider 487 + } 488 + } 489 + setDivider(divider = true) { 490 + this.#data.divider = divider 491 + return this 492 + } 493 + setSpacing(spacing) { 494 + this.#data.spacing = spacing 495 + return this 496 + } 497 + toJSON() { 498 + return { ...this.#data } 499 + } 500 + } 501 + var ContainerBuilder = class { 502 + #components = [] 503 + #accentColor 504 + #spoiler 505 + addComponents(...components) { 506 + this.#components.push(...components) 507 + return this 508 + } 509 + setComponents(components) { 510 + this.#components = [...components] 511 + return this 512 + } 513 + setAccentColor(color) { 514 + this.#accentColor = color 515 + return this 516 + } 517 + setSpoiler(spoiler = true) { 518 + this.#spoiler = spoiler 519 + return this 520 + } 521 + toJSON() { 522 + const data = { 523 + type: ComponentType.Container, 524 + components: this.#components.map(resolveComponent) 525 + } 526 + if (this.#accentColor !== void 0) data.accent_color = this.#accentColor 527 + if (this.#spoiler !== void 0) data.spoiler = this.#spoiler 528 + return data 529 + } 530 + } 531 + var LabelBuilder = class { 532 + #label 533 + #description 534 + #component 535 + constructor(label) { 536 + this.#label = label 537 + } 538 + setLabel(label) { 539 + this.#label = label 540 + return this 541 + } 542 + setDescription(description) { 543 + this.#description = description 544 + return this 545 + } 546 + setComponent(component) { 547 + this.#component = component 548 + return this 549 + } 550 + toJSON() { 551 + const data = { 552 + type: ComponentType.Label, 553 + label: this.#label, 554 + component: this.#component ? resolveComponent(this.#component) : null 555 + } 556 + if (this.#description !== void 0) data.description = this.#description 557 + return data 558 + } 559 + } 560 + var FileUploadBuilder = class { 561 + #data 562 + constructor(customId) { 563 + this.#data = { 564 + type: ComponentType.FileUpload, 565 + custom_id: customId 566 + } 567 + } 568 + setCustomId(customId) { 569 + this.#data.custom_id = customId 570 + return this 571 + } 572 + setMinValues(min) { 573 + this.#data.min_values = min 574 + return this 575 + } 576 + setMaxValues(max) { 577 + this.#data.max_values = max 578 + return this 579 + } 580 + setRequired(required = true) { 581 + this.#data.required = required 582 + return this 583 + } 584 + toJSON() { 585 + return { ...this.#data } 586 + } 587 + } 588 + const actionRow = () => new ActionRowBuilder() 589 + const button = () => new ButtonBuilder() 590 + const stringSelect = (customId) => new StringSelectMenuBuilder(customId) 591 + const userSelect = (customId) => new UserSelectMenuBuilder(customId) 592 + const roleSelect = (customId) => new RoleSelectMenuBuilder(customId) 593 + const mentionableSelect = (customId) => new MentionableSelectMenuBuilder(customId) 594 + const channelSelect = (customId) => new ChannelSelectMenuBuilder(customId) 595 + const inputText = (customId) => new InputTextBuilder(customId) 596 + const textDisplay = (content) => new TextDisplayBuilder(content) 597 + const thumbnail = (url) => new ThumbnailBuilder(url) 598 + const section = () => new SectionBuilder() 599 + const mediaGallery = () => new MediaGalleryBuilder() 600 + const file = (url) => new FileBuilder(url) 601 + const separator = (divider = true) => new SeparatorBuilder(divider) 602 + const container = () => new ContainerBuilder() 603 + const label = (labelText) => new LabelBuilder(labelText) 604 + const fileUpload = (customId) => new FileUploadBuilder(customId) 605 + const ButtonStyles = ButtonStyle 606 + const InputTextStyles = InputTextStyle 607 + //#endregion 608 + //#region src/sdk/embed.ts 609 + var EmbedBuilder = class { 610 + #embed 611 + constructor(initial = {}) { 612 + this.#embed = { ...initial } 613 + } 614 + setTitle(title) { 615 + this.#embed.title = title 616 + return this 617 + } 618 + setDescription(description) { 619 + this.#embed.description = description 620 + return this 621 + } 622 + setUrl(url) { 623 + this.#embed.url = url 624 + return this 625 + } 626 + setColor(color) { 627 + this.#embed.color = color 628 + return this 629 + } 630 + setTimestamp(timestamp) { 631 + this.#embed.timestamp = timestamp 632 + return this 633 + } 634 + setFooter(text, iconUrl) { 635 + this.#embed.footer = { 636 + text, 637 + iconUrl 638 + } 639 + return this 640 + } 641 + setImage(url) { 642 + this.#embed.image = { url } 643 + return this 644 + } 645 + setThumbnail(url) { 646 + this.#embed.thumbnail = { url } 647 + return this 648 + } 649 + setAuthor(name, options) { 650 + this.#embed.author = { 651 + name, 652 + ...options 653 + } 654 + return this 655 + } 656 + addField(name, value, inline = false) { 657 + const field = { 658 + name, 659 + value, 660 + inline 661 + } 662 + this.#embed.fields = [...(this.#embed.fields ?? []), field] 663 + return this 664 + } 665 + addFields(fields) { 666 + this.#embed.fields = [...(this.#embed.fields ?? []), ...fields] 667 + return this 668 + } 669 + setFields(fields) { 670 + this.#embed.fields = [...fields] 671 + return this 672 + } 673 + toJSON() { 674 + return { ...this.#embed } 675 + } 676 + } 677 + function embed(initial) { 678 + return new EmbedBuilder(initial) 679 + } 680 + //#endregion 681 + //#region src/sdk/helpers.ts 682 + function hasRole(ctx, roleId) { 683 + return ctx.msg.member?.roles?.includes(roleId) ?? false 684 + } 685 + function getSubcommand(ctx) { 686 + const rawData = ctx.msg.data 687 + if (!rawData?.options || !Array.isArray(rawData.options)) return void 0 688 + return rawData.options[0]?.name 689 + } 690 + function getSubcommandGroup(ctx) { 691 + const rawData = ctx.msg.data 692 + if (!rawData?.options || !Array.isArray(rawData.options)) return void 0 693 + const firstOption = rawData.options[0] 694 + if (!firstOption) return void 0 695 + if (firstOption.type === 2) return firstOption.name 696 + } 697 + //#endregion 698 + //#region src/sdk/kv.ts 699 + var KvStore = class { 700 + #storeName 701 + constructor(storeName) { 702 + this.#storeName = storeName 703 + } 704 + /** 705 + * Get a value from the store. 706 + * 707 + * @param key - The key to retrieve 708 + * @returns The value, or null if not found 709 + */ 710 + async get(key) { 711 + return await Deno.core.ops.op_kv_get(this.#storeName, key) 712 + } 713 + /** 714 + * Get a value from the store along with its metadata. 715 + * 716 + * @param key - The key to retrieve 717 + * @returns Object with value and optional metadata 718 + */ 719 + async getWithMetadata(key) { 720 + const result = await Deno.core.ops.op_kv_get_with_metadata(this.#storeName, key) 721 + if (result === null) return { value: null } 722 + const [value, metadata] = result 723 + return { 724 + value, 725 + metadata: metadata?.metadata 726 + } 727 + } 728 + /** 729 + * Set a value in the store. 730 + * 731 + * The value size is limited to 1MB. 732 + * 733 + * @param key - The key to set 734 + * @param value - The value to store (max 1MB) 735 + * @param options - Optional expiration (Unix timestamp) and metadata 736 + */ 737 + async set(key, value, options) { 738 + await Deno.core.ops.op_kv_set(this.#storeName, key, value, { 739 + expiration: options?.expiration ?? void 0, 740 + metadata: options?.metadata ?? void 0 741 + }) 742 + } 743 + /** 744 + * Update just the metadata for a key without changing the value. 745 + * 746 + * @param key - The key to update 747 + * @param metadata - The metadata to set, or null to remove metadata 748 + */ 749 + async updateMetadata(key, metadata) { 750 + await Deno.core.ops.op_kv_update_metadata(this.#storeName, key, metadata ?? void 0) 751 + } 752 + /** 753 + * Delete a key from the store. 754 + * 755 + * @param key - The key to delete 756 + */ 757 + async delete(key) { 758 + await Deno.core.ops.op_kv_delete(this.#storeName, key) 759 + } 760 + /** 761 + * List all keys in the store with cursor-based pagination. 762 + * 763 + * @param options - Optional prefix filter, limit (default 100, max 1000), and cursor for pagination 764 + * @returns Paginated result with keys, list_complete flag, and cursor for next page 765 + */ 766 + async list(options) { 767 + return await Deno.core.ops.op_kv_list_keys( 768 + { 769 + prefix: options?.prefix ?? void 0, 770 + limit: options?.limit ?? void 0, 771 + cursor: options?.cursor ?? void 0 772 + }, 773 + this.#storeName 774 + ) 775 + } 776 + } 777 + function store(name) { 778 + return new KvStore(name) 779 + } 780 + const kv = { store } 781 + //#endregion 782 + //#region src/sdk/rest.ts 783 + const ops = Deno.core.ops 784 + /** 785 + * Lightweight REST bindings over core ops. 786 + * Errors include a `code` field (e.g. DISCORD_RATE_LIMITED). 787 + */ 788 + const rest = { 789 + sendMessage: (args) => ops.op_send_message(args), 790 + editMessage: (args) => ops.op_edit_message(args), 791 + deleteMessage: (args) => ops.op_delete_message(args), 792 + bulkDeleteMessages: (args) => ops.op_bulk_delete_messages(args), 793 + pinMessage: (args) => ops.op_pin_message(args), 794 + unpinMessage: (args) => ops.op_unpin_message(args), 795 + crosspostMessage: (args) => ops.op_crosspost_message(args), 796 + fetchMessage: (args) => ops.op_fetch_message(args), 797 + fetchMessages: (args) => ops.op_fetch_messages(args), 798 + addReaction: (args) => ops.op_add_reaction(args), 799 + removeReaction: (args) => ops.op_remove_reaction(args), 800 + clearReactions: (args) => ops.op_clear_reactions(args), 801 + sendInteractionResponse: (args) => ops.op_send_interaction_response(args), 802 + deferInteractionResponse: (args) => ops.op_defer_interaction_response(args), 803 + updateInteractionResponse: (args) => ops.op_update_interaction_response(args), 804 + editOriginalInteractionResponse: (args) => ops.op_edit_original_interaction_response(args), 805 + deleteOriginalInteractionResponse: (args) => ops.op_delete_original_interaction_response(args), 806 + createFollowupMessage: (args) => ops.op_create_followup_message(args), 807 + editFollowupMessage: (args) => ops.op_edit_followup_message(args), 808 + deleteFollowupMessage: (args) => ops.op_delete_followup_message(args), 809 + upsertGuildCommands: (args) => ops.op_upsert_guild_commands(args), 810 + createGuildCommand: (args) => ops.op_create_guild_command(args), 811 + editGuildCommand: (args) => ops.op_edit_guild_command(args), 812 + deleteGuildCommand: (args) => ops.op_delete_guild_command(args), 813 + getGuildCommands: (args) => ops.op_get_guild_commands(args), 814 + getGuildCommand: (args) => ops.op_get_guild_command(args), 815 + editGuildCommandPermissions: (args) => ops.op_edit_guild_command_permissions(args), 816 + getGuildCommandsPermissions: (args) => ops.op_get_guild_commands_permissions(args), 817 + getGuildCommandPermissions: (args) => ops.op_get_guild_command_permissions(args), 818 + kickMember: (args) => ops.op_kick_member(args), 819 + banMember: (args) => ops.op_ban_member(args), 820 + unbanMember: (args) => ops.op_unban_member(args), 821 + addMemberRole: (args) => ops.op_add_member_role(args), 822 + removeMemberRole: (args) => ops.op_remove_member_role(args), 823 + editMember: (args) => ops.op_edit_member(args), 824 + editCurrentMember: (args) => ops.op_edit_current_member(args), 825 + createChannel: (args) => ops.op_create_channel(args), 826 + editChannel: (args) => ops.op_edit_channel(args), 827 + deleteChannel: (args) => ops.op_delete_channel(args), 828 + createThread: (args) => ops.op_create_thread(args), 829 + createThreadFromMessage: (args) => ops.op_create_thread_from_message(args), 830 + joinThread: (args) => ops.op_join_thread(args), 831 + leaveThread: (args) => ops.op_leave_thread(args), 832 + addThreadMember: (args) => ops.op_add_thread_member(args), 833 + removeThreadMember: (args) => ops.op_remove_thread_member(args), 834 + executeWebhook: (args) => ops.op_execute_webhook(args), 835 + editWebhook: (args) => ops.op_edit_webhook(args), 836 + deleteWebhook: (args) => ops.op_delete_webhook(args) 837 + } 838 + //#endregion 839 + exports.ActionRowBuilder = ActionRowBuilder 840 + exports.ButtonBuilder = ButtonBuilder 841 + exports.ButtonStyle = ButtonStyle 842 + exports.ButtonStyles = ButtonStyles 843 + exports.ChannelSelectMenuBuilder = ChannelSelectMenuBuilder 844 + exports.ComponentType = ComponentType 845 + exports.ContainerBuilder = ContainerBuilder 846 + exports.EmbedBuilder = EmbedBuilder 847 + exports.FileBuilder = FileBuilder 848 + exports.FileUploadBuilder = FileUploadBuilder 849 + exports.InputTextBuilder = InputTextBuilder 850 + exports.InputTextStyle = InputTextStyle 851 + exports.InputTextStyles = InputTextStyles 852 + exports.KvStore = KvStore 853 + exports.LabelBuilder = LabelBuilder 854 + exports.MediaGalleryBuilder = MediaGalleryBuilder 855 + exports.MentionableSelectMenuBuilder = MentionableSelectMenuBuilder 856 + exports.MessageFlags = MessageFlags 857 + exports.RoleSelectMenuBuilder = RoleSelectMenuBuilder 858 + exports.SectionBuilder = SectionBuilder 859 + exports.SelectMenuBuilderBase = SelectMenuBuilderBase 860 + exports.SeparatorBuilder = SeparatorBuilder 861 + exports.StringSelectMenuBuilder = StringSelectMenuBuilder 862 + exports.TextDisplayBuilder = TextDisplayBuilder 863 + exports.ThumbnailBuilder = ThumbnailBuilder 864 + exports.UserSelectMenuBuilder = UserSelectMenuBuilder 865 + exports.actionRow = actionRow 866 + exports.button = button 867 + exports.channelSelect = channelSelect 868 + exports.container = container 869 + exports.createBot = createBot 870 + exports.embed = embed 871 + exports.file = file 872 + exports.fileUpload = fileUpload 873 + exports.flattenCommands = flattenCommands 874 + exports.flattenInteractionOptions = flattenInteractionOptions 875 + exports.getSubcommand = getSubcommand 876 + exports.getSubcommandGroup = getSubcommandGroup 877 + exports.handleSubcommand = handleSubcommand 878 + exports.hasRole = hasRole 879 + exports.inputText = inputText 880 + exports.kv = kv 881 + exports.label = label 882 + exports.mediaGallery = mediaGallery 883 + exports.mentionableSelect = mentionableSelect 884 + exports.prefix = prefix 885 + exports.rest = rest 886 + exports.roleSelect = roleSelect 887 + exports.section = section 888 + exports.separator = separator 889 + exports.slash = slash 890 + exports.store = store 891 + exports.stringSelect = stringSelect 892 + exports.textDisplay = textDisplay 893 + exports.thumbnail = thumbnail 894 + exports.userSelect = userSelect 895 + return exports 896 + })({}) 897 + ;(function (global) { 898 + if (!global.flora) return 899 + global.actionRow = global.flora.actionRow 900 + global.ActionRowBuilder = global.flora.ActionRowBuilder 901 + global.button = global.flora.button 902 + global.ButtonBuilder = global.flora.ButtonBuilder 903 + global.ButtonStyle = global.flora.ButtonStyle 904 + global.ButtonStyles = global.flora.ButtonStyles 905 + global.channelSelect = global.flora.channelSelect 906 + global.ChannelSelectMenuBuilder = global.flora.ChannelSelectMenuBuilder 907 + global.ComponentType = global.flora.ComponentType 908 + global.container = global.flora.container 909 + global.ContainerBuilder = global.flora.ContainerBuilder 910 + global.createBot = global.flora.createBot 911 + global.embed = global.flora.embed 912 + global.EmbedBuilder = global.flora.EmbedBuilder 913 + global.file = global.flora.file 914 + global.FileBuilder = global.flora.FileBuilder 915 + global.fileUpload = global.flora.fileUpload 916 + global.FileUploadBuilder = global.flora.FileUploadBuilder 917 + global.flattenCommands = global.flora.flattenCommands 918 + global.flattenInteractionOptions = global.flora.flattenInteractionOptions 919 + global.getSubcommand = global.flora.getSubcommand 920 + global.getSubcommandGroup = global.flora.getSubcommandGroup 921 + global.handleSubcommand = global.flora.handleSubcommand 922 + global.hasRole = global.flora.hasRole 923 + global.inputText = global.flora.inputText 924 + global.InputTextBuilder = global.flora.InputTextBuilder 925 + global.InputTextStyle = global.flora.InputTextStyle 926 + global.InputTextStyles = global.flora.InputTextStyles 927 + global.kv = global.flora.kv 928 + global.KvStore = global.flora.KvStore 929 + global.label = global.flora.label 930 + global.LabelBuilder = global.flora.LabelBuilder 931 + global.mediaGallery = global.flora.mediaGallery 932 + global.MediaGalleryBuilder = global.flora.MediaGalleryBuilder 933 + global.mentionableSelect = global.flora.mentionableSelect 934 + global.MentionableSelectMenuBuilder = global.flora.MentionableSelectMenuBuilder 935 + global.MessageFlags = global.flora.MessageFlags 936 + global.prefix = global.flora.prefix 937 + global.rest = global.flora.rest 938 + global.roleSelect = global.flora.roleSelect 939 + global.RoleSelectMenuBuilder = global.flora.RoleSelectMenuBuilder 940 + global.section = global.flora.section 941 + global.SectionBuilder = global.flora.SectionBuilder 942 + global.SelectMenuBuilderBase = global.flora.SelectMenuBuilderBase 943 + global.separator = global.flora.separator 944 + global.SeparatorBuilder = global.flora.SeparatorBuilder 945 + global.slash = global.flora.slash 946 + global.store = global.flora.store 947 + global.stringSelect = global.flora.stringSelect 948 + global.StringSelectMenuBuilder = global.flora.StringSelectMenuBuilder 949 + global.textDisplay = global.flora.textDisplay 950 + global.TextDisplayBuilder = global.flora.TextDisplayBuilder 951 + global.thumbnail = global.flora.thumbnail 952 + global.ThumbnailBuilder = global.flora.ThumbnailBuilder 953 + global.userSelect = global.flora.userSelect 954 + global.UserSelectMenuBuilder = global.flora.UserSelectMenuBuilder 955 + })(globalThis)
+1
packages/sdk/README.md
··· 1 + Flora's SDK API types. These are just ambient-scoped types, available globally. Subject to change.
+1350
packages/sdk/pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + catalogs: 8 + default: 9 + '@typescript/native-preview': 10 + specifier: ^7.0.0-dev.20260105.1 11 + version: 7.0.0-dev.20260306.1 12 + 13 + overrides: 14 + vite: npm:@voidzero-dev/vite-plus-core@0.1.11 15 + vitest: npm:@voidzero-dev/vite-plus-test@0.1.11 16 + 17 + importers: 18 + .: 19 + devDependencies: 20 + '@types/bun': 21 + specifier: latest 22 + version: 1.3.10 23 + '@typescript/native-preview': 24 + specifier: 'catalog:' 25 + version: 7.0.0-dev.20260306.1 26 + rolldown: 27 + specifier: ^1.0.0-beta.53 28 + version: 1.0.0-rc.7 29 + typescript: 30 + specifier: ^5.9.3 31 + version: 5.9.3 32 + vitest: 33 + specifier: npm:@voidzero-dev/vite-plus-test@0.1.11 34 + version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.3.5)(typescript@5.9.3)(vite@8.0.0(@types/node@25.3.5))' 35 + 36 + packages: 37 + '@emnapi/core@1.8.1': 38 + resolution: { 39 + integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==, 40 + } 41 + 42 + '@emnapi/runtime@1.8.1': 43 + resolution: { 44 + integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==, 45 + } 46 + 47 + '@emnapi/wasi-threads@1.1.0': 48 + resolution: { 49 + integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==, 50 + } 51 + 52 + '@napi-rs/wasm-runtime@1.1.1': 53 + resolution: { 54 + integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==, 55 + } 56 + 57 + '@oxc-project/runtime@0.115.0': 58 + resolution: { 59 + integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==, 60 + } 61 + engines: { node: ^20.19.0 || >=22.12.0 } 62 + 63 + '@oxc-project/types@0.115.0': 64 + resolution: { 65 + integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==, 66 + } 67 + 68 + '@polka/url@1.0.0-next.29': 69 + resolution: { 70 + integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, 71 + } 72 + 73 + '@rolldown/binding-android-arm64@1.0.0-rc.7': 74 + resolution: { 75 + integrity: sha512-/uadfNUaMLFFBGvcIOiq8NnlhvTZTjOyybJaJnhGxD0n9k5vZRJfTaitH5GHnbwmc6T2PC+ZpS1FQH+vXyS/UA==, 76 + } 77 + engines: { node: ^20.19.0 || >=22.12.0 } 78 + cpu: [arm64] 79 + os: [android] 80 + 81 + '@rolldown/binding-android-arm64@1.0.0-rc.9': 82 + resolution: { 83 + integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==, 84 + } 85 + engines: { node: ^20.19.0 || >=22.12.0 } 86 + cpu: [arm64] 87 + os: [android] 88 + 89 + '@rolldown/binding-darwin-arm64@1.0.0-rc.7': 90 + resolution: { 91 + integrity: sha512-zokYr1KgRn0hRA89dmgtPj/BmKp9DxgrfAJvOEFfXa8nfYWW2nmgiYIBGpSIAJrEg7Qc/Qznovy6xYwmKh0M8g==, 92 + } 93 + engines: { node: ^20.19.0 || >=22.12.0 } 94 + cpu: [arm64] 95 + os: [darwin] 96 + 97 + '@rolldown/binding-darwin-arm64@1.0.0-rc.9': 98 + resolution: { 99 + integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==, 100 + } 101 + engines: { node: ^20.19.0 || >=22.12.0 } 102 + cpu: [arm64] 103 + os: [darwin] 104 + 105 + '@rolldown/binding-darwin-x64@1.0.0-rc.7': 106 + resolution: { 107 + integrity: sha512-eZFjbmrapCBVgMmuLALH3pmQQQStHFuRhsFceJHk6KISW8CkI2e9OPLp9V4qXksrySQcD8XM8fpvGLs5l5C7LQ==, 108 + } 109 + engines: { node: ^20.19.0 || >=22.12.0 } 110 + cpu: [x64] 111 + os: [darwin] 112 + 113 + '@rolldown/binding-darwin-x64@1.0.0-rc.9': 114 + resolution: { 115 + integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==, 116 + } 117 + engines: { node: ^20.19.0 || >=22.12.0 } 118 + cpu: [x64] 119 + os: [darwin] 120 + 121 + '@rolldown/binding-freebsd-x64@1.0.0-rc.7': 122 + resolution: { 123 + integrity: sha512-xjMrh8Dmu2DNwdY6DZsrF6YPGeesc3PaTlkh8v9cqmkSCNeTxnhX3ErhVnuv1j3n8t2IuuhQIwM9eZDINNEt5Q==, 124 + } 125 + engines: { node: ^20.19.0 || >=22.12.0 } 126 + cpu: [x64] 127 + os: [freebsd] 128 + 129 + '@rolldown/binding-freebsd-x64@1.0.0-rc.9': 130 + resolution: { 131 + integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==, 132 + } 133 + engines: { node: ^20.19.0 || >=22.12.0 } 134 + cpu: [x64] 135 + os: [freebsd] 136 + 137 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': 138 + resolution: { 139 + integrity: sha512-mOvftrHiXg4/xFdxJY3T9Wl1/zDAOSlMN8z9an2bXsCwuvv3RdyhYbSMZDuDO52S04w9z7+cBd90lvQSPTAQtw==, 140 + } 141 + engines: { node: ^20.19.0 || >=22.12.0 } 142 + cpu: [arm] 143 + os: [linux] 144 + 145 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': 146 + resolution: { 147 + integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==, 148 + } 149 + engines: { node: ^20.19.0 || >=22.12.0 } 150 + cpu: [arm] 151 + os: [linux] 152 + 153 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': 154 + resolution: { 155 + integrity: sha512-TuUkeuEEPRyXMBbJ86NRhAiPNezxHW8merl3Om2HASA9Pl1rI+VZcTtsVQ6v/P0MDIFpSl0k0+tUUze9HIXyEw==, 156 + } 157 + engines: { node: ^20.19.0 || >=22.12.0 } 158 + cpu: [arm64] 159 + os: [linux] 160 + 161 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': 162 + resolution: { 163 + integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==, 164 + } 165 + engines: { node: ^20.19.0 || >=22.12.0 } 166 + cpu: [arm64] 167 + os: [linux] 168 + 169 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': 170 + resolution: { 171 + integrity: sha512-G43ZElEvaby+YSOgrXfBgpeQv42LdS0ivFFYQufk2tBDWeBfzE/+ob5DmO8Izbyn4Y8k6GgLF11jFDYNnmU/3w==, 172 + } 173 + engines: { node: ^20.19.0 || >=22.12.0 } 174 + cpu: [arm64] 175 + os: [linux] 176 + 177 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': 178 + resolution: { 179 + integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==, 180 + } 181 + engines: { node: ^20.19.0 || >=22.12.0 } 182 + cpu: [arm64] 183 + os: [linux] 184 + 185 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': 186 + resolution: { 187 + integrity: sha512-Y48ShVxGE2zUTt0A0PR3grCLNxW4DWtAfe5lxf6L3uYEQujwo/LGuRogMsAtOJeYLCPTJo2i714LOdnK34cHpw==, 188 + } 189 + engines: { node: ^20.19.0 || >=22.12.0 } 190 + cpu: [ppc64] 191 + os: [linux] 192 + 193 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': 194 + resolution: { 195 + integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==, 196 + } 197 + engines: { node: ^20.19.0 || >=22.12.0 } 198 + cpu: [ppc64] 199 + os: [linux] 200 + 201 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': 202 + resolution: { 203 + integrity: sha512-KU5DUYvX3qI8/TX6D3RA4awXi4Ge/1+M6Jqv7kRiUndpqoVGgD765xhV3Q6QvtABnYjLJenrWDl3S1B5U56ixA==, 204 + } 205 + engines: { node: ^20.19.0 || >=22.12.0 } 206 + cpu: [s390x] 207 + os: [linux] 208 + 209 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': 210 + resolution: { 211 + integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==, 212 + } 213 + engines: { node: ^20.19.0 || >=22.12.0 } 214 + cpu: [s390x] 215 + os: [linux] 216 + 217 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': 218 + resolution: { 219 + integrity: sha512-1THb6FdBkAEL12zvUue2bmK4W1+P+tz8Pgu5uEzq+xrtYa3iBzmmKNlyfUzCFNCqsPd8WJEQrYdLcw4iMW4AVw==, 220 + } 221 + engines: { node: ^20.19.0 || >=22.12.0 } 222 + cpu: [x64] 223 + os: [linux] 224 + 225 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': 226 + resolution: { 227 + integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==, 228 + } 229 + engines: { node: ^20.19.0 || >=22.12.0 } 230 + cpu: [x64] 231 + os: [linux] 232 + 233 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': 234 + resolution: { 235 + integrity: sha512-12o73atFNWDgYnLyA52QEUn9AH8pHIe12W28cmqjyHt4bIEYRzMICvYVCPa2IQm6DJBvCBrEhD9K+ct4wr2hwg==, 236 + } 237 + engines: { node: ^20.19.0 || >=22.12.0 } 238 + cpu: [x64] 239 + os: [linux] 240 + 241 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': 242 + resolution: { 243 + integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==, 244 + } 245 + engines: { node: ^20.19.0 || >=22.12.0 } 246 + cpu: [x64] 247 + os: [linux] 248 + 249 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': 250 + resolution: { 251 + integrity: sha512-+uUgGwvuUCXl894MTsmTS2J0BnCZccFsmzV7y1jFxW5pTSxkuwL5agyPuDvDOztPeS6RrdqWkn7sT0jRd0ECkg==, 252 + } 253 + engines: { node: ^20.19.0 || >=22.12.0 } 254 + cpu: [arm64] 255 + os: [openharmony] 256 + 257 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': 258 + resolution: { 259 + integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==, 260 + } 261 + engines: { node: ^20.19.0 || >=22.12.0 } 262 + cpu: [arm64] 263 + os: [openharmony] 264 + 265 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': 266 + resolution: { 267 + integrity: sha512-53p2L/NSy21UiFOqUGlC11kJDZS2Nx2GJRz1QvbkXovypA3cOHbsyZHLkV72JsLSbiEQe+kg4tndUhSiC31UEA==, 268 + } 269 + engines: { node: '>=14.0.0' } 270 + cpu: [wasm32] 271 + 272 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': 273 + resolution: { 274 + integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==, 275 + } 276 + engines: { node: '>=14.0.0' } 277 + cpu: [wasm32] 278 + 279 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': 280 + resolution: { 281 + integrity: sha512-K6svNRljO6QrL6VTKxwh4yThhlR9DT/tK0XpaFQMnJwwQKng+NYcVEtUkAM0WsoiZHw+Hnh3DGnn3taf/pNYGg==, 282 + } 283 + engines: { node: ^20.19.0 || >=22.12.0 } 284 + cpu: [arm64] 285 + os: [win32] 286 + 287 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': 288 + resolution: { 289 + integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==, 290 + } 291 + engines: { node: ^20.19.0 || >=22.12.0 } 292 + cpu: [arm64] 293 + os: [win32] 294 + 295 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': 296 + resolution: { 297 + integrity: sha512-3ZJBT47VWLKVKIyvHhUSUgVwHzzZW761YAIkM3tOT+8ZTjFVp0acCM0Y2Z2j3jCl+XYi2d9y2uEWQ8H0PvvpPw==, 298 + } 299 + engines: { node: ^20.19.0 || >=22.12.0 } 300 + cpu: [x64] 301 + os: [win32] 302 + 303 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': 304 + resolution: { 305 + integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==, 306 + } 307 + engines: { node: ^20.19.0 || >=22.12.0 } 308 + cpu: [x64] 309 + os: [win32] 310 + 311 + '@rolldown/pluginutils@1.0.0-rc.7': 312 + resolution: { 313 + integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==, 314 + } 315 + 316 + '@rolldown/pluginutils@1.0.0-rc.9': 317 + resolution: { 318 + integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==, 319 + } 320 + 321 + '@standard-schema/spec@1.1.0': 322 + resolution: { 323 + integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, 324 + } 325 + 326 + '@tybys/wasm-util@0.10.1': 327 + resolution: { 328 + integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, 329 + } 330 + 331 + '@types/bun@1.3.10': 332 + resolution: { 333 + integrity: sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ==, 334 + } 335 + 336 + '@types/chai@5.2.3': 337 + resolution: { 338 + integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==, 339 + } 340 + 341 + '@types/deep-eql@4.0.2': 342 + resolution: { 343 + integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==, 344 + } 345 + 346 + '@types/node@25.3.5': 347 + resolution: { 348 + integrity: sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==, 349 + } 350 + 351 + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260306.1': 352 + resolution: { 353 + integrity: sha512-4vuh4VlPydMS/nymDzjJIKDk3dntnEEB5UzyJV9mM4kxF5+geFgJih1DTtZS3qVafhHLB3e4l8omtvGftMnb8g==, 354 + } 355 + cpu: [arm64] 356 + os: [darwin] 357 + 358 + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260306.1': 359 + resolution: { 360 + integrity: sha512-qxYfv0aM4KCZPEe584KIjT5sO4uR+xdyuQXX5tXbnH1UoksIz7bvJ9KUgRloS/q/ww0f8UjPS2+27LnRA4y7ig==, 361 + } 362 + cpu: [x64] 363 + os: [darwin] 364 + 365 + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260306.1': 366 + resolution: { 367 + integrity: sha512-8G0BKvTkE+eKX1tSnyKeDaf3bWPWY7OI77SMipagCAyYi06v4gxx+IVE3Px7W7kLX2Wqp1MjWDXu2N76wfJtXQ==, 368 + } 369 + cpu: [arm64] 370 + os: [linux] 371 + 372 + '@typescript/native-preview-linux-arm@7.0.0-dev.20260306.1': 373 + resolution: { 374 + integrity: sha512-8gRAFx0ExDWHOmphl8mzBrSoGWnLWDU4VpxkPRsWqaJpHVbjr9Yk2QkuJNIaDmF6q44eJmW/huSiObmHTbZ1UQ==, 375 + } 376 + cpu: [arm] 377 + os: [linux] 378 + 379 + '@typescript/native-preview-linux-x64@7.0.0-dev.20260306.1': 380 + resolution: { 381 + integrity: sha512-rsJV3Z9J/zYCEtcqvm+WfLAml3i1OAyMEUn0hja7i8C0kzE+tXKXzsJ0+I1TrSU5O7hHvqlLTvueBoCoM4aL4g==, 382 + } 383 + cpu: [x64] 384 + os: [linux] 385 + 386 + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260306.1': 387 + resolution: { 388 + integrity: sha512-US1WsIu9IukaFzM+w8wt0fIAkmk2WtxeVuk8nkbrnH9S3ax39r0J4ikMNZSXEJE0VMxhXJoymzfWxhj3s9yW/Q==, 389 + } 390 + cpu: [arm64] 391 + os: [win32] 392 + 393 + '@typescript/native-preview-win32-x64@7.0.0-dev.20260306.1': 394 + resolution: { 395 + integrity: sha512-MlneT0RWS9Zdb8XoWvHsUgmnMJu6K3S0BXRu5ZgUYjcbQKlkz+Z87aUB8eX8qnDFd9csJcMp3+ZrgQ/LKVGP1g==, 396 + } 397 + cpu: [x64] 398 + os: [win32] 399 + 400 + '@typescript/native-preview@7.0.0-dev.20260306.1': 401 + resolution: { 402 + integrity: sha512-4m7cOjtKu+iLazWW5MuJuI2ZZMkQkS42+GxN6FVdja1nL0t47l1wpaTnzUa1Ny9Xa0opIJ7psPAMBKYAPKbCKA==, 403 + } 404 + hasBin: true 405 + 406 + '@voidzero-dev/vite-plus-core@0.1.11': 407 + resolution: { 408 + integrity: sha512-feyYRSg3u8acYNC1fF4EGfgYZm2efZB8YWTjz4NrU0Ulhlni1C6COMwHSDVpu9F4Jh+WcSsBWL3ZC1WvLa7jCw==, 409 + } 410 + engines: { node: ^20.19.0 || >=22.12.0 } 411 + peerDependencies: 412 + '@arethetypeswrong/core': ^0.18.1 413 + '@tsdown/css': 0.21.2 414 + '@tsdown/exe': 0.21.2 415 + '@types/node': ^20.19.0 || >=22.12.0 416 + '@vitejs/devtools': ^0.0.0-alpha.31 417 + esbuild: ^0.27.0 418 + jiti: '>=1.21.0' 419 + less: ^4.0.0 420 + publint: ^0.3.0 421 + sass: ^1.70.0 422 + sass-embedded: ^1.70.0 423 + stylus: '>=0.54.8' 424 + sugarss: ^5.0.0 425 + terser: ^5.16.0 426 + tsx: ^4.8.1 427 + typescript: ^5.0.0 428 + unplugin-unused: ^0.5.0 429 + yaml: ^2.4.2 430 + peerDependenciesMeta: 431 + '@arethetypeswrong/core': 432 + optional: true 433 + '@tsdown/css': 434 + optional: true 435 + '@tsdown/exe': 436 + optional: true 437 + '@types/node': 438 + optional: true 439 + '@vitejs/devtools': 440 + optional: true 441 + esbuild: 442 + optional: true 443 + jiti: 444 + optional: true 445 + less: 446 + optional: true 447 + publint: 448 + optional: true 449 + sass: 450 + optional: true 451 + sass-embedded: 452 + optional: true 453 + stylus: 454 + optional: true 455 + sugarss: 456 + optional: true 457 + terser: 458 + optional: true 459 + tsx: 460 + optional: true 461 + typescript: 462 + optional: true 463 + unplugin-unused: 464 + optional: true 465 + yaml: 466 + optional: true 467 + 468 + '@voidzero-dev/vite-plus-test@0.1.11': 469 + resolution: { 470 + integrity: sha512-3kBfi/LyPOGnLCmvYtgM5GZVAyiJiYjgdm9Fu9WLLl56zcSljj0TBG19eaKY6v/j2VJ+7o80n/A/MPz46lzMFA==, 471 + } 472 + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } 473 + peerDependencies: 474 + '@edge-runtime/vm': '*' 475 + '@opentelemetry/api': ^1.9.0 476 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 477 + '@vitest/ui': 4.1.0 478 + happy-dom: '*' 479 + jsdom: '*' 480 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 481 + peerDependenciesMeta: 482 + '@edge-runtime/vm': 483 + optional: true 484 + '@opentelemetry/api': 485 + optional: true 486 + '@types/node': 487 + optional: true 488 + '@vitest/ui': 489 + optional: true 490 + happy-dom: 491 + optional: true 492 + jsdom: 493 + optional: true 494 + 495 + assertion-error@2.0.1: 496 + resolution: { 497 + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, 498 + } 499 + engines: { node: '>=12' } 500 + 501 + bun-types@1.3.10: 502 + resolution: { 503 + integrity: sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg==, 504 + } 505 + 506 + detect-libc@2.1.2: 507 + resolution: { 508 + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, 509 + } 510 + engines: { node: '>=8' } 511 + 512 + es-module-lexer@1.7.0: 513 + resolution: { 514 + integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==, 515 + } 516 + 517 + fdir@6.5.0: 518 + resolution: { 519 + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, 520 + } 521 + engines: { node: '>=12.0.0' } 522 + peerDependencies: 523 + picomatch: ^3 || ^4 524 + peerDependenciesMeta: 525 + picomatch: 526 + optional: true 527 + 528 + fsevents@2.3.3: 529 + resolution: { 530 + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, 531 + } 532 + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } 533 + os: [darwin] 534 + 535 + lightningcss-android-arm64@1.31.1: 536 + resolution: { 537 + integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==, 538 + } 539 + engines: { node: '>= 12.0.0' } 540 + cpu: [arm64] 541 + os: [android] 542 + 543 + lightningcss-android-arm64@1.32.0: 544 + resolution: { 545 + integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==, 546 + } 547 + engines: { node: '>= 12.0.0' } 548 + cpu: [arm64] 549 + os: [android] 550 + 551 + lightningcss-darwin-arm64@1.31.1: 552 + resolution: { 553 + integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==, 554 + } 555 + engines: { node: '>= 12.0.0' } 556 + cpu: [arm64] 557 + os: [darwin] 558 + 559 + lightningcss-darwin-arm64@1.32.0: 560 + resolution: { 561 + integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==, 562 + } 563 + engines: { node: '>= 12.0.0' } 564 + cpu: [arm64] 565 + os: [darwin] 566 + 567 + lightningcss-darwin-x64@1.31.1: 568 + resolution: { 569 + integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==, 570 + } 571 + engines: { node: '>= 12.0.0' } 572 + cpu: [x64] 573 + os: [darwin] 574 + 575 + lightningcss-darwin-x64@1.32.0: 576 + resolution: { 577 + integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==, 578 + } 579 + engines: { node: '>= 12.0.0' } 580 + cpu: [x64] 581 + os: [darwin] 582 + 583 + lightningcss-freebsd-x64@1.31.1: 584 + resolution: { 585 + integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==, 586 + } 587 + engines: { node: '>= 12.0.0' } 588 + cpu: [x64] 589 + os: [freebsd] 590 + 591 + lightningcss-freebsd-x64@1.32.0: 592 + resolution: { 593 + integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==, 594 + } 595 + engines: { node: '>= 12.0.0' } 596 + cpu: [x64] 597 + os: [freebsd] 598 + 599 + lightningcss-linux-arm-gnueabihf@1.31.1: 600 + resolution: { 601 + integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==, 602 + } 603 + engines: { node: '>= 12.0.0' } 604 + cpu: [arm] 605 + os: [linux] 606 + 607 + lightningcss-linux-arm-gnueabihf@1.32.0: 608 + resolution: { 609 + integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==, 610 + } 611 + engines: { node: '>= 12.0.0' } 612 + cpu: [arm] 613 + os: [linux] 614 + 615 + lightningcss-linux-arm64-gnu@1.31.1: 616 + resolution: { 617 + integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==, 618 + } 619 + engines: { node: '>= 12.0.0' } 620 + cpu: [arm64] 621 + os: [linux] 622 + 623 + lightningcss-linux-arm64-gnu@1.32.0: 624 + resolution: { 625 + integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==, 626 + } 627 + engines: { node: '>= 12.0.0' } 628 + cpu: [arm64] 629 + os: [linux] 630 + 631 + lightningcss-linux-arm64-musl@1.31.1: 632 + resolution: { 633 + integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==, 634 + } 635 + engines: { node: '>= 12.0.0' } 636 + cpu: [arm64] 637 + os: [linux] 638 + 639 + lightningcss-linux-arm64-musl@1.32.0: 640 + resolution: { 641 + integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==, 642 + } 643 + engines: { node: '>= 12.0.0' } 644 + cpu: [arm64] 645 + os: [linux] 646 + 647 + lightningcss-linux-x64-gnu@1.31.1: 648 + resolution: { 649 + integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==, 650 + } 651 + engines: { node: '>= 12.0.0' } 652 + cpu: [x64] 653 + os: [linux] 654 + 655 + lightningcss-linux-x64-gnu@1.32.0: 656 + resolution: { 657 + integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==, 658 + } 659 + engines: { node: '>= 12.0.0' } 660 + cpu: [x64] 661 + os: [linux] 662 + 663 + lightningcss-linux-x64-musl@1.31.1: 664 + resolution: { 665 + integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==, 666 + } 667 + engines: { node: '>= 12.0.0' } 668 + cpu: [x64] 669 + os: [linux] 670 + 671 + lightningcss-linux-x64-musl@1.32.0: 672 + resolution: { 673 + integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==, 674 + } 675 + engines: { node: '>= 12.0.0' } 676 + cpu: [x64] 677 + os: [linux] 678 + 679 + lightningcss-win32-arm64-msvc@1.31.1: 680 + resolution: { 681 + integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==, 682 + } 683 + engines: { node: '>= 12.0.0' } 684 + cpu: [arm64] 685 + os: [win32] 686 + 687 + lightningcss-win32-arm64-msvc@1.32.0: 688 + resolution: { 689 + integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==, 690 + } 691 + engines: { node: '>= 12.0.0' } 692 + cpu: [arm64] 693 + os: [win32] 694 + 695 + lightningcss-win32-x64-msvc@1.31.1: 696 + resolution: { 697 + integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==, 698 + } 699 + engines: { node: '>= 12.0.0' } 700 + cpu: [x64] 701 + os: [win32] 702 + 703 + lightningcss-win32-x64-msvc@1.32.0: 704 + resolution: { 705 + integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==, 706 + } 707 + engines: { node: '>= 12.0.0' } 708 + cpu: [x64] 709 + os: [win32] 710 + 711 + lightningcss@1.31.1: 712 + resolution: { 713 + integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==, 714 + } 715 + engines: { node: '>= 12.0.0' } 716 + 717 + lightningcss@1.32.0: 718 + resolution: { 719 + integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==, 720 + } 721 + engines: { node: '>= 12.0.0' } 722 + 723 + mrmime@2.0.1: 724 + resolution: { 725 + integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, 726 + } 727 + engines: { node: '>=10' } 728 + 729 + nanoid@3.3.11: 730 + resolution: { 731 + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, 732 + } 733 + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } 734 + hasBin: true 735 + 736 + obug@2.1.1: 737 + resolution: { 738 + integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==, 739 + } 740 + 741 + picocolors@1.1.1: 742 + resolution: { 743 + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, 744 + } 745 + 746 + picomatch@4.0.3: 747 + resolution: { 748 + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, 749 + } 750 + engines: { node: '>=12' } 751 + 752 + pixelmatch@7.1.0: 753 + resolution: { 754 + integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==, 755 + } 756 + hasBin: true 757 + 758 + pngjs@7.0.0: 759 + resolution: { 760 + integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==, 761 + } 762 + engines: { node: '>=14.19.0' } 763 + 764 + postcss@8.5.8: 765 + resolution: { 766 + integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==, 767 + } 768 + engines: { node: ^10 || ^12 || >=14 } 769 + 770 + rolldown@1.0.0-rc.7: 771 + resolution: { 772 + integrity: sha512-5X0zEeQFzDpB3MqUWQZyO2TUQqP9VnT7CqXHF2laTFRy487+b6QZyotCazOySAuZLAvplCaOVsg1tVn/Zlmwfg==, 773 + } 774 + engines: { node: ^20.19.0 || >=22.12.0 } 775 + hasBin: true 776 + 777 + rolldown@1.0.0-rc.9: 778 + resolution: { 779 + integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==, 780 + } 781 + engines: { node: ^20.19.0 || >=22.12.0 } 782 + hasBin: true 783 + 784 + sirv@3.0.2: 785 + resolution: { 786 + integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==, 787 + } 788 + engines: { node: '>=18' } 789 + 790 + source-map-js@1.2.1: 791 + resolution: { 792 + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, 793 + } 794 + engines: { node: '>=0.10.0' } 795 + 796 + std-env@4.0.0: 797 + resolution: { 798 + integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==, 799 + } 800 + 801 + tinybench@2.9.0: 802 + resolution: { 803 + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, 804 + } 805 + 806 + tinyexec@1.0.2: 807 + resolution: { 808 + integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==, 809 + } 810 + engines: { node: '>=18' } 811 + 812 + tinyglobby@0.2.15: 813 + resolution: { 814 + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, 815 + } 816 + engines: { node: '>=12.0.0' } 817 + 818 + totalist@3.0.1: 819 + resolution: { 820 + integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, 821 + } 822 + engines: { node: '>=6' } 823 + 824 + tslib@2.8.1: 825 + resolution: { 826 + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, 827 + } 828 + 829 + typescript@5.9.3: 830 + resolution: { 831 + integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, 832 + } 833 + engines: { node: '>=14.17' } 834 + hasBin: true 835 + 836 + undici-types@7.18.2: 837 + resolution: { 838 + integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==, 839 + } 840 + 841 + vite@8.0.0: 842 + resolution: { 843 + integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==, 844 + } 845 + engines: { node: ^20.19.0 || >=22.12.0 } 846 + hasBin: true 847 + peerDependencies: 848 + '@types/node': ^20.19.0 || >=22.12.0 849 + '@vitejs/devtools': ^0.0.0-alpha.31 850 + esbuild: ^0.27.0 851 + jiti: '>=1.21.0' 852 + less: ^4.0.0 853 + sass: ^1.70.0 854 + sass-embedded: ^1.70.0 855 + stylus: '>=0.54.8' 856 + sugarss: ^5.0.0 857 + terser: ^5.16.0 858 + tsx: ^4.8.1 859 + yaml: ^2.4.2 860 + peerDependenciesMeta: 861 + '@types/node': 862 + optional: true 863 + '@vitejs/devtools': 864 + optional: true 865 + esbuild: 866 + optional: true 867 + jiti: 868 + optional: true 869 + less: 870 + optional: true 871 + sass: 872 + optional: true 873 + sass-embedded: 874 + optional: true 875 + stylus: 876 + optional: true 877 + sugarss: 878 + optional: true 879 + terser: 880 + optional: true 881 + tsx: 882 + optional: true 883 + yaml: 884 + optional: true 885 + 886 + ws@8.19.0: 887 + resolution: { 888 + integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==, 889 + } 890 + engines: { node: '>=10.0.0' } 891 + peerDependencies: 892 + bufferutil: ^4.0.1 893 + utf-8-validate: '>=5.0.2' 894 + peerDependenciesMeta: 895 + bufferutil: 896 + optional: true 897 + utf-8-validate: 898 + optional: true 899 + 900 + snapshots: 901 + '@emnapi/core@1.8.1': 902 + dependencies: 903 + '@emnapi/wasi-threads': 1.1.0 904 + tslib: 2.8.1 905 + optional: true 906 + 907 + '@emnapi/runtime@1.8.1': 908 + dependencies: 909 + tslib: 2.8.1 910 + optional: true 911 + 912 + '@emnapi/wasi-threads@1.1.0': 913 + dependencies: 914 + tslib: 2.8.1 915 + optional: true 916 + 917 + '@napi-rs/wasm-runtime@1.1.1': 918 + dependencies: 919 + '@emnapi/core': 1.8.1 920 + '@emnapi/runtime': 1.8.1 921 + '@tybys/wasm-util': 0.10.1 922 + optional: true 923 + 924 + '@oxc-project/runtime@0.115.0': {} 925 + 926 + '@oxc-project/types@0.115.0': {} 927 + 928 + '@polka/url@1.0.0-next.29': {} 929 + 930 + '@rolldown/binding-android-arm64@1.0.0-rc.7': 931 + optional: true 932 + 933 + '@rolldown/binding-android-arm64@1.0.0-rc.9': 934 + optional: true 935 + 936 + '@rolldown/binding-darwin-arm64@1.0.0-rc.7': 937 + optional: true 938 + 939 + '@rolldown/binding-darwin-arm64@1.0.0-rc.9': 940 + optional: true 941 + 942 + '@rolldown/binding-darwin-x64@1.0.0-rc.7': 943 + optional: true 944 + 945 + '@rolldown/binding-darwin-x64@1.0.0-rc.9': 946 + optional: true 947 + 948 + '@rolldown/binding-freebsd-x64@1.0.0-rc.7': 949 + optional: true 950 + 951 + '@rolldown/binding-freebsd-x64@1.0.0-rc.9': 952 + optional: true 953 + 954 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': 955 + optional: true 956 + 957 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': 958 + optional: true 959 + 960 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': 961 + optional: true 962 + 963 + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': 964 + optional: true 965 + 966 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': 967 + optional: true 968 + 969 + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': 970 + optional: true 971 + 972 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': 973 + optional: true 974 + 975 + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': 976 + optional: true 977 + 978 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': 979 + optional: true 980 + 981 + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': 982 + optional: true 983 + 984 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': 985 + optional: true 986 + 987 + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': 988 + optional: true 989 + 990 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': 991 + optional: true 992 + 993 + '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': 994 + optional: true 995 + 996 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': 997 + optional: true 998 + 999 + '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': 1000 + optional: true 1001 + 1002 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': 1003 + dependencies: 1004 + '@napi-rs/wasm-runtime': 1.1.1 1005 + optional: true 1006 + 1007 + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': 1008 + dependencies: 1009 + '@napi-rs/wasm-runtime': 1.1.1 1010 + optional: true 1011 + 1012 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': 1013 + optional: true 1014 + 1015 + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': 1016 + optional: true 1017 + 1018 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': 1019 + optional: true 1020 + 1021 + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': 1022 + optional: true 1023 + 1024 + '@rolldown/pluginutils@1.0.0-rc.7': {} 1025 + 1026 + '@rolldown/pluginutils@1.0.0-rc.9': {} 1027 + 1028 + '@standard-schema/spec@1.1.0': {} 1029 + 1030 + '@tybys/wasm-util@0.10.1': 1031 + dependencies: 1032 + tslib: 2.8.1 1033 + optional: true 1034 + 1035 + '@types/bun@1.3.10': 1036 + dependencies: 1037 + bun-types: 1.3.10 1038 + 1039 + '@types/chai@5.2.3': 1040 + dependencies: 1041 + '@types/deep-eql': 4.0.2 1042 + assertion-error: 2.0.1 1043 + 1044 + '@types/deep-eql@4.0.2': {} 1045 + 1046 + '@types/node@25.3.5': 1047 + dependencies: 1048 + undici-types: 7.18.2 1049 + 1050 + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260306.1': 1051 + optional: true 1052 + 1053 + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260306.1': 1054 + optional: true 1055 + 1056 + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260306.1': 1057 + optional: true 1058 + 1059 + '@typescript/native-preview-linux-arm@7.0.0-dev.20260306.1': 1060 + optional: true 1061 + 1062 + '@typescript/native-preview-linux-x64@7.0.0-dev.20260306.1': 1063 + optional: true 1064 + 1065 + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260306.1': 1066 + optional: true 1067 + 1068 + '@typescript/native-preview-win32-x64@7.0.0-dev.20260306.1': 1069 + optional: true 1070 + 1071 + '@typescript/native-preview@7.0.0-dev.20260306.1': 1072 + optionalDependencies: 1073 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260306.1 1074 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260306.1 1075 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260306.1 1076 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260306.1 1077 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260306.1 1078 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260306.1 1079 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260306.1 1080 + 1081 + '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.3.5)(typescript@5.9.3)': 1082 + dependencies: 1083 + '@oxc-project/runtime': 0.115.0 1084 + '@oxc-project/types': 0.115.0 1085 + lightningcss: 1.31.1 1086 + postcss: 8.5.8 1087 + optionalDependencies: 1088 + '@types/node': 25.3.5 1089 + fsevents: 2.3.3 1090 + typescript: 5.9.3 1091 + 1092 + '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.3.5)(typescript@5.9.3)(vite@8.0.0(@types/node@25.3.5))': 1093 + dependencies: 1094 + '@standard-schema/spec': 1.1.0 1095 + '@types/chai': 5.2.3 1096 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@25.3.5)(typescript@5.9.3) 1097 + es-module-lexer: 1.7.0 1098 + obug: 2.1.1 1099 + pixelmatch: 7.1.0 1100 + pngjs: 7.0.0 1101 + sirv: 3.0.2 1102 + std-env: 4.0.0 1103 + tinybench: 2.9.0 1104 + tinyexec: 1.0.2 1105 + tinyglobby: 0.2.15 1106 + vite: 8.0.0(@types/node@25.3.5) 1107 + ws: 8.19.0 1108 + optionalDependencies: 1109 + '@types/node': 25.3.5 1110 + transitivePeerDependencies: 1111 + - '@arethetypeswrong/core' 1112 + - '@tsdown/css' 1113 + - '@tsdown/exe' 1114 + - '@vitejs/devtools' 1115 + - bufferutil 1116 + - esbuild 1117 + - jiti 1118 + - less 1119 + - publint 1120 + - sass 1121 + - sass-embedded 1122 + - stylus 1123 + - sugarss 1124 + - terser 1125 + - tsx 1126 + - typescript 1127 + - unplugin-unused 1128 + - utf-8-validate 1129 + - yaml 1130 + 1131 + assertion-error@2.0.1: {} 1132 + 1133 + bun-types@1.3.10: 1134 + dependencies: 1135 + '@types/node': 25.3.5 1136 + 1137 + detect-libc@2.1.2: {} 1138 + 1139 + es-module-lexer@1.7.0: {} 1140 + 1141 + fdir@6.5.0(picomatch@4.0.3): 1142 + optionalDependencies: 1143 + picomatch: 4.0.3 1144 + 1145 + fsevents@2.3.3: 1146 + optional: true 1147 + 1148 + lightningcss-android-arm64@1.31.1: 1149 + optional: true 1150 + 1151 + lightningcss-android-arm64@1.32.0: 1152 + optional: true 1153 + 1154 + lightningcss-darwin-arm64@1.31.1: 1155 + optional: true 1156 + 1157 + lightningcss-darwin-arm64@1.32.0: 1158 + optional: true 1159 + 1160 + lightningcss-darwin-x64@1.31.1: 1161 + optional: true 1162 + 1163 + lightningcss-darwin-x64@1.32.0: 1164 + optional: true 1165 + 1166 + lightningcss-freebsd-x64@1.31.1: 1167 + optional: true 1168 + 1169 + lightningcss-freebsd-x64@1.32.0: 1170 + optional: true 1171 + 1172 + lightningcss-linux-arm-gnueabihf@1.31.1: 1173 + optional: true 1174 + 1175 + lightningcss-linux-arm-gnueabihf@1.32.0: 1176 + optional: true 1177 + 1178 + lightningcss-linux-arm64-gnu@1.31.1: 1179 + optional: true 1180 + 1181 + lightningcss-linux-arm64-gnu@1.32.0: 1182 + optional: true 1183 + 1184 + lightningcss-linux-arm64-musl@1.31.1: 1185 + optional: true 1186 + 1187 + lightningcss-linux-arm64-musl@1.32.0: 1188 + optional: true 1189 + 1190 + lightningcss-linux-x64-gnu@1.31.1: 1191 + optional: true 1192 + 1193 + lightningcss-linux-x64-gnu@1.32.0: 1194 + optional: true 1195 + 1196 + lightningcss-linux-x64-musl@1.31.1: 1197 + optional: true 1198 + 1199 + lightningcss-linux-x64-musl@1.32.0: 1200 + optional: true 1201 + 1202 + lightningcss-win32-arm64-msvc@1.31.1: 1203 + optional: true 1204 + 1205 + lightningcss-win32-arm64-msvc@1.32.0: 1206 + optional: true 1207 + 1208 + lightningcss-win32-x64-msvc@1.31.1: 1209 + optional: true 1210 + 1211 + lightningcss-win32-x64-msvc@1.32.0: 1212 + optional: true 1213 + 1214 + lightningcss@1.31.1: 1215 + dependencies: 1216 + detect-libc: 2.1.2 1217 + optionalDependencies: 1218 + lightningcss-android-arm64: 1.31.1 1219 + lightningcss-darwin-arm64: 1.31.1 1220 + lightningcss-darwin-x64: 1.31.1 1221 + lightningcss-freebsd-x64: 1.31.1 1222 + lightningcss-linux-arm-gnueabihf: 1.31.1 1223 + lightningcss-linux-arm64-gnu: 1.31.1 1224 + lightningcss-linux-arm64-musl: 1.31.1 1225 + lightningcss-linux-x64-gnu: 1.31.1 1226 + lightningcss-linux-x64-musl: 1.31.1 1227 + lightningcss-win32-arm64-msvc: 1.31.1 1228 + lightningcss-win32-x64-msvc: 1.31.1 1229 + 1230 + lightningcss@1.32.0: 1231 + dependencies: 1232 + detect-libc: 2.1.2 1233 + optionalDependencies: 1234 + lightningcss-android-arm64: 1.32.0 1235 + lightningcss-darwin-arm64: 1.32.0 1236 + lightningcss-darwin-x64: 1.32.0 1237 + lightningcss-freebsd-x64: 1.32.0 1238 + lightningcss-linux-arm-gnueabihf: 1.32.0 1239 + lightningcss-linux-arm64-gnu: 1.32.0 1240 + lightningcss-linux-arm64-musl: 1.32.0 1241 + lightningcss-linux-x64-gnu: 1.32.0 1242 + lightningcss-linux-x64-musl: 1.32.0 1243 + lightningcss-win32-arm64-msvc: 1.32.0 1244 + lightningcss-win32-x64-msvc: 1.32.0 1245 + 1246 + mrmime@2.0.1: {} 1247 + 1248 + nanoid@3.3.11: {} 1249 + 1250 + obug@2.1.1: {} 1251 + 1252 + picocolors@1.1.1: {} 1253 + 1254 + picomatch@4.0.3: {} 1255 + 1256 + pixelmatch@7.1.0: 1257 + dependencies: 1258 + pngjs: 7.0.0 1259 + 1260 + pngjs@7.0.0: {} 1261 + 1262 + postcss@8.5.8: 1263 + dependencies: 1264 + nanoid: 3.3.11 1265 + picocolors: 1.1.1 1266 + source-map-js: 1.2.1 1267 + 1268 + rolldown@1.0.0-rc.7: 1269 + dependencies: 1270 + '@oxc-project/types': 0.115.0 1271 + '@rolldown/pluginutils': 1.0.0-rc.7 1272 + optionalDependencies: 1273 + '@rolldown/binding-android-arm64': 1.0.0-rc.7 1274 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.7 1275 + '@rolldown/binding-darwin-x64': 1.0.0-rc.7 1276 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.7 1277 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.7 1278 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.7 1279 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.7 1280 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.7 1281 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.7 1282 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.7 1283 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.7 1284 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.7 1285 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.7 1286 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.7 1287 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.7 1288 + 1289 + rolldown@1.0.0-rc.9: 1290 + dependencies: 1291 + '@oxc-project/types': 0.115.0 1292 + '@rolldown/pluginutils': 1.0.0-rc.9 1293 + optionalDependencies: 1294 + '@rolldown/binding-android-arm64': 1.0.0-rc.9 1295 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.9 1296 + '@rolldown/binding-darwin-x64': 1.0.0-rc.9 1297 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.9 1298 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9 1299 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9 1300 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9 1301 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9 1302 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9 1303 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9 1304 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9 1305 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9 1306 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9 1307 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 1308 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 1309 + 1310 + sirv@3.0.2: 1311 + dependencies: 1312 + '@polka/url': 1.0.0-next.29 1313 + mrmime: 2.0.1 1314 + totalist: 3.0.1 1315 + 1316 + source-map-js@1.2.1: {} 1317 + 1318 + std-env@4.0.0: {} 1319 + 1320 + tinybench@2.9.0: {} 1321 + 1322 + tinyexec@1.0.2: {} 1323 + 1324 + tinyglobby@0.2.15: 1325 + dependencies: 1326 + fdir: 6.5.0(picomatch@4.0.3) 1327 + picomatch: 4.0.3 1328 + 1329 + totalist@3.0.1: {} 1330 + 1331 + tslib@2.8.1: 1332 + optional: true 1333 + 1334 + typescript@5.9.3: {} 1335 + 1336 + undici-types@7.18.2: {} 1337 + 1338 + vite@8.0.0(@types/node@25.3.5): 1339 + dependencies: 1340 + '@oxc-project/runtime': 0.115.0 1341 + lightningcss: 1.32.0 1342 + picomatch: 4.0.3 1343 + postcss: 8.5.8 1344 + rolldown: 1.0.0-rc.9 1345 + tinyglobby: 0.2.15 1346 + optionalDependencies: 1347 + '@types/node': 25.3.5 1348 + fsevents: 2.3.3 1349 + 1350 + ws@8.19.0: {}
+549 -1598
pnpm-lock.yaml
··· 6 6 7 7 catalogs: 8 8 default: 9 + '@babel/core': 10 + specifier: 7.29.0 11 + version: 7.29.0 12 + '@rolldown/plugin-babel': 13 + specifier: 0.2.1 14 + version: 0.2.1 15 + '@types/babel__core': 16 + specifier: 7.20.5 17 + version: 7.20.5 18 + '@types/node': 19 + specifier: ^24 20 + version: 24.12.0 9 21 '@typescript/native-preview': 10 22 specifier: ^7.0.0-dev.20260105.1 11 23 version: 7.0.0-dev.20260313.1 24 + typescript: 25 + specifier: ^5 26 + version: 5.9.3 27 + vite-plus: 28 + specifier: latest 29 + version: 0.1.11 12 30 13 31 overrides: 14 - vite: npm:@voidzero-dev/vite-plus-core@0.1.11 15 - vitest: npm:@voidzero-dev/vite-plus-test@0.1.11 32 + vite: npm:@voidzero-dev/vite-plus-core@latest 33 + vitest: npm:@voidzero-dev/vite-plus-test@latest 16 34 17 35 importers: 18 36 ··· 20 38 devDependencies: 21 39 '@uwu/flora-cli': 22 40 specifier: workspace:* 23 - version: link:apps/cli 24 - '@voidzero-dev/vite-plus-core': 25 - specifier: 0.1.11 26 - version: 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3) 27 - dprint: 28 - specifier: 0.51.1 29 - version: 0.51.1 30 - lefthook: 31 - specifier: ^2.0.15 32 - version: 2.0.16 33 - typescript: 34 - specifier: ^5.7.2 35 - version: 5.9.3 41 + version: link:packages/cli 36 42 vite-plus: 37 - specifier: 0.1.11 38 - version: 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)) 39 - vitest: 40 - specifier: npm:@voidzero-dev/vite-plus-test@0.1.11 41 - version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0))' 42 - vue-tsc: 43 - specifier: 3.2.4 44 - version: 3.2.4(typescript@5.9.3) 43 + specifier: 'catalog:' 44 + version: 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) 45 45 46 46 apps/build-service: 47 47 dependencies: ··· 56 56 version: 2.0.1-rc.14 57 57 rolldown: 58 58 specifier: ^1.0.0-beta.43 59 - version: 1.0.0-rc.6 59 + version: 1.0.0-rc.9 60 60 devDependencies: 61 61 '@types/node': 62 - specifier: ^24.3.0 62 + specifier: 'catalog:' 63 63 version: 24.12.0 64 64 '@typescript/native-preview': 65 65 specifier: 'catalog:' 66 66 version: 7.0.0-dev.20260313.1 67 - tsdown: 68 - specifier: ^0.20.3 69 - version: 0.20.3(@typescript/native-preview@7.0.0-dev.20260313.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) 70 - tsx: 71 - specifier: ^4.20.6 72 - version: 4.21.0 73 - typescript: 74 - specifier: ^5.9.3 75 - version: 5.9.3 76 - 77 - apps/cli: 78 - dependencies: 79 - '@clack/prompts': 80 - specifier: ^1.0.1 81 - version: 1.1.0 82 - '@uwu/flora-api-client': 83 - specifier: workspace:* 84 - version: link:../../packages/api-client 85 - c12: 86 - specifier: ^3.3.2 87 - version: 3.3.3 88 - citty: 89 - specifier: ^0.2.1 90 - version: 0.2.1 91 - conf: 92 - specifier: ^15.1.0 93 - version: 15.1.0 94 - consola: 95 - specifier: ^3.4.2 96 - version: 3.4.2 97 - fflate: 98 - specifier: ^0.8.2 99 - version: 0.8.2 100 - ignore: 101 - specifier: ^7.0.5 102 - version: 7.0.5 103 - rolldown: 104 - specifier: ^1.0.0-beta.43 105 - version: 1.0.0-rc.6 106 - tinyglobby: 107 - specifier: ^0.2.15 108 - version: 0.2.15 109 - devDependencies: 110 - '@types/node': 111 - specifier: ^24.3.0 112 - version: 24.12.0 113 - '@typescript/native-preview': 67 + vite-plus: 114 68 specifier: 'catalog:' 115 - version: 7.0.0-dev.20260313.1 116 - tsdown: 117 - specifier: ^0.20.3 118 - version: 0.20.3(@typescript/native-preview@7.0.0-dev.20260313.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) 119 - tsx: 120 - specifier: ^4.20.6 121 - version: 4.21.0 122 - typescript: 123 - specifier: ^5.9.3 124 - version: 5.9.3 125 - vitest: 126 - specifier: npm:@voidzero-dev/vite-plus-test@0.1.11 127 - version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0))' 69 + version: 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) 128 70 129 71 apps/frontend: 130 72 dependencies: ··· 193 135 version: 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) 194 136 '@tailwindcss/vite': 195 137 specifier: ^4.1.18 196 - version: 4.2.1(@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)) 138 + version: 4.2.1(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)) 197 139 '@tanstack/react-query': 198 140 specifier: ^5.90.12 199 141 version: 5.90.21(react@19.2.4) ··· 241 183 version: 3.0.0(react@19.2.4) 242 184 shadcn: 243 185 specifier: ^4.0.5 244 - version: 4.0.6(@types/node@25.1.0)(typescript@5.9.3) 186 + version: 4.0.6(@types/node@24.12.0)(typescript@5.9.3) 245 187 tailwind-merge: 246 188 specifier: ^3.4.0 247 189 version: 3.5.0 ··· 261 203 specifier: ^3.9.0 262 204 version: 3.9.0(react@19.2.4) 263 205 devDependencies: 206 + '@babel/core': 207 + specifier: 'catalog:' 208 + version: 7.29.0 264 209 '@react-grab/mcp': 265 210 specifier: 0.1.25 266 211 version: 0.1.25(@types/react@19.2.14)(react@19.2.4) 212 + '@rolldown/plugin-babel': 213 + specifier: 'catalog:' 214 + version: 0.2.1(@babel/core@7.29.0)(@babel/runtime@7.28.6)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(rolldown@1.0.0-rc.9) 215 + '@types/babel__core': 216 + specifier: 'catalog:' 217 + version: 7.20.5 267 218 '@types/node': 268 - specifier: ^25.0.1 269 - version: 25.1.0 219 + specifier: 'catalog:' 220 + version: 24.12.0 270 221 '@types/react': 271 222 specifier: ^19.2.5 272 223 version: 19.2.14 ··· 277 228 specifier: 'catalog:' 278 229 version: 7.0.0-dev.20260313.1 279 230 '@vitejs/plugin-react': 280 - specifier: ^5.1.1 281 - version: 5.2.0(@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)) 231 + specifier: ^6.0.1 232 + version: 6.0.1(@rolldown/plugin-babel@0.2.1(@babel/core@7.29.0)(@babel/runtime@7.28.6)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(rolldown@1.0.0-rc.9))(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(babel-plugin-react-compiler@1.0.0) 282 233 babel-plugin-react-compiler: 283 234 specifier: 1.0.0 284 235 version: 1.0.0 285 - openapi-typescript: 286 - specifier: ^7.10.1 287 - version: 7.13.0(typescript@5.9.3) 288 - oxlint: 289 - specifier: 1.51.0 290 - version: 1.51.0(oxlint-tsgolint@0.16.0) 291 - oxlint-tsgolint: 292 - specifier: 0.16.0 293 - version: 0.16.0 294 236 react-scan: 295 237 specifier: 0.5.3 296 238 version: 0.5.3(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) 297 239 typescript: 298 - specifier: ~5.9.3 240 + specifier: 'catalog:' 299 241 version: 5.9.3 300 - typescript-eslint: 301 - specifier: ^8.46.4 302 - version: 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 303 242 vite: 304 - specifier: npm:@voidzero-dev/vite-plus-core@0.1.11 305 - version: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)' 243 + specifier: npm:@voidzero-dev/vite-plus-core@latest 244 + version: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 245 + vite-plus: 246 + specifier: 'catalog:' 247 + version: 0.1.11(@types/node@24.12.0)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 306 248 307 249 apps/uwu.network: 308 250 dependencies: ··· 315 257 version: 7.0.0-dev.20260313.1 316 258 '@uwu/flora-cli': 317 259 specifier: workspace:* 318 - version: link:../cli 260 + version: link:../../packages/cli 319 261 '@uwu/flora-sdk': 320 262 specifier: workspace:* 321 - version: link:../../sdk 263 + version: link:../../packages/sdk 322 264 typescript: 323 - specifier: ^5.0.0 265 + specifier: 'catalog:' 324 266 version: 5.9.3 325 267 326 268 apps/www: ··· 336 278 version: 0.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vue@3.5.30(typescript@5.9.3)) 337 279 vitepress: 338 280 specifier: 2.0.0-alpha.16 339 - version: 2.0.0-alpha.16(@types/node@25.1.0)(change-case@5.4.4)(esbuild@0.27.3)(jiti@2.6.1)(oxc-minify@0.116.0)(postcss@8.5.8)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3) 281 + version: 2.0.0-alpha.16(@types/node@24.12.0)(change-case@5.4.4)(esbuild@0.27.3)(jiti@2.6.1)(oxc-minify@0.116.0)(postcss@8.5.8)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 340 282 vue: 341 283 specifier: ^3.5.29 342 284 version: 3.5.30(typescript@5.9.3) ··· 344 286 '@iconify-json/lucide': 345 287 specifier: 1.2.95 346 288 version: 1.2.95 347 - '@types/bun': 348 - specifier: latest 349 - version: 1.3.10 289 + '@types/node': 290 + specifier: 'catalog:' 291 + version: 24.12.0 350 292 oxc-minify: 351 293 specifier: 0.116.0 352 294 version: 0.116.0 ··· 354 296 specifier: ^1.97.2 355 297 version: 1.97.3 356 298 typescript: 357 - specifier: ^5 299 + specifier: 'catalog:' 358 300 version: 5.9.3 359 301 unocss: 360 302 specifier: ^66.5.12 361 - version: 66.6.6(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)) 303 + version: 66.6.6(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) 362 304 wrangler: 363 305 specifier: ^4.58.0 364 306 version: 4.73.0 ··· 366 308 examples/basic: 367 309 devDependencies: 368 310 '@uwu/flora-sdk': 369 - specifier: latest 370 - version: 0.0.0 311 + specifier: 'workspace:' 312 + version: link:../../packages/sdk 371 313 372 314 packages/api-client: 373 315 dependencies: ··· 378 320 '@typescript/native-preview': 379 321 specifier: 'catalog:' 380 322 version: 7.0.0-dev.20260313.1 323 + bumpp: 324 + specifier: ^11.0.0 325 + version: 11.0.0 381 326 openapi-typescript: 382 327 specifier: ^7.13.0 383 328 version: 7.13.0(typescript@5.9.3) 384 - tsdown: 385 - specifier: ^0.20.3 386 - version: 0.20.3(@typescript/native-preview@7.0.0-dev.20260313.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) 387 329 typescript: 388 - specifier: ^5.9.3 330 + specifier: 'catalog:' 389 331 version: 5.9.3 332 + vite-plus: 333 + specifier: 'catalog:' 334 + version: 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) 335 + vitest: 336 + specifier: npm:@voidzero-dev/vite-plus-test@latest 337 + version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)' 390 338 391 - sdk: 339 + packages/cli: 340 + dependencies: 341 + '@clack/prompts': 342 + specifier: ^1.0.1 343 + version: 1.1.0 344 + '@uwu/flora-api-client': 345 + specifier: workspace:* 346 + version: link:../api-client 347 + c12: 348 + specifier: ^3.3.2 349 + version: 3.3.3 350 + citty: 351 + specifier: ^0.2.1 352 + version: 0.2.1 353 + conf: 354 + specifier: ^15.1.0 355 + version: 15.1.0 356 + consola: 357 + specifier: ^3.4.2 358 + version: 3.4.2 359 + fflate: 360 + specifier: ^0.8.2 361 + version: 0.8.2 362 + ignore: 363 + specifier: ^7.0.5 364 + version: 7.0.5 365 + rolldown: 366 + specifier: ^0.15.1 367 + version: 0.15.1(@babel/runtime@7.28.6) 368 + tinyglobby: 369 + specifier: ^0.2.15 370 + version: 0.2.15 392 371 devDependencies: 393 - '@types/bun': 394 - specifier: latest 395 - version: 1.3.10 372 + '@types/node': 373 + specifier: 'catalog:' 374 + version: 24.12.0 375 + '@typescript/native-preview': 376 + specifier: 'catalog:' 377 + version: 7.0.0-dev.20260313.1 378 + bumpp: 379 + specifier: ^11.0.0 380 + version: 11.0.0 381 + typescript: 382 + specifier: 'catalog:' 383 + version: 5.9.3 384 + vite-plus: 385 + specifier: 'catalog:' 386 + version: 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) 387 + vitest: 388 + specifier: npm:@voidzero-dev/vite-plus-test@latest 389 + version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)' 390 + 391 + packages/sdk: 392 + devDependencies: 393 + '@types/node': 394 + specifier: 'catalog:' 395 + version: 24.12.0 396 396 '@typescript/native-preview': 397 397 specifier: 'catalog:' 398 398 version: 7.0.0-dev.20260313.1 399 399 rolldown: 400 400 specifier: ^1.0.0-beta.53 401 - version: 1.0.0-rc.6 401 + version: 1.0.0-rc.9 402 402 typescript: 403 - specifier: ^5.9.3 403 + specifier: 'catalog:' 404 404 version: 5.9.3 405 - vitest: 406 - specifier: npm:@voidzero-dev/vite-plus-test@0.1.11 407 - version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0))' 408 405 409 406 packages: 410 407 ··· 434 431 '@babel/generator@7.29.1': 435 432 resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} 436 433 engines: {node: '>=6.9.0'} 437 - 438 - '@babel/generator@8.0.0-rc.2': 439 - resolution: {integrity: sha512-oCQ1IKPwkzCeJzAPb7Fv8rQ9k5+1sG8mf2uoHiMInPYvkRfrDJxbTIbH51U+jstlkghus0vAi3EBvkfvEsYNLQ==} 440 - engines: {node: ^20.19.0 || >=22.12.0} 441 434 442 435 '@babel/helper-annotate-as-pure@7.27.3': 443 436 resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} ··· 493 486 resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 494 487 engines: {node: '>=6.9.0'} 495 488 496 - '@babel/helper-string-parser@8.0.0-rc.2': 497 - resolution: {integrity: sha512-noLx87RwlBEMrTzncWd/FvTxoJ9+ycHNg0n8yyYydIoDsLZuxknKgWRJUqcrVkNrJ74uGyhWQzQaS3q8xfGAhQ==} 498 - engines: {node: ^20.19.0 || >=22.12.0} 499 - 500 489 '@babel/helper-validator-identifier@7.28.5': 501 490 resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 502 491 engines: {node: '>=6.9.0'} 503 - 504 - '@babel/helper-validator-identifier@8.0.0-rc.2': 505 - resolution: {integrity: sha512-xExUBkuXWJjVuIbO7z6q7/BA9bgfJDEhVL0ggrggLMbg0IzCUWGT1hZGE8qUH7Il7/RD/a6cZ3AAFrrlp1LF/A==} 506 - engines: {node: ^20.19.0 || >=22.12.0} 507 492 508 493 '@babel/helper-validator-option@7.27.1': 509 494 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} ··· 523 508 engines: {node: '>=6.0.0'} 524 509 hasBin: true 525 510 526 - '@babel/parser@8.0.0-rc.2': 527 - resolution: {integrity: sha512-29AhEtcq4x8Dp3T72qvUMZHx0OMXCj4Jy/TEReQa+KWLln524Cj1fWb3QFi0l/xSpptQBR6y9RNEXuxpFvwiUQ==} 528 - engines: {node: ^20.19.0 || >=22.12.0} 529 - hasBin: true 530 - 531 511 '@babel/plugin-syntax-jsx@7.28.6': 532 512 resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} 533 513 engines: {node: '>=6.9.0'} ··· 542 522 543 523 '@babel/plugin-transform-modules-commonjs@7.28.6': 544 524 resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} 545 - engines: {node: '>=6.9.0'} 546 - peerDependencies: 547 - '@babel/core': ^7.0.0-0 548 - 549 - '@babel/plugin-transform-react-jsx-self@7.27.1': 550 - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} 551 - engines: {node: '>=6.9.0'} 552 - peerDependencies: 553 - '@babel/core': ^7.0.0-0 554 - 555 - '@babel/plugin-transform-react-jsx-source@7.27.1': 556 - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} 557 525 engines: {node: '>=6.9.0'} 558 526 peerDependencies: 559 527 '@babel/core': ^7.0.0-0 ··· 589 557 '@babel/types@7.29.0': 590 558 resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} 591 559 engines: {node: '>=6.9.0'} 592 - 593 - '@babel/types@8.0.0-rc.2': 594 - resolution: {integrity: sha512-91gAaWRznDwSX4E2tZ1YjBuIfnQVOFDCQ2r0Toby0gu4XEbyF623kXLMA8d4ZbCu+fINcrudkmEcwSUHgDDkNw==} 595 - engines: {node: ^20.19.0 || >=22.12.0} 596 560 597 561 '@base-ui/react@1.3.0': 598 562 resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==} ··· 765 729 resolution: {integrity: sha512-WEuKyoe9CA7dfcFBnNbL0ndbCNcptaEYBygfFo9X1qEG+HD7xku4CYIplw6sbAHJavesZWbVBHeRSpvri0eKqw==} 766 730 hasBin: true 767 731 768 - '@dprint/darwin-arm64@0.51.1': 769 - resolution: {integrity: sha512-C7fkaz0/NGf/X4G9Cq65izdJgerND5jWShOaPiOgGs4A0CyCMKMLRd45m3xKIttuO8x0IQiZVixD22qmVglXmQ==} 770 - cpu: [arm64] 771 - os: [darwin] 772 - 773 - '@dprint/darwin-x64@0.51.1': 774 - resolution: {integrity: sha512-/CESb4SJejshTWb/nO2gucrioKdLD/fK2gKB5Immi4XecAjhkV1HZpUMRLsIeVDQ6ha7xktKbnnvudJRI0maSg==} 775 - cpu: [x64] 776 - os: [darwin] 777 - 778 - '@dprint/linux-arm64-glibc@0.51.1': 779 - resolution: {integrity: sha512-W+QD/4TkQKMPq02uz+ZIz/EI91YEtS2zHBu/Jihx2lfNh3HjUKgyY1KfqCTg2WGJVDkJtPc5KDw+M8yd4rI+Rg==} 780 - cpu: [arm64] 781 - os: [linux] 782 - 783 - '@dprint/linux-arm64-musl@0.51.1': 784 - resolution: {integrity: sha512-P4Cfn8wrdSvdoMoz0HtsC5zZpbh8Kk3OjRzgG4qs/gub5Ba3CCLcVaQvQmIOCvgPzdhPB41eSn5qAK87mh7vCQ==} 785 - cpu: [arm64] 786 - os: [linux] 787 - 788 - '@dprint/linux-loong64-glibc@0.51.1': 789 - resolution: {integrity: sha512-dxDShELBrSGB9PktRqhYrm1UWCL+7N430rGuDTFg+i4d1wL4JD7EI5NDS/5IVbg3lrKJUu6gAJoY9NWF4sZ0mQ==} 790 - cpu: [loong64] 791 - os: [linux] 792 - 793 - '@dprint/linux-loong64-musl@0.51.1': 794 - resolution: {integrity: sha512-l+uNPzUBNxkywGN1HgvTV0CzUDpzXC+s6VEvjYRdVAEKl9TAsIfLMfZifS8rnlOi9hz/0sckmpny+wL40G6dhQ==} 795 - cpu: [loong64] 796 - os: [linux] 797 - 798 - '@dprint/linux-riscv64-glibc@0.51.1': 799 - resolution: {integrity: sha512-YI6SemJRMsLUrtognhkAYOJ67j/AkiufHfx6+cPv/7qO6zBoBL6otR1e5yFYvAgEJOzRZD5g51EdqCcuK19B+g==} 800 - cpu: [riscv64] 801 - os: [linux] 802 - 803 - '@dprint/linux-x64-glibc@0.51.1': 804 - resolution: {integrity: sha512-Hm9ntOWeclXU6/rZGYIN2XjuAhsRUZ77lRJC5EiM1rP6Ayh0J/YMsDdqlPAs+xZGdFFzt8ZeUpqJJJsbc54ZjQ==} 805 - cpu: [x64] 806 - os: [linux] 807 - 808 - '@dprint/linux-x64-musl@0.51.1': 809 - resolution: {integrity: sha512-iUs/9Z4Ky6+2GAK+i1jF1ZwM27CSIGaqw3LxTXtmE8eBCRwyCW+opzn9bzaFtlT9REUAGMC5PXihAPmzP3ttWg==} 810 - cpu: [x64] 811 - os: [linux] 812 - 813 - '@dprint/win32-arm64@0.51.1': 814 - resolution: {integrity: sha512-oXjEL7Blf/160/j7U8MapRzSOVQvLIdAKEZbslIHA4Fwj10fvoDizqpfVU/aVj/BVrlIcZ/+AH8kfSC9XAyjLw==} 815 - cpu: [arm64] 816 - os: [win32] 817 - 818 - '@dprint/win32-x64@0.51.1': 819 - resolution: {integrity: sha512-RM9thb/+Jm6GkXJS+eW+0Pzmz2PNeDk8ZOWcjunE1jv2RabHgm+GbeGpS+WZPOM9W3LSntswv6f4wjzfUkWD0g==} 820 - cpu: [x64] 821 - os: [win32] 822 - 823 732 '@ecies/ciphers@0.2.5': 824 733 resolution: {integrity: sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A==} 825 734 engines: {bun: '>=1', deno: '>=2', node: '>=16'} ··· 1147 1056 cpu: [x64] 1148 1057 os: [win32] 1149 1058 1150 - '@eslint-community/eslint-utils@4.9.1': 1151 - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} 1152 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1153 - peerDependencies: 1154 - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 1155 - 1156 - '@eslint-community/regexpp@4.12.2': 1157 - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 1158 - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 1159 - 1160 - '@eslint/config-array@0.23.3': 1161 - resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} 1162 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 1163 - 1164 - '@eslint/config-helpers@0.5.3': 1165 - resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} 1166 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 1167 - 1168 - '@eslint/core@1.1.1': 1169 - resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} 1170 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 1171 - 1172 - '@eslint/object-schema@3.0.3': 1173 - resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} 1174 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 1175 - 1176 - '@eslint/plugin-kit@0.6.1': 1177 - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} 1178 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 1179 - 1180 1059 '@floating-ui/core@1.7.5': 1181 1060 resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} 1182 1061 ··· 1201 1080 peerDependencies: 1202 1081 hono: ^4 1203 1082 1204 - '@humanfs/core@0.19.1': 1205 - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 1206 - engines: {node: '>=18.18.0'} 1207 - 1208 - '@humanfs/node@0.16.7': 1209 - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 1210 - engines: {node: '>=18.18.0'} 1211 - 1212 - '@humanwhocodes/module-importer@1.0.1': 1213 - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 1214 - engines: {node: '>=12.22'} 1215 - 1216 - '@humanwhocodes/retry@0.4.3': 1217 - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 1218 - engines: {node: '>=18.18'} 1219 - 1220 1083 '@iconify-json/lucide@1.2.95': 1221 1084 resolution: {integrity: sha512-SxDM/NEJtcGGAiLAnaZ7rcmVxkJI8esswTZLCm5BfNcoPf/yawIImb4nNfsu4dtFzP/Cl6KRg+vZq521zOUOnQ==} 1222 1085 ··· 1259 1122 resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} 1260 1123 cpu: [arm64] 1261 1124 os: [linux] 1125 + libc: [glibc] 1262 1126 1263 1127 '@img/sharp-libvips-linux-arm@1.2.4': 1264 1128 resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} 1265 1129 cpu: [arm] 1266 1130 os: [linux] 1131 + libc: [glibc] 1267 1132 1268 1133 '@img/sharp-libvips-linux-ppc64@1.2.4': 1269 1134 resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} 1270 1135 cpu: [ppc64] 1271 1136 os: [linux] 1137 + libc: [glibc] 1272 1138 1273 1139 '@img/sharp-libvips-linux-riscv64@1.2.4': 1274 1140 resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} 1275 1141 cpu: [riscv64] 1276 1142 os: [linux] 1143 + libc: [glibc] 1277 1144 1278 1145 '@img/sharp-libvips-linux-s390x@1.2.4': 1279 1146 resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} 1280 1147 cpu: [s390x] 1281 1148 os: [linux] 1149 + libc: [glibc] 1282 1150 1283 1151 '@img/sharp-libvips-linux-x64@1.2.4': 1284 1152 resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} 1285 1153 cpu: [x64] 1286 1154 os: [linux] 1155 + libc: [glibc] 1287 1156 1288 1157 '@img/sharp-libvips-linuxmusl-arm64@1.2.4': 1289 1158 resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} 1290 1159 cpu: [arm64] 1291 1160 os: [linux] 1161 + libc: [musl] 1292 1162 1293 1163 '@img/sharp-libvips-linuxmusl-x64@1.2.4': 1294 1164 resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} 1295 1165 cpu: [x64] 1296 1166 os: [linux] 1167 + libc: [musl] 1297 1168 1298 1169 '@img/sharp-linux-arm64@0.34.5': 1299 1170 resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} 1300 1171 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1301 1172 cpu: [arm64] 1302 1173 os: [linux] 1174 + libc: [glibc] 1303 1175 1304 1176 '@img/sharp-linux-arm@0.34.5': 1305 1177 resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} 1306 1178 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1307 1179 cpu: [arm] 1308 1180 os: [linux] 1181 + libc: [glibc] 1309 1182 1310 1183 '@img/sharp-linux-ppc64@0.34.5': 1311 1184 resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} 1312 1185 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1313 1186 cpu: [ppc64] 1314 1187 os: [linux] 1188 + libc: [glibc] 1315 1189 1316 1190 '@img/sharp-linux-riscv64@0.34.5': 1317 1191 resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} 1318 1192 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1319 1193 cpu: [riscv64] 1320 1194 os: [linux] 1195 + libc: [glibc] 1321 1196 1322 1197 '@img/sharp-linux-s390x@0.34.5': 1323 1198 resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} 1324 1199 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1325 1200 cpu: [s390x] 1326 1201 os: [linux] 1202 + libc: [glibc] 1327 1203 1328 1204 '@img/sharp-linux-x64@0.34.5': 1329 1205 resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} 1330 1206 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1331 1207 cpu: [x64] 1332 1208 os: [linux] 1209 + libc: [glibc] 1333 1210 1334 1211 '@img/sharp-linuxmusl-arm64@0.34.5': 1335 1212 resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} 1336 1213 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1337 1214 cpu: [arm64] 1338 1215 os: [linux] 1216 + libc: [musl] 1339 1217 1340 1218 '@img/sharp-linuxmusl-x64@0.34.5': 1341 1219 resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} 1342 1220 engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1343 1221 cpu: [x64] 1344 1222 os: [linux] 1223 + libc: [musl] 1345 1224 1346 1225 '@img/sharp-wasm32@0.34.5': 1347 1226 resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} ··· 1437 1316 resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} 1438 1317 engines: {node: '>=18'} 1439 1318 1319 + '@napi-rs/wasm-runtime@0.2.12': 1320 + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} 1321 + 1440 1322 '@napi-rs/wasm-runtime@1.1.1': 1441 1323 resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} 1442 1324 ··· 1520 1402 engines: {node: ^20.19.0 || >=22.12.0} 1521 1403 cpu: [arm64] 1522 1404 os: [linux] 1405 + libc: [glibc] 1523 1406 1524 1407 '@oxc-minify/binding-linux-arm64-musl@0.116.0': 1525 1408 resolution: {integrity: sha512-Xz/yCEAlJ/eT1DAmOIiJLSh0OwJE+8XkKMwTwL4hxL+pcJMpIXMBg1t1VIgHc561DmWxw//s5RPXqON+DRAkig==} 1526 1409 engines: {node: ^20.19.0 || >=22.12.0} 1527 1410 cpu: [arm64] 1528 1411 os: [linux] 1412 + libc: [musl] 1529 1413 1530 1414 '@oxc-minify/binding-linux-ppc64-gnu@0.116.0': 1531 1415 resolution: {integrity: sha512-Qk88V65XjhyrYcRZv/k6fHI7/c2lpYSOYeWgrRnqXNDryZ1oU3eZbJP7bgcZf+YCXHWg0SwJ3rZJuFmi+/Ml0Q==} 1532 1416 engines: {node: ^20.19.0 || >=22.12.0} 1533 1417 cpu: [ppc64] 1534 1418 os: [linux] 1419 + libc: [glibc] 1535 1420 1536 1421 '@oxc-minify/binding-linux-riscv64-gnu@0.116.0': 1537 1422 resolution: {integrity: sha512-1NlzrKgKgsvJg+8dtXGHZLdKLXmr6JSt6/7S6KCjG/FW2MZfjfiEnHbwW9U6iVpkmKlD73UDJsoyMQWGOZO6fQ==} 1538 1423 engines: {node: ^20.19.0 || >=22.12.0} 1539 1424 cpu: [riscv64] 1540 1425 os: [linux] 1426 + libc: [glibc] 1541 1427 1542 1428 '@oxc-minify/binding-linux-riscv64-musl@0.116.0': 1543 1429 resolution: {integrity: sha512-7sesJpftUQAFyMhnrdC2EoKWnsXeqC87A3spco5knPNfm90yzFYvpGGzBquJnWWwXHI5gplfDPYkiVrOP3AcRw==} 1544 1430 engines: {node: ^20.19.0 || >=22.12.0} 1545 1431 cpu: [riscv64] 1546 1432 os: [linux] 1433 + libc: [musl] 1547 1434 1548 1435 '@oxc-minify/binding-linux-s390x-gnu@0.116.0': 1549 1436 resolution: {integrity: sha512-Npe3A85+TLU1wK0BanMoJJhCAGIqM8SzKmteABxaBwjyfzQr4HtbOU/Boem6MoPegALIRNo0XHbR04Vby6wxSQ==} 1550 1437 engines: {node: ^20.19.0 || >=22.12.0} 1551 1438 cpu: [s390x] 1552 1439 os: [linux] 1440 + libc: [glibc] 1553 1441 1554 1442 '@oxc-minify/binding-linux-x64-gnu@0.116.0': 1555 1443 resolution: {integrity: sha512-1Ed/oZXVmgMSccgi6nBYC7ezqYjPhDRWHbdVJGNoXFcC6I138KHp/tTUWaqQNxtvwE1NrkYViaxnl7Gvq9Cjdg==} 1556 1444 engines: {node: ^20.19.0 || >=22.12.0} 1557 1445 cpu: [x64] 1558 1446 os: [linux] 1447 + libc: [glibc] 1559 1448 1560 1449 '@oxc-minify/binding-linux-x64-musl@0.116.0': 1561 1450 resolution: {integrity: sha512-QlXCrfdh3NFdKcBFUCgQvXc3Wp6xSonlZh0h8oZGBardy9d3IiIwDS7geXZkpFrpaU63kMmbt/vEB9elDCag4A==} 1562 1451 engines: {node: ^20.19.0 || >=22.12.0} 1563 1452 cpu: [x64] 1564 1453 os: [linux] 1454 + libc: [musl] 1565 1455 1566 1456 '@oxc-minify/binding-openharmony-arm64@0.116.0': 1567 1457 resolution: {integrity: sha512-b+IcvnKIfy44E35Oo+x5cbzp41odP2uoXLC+jNgkZCn3kwa/rlGc/mmT6l9INdNIGA+pK7MyZjZWSOYZZNk/3g==} ··· 1639 1529 engines: {node: ^20.19.0 || >=22.12.0} 1640 1530 cpu: [arm64] 1641 1531 os: [linux] 1532 + libc: [glibc] 1642 1533 1643 1534 '@oxc-parser/binding-linux-arm64-musl@0.115.0': 1644 1535 resolution: {integrity: sha512-HjsZbJPH9mMd4swJRywVMsDZsJX0hyKb1iNHo5ijRl5yhtbO3lj7ImSrrL1oZ1VEg0te4iKmDGGz/6YPLd1G8w==} 1645 1536 engines: {node: ^20.19.0 || >=22.12.0} 1646 1537 cpu: [arm64] 1647 1538 os: [linux] 1539 + libc: [musl] 1648 1540 1649 1541 '@oxc-parser/binding-linux-ppc64-gnu@0.115.0': 1650 1542 resolution: {integrity: sha512-zhhePoBrd7kQx3oClX/W6NldsuCbuMqaN9rRsY+6/WoorAb4j490PG/FjqgAXscWp2uSW2WV9L+ksn0wHrvsrg==} 1651 1543 engines: {node: ^20.19.0 || >=22.12.0} 1652 1544 cpu: [ppc64] 1653 1545 os: [linux] 1546 + libc: [glibc] 1654 1547 1655 1548 '@oxc-parser/binding-linux-riscv64-gnu@0.115.0': 1656 1549 resolution: {integrity: sha512-t/IRojvUE9XrKu+/H1b8YINug+7Q6FLls5rsm2lxB5mnS8GN/eYAYrPgHkcg9/1SueRDSzGpDYu3lGWTObk1zw==} 1657 1550 engines: {node: ^20.19.0 || >=22.12.0} 1658 1551 cpu: [riscv64] 1659 1552 os: [linux] 1553 + libc: [glibc] 1660 1554 1661 1555 '@oxc-parser/binding-linux-riscv64-musl@0.115.0': 1662 1556 resolution: {integrity: sha512-79jBHSSh/YpQRAmvYoaCfpyToRbJ/HBrdB7hxK2ku2JMehjopTVo+xMJss/RV7/ZYqeezgjvKDQzapJbgcjVZA==} 1663 1557 engines: {node: ^20.19.0 || >=22.12.0} 1664 1558 cpu: [riscv64] 1665 1559 os: [linux] 1560 + libc: [musl] 1666 1561 1667 1562 '@oxc-parser/binding-linux-s390x-gnu@0.115.0': 1668 1563 resolution: {integrity: sha512-nA1TpxkhNTIOMMyiSSsa7XIVJVoOU/SsVrHIz3gHvWweB5PHCQfO7w+Lb2EP0lBWokv7HtA/KbF7aLDoXzmuMw==} 1669 1564 engines: {node: ^20.19.0 || >=22.12.0} 1670 1565 cpu: [s390x] 1671 1566 os: [linux] 1567 + libc: [glibc] 1672 1568 1673 1569 '@oxc-parser/binding-linux-x64-gnu@0.115.0': 1674 1570 resolution: {integrity: sha512-9iVX789DoC3SaOOG+X6NcF/tVChgLp2vcHffzOC2/Z1JTPlz6bMG2ogvcW6/9s0BG2qvhNQImd+gbWYeQbOwVw==} 1675 1571 engines: {node: ^20.19.0 || >=22.12.0} 1676 1572 cpu: [x64] 1677 1573 os: [linux] 1574 + libc: [glibc] 1678 1575 1679 1576 '@oxc-parser/binding-linux-x64-musl@0.115.0': 1680 1577 resolution: {integrity: sha512-RmQmk+mjCB0nMNfEYhaCxwofLo1Z95ebHw1AGvRiWGCd4zhCNOyskgCbMogIcQzSB3SuEKWgkssyaiQYVAA4hQ==} 1681 1578 engines: {node: ^20.19.0 || >=22.12.0} 1682 1579 cpu: [x64] 1683 1580 os: [linux] 1581 + libc: [musl] 1684 1582 1685 1583 '@oxc-parser/binding-openharmony-arm64@0.115.0': 1686 1584 resolution: {integrity: sha512-viigraWWQhhDvX5aGq+wrQq58k00Xq3MHz/0R4AFMxGlZ8ogNonpEfNc73Q5Ly87Z6sU9BvxEdG0dnYTfVnmew==} ··· 1714 1612 '@oxc-project/runtime@0.115.0': 1715 1613 resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} 1716 1614 engines: {node: ^20.19.0 || >=22.12.0} 1717 - 1718 - '@oxc-project/types@0.112.0': 1719 - resolution: {integrity: sha512-m6RebKHIRsax2iCwVpYW2ErQwa4ywHJrE4sCK3/8JK8ZZAWOKXaRJFl/uP51gaVyyXlaS4+chU1nSCdzYf6QqQ==} 1720 1615 1721 1616 '@oxc-project/types@0.115.0': 1722 1617 resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} ··· 1768 1663 engines: {node: ^20.19.0 || >=22.12.0} 1769 1664 cpu: [arm64] 1770 1665 os: [linux] 1666 + libc: [glibc] 1771 1667 1772 1668 '@oxfmt/binding-linux-arm64-musl@0.40.0': 1773 1669 resolution: {integrity: sha512-tGmWhLD/0YMotCdfezlT6tC/MJG/wKpo4vnQ3Cq+4eBk/BwNv7EmkD0VkD5F/dYkT3b8FNU01X2e8vvJuWoM1w==} 1774 1670 engines: {node: ^20.19.0 || >=22.12.0} 1775 1671 cpu: [arm64] 1776 1672 os: [linux] 1673 + libc: [musl] 1777 1674 1778 1675 '@oxfmt/binding-linux-ppc64-gnu@0.40.0': 1779 1676 resolution: {integrity: sha512-rVbFyM3e7YhkVnp0IVYjaSHfrBWcTRWb60LEcdNAJcE2mbhTpbqKufx0FrhWfoxOrW/+7UJonAOShoFFLigDqQ==} 1780 1677 engines: {node: ^20.19.0 || >=22.12.0} 1781 1678 cpu: [ppc64] 1782 1679 os: [linux] 1680 + libc: [glibc] 1783 1681 1784 1682 '@oxfmt/binding-linux-riscv64-gnu@0.40.0': 1785 1683 resolution: {integrity: sha512-3ZqBw14JtWeEoLiioJcXSJz8RQyPE+3jLARnYM1HdPzZG4vk+Ua8CUupt2+d+vSAvMyaQBTN2dZK+kbBS/j5mA==} 1786 1684 engines: {node: ^20.19.0 || >=22.12.0} 1787 1685 cpu: [riscv64] 1788 1686 os: [linux] 1687 + libc: [glibc] 1789 1688 1790 1689 '@oxfmt/binding-linux-riscv64-musl@0.40.0': 1791 1690 resolution: {integrity: sha512-JJ4PPSdcbGBjPvb+O7xYm2FmAsKCyuEMYhqatBAHMp/6TA6rVlf9Z/sYPa4/3Bommb+8nndm15SPFRHEPU5qFA==} 1792 1691 engines: {node: ^20.19.0 || >=22.12.0} 1793 1692 cpu: [riscv64] 1794 1693 os: [linux] 1694 + libc: [musl] 1795 1695 1796 1696 '@oxfmt/binding-linux-s390x-gnu@0.40.0': 1797 1697 resolution: {integrity: sha512-Kp0zNJoX9Ik77wUya2tpBY3W9f40VUoMQLWVaob5SgCrblH/t2xr/9B2bWHfs0WCefuGmqXcB+t0Lq77sbBmZw==} 1798 1698 engines: {node: ^20.19.0 || >=22.12.0} 1799 1699 cpu: [s390x] 1800 1700 os: [linux] 1701 + libc: [glibc] 1801 1702 1802 1703 '@oxfmt/binding-linux-x64-gnu@0.40.0': 1803 1704 resolution: {integrity: sha512-7YTCNzleWTaQTqNGUNQ66qVjpoV6DjbCOea+RnpMBly2bpzrI/uu7Rr+2zcgRfNxyjXaFTVQKaRKjqVdeUfeVA==} 1804 1705 engines: {node: ^20.19.0 || >=22.12.0} 1805 1706 cpu: [x64] 1806 1707 os: [linux] 1708 + libc: [glibc] 1807 1709 1808 1710 '@oxfmt/binding-linux-x64-musl@0.40.0': 1809 1711 resolution: {integrity: sha512-hWnSzJ0oegeOwfOEeejYXfBqmnRGHusgtHfCPzmvJvHTwy1s3Neo59UKc1CmpE3zxvrCzJoVHos0rr97GHMNPw==} 1810 1712 engines: {node: ^20.19.0 || >=22.12.0} 1811 1713 cpu: [x64] 1812 1714 os: [linux] 1715 + libc: [musl] 1813 1716 1814 1717 '@oxfmt/binding-openharmony-arm64@0.40.0': 1815 1718 resolution: {integrity: sha512-28sJC1lR4qtBJGzSRRbPnSW3GxU2+4YyQFE6rCmsUYqZ5XYH8jg0/w+CvEzQ8TuAQz5zLkcA25nFQGwoU0PT3Q==} ··· 1865 1768 cpu: [x64] 1866 1769 os: [win32] 1867 1770 1868 - '@oxlint/binding-android-arm-eabi@1.51.0': 1869 - resolution: {integrity: sha512-jJYIqbx4sX+suIxWstc4P7SzhEwb4ArWA2KVrmEuu9vH2i0qM6QIHz/ehmbGE4/2fZbpuMuBzTl7UkfNoqiSgw==} 1870 - engines: {node: ^20.19.0 || >=22.12.0} 1871 - cpu: [arm] 1872 - os: [android] 1873 - 1874 1771 '@oxlint/binding-android-arm-eabi@1.55.0': 1875 1772 resolution: {integrity: sha512-NhvgAhncTSOhRahQSCnkK/4YIGPjTmhPurQQ2dwt2IvwCMTvZRW5vF2K10UBOxFve4GZDMw6LtXZdC2qeuYIVQ==} 1876 1773 engines: {node: ^20.19.0 || >=22.12.0} 1877 1774 cpu: [arm] 1878 1775 os: [android] 1879 1776 1880 - '@oxlint/binding-android-arm64@1.51.0': 1881 - resolution: {integrity: sha512-GtXyBCcH4ti98YdiMNCrpBNGitx87EjEWxevnyhcBK12k/Vu4EzSB45rzSC4fGFUD6sQgeaxItRCEEWeVwPafw==} 1882 - engines: {node: ^20.19.0 || >=22.12.0} 1883 - cpu: [arm64] 1884 - os: [android] 1885 - 1886 1777 '@oxlint/binding-android-arm64@1.55.0': 1887 1778 resolution: {integrity: sha512-P9iWRh+Ugqhg+D7rkc7boHX8o3H2h7YPcZHQIgvVBgnua5tk4LR2L+IBlreZs58/95cd2x3/004p5VsQM9z4SA==} 1888 1779 engines: {node: ^20.19.0 || >=22.12.0} 1889 1780 cpu: [arm64] 1890 1781 os: [android] 1891 1782 1892 - '@oxlint/binding-darwin-arm64@1.51.0': 1893 - resolution: {integrity: sha512-3QJbeYaMHn6Bh2XeBXuITSsbnIctyTjvHf5nRjKYrT9pPeErNIpp5VDEeAXC0CZSwSVTsc8WOSDwgrAI24JolQ==} 1894 - engines: {node: ^20.19.0 || >=22.12.0} 1895 - cpu: [arm64] 1896 - os: [darwin] 1897 - 1898 1783 '@oxlint/binding-darwin-arm64@1.55.0': 1899 1784 resolution: {integrity: sha512-esakkJIt7WFAhT30P/Qzn96ehFpzdZ1mNuzpOb8SCW7lI4oB8VsyQnkSHREM671jfpuBb/o2ppzBCx5l0jpgMA==} 1900 1785 engines: {node: ^20.19.0 || >=22.12.0} 1901 1786 cpu: [arm64] 1902 1787 os: [darwin] 1903 1788 1904 - '@oxlint/binding-darwin-x64@1.51.0': 1905 - resolution: {integrity: sha512-NzErhMaTEN1cY0E8C5APy74lw5VwsNfJfVPBMWPVQLqAbO0k4FFLjvHURvkUL+Y18Wu+8Vs1kbqPh2hjXYA4pg==} 1906 - engines: {node: ^20.19.0 || >=22.12.0} 1907 - cpu: [x64] 1908 - os: [darwin] 1909 - 1910 1789 '@oxlint/binding-darwin-x64@1.55.0': 1911 1790 resolution: {integrity: sha512-xDMFRCCAEK9fOH6As2z8ELsC+VDGSFRHwIKVSilw+xhgLwTDFu37rtmRbmUlx8rRGS6cWKQPTc47AVxAZEVVPQ==} 1912 1791 engines: {node: ^20.19.0 || >=22.12.0} 1913 1792 cpu: [x64] 1914 1793 os: [darwin] 1915 1794 1916 - '@oxlint/binding-freebsd-x64@1.51.0': 1917 - resolution: {integrity: sha512-msAIh3vPAoKoHlOE/oe6Q5C/n9umypv/k81lED82ibrJotn+3YG2Qp1kiR8o/Dg5iOEU97c6tl0utxcyFenpFw==} 1918 - engines: {node: ^20.19.0 || >=22.12.0} 1919 - cpu: [x64] 1920 - os: [freebsd] 1921 - 1922 1795 '@oxlint/binding-freebsd-x64@1.55.0': 1923 1796 resolution: {integrity: sha512-mYZqnwUD7ALCRxGenyLd1uuG+rHCL+OTT6S8FcAbVm/ZT2AZMGjvibp3F6k1SKOb2aeqFATmwRykrE41Q0GWVw==} 1924 1797 engines: {node: ^20.19.0 || >=22.12.0} 1925 1798 cpu: [x64] 1926 1799 os: [freebsd] 1927 1800 1928 - '@oxlint/binding-linux-arm-gnueabihf@1.51.0': 1929 - resolution: {integrity: sha512-CqQPcvqYyMe9ZBot2stjGogEzk1z8gGAngIX7srSzrzexmXixwVxBdFZyxTVM0CjGfDeV+Ru0w25/WNjlMM2Hw==} 1930 - engines: {node: ^20.19.0 || >=22.12.0} 1931 - cpu: [arm] 1932 - os: [linux] 1933 - 1934 1801 '@oxlint/binding-linux-arm-gnueabihf@1.55.0': 1935 1802 resolution: {integrity: sha512-LcX6RYcF9vL9ESGwJW3yyIZ/d/ouzdOKXxCdey1q0XJOW1asrHsIg5MmyKdEBR4plQx+shvYeQne7AzW5f3T1w==} 1936 - engines: {node: ^20.19.0 || >=22.12.0} 1937 - cpu: [arm] 1938 - os: [linux] 1939 - 1940 - '@oxlint/binding-linux-arm-musleabihf@1.51.0': 1941 - resolution: {integrity: sha512-dstrlYQgZMnyOssxSbolGCge/sDbko12N/35RBNuqLpoPbft2aeBidBAb0dvQlyBd9RJ6u8D4o4Eh8Un6iTgyQ==} 1942 1803 engines: {node: ^20.19.0 || >=22.12.0} 1943 1804 cpu: [arm] 1944 1805 os: [linux] ··· 1949 1810 cpu: [arm] 1950 1811 os: [linux] 1951 1812 1952 - '@oxlint/binding-linux-arm64-gnu@1.51.0': 1953 - resolution: {integrity: sha512-QEjUpXO7d35rP1/raLGGbAsBLLGZIzV3ZbeSjqWlD3oRnxpRIZ6iL4o51XQHkconn3uKssc+1VKdtHJ81BBhDA==} 1954 - engines: {node: ^20.19.0 || >=22.12.0} 1955 - cpu: [arm64] 1956 - os: [linux] 1957 - 1958 1813 '@oxlint/binding-linux-arm64-gnu@1.55.0': 1959 1814 resolution: {integrity: sha512-ErLE4XbmcCopA4/CIDiH6J1IAaDOMnf/KSx/aFObs4/OjAAM3sFKWGZ57pNOMxhhyBdcmcXwYymph9GwcpcqgQ==} 1960 1815 engines: {node: ^20.19.0 || >=22.12.0} 1961 1816 cpu: [arm64] 1962 1817 os: [linux] 1963 - 1964 - '@oxlint/binding-linux-arm64-musl@1.51.0': 1965 - resolution: {integrity: sha512-YSJua5irtG4DoMAjUapDTPhkQLHhBIY0G9JqlZS6/SZPzqDkPku/1GdWs0D6h/wyx0Iz31lNCfIaWKBQhzP0wQ==} 1966 - engines: {node: ^20.19.0 || >=22.12.0} 1967 - cpu: [arm64] 1968 - os: [linux] 1818 + libc: [glibc] 1969 1819 1970 1820 '@oxlint/binding-linux-arm64-musl@1.55.0': 1971 1821 resolution: {integrity: sha512-/kp65avi6zZfqEng56TTuhiy3P/3pgklKIdf38yvYeJ9/PgEeRA2A2AqKAKbZBNAqUzrzHhz9jF6j/PZvhJzTQ==} 1972 1822 engines: {node: ^20.19.0 || >=22.12.0} 1973 1823 cpu: [arm64] 1974 1824 os: [linux] 1975 - 1976 - '@oxlint/binding-linux-ppc64-gnu@1.51.0': 1977 - resolution: {integrity: sha512-7L4Wj2IEUNDETKssB9IDYt16T6WlF+X2jgC/hBq3diGHda9vJLpAgb09+D3quFq7TdkFtI7hwz/jmuQmQFPc1Q==} 1978 - engines: {node: ^20.19.0 || >=22.12.0} 1979 - cpu: [ppc64] 1980 - os: [linux] 1825 + libc: [musl] 1981 1826 1982 1827 '@oxlint/binding-linux-ppc64-gnu@1.55.0': 1983 1828 resolution: {integrity: sha512-A6pTdXwcEEwL/nmz0eUJ6WxmxcoIS+97GbH96gikAyre3s5deC7sts38ZVVowjS2QQFuSWkpA4ZmQC0jZSNvJQ==} 1984 1829 engines: {node: ^20.19.0 || >=22.12.0} 1985 1830 cpu: [ppc64] 1986 1831 os: [linux] 1987 - 1988 - '@oxlint/binding-linux-riscv64-gnu@1.51.0': 1989 - resolution: {integrity: sha512-cBUHqtOXy76G41lOB401qpFoKx1xq17qYkhWrLSM7eEjiHM9sOtYqpr6ZdqCnN9s6ZpzudX4EkeHOFH2E9q0vA==} 1990 - engines: {node: ^20.19.0 || >=22.12.0} 1991 - cpu: [riscv64] 1992 - os: [linux] 1832 + libc: [glibc] 1993 1833 1994 1834 '@oxlint/binding-linux-riscv64-gnu@1.55.0': 1995 1835 resolution: {integrity: sha512-clj0lnIN+V52G9tdtZl0LbdTSurnZ1NZj92Je5X4lC7gP5jiCSW+Y/oiDiSauBAD4wrHt2S7nN3pA0zfKYK/6Q==} 1996 1836 engines: {node: ^20.19.0 || >=22.12.0} 1997 1837 cpu: [riscv64] 1998 1838 os: [linux] 1999 - 2000 - '@oxlint/binding-linux-riscv64-musl@1.51.0': 2001 - resolution: {integrity: sha512-WKbg8CysgZcHfZX0ixQFBRSBvFZUHa3SBnEjHY2FVYt2nbNJEjzTxA3ZR5wMU0NOCNKIAFUFvAh5/XJKPRJuJg==} 2002 - engines: {node: ^20.19.0 || >=22.12.0} 2003 - cpu: [riscv64] 2004 - os: [linux] 1839 + libc: [glibc] 2005 1840 2006 1841 '@oxlint/binding-linux-riscv64-musl@1.55.0': 2007 1842 resolution: {integrity: sha512-NNu08pllN5x/O94/sgR3DA8lbrGBnTHsINZZR0hcav1sj79ksTiKKm1mRzvZvacwQ0hUnGinFo+JO75ok2PxYg==} 2008 1843 engines: {node: ^20.19.0 || >=22.12.0} 2009 1844 cpu: [riscv64] 2010 1845 os: [linux] 2011 - 2012 - '@oxlint/binding-linux-s390x-gnu@1.51.0': 2013 - resolution: {integrity: sha512-N1QRUvJTxqXNSu35YOufdjsAVmKVx5bkrggOWAhTWBc3J4qjcBwr1IfyLh/6YCg8sYRSR1GraldS9jUgJL/U4A==} 2014 - engines: {node: ^20.19.0 || >=22.12.0} 2015 - cpu: [s390x] 2016 - os: [linux] 1846 + libc: [musl] 2017 1847 2018 1848 '@oxlint/binding-linux-s390x-gnu@1.55.0': 2019 1849 resolution: {integrity: sha512-BvfQz3PRlWZRoEZ17dZCqgQsMRdpzGZomJkVATwCIGhHVVeHJMQdmdXPSjcT1DCNUrOjXnVyj1RGDj5+/Je2+Q==} 2020 1850 engines: {node: ^20.19.0 || >=22.12.0} 2021 1851 cpu: [s390x] 2022 1852 os: [linux] 2023 - 2024 - '@oxlint/binding-linux-x64-gnu@1.51.0': 2025 - resolution: {integrity: sha512-e0Mz0DizsCoqNIjeOg6OUKe8JKJWZ5zZlwsd05Bmr51Jo3AOL4UJnPvwKumr4BBtBrDZkCmOLhCvDGm95nJM2g==} 2026 - engines: {node: ^20.19.0 || >=22.12.0} 2027 - cpu: [x64] 2028 - os: [linux] 1853 + libc: [glibc] 2029 1854 2030 1855 '@oxlint/binding-linux-x64-gnu@1.55.0': 2031 1856 resolution: {integrity: sha512-ngSOoFCSBMKVQd24H8zkbcBNc7EHhjnF1sv3mC9NNXQ/4rRjI/4Dj9+9XoDZeFEkF1SX1COSBXF1b2Pr9rqdEw==} 2032 1857 engines: {node: ^20.19.0 || >=22.12.0} 2033 1858 cpu: [x64] 2034 1859 os: [linux] 2035 - 2036 - '@oxlint/binding-linux-x64-musl@1.51.0': 2037 - resolution: {integrity: sha512-wD8HGTWhYBKXvRDvoBVB1y+fEYV01samhWQSy1Zkxq2vpezvMnjaFKRuiP6tBNITLGuffbNDEXOwcAhJ3gI5Ug==} 2038 - engines: {node: ^20.19.0 || >=22.12.0} 2039 - cpu: [x64] 2040 - os: [linux] 1860 + libc: [glibc] 2041 1861 2042 1862 '@oxlint/binding-linux-x64-musl@1.55.0': 2043 1863 resolution: {integrity: sha512-BDpP7W8GlaG7BR6QjGZAleYzxoyKc/D24spZIF2mB3XsfALQJJT/OBmP8YpeTb1rveFSBHzl8T7l0aqwkWNdGA==} 2044 1864 engines: {node: ^20.19.0 || >=22.12.0} 2045 1865 cpu: [x64] 2046 1866 os: [linux] 2047 - 2048 - '@oxlint/binding-openharmony-arm64@1.51.0': 2049 - resolution: {integrity: sha512-5NSwQ2hDEJ0GPXqikjWtwzgAQCsS7P9aLMNenjjKa+gknN3lTCwwwERsT6lKXSirfU3jLjexA2XQvQALh5h27w==} 2050 - engines: {node: ^20.19.0 || >=22.12.0} 2051 - cpu: [arm64] 2052 - os: [openharmony] 1867 + libc: [musl] 2053 1868 2054 1869 '@oxlint/binding-openharmony-arm64@1.55.0': 2055 1870 resolution: {integrity: sha512-PS6GFvmde/pc3fCA2Srt51glr8Lcxhpf6WIBFfLphndjRrD34NEcses4TSxQrEcxYo6qVywGfylM0ZhSCF2gGA==} ··· 2057 1872 cpu: [arm64] 2058 1873 os: [openharmony] 2059 1874 2060 - '@oxlint/binding-win32-arm64-msvc@1.51.0': 2061 - resolution: {integrity: sha512-JEZyah1M0RHMw8d+jjSSJmSmO8sABA1J1RtrHYujGPeCkYg1NeH0TGuClpe2h5QtioRTaF57y/TZfn/2IFV6fA==} 2062 - engines: {node: ^20.19.0 || >=22.12.0} 2063 - cpu: [arm64] 2064 - os: [win32] 2065 - 2066 1875 '@oxlint/binding-win32-arm64-msvc@1.55.0': 2067 1876 resolution: {integrity: sha512-P6JcLJGs/q1UOvDLzN8otd9JsH4tsuuPDv+p7aHqHM3PrKmYdmUvkNj4K327PTd35AYcznOCN+l4ZOaq76QzSw==} 2068 1877 engines: {node: ^20.19.0 || >=22.12.0} 2069 1878 cpu: [arm64] 2070 1879 os: [win32] 2071 1880 2072 - '@oxlint/binding-win32-ia32-msvc@1.51.0': 2073 - resolution: {integrity: sha512-q3cEoKH6kwjz/WRyHwSf0nlD2F5Qw536kCXvmlSu+kaShzgrA0ojmh45CA81qL+7udfCaZL2SdKCZlLiGBVFlg==} 2074 - engines: {node: ^20.19.0 || >=22.12.0} 2075 - cpu: [ia32] 2076 - os: [win32] 2077 - 2078 1881 '@oxlint/binding-win32-ia32-msvc@1.55.0': 2079 1882 resolution: {integrity: sha512-gzkk4zE2zsE+WmRxFOiAZHpCpUNDFytEakqNXoNHW+PnYEOTPKDdW6nrzgSeTbGKVPXNAKQnRnMgrh7+n3Xueg==} 2080 1883 engines: {node: ^20.19.0 || >=22.12.0} 2081 1884 cpu: [ia32] 2082 1885 os: [win32] 2083 1886 2084 - '@oxlint/binding-win32-x64-msvc@1.51.0': 2085 - resolution: {integrity: sha512-Q14+fOGb9T28nWF/0EUsYqERiRA7cl1oy4TJrGmLaqhm+aO2cV+JttboHI3CbdeMCAyDI1+NoSlrM7Melhp/cw==} 2086 - engines: {node: ^20.19.0 || >=22.12.0} 2087 - cpu: [x64] 2088 - os: [win32] 2089 - 2090 1887 '@oxlint/binding-win32-x64-msvc@1.55.0': 2091 1888 resolution: {integrity: sha512-ZFALNow2/og75gvYzNP7qe+rREQ5xunktwA+lgykoozHZ6hw9bqg4fn5j2UvG4gIn1FXqrZHkOAXuPf5+GOYTQ==} 2092 1889 engines: {node: ^20.19.0 || >=22.12.0} ··· 2122 1919 engines: {node: '>= 10.0.0'} 2123 1920 cpu: [arm] 2124 1921 os: [linux] 1922 + libc: [glibc] 2125 1923 2126 1924 '@parcel/watcher-linux-arm-musl@2.5.6': 2127 1925 resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} 2128 1926 engines: {node: '>= 10.0.0'} 2129 1927 cpu: [arm] 2130 1928 os: [linux] 1929 + libc: [musl] 2131 1930 2132 1931 '@parcel/watcher-linux-arm64-glibc@2.5.6': 2133 1932 resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} 2134 1933 engines: {node: '>= 10.0.0'} 2135 1934 cpu: [arm64] 2136 1935 os: [linux] 1936 + libc: [glibc] 2137 1937 2138 1938 '@parcel/watcher-linux-arm64-musl@2.5.6': 2139 1939 resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} 2140 1940 engines: {node: '>= 10.0.0'} 2141 1941 cpu: [arm64] 2142 1942 os: [linux] 1943 + libc: [musl] 2143 1944 2144 1945 '@parcel/watcher-linux-x64-glibc@2.5.6': 2145 1946 resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} 2146 1947 engines: {node: '>= 10.0.0'} 2147 1948 cpu: [x64] 2148 1949 os: [linux] 1950 + libc: [glibc] 2149 1951 2150 1952 '@parcel/watcher-linux-x64-musl@2.5.6': 2151 1953 resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} 2152 1954 engines: {node: '>= 10.0.0'} 2153 1955 cpu: [x64] 2154 1956 os: [linux] 1957 + libc: [musl] 2155 1958 2156 1959 '@parcel/watcher-win32-arm64@2.5.6': 2157 1960 resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} ··· 2387 2190 resolution: {integrity: sha512-XCBR/9WHJ0cpezuunHMZjuFMl4KqUo7eiFwzrQrvm7lTXt0EBd3No8UY+9OyzXpDfreGEMMtxmaLZ+ksVw378g==} 2388 2191 engines: {node: '>=18.17.0', npm: '>=9.5.0'} 2389 2192 2390 - '@rolldown/binding-android-arm64@1.0.0-rc.3': 2391 - resolution: {integrity: sha512-0T1k9FinuBZ/t7rZ8jN6OpUKPnUjNdYHoj/cESWrQ3ZraAJ4OMm6z7QjSfCxqj8mOp9kTKc1zHK3kGz5vMu+nQ==} 2392 - engines: {node: ^20.19.0 || >=22.12.0} 2393 - cpu: [arm64] 2394 - os: [android] 2395 - 2396 2193 '@rolldown/binding-android-arm64@1.0.0-rc.6': 2397 2194 resolution: {integrity: sha512-kvjTSWGcrv+BaR2vge57rsKiYdVR8V8CoS0vgKrc570qRBfty4bT+1X0z3j2TaVV+kAYzA0PjeB9+mdZyqUZlg==} 2398 2195 engines: {node: ^20.19.0 || >=22.12.0} ··· 2405 2202 cpu: [arm64] 2406 2203 os: [android] 2407 2204 2408 - '@rolldown/binding-darwin-arm64@1.0.0-rc.3': 2409 - resolution: {integrity: sha512-JWWLzvcmc/3pe7qdJqPpuPk91SoE/N+f3PcWx/6ZwuyDVyungAEJPvKm/eEldiDdwTmaEzWfIR+HORxYWrCi1A==} 2410 - engines: {node: ^20.19.0 || >=22.12.0} 2205 + '@rolldown/binding-darwin-arm64@0.15.1': 2206 + resolution: {integrity: sha512-eHszEW3Tpf2MNCOB3Qq+ypXBJl5MY+QNmb32AfUkcjGLtS6A84CkzjLLRBCIAJJ07WR0dD2EbOEjFXyp9JpdxA==} 2411 2207 cpu: [arm64] 2412 2208 os: [darwin] 2413 2209 ··· 2423 2219 cpu: [arm64] 2424 2220 os: [darwin] 2425 2221 2426 - '@rolldown/binding-darwin-x64@1.0.0-rc.3': 2427 - resolution: {integrity: sha512-MTakBxfx3tde5WSmbHxuqlDsIW0EzQym+PJYGF4P6lG2NmKzi128OGynoFUqoD5ryCySEY85dug4v+LWGBElIw==} 2428 - engines: {node: ^20.19.0 || >=22.12.0} 2222 + '@rolldown/binding-darwin-x64@0.15.1': 2223 + resolution: {integrity: sha512-0IczkPBKzftwezo19wR/W7b2uXrPIgU5sDpic2DGndqZwcqtO0LBg1SvRoTUFzs0sSqIK/e2fo0VUzOe1wShLQ==} 2429 2224 cpu: [x64] 2430 2225 os: [darwin] 2431 2226 ··· 2441 2236 cpu: [x64] 2442 2237 os: [darwin] 2443 2238 2444 - '@rolldown/binding-freebsd-x64@1.0.0-rc.3': 2445 - resolution: {integrity: sha512-jje3oopyOLs7IwfvXoS6Lxnmie5JJO7vW29fdGFu5YGY1EDbVDhD+P9vDihqS5X6fFiqL3ZQZCMBg6jyHkSVww==} 2446 - engines: {node: ^20.19.0 || >=22.12.0} 2239 + '@rolldown/binding-freebsd-x64@0.15.1': 2240 + resolution: {integrity: sha512-yad0CKnx9H3NQZCfV4gTzsfTQxqFEJvJSzyXxxA/RhGa6nq/3S/JugQAis37xjaVmQ39NMRrRQ7NokbagHlJVA==} 2447 2241 cpu: [x64] 2448 2242 os: [freebsd] 2449 2243 ··· 2459 2253 cpu: [x64] 2460 2254 os: [freebsd] 2461 2255 2462 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': 2463 - resolution: {integrity: sha512-A0n8P3hdLAaqzSFrQoA42p23ZKBYQOw+8EH5r15Sa9X1kD9/JXe0YT2gph2QTWvdr0CVK2BOXiK6ENfy6DXOag==} 2464 - engines: {node: ^20.19.0 || >=22.12.0} 2256 + '@rolldown/binding-linux-arm-gnueabihf@0.15.1': 2257 + resolution: {integrity: sha512-B4YuHSz18yvZ7ng0qy7ZhzWe+IyeZ1EUAIvBH7O7Fg69oDUp3TqCkh/nnY7mLNPoA2BCwwweIMAOX7U778J1Ww==} 2465 2258 cpu: [arm] 2466 2259 os: [linux] 2467 2260 ··· 2477 2270 cpu: [arm] 2478 2271 os: [linux] 2479 2272 2480 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': 2481 - resolution: {integrity: sha512-kWXkoxxarYISBJ4bLNf5vFkEbb4JvccOwxWDxuK9yee8lg5XA7OpvlTptfRuwEvYcOZf+7VS69Uenpmpyo5Bjw==} 2482 - engines: {node: ^20.19.0 || >=22.12.0} 2273 + '@rolldown/binding-linux-arm64-gnu@0.15.1': 2274 + resolution: {integrity: sha512-2v4ZE/a75XA96f7Hmw8RibVIHktpREHTvAG/jG+0718UAVl0XS1o3gCcfJHOzq0vxRM6JrJxL0An6Blqx0zo/g==} 2483 2275 cpu: [arm64] 2484 2276 os: [linux] 2277 + libc: [glibc] 2485 2278 2486 2279 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': 2487 2280 resolution: {integrity: sha512-ZsGzbNETxPodGlLTYHaCSGVhNN/rvkMDCJYHdT7PZr5jFJRmBfmDi2awhF64Dt2vxrJqY6VeeYSgOzEbHRsb7Q==} 2488 2281 engines: {node: ^20.19.0 || >=22.12.0} 2489 2282 cpu: [arm64] 2490 2283 os: [linux] 2284 + libc: [glibc] 2491 2285 2492 2286 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': 2493 2287 resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==} 2494 2288 engines: {node: ^20.19.0 || >=22.12.0} 2495 2289 cpu: [arm64] 2496 2290 os: [linux] 2291 + libc: [glibc] 2497 2292 2498 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': 2499 - resolution: {integrity: sha512-Z03/wrqau9Bicfgb3Dbs6SYTHliELk2PM2LpG2nFd+cGupTMF5kanLEcj2vuuJLLhptNyS61rtk7SOZ+lPsTUA==} 2500 - engines: {node: ^20.19.0 || >=22.12.0} 2293 + '@rolldown/binding-linux-arm64-musl@0.15.1': 2294 + resolution: {integrity: sha512-ICZANEBNJxpaZPspK3Xd5+pG6CO/0pEOMPJEBiUi67Gy6NexyN9ILPwXoF3ZWEmBMizcURt52xkqoUuEGpJMQg==} 2501 2295 cpu: [arm64] 2502 2296 os: [linux] 2297 + libc: [musl] 2503 2298 2504 2299 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': 2505 2300 resolution: {integrity: sha512-elPpdevtCdUOqziemR86C4CSCr/5sUxalzDrf/CJdMT+kZt2C556as++qHikNOz0vuFf52h+GJNXZM08eWgGPQ==} 2506 2301 engines: {node: ^20.19.0 || >=22.12.0} 2507 2302 cpu: [arm64] 2508 2303 os: [linux] 2304 + libc: [musl] 2509 2305 2510 2306 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': 2511 2307 resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} 2512 2308 engines: {node: ^20.19.0 || >=22.12.0} 2513 2309 cpu: [arm64] 2514 2310 os: [linux] 2311 + libc: [musl] 2515 2312 2516 2313 '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': 2517 2314 resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} 2518 2315 engines: {node: ^20.19.0 || >=22.12.0} 2519 2316 cpu: [ppc64] 2520 2317 os: [linux] 2318 + libc: [glibc] 2521 2319 2522 2320 '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': 2523 2321 resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} 2524 2322 engines: {node: ^20.19.0 || >=22.12.0} 2525 2323 cpu: [s390x] 2526 2324 os: [linux] 2325 + libc: [glibc] 2527 2326 2528 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': 2529 - resolution: {integrity: sha512-iSXXZsQp08CSilff/DCTFZHSVEpEwdicV3W8idHyrByrcsRDVh9sGC3sev6d8BygSGj3vt8GvUKBPCoyMA4tgQ==} 2530 - engines: {node: ^20.19.0 || >=22.12.0} 2327 + '@rolldown/binding-linux-x64-gnu@0.15.1': 2328 + resolution: {integrity: sha512-PldpjbytgMM0eKmnRAvKM6F4bwpRS3aoFr5AAOtbdIxC08ABG/ab+xXuwjdVyo2xxM3nTItbma76verU8lkCgA==} 2531 2329 cpu: [x64] 2532 2330 os: [linux] 2331 + libc: [glibc] 2533 2332 2534 2333 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': 2535 2334 resolution: {integrity: sha512-IBwXsf56o3xhzAyaZxdM1CX8UFiBEUFCjiVUgny67Q8vPIqkjzJj0YKhd3TbBHanuxThgBa59f6Pgutg2OGk5A==} 2536 2335 engines: {node: ^20.19.0 || >=22.12.0} 2537 2336 cpu: [x64] 2538 2337 os: [linux] 2338 + libc: [glibc] 2539 2339 2540 2340 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': 2541 2341 resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} 2542 2342 engines: {node: ^20.19.0 || >=22.12.0} 2543 2343 cpu: [x64] 2544 2344 os: [linux] 2345 + libc: [glibc] 2545 2346 2546 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': 2547 - resolution: {integrity: sha512-qaj+MFudtdCv9xZo9znFvkgoajLdc+vwf0Kz5N44g+LU5XMe+IsACgn3UG7uTRlCCvhMAGXm1XlpEA5bZBrOcw==} 2548 - engines: {node: ^20.19.0 || >=22.12.0} 2347 + '@rolldown/binding-linux-x64-musl@0.15.1': 2348 + resolution: {integrity: sha512-ydIgDOKQi92RQjgFFuMeO09IWe0fWLcmhv7opAjutcGwEgqediamlhgmDW2eRJTqHwhT56zMVpivvejMR2KT8g==} 2549 2349 cpu: [x64] 2550 2350 os: [linux] 2351 + libc: [musl] 2551 2352 2552 2353 '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': 2553 2354 resolution: {integrity: sha512-vOk7G8V9Zm+8a6PL6JTpCea61q491oYlGtO6CvnsbhNLlKdf0bbCPytFzGQhYmCKZDKkEbmnkcIprTEGCURnwg==} 2554 2355 engines: {node: ^20.19.0 || >=22.12.0} 2555 2356 cpu: [x64] 2556 2357 os: [linux] 2358 + libc: [musl] 2557 2359 2558 2360 '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': 2559 2361 resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} 2560 2362 engines: {node: ^20.19.0 || >=22.12.0} 2561 2363 cpu: [x64] 2562 2364 os: [linux] 2563 - 2564 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': 2565 - resolution: {integrity: sha512-U662UnMETyjT65gFmG9ma+XziENrs7BBnENi/27swZPYagubfHRirXHG2oMl+pEax2WvO7Kb9gHZmMakpYqBHQ==} 2566 - engines: {node: ^20.19.0 || >=22.12.0} 2567 - cpu: [arm64] 2568 - os: [openharmony] 2365 + libc: [musl] 2569 2366 2570 2367 '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': 2571 2368 resolution: {integrity: sha512-ASjEDI4MRv7XCQb2JVaBzfEYO98JKCGrAgoW6M03fJzH/ilCnC43Mb3ptB9q/lzsaahoJyIBoAGKAYEjUvpyvQ==} ··· 2579 2376 cpu: [arm64] 2580 2377 os: [openharmony] 2581 2378 2582 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': 2583 - resolution: {integrity: sha512-gekrQ3Q2HiC1T5njGyuUJoGpK/l6B/TNXKed3fZXNf9YRTJn3L5MOZsFBn4bN2+UX+8+7hgdlTcEsexX988G4g==} 2584 - engines: {node: '>=14.0.0'} 2379 + '@rolldown/binding-wasm32-wasi@0.15.1': 2380 + resolution: {integrity: sha512-tNE0tEX+h0WmFx2hL3s1zZOrJtB3hVJkyrMMdyCGwB+ockaeBpinqLsbWzd130RODODLXnMIDXKZcFA8yATMpg==} 2381 + engines: {node: '>=14.21.3'} 2585 2382 cpu: [wasm32] 2586 2383 2587 2384 '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': ··· 2594 2391 engines: {node: '>=14.0.0'} 2595 2392 cpu: [wasm32] 2596 2393 2597 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': 2598 - resolution: {integrity: sha512-85y5JifyMgs8m5K2XzR/VDsapKbiFiohl7s5lEj7nmNGO0pkTXE7q6TQScei96BNAsoK7JC3pA7ukA8WRHVJpg==} 2599 - engines: {node: ^20.19.0 || >=22.12.0} 2394 + '@rolldown/binding-win32-arm64-msvc@0.15.1': 2395 + resolution: {integrity: sha512-/t1r1tT95cZ2Qt+GO+9pCmgwSNzBRQnX9TL+FJOi9js2PYTnftGq7oU7/VbITpAvwd3bsuWoVncCBnOhgRjxRw==} 2600 2396 cpu: [arm64] 2601 2397 os: [win32] 2602 2398 ··· 2612 2408 cpu: [arm64] 2613 2409 os: [win32] 2614 2410 2615 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': 2616 - resolution: {integrity: sha512-a4VUQZH7LxGbUJ3qJ/TzQG8HxdHvf+jOnqf7B7oFx1TEBm+j2KNL2zr5SQ7wHkNAcaPevF6gf9tQnVBnC4mD+A==} 2617 - engines: {node: ^20.19.0 || >=22.12.0} 2411 + '@rolldown/binding-win32-ia32-msvc@0.15.1': 2412 + resolution: {integrity: sha512-x/IImodHRMXeUVUg/BslxYfbBCVTyR1vToEkBiyDt7QVdWBOVAnn/hHOwDRNXBsLLhNB8s74EGzwCihC0TZRgw==} 2413 + cpu: [ia32] 2414 + os: [win32] 2415 + 2416 + '@rolldown/binding-win32-x64-msvc@0.15.1': 2417 + resolution: {integrity: sha512-8h55cfyhl2WVXZz+FRFhcBAS7cZUZscZ9Uu5lTq+21+wC7LShiBTe8slbACZDNShSW1vskx/bvOQ4PienU1ovA==} 2618 2418 cpu: [x64] 2619 2419 os: [win32] 2620 2420 ··· 2630 2430 cpu: [x64] 2631 2431 os: [win32] 2632 2432 2433 + '@rolldown/plugin-babel@0.2.1': 2434 + resolution: {integrity: sha512-pHDVHqFv26JNC8I500JZ0H4h1kvSyiE3V9gjEO9pRAgD1KrIdJvcHCokV6f7gG7Rx4vMOD11V8VUOpqdyGbKBw==} 2435 + engines: {node: '>=22.12.0 || ^24.0.0'} 2436 + peerDependencies: 2437 + '@babel/core': ^7.29.0 || ^8.0.0-rc.1 2438 + '@babel/plugin-transform-runtime': ^7.29.0 || ^8.0.0-rc.1 2439 + '@babel/runtime': ^7.27.0 || ^8.0.0-rc.1 2440 + rolldown: ^1.0.0-rc.5 2441 + vite: ^8.0.0 2442 + peerDependenciesMeta: 2443 + '@babel/plugin-transform-runtime': 2444 + optional: true 2445 + '@babel/runtime': 2446 + optional: true 2447 + vite: 2448 + optional: true 2449 + 2633 2450 '@rolldown/pluginutils@1.0.0-rc.2': 2634 2451 resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==} 2635 - 2636 - '@rolldown/pluginutils@1.0.0-rc.3': 2637 - resolution: {integrity: sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==} 2638 2452 2639 2453 '@rolldown/pluginutils@1.0.0-rc.6': 2640 2454 resolution: {integrity: sha512-Y0+JT8Mi1mmW08K6HieG315XNRu4L0rkfCpA364HtytjgiqYnMYRdFPcxRl+BQQqNXzecL2S9nii+RUpO93XIA==} 2641 2455 2456 + '@rolldown/pluginutils@1.0.0-rc.7': 2457 + resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} 2458 + 2642 2459 '@rolldown/pluginutils@1.0.0-rc.9': 2643 2460 resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} 2644 2461 ··· 2730 2547 engines: {node: '>= 20'} 2731 2548 cpu: [arm64] 2732 2549 os: [linux] 2550 + libc: [glibc] 2733 2551 2734 2552 '@tailwindcss/oxide-linux-arm64-musl@4.2.1': 2735 2553 resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} 2736 2554 engines: {node: '>= 20'} 2737 2555 cpu: [arm64] 2738 2556 os: [linux] 2557 + libc: [musl] 2739 2558 2740 2559 '@tailwindcss/oxide-linux-x64-gnu@4.2.1': 2741 2560 resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} 2742 2561 engines: {node: '>= 20'} 2743 2562 cpu: [x64] 2744 2563 os: [linux] 2564 + libc: [glibc] 2745 2565 2746 2566 '@tailwindcss/oxide-linux-x64-musl@4.2.1': 2747 2567 resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} 2748 2568 engines: {node: '>= 20'} 2749 2569 cpu: [x64] 2750 2570 os: [linux] 2571 + libc: [musl] 2751 2572 2752 2573 '@tailwindcss/oxide-wasm32-wasi@4.2.1': 2753 2574 resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} ··· 2817 2638 '@types/babel__traverse@7.28.0': 2818 2639 resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} 2819 2640 2820 - '@types/bun@1.3.10': 2821 - resolution: {integrity: sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ==} 2822 - 2823 2641 '@types/chai@5.2.3': 2824 2642 resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 2825 2643 2826 2644 '@types/deep-eql@4.0.2': 2827 2645 resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 2828 - 2829 - '@types/esrecurse@4.3.1': 2830 - resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} 2831 2646 2832 2647 '@types/estree@1.0.8': 2833 2648 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} ··· 2835 2650 '@types/hast@3.0.4': 2836 2651 resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} 2837 2652 2838 - '@types/jsesc@2.5.1': 2839 - resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==} 2840 - 2841 - '@types/json-schema@7.0.15': 2842 - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 2843 - 2844 2653 '@types/linkify-it@5.0.0': 2845 2654 resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} 2846 2655 ··· 2890 2699 '@types/web-bluetooth@0.0.21': 2891 2700 resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} 2892 2701 2893 - '@typescript-eslint/eslint-plugin@8.57.0': 2894 - resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} 2895 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2896 - peerDependencies: 2897 - '@typescript-eslint/parser': ^8.57.0 2898 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 2899 - typescript: '>=4.8.4 <6.0.0' 2900 - 2901 - '@typescript-eslint/parser@8.57.0': 2902 - resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} 2903 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2904 - peerDependencies: 2905 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 2906 - typescript: '>=4.8.4 <6.0.0' 2907 - 2908 - '@typescript-eslint/project-service@8.57.0': 2909 - resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} 2910 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2911 - peerDependencies: 2912 - typescript: '>=4.8.4 <6.0.0' 2913 - 2914 - '@typescript-eslint/scope-manager@8.57.0': 2915 - resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} 2916 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2917 - 2918 - '@typescript-eslint/tsconfig-utils@8.57.0': 2919 - resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} 2920 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2921 - peerDependencies: 2922 - typescript: '>=4.8.4 <6.0.0' 2923 - 2924 - '@typescript-eslint/type-utils@8.57.0': 2925 - resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} 2926 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2927 - peerDependencies: 2928 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 2929 - typescript: '>=4.8.4 <6.0.0' 2930 - 2931 - '@typescript-eslint/types@8.57.0': 2932 - resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} 2933 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2934 - 2935 - '@typescript-eslint/typescript-estree@8.57.0': 2936 - resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} 2937 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2938 - peerDependencies: 2939 - typescript: '>=4.8.4 <6.0.0' 2940 - 2941 - '@typescript-eslint/utils@8.57.0': 2942 - resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} 2943 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2944 - peerDependencies: 2945 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 2946 - typescript: '>=4.8.4 <6.0.0' 2947 - 2948 - '@typescript-eslint/visitor-keys@8.57.0': 2949 - resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} 2950 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2951 - 2952 2702 '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260313.1': 2953 2703 resolution: {integrity: sha512-/fU2IvlRQWOy63xSzkejW7tTQpsL5dQ/ATIsJFlK75vS941CnNJY8dAx3iQYLkHMhS45hhCIR+bbJPRaacq/fw==} 2954 2704 cpu: [arm64] ··· 3060 2810 peerDependencies: 3061 2811 vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 || ^8.0.0-0 3062 2812 3063 - '@uwu/flora-sdk@0.0.0': 3064 - resolution: {integrity: sha512-nhKm15f9MIqdK0gsyd5b76ji2+liXWmp5ZGZUO3RYVwpwYuylHV/KFN+GSkdjLFqPoPs8DpVsjjLlY3nq91h8Q==} 3065 - 3066 - '@vitejs/plugin-react@5.2.0': 3067 - resolution: {integrity: sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==} 2813 + '@vitejs/plugin-react@6.0.1': 2814 + resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==} 3068 2815 engines: {node: ^20.19.0 || >=22.12.0} 3069 2816 peerDependencies: 3070 - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 2817 + '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0 2818 + babel-plugin-react-compiler: ^1.0.0 2819 + vite: ^8.0.0 2820 + peerDependenciesMeta: 2821 + '@rolldown/plugin-babel': 2822 + optional: true 2823 + babel-plugin-react-compiler: 2824 + optional: true 3071 2825 3072 2826 '@vitejs/plugin-vue@6.0.5': 3073 2827 resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==} ··· 3153 2907 engines: {node: ^20.19.0 || >=22.12.0} 3154 2908 cpu: [arm64] 3155 2909 os: [linux] 2910 + libc: [glibc] 3156 2911 3157 2912 '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.11': 3158 2913 resolution: {integrity: sha512-rkaKCGq/CFML2M7c0ixUOuhE6qi961x84/ZFQhkUy2MJw3RP7R/M1BDyWr2qEq20SgRWLkffcWMni3P2JnmrBw==} 3159 2914 engines: {node: ^20.19.0 || >=22.12.0} 3160 2915 cpu: [x64] 3161 2916 os: [linux] 2917 + libc: [glibc] 3162 2918 3163 2919 '@voidzero-dev/vite-plus-test@0.1.11': 3164 2920 resolution: {integrity: sha512-3kBfi/LyPOGnLCmvYtgM5GZVAyiJiYjgdm9Fu9WLLl56zcSljj0TBG19eaKY6v/j2VJ+7o80n/A/MPz46lzMFA==} ··· 3197 2953 cpu: [x64] 3198 2954 os: [win32] 3199 2955 3200 - '@volar/language-core@2.4.27': 3201 - resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} 3202 - 3203 - '@volar/source-map@2.4.27': 3204 - resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} 3205 - 3206 - '@volar/typescript@2.4.27': 3207 - resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} 3208 - 3209 2956 '@vscode/iconv-lite-umd@0.7.1': 3210 2957 resolution: {integrity: sha512-tK6k0DXFHW7q5+GGuGZO+phpAqpxO4WXl+BLc/8/uOk3RsM2ssAL3CQUQDb1TGfwltjsauhN6S4ghYZzs4sPFw==} 3211 2958 3212 - '@vue/compiler-core@3.5.27': 3213 - resolution: {integrity: sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==} 3214 - 3215 2959 '@vue/compiler-core@3.5.30': 3216 2960 resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==} 3217 - 3218 - '@vue/compiler-dom@3.5.27': 3219 - resolution: {integrity: sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==} 3220 2961 3221 2962 '@vue/compiler-dom@3.5.30': 3222 2963 resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==} ··· 3235 2976 3236 2977 '@vue/devtools-shared@8.1.0': 3237 2978 resolution: {integrity: sha512-h8uCb4Qs8UT8VdTT5yjY6tOJ//qH7EpxToixR0xqejR55t5OdISIg7AJ7eBkhBs8iu1qG5gY3QQNN1DF1EelAA==} 3238 - 3239 - '@vue/language-core@3.2.4': 3240 - resolution: {integrity: sha512-bqBGuSG4KZM45KKTXzGtoCl9cWju5jsaBKaJJe3h5hRAAWpZUuj5G+L+eI01sPIkm4H6setKRlw7E85wLdDNew==} 3241 2979 3242 2980 '@vue/reactivity@3.5.30': 3243 2981 resolution: {integrity: sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==} ··· 3318 3056 resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} 3319 3057 engines: {node: '>= 0.6'} 3320 3058 3321 - acorn-jsx@5.3.2: 3322 - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 3323 - peerDependencies: 3324 - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 3325 - 3326 3059 acorn@8.16.0: 3327 3060 resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} 3328 3061 engines: {node: '>=0.4.0'} ··· 3343 3076 peerDependenciesMeta: 3344 3077 ajv: 3345 3078 optional: true 3346 - 3347 - ajv@6.14.0: 3348 - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} 3349 3079 3350 3080 ajv@8.18.0: 3351 3081 resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} 3352 3082 3353 - alien-signals@3.1.2: 3354 - resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} 3355 - 3356 3083 ansi-colors@4.1.3: 3357 3084 resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 3358 3085 engines: {node: '>=6'} ··· 3376 3103 argparse@2.0.1: 3377 3104 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 3378 3105 3106 + args-tokenizer@0.3.0: 3107 + resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} 3108 + 3379 3109 assertion-error@2.0.1: 3380 3110 resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 3381 3111 engines: {node: '>=12'} 3382 - 3383 - ast-kit@3.0.0-beta.1: 3384 - resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==} 3385 - engines: {node: '>=20.19.0'} 3386 3112 3387 3113 ast-types@0.16.1: 3388 3114 resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} ··· 3414 3140 birpc@2.9.0: 3415 3141 resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} 3416 3142 3417 - birpc@4.0.0: 3418 - resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} 3419 - 3420 3143 blake3-wasm@2.1.5: 3421 3144 resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} 3422 3145 ··· 3440 3163 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 3441 3164 hasBin: true 3442 3165 3443 - bun-types@1.3.10: 3444 - resolution: {integrity: sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg==} 3166 + bumpp@11.0.0: 3167 + resolution: {integrity: sha512-rxW8H4VIB+KvnNDZ87y4tyktHydN4wzmXHYJ8CfzhWl8yKd6yuQMPcV78Hrz47udmBssjrN5wQo+JLmyU94gaA==} 3168 + engines: {node: '>=20.19.0'} 3169 + hasBin: true 3445 3170 3446 3171 bundle-name@4.1.0: 3447 3172 resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} ··· 3462 3187 cac@6.7.14: 3463 3188 resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 3464 3189 engines: {node: '>=8'} 3190 + 3191 + cac@7.0.0: 3192 + resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} 3193 + engines: {node: '>=20.19.0'} 3465 3194 3466 3195 call-bind-apply-helpers@1.0.2: 3467 3196 resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} ··· 3659 3388 babel-plugin-macros: 3660 3389 optional: true 3661 3390 3662 - deep-is@0.1.4: 3663 - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 3664 - 3665 3391 deepmerge@4.3.1: 3666 3392 resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 3667 3393 engines: {node: '>=0.10.0'} ··· 3715 3441 resolution: {integrity: sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==} 3716 3442 engines: {node: '>=12'} 3717 3443 3718 - dprint@0.51.1: 3719 - resolution: {integrity: sha512-CEx+wYARxLAe9o7RCZ77GKae6DF7qjn5Rd98xbWdA3hB4PFBr+kHwLANmNHscNumBAIrCg5ZJj/Kz+OYbJ+GBA==} 3720 - hasBin: true 3721 - 3722 - dts-resolver@2.1.3: 3723 - resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} 3724 - engines: {node: '>=20.19.0'} 3725 - peerDependencies: 3726 - oxc-resolver: '>=11.0.0' 3727 - peerDependenciesMeta: 3728 - oxc-resolver: 3729 - optional: true 3730 - 3731 3444 dunder-proto@1.0.1: 3732 3445 resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 3733 3446 engines: {node: '>= 0.4'} ··· 3750 3463 3751 3464 emoji-regex@8.0.0: 3752 3465 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 3753 - 3754 - empathic@2.0.0: 3755 - resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} 3756 - engines: {node: '>=14'} 3757 3466 3758 3467 encodeurl@2.0.0: 3759 3468 resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} ··· 3813 3522 escape-html@1.0.3: 3814 3523 resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 3815 3524 3816 - escape-string-regexp@4.0.0: 3817 - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 3818 - engines: {node: '>=10'} 3819 - 3820 3525 escape-string-regexp@5.0.0: 3821 3526 resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 3822 3527 engines: {node: '>=12'} 3823 3528 3824 - eslint-scope@9.1.2: 3825 - resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} 3826 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 3827 - 3828 - eslint-visitor-keys@3.4.3: 3829 - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 3830 - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 3831 - 3832 - eslint-visitor-keys@5.0.1: 3833 - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} 3834 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 3835 - 3836 - eslint@10.0.3: 3837 - resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==} 3838 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 3839 - hasBin: true 3840 - peerDependencies: 3841 - jiti: '*' 3842 - peerDependenciesMeta: 3843 - jiti: 3844 - optional: true 3845 - 3846 - espree@11.2.0: 3847 - resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} 3848 - engines: {node: ^20.19.0 || ^22.13.0 || >=24} 3849 - 3850 3529 esprima@4.0.1: 3851 3530 resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 3852 3531 engines: {node: '>=4'} 3853 3532 hasBin: true 3854 3533 3855 - esquery@1.7.0: 3856 - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} 3857 - engines: {node: '>=0.10'} 3858 - 3859 - esrecurse@4.3.0: 3860 - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 3861 - engines: {node: '>=4.0'} 3862 - 3863 - estraverse@5.3.0: 3864 - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 3865 - engines: {node: '>=4.0'} 3866 - 3867 3534 estree-walker@2.0.2: 3868 3535 resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 3869 3536 3870 3537 estree-walker@3.0.3: 3871 3538 resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 3872 - 3873 - esutils@2.0.3: 3874 - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 3875 - engines: {node: '>=0.10.0'} 3876 3539 3877 3540 etag@1.8.1: 3878 3541 resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} ··· 3922 3585 resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 3923 3586 engines: {node: '>=8.6.0'} 3924 3587 3925 - fast-json-stable-stringify@2.1.0: 3926 - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 3927 - 3928 - fast-levenshtein@2.0.6: 3929 - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 3930 - 3931 3588 fast-uri@3.1.0: 3932 3589 resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} 3933 3590 ··· 3954 3611 resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} 3955 3612 engines: {node: '>=18'} 3956 3613 3957 - file-entry-cache@8.0.0: 3958 - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 3959 - engines: {node: '>=16.0.0'} 3960 - 3961 3614 fill-range@7.1.1: 3962 3615 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 3963 3616 engines: {node: '>=8'} ··· 3965 3618 finalhandler@2.1.1: 3966 3619 resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} 3967 3620 engines: {node: '>= 18.0.0'} 3968 - 3969 - find-up@5.0.0: 3970 - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 3971 - engines: {node: '>=10'} 3972 3621 3973 3622 fkill@9.0.0: 3974 3623 resolution: {integrity: sha512-MdYSsbdCaIRjzo5edthZtWmEZVMfr1qrtYZUHIdO3swCE+CoZA8S5l0s4jDsYlTa9ZiXv0pTgpzE7s4N8NeUOA==} 3975 3624 engines: {node: '>=18'} 3976 - 3977 - flat-cache@4.0.1: 3978 - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 3979 - engines: {node: '>=16'} 3980 - 3981 - flatted@3.4.1: 3982 - resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} 3983 3625 3984 3626 focus-trap@7.8.0: 3985 3627 resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} ··· 4075 3717 resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 4076 3718 engines: {node: '>= 6'} 4077 3719 4078 - glob-parent@6.0.2: 4079 - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 4080 - engines: {node: '>=10.13.0'} 4081 - 4082 3720 gopd@1.2.0: 4083 3721 resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 4084 3722 engines: {node: '>= 0.4'} ··· 4131 3769 hookable@5.5.3: 4132 3770 resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 4133 3771 4134 - hookable@6.0.1: 4135 - resolution: {integrity: sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw==} 4136 - 4137 3772 html-void-elements@3.0.0: 4138 3773 resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 4139 3774 ··· 4179 3814 import-fresh@3.3.1: 4180 3815 resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 4181 3816 engines: {node: '>=6'} 4182 - 4183 - import-without-cache@0.2.5: 4184 - resolution: {integrity: sha512-B6Lc2s6yApwnD2/pMzFh/d5AVjdsDXjgkeJ766FmFuJELIGHNycKRj+l3A39yZPM4CchqNCB4RITEAYB1KUM6A==} 4185 - engines: {node: '>=20.19.0'} 4186 - 4187 - imurmurhash@0.1.4: 4188 - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 4189 - engines: {node: '>=0.8.19'} 4190 3817 4191 3818 indent-string@5.0.0: 4192 3819 resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} ··· 4323 3950 engines: {node: '>=6'} 4324 3951 hasBin: true 4325 3952 4326 - json-buffer@3.0.1: 4327 - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 4328 - 4329 3953 json-parse-even-better-errors@2.3.1: 4330 3954 resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 4331 3955 4332 - json-schema-traverse@0.4.1: 4333 - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 4334 - 4335 3956 json-schema-traverse@1.0.0: 4336 3957 resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 4337 3958 4338 3959 json-schema-typed@8.0.2: 4339 3960 resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} 4340 - 4341 - json-stable-stringify-without-jsonify@1.0.1: 4342 - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 4343 3961 4344 3962 json5@2.2.3: 4345 3963 resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} ··· 4352 3970 jsonfile@6.2.0: 4353 3971 resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} 4354 3972 4355 - keyv@4.5.4: 4356 - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 4357 - 4358 3973 kleur@3.0.3: 4359 3974 resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 4360 3975 engines: {node: '>=6'} ··· 4363 3978 resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 4364 3979 engines: {node: '>=6'} 4365 3980 4366 - lefthook-darwin-arm64@2.0.16: 4367 - resolution: {integrity: sha512-kjVHkD7rfPa7M0aKJSx/yatdV9uC6o3cJyzM9zk7cg5HD7alSwchFalgF/P0w6nt7C02rAUx8C05qiWCDWaKeA==} 4368 - cpu: [arm64] 4369 - os: [darwin] 4370 - 4371 - lefthook-darwin-x64@2.0.16: 4372 - resolution: {integrity: sha512-tbJ0mdT49DNRLqknro0BvWrYNC23TTcqBJFQnQ32pq1/H9B87bTNKvKKAtogp/saxfHUzkIq1i3twZlBZ3G3Xw==} 4373 - cpu: [x64] 4374 - os: [darwin] 4375 - 4376 - lefthook-freebsd-arm64@2.0.16: 4377 - resolution: {integrity: sha512-wa1KFD5tSUhw3tuetVef/BCSxbbmS7auTDNdoLx3WFeuN5RS15woSN9+E8GPGOOY1g2HCsgdLrhrexEomulfjQ==} 4378 - cpu: [arm64] 4379 - os: [freebsd] 4380 - 4381 - lefthook-freebsd-x64@2.0.16: 4382 - resolution: {integrity: sha512-UXowfn2e94AwNk9UuoePRK+qiF15jZsssiyA15VK5GTtxpn6Sn+Z2QFciofxJczXXxM4abaf7qgx2OoJBt32VA==} 4383 - cpu: [x64] 4384 - os: [freebsd] 4385 - 4386 - lefthook-linux-arm64@2.0.16: 4387 - resolution: {integrity: sha512-U355elz4Z0AHSVqxfcglN09TGR86ov/GtYlliDknci2mmz6EWLiD3dTYnqJiwa4dYxqmuCDc/DvAL9rgb3YJiQ==} 4388 - cpu: [arm64] 4389 - os: [linux] 4390 - 4391 - lefthook-linux-x64@2.0.16: 4392 - resolution: {integrity: sha512-7eAvBeWGAgjOKZ23OQbjJINLPImDIuDeX8dXOfk+aI6IFt2X6KCzRkp+ASUvGQtrPuNZQZT43EhW0/1jZU14ZQ==} 4393 - cpu: [x64] 4394 - os: [linux] 4395 - 4396 - lefthook-openbsd-arm64@2.0.16: 4397 - resolution: {integrity: sha512-Fcd+E17ZkWGnRSQINb5gf+rNy2So5PYn5mBljiC31dl+TgWM8Wy46mSEGveHo7lKCO3q+DkmHIa50Qm58G03AQ==} 4398 - cpu: [arm64] 4399 - os: [openbsd] 4400 - 4401 - lefthook-openbsd-x64@2.0.16: 4402 - resolution: {integrity: sha512-uL5nOkz8eBtQHped0/tB5X8clZ5kfnyjQrv1fpKbGAjeFHI2J+GmRqcn6Awq2IeuBbQvkyV6jDjpATyHBp5mCA==} 4403 - cpu: [x64] 4404 - os: [openbsd] 4405 - 4406 - lefthook-windows-arm64@2.0.16: 4407 - resolution: {integrity: sha512-U61bNWzD6Vd2kjuJ7b4voPfTQ4mlBFOyTpCU3k/h0YjpKDQEFT1T5fDKkDothdnw/JVDSgrclIcfAY7Jyr/UIg==} 4408 - cpu: [arm64] 4409 - os: [win32] 4410 - 4411 - lefthook-windows-x64@2.0.16: 4412 - resolution: {integrity: sha512-dCHi2+hebhPI0LQUGRNjPMsGRyXhrTN3Y/b8M4HO8KVyGamKB3Yemf67ya81tZopDkxNVy5XUBXLYWKGhnAfLQ==} 4413 - cpu: [x64] 4414 - os: [win32] 4415 - 4416 - lefthook@2.0.16: 4417 - resolution: {integrity: sha512-ABs3M5V9c4nqxFnZO509HXuQTu8GM8hmqc9ruV0acQ81yKlxEq70MRoYP5Z1dr5le326X8vA5qj3arJA36yE3A==} 4418 - hasBin: true 4419 - 4420 - levn@0.4.1: 4421 - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 4422 - engines: {node: '>= 0.8.0'} 4423 - 4424 3981 lightningcss-android-arm64@1.31.1: 4425 3982 resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} 4426 3983 engines: {node: '>= 12.0.0'} ··· 4456 4013 engines: {node: '>= 12.0.0'} 4457 4014 cpu: [arm64] 4458 4015 os: [linux] 4016 + libc: [glibc] 4459 4017 4460 4018 lightningcss-linux-arm64-musl@1.31.1: 4461 4019 resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} 4462 4020 engines: {node: '>= 12.0.0'} 4463 4021 cpu: [arm64] 4464 4022 os: [linux] 4023 + libc: [musl] 4465 4024 4466 4025 lightningcss-linux-x64-gnu@1.31.1: 4467 4026 resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} 4468 4027 engines: {node: '>= 12.0.0'} 4469 4028 cpu: [x64] 4470 4029 os: [linux] 4030 + libc: [glibc] 4471 4031 4472 4032 lightningcss-linux-x64-musl@1.31.1: 4473 4033 resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} 4474 4034 engines: {node: '>= 12.0.0'} 4475 4035 cpu: [x64] 4476 4036 os: [linux] 4037 + libc: [musl] 4477 4038 4478 4039 lightningcss-win32-arm64-msvc@1.31.1: 4479 4040 resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} ··· 4493 4054 4494 4055 lines-and-columns@1.2.4: 4495 4056 resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 4496 - 4497 - locate-path@6.0.0: 4498 - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 4499 - engines: {node: '>=10'} 4500 4057 4501 4058 log-symbols@6.0.0: 4502 4059 resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} ··· 4663 4220 typescript: 4664 4221 optional: true 4665 4222 4666 - muggle-string@0.4.1: 4667 - resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} 4668 - 4669 4223 mute-stream@2.0.0: 4670 4224 resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} 4671 4225 engines: {node: ^18.17.0 || >=20.5.0} ··· 4674 4228 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 4675 4229 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 4676 4230 hasBin: true 4677 - 4678 - natural-compare@1.4.0: 4679 - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 4680 4231 4681 4232 negotiator@1.0.0: 4682 4233 resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} ··· 4784 4335 hasBin: true 4785 4336 peerDependencies: 4786 4337 typescript: ^5.x 4787 - 4788 - optionator@0.9.4: 4789 - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 4790 - engines: {node: '>= 0.8.0'} 4791 4338 4792 4339 ora@8.2.0: 4793 4340 resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} ··· 4818 4365 resolution: {integrity: sha512-4RuJK2jP08XwqtUu+5yhCbxEauCm6tv2MFHKEMsjbosK2+vy5us82oI3VLuHwbNyZG7ekZA26U2LLHnGR4frIA==} 4819 4366 hasBin: true 4820 4367 4821 - oxlint@1.51.0: 4822 - resolution: {integrity: sha512-g6DNPaV9/WI9MoX2XllafxQuxwY1TV++j7hP8fTJByVBuCoVtm3dy9f/2vtH/HU40JztcgWF4G7ua+gkainklQ==} 4823 - engines: {node: ^20.19.0 || >=22.12.0} 4824 - hasBin: true 4825 - peerDependencies: 4826 - oxlint-tsgolint: '>=0.15.0' 4827 - peerDependenciesMeta: 4828 - oxlint-tsgolint: 4829 - optional: true 4830 - 4831 4368 oxlint@1.55.0: 4832 4369 resolution: {integrity: sha512-T+FjepiyWpaZMhekqRpH8Z3I4vNM610p6w+Vjfqgj5TZUxHXl7N8N5IPvmOU8U4XdTRxqtNNTh9Y4hLtr7yvFg==} 4833 4370 engines: {node: ^20.19.0 || >=22.12.0} ··· 4838 4375 oxlint-tsgolint: 4839 4376 optional: true 4840 4377 4841 - p-limit@3.1.0: 4842 - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 4843 - engines: {node: '>=10'} 4844 - 4845 - p-locate@5.0.0: 4846 - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 4847 - engines: {node: '>=10'} 4848 - 4849 4378 package-manager-detector@1.6.0: 4850 4379 resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} 4851 4380 ··· 4885 4414 4886 4415 path-browserify@1.0.1: 4887 4416 resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 4888 - 4889 - path-exists@4.0.0: 4890 - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 4891 - engines: {node: '>=8'} 4892 4417 4893 4418 path-key@3.1.1: 4894 4419 resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} ··· 4965 4490 4966 4491 preact@10.29.0: 4967 4492 resolution: {integrity: sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==} 4968 - 4969 - prelude-ls@1.2.1: 4970 - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 4971 - engines: {node: '>= 0.8.0'} 4972 4493 4973 4494 pretty-ms@9.3.0: 4974 4495 resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} ··· 4993 4514 resolution: {integrity: sha512-OPS9kEJYVmiO48u/B9qneqhkMvgCxT+Tm28VCEJpheTpl8cJ0ffZRRNgS5mrQRTrX5yRTpaJ+hRDeefXYmmorQ==} 4994 4515 engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 4995 4516 4996 - punycode@2.3.1: 4997 - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 4998 - engines: {node: '>=6'} 4999 - 5000 4517 qs@6.15.0: 5001 4518 resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} 5002 4519 engines: {node: '>=0.6'} ··· 5039 4556 resolution: {integrity: sha512-nA3IEZfXiclgrz4KLxAhqJqIfFDuvzQwlKwpdmzZIuC1KNSghDEIXmyU0TKtbM+NafnkICcwx8CECFrZ/sL/1w==} 5040 4557 peerDependencies: 5041 4558 react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 5042 - 5043 - react-refresh@0.18.0: 5044 - resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} 5045 - engines: {node: '>=0.10.0'} 5046 4559 5047 4560 react-scan@0.5.3: 5048 4561 resolution: {integrity: sha512-qde9PupmUf0L3MU1H6bjmoukZNbCXdMyTEwP4Gh8RQ4rZPd2GGNBgEKWszwLm96E8k+sGtMpc0B9P0KyFDP6Bw==} ··· 5113 4626 resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 5114 4627 engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 5115 4628 5116 - rolldown-plugin-dts@0.22.5: 5117 - resolution: {integrity: sha512-M/HXfM4cboo+jONx9Z0X+CUf3B5tCi7ni+kR5fUW50Fp9AlZk0oVLesibGWgCXDKFp5lpgQ9yhKoImUFjl3VZw==} 5118 - engines: {node: '>=20.19.0'} 4629 + rolldown@0.15.1: 4630 + resolution: {integrity: sha512-i368PJXHjqyYm9ZXdnI0j/etPF2euP5OG/C0RnhO/bHkZEo4WmorWbaYfeRqe6MEo/H3wkXxGz/y1Vnaq5FiuQ==} 4631 + hasBin: true 5119 4632 peerDependencies: 5120 - '@ts-macro/tsc': ^0.3.6 5121 - '@typescript/native-preview': '>=7.0.0-dev.20250601.1' 5122 - rolldown: ^1.0.0-rc.3 5123 - typescript: ^5.0.0 || ^6.0.0-beta 5124 - vue-tsc: ~3.2.0 4633 + '@babel/runtime': '>=7' 5125 4634 peerDependenciesMeta: 5126 - '@ts-macro/tsc': 4635 + '@babel/runtime': 5127 4636 optional: true 5128 - '@typescript/native-preview': 5129 - optional: true 5130 - typescript: 5131 - optional: true 5132 - vue-tsc: 5133 - optional: true 5134 - 5135 - rolldown@1.0.0-rc.3: 5136 - resolution: {integrity: sha512-Po/YZECDOqVXjIXrtC5h++a5NLvKAQNrd9ggrIG3sbDfGO5BqTUsrI6l8zdniKRp3r5Tp/2JTrXqx4GIguFCMw==} 5137 - engines: {node: ^20.19.0 || >=22.12.0} 5138 - hasBin: true 5139 4637 5140 4638 rolldown@1.0.0-rc.6: 5141 4639 resolution: {integrity: sha512-B8vFPV1ADyegoYfhg+E7RAucYKv0xdVlwYYsIJgfPNeiSxZGWNxts9RqhyGzC11ULK/VaeXyKezGCwpMiH8Ktw==} ··· 5371 4869 resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 5372 4870 engines: {node: '>=18'} 5373 4871 4872 + tinyexec@1.0.4: 4873 + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} 4874 + engines: {node: '>=18'} 4875 + 5374 4876 tinyglobby@0.2.15: 5375 4877 resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 5376 4878 engines: {node: '>=12.0.0'} ··· 5401 4903 tough-cookie@6.0.1: 5402 4904 resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} 5403 4905 engines: {node: '>=16'} 5404 - 5405 - tree-kill@1.2.2: 5406 - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 5407 - hasBin: true 5408 4906 5409 4907 trim-lines@3.0.1: 5410 4908 resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 5411 4909 5412 - ts-api-utils@2.4.0: 5413 - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} 5414 - engines: {node: '>=18.12'} 5415 - peerDependencies: 5416 - typescript: '>=4.8.4' 5417 - 5418 4910 ts-morph@26.0.0: 5419 4911 resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} 5420 4912 ··· 5425 4917 resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} 5426 4918 engines: {node: '>=6'} 5427 4919 5428 - tsdown@0.20.3: 5429 - resolution: {integrity: sha512-qWOUXSbe4jN8JZEgrkc/uhJpC8VN2QpNu3eZkBWwNuTEjc/Ik1kcc54ycfcQ5QPRHeu9OQXaLfCI3o7pEJgB2w==} 5430 - engines: {node: '>=20.19.0'} 5431 - hasBin: true 5432 - peerDependencies: 5433 - '@arethetypeswrong/core': ^0.18.1 5434 - '@vitejs/devtools': '*' 5435 - publint: ^0.3.0 5436 - typescript: ^5.0.0 5437 - unplugin-lightningcss: ^0.4.0 5438 - unplugin-unused: ^0.5.0 5439 - peerDependenciesMeta: 5440 - '@arethetypeswrong/core': 5441 - optional: true 5442 - '@vitejs/devtools': 5443 - optional: true 5444 - publint: 5445 - optional: true 5446 - typescript: 5447 - optional: true 5448 - unplugin-lightningcss: 5449 - optional: true 5450 - unplugin-unused: 5451 - optional: true 5452 - 5453 4920 tslib@2.8.1: 5454 4921 resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 5455 4922 ··· 5461 4928 tw-animate-css@1.4.0: 5462 4929 resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} 5463 4930 5464 - type-check@0.4.0: 5465 - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 5466 - engines: {node: '>= 0.8.0'} 5467 - 5468 4931 type-fest@4.41.0: 5469 4932 resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} 5470 4933 engines: {node: '>=16'} ··· 5479 4942 5480 4943 type-level-regexp@0.1.17: 5481 4944 resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} 5482 - 5483 - typescript-eslint@8.57.0: 5484 - resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} 5485 - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 5486 - peerDependencies: 5487 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 5488 - typescript: '>=4.8.4 <6.0.0' 5489 4945 5490 4946 typescript@5.9.3: 5491 4947 resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} ··· 5572 5028 resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} 5573 5029 engines: {node: '>=18.12.0'} 5574 5030 5575 - unrun@0.2.32: 5576 - resolution: {integrity: sha512-opd3z6791rf281JdByf0RdRQrpcc7WyzqittqIXodM/5meNWdTwrVxeyzbaCp4/Rgls/um14oUaif1gomO8YGg==} 5577 - engines: {node: '>=20.19.0'} 5578 - hasBin: true 5579 - peerDependencies: 5580 - synckit: ^0.11.11 5581 - peerDependenciesMeta: 5582 - synckit: 5583 - optional: true 5584 - 5585 5031 until-async@3.0.2: 5586 5032 resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} 5587 5033 ··· 5593 5039 5594 5040 uri-js-replace@1.0.1: 5595 5041 resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} 5596 - 5597 - uri-js@4.4.1: 5598 - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 5599 5042 5600 5043 use-sync-external-store@1.6.0: 5601 5044 resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} ··· 5682 5125 postcss: 5683 5126 optional: true 5684 5127 5685 - vscode-uri@3.1.0: 5686 - resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} 5687 - 5688 - vue-tsc@3.2.4: 5689 - resolution: {integrity: sha512-xj3YCvSLNDKt1iF9OcImWHhmYcihVu9p4b9s4PGR/qp6yhW+tZJaypGxHScRyOrdnHvaOeF+YkZOdKwbgGvp5g==} 5690 - hasBin: true 5691 - peerDependencies: 5692 - typescript: '>=5.0.0' 5693 - 5694 5128 vue@3.5.30: 5695 5129 resolution: {integrity: sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==} 5696 5130 peerDependencies: ··· 5718 5152 resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} 5719 5153 engines: {node: ^16.13.0 || >=18.0.0} 5720 5154 hasBin: true 5721 - 5722 - word-wrap@1.2.5: 5723 - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 5724 - engines: {node: '>=0.10.0'} 5725 5155 5726 5156 workerd@1.20260312.1: 5727 5157 resolution: {integrity: sha512-nNpPkw9jaqo79B+iBCOiksx+N62xC+ETIfyzofUEdY3cSOHJg6oNnVSHm7vHevzVblfV76c8Gr0cXHEapYMBEg==} ··· 5792 5222 yaml-ast-parser@0.0.43: 5793 5223 resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} 5794 5224 5225 + yaml@2.8.2: 5226 + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} 5227 + engines: {node: '>= 14.6'} 5228 + hasBin: true 5229 + 5795 5230 yargs-parser@21.1.1: 5796 5231 resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 5797 5232 engines: {node: '>=12'} ··· 5799 5234 yargs@17.7.2: 5800 5235 resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 5801 5236 engines: {node: '>=12'} 5802 - 5803 - yocto-queue@0.1.0: 5804 - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 5805 - engines: {node: '>=10'} 5806 5237 5807 5238 yoctocolors-cjs@2.1.3: 5808 5239 resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} ··· 5881 5312 '@jridgewell/trace-mapping': 0.3.31 5882 5313 jsesc: 3.1.0 5883 5314 5884 - '@babel/generator@8.0.0-rc.2': 5885 - dependencies: 5886 - '@babel/parser': 8.0.0-rc.2 5887 - '@babel/types': 8.0.0-rc.2 5888 - '@jridgewell/gen-mapping': 0.3.13 5889 - '@jridgewell/trace-mapping': 0.3.31 5890 - '@types/jsesc': 2.5.1 5891 - jsesc: 3.1.0 5892 - 5893 5315 '@babel/helper-annotate-as-pure@7.27.3': 5894 5316 dependencies: 5895 5317 '@babel/types': 7.28.6 ··· 5964 5386 5965 5387 '@babel/helper-string-parser@7.27.1': {} 5966 5388 5967 - '@babel/helper-string-parser@8.0.0-rc.2': {} 5968 - 5969 5389 '@babel/helper-validator-identifier@7.28.5': {} 5970 - 5971 - '@babel/helper-validator-identifier@8.0.0-rc.2': {} 5972 5390 5973 5391 '@babel/helper-validator-option@7.27.1': {} 5974 5392 ··· 5984 5402 '@babel/parser@7.29.0': 5985 5403 dependencies: 5986 5404 '@babel/types': 7.29.0 5987 - 5988 - '@babel/parser@8.0.0-rc.2': 5989 - dependencies: 5990 - '@babel/types': 8.0.0-rc.2 5991 5405 5992 5406 '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': 5993 5407 dependencies: ··· 6007 5421 transitivePeerDependencies: 6008 5422 - supports-color 6009 5423 6010 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': 6011 - dependencies: 6012 - '@babel/core': 7.29.0 6013 - '@babel/helper-plugin-utils': 7.28.6 6014 - 6015 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': 6016 - dependencies: 6017 - '@babel/core': 7.29.0 6018 - '@babel/helper-plugin-utils': 7.28.6 6019 - 6020 5424 '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': 6021 5425 dependencies: 6022 5426 '@babel/core': 7.29.0 ··· 6068 5472 dependencies: 6069 5473 '@babel/helper-string-parser': 7.27.1 6070 5474 '@babel/helper-validator-identifier': 7.28.5 6071 - 6072 - '@babel/types@8.0.0-rc.2': 6073 - dependencies: 6074 - '@babel/helper-string-parser': 8.0.0-rc.2 6075 - '@babel/helper-validator-identifier': 8.0.0-rc.2 6076 5475 6077 5476 '@base-ui/react@1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': 6078 5477 dependencies: ··· 6288 5687 picomatch: 4.0.3 6289 5688 which: 4.0.0 6290 5689 6291 - '@dprint/darwin-arm64@0.51.1': 6292 - optional: true 6293 - 6294 - '@dprint/darwin-x64@0.51.1': 6295 - optional: true 6296 - 6297 - '@dprint/linux-arm64-glibc@0.51.1': 6298 - optional: true 6299 - 6300 - '@dprint/linux-arm64-musl@0.51.1': 6301 - optional: true 6302 - 6303 - '@dprint/linux-loong64-glibc@0.51.1': 6304 - optional: true 6305 - 6306 - '@dprint/linux-loong64-musl@0.51.1': 6307 - optional: true 6308 - 6309 - '@dprint/linux-riscv64-glibc@0.51.1': 6310 - optional: true 6311 - 6312 - '@dprint/linux-x64-glibc@0.51.1': 6313 - optional: true 6314 - 6315 - '@dprint/linux-x64-musl@0.51.1': 6316 - optional: true 6317 - 6318 - '@dprint/win32-arm64@0.51.1': 6319 - optional: true 6320 - 6321 - '@dprint/win32-x64@0.51.1': 6322 - optional: true 6323 - 6324 5690 '@ecies/ciphers@0.2.5(@noble/ciphers@1.3.0)': 6325 5691 dependencies: 6326 5692 '@noble/ciphers': 1.3.0 ··· 6497 5863 '@esbuild/win32-x64@0.27.3': 6498 5864 optional: true 6499 5865 6500 - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3(jiti@2.6.1))': 6501 - dependencies: 6502 - eslint: 10.0.3(jiti@2.6.1) 6503 - eslint-visitor-keys: 3.4.3 6504 - 6505 - '@eslint-community/regexpp@4.12.2': {} 6506 - 6507 - '@eslint/config-array@0.23.3': 6508 - dependencies: 6509 - '@eslint/object-schema': 3.0.3 6510 - debug: 4.4.3(supports-color@10.2.2) 6511 - minimatch: 10.2.4 6512 - transitivePeerDependencies: 6513 - - supports-color 6514 - 6515 - '@eslint/config-helpers@0.5.3': 6516 - dependencies: 6517 - '@eslint/core': 1.1.1 6518 - 6519 - '@eslint/core@1.1.1': 6520 - dependencies: 6521 - '@types/json-schema': 7.0.15 6522 - 6523 - '@eslint/object-schema@3.0.3': {} 6524 - 6525 - '@eslint/plugin-kit@0.6.1': 6526 - dependencies: 6527 - '@eslint/core': 1.1.1 6528 - levn: 0.4.1 6529 - 6530 5866 '@floating-ui/core@1.7.5': 6531 5867 dependencies: 6532 5868 '@floating-ui/utils': 0.2.11 ··· 6549 5885 '@hono/node-server@1.19.11(hono@4.12.7)': 6550 5886 dependencies: 6551 5887 hono: 4.12.7 6552 - 6553 - '@humanfs/core@0.19.1': {} 6554 - 6555 - '@humanfs/node@0.16.7': 6556 - dependencies: 6557 - '@humanfs/core': 0.19.1 6558 - '@humanwhocodes/retry': 0.4.3 6559 - 6560 - '@humanwhocodes/module-importer@1.0.1': {} 6561 - 6562 - '@humanwhocodes/retry@0.4.3': {} 6563 5888 6564 5889 '@iconify-json/lucide@1.2.95': 6565 5890 dependencies: ··· 6675 6000 6676 6001 '@inquirer/ansi@1.0.2': {} 6677 6002 6678 - '@inquirer/confirm@5.1.21(@types/node@25.1.0)': 6003 + '@inquirer/confirm@5.1.21(@types/node@24.12.0)': 6679 6004 dependencies: 6680 - '@inquirer/core': 10.3.2(@types/node@25.1.0) 6681 - '@inquirer/type': 3.0.10(@types/node@25.1.0) 6005 + '@inquirer/core': 10.3.2(@types/node@24.12.0) 6006 + '@inquirer/type': 3.0.10(@types/node@24.12.0) 6682 6007 optionalDependencies: 6683 - '@types/node': 25.1.0 6008 + '@types/node': 24.12.0 6684 6009 6685 - '@inquirer/core@10.3.2(@types/node@25.1.0)': 6010 + '@inquirer/core@10.3.2(@types/node@24.12.0)': 6686 6011 dependencies: 6687 6012 '@inquirer/ansi': 1.0.2 6688 6013 '@inquirer/figures': 1.0.15 6689 - '@inquirer/type': 3.0.10(@types/node@25.1.0) 6014 + '@inquirer/type': 3.0.10(@types/node@24.12.0) 6690 6015 cli-width: 4.1.0 6691 6016 mute-stream: 2.0.0 6692 6017 signal-exit: 4.1.0 6693 6018 wrap-ansi: 6.2.0 6694 6019 yoctocolors-cjs: 2.1.3 6695 6020 optionalDependencies: 6696 - '@types/node': 25.1.0 6021 + '@types/node': 24.12.0 6697 6022 6698 6023 '@inquirer/figures@1.0.15': {} 6699 6024 6700 - '@inquirer/type@3.0.10(@types/node@25.1.0)': 6025 + '@inquirer/type@3.0.10(@types/node@24.12.0)': 6701 6026 optionalDependencies: 6702 - '@types/node': 25.1.0 6027 + '@types/node': 24.12.0 6703 6028 6704 6029 '@jridgewell/gen-mapping@0.3.13': 6705 6030 dependencies: ··· 6758 6083 outvariant: 1.4.3 6759 6084 strict-event-emitter: 0.5.1 6760 6085 6086 + '@napi-rs/wasm-runtime@0.2.12': 6087 + dependencies: 6088 + '@emnapi/core': 1.8.1 6089 + '@emnapi/runtime': 1.8.1 6090 + '@tybys/wasm-util': 0.10.1 6091 + optional: true 6092 + 6761 6093 '@napi-rs/wasm-runtime@1.1.1': 6762 6094 dependencies: 6763 6095 '@emnapi/core': 1.8.1 ··· 6920 6252 6921 6253 '@oxc-project/runtime@0.115.0': {} 6922 6254 6923 - '@oxc-project/types@0.112.0': {} 6924 - 6925 6255 '@oxc-project/types@0.115.0': {} 6926 6256 6927 6257 '@oxfmt/binding-android-arm-eabi@0.40.0': ··· 6999 6329 '@oxlint-tsgolint/win32-x64@0.16.0': 7000 6330 optional: true 7001 6331 7002 - '@oxlint/binding-android-arm-eabi@1.51.0': 7003 - optional: true 7004 - 7005 6332 '@oxlint/binding-android-arm-eabi@1.55.0': 7006 6333 optional: true 7007 6334 7008 - '@oxlint/binding-android-arm64@1.51.0': 7009 - optional: true 7010 - 7011 6335 '@oxlint/binding-android-arm64@1.55.0': 7012 6336 optional: true 7013 6337 7014 - '@oxlint/binding-darwin-arm64@1.51.0': 7015 - optional: true 7016 - 7017 6338 '@oxlint/binding-darwin-arm64@1.55.0': 7018 6339 optional: true 7019 6340 7020 - '@oxlint/binding-darwin-x64@1.51.0': 7021 - optional: true 7022 - 7023 6341 '@oxlint/binding-darwin-x64@1.55.0': 7024 6342 optional: true 7025 6343 7026 - '@oxlint/binding-freebsd-x64@1.51.0': 7027 - optional: true 7028 - 7029 6344 '@oxlint/binding-freebsd-x64@1.55.0': 7030 6345 optional: true 7031 6346 7032 - '@oxlint/binding-linux-arm-gnueabihf@1.51.0': 7033 - optional: true 7034 - 7035 6347 '@oxlint/binding-linux-arm-gnueabihf@1.55.0': 7036 6348 optional: true 7037 6349 7038 - '@oxlint/binding-linux-arm-musleabihf@1.51.0': 7039 - optional: true 7040 - 7041 6350 '@oxlint/binding-linux-arm-musleabihf@1.55.0': 7042 6351 optional: true 7043 6352 7044 - '@oxlint/binding-linux-arm64-gnu@1.51.0': 7045 - optional: true 7046 - 7047 6353 '@oxlint/binding-linux-arm64-gnu@1.55.0': 7048 6354 optional: true 7049 6355 7050 - '@oxlint/binding-linux-arm64-musl@1.51.0': 7051 - optional: true 7052 - 7053 6356 '@oxlint/binding-linux-arm64-musl@1.55.0': 7054 - optional: true 7055 - 7056 - '@oxlint/binding-linux-ppc64-gnu@1.51.0': 7057 6357 optional: true 7058 6358 7059 6359 '@oxlint/binding-linux-ppc64-gnu@1.55.0': 7060 6360 optional: true 7061 6361 7062 - '@oxlint/binding-linux-riscv64-gnu@1.51.0': 7063 - optional: true 7064 - 7065 6362 '@oxlint/binding-linux-riscv64-gnu@1.55.0': 7066 6363 optional: true 7067 6364 7068 - '@oxlint/binding-linux-riscv64-musl@1.51.0': 7069 - optional: true 7070 - 7071 6365 '@oxlint/binding-linux-riscv64-musl@1.55.0': 7072 6366 optional: true 7073 6367 7074 - '@oxlint/binding-linux-s390x-gnu@1.51.0': 7075 - optional: true 7076 - 7077 6368 '@oxlint/binding-linux-s390x-gnu@1.55.0': 7078 - optional: true 7079 - 7080 - '@oxlint/binding-linux-x64-gnu@1.51.0': 7081 6369 optional: true 7082 6370 7083 6371 '@oxlint/binding-linux-x64-gnu@1.55.0': 7084 6372 optional: true 7085 6373 7086 - '@oxlint/binding-linux-x64-musl@1.51.0': 7087 - optional: true 7088 - 7089 6374 '@oxlint/binding-linux-x64-musl@1.55.0': 7090 6375 optional: true 7091 6376 7092 - '@oxlint/binding-openharmony-arm64@1.51.0': 7093 - optional: true 7094 - 7095 6377 '@oxlint/binding-openharmony-arm64@1.55.0': 7096 6378 optional: true 7097 6379 7098 - '@oxlint/binding-win32-arm64-msvc@1.51.0': 7099 - optional: true 7100 - 7101 6380 '@oxlint/binding-win32-arm64-msvc@1.55.0': 7102 - optional: true 7103 - 7104 - '@oxlint/binding-win32-ia32-msvc@1.51.0': 7105 6381 optional: true 7106 6382 7107 6383 '@oxlint/binding-win32-ia32-msvc@1.55.0': 7108 - optional: true 7109 - 7110 - '@oxlint/binding-win32-x64-msvc@1.51.0': 7111 6384 optional: true 7112 6385 7113 6386 '@oxlint/binding-win32-x64-msvc@1.55.0': ··· 7401 6674 transitivePeerDependencies: 7402 6675 - supports-color 7403 6676 7404 - '@rolldown/binding-android-arm64@1.0.0-rc.3': 7405 - optional: true 7406 - 7407 6677 '@rolldown/binding-android-arm64@1.0.0-rc.6': 7408 6678 optional: true 7409 6679 7410 6680 '@rolldown/binding-android-arm64@1.0.0-rc.9': 7411 6681 optional: true 7412 6682 7413 - '@rolldown/binding-darwin-arm64@1.0.0-rc.3': 6683 + '@rolldown/binding-darwin-arm64@0.15.1': 7414 6684 optional: true 7415 6685 7416 6686 '@rolldown/binding-darwin-arm64@1.0.0-rc.6': ··· 7419 6689 '@rolldown/binding-darwin-arm64@1.0.0-rc.9': 7420 6690 optional: true 7421 6691 7422 - '@rolldown/binding-darwin-x64@1.0.0-rc.3': 6692 + '@rolldown/binding-darwin-x64@0.15.1': 7423 6693 optional: true 7424 6694 7425 6695 '@rolldown/binding-darwin-x64@1.0.0-rc.6': ··· 7428 6698 '@rolldown/binding-darwin-x64@1.0.0-rc.9': 7429 6699 optional: true 7430 6700 7431 - '@rolldown/binding-freebsd-x64@1.0.0-rc.3': 6701 + '@rolldown/binding-freebsd-x64@0.15.1': 7432 6702 optional: true 7433 6703 7434 6704 '@rolldown/binding-freebsd-x64@1.0.0-rc.6': ··· 7437 6707 '@rolldown/binding-freebsd-x64@1.0.0-rc.9': 7438 6708 optional: true 7439 6709 7440 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.3': 6710 + '@rolldown/binding-linux-arm-gnueabihf@0.15.1': 7441 6711 optional: true 7442 6712 7443 6713 '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': ··· 7446 6716 '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': 7447 6717 optional: true 7448 6718 7449 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.3': 6719 + '@rolldown/binding-linux-arm64-gnu@0.15.1': 7450 6720 optional: true 7451 6721 7452 6722 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': ··· 7455 6725 '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': 7456 6726 optional: true 7457 6727 7458 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.3': 6728 + '@rolldown/binding-linux-arm64-musl@0.15.1': 7459 6729 optional: true 7460 6730 7461 6731 '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': ··· 7470 6740 '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': 7471 6741 optional: true 7472 6742 7473 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.3': 6743 + '@rolldown/binding-linux-x64-gnu@0.15.1': 7474 6744 optional: true 7475 6745 7476 6746 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': ··· 7479 6749 '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': 7480 6750 optional: true 7481 6751 7482 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.3': 6752 + '@rolldown/binding-linux-x64-musl@0.15.1': 7483 6753 optional: true 7484 6754 7485 6755 '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': ··· 7488 6758 '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': 7489 6759 optional: true 7490 6760 7491 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.3': 7492 - optional: true 7493 - 7494 6761 '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': 7495 6762 optional: true 7496 6763 7497 6764 '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': 7498 6765 optional: true 7499 6766 7500 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.3': 6767 + '@rolldown/binding-wasm32-wasi@0.15.1': 7501 6768 dependencies: 7502 - '@napi-rs/wasm-runtime': 1.1.1 6769 + '@napi-rs/wasm-runtime': 0.2.12 7503 6770 optional: true 7504 6771 7505 6772 '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': ··· 7512 6779 '@napi-rs/wasm-runtime': 1.1.1 7513 6780 optional: true 7514 6781 7515 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.3': 6782 + '@rolldown/binding-win32-arm64-msvc@0.15.1': 7516 6783 optional: true 7517 6784 7518 6785 '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': ··· 7521 6788 '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': 7522 6789 optional: true 7523 6790 7524 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.3': 6791 + '@rolldown/binding-win32-ia32-msvc@0.15.1': 6792 + optional: true 6793 + 6794 + '@rolldown/binding-win32-x64-msvc@0.15.1': 7525 6795 optional: true 7526 6796 7527 6797 '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': ··· 7530 6800 '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': 7531 6801 optional: true 7532 6802 7533 - '@rolldown/pluginutils@1.0.0-rc.2': {} 6803 + '@rolldown/plugin-babel@0.2.1(@babel/core@7.29.0)(@babel/runtime@7.28.6)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(rolldown@1.0.0-rc.9)': 6804 + dependencies: 6805 + '@babel/core': 7.29.0 6806 + picomatch: 4.0.3 6807 + rolldown: 1.0.0-rc.9 6808 + optionalDependencies: 6809 + '@babel/runtime': 7.28.6 6810 + vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 7534 6811 7535 - '@rolldown/pluginutils@1.0.0-rc.3': {} 6812 + '@rolldown/pluginutils@1.0.0-rc.2': {} 7536 6813 7537 6814 '@rolldown/pluginutils@1.0.0-rc.6': {} 6815 + 6816 + '@rolldown/pluginutils@1.0.0-rc.7': {} 7538 6817 7539 6818 '@rolldown/pluginutils@1.0.0-rc.9': {} 7540 6819 ··· 7653 6932 '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1 7654 6933 '@tailwindcss/oxide-win32-x64-msvc': 4.2.1 7655 6934 7656 - '@tailwindcss/vite@4.2.1(@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3))': 6935 + '@tailwindcss/vite@4.2.1(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))': 7657 6936 dependencies: 7658 6937 '@tailwindcss/node': 4.2.1 7659 6938 '@tailwindcss/oxide': 4.2.1 7660 6939 tailwindcss: 4.2.1 7661 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)' 6940 + vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 7662 6941 7663 6942 '@tanstack/query-core@5.90.20': {} 7664 6943 ··· 7688 6967 7689 6968 '@types/babel__core@7.20.5': 7690 6969 dependencies: 7691 - '@babel/parser': 7.28.6 7692 - '@babel/types': 7.28.6 6970 + '@babel/parser': 7.29.0 6971 + '@babel/types': 7.29.0 7693 6972 '@types/babel__generator': 7.27.0 7694 6973 '@types/babel__template': 7.4.4 7695 6974 '@types/babel__traverse': 7.28.0 7696 6975 7697 6976 '@types/babel__generator@7.27.0': 7698 6977 dependencies: 7699 - '@babel/types': 7.28.6 6978 + '@babel/types': 7.29.0 7700 6979 7701 6980 '@types/babel__template@7.4.4': 7702 6981 dependencies: 7703 - '@babel/parser': 7.28.6 7704 - '@babel/types': 7.28.6 6982 + '@babel/parser': 7.29.0 6983 + '@babel/types': 7.29.0 7705 6984 7706 6985 '@types/babel__traverse@7.28.0': 7707 6986 dependencies: 7708 - '@babel/types': 7.28.6 7709 - 7710 - '@types/bun@1.3.10': 7711 - dependencies: 7712 - bun-types: 1.3.10 6987 + '@babel/types': 7.29.0 7713 6988 7714 6989 '@types/chai@5.2.3': 7715 6990 dependencies: ··· 7718 6993 7719 6994 '@types/deep-eql@4.0.2': {} 7720 6995 7721 - '@types/esrecurse@4.3.1': {} 7722 - 7723 6996 '@types/estree@1.0.8': {} 7724 6997 7725 6998 '@types/hast@3.0.4': 7726 6999 dependencies: 7727 7000 '@types/unist': 3.0.3 7728 7001 7729 - '@types/jsesc@2.5.1': {} 7730 - 7731 - '@types/json-schema@7.0.15': {} 7732 - 7733 7002 '@types/linkify-it@5.0.0': {} 7734 7003 7735 7004 '@types/markdown-it@14.1.2': ··· 7754 7023 '@types/node@25.1.0': 7755 7024 dependencies: 7756 7025 undici-types: 7.16.0 7026 + optional: true 7757 7027 7758 7028 '@types/react-dom@19.2.3(@types/react@19.2.14)': 7759 7029 dependencies: ··· 7778 7048 7779 7049 '@types/web-bluetooth@0.0.21': {} 7780 7050 7781 - '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': 7782 - dependencies: 7783 - '@eslint-community/regexpp': 4.12.2 7784 - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 7785 - '@typescript-eslint/scope-manager': 8.57.0 7786 - '@typescript-eslint/type-utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 7787 - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 7788 - '@typescript-eslint/visitor-keys': 8.57.0 7789 - eslint: 10.0.3(jiti@2.6.1) 7790 - ignore: 7.0.5 7791 - natural-compare: 1.4.0 7792 - ts-api-utils: 2.4.0(typescript@5.9.3) 7793 - typescript: 5.9.3 7794 - transitivePeerDependencies: 7795 - - supports-color 7796 - 7797 - '@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': 7798 - dependencies: 7799 - '@typescript-eslint/scope-manager': 8.57.0 7800 - '@typescript-eslint/types': 8.57.0 7801 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) 7802 - '@typescript-eslint/visitor-keys': 8.57.0 7803 - debug: 4.4.3(supports-color@10.2.2) 7804 - eslint: 10.0.3(jiti@2.6.1) 7805 - typescript: 5.9.3 7806 - transitivePeerDependencies: 7807 - - supports-color 7808 - 7809 - '@typescript-eslint/project-service@8.57.0(typescript@5.9.3)': 7810 - dependencies: 7811 - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) 7812 - '@typescript-eslint/types': 8.57.0 7813 - debug: 4.4.3(supports-color@10.2.2) 7814 - typescript: 5.9.3 7815 - transitivePeerDependencies: 7816 - - supports-color 7817 - 7818 - '@typescript-eslint/scope-manager@8.57.0': 7819 - dependencies: 7820 - '@typescript-eslint/types': 8.57.0 7821 - '@typescript-eslint/visitor-keys': 8.57.0 7822 - 7823 - '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)': 7824 - dependencies: 7825 - typescript: 5.9.3 7826 - 7827 - '@typescript-eslint/type-utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': 7828 - dependencies: 7829 - '@typescript-eslint/types': 8.57.0 7830 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) 7831 - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 7832 - debug: 4.4.3(supports-color@10.2.2) 7833 - eslint: 10.0.3(jiti@2.6.1) 7834 - ts-api-utils: 2.4.0(typescript@5.9.3) 7835 - typescript: 5.9.3 7836 - transitivePeerDependencies: 7837 - - supports-color 7838 - 7839 - '@typescript-eslint/types@8.57.0': {} 7840 - 7841 - '@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)': 7842 - dependencies: 7843 - '@typescript-eslint/project-service': 8.57.0(typescript@5.9.3) 7844 - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.9.3) 7845 - '@typescript-eslint/types': 8.57.0 7846 - '@typescript-eslint/visitor-keys': 8.57.0 7847 - debug: 4.4.3(supports-color@10.2.2) 7848 - minimatch: 10.2.4 7849 - semver: 7.7.4 7850 - tinyglobby: 0.2.15 7851 - ts-api-utils: 2.4.0(typescript@5.9.3) 7852 - typescript: 5.9.3 7853 - transitivePeerDependencies: 7854 - - supports-color 7855 - 7856 - '@typescript-eslint/utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3)': 7857 - dependencies: 7858 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) 7859 - '@typescript-eslint/scope-manager': 8.57.0 7860 - '@typescript-eslint/types': 8.57.0 7861 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) 7862 - eslint: 10.0.3(jiti@2.6.1) 7863 - typescript: 5.9.3 7864 - transitivePeerDependencies: 7865 - - supports-color 7866 - 7867 - '@typescript-eslint/visitor-keys@8.57.0': 7868 - dependencies: 7869 - '@typescript-eslint/types': 8.57.0 7870 - eslint-visitor-keys: 5.0.1 7871 - 7872 7051 '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260313.1': 7873 7052 optional: true 7874 7053 ··· 8018 7197 dependencies: 8019 7198 '@unocss/core': 66.6.6 8020 7199 8021 - '@unocss/vite@66.6.6(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0))': 7200 + '@unocss/vite@66.6.6(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))': 8022 7201 dependencies: 8023 7202 '@jridgewell/remapping': 2.3.5 8024 7203 '@unocss/config': 66.6.6 ··· 8029 7208 pathe: 2.0.3 8030 7209 tinyglobby: 0.2.15 8031 7210 unplugin-utils: 0.3.1 8032 - vite: 8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0) 8033 - 8034 - '@uwu/flora-sdk@0.0.0': {} 7211 + vite: 8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) 8035 7212 8036 - '@vitejs/plugin-react@5.2.0(@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3))': 7213 + '@vitejs/plugin-react@6.0.1(@rolldown/plugin-babel@0.2.1(@babel/core@7.29.0)(@babel/runtime@7.28.6)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(rolldown@1.0.0-rc.9))(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(babel-plugin-react-compiler@1.0.0)': 8037 7214 dependencies: 8038 - '@babel/core': 7.29.0 8039 - '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) 8040 - '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0) 8041 - '@rolldown/pluginutils': 1.0.0-rc.3 8042 - '@types/babel__core': 7.20.5 8043 - react-refresh: 0.18.0 8044 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)' 8045 - transitivePeerDependencies: 8046 - - supports-color 7215 + '@rolldown/pluginutils': 1.0.0-rc.7 7216 + vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 7217 + optionalDependencies: 7218 + '@rolldown/plugin-babel': 0.2.1(@babel/core@7.29.0)(@babel/runtime@7.28.6)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(rolldown@1.0.0-rc.9) 7219 + babel-plugin-react-compiler: 1.0.0 8047 7220 8048 - '@vitejs/plugin-vue@6.0.5(@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3))': 7221 + '@vitejs/plugin-vue@6.0.5(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3))': 8049 7222 dependencies: 8050 7223 '@rolldown/pluginutils': 1.0.0-rc.2 8051 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)' 7224 + vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 8052 7225 vue: 3.5.30(typescript@5.9.3) 8053 7226 8054 - '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)': 7227 + '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)': 8055 7228 dependencies: 8056 7229 '@oxc-project/runtime': 0.115.0 8057 7230 '@oxc-project/types': 0.115.0 8058 7231 lightningcss: 1.31.1 8059 - postcss: 8.5.6 7232 + postcss: 8.5.8 8060 7233 optionalDependencies: 8061 7234 '@types/node': 24.12.0 8062 7235 esbuild: 0.27.3 ··· 8065 7238 sass: 1.97.3 8066 7239 tsx: 4.21.0 8067 7240 typescript: 5.9.3 7241 + yaml: 2.8.2 8068 7242 8069 - '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)': 7243 + '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)': 8070 7244 dependencies: 8071 7245 '@oxc-project/runtime': 0.115.0 8072 7246 '@oxc-project/types': 0.115.0 8073 7247 lightningcss: 1.31.1 8074 - postcss: 8.5.6 7248 + postcss: 8.5.8 8075 7249 optionalDependencies: 8076 7250 '@types/node': 25.1.0 8077 7251 esbuild: 0.27.3 ··· 8080 7254 sass: 1.97.3 8081 7255 tsx: 4.21.0 8082 7256 typescript: 5.9.3 7257 + yaml: 2.8.2 8083 7258 8084 7259 '@voidzero-dev/vite-plus-darwin-arm64@0.1.11': 8085 7260 optional: true ··· 8093 7268 '@voidzero-dev/vite-plus-linux-x64-gnu@0.1.11': 8094 7269 optional: true 8095 7270 8096 - '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0))': 7271 + '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.12.0)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)': 8097 7272 dependencies: 8098 7273 '@standard-schema/spec': 1.1.0 8099 7274 '@types/chai': 5.2.3 8100 - '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3) 7275 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 8101 7276 es-module-lexer: 1.7.0 8102 7277 obug: 2.1.1 8103 7278 pixelmatch: 7.1.0 ··· 8107 7282 tinybench: 2.9.0 8108 7283 tinyexec: 1.0.2 8109 7284 tinyglobby: 0.2.15 8110 - vite: 8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0) 7285 + vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 7286 + ws: 8.19.0 7287 + optionalDependencies: 7288 + '@types/node': 24.12.0 7289 + transitivePeerDependencies: 7290 + - '@arethetypeswrong/core' 7291 + - '@tsdown/css' 7292 + - '@tsdown/exe' 7293 + - '@vitejs/devtools' 7294 + - bufferutil 7295 + - esbuild 7296 + - jiti 7297 + - less 7298 + - publint 7299 + - sass 7300 + - sass-embedded 7301 + - stylus 7302 + - sugarss 7303 + - terser 7304 + - tsx 7305 + - typescript 7306 + - unplugin-unused 7307 + - utf-8-validate 7308 + - yaml 7309 + 7310 + '@voidzero-dev/vite-plus-test@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': 7311 + dependencies: 7312 + '@standard-schema/spec': 1.1.0 7313 + '@types/chai': 5.2.3 7314 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 7315 + es-module-lexer: 1.7.0 7316 + obug: 2.1.1 7317 + pixelmatch: 7.1.0 7318 + pngjs: 7.0.0 7319 + sirv: 3.0.2 7320 + std-env: 4.0.0 7321 + tinybench: 2.9.0 7322 + tinyexec: 1.0.2 7323 + tinyglobby: 0.2.15 7324 + vite: 8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) 8111 7325 ws: 8.19.0 8112 7326 optionalDependencies: 8113 7327 '@types/node': 24.12.0 ··· 8132 7346 - utf-8-validate 8133 7347 - yaml 8134 7348 8135 - '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0))': 7349 + '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2)': 8136 7350 dependencies: 8137 7351 '@standard-schema/spec': 1.1.0 8138 7352 '@types/chai': 5.2.3 8139 - '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3) 7353 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 8140 7354 es-module-lexer: 1.7.0 8141 7355 obug: 2.1.1 8142 7356 pixelmatch: 7.1.0 ··· 8146 7360 tinybench: 2.9.0 8147 7361 tinyexec: 1.0.2 8148 7362 tinyglobby: 0.2.15 8149 - vite: 8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0) 7363 + vite: 8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2) 8150 7364 ws: 8.19.0 8151 7365 optionalDependencies: 8152 7366 '@types/node': 25.1.0 ··· 8177 7391 '@voidzero-dev/vite-plus-win32-x64-msvc@0.1.11': 8178 7392 optional: true 8179 7393 8180 - '@volar/language-core@2.4.27': 8181 - dependencies: 8182 - '@volar/source-map': 2.4.27 8183 - 8184 - '@volar/source-map@2.4.27': {} 8185 - 8186 - '@volar/typescript@2.4.27': 8187 - dependencies: 8188 - '@volar/language-core': 2.4.27 8189 - path-browserify: 1.0.1 8190 - vscode-uri: 3.1.0 8191 - 8192 7394 '@vscode/iconv-lite-umd@0.7.1': {} 8193 7395 8194 - '@vue/compiler-core@3.5.27': 8195 - dependencies: 8196 - '@babel/parser': 7.28.6 8197 - '@vue/shared': 3.5.27 8198 - entities: 7.0.1 8199 - estree-walker: 2.0.2 8200 - source-map-js: 1.2.1 8201 - 8202 7396 '@vue/compiler-core@3.5.30': 8203 7397 dependencies: 8204 7398 '@babel/parser': 7.29.0 ··· 8206 7400 entities: 7.0.1 8207 7401 estree-walker: 2.0.2 8208 7402 source-map-js: 1.2.1 8209 - 8210 - '@vue/compiler-dom@3.5.27': 8211 - dependencies: 8212 - '@vue/compiler-core': 3.5.27 8213 - '@vue/shared': 3.5.27 8214 7403 8215 7404 '@vue/compiler-dom@3.5.30': 8216 7405 dependencies: ··· 8247 7436 8248 7437 '@vue/devtools-shared@8.1.0': {} 8249 7438 8250 - '@vue/language-core@3.2.4': 8251 - dependencies: 8252 - '@volar/language-core': 2.4.27 8253 - '@vue/compiler-dom': 3.5.27 8254 - '@vue/shared': 3.5.27 8255 - alien-signals: 3.1.2 8256 - muggle-string: 0.4.1 8257 - path-browserify: 1.0.1 8258 - picomatch: 4.0.3 8259 - 8260 7439 '@vue/reactivity@3.5.30': 8261 7440 dependencies: 8262 7441 '@vue/shared': 3.5.30 ··· 8310 7489 mime-types: 3.0.2 8311 7490 negotiator: 1.0.0 8312 7491 8313 - acorn-jsx@5.3.2(acorn@8.16.0): 8314 - dependencies: 8315 - acorn: 8.16.0 8316 - 8317 7492 acorn@8.16.0: {} 8318 7493 8319 7494 agent-base@7.1.4: {} ··· 8327 7502 optionalDependencies: 8328 7503 ajv: 8.18.0 8329 7504 8330 - ajv@6.14.0: 8331 - dependencies: 8332 - fast-deep-equal: 3.1.3 8333 - fast-json-stable-stringify: 2.1.0 8334 - json-schema-traverse: 0.4.1 8335 - uri-js: 4.4.1 8336 - 8337 7505 ajv@8.18.0: 8338 7506 dependencies: 8339 7507 fast-deep-equal: 3.1.3 8340 7508 fast-uri: 3.1.0 8341 7509 json-schema-traverse: 1.0.0 8342 7510 require-from-string: 2.0.2 8343 - 8344 - alien-signals@3.1.2: {} 8345 7511 8346 7512 ansi-colors@4.1.3: {} 8347 7513 ··· 8357 7523 8358 7524 argparse@2.0.1: {} 8359 7525 7526 + args-tokenizer@0.3.0: {} 7527 + 8360 7528 assertion-error@2.0.1: {} 8361 7529 8362 - ast-kit@3.0.0-beta.1: 8363 - dependencies: 8364 - '@babel/parser': 8.0.0-rc.2 8365 - estree-walker: 3.0.3 8366 - pathe: 2.0.3 8367 - 8368 7530 ast-types@0.16.1: 8369 7531 dependencies: 8370 7532 tslib: 2.8.1 ··· 8392 7554 - '@types/react' 8393 7555 8394 7556 birpc@2.9.0: {} 8395 - 8396 - birpc@4.0.0: {} 8397 7557 8398 7558 blake3-wasm@2.1.5: {} 8399 7559 ··· 8431 7591 node-releases: 2.0.36 8432 7592 update-browserslist-db: 1.2.3(browserslist@4.28.1) 8433 7593 8434 - bun-types@1.3.10: 7594 + bumpp@11.0.0: 8435 7595 dependencies: 8436 - '@types/node': 25.1.0 7596 + args-tokenizer: 0.3.0 7597 + cac: 7.0.0 7598 + jsonc-parser: 3.3.1 7599 + package-manager-detector: 1.6.0 7600 + semver: 7.7.4 7601 + tinyexec: 1.0.4 7602 + tinyglobby: 0.2.15 7603 + unconfig: 7.5.0 7604 + yaml: 2.8.2 8437 7605 8438 7606 bundle-name@4.1.0: 8439 7607 dependencies: ··· 8457 7625 rc9: 2.1.2 8458 7626 8459 7627 cac@6.7.14: {} 7628 + 7629 + cac@7.0.0: {} 8460 7630 8461 7631 call-bind-apply-helpers@1.0.2: 8462 7632 dependencies: ··· 8615 7785 8616 7786 dedent@1.7.2: {} 8617 7787 8618 - deep-is@0.1.4: {} 8619 - 8620 7788 deepmerge@4.3.1: {} 8621 7789 8622 7790 default-browser-id@5.0.1: {} ··· 8654 7822 8655 7823 dotenv@17.3.1: {} 8656 7824 8657 - dprint@0.51.1: 8658 - optionalDependencies: 8659 - '@dprint/darwin-arm64': 0.51.1 8660 - '@dprint/darwin-x64': 0.51.1 8661 - '@dprint/linux-arm64-glibc': 0.51.1 8662 - '@dprint/linux-arm64-musl': 0.51.1 8663 - '@dprint/linux-loong64-glibc': 0.51.1 8664 - '@dprint/linux-loong64-musl': 0.51.1 8665 - '@dprint/linux-riscv64-glibc': 0.51.1 8666 - '@dprint/linux-x64-glibc': 0.51.1 8667 - '@dprint/linux-x64-musl': 0.51.1 8668 - '@dprint/win32-arm64': 0.51.1 8669 - '@dprint/win32-x64': 0.51.1 8670 - 8671 - dts-resolver@2.1.3: {} 8672 - 8673 7825 dunder-proto@1.0.1: 8674 7826 dependencies: 8675 7827 call-bind-apply-helpers: 1.0.2 ··· 8692 7844 emoji-regex@10.6.0: {} 8693 7845 8694 7846 emoji-regex@8.0.0: {} 8695 - 8696 - empathic@2.0.0: {} 8697 7847 8698 7848 encodeurl@2.0.0: {} 8699 7849 ··· 8786 7936 8787 7937 escape-html@1.0.3: {} 8788 7938 8789 - escape-string-regexp@4.0.0: {} 8790 - 8791 7939 escape-string-regexp@5.0.0: {} 8792 7940 8793 - eslint-scope@9.1.2: 8794 - dependencies: 8795 - '@types/esrecurse': 4.3.1 8796 - '@types/estree': 1.0.8 8797 - esrecurse: 4.3.0 8798 - estraverse: 5.3.0 8799 - 8800 - eslint-visitor-keys@3.4.3: {} 8801 - 8802 - eslint-visitor-keys@5.0.1: {} 8803 - 8804 - eslint@10.0.3(jiti@2.6.1): 8805 - dependencies: 8806 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) 8807 - '@eslint-community/regexpp': 4.12.2 8808 - '@eslint/config-array': 0.23.3 8809 - '@eslint/config-helpers': 0.5.3 8810 - '@eslint/core': 1.1.1 8811 - '@eslint/plugin-kit': 0.6.1 8812 - '@humanfs/node': 0.16.7 8813 - '@humanwhocodes/module-importer': 1.0.1 8814 - '@humanwhocodes/retry': 0.4.3 8815 - '@types/estree': 1.0.8 8816 - ajv: 6.14.0 8817 - cross-spawn: 7.0.6 8818 - debug: 4.4.3(supports-color@10.2.2) 8819 - escape-string-regexp: 4.0.0 8820 - eslint-scope: 9.1.2 8821 - eslint-visitor-keys: 5.0.1 8822 - espree: 11.2.0 8823 - esquery: 1.7.0 8824 - esutils: 2.0.3 8825 - fast-deep-equal: 3.1.3 8826 - file-entry-cache: 8.0.0 8827 - find-up: 5.0.0 8828 - glob-parent: 6.0.2 8829 - ignore: 5.3.2 8830 - imurmurhash: 0.1.4 8831 - is-glob: 4.0.3 8832 - json-stable-stringify-without-jsonify: 1.0.1 8833 - minimatch: 10.2.4 8834 - natural-compare: 1.4.0 8835 - optionator: 0.9.4 8836 - optionalDependencies: 8837 - jiti: 2.6.1 8838 - transitivePeerDependencies: 8839 - - supports-color 8840 - 8841 - espree@11.2.0: 8842 - dependencies: 8843 - acorn: 8.16.0 8844 - acorn-jsx: 5.3.2(acorn@8.16.0) 8845 - eslint-visitor-keys: 5.0.1 8846 - 8847 7941 esprima@4.0.1: {} 8848 7942 8849 - esquery@1.7.0: 8850 - dependencies: 8851 - estraverse: 5.3.0 8852 - 8853 - esrecurse@4.3.0: 8854 - dependencies: 8855 - estraverse: 5.3.0 8856 - 8857 - estraverse@5.3.0: {} 8858 - 8859 7943 estree-walker@2.0.2: {} 8860 7944 8861 7945 estree-walker@3.0.3: 8862 7946 dependencies: 8863 7947 '@types/estree': 1.0.8 8864 - 8865 - esutils@2.0.3: {} 8866 7948 8867 7949 etag@1.8.1: {} 8868 7950 ··· 8973 8055 merge2: 1.4.1 8974 8056 micromatch: 4.0.8 8975 8057 8976 - fast-json-stable-stringify@2.1.0: {} 8977 - 8978 - fast-levenshtein@2.0.6: {} 8979 - 8980 8058 fast-uri@3.1.0: {} 8981 8059 8982 8060 fastq@1.20.1: ··· 8998 8076 dependencies: 8999 8077 is-unicode-supported: 2.1.0 9000 8078 9001 - file-entry-cache@8.0.0: 9002 - dependencies: 9003 - flat-cache: 4.0.1 9004 - 9005 8079 fill-range@7.1.1: 9006 8080 dependencies: 9007 8081 to-regex-range: 5.0.1 ··· 9017 8091 transitivePeerDependencies: 9018 8092 - supports-color 9019 8093 9020 - find-up@5.0.0: 9021 - dependencies: 9022 - locate-path: 6.0.0 9023 - path-exists: 4.0.0 9024 - 9025 8094 fkill@9.0.0: 9026 8095 dependencies: 9027 8096 aggregate-error: 5.0.0 ··· 9031 8100 ps-list: 8.1.1 9032 8101 taskkill: 5.0.0 9033 8102 9034 - flat-cache@4.0.1: 9035 - dependencies: 9036 - flatted: 3.4.1 9037 - keyv: 4.5.4 9038 - 9039 - flatted@3.4.1: {} 9040 - 9041 8103 focus-trap@7.8.0: 9042 8104 dependencies: 9043 8105 tabbable: 6.4.0 ··· 9112 8174 get-tsconfig@4.13.6: 9113 8175 dependencies: 9114 8176 resolve-pkg-maps: 1.0.0 8177 + optional: true 9115 8178 9116 8179 giget@2.0.0: 9117 8180 dependencies: ··· 9123 8186 pathe: 2.0.3 9124 8187 9125 8188 glob-parent@5.1.2: 9126 - dependencies: 9127 - is-glob: 4.0.3 9128 - 9129 - glob-parent@6.0.2: 9130 8189 dependencies: 9131 8190 is-glob: 4.0.3 9132 8191 ··· 9176 8235 hono@4.12.7: {} 9177 8236 9178 8237 hookable@5.5.3: {} 9179 - 9180 - hookable@6.0.1: {} 9181 8238 9182 8239 html-void-elements@3.0.0: {} 9183 8240 ··· 9219 8276 parent-module: 1.0.1 9220 8277 resolve-from: 4.0.0 9221 8278 9222 - import-without-cache@0.2.5: {} 9223 - 9224 - imurmurhash@0.1.4: {} 9225 - 9226 8279 indent-string@5.0.0: {} 9227 8280 9228 8281 index-to-position@1.2.0: {} ··· 9303 8356 9304 8357 jsesc@3.1.0: {} 9305 8358 9306 - json-buffer@3.0.1: {} 9307 - 9308 8359 json-parse-even-better-errors@2.3.1: {} 9309 - 9310 - json-schema-traverse@0.4.1: {} 9311 8360 9312 8361 json-schema-traverse@1.0.0: {} 9313 8362 9314 8363 json-schema-typed@8.0.2: {} 9315 8364 9316 - json-stable-stringify-without-jsonify@1.0.1: {} 9317 - 9318 8365 json5@2.2.3: {} 9319 8366 9320 8367 jsonc-parser@3.3.1: {} ··· 9325 8372 optionalDependencies: 9326 8373 graceful-fs: 4.2.11 9327 8374 9328 - keyv@4.5.4: 9329 - dependencies: 9330 - json-buffer: 3.0.1 9331 - 9332 8375 kleur@3.0.3: {} 9333 8376 9334 8377 kleur@4.1.5: {} 9335 8378 9336 - lefthook-darwin-arm64@2.0.16: 9337 - optional: true 9338 - 9339 - lefthook-darwin-x64@2.0.16: 9340 - optional: true 9341 - 9342 - lefthook-freebsd-arm64@2.0.16: 9343 - optional: true 9344 - 9345 - lefthook-freebsd-x64@2.0.16: 9346 - optional: true 9347 - 9348 - lefthook-linux-arm64@2.0.16: 9349 - optional: true 9350 - 9351 - lefthook-linux-x64@2.0.16: 9352 - optional: true 9353 - 9354 - lefthook-openbsd-arm64@2.0.16: 9355 - optional: true 9356 - 9357 - lefthook-openbsd-x64@2.0.16: 9358 - optional: true 9359 - 9360 - lefthook-windows-arm64@2.0.16: 9361 - optional: true 9362 - 9363 - lefthook-windows-x64@2.0.16: 9364 - optional: true 9365 - 9366 - lefthook@2.0.16: 9367 - optionalDependencies: 9368 - lefthook-darwin-arm64: 2.0.16 9369 - lefthook-darwin-x64: 2.0.16 9370 - lefthook-freebsd-arm64: 2.0.16 9371 - lefthook-freebsd-x64: 2.0.16 9372 - lefthook-linux-arm64: 2.0.16 9373 - lefthook-linux-x64: 2.0.16 9374 - lefthook-openbsd-arm64: 2.0.16 9375 - lefthook-openbsd-x64: 2.0.16 9376 - lefthook-windows-arm64: 2.0.16 9377 - lefthook-windows-x64: 2.0.16 9378 - 9379 - levn@0.4.1: 9380 - dependencies: 9381 - prelude-ls: 1.2.1 9382 - type-check: 0.4.0 9383 - 9384 8379 lightningcss-android-arm64@1.31.1: 9385 8380 optional: true 9386 8381 ··· 9431 8426 lightningcss-win32-x64-msvc: 1.31.1 9432 8427 9433 8428 lines-and-columns@1.2.4: {} 9434 - 9435 - locate-path@6.0.0: 9436 - dependencies: 9437 - p-locate: 5.0.0 9438 8429 9439 8430 log-symbols@6.0.0: 9440 8431 dependencies: ··· 9595 8586 9596 8587 ms@2.1.3: {} 9597 8588 9598 - msw@2.12.10(@types/node@25.1.0)(typescript@5.9.3): 8589 + msw@2.12.10(@types/node@24.12.0)(typescript@5.9.3): 9599 8590 dependencies: 9600 - '@inquirer/confirm': 5.1.21(@types/node@25.1.0) 8591 + '@inquirer/confirm': 5.1.21(@types/node@24.12.0) 9601 8592 '@mswjs/interceptors': 0.41.3 9602 8593 '@open-draft/deferred-promise': 2.2.0 9603 8594 '@types/statuses': 2.0.6 ··· 9620 8611 transitivePeerDependencies: 9621 8612 - '@types/node' 9622 8613 9623 - muggle-string@0.4.1: {} 9624 - 9625 8614 mute-stream@2.0.0: {} 9626 8615 9627 8616 nanoid@3.3.11: {} 9628 - 9629 - natural-compare@1.4.0: {} 9630 8617 9631 8618 negotiator@1.0.0: {} 9632 8619 ··· 9662 8649 dependencies: 9663 8650 citty: 0.2.1 9664 8651 pathe: 2.0.3 9665 - tinyexec: 1.0.2 8652 + tinyexec: 1.0.4 9666 8653 9667 8654 object-assign@4.1.1: {} 9668 8655 ··· 9739 8726 typescript: 5.9.3 9740 8727 yargs-parser: 21.1.1 9741 8728 9742 - optionator@0.9.4: 9743 - dependencies: 9744 - deep-is: 0.1.4 9745 - fast-levenshtein: 2.0.6 9746 - levn: 0.4.1 9747 - prelude-ls: 1.2.1 9748 - type-check: 0.4.0 9749 - word-wrap: 1.2.5 9750 - 9751 8729 ora@8.2.0: 9752 8730 dependencies: 9753 8731 chalk: 5.6.2 ··· 9848 8826 '@oxlint-tsgolint/win32-arm64': 0.16.0 9849 8827 '@oxlint-tsgolint/win32-x64': 0.16.0 9850 8828 9851 - oxlint@1.51.0(oxlint-tsgolint@0.16.0): 9852 - optionalDependencies: 9853 - '@oxlint/binding-android-arm-eabi': 1.51.0 9854 - '@oxlint/binding-android-arm64': 1.51.0 9855 - '@oxlint/binding-darwin-arm64': 1.51.0 9856 - '@oxlint/binding-darwin-x64': 1.51.0 9857 - '@oxlint/binding-freebsd-x64': 1.51.0 9858 - '@oxlint/binding-linux-arm-gnueabihf': 1.51.0 9859 - '@oxlint/binding-linux-arm-musleabihf': 1.51.0 9860 - '@oxlint/binding-linux-arm64-gnu': 1.51.0 9861 - '@oxlint/binding-linux-arm64-musl': 1.51.0 9862 - '@oxlint/binding-linux-ppc64-gnu': 1.51.0 9863 - '@oxlint/binding-linux-riscv64-gnu': 1.51.0 9864 - '@oxlint/binding-linux-riscv64-musl': 1.51.0 9865 - '@oxlint/binding-linux-s390x-gnu': 1.51.0 9866 - '@oxlint/binding-linux-x64-gnu': 1.51.0 9867 - '@oxlint/binding-linux-x64-musl': 1.51.0 9868 - '@oxlint/binding-openharmony-arm64': 1.51.0 9869 - '@oxlint/binding-win32-arm64-msvc': 1.51.0 9870 - '@oxlint/binding-win32-ia32-msvc': 1.51.0 9871 - '@oxlint/binding-win32-x64-msvc': 1.51.0 9872 - oxlint-tsgolint: 0.16.0 9873 - 9874 8829 oxlint@1.55.0(oxlint-tsgolint@0.16.0): 9875 8830 optionalDependencies: 9876 8831 '@oxlint/binding-android-arm-eabi': 1.55.0 ··· 9894 8849 '@oxlint/binding-win32-x64-msvc': 1.55.0 9895 8850 oxlint-tsgolint: 0.16.0 9896 8851 9897 - p-limit@3.1.0: 9898 - dependencies: 9899 - yocto-queue: 0.1.0 9900 - 9901 - p-locate@5.0.0: 9902 - dependencies: 9903 - p-limit: 3.1.0 9904 - 9905 8852 package-manager-detector@1.6.0: {} 9906 8853 9907 8854 parent-module@1.0.1: ··· 9933 8880 9934 8881 path-browserify@1.0.1: {} 9935 8882 9936 - path-exists@4.0.0: {} 9937 - 9938 8883 path-key@3.1.1: {} 9939 8884 9940 8885 path-key@4.0.0: {} ··· 10000 8945 10001 8946 preact@10.29.0: {} 10002 8947 10003 - prelude-ls@1.2.1: {} 10004 - 10005 8948 pretty-ms@9.3.0: 10006 8949 dependencies: 10007 8950 parse-ms: 4.0.0 ··· 10023 8966 ipaddr.js: 1.9.1 10024 8967 10025 8968 ps-list@8.1.1: {} 10026 - 10027 - punycode@2.3.1: {} 10028 8969 10029 8970 qs@6.15.0: 10030 8971 dependencies: ··· 10073 9014 react-fast-compare: 3.2.2 10074 9015 shallowequal: 1.1.0 10075 9016 10076 - react-refresh@0.18.0: {} 10077 - 10078 9017 react-scan@0.5.3(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): 10079 9018 dependencies: 10080 9019 '@babel/core': 7.29.0 ··· 10135 9074 10136 9075 resolve-from@4.0.0: {} 10137 9076 10138 - resolve-pkg-maps@1.0.0: {} 9077 + resolve-pkg-maps@1.0.0: 9078 + optional: true 10139 9079 10140 9080 restore-cursor@5.1.0: 10141 9081 dependencies: ··· 10146 9086 10147 9087 reusify@1.1.0: {} 10148 9088 10149 - rolldown-plugin-dts@0.22.5(@typescript/native-preview@7.0.0-dev.20260313.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)): 9089 + rolldown@0.15.1(@babel/runtime@7.28.6): 10150 9090 dependencies: 10151 - '@babel/generator': 8.0.0-rc.2 10152 - '@babel/helper-validator-identifier': 8.0.0-rc.2 10153 - '@babel/parser': 8.0.0-rc.2 10154 - '@babel/types': 8.0.0-rc.2 10155 - ast-kit: 3.0.0-beta.1 10156 - birpc: 4.0.0 10157 - dts-resolver: 2.1.3 10158 - get-tsconfig: 4.13.6 10159 - obug: 2.1.1 10160 - rolldown: 1.0.0-rc.3 9091 + zod: 3.25.76 10161 9092 optionalDependencies: 10162 - '@typescript/native-preview': 7.0.0-dev.20260313.1 10163 - typescript: 5.9.3 10164 - vue-tsc: 3.2.4(typescript@5.9.3) 10165 - transitivePeerDependencies: 10166 - - oxc-resolver 10167 - 10168 - rolldown@1.0.0-rc.3: 10169 - dependencies: 10170 - '@oxc-project/types': 0.112.0 10171 - '@rolldown/pluginutils': 1.0.0-rc.3 10172 - optionalDependencies: 10173 - '@rolldown/binding-android-arm64': 1.0.0-rc.3 10174 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.3 10175 - '@rolldown/binding-darwin-x64': 1.0.0-rc.3 10176 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.3 10177 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.3 10178 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.3 10179 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.3 10180 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.3 10181 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.3 10182 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.3 10183 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.3 10184 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.3 10185 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.3 9093 + '@babel/runtime': 7.28.6 9094 + '@rolldown/binding-darwin-arm64': 0.15.1 9095 + '@rolldown/binding-darwin-x64': 0.15.1 9096 + '@rolldown/binding-freebsd-x64': 0.15.1 9097 + '@rolldown/binding-linux-arm-gnueabihf': 0.15.1 9098 + '@rolldown/binding-linux-arm64-gnu': 0.15.1 9099 + '@rolldown/binding-linux-arm64-musl': 0.15.1 9100 + '@rolldown/binding-linux-x64-gnu': 0.15.1 9101 + '@rolldown/binding-linux-x64-musl': 0.15.1 9102 + '@rolldown/binding-wasm32-wasi': 0.15.1 9103 + '@rolldown/binding-win32-arm64-msvc': 0.15.1 9104 + '@rolldown/binding-win32-ia32-msvc': 0.15.1 9105 + '@rolldown/binding-win32-x64-msvc': 0.15.1 10186 9106 10187 9107 rolldown@1.0.0-rc.6: 10188 9108 dependencies: ··· 10291 9211 10292 9212 setprototypeof@1.2.0: {} 10293 9213 10294 - shadcn@4.0.6(@types/node@25.1.0)(typescript@5.9.3): 9214 + shadcn@4.0.6(@types/node@24.12.0)(typescript@5.9.3): 10295 9215 dependencies: 10296 9216 '@antfu/ni': 25.0.0 10297 9217 '@babel/core': 7.29.0 ··· 10313 9233 fuzzysort: 3.1.0 10314 9234 https-proxy-agent: 7.0.6(supports-color@10.2.2) 10315 9235 kleur: 4.1.5 10316 - msw: 2.12.10(@types/node@25.1.0)(typescript@5.9.3) 9236 + msw: 2.12.10(@types/node@24.12.0)(typescript@5.9.3) 10317 9237 node-fetch: 3.3.2 10318 9238 open: 11.0.0 10319 9239 ora: 8.2.0 ··· 10516 9436 10517 9437 tinyexec@1.0.2: {} 10518 9438 9439 + tinyexec@1.0.4: {} 9440 + 10519 9441 tinyglobby@0.2.15: 10520 9442 dependencies: 10521 9443 fdir: 6.5.0(picomatch@4.0.3) ··· 10541 9463 dependencies: 10542 9464 tldts: 7.0.25 10543 9465 10544 - tree-kill@1.2.2: {} 10545 - 10546 9466 trim-lines@3.0.1: {} 10547 - 10548 - ts-api-utils@2.4.0(typescript@5.9.3): 10549 - dependencies: 10550 - typescript: 5.9.3 10551 9467 10552 9468 ts-morph@26.0.0: 10553 9469 dependencies: ··· 10562 9478 minimist: 1.2.8 10563 9479 strip-bom: 3.0.0 10564 9480 10565 - tsdown@0.20.3(@typescript/native-preview@7.0.0-dev.20260313.1)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)): 10566 - dependencies: 10567 - ansis: 4.2.0 10568 - cac: 6.7.14 10569 - defu: 6.1.4 10570 - empathic: 2.0.0 10571 - hookable: 6.0.1 10572 - import-without-cache: 0.2.5 10573 - obug: 2.1.1 10574 - picomatch: 4.0.3 10575 - rolldown: 1.0.0-rc.3 10576 - rolldown-plugin-dts: 0.22.5(@typescript/native-preview@7.0.0-dev.20260313.1)(rolldown@1.0.0-rc.3)(typescript@5.9.3)(vue-tsc@3.2.4(typescript@5.9.3)) 10577 - semver: 7.7.4 10578 - tinyexec: 1.0.2 10579 - tinyglobby: 0.2.15 10580 - tree-kill: 1.2.2 10581 - unconfig-core: 7.5.0 10582 - unrun: 0.2.32 10583 - optionalDependencies: 10584 - typescript: 5.9.3 10585 - transitivePeerDependencies: 10586 - - '@ts-macro/tsc' 10587 - - '@typescript/native-preview' 10588 - - oxc-resolver 10589 - - synckit 10590 - - vue-tsc 10591 - 10592 9481 tslib@2.8.1: {} 10593 9482 10594 9483 tsx@4.21.0: ··· 10597 9486 get-tsconfig: 4.13.6 10598 9487 optionalDependencies: 10599 9488 fsevents: 2.3.3 9489 + optional: true 10600 9490 10601 9491 tw-animate-css@1.4.0: {} 10602 9492 10603 - type-check@0.4.0: 10604 - dependencies: 10605 - prelude-ls: 1.2.1 10606 - 10607 9493 type-fest@4.41.0: {} 10608 9494 10609 9495 type-fest@5.4.4: ··· 10617 9503 mime-types: 3.0.2 10618 9504 10619 9505 type-level-regexp@0.1.17: {} 10620 - 10621 - typescript-eslint@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3): 10622 - dependencies: 10623 - '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 10624 - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 10625 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.9.3) 10626 - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@5.9.3) 10627 - eslint: 10.0.3(jiti@2.6.1) 10628 - typescript: 5.9.3 10629 - transitivePeerDependencies: 10630 - - supports-color 10631 9506 10632 9507 typescript@5.9.3: {} 10633 9508 ··· 10685 9560 10686 9561 universalify@2.0.1: {} 10687 9562 10688 - unocss@66.6.6(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)): 9563 + unocss@66.6.6(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)): 10689 9564 dependencies: 10690 9565 '@unocss/cli': 66.6.6 10691 9566 '@unocss/core': 66.6.6 ··· 10703 9578 '@unocss/transformer-compile-class': 66.6.6 10704 9579 '@unocss/transformer-directives': 66.6.6 10705 9580 '@unocss/transformer-variant-group': 66.6.6 10706 - '@unocss/vite': 66.6.6(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)) 9581 + '@unocss/vite': 66.6.6(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2)) 10707 9582 transitivePeerDependencies: 10708 9583 - vite 10709 9584 ··· 10727 9602 picomatch: 4.0.3 10728 9603 webpack-virtual-modules: 0.6.2 10729 9604 10730 - unrun@0.2.32: 10731 - dependencies: 10732 - rolldown: 1.0.0-rc.9 10733 - 10734 9605 until-async@3.0.2: {} 10735 9606 10736 9607 update-browserslist-db@1.2.3(browserslist@4.28.1): ··· 10741 9612 10742 9613 uri-js-replace@1.0.1: {} 10743 9614 10744 - uri-js@4.4.1: 10745 - dependencies: 10746 - punycode: 2.3.1 10747 - 10748 9615 use-sync-external-store@1.6.0(react@19.2.4): 10749 9616 dependencies: 10750 9617 react: 19.2.4 ··· 10765 9632 '@types/unist': 3.0.3 10766 9633 vfile-message: 4.0.3 10767 9634 10768 - vite-plus@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)): 9635 + vite-plus@0.1.11(@types/node@24.12.0)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): 9636 + dependencies: 9637 + '@oxc-project/types': 0.115.0 9638 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 9639 + '@voidzero-dev/vite-plus-test': 0.1.11(@types/node@24.12.0)(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 9640 + cac: 6.7.14 9641 + cross-spawn: 7.0.6 9642 + oxfmt: 0.40.0 9643 + oxlint: 1.55.0(oxlint-tsgolint@0.16.0) 9644 + oxlint-tsgolint: 0.16.0 9645 + picocolors: 1.1.1 9646 + optionalDependencies: 9647 + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.11 9648 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.11 9649 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.11 9650 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.11 9651 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.11 9652 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.11 9653 + transitivePeerDependencies: 9654 + - '@arethetypeswrong/core' 9655 + - '@edge-runtime/vm' 9656 + - '@opentelemetry/api' 9657 + - '@tsdown/css' 9658 + - '@tsdown/exe' 9659 + - '@types/node' 9660 + - '@vitejs/devtools' 9661 + - '@vitest/ui' 9662 + - bufferutil 9663 + - esbuild 9664 + - happy-dom 9665 + - jiti 9666 + - jsdom 9667 + - less 9668 + - publint 9669 + - sass 9670 + - sass-embedded 9671 + - stylus 9672 + - sugarss 9673 + - terser 9674 + - tsx 9675 + - typescript 9676 + - unplugin-unused 9677 + - utf-8-validate 9678 + - vite 9679 + - yaml 9680 + 9681 + vite-plus@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2): 10769 9682 dependencies: 10770 9683 '@oxc-project/types': 0.115.0 10771 - '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3) 10772 - '@voidzero-dev/vite-plus-test': 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)) 9684 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 9685 + '@voidzero-dev/vite-plus-test': 0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) 10773 9686 cac: 6.7.14 10774 9687 cross-spawn: 7.0.6 10775 9688 oxfmt: 0.40.0 ··· 10811 9724 - vite 10812 9725 - yaml 10813 9726 10814 - vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0): 9727 + vite-plus@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2): 9728 + dependencies: 9729 + '@oxc-project/types': 0.115.0 9730 + '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) 9731 + '@voidzero-dev/vite-plus-test': 0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2))(yaml@2.8.2) 9732 + cac: 6.7.14 9733 + cross-spawn: 7.0.6 9734 + oxfmt: 0.40.0 9735 + oxlint: 1.55.0(oxlint-tsgolint@0.16.0) 9736 + oxlint-tsgolint: 0.16.0 9737 + picocolors: 1.1.1 9738 + optionalDependencies: 9739 + '@voidzero-dev/vite-plus-darwin-arm64': 0.1.11 9740 + '@voidzero-dev/vite-plus-darwin-x64': 0.1.11 9741 + '@voidzero-dev/vite-plus-linux-arm64-gnu': 0.1.11 9742 + '@voidzero-dev/vite-plus-linux-x64-gnu': 0.1.11 9743 + '@voidzero-dev/vite-plus-win32-arm64-msvc': 0.1.11 9744 + '@voidzero-dev/vite-plus-win32-x64-msvc': 0.1.11 9745 + transitivePeerDependencies: 9746 + - '@arethetypeswrong/core' 9747 + - '@edge-runtime/vm' 9748 + - '@opentelemetry/api' 9749 + - '@tsdown/css' 9750 + - '@tsdown/exe' 9751 + - '@types/node' 9752 + - '@vitejs/devtools' 9753 + - '@vitest/ui' 9754 + - bufferutil 9755 + - esbuild 9756 + - happy-dom 9757 + - jiti 9758 + - jsdom 9759 + - less 9760 + - publint 9761 + - sass 9762 + - sass-embedded 9763 + - stylus 9764 + - sugarss 9765 + - terser 9766 + - tsx 9767 + - typescript 9768 + - unplugin-unused 9769 + - utf-8-validate 9770 + - vite 9771 + - yaml 9772 + 9773 + vite@8.0.0-beta.16(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2): 10815 9774 dependencies: 10816 9775 '@oxc-project/runtime': 0.115.0 10817 9776 lightningcss: 1.31.1 ··· 10826 9785 jiti: 2.6.1 10827 9786 sass: 1.97.3 10828 9787 tsx: 4.21.0 9788 + yaml: 2.8.2 10829 9789 10830 - vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0): 9790 + vite@8.0.0-beta.16(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(yaml@2.8.2): 10831 9791 dependencies: 10832 9792 '@oxc-project/runtime': 0.115.0 10833 9793 lightningcss: 1.31.1 ··· 10842 9802 jiti: 2.6.1 10843 9803 sass: 1.97.3 10844 9804 tsx: 4.21.0 9805 + yaml: 2.8.2 10845 9806 10846 - vitepress@2.0.0-alpha.16(@types/node@25.1.0)(change-case@5.4.4)(esbuild@0.27.3)(jiti@2.6.1)(oxc-minify@0.116.0)(postcss@8.5.8)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3): 9807 + vitepress@2.0.0-alpha.16(@types/node@24.12.0)(change-case@5.4.4)(esbuild@0.27.3)(jiti@2.6.1)(oxc-minify@0.116.0)(postcss@8.5.8)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): 10847 9808 dependencies: 10848 9809 '@docsearch/css': 4.6.0 10849 9810 '@docsearch/js': 4.6.0 ··· 10853 9814 '@shikijs/transformers': 3.23.0 10854 9815 '@shikijs/types': 3.23.0 10855 9816 '@types/markdown-it': 14.1.2 10856 - '@vitejs/plugin-vue': 6.0.5(@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3))(vue@3.5.30(typescript@5.9.3)) 9817 + '@vitejs/plugin-vue': 6.0.5(@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(vue@3.5.30(typescript@5.9.3)) 10857 9818 '@vue/devtools-api': 8.1.0 10858 9819 '@vue/shared': 3.5.27 10859 9820 '@vueuse/core': 14.2.1(vue@3.5.30(typescript@5.9.3)) ··· 10862 9823 mark.js: 8.11.1 10863 9824 minisearch: 7.2.0 10864 9825 shiki: 3.23.0 10865 - vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.1.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)' 9826 + vite: '@voidzero-dev/vite-plus-core@0.1.11(@types/node@24.12.0)(esbuild@0.27.3)(jiti@2.6.1)(sass@1.97.3)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2)' 10866 9827 vue: 3.5.30(typescript@5.9.3) 10867 9828 optionalDependencies: 10868 9829 oxc-minify: 0.116.0 ··· 10898 9859 - unplugin-unused 10899 9860 - yaml 10900 9861 10901 - vscode-uri@3.1.0: {} 10902 - 10903 - vue-tsc@3.2.4(typescript@5.9.3): 10904 - dependencies: 10905 - '@volar/typescript': 2.4.27 10906 - '@vue/language-core': 3.2.4 10907 - typescript: 5.9.3 10908 - 10909 9862 vue@3.5.30(typescript@5.9.3): 10910 9863 dependencies: 10911 9864 '@vue/compiler-dom': 3.5.30 ··· 10929 9882 which@4.0.0: 10930 9883 dependencies: 10931 9884 isexe: 3.1.5 10932 - 10933 - word-wrap@1.2.5: {} 10934 9885 10935 9886 workerd@1.20260312.1: 10936 9887 optionalDependencies: ··· 10992 9943 10993 9944 yaml-ast-parser@0.0.43: {} 10994 9945 9946 + yaml@2.8.2: {} 9947 + 10995 9948 yargs-parser@21.1.1: {} 10996 9949 10997 9950 yargs@17.7.2: ··· 11003 9956 string-width: 4.2.3 11004 9957 y18n: 5.0.8 11005 9958 yargs-parser: 21.1.1 11006 - 11007 - yocto-queue@0.1.0: {} 11008 9959 11009 9960 yoctocolors-cjs@2.1.3: {} 11010 9961
+21 -12
pnpm-workspace.yaml
··· 1 - ignoreDepScripts: true 2 - ignoreWorkspaceRootCheck: true 3 - savePrefix: '' 4 - shellEmulator: true 5 - 6 1 packages: 7 - - 'sdk' 8 2 - 'examples/*' 9 3 - 'apps/*' 10 4 - 'packages/*' 11 5 12 6 catalog: 7 + '@babel/core': 7.29.0 8 + '@rolldown/plugin-babel': 0.2.1 9 + '@types/babel__core': 7.20.5 10 + '@types/node': ^24 13 11 '@typescript/native-preview': ^7.0.0-dev.20260105.1 12 + typescript: ^5 13 + vite: npm:@voidzero-dev/vite-plus-core@latest 14 + vite-plus: latest 14 15 vitest: npm:@voidzero-dev/vite-plus-test@latest 15 16 17 + catalogMode: prefer 18 + ignoreDepScripts: true 19 + ignoreWorkspaceRootCheck: true 16 20 overrides: 17 - vite: npm:@voidzero-dev/vite-plus-core@0.1.11 18 - vitest: npm:@voidzero-dev/vite-plus-test@0.1.11 19 - 20 - onlyBuiltDependencies: 21 - - dprint 22 - - lefthook 21 + vite: 'catalog:' 22 + vitest: 'catalog:' 23 + peerDependencyRules: 24 + allowAny: 25 + - vite 26 + - vitest 27 + allowedVersions: 28 + vite: '*' 29 + vitest: '*' 30 + savePrefix: '' 31 + shellEmulator: true
+5 -5
runtime-dist/default_guild_bundle.js
··· 6 6 const ping = prefix({ 7 7 name: 'ping', 8 8 description: 'Respond with pong', 9 - run: async ctx => { 9 + run: async (ctx) => { 10 10 await ctx.reply(buildPong(ctx.args)) 11 11 } 12 12 }) ··· 22 22 required: false 23 23 } 24 24 ], 25 - run: async ctx => { 25 + run: async (ctx) => { 26 26 const name = ctx.options.name || 'world' 27 27 await ctx.reply({ 28 28 content: `Hello, ${name}!`, ··· 38 38 { 39 39 name: 'get', 40 40 description: 'Get current count', 41 - run: async ctx => { 41 + run: async (ctx) => { 42 42 const store = kv.store('counters') 43 43 const count = await store.get('main') 44 44 await ctx.reply(`Current count: ${count || 0}`) ··· 47 47 { 48 48 name: 'increment', 49 49 description: 'Increment the counter', 50 - run: async ctx => { 50 + run: async (ctx) => { 51 51 const store = kv.store('counters') 52 52 const current = parseInt((await store.get('main')) || '0', 10) 53 53 const newCount = current + 1 ··· 58 58 { 59 59 name: 'reset', 60 60 description: 'Reset the counter', 61 - run: async ctx => { 61 + run: async (ctx) => { 62 62 const store = kv.store('counters') 63 63 await store.set('main', '0') 64 64 await ctx.reply('Counter reset to 0')
+18 -16
runtime-dist/runtime_module_resolution.js
··· 1 - /* dprint-ignore-file 2 - Bundled module map for multi-file deployments. 3 - We compile all user files into a single script and keep a tiny in-memory 4 - loader so ESM imports/exports work without a runtime filesystem. */ 5 - const __modules = {} 6 - const __cache = {} 7 - function __define(id, factory) {__modules[id] = factory } 8 - function __require(id) { 9 - if (__cache[id]) return __cache[id].exports 10 - const factory = __modules[id] 11 - if (!factory) throw new Error(`Module not found: ${id}`) 12 - const module = { exports: {} } 13 - __cache[id] = module 14 - factory(module.exports, module) 15 - return module.exports 16 - } 1 + /* dprint-ignore-file 2 + Bundled module map for multi-file deployments. 3 + We compile all user files into a single script and keep a tiny in-memory 4 + loader so ESM imports/exports work without a runtime filesystem. */ 5 + const __modules = {} 6 + const __cache = {} 7 + function __define(id, factory) { 8 + __modules[id] = factory 9 + } 10 + function __require(id) { 11 + if (__cache[id]) return __cache[id].exports 12 + const factory = __modules[id] 13 + if (!factory) throw new Error(`Module not found: ${id}`) 14 + const module = { exports: {} } 15 + __cache[id] = module 16 + factory(module.exports, module) 17 + return module.exports 18 + }
+20 -14
runtime-dist/runtime_sdk_bundle.js
··· 1 - var flora = (function(exports) { 1 + var flora = (function (exports) { 2 2 Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }) 3 3 // #region src/sdk/commands.ts 4 4 function prefix(command) { ··· 158 158 // #endregion 159 159 // #region src/sdk/components.ts 160 160 const isBuilder = (value) => typeof value?.toJSON === 'function' 161 - const resolveComponent = (value) => isBuilder(value) ? value.toJSON() : value 161 + const resolveComponent = (value) => (isBuilder(value) ? value.toJSON() : value) 162 162 var ActionRowBuilder = class { 163 163 #components = [] 164 164 addComponents(...components) { ··· 281 281 } 282 282 addDefaultValue(id, type) { 283 283 const current = this.data.default_values ?? [] 284 - this.data.default_values = [...current, { 285 - id, 286 - type 287 - }] 284 + this.data.default_values = [ 285 + ...current, 286 + { 287 + id, 288 + type 289 + } 290 + ] 288 291 return this 289 292 } 290 293 toJSON() { ··· 657 660 value, 658 661 inline 659 662 } 660 - this.#embed.fields = [...this.#embed.fields ?? [], field] 663 + this.#embed.fields = [...(this.#embed.fields ?? []), field] 661 664 return this 662 665 } 663 666 addFields(fields) { 664 - this.#embed.fields = [...this.#embed.fields ?? [], ...fields] 667 + this.#embed.fields = [...(this.#embed.fields ?? []), ...fields] 665 668 return this 666 669 } 667 670 setFields(fields) { ··· 762 765 * @returns Paginated result with keys, list_complete flag, and cursor for next page 763 766 */ 764 767 async list(options) { 765 - return await Deno.core.ops.op_kv_list_keys({ 766 - prefix: options?.prefix ?? void 0, 767 - limit: options?.limit ?? void 0, 768 - cursor: options?.cursor ?? void 0 769 - }, this.#storeName) 768 + return await Deno.core.ops.op_kv_list_keys( 769 + { 770 + prefix: options?.prefix ?? void 0, 771 + limit: options?.limit ?? void 0, 772 + cursor: options?.cursor ?? void 0 773 + }, 774 + this.#storeName 775 + ) 770 776 } 771 777 } 772 778 function store(name) { ··· 889 895 exports.userSelect = userSelect 890 896 return exports 891 897 })({}) 892 - ;(function(global) { 898 + ;(function (global) { 893 899 if (!global.flora) return 894 900 global.actionRow = global.flora.actionRow 895 901 global.ActionRowBuilder = global.flora.ActionRowBuilder
sdk/.gitignore packages/sdk/.gitignore
-1
sdk/README.md
··· 1 - https://flora.uwunet.workers.dev/sdk
+65 -68
sdk/global-types.d.ts packages/sdk/global-types.d.ts
··· 77 77 78 78 type CronHandler = (ctx: CronContext) => void | Promise<void> 79 79 80 - interface Secrets { 81 - } 80 + interface Secrets {} 82 81 83 82 var __floraHandlers: { [x: string]: Array<Function> } 84 83 ··· 103 102 var secrets: Secrets 104 103 105 104 // SDK exports (functions, consts, classes, types) 106 - function prefix( 107 - command: { 108 - name: string 109 - description?: string 110 - run: (ctx: MessageContext & { args: string[] }) => Promise<void> | void 111 - } 112 - ): { 105 + function prefix(command: { 106 + name: string 107 + description?: string 108 + run: (ctx: MessageContext & { args: string[] }) => Promise<void> | void 109 + }): { 113 110 name: string 114 111 description?: string 115 112 run: (ctx: MessageContext & { args: string[] }) => Promise<void> | void 116 113 } 117 114 118 - function slash( 119 - command: { 120 - name: string 121 - description: string 122 - options?: SlashCommandOption[] 123 - subcommands?: SlashSubcommand[] 124 - run?: (ctx: InteractionContext) => Promise<void> | void 125 - } 126 - ): { 115 + function slash(command: { 116 + name: string 117 + description: string 118 + options?: SlashCommandOption[] 119 + subcommands?: SlashSubcommand[] 120 + run?: (ctx: InteractionContext) => Promise<void> | void 121 + }): { 127 122 name: string 128 123 description: string 129 124 options?: SlashCommandOption[] ··· 131 126 run?: (ctx: InteractionContext) => Promise<void> | void 132 127 } 133 128 134 - function createBot( 135 - options: { 136 - prefix?: string 137 - commands?: Command[] 138 - prefixCommands?: Command[] 139 - slashCommands?: SlashCommand[] 140 - } 141 - ): void 129 + function createBot(options: { 130 + prefix?: string 131 + commands?: Command[] 132 + prefixCommands?: Command[] 133 + slashCommands?: SlashCommand[] 134 + }): void 142 135 143 136 function flattenCommands(commands: Array<SlashCommand>): Array<FlattenedSlashCommand> 144 137 ··· 668 661 669 662 type InteractionContext = BaseContext<EventInteractionCreate> & { options: SlashCommandOptions } 670 663 671 - type JsonValue = string | number | boolean | Array<JsonValue> | { 672 - [x: string]: JsonValue | undefined 673 - } | null 664 + type JsonValue = 665 + | string 666 + | number 667 + | boolean 668 + | Array<JsonValue> 669 + | { [x: string]: JsonValue | undefined } 670 + | null 674 671 675 672 type EventUser = { id: string; username: string; discriminator?: number; bot: boolean } 676 673 ··· 933 930 author?: { name?: string; url?: string; iconUrl?: string } 934 931 fields?: { name: string; value: string; inline: boolean }[] 935 932 }[] 936 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 937 - base64: { data: string; filename: string; description?: string } 938 - }[] 933 + attachments?: 934 + | { url: { url: string; filename?: string; description?: string } } 935 + | { base64: { data: string; filename: string; description?: string } }[] 939 936 components?: 940 937 | number 941 938 | string ··· 957 954 958 955 type SendMessageOptions = { 959 956 content?: string | undefined 960 - embeds?: { 961 - title?: string 962 - description?: string 963 - url?: string 964 - color?: number 965 - timestamp?: string 966 - footer?: { text?: string; iconUrl?: string } 967 - image?: { url?: string } 968 - thumbnail?: { url?: string } 969 - author?: { name?: string; url?: string; iconUrl?: string } 970 - fields?: { name: string; value: string; inline: boolean }[] 971 - }[] | undefined 972 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 973 - base64: { data: string; filename: string; description?: string } 974 - }[] | undefined 957 + embeds?: 958 + | { 959 + title?: string 960 + description?: string 961 + url?: string 962 + color?: number 963 + timestamp?: string 964 + footer?: { text?: string; iconUrl?: string } 965 + image?: { url?: string } 966 + thumbnail?: { url?: string } 967 + author?: { name?: string; url?: string; iconUrl?: string } 968 + fields?: { name: string; value: string; inline: boolean }[] 969 + }[] 970 + | undefined 971 + attachments?: 972 + | { url: { url: string; filename?: string; description?: string } } 973 + | { base64: { data: string; filename: string; description?: string } }[] 974 + | undefined 975 975 components?: 976 976 | (number | string | boolean | Array<JsonValue> | { [key in string]?: JsonValue } | null[]) 977 977 | undefined 978 978 tts?: boolean | undefined 979 - allowedMentions?: { 980 - parse?: string[] 981 - users?: string[] 982 - roles?: string[] 983 - repliedUser?: boolean 984 - } | undefined 979 + allowedMentions?: 980 + | { parse?: string[]; users?: string[]; roles?: string[]; repliedUser?: boolean } 981 + | undefined 985 982 flags?: bigint | undefined 986 983 messageId?: string | undefined 987 984 replyTo?: string | undefined ··· 1057 1054 author?: { name?: string; url?: string; iconUrl?: string } 1058 1055 fields?: { name: string; value: string; inline: boolean }[] 1059 1056 }[] 1060 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 1061 - base64: { data: string; filename: string; description?: string } 1062 - }[] 1057 + attachments?: 1058 + | { url: { url: string; filename?: string; description?: string } } 1059 + | { base64: { data: string; filename: string; description?: string } }[] 1063 1060 components?: 1064 1061 | number 1065 1062 | string ··· 1131 1128 author?: { name?: string; url?: string; iconUrl?: string } 1132 1129 fields?: { name: string; value: string; inline: boolean }[] 1133 1130 }[] 1134 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 1135 - base64: { data: string; filename: string; description?: string } 1136 - }[] 1131 + attachments?: 1132 + | { url: { url: string; filename?: string; description?: string } } 1133 + | { base64: { data: string; filename: string; description?: string } }[] 1137 1134 components?: 1138 1135 | number 1139 1136 | string ··· 1166 1163 author?: { name?: string; url?: string; iconUrl?: string } 1167 1164 fields?: { name: string; value: string; inline: boolean }[] 1168 1165 }[] 1169 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 1170 - base64: { data: string; filename: string; description?: string } 1171 - }[] 1166 + attachments?: 1167 + | { url: { url: string; filename?: string; description?: string } } 1168 + | { base64: { data: string; filename: string; description?: string } }[] 1172 1169 components?: 1173 1170 | number 1174 1171 | string ··· 1203 1200 author?: { name?: string; url?: string; iconUrl?: string } 1204 1201 fields?: { name: string; value: string; inline: boolean }[] 1205 1202 }[] 1206 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 1207 - base64: { data: string; filename: string; description?: string } 1208 - }[] 1203 + attachments?: 1204 + | { url: { url: string; filename?: string; description?: string } } 1205 + | { base64: { data: string; filename: string; description?: string } }[] 1209 1206 components?: 1210 1207 | number 1211 1208 | string ··· 1351 1348 author?: { name?: string; url?: string; iconUrl?: string } 1352 1349 fields?: { name: string; value: string; inline: boolean }[] 1353 1350 }[] 1354 - attachments?: { url: { url: string; filename?: string; description?: string } } | { 1355 - base64: { data: string; filename: string; description?: string } 1356 - }[] 1351 + attachments?: 1352 + | { url: { url: string; filename?: string; description?: string } } 1353 + | { base64: { data: string; filename: string; description?: string } }[] 1357 1354 components?: 1358 1355 | number 1359 1356 | string
+10 -11
sdk/package.json packages/sdk/package.json
··· 1 1 { 2 2 "name": "@uwu/flora-sdk", 3 3 "version": "0.0.0", 4 + "private": false, 5 + "files": [ 6 + "global-types.d.ts", 7 + "src", 8 + "tsconfig.json", 9 + "README.md" 10 + ], 4 11 "type": "module", 5 - "private": false, 12 + "types": "./global-types.d.ts", 6 13 "exports": { 7 14 ".": { 8 15 "types": "./global-types.d.ts" 9 16 }, 10 17 "./tsconfig": "./tsconfig.json" 11 18 }, 12 - "types": "./global-types.d.ts", 13 - "files": [ 14 - "global-types.d.ts", 15 - "src", 16 - "tsconfig.json", 17 - "README.md" 18 - ], 19 19 "publishConfig": { 20 20 "access": "public" 21 21 }, ··· 25 25 "test": "vite test" 26 26 }, 27 27 "devDependencies": { 28 - "@types/bun": "latest", 28 + "@types/node": "catalog:", 29 29 "@typescript/native-preview": "catalog:", 30 30 "rolldown": "^1.0.0-beta.53", 31 - "typescript": "^5.9.3", 32 - "vitest": "catalog:" 31 + "typescript": "catalog:" 33 32 } 34 33 }
-1139
sdk/pnpm-lock.yaml
··· 1 - lockfileVersion: '9.0' 2 - 3 - settings: 4 - autoInstallPeers: true 5 - excludeLinksFromLockfile: false 6 - 7 - catalogs: 8 - default: 9 - '@typescript/native-preview': 10 - specifier: ^7.0.0-dev.20260105.1 11 - version: 7.0.0-dev.20260306.1 12 - 13 - overrides: 14 - vite: npm:@voidzero-dev/vite-plus-core@0.1.11 15 - vitest: npm:@voidzero-dev/vite-plus-test@0.1.11 16 - 17 - importers: 18 - 19 - .: 20 - devDependencies: 21 - '@types/bun': 22 - specifier: latest 23 - version: 1.3.10 24 - '@typescript/native-preview': 25 - specifier: 'catalog:' 26 - version: 7.0.0-dev.20260306.1 27 - rolldown: 28 - specifier: ^1.0.0-beta.53 29 - version: 1.0.0-rc.7 30 - typescript: 31 - specifier: ^5.9.3 32 - version: 5.9.3 33 - vitest: 34 - specifier: npm:@voidzero-dev/vite-plus-test@0.1.11 35 - version: '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.3.5)(typescript@5.9.3)(vite@8.0.0(@types/node@25.3.5))' 36 - 37 - packages: 38 - 39 - '@emnapi/core@1.8.1': 40 - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} 41 - 42 - '@emnapi/runtime@1.8.1': 43 - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 44 - 45 - '@emnapi/wasi-threads@1.1.0': 46 - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 47 - 48 - '@napi-rs/wasm-runtime@1.1.1': 49 - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} 50 - 51 - '@oxc-project/runtime@0.115.0': 52 - resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==} 53 - engines: {node: ^20.19.0 || >=22.12.0} 54 - 55 - '@oxc-project/types@0.115.0': 56 - resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} 57 - 58 - '@polka/url@1.0.0-next.29': 59 - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 60 - 61 - '@rolldown/binding-android-arm64@1.0.0-rc.7': 62 - resolution: {integrity: sha512-/uadfNUaMLFFBGvcIOiq8NnlhvTZTjOyybJaJnhGxD0n9k5vZRJfTaitH5GHnbwmc6T2PC+ZpS1FQH+vXyS/UA==} 63 - engines: {node: ^20.19.0 || >=22.12.0} 64 - cpu: [arm64] 65 - os: [android] 66 - 67 - '@rolldown/binding-android-arm64@1.0.0-rc.9': 68 - resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==} 69 - engines: {node: ^20.19.0 || >=22.12.0} 70 - cpu: [arm64] 71 - os: [android] 72 - 73 - '@rolldown/binding-darwin-arm64@1.0.0-rc.7': 74 - resolution: {integrity: sha512-zokYr1KgRn0hRA89dmgtPj/BmKp9DxgrfAJvOEFfXa8nfYWW2nmgiYIBGpSIAJrEg7Qc/Qznovy6xYwmKh0M8g==} 75 - engines: {node: ^20.19.0 || >=22.12.0} 76 - cpu: [arm64] 77 - os: [darwin] 78 - 79 - '@rolldown/binding-darwin-arm64@1.0.0-rc.9': 80 - resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==} 81 - engines: {node: ^20.19.0 || >=22.12.0} 82 - cpu: [arm64] 83 - os: [darwin] 84 - 85 - '@rolldown/binding-darwin-x64@1.0.0-rc.7': 86 - resolution: {integrity: sha512-eZFjbmrapCBVgMmuLALH3pmQQQStHFuRhsFceJHk6KISW8CkI2e9OPLp9V4qXksrySQcD8XM8fpvGLs5l5C7LQ==} 87 - engines: {node: ^20.19.0 || >=22.12.0} 88 - cpu: [x64] 89 - os: [darwin] 90 - 91 - '@rolldown/binding-darwin-x64@1.0.0-rc.9': 92 - resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==} 93 - engines: {node: ^20.19.0 || >=22.12.0} 94 - cpu: [x64] 95 - os: [darwin] 96 - 97 - '@rolldown/binding-freebsd-x64@1.0.0-rc.7': 98 - resolution: {integrity: sha512-xjMrh8Dmu2DNwdY6DZsrF6YPGeesc3PaTlkh8v9cqmkSCNeTxnhX3ErhVnuv1j3n8t2IuuhQIwM9eZDINNEt5Q==} 99 - engines: {node: ^20.19.0 || >=22.12.0} 100 - cpu: [x64] 101 - os: [freebsd] 102 - 103 - '@rolldown/binding-freebsd-x64@1.0.0-rc.9': 104 - resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==} 105 - engines: {node: ^20.19.0 || >=22.12.0} 106 - cpu: [x64] 107 - os: [freebsd] 108 - 109 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': 110 - resolution: {integrity: sha512-mOvftrHiXg4/xFdxJY3T9Wl1/zDAOSlMN8z9an2bXsCwuvv3RdyhYbSMZDuDO52S04w9z7+cBd90lvQSPTAQtw==} 111 - engines: {node: ^20.19.0 || >=22.12.0} 112 - cpu: [arm] 113 - os: [linux] 114 - 115 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': 116 - resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==} 117 - engines: {node: ^20.19.0 || >=22.12.0} 118 - cpu: [arm] 119 - os: [linux] 120 - 121 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': 122 - resolution: {integrity: sha512-TuUkeuEEPRyXMBbJ86NRhAiPNezxHW8merl3Om2HASA9Pl1rI+VZcTtsVQ6v/P0MDIFpSl0k0+tUUze9HIXyEw==} 123 - engines: {node: ^20.19.0 || >=22.12.0} 124 - cpu: [arm64] 125 - os: [linux] 126 - 127 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': 128 - resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==} 129 - engines: {node: ^20.19.0 || >=22.12.0} 130 - cpu: [arm64] 131 - os: [linux] 132 - 133 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': 134 - resolution: {integrity: sha512-G43ZElEvaby+YSOgrXfBgpeQv42LdS0ivFFYQufk2tBDWeBfzE/+ob5DmO8Izbyn4Y8k6GgLF11jFDYNnmU/3w==} 135 - engines: {node: ^20.19.0 || >=22.12.0} 136 - cpu: [arm64] 137 - os: [linux] 138 - 139 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': 140 - resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} 141 - engines: {node: ^20.19.0 || >=22.12.0} 142 - cpu: [arm64] 143 - os: [linux] 144 - 145 - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': 146 - resolution: {integrity: sha512-Y48ShVxGE2zUTt0A0PR3grCLNxW4DWtAfe5lxf6L3uYEQujwo/LGuRogMsAtOJeYLCPTJo2i714LOdnK34cHpw==} 147 - engines: {node: ^20.19.0 || >=22.12.0} 148 - cpu: [ppc64] 149 - os: [linux] 150 - 151 - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': 152 - resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} 153 - engines: {node: ^20.19.0 || >=22.12.0} 154 - cpu: [ppc64] 155 - os: [linux] 156 - 157 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': 158 - resolution: {integrity: sha512-KU5DUYvX3qI8/TX6D3RA4awXi4Ge/1+M6Jqv7kRiUndpqoVGgD765xhV3Q6QvtABnYjLJenrWDl3S1B5U56ixA==} 159 - engines: {node: ^20.19.0 || >=22.12.0} 160 - cpu: [s390x] 161 - os: [linux] 162 - 163 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': 164 - resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} 165 - engines: {node: ^20.19.0 || >=22.12.0} 166 - cpu: [s390x] 167 - os: [linux] 168 - 169 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': 170 - resolution: {integrity: sha512-1THb6FdBkAEL12zvUue2bmK4W1+P+tz8Pgu5uEzq+xrtYa3iBzmmKNlyfUzCFNCqsPd8WJEQrYdLcw4iMW4AVw==} 171 - engines: {node: ^20.19.0 || >=22.12.0} 172 - cpu: [x64] 173 - os: [linux] 174 - 175 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': 176 - resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} 177 - engines: {node: ^20.19.0 || >=22.12.0} 178 - cpu: [x64] 179 - os: [linux] 180 - 181 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': 182 - resolution: {integrity: sha512-12o73atFNWDgYnLyA52QEUn9AH8pHIe12W28cmqjyHt4bIEYRzMICvYVCPa2IQm6DJBvCBrEhD9K+ct4wr2hwg==} 183 - engines: {node: ^20.19.0 || >=22.12.0} 184 - cpu: [x64] 185 - os: [linux] 186 - 187 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': 188 - resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} 189 - engines: {node: ^20.19.0 || >=22.12.0} 190 - cpu: [x64] 191 - os: [linux] 192 - 193 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': 194 - resolution: {integrity: sha512-+uUgGwvuUCXl894MTsmTS2J0BnCZccFsmzV7y1jFxW5pTSxkuwL5agyPuDvDOztPeS6RrdqWkn7sT0jRd0ECkg==} 195 - engines: {node: ^20.19.0 || >=22.12.0} 196 - cpu: [arm64] 197 - os: [openharmony] 198 - 199 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': 200 - resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} 201 - engines: {node: ^20.19.0 || >=22.12.0} 202 - cpu: [arm64] 203 - os: [openharmony] 204 - 205 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': 206 - resolution: {integrity: sha512-53p2L/NSy21UiFOqUGlC11kJDZS2Nx2GJRz1QvbkXovypA3cOHbsyZHLkV72JsLSbiEQe+kg4tndUhSiC31UEA==} 207 - engines: {node: '>=14.0.0'} 208 - cpu: [wasm32] 209 - 210 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': 211 - resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==} 212 - engines: {node: '>=14.0.0'} 213 - cpu: [wasm32] 214 - 215 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': 216 - resolution: {integrity: sha512-K6svNRljO6QrL6VTKxwh4yThhlR9DT/tK0XpaFQMnJwwQKng+NYcVEtUkAM0WsoiZHw+Hnh3DGnn3taf/pNYGg==} 217 - engines: {node: ^20.19.0 || >=22.12.0} 218 - cpu: [arm64] 219 - os: [win32] 220 - 221 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': 222 - resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==} 223 - engines: {node: ^20.19.0 || >=22.12.0} 224 - cpu: [arm64] 225 - os: [win32] 226 - 227 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': 228 - resolution: {integrity: sha512-3ZJBT47VWLKVKIyvHhUSUgVwHzzZW761YAIkM3tOT+8ZTjFVp0acCM0Y2Z2j3jCl+XYi2d9y2uEWQ8H0PvvpPw==} 229 - engines: {node: ^20.19.0 || >=22.12.0} 230 - cpu: [x64] 231 - os: [win32] 232 - 233 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': 234 - resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==} 235 - engines: {node: ^20.19.0 || >=22.12.0} 236 - cpu: [x64] 237 - os: [win32] 238 - 239 - '@rolldown/pluginutils@1.0.0-rc.7': 240 - resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} 241 - 242 - '@rolldown/pluginutils@1.0.0-rc.9': 243 - resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} 244 - 245 - '@standard-schema/spec@1.1.0': 246 - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 247 - 248 - '@tybys/wasm-util@0.10.1': 249 - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 250 - 251 - '@types/bun@1.3.10': 252 - resolution: {integrity: sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ==} 253 - 254 - '@types/chai@5.2.3': 255 - resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 256 - 257 - '@types/deep-eql@4.0.2': 258 - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 259 - 260 - '@types/node@25.3.5': 261 - resolution: {integrity: sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==} 262 - 263 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260306.1': 264 - resolution: {integrity: sha512-4vuh4VlPydMS/nymDzjJIKDk3dntnEEB5UzyJV9mM4kxF5+geFgJih1DTtZS3qVafhHLB3e4l8omtvGftMnb8g==} 265 - cpu: [arm64] 266 - os: [darwin] 267 - 268 - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260306.1': 269 - resolution: {integrity: sha512-qxYfv0aM4KCZPEe584KIjT5sO4uR+xdyuQXX5tXbnH1UoksIz7bvJ9KUgRloS/q/ww0f8UjPS2+27LnRA4y7ig==} 270 - cpu: [x64] 271 - os: [darwin] 272 - 273 - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260306.1': 274 - resolution: {integrity: sha512-8G0BKvTkE+eKX1tSnyKeDaf3bWPWY7OI77SMipagCAyYi06v4gxx+IVE3Px7W7kLX2Wqp1MjWDXu2N76wfJtXQ==} 275 - cpu: [arm64] 276 - os: [linux] 277 - 278 - '@typescript/native-preview-linux-arm@7.0.0-dev.20260306.1': 279 - resolution: {integrity: sha512-8gRAFx0ExDWHOmphl8mzBrSoGWnLWDU4VpxkPRsWqaJpHVbjr9Yk2QkuJNIaDmF6q44eJmW/huSiObmHTbZ1UQ==} 280 - cpu: [arm] 281 - os: [linux] 282 - 283 - '@typescript/native-preview-linux-x64@7.0.0-dev.20260306.1': 284 - resolution: {integrity: sha512-rsJV3Z9J/zYCEtcqvm+WfLAml3i1OAyMEUn0hja7i8C0kzE+tXKXzsJ0+I1TrSU5O7hHvqlLTvueBoCoM4aL4g==} 285 - cpu: [x64] 286 - os: [linux] 287 - 288 - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260306.1': 289 - resolution: {integrity: sha512-US1WsIu9IukaFzM+w8wt0fIAkmk2WtxeVuk8nkbrnH9S3ax39r0J4ikMNZSXEJE0VMxhXJoymzfWxhj3s9yW/Q==} 290 - cpu: [arm64] 291 - os: [win32] 292 - 293 - '@typescript/native-preview-win32-x64@7.0.0-dev.20260306.1': 294 - resolution: {integrity: sha512-MlneT0RWS9Zdb8XoWvHsUgmnMJu6K3S0BXRu5ZgUYjcbQKlkz+Z87aUB8eX8qnDFd9csJcMp3+ZrgQ/LKVGP1g==} 295 - cpu: [x64] 296 - os: [win32] 297 - 298 - '@typescript/native-preview@7.0.0-dev.20260306.1': 299 - resolution: {integrity: sha512-4m7cOjtKu+iLazWW5MuJuI2ZZMkQkS42+GxN6FVdja1nL0t47l1wpaTnzUa1Ny9Xa0opIJ7psPAMBKYAPKbCKA==} 300 - hasBin: true 301 - 302 - '@voidzero-dev/vite-plus-core@0.1.11': 303 - resolution: {integrity: sha512-feyYRSg3u8acYNC1fF4EGfgYZm2efZB8YWTjz4NrU0Ulhlni1C6COMwHSDVpu9F4Jh+WcSsBWL3ZC1WvLa7jCw==} 304 - engines: {node: ^20.19.0 || >=22.12.0} 305 - peerDependencies: 306 - '@arethetypeswrong/core': ^0.18.1 307 - '@tsdown/css': 0.21.2 308 - '@tsdown/exe': 0.21.2 309 - '@types/node': ^20.19.0 || >=22.12.0 310 - '@vitejs/devtools': ^0.0.0-alpha.31 311 - esbuild: ^0.27.0 312 - jiti: '>=1.21.0' 313 - less: ^4.0.0 314 - publint: ^0.3.0 315 - sass: ^1.70.0 316 - sass-embedded: ^1.70.0 317 - stylus: '>=0.54.8' 318 - sugarss: ^5.0.0 319 - terser: ^5.16.0 320 - tsx: ^4.8.1 321 - typescript: ^5.0.0 322 - unplugin-unused: ^0.5.0 323 - yaml: ^2.4.2 324 - peerDependenciesMeta: 325 - '@arethetypeswrong/core': 326 - optional: true 327 - '@tsdown/css': 328 - optional: true 329 - '@tsdown/exe': 330 - optional: true 331 - '@types/node': 332 - optional: true 333 - '@vitejs/devtools': 334 - optional: true 335 - esbuild: 336 - optional: true 337 - jiti: 338 - optional: true 339 - less: 340 - optional: true 341 - publint: 342 - optional: true 343 - sass: 344 - optional: true 345 - sass-embedded: 346 - optional: true 347 - stylus: 348 - optional: true 349 - sugarss: 350 - optional: true 351 - terser: 352 - optional: true 353 - tsx: 354 - optional: true 355 - typescript: 356 - optional: true 357 - unplugin-unused: 358 - optional: true 359 - yaml: 360 - optional: true 361 - 362 - '@voidzero-dev/vite-plus-test@0.1.11': 363 - resolution: {integrity: sha512-3kBfi/LyPOGnLCmvYtgM5GZVAyiJiYjgdm9Fu9WLLl56zcSljj0TBG19eaKY6v/j2VJ+7o80n/A/MPz46lzMFA==} 364 - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} 365 - peerDependencies: 366 - '@edge-runtime/vm': '*' 367 - '@opentelemetry/api': ^1.9.0 368 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 369 - '@vitest/ui': 4.1.0 370 - happy-dom: '*' 371 - jsdom: '*' 372 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 373 - peerDependenciesMeta: 374 - '@edge-runtime/vm': 375 - optional: true 376 - '@opentelemetry/api': 377 - optional: true 378 - '@types/node': 379 - optional: true 380 - '@vitest/ui': 381 - optional: true 382 - happy-dom: 383 - optional: true 384 - jsdom: 385 - optional: true 386 - 387 - assertion-error@2.0.1: 388 - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 389 - engines: {node: '>=12'} 390 - 391 - bun-types@1.3.10: 392 - resolution: {integrity: sha512-tcpfCCl6XWo6nCVnpcVrxQ+9AYN1iqMIzgrSKYMB/fjLtV2eyAVEg7AxQJuCq/26R6HpKWykQXuSOq/21RYcbg==} 393 - 394 - detect-libc@2.1.2: 395 - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 396 - engines: {node: '>=8'} 397 - 398 - es-module-lexer@1.7.0: 399 - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 400 - 401 - fdir@6.5.0: 402 - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 403 - engines: {node: '>=12.0.0'} 404 - peerDependencies: 405 - picomatch: ^3 || ^4 406 - peerDependenciesMeta: 407 - picomatch: 408 - optional: true 409 - 410 - fsevents@2.3.3: 411 - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 412 - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 413 - os: [darwin] 414 - 415 - lightningcss-android-arm64@1.31.1: 416 - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} 417 - engines: {node: '>= 12.0.0'} 418 - cpu: [arm64] 419 - os: [android] 420 - 421 - lightningcss-android-arm64@1.32.0: 422 - resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} 423 - engines: {node: '>= 12.0.0'} 424 - cpu: [arm64] 425 - os: [android] 426 - 427 - lightningcss-darwin-arm64@1.31.1: 428 - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} 429 - engines: {node: '>= 12.0.0'} 430 - cpu: [arm64] 431 - os: [darwin] 432 - 433 - lightningcss-darwin-arm64@1.32.0: 434 - resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} 435 - engines: {node: '>= 12.0.0'} 436 - cpu: [arm64] 437 - os: [darwin] 438 - 439 - lightningcss-darwin-x64@1.31.1: 440 - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} 441 - engines: {node: '>= 12.0.0'} 442 - cpu: [x64] 443 - os: [darwin] 444 - 445 - lightningcss-darwin-x64@1.32.0: 446 - resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} 447 - engines: {node: '>= 12.0.0'} 448 - cpu: [x64] 449 - os: [darwin] 450 - 451 - lightningcss-freebsd-x64@1.31.1: 452 - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} 453 - engines: {node: '>= 12.0.0'} 454 - cpu: [x64] 455 - os: [freebsd] 456 - 457 - lightningcss-freebsd-x64@1.32.0: 458 - resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} 459 - engines: {node: '>= 12.0.0'} 460 - cpu: [x64] 461 - os: [freebsd] 462 - 463 - lightningcss-linux-arm-gnueabihf@1.31.1: 464 - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} 465 - engines: {node: '>= 12.0.0'} 466 - cpu: [arm] 467 - os: [linux] 468 - 469 - lightningcss-linux-arm-gnueabihf@1.32.0: 470 - resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} 471 - engines: {node: '>= 12.0.0'} 472 - cpu: [arm] 473 - os: [linux] 474 - 475 - lightningcss-linux-arm64-gnu@1.31.1: 476 - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} 477 - engines: {node: '>= 12.0.0'} 478 - cpu: [arm64] 479 - os: [linux] 480 - 481 - lightningcss-linux-arm64-gnu@1.32.0: 482 - resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} 483 - engines: {node: '>= 12.0.0'} 484 - cpu: [arm64] 485 - os: [linux] 486 - 487 - lightningcss-linux-arm64-musl@1.31.1: 488 - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} 489 - engines: {node: '>= 12.0.0'} 490 - cpu: [arm64] 491 - os: [linux] 492 - 493 - lightningcss-linux-arm64-musl@1.32.0: 494 - resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} 495 - engines: {node: '>= 12.0.0'} 496 - cpu: [arm64] 497 - os: [linux] 498 - 499 - lightningcss-linux-x64-gnu@1.31.1: 500 - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} 501 - engines: {node: '>= 12.0.0'} 502 - cpu: [x64] 503 - os: [linux] 504 - 505 - lightningcss-linux-x64-gnu@1.32.0: 506 - resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} 507 - engines: {node: '>= 12.0.0'} 508 - cpu: [x64] 509 - os: [linux] 510 - 511 - lightningcss-linux-x64-musl@1.31.1: 512 - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} 513 - engines: {node: '>= 12.0.0'} 514 - cpu: [x64] 515 - os: [linux] 516 - 517 - lightningcss-linux-x64-musl@1.32.0: 518 - resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} 519 - engines: {node: '>= 12.0.0'} 520 - cpu: [x64] 521 - os: [linux] 522 - 523 - lightningcss-win32-arm64-msvc@1.31.1: 524 - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} 525 - engines: {node: '>= 12.0.0'} 526 - cpu: [arm64] 527 - os: [win32] 528 - 529 - lightningcss-win32-arm64-msvc@1.32.0: 530 - resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} 531 - engines: {node: '>= 12.0.0'} 532 - cpu: [arm64] 533 - os: [win32] 534 - 535 - lightningcss-win32-x64-msvc@1.31.1: 536 - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} 537 - engines: {node: '>= 12.0.0'} 538 - cpu: [x64] 539 - os: [win32] 540 - 541 - lightningcss-win32-x64-msvc@1.32.0: 542 - resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} 543 - engines: {node: '>= 12.0.0'} 544 - cpu: [x64] 545 - os: [win32] 546 - 547 - lightningcss@1.31.1: 548 - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} 549 - engines: {node: '>= 12.0.0'} 550 - 551 - lightningcss@1.32.0: 552 - resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} 553 - engines: {node: '>= 12.0.0'} 554 - 555 - mrmime@2.0.1: 556 - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 557 - engines: {node: '>=10'} 558 - 559 - nanoid@3.3.11: 560 - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 561 - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 562 - hasBin: true 563 - 564 - obug@2.1.1: 565 - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 566 - 567 - picocolors@1.1.1: 568 - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 569 - 570 - picomatch@4.0.3: 571 - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 572 - engines: {node: '>=12'} 573 - 574 - pixelmatch@7.1.0: 575 - resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==} 576 - hasBin: true 577 - 578 - pngjs@7.0.0: 579 - resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} 580 - engines: {node: '>=14.19.0'} 581 - 582 - postcss@8.5.8: 583 - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} 584 - engines: {node: ^10 || ^12 || >=14} 585 - 586 - rolldown@1.0.0-rc.7: 587 - resolution: {integrity: sha512-5X0zEeQFzDpB3MqUWQZyO2TUQqP9VnT7CqXHF2laTFRy487+b6QZyotCazOySAuZLAvplCaOVsg1tVn/Zlmwfg==} 588 - engines: {node: ^20.19.0 || >=22.12.0} 589 - hasBin: true 590 - 591 - rolldown@1.0.0-rc.9: 592 - resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==} 593 - engines: {node: ^20.19.0 || >=22.12.0} 594 - hasBin: true 595 - 596 - sirv@3.0.2: 597 - resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} 598 - engines: {node: '>=18'} 599 - 600 - source-map-js@1.2.1: 601 - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 602 - engines: {node: '>=0.10.0'} 603 - 604 - std-env@4.0.0: 605 - resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} 606 - 607 - tinybench@2.9.0: 608 - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 609 - 610 - tinyexec@1.0.2: 611 - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 612 - engines: {node: '>=18'} 613 - 614 - tinyglobby@0.2.15: 615 - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 616 - engines: {node: '>=12.0.0'} 617 - 618 - totalist@3.0.1: 619 - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 620 - engines: {node: '>=6'} 621 - 622 - tslib@2.8.1: 623 - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 624 - 625 - typescript@5.9.3: 626 - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 627 - engines: {node: '>=14.17'} 628 - hasBin: true 629 - 630 - undici-types@7.18.2: 631 - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} 632 - 633 - vite@8.0.0: 634 - resolution: {integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==} 635 - engines: {node: ^20.19.0 || >=22.12.0} 636 - hasBin: true 637 - peerDependencies: 638 - '@types/node': ^20.19.0 || >=22.12.0 639 - '@vitejs/devtools': ^0.0.0-alpha.31 640 - esbuild: ^0.27.0 641 - jiti: '>=1.21.0' 642 - less: ^4.0.0 643 - sass: ^1.70.0 644 - sass-embedded: ^1.70.0 645 - stylus: '>=0.54.8' 646 - sugarss: ^5.0.0 647 - terser: ^5.16.0 648 - tsx: ^4.8.1 649 - yaml: ^2.4.2 650 - peerDependenciesMeta: 651 - '@types/node': 652 - optional: true 653 - '@vitejs/devtools': 654 - optional: true 655 - esbuild: 656 - optional: true 657 - jiti: 658 - optional: true 659 - less: 660 - optional: true 661 - sass: 662 - optional: true 663 - sass-embedded: 664 - optional: true 665 - stylus: 666 - optional: true 667 - sugarss: 668 - optional: true 669 - terser: 670 - optional: true 671 - tsx: 672 - optional: true 673 - yaml: 674 - optional: true 675 - 676 - ws@8.19.0: 677 - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} 678 - engines: {node: '>=10.0.0'} 679 - peerDependencies: 680 - bufferutil: ^4.0.1 681 - utf-8-validate: '>=5.0.2' 682 - peerDependenciesMeta: 683 - bufferutil: 684 - optional: true 685 - utf-8-validate: 686 - optional: true 687 - 688 - snapshots: 689 - 690 - '@emnapi/core@1.8.1': 691 - dependencies: 692 - '@emnapi/wasi-threads': 1.1.0 693 - tslib: 2.8.1 694 - optional: true 695 - 696 - '@emnapi/runtime@1.8.1': 697 - dependencies: 698 - tslib: 2.8.1 699 - optional: true 700 - 701 - '@emnapi/wasi-threads@1.1.0': 702 - dependencies: 703 - tslib: 2.8.1 704 - optional: true 705 - 706 - '@napi-rs/wasm-runtime@1.1.1': 707 - dependencies: 708 - '@emnapi/core': 1.8.1 709 - '@emnapi/runtime': 1.8.1 710 - '@tybys/wasm-util': 0.10.1 711 - optional: true 712 - 713 - '@oxc-project/runtime@0.115.0': {} 714 - 715 - '@oxc-project/types@0.115.0': {} 716 - 717 - '@polka/url@1.0.0-next.29': {} 718 - 719 - '@rolldown/binding-android-arm64@1.0.0-rc.7': 720 - optional: true 721 - 722 - '@rolldown/binding-android-arm64@1.0.0-rc.9': 723 - optional: true 724 - 725 - '@rolldown/binding-darwin-arm64@1.0.0-rc.7': 726 - optional: true 727 - 728 - '@rolldown/binding-darwin-arm64@1.0.0-rc.9': 729 - optional: true 730 - 731 - '@rolldown/binding-darwin-x64@1.0.0-rc.7': 732 - optional: true 733 - 734 - '@rolldown/binding-darwin-x64@1.0.0-rc.9': 735 - optional: true 736 - 737 - '@rolldown/binding-freebsd-x64@1.0.0-rc.7': 738 - optional: true 739 - 740 - '@rolldown/binding-freebsd-x64@1.0.0-rc.9': 741 - optional: true 742 - 743 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': 744 - optional: true 745 - 746 - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': 747 - optional: true 748 - 749 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': 750 - optional: true 751 - 752 - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': 753 - optional: true 754 - 755 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': 756 - optional: true 757 - 758 - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': 759 - optional: true 760 - 761 - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': 762 - optional: true 763 - 764 - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': 765 - optional: true 766 - 767 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': 768 - optional: true 769 - 770 - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': 771 - optional: true 772 - 773 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': 774 - optional: true 775 - 776 - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': 777 - optional: true 778 - 779 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': 780 - optional: true 781 - 782 - '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': 783 - optional: true 784 - 785 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': 786 - optional: true 787 - 788 - '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': 789 - optional: true 790 - 791 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': 792 - dependencies: 793 - '@napi-rs/wasm-runtime': 1.1.1 794 - optional: true 795 - 796 - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': 797 - dependencies: 798 - '@napi-rs/wasm-runtime': 1.1.1 799 - optional: true 800 - 801 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': 802 - optional: true 803 - 804 - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': 805 - optional: true 806 - 807 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': 808 - optional: true 809 - 810 - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': 811 - optional: true 812 - 813 - '@rolldown/pluginutils@1.0.0-rc.7': {} 814 - 815 - '@rolldown/pluginutils@1.0.0-rc.9': {} 816 - 817 - '@standard-schema/spec@1.1.0': {} 818 - 819 - '@tybys/wasm-util@0.10.1': 820 - dependencies: 821 - tslib: 2.8.1 822 - optional: true 823 - 824 - '@types/bun@1.3.10': 825 - dependencies: 826 - bun-types: 1.3.10 827 - 828 - '@types/chai@5.2.3': 829 - dependencies: 830 - '@types/deep-eql': 4.0.2 831 - assertion-error: 2.0.1 832 - 833 - '@types/deep-eql@4.0.2': {} 834 - 835 - '@types/node@25.3.5': 836 - dependencies: 837 - undici-types: 7.18.2 838 - 839 - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260306.1': 840 - optional: true 841 - 842 - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260306.1': 843 - optional: true 844 - 845 - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260306.1': 846 - optional: true 847 - 848 - '@typescript/native-preview-linux-arm@7.0.0-dev.20260306.1': 849 - optional: true 850 - 851 - '@typescript/native-preview-linux-x64@7.0.0-dev.20260306.1': 852 - optional: true 853 - 854 - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260306.1': 855 - optional: true 856 - 857 - '@typescript/native-preview-win32-x64@7.0.0-dev.20260306.1': 858 - optional: true 859 - 860 - '@typescript/native-preview@7.0.0-dev.20260306.1': 861 - optionalDependencies: 862 - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260306.1 863 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260306.1 864 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260306.1 865 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260306.1 866 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260306.1 867 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260306.1 868 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260306.1 869 - 870 - '@voidzero-dev/vite-plus-core@0.1.11(@types/node@25.3.5)(typescript@5.9.3)': 871 - dependencies: 872 - '@oxc-project/runtime': 0.115.0 873 - '@oxc-project/types': 0.115.0 874 - lightningcss: 1.31.1 875 - postcss: 8.5.8 876 - optionalDependencies: 877 - '@types/node': 25.3.5 878 - fsevents: 2.3.3 879 - typescript: 5.9.3 880 - 881 - '@voidzero-dev/vite-plus-test@0.1.11(@types/node@25.3.5)(typescript@5.9.3)(vite@8.0.0(@types/node@25.3.5))': 882 - dependencies: 883 - '@standard-schema/spec': 1.1.0 884 - '@types/chai': 5.2.3 885 - '@voidzero-dev/vite-plus-core': 0.1.11(@types/node@25.3.5)(typescript@5.9.3) 886 - es-module-lexer: 1.7.0 887 - obug: 2.1.1 888 - pixelmatch: 7.1.0 889 - pngjs: 7.0.0 890 - sirv: 3.0.2 891 - std-env: 4.0.0 892 - tinybench: 2.9.0 893 - tinyexec: 1.0.2 894 - tinyglobby: 0.2.15 895 - vite: 8.0.0(@types/node@25.3.5) 896 - ws: 8.19.0 897 - optionalDependencies: 898 - '@types/node': 25.3.5 899 - transitivePeerDependencies: 900 - - '@arethetypeswrong/core' 901 - - '@tsdown/css' 902 - - '@tsdown/exe' 903 - - '@vitejs/devtools' 904 - - bufferutil 905 - - esbuild 906 - - jiti 907 - - less 908 - - publint 909 - - sass 910 - - sass-embedded 911 - - stylus 912 - - sugarss 913 - - terser 914 - - tsx 915 - - typescript 916 - - unplugin-unused 917 - - utf-8-validate 918 - - yaml 919 - 920 - assertion-error@2.0.1: {} 921 - 922 - bun-types@1.3.10: 923 - dependencies: 924 - '@types/node': 25.3.5 925 - 926 - detect-libc@2.1.2: {} 927 - 928 - es-module-lexer@1.7.0: {} 929 - 930 - fdir@6.5.0(picomatch@4.0.3): 931 - optionalDependencies: 932 - picomatch: 4.0.3 933 - 934 - fsevents@2.3.3: 935 - optional: true 936 - 937 - lightningcss-android-arm64@1.31.1: 938 - optional: true 939 - 940 - lightningcss-android-arm64@1.32.0: 941 - optional: true 942 - 943 - lightningcss-darwin-arm64@1.31.1: 944 - optional: true 945 - 946 - lightningcss-darwin-arm64@1.32.0: 947 - optional: true 948 - 949 - lightningcss-darwin-x64@1.31.1: 950 - optional: true 951 - 952 - lightningcss-darwin-x64@1.32.0: 953 - optional: true 954 - 955 - lightningcss-freebsd-x64@1.31.1: 956 - optional: true 957 - 958 - lightningcss-freebsd-x64@1.32.0: 959 - optional: true 960 - 961 - lightningcss-linux-arm-gnueabihf@1.31.1: 962 - optional: true 963 - 964 - lightningcss-linux-arm-gnueabihf@1.32.0: 965 - optional: true 966 - 967 - lightningcss-linux-arm64-gnu@1.31.1: 968 - optional: true 969 - 970 - lightningcss-linux-arm64-gnu@1.32.0: 971 - optional: true 972 - 973 - lightningcss-linux-arm64-musl@1.31.1: 974 - optional: true 975 - 976 - lightningcss-linux-arm64-musl@1.32.0: 977 - optional: true 978 - 979 - lightningcss-linux-x64-gnu@1.31.1: 980 - optional: true 981 - 982 - lightningcss-linux-x64-gnu@1.32.0: 983 - optional: true 984 - 985 - lightningcss-linux-x64-musl@1.31.1: 986 - optional: true 987 - 988 - lightningcss-linux-x64-musl@1.32.0: 989 - optional: true 990 - 991 - lightningcss-win32-arm64-msvc@1.31.1: 992 - optional: true 993 - 994 - lightningcss-win32-arm64-msvc@1.32.0: 995 - optional: true 996 - 997 - lightningcss-win32-x64-msvc@1.31.1: 998 - optional: true 999 - 1000 - lightningcss-win32-x64-msvc@1.32.0: 1001 - optional: true 1002 - 1003 - lightningcss@1.31.1: 1004 - dependencies: 1005 - detect-libc: 2.1.2 1006 - optionalDependencies: 1007 - lightningcss-android-arm64: 1.31.1 1008 - lightningcss-darwin-arm64: 1.31.1 1009 - lightningcss-darwin-x64: 1.31.1 1010 - lightningcss-freebsd-x64: 1.31.1 1011 - lightningcss-linux-arm-gnueabihf: 1.31.1 1012 - lightningcss-linux-arm64-gnu: 1.31.1 1013 - lightningcss-linux-arm64-musl: 1.31.1 1014 - lightningcss-linux-x64-gnu: 1.31.1 1015 - lightningcss-linux-x64-musl: 1.31.1 1016 - lightningcss-win32-arm64-msvc: 1.31.1 1017 - lightningcss-win32-x64-msvc: 1.31.1 1018 - 1019 - lightningcss@1.32.0: 1020 - dependencies: 1021 - detect-libc: 2.1.2 1022 - optionalDependencies: 1023 - lightningcss-android-arm64: 1.32.0 1024 - lightningcss-darwin-arm64: 1.32.0 1025 - lightningcss-darwin-x64: 1.32.0 1026 - lightningcss-freebsd-x64: 1.32.0 1027 - lightningcss-linux-arm-gnueabihf: 1.32.0 1028 - lightningcss-linux-arm64-gnu: 1.32.0 1029 - lightningcss-linux-arm64-musl: 1.32.0 1030 - lightningcss-linux-x64-gnu: 1.32.0 1031 - lightningcss-linux-x64-musl: 1.32.0 1032 - lightningcss-win32-arm64-msvc: 1.32.0 1033 - lightningcss-win32-x64-msvc: 1.32.0 1034 - 1035 - mrmime@2.0.1: {} 1036 - 1037 - nanoid@3.3.11: {} 1038 - 1039 - obug@2.1.1: {} 1040 - 1041 - picocolors@1.1.1: {} 1042 - 1043 - picomatch@4.0.3: {} 1044 - 1045 - pixelmatch@7.1.0: 1046 - dependencies: 1047 - pngjs: 7.0.0 1048 - 1049 - pngjs@7.0.0: {} 1050 - 1051 - postcss@8.5.8: 1052 - dependencies: 1053 - nanoid: 3.3.11 1054 - picocolors: 1.1.1 1055 - source-map-js: 1.2.1 1056 - 1057 - rolldown@1.0.0-rc.7: 1058 - dependencies: 1059 - '@oxc-project/types': 0.115.0 1060 - '@rolldown/pluginutils': 1.0.0-rc.7 1061 - optionalDependencies: 1062 - '@rolldown/binding-android-arm64': 1.0.0-rc.7 1063 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.7 1064 - '@rolldown/binding-darwin-x64': 1.0.0-rc.7 1065 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.7 1066 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.7 1067 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.7 1068 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.7 1069 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.7 1070 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.7 1071 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.7 1072 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.7 1073 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.7 1074 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.7 1075 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.7 1076 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.7 1077 - 1078 - rolldown@1.0.0-rc.9: 1079 - dependencies: 1080 - '@oxc-project/types': 0.115.0 1081 - '@rolldown/pluginutils': 1.0.0-rc.9 1082 - optionalDependencies: 1083 - '@rolldown/binding-android-arm64': 1.0.0-rc.9 1084 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.9 1085 - '@rolldown/binding-darwin-x64': 1.0.0-rc.9 1086 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.9 1087 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9 1088 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9 1089 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9 1090 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9 1091 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9 1092 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9 1093 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9 1094 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9 1095 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9 1096 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 1097 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 1098 - 1099 - sirv@3.0.2: 1100 - dependencies: 1101 - '@polka/url': 1.0.0-next.29 1102 - mrmime: 2.0.1 1103 - totalist: 3.0.1 1104 - 1105 - source-map-js@1.2.1: {} 1106 - 1107 - std-env@4.0.0: {} 1108 - 1109 - tinybench@2.9.0: {} 1110 - 1111 - tinyexec@1.0.2: {} 1112 - 1113 - tinyglobby@0.2.15: 1114 - dependencies: 1115 - fdir: 6.5.0(picomatch@4.0.3) 1116 - picomatch: 4.0.3 1117 - 1118 - totalist@3.0.1: {} 1119 - 1120 - tslib@2.8.1: 1121 - optional: true 1122 - 1123 - typescript@5.9.3: {} 1124 - 1125 - undici-types@7.18.2: {} 1126 - 1127 - vite@8.0.0(@types/node@25.3.5): 1128 - dependencies: 1129 - '@oxc-project/runtime': 0.115.0 1130 - lightningcss: 1.32.0 1131 - picomatch: 4.0.3 1132 - postcss: 8.5.8 1133 - rolldown: 1.0.0-rc.9 1134 - tinyglobby: 0.2.15 1135 - optionalDependencies: 1136 - '@types/node': 25.3.5 1137 - fsevents: 2.3.3 1138 - 1139 - ws@8.19.0: {}
sdk/rolldown.config.ts packages/sdk/rolldown.config.ts
+82 -60
sdk/src/build/plugins/global-types.ts packages/sdk/src/build/plugins/global-types.ts
··· 89 89 markProcessed(name, 'type') 90 90 const type = checker.getTypeAtLocation(decl) 91 91 const typeParams = decl.typeParameters 92 - ? `<${decl.typeParameters.map(tp => tp.getText()).join(', ')}>` 92 + ? `<${decl.typeParameters.map((tp) => tp.getText()).join(', ')}>` 93 93 : '' 94 94 const typeString = getFullyQualifiedType(type, decl) 95 95 target.push(` type ${name}${typeParams} = ${typeString};`) ··· 100 100 const type = checker.getTypeAtLocation(decl) 101 101 const props = type.getProperties() 102 102 const typeParams = decl.typeParameters 103 - ? `<${decl.typeParameters.map(tp => tp.getText()).join(', ')}>` 103 + ? `<${decl.typeParameters.map((tp) => tp.getText()).join(', ')}>` 104 104 : '' 105 105 106 106 const members: string[] = [] ··· 123 123 const signature = checker.getSignatureFromDeclaration(decl) 124 124 if (signature) { 125 125 const returnType = checker.getReturnTypeOfSignature(signature) 126 - const params = signature.getParameters().map(p => { 127 - const paramDecl = p.getDeclarations()?.[0] 128 - const paramType = paramDecl 129 - ? checker.getTypeOfSymbolAtLocation(p, paramDecl) 130 - : checker.getAnyType() 131 - const isOptional = p.flags & ts.SymbolFlags.Optional || 132 - (paramDecl && ts.isParameter(paramDecl) && 133 - (paramDecl.questionToken !== undefined || paramDecl.initializer !== undefined)) 134 - const optionalMarker = isOptional ? '?' : '' 135 - return `${p.getName()}${optionalMarker}: ${getFullyQualifiedType(paramType, paramDecl)}` 136 - }).join(', ') 126 + const params = signature 127 + .getParameters() 128 + .map((p) => { 129 + const paramDecl = p.getDeclarations()?.[0] 130 + const paramType = paramDecl 131 + ? checker.getTypeOfSymbolAtLocation(p, paramDecl) 132 + : checker.getAnyType() 133 + const isOptional = 134 + p.flags & ts.SymbolFlags.Optional || 135 + (paramDecl && 136 + ts.isParameter(paramDecl) && 137 + (paramDecl.questionToken !== undefined || paramDecl.initializer !== undefined)) 138 + const optionalMarker = isOptional ? '?' : '' 139 + return `${p.getName()}${optionalMarker}: ${getFullyQualifiedType(paramType, paramDecl)}` 140 + }) 141 + .join(', ') 137 142 138 143 const typeParams = decl.typeParameters 139 - ? `<${decl.typeParameters.map(tp => tp.getText()).join(', ')}>` 144 + ? `<${decl.typeParameters.map((tp) => tp.getText()).join(', ')}>` 140 145 : '' 141 146 142 147 target.push( 143 - ` function ${name}${typeParams}(${params}): ${ 144 - getFullyQualifiedType(returnType, decl) 145 - };` 148 + ` function ${name}${typeParams}(${params}): ${getFullyQualifiedType( 149 + returnType, 150 + decl 151 + )};` 146 152 ) 147 153 } 148 154 } // Variable/const ··· 150 156 if (hasProcessed(name, 'value')) continue 151 157 markProcessed(name, 'value') 152 158 const type = checker.getTypeAtLocation(decl) 153 - const isLet = decl.parent && ts.isVariableDeclarationList(decl.parent) && 159 + const isLet = 160 + decl.parent && 161 + ts.isVariableDeclarationList(decl.parent) && 154 162 (decl.parent.flags & ts.NodeFlags.Let) !== 0 155 163 const keyword = isLet ? 'let' : 'const' 156 164 target.push(` ${keyword} ${name}: ${getFullyQualifiedType(type, decl)};`) ··· 160 168 markProcessed(name, 'value') 161 169 const type = checker.getTypeAtLocation(decl) 162 170 const typeParams = decl.typeParameters 163 - ? `<${decl.typeParameters.map(tp => tp.getText()).join(', ')}>` 171 + ? `<${decl.typeParameters.map((tp) => tp.getText()).join(', ')}>` 164 172 : '' 165 173 166 174 const constructSignatures = type.getConstructSignatures() 167 175 const members: string[] = [] 168 176 169 177 for (const sig of constructSignatures) { 170 - const params = sig.getParameters().map(p => { 171 - const paramDecl = p.getDeclarations()?.[0] 172 - const paramType = paramDecl 173 - ? checker.getTypeOfSymbolAtLocation(p, paramDecl) 174 - : checker.getAnyType() 175 - return `${p.getName()}: ${getFullyQualifiedType(paramType, paramDecl)}` 176 - }).join(', ') 178 + const params = sig 179 + .getParameters() 180 + .map((p) => { 181 + const paramDecl = p.getDeclarations()?.[0] 182 + const paramType = paramDecl 183 + ? checker.getTypeOfSymbolAtLocation(p, paramDecl) 184 + : checker.getAnyType() 185 + return `${p.getName()}: ${getFullyQualifiedType(paramType, paramDecl)}` 186 + }) 187 + .join(', ') 177 188 members.push(` constructor(${params});`) 178 189 } 179 190 ··· 183 194 if (!propDecl) continue 184 195 185 196 // Skip private members 186 - const hasPrivateModifier = ts.canHaveModifiers(propDecl) && 187 - ts.getModifiers(propDecl)?.some((m: ts.Modifier) => 188 - m.kind === ts.SyntaxKind.PrivateKeyword 189 - ) 197 + const hasPrivateModifier = 198 + ts.canHaveModifiers(propDecl) && 199 + ts 200 + .getModifiers(propDecl) 201 + ?.some((m: ts.Modifier) => m.kind === ts.SyntaxKind.PrivateKeyword) 190 202 if (hasPrivateModifier) continue 191 203 if (prop.getName().startsWith('#')) continue 192 204 ··· 196 208 const sig = checker.getSignatureFromDeclaration(propDecl) 197 209 if (sig) { 198 210 const returnType = checker.getReturnTypeOfSignature(sig) 199 - const params = sig.getParameters().map(p => { 200 - const pd = p.getDeclarations()?.[0] 201 - const pt = pd ? checker.getTypeOfSymbolAtLocation(p, pd) : checker.getAnyType() 202 - const isOptional = p.flags & ts.SymbolFlags.Optional || 203 - (pd && ts.isParameter(pd) && 204 - (pd.questionToken !== undefined || pd.initializer !== undefined)) 205 - const optionalMarker = isOptional ? '?' : '' 206 - return `${p.getName()}${optionalMarker}: ${getFullyQualifiedType(pt, pd)}` 207 - }).join(', ') 211 + const params = sig 212 + .getParameters() 213 + .map((p) => { 214 + const pd = p.getDeclarations()?.[0] 215 + const pt = pd ? checker.getTypeOfSymbolAtLocation(p, pd) : checker.getAnyType() 216 + const isOptional = 217 + p.flags & ts.SymbolFlags.Optional || 218 + (pd && 219 + ts.isParameter(pd) && 220 + (pd.questionToken !== undefined || pd.initializer !== undefined)) 221 + const optionalMarker = isOptional ? '?' : '' 222 + return `${p.getName()}${optionalMarker}: ${getFullyQualifiedType(pt, pd)}` 223 + }) 224 + .join(', ') 208 225 members.push( 209 226 ` ${prop.getName()}(${params}): ${getFullyQualifiedType(returnType, propDecl)};` 210 227 ) ··· 254 271 if (hasProcessed(name, 'value')) continue 255 272 markProcessed(name, 'value') 256 273 const type = checker.getTypeAtLocation(decl) 257 - const keyword = (statement.declarationList.flags & ts.NodeFlags.Let) 258 - ? 'let' 259 - : 'var' 274 + const keyword = statement.declarationList.flags & ts.NodeFlags.Let ? 'let' : 'var' 260 275 runtimeDeclarations.push( 261 276 ` ${keyword} ${name}: ${getFullyQualifiedType(type, decl)};` 262 277 ) ··· 268 283 const signature = checker.getSignatureFromDeclaration(statement) 269 284 if (signature) { 270 285 const returnType = checker.getReturnTypeOfSignature(signature) 271 - const params = signature.getParameters().map(p => { 272 - const paramDecl = p.getDeclarations()?.[0] 273 - const paramType = paramDecl 274 - ? checker.getTypeOfSymbolAtLocation(p, paramDecl) 275 - : checker.getAnyType() 276 - const isOptional = p.flags & ts.SymbolFlags.Optional || 277 - (paramDecl && ts.isParameter(paramDecl) && 278 - (paramDecl.questionToken !== undefined || 279 - paramDecl.initializer !== undefined)) 280 - const optionalMarker = isOptional ? '?' : '' 281 - return `${p.getName()}${optionalMarker}: ${ 282 - getFullyQualifiedType(paramType, paramDecl) 283 - }` 284 - }).join(', ') 286 + const params = signature 287 + .getParameters() 288 + .map((p) => { 289 + const paramDecl = p.getDeclarations()?.[0] 290 + const paramType = paramDecl 291 + ? checker.getTypeOfSymbolAtLocation(p, paramDecl) 292 + : checker.getAnyType() 293 + const isOptional = 294 + p.flags & ts.SymbolFlags.Optional || 295 + (paramDecl && 296 + ts.isParameter(paramDecl) && 297 + (paramDecl.questionToken !== undefined || 298 + paramDecl.initializer !== undefined)) 299 + const optionalMarker = isOptional ? '?' : '' 300 + return `${p.getName()}${optionalMarker}: ${getFullyQualifiedType( 301 + paramType, 302 + paramDecl 303 + )}` 304 + }) 305 + .join(', ') 285 306 286 307 const typeParams = statement.typeParameters 287 - ? `<${statement.typeParameters.map(tp => tp.getText()).join(', ')}>` 308 + ? `<${statement.typeParameters.map((tp) => tp.getText()).join(', ')}>` 288 309 : '' 289 310 290 311 runtimeDeclarations.push( 291 - ` function ${name}${typeParams}(${params}): ${ 292 - getFullyQualifiedType(returnType, statement) 293 - };` 312 + ` function ${name}${typeParams}(${params}): ${getFullyQualifiedType( 313 + returnType, 314 + statement 315 + )};` 294 316 ) 295 317 } 296 318 }
sdk/src/build/runtime-globals.ts packages/sdk/src/build/runtime-globals.ts
+154 -140
sdk/src/generated.ts packages/sdk/src/generated.ts
··· 595 595 } 596 596 597 597 /** Attachment to include in a message (either URL or base64-encoded data). */ 598 - export type RawAttachment = { 599 - /** The URL to fetch the attachment from. */ 600 - url: { 601 - /** The URL to fetch the attachment from. */ 602 - url: string 603 - /** Filename for the attachment. */ 604 - filename?: string 605 - /** Alt text / description for the attachment. */ 606 - description?: string 607 - } 608 - } | { 609 - base64: { 610 - /** Base64-encoded file data. */ 611 - data: string 612 - /** Filename for the attachment. */ 613 - filename: string 614 - /** Alt text / description for the attachment. */ 615 - description?: string 616 - } 617 - } 598 + export type RawAttachment = 599 + | { 600 + /** The URL to fetch the attachment from. */ 601 + url: { 602 + /** The URL to fetch the attachment from. */ 603 + url: string 604 + /** Filename for the attachment. */ 605 + filename?: string 606 + /** Alt text / description for the attachment. */ 607 + description?: string 608 + } 609 + } 610 + | { 611 + base64: { 612 + /** Base64-encoded file data. */ 613 + data: string 614 + /** Filename for the attachment. */ 615 + filename: string 616 + /** Alt text / description for the attachment. */ 617 + description?: string 618 + } 619 + } 618 620 619 621 /** Media (image/video) for an embed. */ 620 622 export type RawEmbedMedia = { ··· 774 776 }[] 775 777 }[] 776 778 /** Attachments to include. */ 777 - attachments?: { 778 - /** The URL to fetch the attachment from. */ 779 - url: { 780 - /** The URL to fetch the attachment from. */ 781 - url: string 782 - /** Filename for the attachment. */ 783 - filename?: string 784 - /** Alt text / description for the attachment. */ 785 - description?: string 786 - } 787 - } | { 788 - base64: { 789 - /** Base64-encoded file data. */ 790 - data: string 791 - /** Filename for the attachment. */ 792 - filename: string 793 - /** Alt text / description for the attachment. */ 794 - description?: string 795 - } 796 - }[] 779 + attachments?: 780 + | { 781 + /** The URL to fetch the attachment from. */ 782 + url: { 783 + /** The URL to fetch the attachment from. */ 784 + url: string 785 + /** Filename for the attachment. */ 786 + filename?: string 787 + /** Alt text / description for the attachment. */ 788 + description?: string 789 + } 790 + } 791 + | { 792 + base64: { 793 + /** Base64-encoded file data. */ 794 + data: string 795 + /** Filename for the attachment. */ 796 + filename: string 797 + /** Alt text / description for the attachment. */ 798 + description?: string 799 + } 800 + }[] 797 801 /** Message components. */ 798 802 components?: 799 803 | number ··· 1038 1042 }[] 1039 1043 }[] 1040 1044 /** Attachments to include. */ 1041 - attachments?: { 1042 - /** The URL to fetch the attachment from. */ 1043 - url: { 1044 - /** The URL to fetch the attachment from. */ 1045 - url: string 1046 - /** Filename for the attachment. */ 1047 - filename?: string 1048 - /** Alt text / description for the attachment. */ 1049 - description?: string 1050 - } 1051 - } | { 1052 - base64: { 1053 - /** Base64-encoded file data. */ 1054 - data: string 1055 - /** Filename for the attachment. */ 1056 - filename: string 1057 - /** Alt text / description for the attachment. */ 1058 - description?: string 1059 - } 1060 - }[] 1045 + attachments?: 1046 + | { 1047 + /** The URL to fetch the attachment from. */ 1048 + url: { 1049 + /** The URL to fetch the attachment from. */ 1050 + url: string 1051 + /** Filename for the attachment. */ 1052 + filename?: string 1053 + /** Alt text / description for the attachment. */ 1054 + description?: string 1055 + } 1056 + } 1057 + | { 1058 + base64: { 1059 + /** Base64-encoded file data. */ 1060 + data: string 1061 + /** Filename for the attachment. */ 1062 + filename: string 1063 + /** Alt text / description for the attachment. */ 1064 + description?: string 1065 + } 1066 + }[] 1061 1067 /** Message components (buttons, select menus). */ 1062 1068 components?: 1063 1069 | number ··· 1213 1219 }[] 1214 1220 }[] 1215 1221 /** Attachments to include. */ 1216 - attachments?: { 1217 - /** The URL to fetch the attachment from. */ 1218 - url: { 1219 - /** The URL to fetch the attachment from. */ 1220 - url: string 1221 - /** Filename for the attachment. */ 1222 - filename?: string 1223 - /** Alt text / description for the attachment. */ 1224 - description?: string 1225 - } 1226 - } | { 1227 - base64: { 1228 - /** Base64-encoded file data. */ 1229 - data: string 1230 - /** Filename for the attachment. */ 1231 - filename: string 1232 - /** Alt text / description for the attachment. */ 1233 - description?: string 1234 - } 1235 - }[] 1222 + attachments?: 1223 + | { 1224 + /** The URL to fetch the attachment from. */ 1225 + url: { 1226 + /** The URL to fetch the attachment from. */ 1227 + url: string 1228 + /** Filename for the attachment. */ 1229 + filename?: string 1230 + /** Alt text / description for the attachment. */ 1231 + description?: string 1232 + } 1233 + } 1234 + | { 1235 + base64: { 1236 + /** Base64-encoded file data. */ 1237 + data: string 1238 + /** Filename for the attachment. */ 1239 + filename: string 1240 + /** Alt text / description for the attachment. */ 1241 + description?: string 1242 + } 1243 + }[] 1236 1244 /** Message components. */ 1237 1245 components?: 1238 1246 | number ··· 1313 1321 }[] 1314 1322 }[] 1315 1323 /** Attachments to include. */ 1316 - attachments?: { 1317 - /** The URL to fetch the attachment from. */ 1318 - url: { 1319 - /** The URL to fetch the attachment from. */ 1320 - url: string 1321 - /** Filename for the attachment. */ 1322 - filename?: string 1323 - /** Alt text / description for the attachment. */ 1324 - description?: string 1325 - } 1326 - } | { 1327 - base64: { 1328 - /** Base64-encoded file data. */ 1329 - data: string 1330 - /** Filename for the attachment. */ 1331 - filename: string 1332 - /** Alt text / description for the attachment. */ 1333 - description?: string 1334 - } 1335 - }[] 1324 + attachments?: 1325 + | { 1326 + /** The URL to fetch the attachment from. */ 1327 + url: { 1328 + /** The URL to fetch the attachment from. */ 1329 + url: string 1330 + /** Filename for the attachment. */ 1331 + filename?: string 1332 + /** Alt text / description for the attachment. */ 1333 + description?: string 1334 + } 1335 + } 1336 + | { 1337 + base64: { 1338 + /** Base64-encoded file data. */ 1339 + data: string 1340 + /** Filename for the attachment. */ 1341 + filename: string 1342 + /** Alt text / description for the attachment. */ 1343 + description?: string 1344 + } 1345 + }[] 1336 1346 /** Message components. */ 1337 1347 components?: 1338 1348 | number ··· 1419 1429 }[] 1420 1430 }[] 1421 1431 /** Attachments to include. */ 1422 - attachments?: { 1423 - /** The URL to fetch the attachment from. */ 1424 - url: { 1425 - /** The URL to fetch the attachment from. */ 1426 - url: string 1427 - /** Filename for the attachment. */ 1428 - filename?: string 1429 - /** Alt text / description for the attachment. */ 1430 - description?: string 1431 - } 1432 - } | { 1433 - base64: { 1434 - /** Base64-encoded file data. */ 1435 - data: string 1436 - /** Filename for the attachment. */ 1437 - filename: string 1438 - /** Alt text / description for the attachment. */ 1439 - description?: string 1440 - } 1441 - }[] 1432 + attachments?: 1433 + | { 1434 + /** The URL to fetch the attachment from. */ 1435 + url: { 1436 + /** The URL to fetch the attachment from. */ 1437 + url: string 1438 + /** Filename for the attachment. */ 1439 + filename?: string 1440 + /** Alt text / description for the attachment. */ 1441 + description?: string 1442 + } 1443 + } 1444 + | { 1445 + base64: { 1446 + /** Base64-encoded file data. */ 1447 + data: string 1448 + /** Filename for the attachment. */ 1449 + filename: string 1450 + /** Alt text / description for the attachment. */ 1451 + description?: string 1452 + } 1453 + }[] 1442 1454 /** Message components. */ 1443 1455 components?: 1444 1456 | number ··· 1744 1756 }[] 1745 1757 }[] 1746 1758 /** Attachments to include. */ 1747 - attachments?: { 1748 - /** The URL to fetch the attachment from. */ 1749 - url: { 1750 - /** The URL to fetch the attachment from. */ 1751 - url: string 1752 - /** Filename for the attachment. */ 1753 - filename?: string 1754 - /** Alt text / description for the attachment. */ 1755 - description?: string 1756 - } 1757 - } | { 1758 - base64: { 1759 - /** Base64-encoded file data. */ 1760 - data: string 1761 - /** Filename for the attachment. */ 1762 - filename: string 1763 - /** Alt text / description for the attachment. */ 1764 - description?: string 1765 - } 1766 - }[] 1759 + attachments?: 1760 + | { 1761 + /** The URL to fetch the attachment from. */ 1762 + url: { 1763 + /** The URL to fetch the attachment from. */ 1764 + url: string 1765 + /** Filename for the attachment. */ 1766 + filename?: string 1767 + /** Alt text / description for the attachment. */ 1768 + description?: string 1769 + } 1770 + } 1771 + | { 1772 + base64: { 1773 + /** Base64-encoded file data. */ 1774 + data: string 1775 + /** Filename for the attachment. */ 1776 + filename: string 1777 + /** Alt text / description for the attachment. */ 1778 + description?: string 1779 + } 1780 + }[] 1767 1781 /** Message components. */ 1768 1782 components?: 1769 1783 | number
+2 -4
sdk/src/index.register.test.ts packages/sdk/src/index.register.test.ts
··· 1 - import { beforeEach, describe, expect, it, vi } from 'vitest' 1 + import { beforeEach, describe, expect, it, vi } from 'vite-plus/test' 2 2 import { createBot, slash } from './sdk/commands' 3 3 4 4 describe('createBot slash registration', () => { ··· 21 21 slash({ 22 22 name: 'ping', 23 23 description: 'Reply with pong', 24 - options: [ 25 - { name: 'text', description: 'say something', required: true } 26 - ], 24 + options: [{ name: 'text', description: 'say something', required: true }], 27 25 run: () => {} 28 26 }) 29 27 ]
+1 -1
sdk/src/index.test.ts packages/sdk/src/index.test.ts
··· 1 - import { beforeEach, describe, expect, it, vi } from 'vitest' 1 + import { beforeEach, describe, expect, it, vi } from 'vite-plus/test' 2 2 import { createBot, slash } from './sdk/commands' 3 3 import type { InteractionContext } from './sdk/types' 4 4
sdk/src/index.ts packages/sdk/src/index.ts
+4 -3
sdk/src/runtime/index.ts packages/sdk/src/runtime/index.ts
··· 68 68 op_send_interaction_response(options: unknown): Promise<void> 69 69 op_edit_message(options: unknown): Promise<void> 70 70 op_log(args: unknown[]): void 71 - op_upsert_guild_commands( 72 - options: { guildId: string; commands: FlattenedSlashCommand[] } 73 - ): Promise<void> 71 + op_upsert_guild_commands(options: { 72 + guildId: string 73 + commands: FlattenedSlashCommand[] 74 + }): Promise<void> 74 75 op_register_cron(options: { name: string; expr: string; skipIfRunning?: boolean }): void 75 76 op_secret_placeholder(name: string): string | undefined 76 77 }
sdk/src/runtime/normalize.ts packages/sdk/src/runtime/normalize.ts
+3 -2
sdk/src/sdk/commands.ts packages/sdk/src/sdk/commands.ts
··· 161 161 if (!firstOption) return 162 162 163 163 const subcommandName = firstOption.name 164 - const subcommandMap = ((globalThis as any).__floraSubcommands as SubcommandMap | undefined) 165 - ?.[command.name] 164 + const subcommandMap = ((globalThis as any).__floraSubcommands as SubcommandMap | undefined)?.[ 165 + command.name 166 + ] 166 167 if (!subcommandMap) return 167 168 168 169 const subcommandHandler = subcommandMap[subcommandName]
+5 -5
sdk/src/sdk/components.ts packages/sdk/src/sdk/components.ts
··· 153 153 } 154 154 155 155 setDefaultValues(values: SelectDefaultValue[]) { 156 - this.data.default_values = values.map(value => ({ ...value })) 156 + this.data.default_values = values.map((value) => ({ ...value })) 157 157 return this 158 158 } 159 159 ··· 207 207 } 208 208 209 209 setOptions(options: SelectOption[]) { 210 - this.data.options = options.map(option => ({ ...option })) 210 + this.data.options = options.map((option) => ({ ...option })) 211 211 return this 212 212 } 213 213 214 214 addOptions(...options: SelectOption[]) { 215 215 const current = (this.data.options ?? []) as SelectOption[] 216 - this.data.options = [...current, ...options.map(option => ({ ...option }))] 216 + this.data.options = [...current, ...options.map((option) => ({ ...option }))] 217 217 return this 218 218 } 219 219 } ··· 375 375 } 376 376 377 377 setItems(items: MediaItemEntry[]) { 378 - this.#items = items.map(item => ({ ...item, media: { ...item.media } })) 378 + this.#items = items.map((item) => ({ ...item, media: { ...item.media } })) 379 379 return this 380 380 } 381 381 382 382 toJSON(): ComponentJson { 383 383 return { 384 384 type: ComponentType.MediaGallery, 385 - items: this.#items.map(item => ({ ...item, media: { ...item.media } })) 385 + items: this.#items.map((item) => ({ ...item, media: { ...item.media } })) 386 386 } 387 387 } 388 388 }
+1 -1
sdk/src/sdk/embed.test.ts packages/sdk/src/sdk/embed.test.ts
··· 1 - import { describe, expect, it } from 'vitest' 1 + import { describe, expect, it } from 'vite-plus/test' 2 2 3 3 import { embed } from './embed' 4 4
sdk/src/sdk/embed.ts packages/sdk/src/sdk/embed.ts
sdk/src/sdk/helpers.ts packages/sdk/src/sdk/helpers.ts
sdk/src/sdk/index.ts packages/sdk/src/sdk/index.ts
+5 -22
sdk/src/sdk/kv.ts packages/sdk/src/sdk/kv.ts
··· 27 27 op_kv_get_with_metadata( 28 28 storeName: string, 29 29 key: string 30 - ): Promise< 31 - | [string, RawKvKeyMetadata | null] 32 - | null 33 - > 30 + ): Promise<[string, RawKvKeyMetadata | null] | null> 34 31 op_kv_set( 35 32 storeName: string, 36 33 key: string, ··· 75 72 * @returns Object with value and optional metadata 76 73 */ 77 74 async getWithMetadata(key: string): Promise<RawKvGetResult> { 78 - const result = await Deno.core.ops.op_kv_get_with_metadata( 79 - this.#storeName, 80 - key 81 - ) 75 + const result = await Deno.core.ops.op_kv_get_with_metadata(this.#storeName, key) 82 76 if (result === null) { 83 77 return { value: null } 84 78 } ··· 98 92 * @param value - The value to store (max 1MB) 99 93 * @param options - Optional expiration (Unix timestamp) and metadata 100 94 */ 101 - async set( 102 - key: string, 103 - value: string, 104 - options?: RawKvSetOptions 105 - ): Promise<void> { 95 + async set(key: string, value: string, options?: RawKvSetOptions): Promise<void> { 106 96 await Deno.core.ops.op_kv_set(this.#storeName, key, value, { 107 97 expiration: options?.expiration ?? undefined, 108 98 metadata: options?.metadata ?? undefined ··· 115 105 * @param key - The key to update 116 106 * @param metadata - The metadata to set, or null to remove metadata 117 107 */ 118 - async updateMetadata( 119 - key: string, 120 - metadata: JsonValue | undefined 121 - ): Promise<void> { 122 - await Deno.core.ops.op_kv_update_metadata( 123 - this.#storeName, 124 - key, 125 - metadata ?? undefined 126 - ) 108 + async updateMetadata(key: string, metadata: JsonValue | undefined): Promise<void> { 109 + await Deno.core.ops.op_kv_update_metadata(this.#storeName, key, metadata ?? undefined) 127 110 } 128 111 129 112 /**
+6 -9
sdk/src/sdk/rest.ts packages/sdk/src/sdk/rest.ts
··· 77 77 ops.op_defer_interaction_response(args), 78 78 updateInteractionResponse: (args: RawUpdateInteractionResponse): Promise<void> => 79 79 ops.op_update_interaction_response(args), 80 - editOriginalInteractionResponse: ( 81 - args: RawEditInteractionResponse 82 - ): Promise<JsonValue> => ops.op_edit_original_interaction_response(args), 83 - deleteOriginalInteractionResponse: ( 84 - args: RawDeleteInteractionResponse 85 - ): Promise<void> => ops.op_delete_original_interaction_response(args), 80 + editOriginalInteractionResponse: (args: RawEditInteractionResponse): Promise<JsonValue> => 81 + ops.op_edit_original_interaction_response(args), 82 + deleteOriginalInteractionResponse: (args: RawDeleteInteractionResponse): Promise<void> => 83 + ops.op_delete_original_interaction_response(args), 86 84 createFollowupMessage: (args: RawFollowupMessage): Promise<JsonValue> => 87 85 ops.op_create_followup_message(args), 88 86 editFollowupMessage: (args: RawFollowupMessage): Promise<JsonValue> => ··· 100 98 ops.op_delete_guild_command(args), 101 99 getGuildCommands: (args: RawGuildId): Promise<JsonValue[]> => ops.op_get_guild_commands(args), 102 100 getGuildCommand: (args: RawGetGuildCommand): Promise<JsonValue> => ops.op_get_guild_command(args), 103 - editGuildCommandPermissions: ( 104 - args: RawCommandPermissions 105 - ): Promise<JsonValue> => ops.op_edit_guild_command_permissions(args), 101 + editGuildCommandPermissions: (args: RawCommandPermissions): Promise<JsonValue> => 102 + ops.op_edit_guild_command_permissions(args), 106 103 getGuildCommandsPermissions: (args: RawGuildId): Promise<JsonValue[]> => 107 104 ops.op_get_guild_commands_permissions(args), 108 105 getGuildCommandPermissions: (args: RawGetGuildCommand): Promise<JsonValue> =>
+1 -4
sdk/src/sdk/types.ts packages/sdk/src/sdk/types.ts
··· 55 55 export type ReactionContext = BaseContext<EventReaction> 56 56 export type ReactionRemoveAllContext = BaseContext<EventReactionRemoveAll> 57 57 58 - export type SlashCommandOptions = Record< 59 - string, 60 - string | number | boolean | undefined 61 - > 58 + export type SlashCommandOptions = Record<string, string | number | boolean | undefined> 62 59 63 60 export type InteractionContext = BaseContext<EventInteractionCreate> & { 64 61 options: SlashCommandOptions
+13 -15
sdk/src/testing/factories.ts packages/sdk/src/testing/factories.ts
··· 29 29 const pVal = (partial as Record<string, unknown>)[key] 30 30 const dVal = (defaults as Record<string, unknown>)[key] 31 31 if ( 32 - pVal !== undefined && typeof pVal === 'object' && pVal !== null && !Array.isArray(pVal) && 33 - typeof dVal === 'object' && dVal !== null && !Array.isArray(dVal) 32 + pVal !== undefined && 33 + typeof pVal === 'object' && 34 + pVal !== null && 35 + !Array.isArray(pVal) && 36 + typeof dVal === 'object' && 37 + dVal !== null && 38 + !Array.isArray(dVal) 34 39 ) { 35 40 result[key] = deepMerge(dVal, pVal as DeepPartial<typeof dVal>) 36 41 } else if (pVal !== undefined) { ··· 41 46 } 42 47 43 48 export function makeUser(partial?: DeepPartial<EventUser>): EventUser { 44 - return deepMerge<EventUser>( 45 - { id: nextId(), username: 'testuser', bot: false }, 46 - partial 47 - ) 49 + return deepMerge<EventUser>({ id: nextId(), username: 'testuser', bot: false }, partial) 48 50 } 49 51 50 52 export function makeMember( ··· 80 82 if (typeof value === 'string') return { name, value, type: 3 } 81 83 if (typeof value === 'boolean') return { name, value, type: 5 } 82 84 if (typeof value === 'number') { 83 - return Number.isInteger(value) 84 - ? { name, value, type: 4 } 85 - : { name, value, type: 10 } 85 + return Number.isInteger(value) ? { name, value, type: 4 } : { name, value, type: 10 } 86 86 } 87 87 return { name, value } 88 88 } ··· 93 93 partial?: InteractionPartial, 94 94 guildId?: string 95 95 ): EventInteractionCreate { 96 - const discordOptions = opts 97 - ? Object.entries(opts).map(([k, v]) => optionToDiscord(k, v)) 98 - : [] 96 + const discordOptions = opts ? Object.entries(opts).map(([k, v]) => optionToDiscord(k, v)) : [] 99 97 100 98 const user = makeUser(partial?.user) 101 99 const defaults: EventInteractionCreate = { ··· 138 136 ): EventModalSubmit { 139 137 const components = fields 140 138 ? Object.entries(fields).map(([id, value]) => ({ 141 - type: 1, 142 - components: [{ type: 4, custom_id: id, value }] 143 - })) 139 + type: 1, 140 + components: [{ type: 4, custom_id: id, value }] 141 + })) 144 142 : [] 145 143 146 144 const user = makeUser(partial?.user)
+1 -1
sdk/src/testing/harness.test.ts packages/sdk/src/testing/harness.test.ts
··· 1 - import { afterEach, beforeEach, describe, expect, it } from 'vitest' 1 + import { afterEach, beforeEach, describe, expect, it } from 'vite-plus/test' 2 2 import { createBot, prefix, slash } from '../sdk/commands' 3 3 import { store } from '../sdk/kv' 4 4 import { TestHarness } from './harness'
+2 -4
sdk/src/testing/harness.ts packages/sdk/src/testing/harness.ts
··· 35 35 36 36 constructor(options?: HarnessOptions) { 37 37 this.guildId = options?.guildId ?? '999000000000000000' 38 - this.secretsMap = { ...(options?.secrets ?? {}) } 38 + this.secretsMap = { ...options?.secrets } 39 39 } 40 40 41 41 setup(fn: () => void): this { ··· 306 306 const edits = calls.filter((c) => c.op === 'op_edit_message') 307 307 const defers = calls.filter((c) => c.op === 'op_defer_interaction_response') 308 308 const followups = calls.filter((c) => c.op === 'op_create_followup_message') 309 - const logs = calls 310 - .filter((c) => c.op === 'op_log') 311 - .map((c) => c.args[0] as unknown[]) 309 + const logs = calls.filter((c) => c.op === 'op_log').map((c) => c.args[0] as unknown[]) 312 310 313 311 return { 314 312 calls,
sdk/src/testing/id.ts packages/sdk/src/testing/id.ts
sdk/src/testing/index.ts packages/sdk/src/testing/index.ts
+1 -4
sdk/src/testing/kv_mock.ts packages/sdk/src/testing/kv_mock.ts
··· 29 29 return entry?.value ?? null 30 30 } 31 31 32 - getWithMetadata( 33 - storeName: string, 34 - key: string 35 - ): [string, RawKvKeyMetadata | null] | null { 32 + getWithMetadata(storeName: string, key: string): [string, RawKvKeyMetadata | null] | null { 36 33 const entry = this.getStore(storeName).get(key) 37 34 if (!entry) return null 38 35 const meta: RawKvKeyMetadata | null =
+1 -2
sdk/src/testing/types.ts packages/sdk/src/testing/types.ts
··· 26 26 secrets?: Record<string, string> 27 27 } 28 28 29 - export type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } 30 - : T 29 + export type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T 31 30 32 31 export type MessagePartial = DeepPartial<EventMessage> 33 32 export type InteractionPartial = DeepPartial<EventInteractionCreate>
+2 -1
sdk/tsconfig.json packages/sdk/tsconfig.json
··· 24 24 // Some stricter flags (disabled by default) 25 25 "noUnusedLocals": false, 26 26 "noUnusedParameters": false, 27 - "noPropertyAccessFromIndexSignature": false 27 + "noPropertyAccessFromIndexSignature": false, 28 + "types": ["node"] 28 29 }, 29 30 "include": ["src", "./global-types.d.ts"], 30 31 "exclude": ["node_modules", "dist"]
sdk/vitest.config.ts packages/sdk/vitest.config.ts
+8 -2
third-party/rust/cargo-metadata.json
··· 123206 123206 { 123207 123207 "name": "glob", 123208 123208 "pkg": "registry+https://github.com/rust-lang/crates.io-index#glob@0.3.3", 123209 - "dep_kinds": [{ "kind": null, "target": null }, { "kind": "build", "target": null }] 123209 + "dep_kinds": [ 123210 + { "kind": null, "target": null }, 123211 + { "kind": "build", "target": null } 123212 + ] 123210 123213 }, 123211 123214 { 123212 123215 "name": "libc", ··· 129944 129947 { 129945 129948 "name": "unicase", 129946 129949 "pkg": "registry+https://github.com/rust-lang/crates.io-index#unicase@2.8.1", 129947 - "dep_kinds": [{ "kind": null, "target": null }, { "kind": "build", "target": null }] 129950 + "dep_kinds": [ 129951 + { "kind": null, "target": null }, 129952 + { "kind": "build", "target": null } 129953 + ] 129948 129954 } 129949 129955 ], 129950 129956 "features": ["default", "rev-mappings"]
-15
tombi.toml
··· 1 - toml-version = "v1.0.0" 2 - 3 - [files] 4 - include = ["**/*.toml"] 5 - exclude = [ 6 - "**/submodules/**", 7 - "**/target/**", 8 - "**/node_modules/**", 9 - "**/.git/**", 10 - "dist/**", 11 - "out/**", 12 - ] 13 - 14 - [lsp.formatting] 15 - enabled = false
+118
vite.config.ts
··· 1 + import { defineConfig } from 'vite-plus' 2 + 3 + const ignorePatterns = [ 4 + '**/node_modules', 5 + '**/*-lock.json', 6 + 'pnpm-lock.yaml', 7 + '**/bun.lock', 8 + '**/submodules/**', 9 + '**/dist', 10 + '**/trash', 11 + '**/target', 12 + '**/refs/**', 13 + 'pnpm-lock.yaml' 14 + ] 15 + 16 + export default defineConfig({ 17 + run: { 18 + cache: { 19 + scripts: true, 20 + tasks: true 21 + }, 22 + tasks: { 23 + build: { 24 + command: 'vp run -r build', 25 + env: ['NODE_ENV', 'VITE_*'] 26 + }, 27 + 'apps:build': { 28 + command: [ 29 + 'vp run', 30 + '--filter "@flora-internal/build-service"', 31 + '--filter "@flora-internal/frontend"', 32 + '--filter "@flora-internal/uwu.network"', 33 + '--filter "@flora-internal/www"', 34 + 'build' 35 + ].join(' '), 36 + dependsOn: ['@uwu/flora-api-client#build', '@uwu/flora-cli#build', '@uwu/flora-sdk#build'], 37 + env: ['NODE_ENV', 'VITE_*'] 38 + }, 39 + test: { 40 + command: 'vp run -r test', 41 + env: ['NODE_ENV', 'VITE_*'] 42 + }, 43 + typecheck: { 44 + command: 'vp run -r typecheck' 45 + }, 46 + lint: { 47 + command: 'vp run -r lint' 48 + } 49 + } 50 + }, 51 + staged: { 52 + '*': 'vp check --fix', 53 + '*.rs': 'cargo fmt' 54 + }, 55 + fmt: { 56 + quoteProps: 'preserve', 57 + printWidth: 100, 58 + singleQuote: true, 59 + semi: false, 60 + trailingComma: 'none', 61 + tabWidth: 2, 62 + ignorePatterns, 63 + jsxSingleQuote: true 64 + }, 65 + /** 66 + lint: { 67 + "plugins": [ 68 + "eslint", 69 + "typescript", 70 + "unicorn", 71 + "react", 72 + "react-perf", 73 + "oxc", 74 + "jsx-a11y", 75 + "promise" 76 + ], 77 + "categories": {}, 78 + "rules": {}, 79 + "options": { 80 + "typeAware": true, 81 + "typeCheck": true 82 + }, 83 + "settings": { 84 + "jsx-a11y": { 85 + "components": {}, 86 + "attributes": {} 87 + }, 88 + "next": { 89 + "rootDir": [] 90 + }, 91 + "react": { 92 + "formComponents": [], 93 + "linkComponents": [], 94 + "componentWrapperFunctions": [] 95 + }, 96 + "jsdoc": { 97 + "ignorePrivate": false, 98 + "ignoreInternal": false, 99 + "ignoreReplacesDocs": true, 100 + "overrideReplacesDocs": true, 101 + "augmentsExtendsReplacesDocs": false, 102 + "implementsReplacesDocs": false, 103 + "exemptDestructuredRootsFromChecks": false, 104 + "tagNamePreference": {} 105 + }, 106 + "vitest": { 107 + "typecheck": true 108 + } 109 + }, 110 + "env": { 111 + "builtin": true 112 + }, 113 + "globals": {}, 114 + ignorePatterns, 115 + }, 116 + **/ 117 + test: {} 118 + })