web based infinite canvas

initial commit

+2448
+4
.gitignore
···
··· 1 + node_modules 2 + dist 3 + *.log 4 + .DS_Store
+6
.vscode/settings.json
···
··· 1 + { 2 + "[json]": { "editor.formatOnSave": true, "editor.defaultFormatter": "dprint.dprint" }, 3 + "[jsonc]": { "editor.formatOnSave": true, "editor.defaultFormatter": "dprint.dprint" }, 4 + "[javascript]": { "editor.formatOnSave": true, "editor.defaultFormatter": "dprint.dprint" }, 5 + "[typescript]": { "editor.formatOnSave": true, "editor.defaultFormatter": "dprint.dprint" } 6 + }
+3
README.txt
···
··· 1 + ----------------------------------------------------------------------------- 2 + INKFINITE 3 + -----------------------------------------------------------------------------
+585
TODO.txt
···
··· 1 + ============================================================================= 2 + Author intent: 3 + - Build a Svelte-native editor core (TS) + renderer + UI. 4 + - Keep the "engine" framework-agnostic so Web + Tauri share it. 5 + - Defer collaboration until single-player is correct. 6 + 7 + Conventions: 8 + - [ ] Task 9 + - (DoD) Definition of Done for the milestone 10 + - Files shown are ideas, not requirements 11 + ============================================================================== 12 + 1. Milestone A: Repo skeleton + dev loop *wb-A* 13 + ============================================================================== 14 + 15 + Goal: a monorepo that can run a blank canvas in web + desktop. 16 + 17 + [ ] Create workspace: 18 + - /apps/web (SvelteKit) 19 + - /apps/desktop (Tauri wrapper) 20 + - /packages/core (pure TS engine) 21 + - /packages/renderer-canvas2d (Canvas2D renderer) 22 + 23 + [ ] Add TypeScript config(s): 24 + - one shared tsconfig.base.json 25 + - package-level tsconfig.json extends base 26 + 27 + [ ] Add lint/format: 28 + - eslint + prettier 29 + - one command: pnpm lint / pnpm fmt 30 + 31 + [ ] Add test runner for core: 32 + - vitest in /packages/core 33 + - one command: pnpm test 34 + 35 + [ ] Add CI: 36 + - install, lint, test (core only) 37 + 38 + (DoD): 39 + - `pnpm dev:web` shows an empty page with a <canvas>. 40 + - `pnpm dev:desktop` launches a Tauri window that shows the same canvas. 41 + - `pnpm test` runs at least 1 passing core test. 42 + 43 + 44 + ============================================================================== 45 + 2. Milestone B: Math + coordinate systems *wb-B* 46 + ============================================================================== 47 + 48 + Goal: a correct, testable camera transform (world <-> screen). 49 + 50 + Core primitives (/packages/core/src/math): 51 + [ ] Define Vec2 { x, y } + helpers: 52 + - add, sub, mulScalar, len, normalize, dot 53 + 54 + [ ] Define Box2 { min: Vec2, max: Vec2 }: 55 + - fromPoints, containsPoint, intersectsBox 56 + 57 + [ ] Define Mat3 (2D affine) or equivalent: 58 + - identity 59 + - translate(tx, ty) 60 + - scale(sx, sy) 61 + - rotate(theta) 62 + - multiply(a, b) 63 + - transformPoint(m, p) 64 + 65 + Camera (/packages/core/src/camera): 66 + [ ] Define Camera { x, y, zoom } (world origin + scale) 67 + [ ] Implement worldToScreen(camera, p) 68 + [ ] Implement screenToWorld(camera, p) 69 + [ ] Implement cameraPan(camera, deltaScreen) -> camera' 70 + [ ] Implement cameraZoomAt(camera, factor, anchorScreenPoint) -> camera' 71 + 72 + Tests (/packages/core/test): 73 + [ ] worldToScreen(screenToWorld(p)) round-trip within epsilon 74 + [ ] zoomAt keeps anchor point stable (screen position unchanged) 75 + [ ] pan moves world under cursor as expected 76 + 77 + (DoD): 78 + - All math/camera functions are unit-tested and pass. 79 + 80 + 81 + ============================================================================== 82 + 3. Milestone C: Document model (records) *wb-C* 83 + ============================================================================== 84 + 85 + Goal: define the minimal data model that can represent a drawing. 86 + 87 + IDs (/packages/core/src/id): 88 + [ ] Implement createId(prefix) -> string (stable, unique enough for offline) 89 + [ ] Add test: ids are unique across 10k calls 90 + 91 + Records (/packages/core/src/model): 92 + [ ] Define PageRecord { id, name, shapeIds: string[] } 93 + [ ] Define ShapeRecord base: 94 + - id, type, pageId 95 + - x, y, rot 96 + - props: object (type-specific) 97 + 98 + [ ] Define shape types (minimal): 99 + - rect: { w, h, fill, stroke, radius } 100 + - ellipse: { w, h, fill, stroke } 101 + - line: { a: Vec2, b: Vec2, stroke, width } 102 + - arrow: { a: Vec2, b: Vec2, stroke, width } 103 + - text: { text, fontSize, fontFamily, color, w? } 104 + 105 + [ ] Define BindingRecord (for arrow endpoints): 106 + - id, type: "arrow-end" 107 + - fromShapeId (arrow id) 108 + - toShapeId (target shape id) 109 + - handle: "start" | "end" 110 + - anchor: e.g. { kind: "center" } for v0 111 + 112 + Validation: 113 + [ ] validateDoc(doc) -> { ok | errors[] } 114 + [ ] Add test: invalid binding to missing shape returns error 115 + 116 + (DoD): 117 + - You can serialize a doc with a page + 1 shape to JSON and validate it. 118 + 119 + 120 + ============================================================================== 121 + 4. Milestone D: Store + selectors (reactive core) *wb-D* 122 + ============================================================================== 123 + 124 + Goal: a fast, deterministic state container for the editor. 125 + 126 + Store (/packages/core/src/store): 127 + [ ] Define EditorState: 128 + - doc (pages, shapes, bindings) 129 + - ui: { currentPageId, selectionIds[], toolId } 130 + - camera 131 + 132 + [ ] Implement Store with: 133 + - getState() 134 + - setState(updater) 135 + - subscribe(listener) -> unsubscribe 136 + 137 + [ ] Implement selectors (pure functions): 138 + - getCurrentPage(state) 139 + - getShapesOnCurrentPage(state) 140 + - getSelectedShapes(state) 141 + 142 + [ ] Implement invariants: 143 + - selectionIds only reference existing shapes 144 + - currentPageId must exist 145 + 146 + Tests: 147 + [ ] subscribe fires exactly once per setState 148 + [ ] invariants enforced (reject or repair, pick one and test it) 149 + 150 + (DoD): 151 + - Renderer can subscribe and redraw on any state change. 152 + 153 + 154 + ============================================================================== 155 + 5. Milestone E: Canvas renderer (read-only) *wb-E* 156 + ============================================================================== 157 + 158 + Goal: draw the document from state, no interactivity yet. 159 + 160 + Renderer (/packages/renderer-canvas2d): 161 + [ ] createRenderer(canvas, store) -> { dispose() } 162 + [ ] Implement render loop strategy: 163 + - requestAnimationFrame redraw on "dirty" flag 164 + - mark dirty on store updates 165 + 166 + [ ] Implement draw pipeline: 167 + - clear canvas 168 + - apply camera transform 169 + - draw shapes (rect/ellipse/line/arrow/text) 170 + - draw selection outline if selectionIds non-empty 171 + 172 + [ ] Implement text measurement fallback: 173 + - if text shape has w? else measureText and derive bounds 174 + 175 + [ ] Implement pixel ratio handling: 176 + - set canvas width/height by devicePixelRatio 177 + - scale context accordingly 178 + 179 + (DoD): 180 + - With a hardcoded doc in the store, shapes appear at correct coordinates 181 + and stay stable while resizing the browser window. 182 + 183 + 184 + ============================================================================== 185 + 6. Milestone F: Hit testing (picking) *wb-F* 186 + ============================================================================== 187 + 188 + Goal: determine what the cursor is over. 189 + 190 + Geometry (/packages/core/src/geom): 191 + [ ] shapeBounds(shape) -> Box2 192 + [ ] pointInRect(p, rectShape) -> bool 193 + [ ] pointInEllipse(p, ellipseShape) -> bool 194 + [ ] pointNearSegment(p, a, b, tolerance) -> bool 195 + [ ] hitTestPoint(state, worldPoint) -> shapeId? (topmost wins) 196 + 197 + Layering: 198 + [ ] Define draw order = page.shapeIds order 199 + [ ] hitTest uses reverse order for topmost selection 200 + 201 + Tests: 202 + [ ] hitTestPoint returns expected shapeId for overlapping shapes 203 + [ ] tolerance works for line/arrow selection 204 + 205 + (DoD): 206 + - You can hover shapes and log the hit shape id (no selection yet). 207 + 208 + 209 + ============================================================================== 210 + 7. Milestone G: Input system (pointer + keyboard) *wb-G* 211 + ============================================================================== 212 + 213 + Goal: normalize events into editor actions. 214 + 215 + Input adapter (/apps/web/src/lib/input): 216 + [ ] Capture pointerdown/move/up 217 + [ ] Convert screen coords -> world coords using camera 218 + [ ] Track pointer state: isDown, startWorld, lastWorld, buttons 219 + 220 + Keyboard: 221 + [ ] Capture keydown/keyup 222 + [ ] Normalize modifiers (ctrl/cmd, shift, alt) 223 + 224 + Action bus (/packages/core/src/actions): 225 + [ ] Define Action union: 226 + - PointerDown, PointerMove, PointerUp 227 + - KeyDown, KeyUp 228 + - Wheel (for zoom) 229 + [ ] dispatch(action) -> store updates via tool state machine (next milestone) 230 + 231 + (DoD): 232 + - You can pan/zoom camera via wheel/drag with a temporary "camera tool" 233 + (even before selection tool exists). 234 + 235 + 236 + ============================================================================== 237 + 8. Milestone H: Tool state machine (foundation) *wb-H* 238 + ============================================================================== 239 + 240 + Goal: tools are explicit, testable state machines. 241 + 242 + Tools (/packages/core/src/tools): 243 + [ ] Define ToolId: "select" | "rect" | "ellipse" | "line" | "arrow" | "text" | "pen" 244 + [ ] Define Tool interface: 245 + - id 246 + - onEnter(state) 247 + - onAction(state, action) -> newState 248 + - onExit(state) 249 + 250 + Tool router: 251 + [ ] routeAction(state, action) -> newState (delegates to active tool) 252 + 253 + Tests: 254 + [ ] Switching tools calls onExit/onEnter in correct order 255 + [ ] Tool ignores actions it doesn't care about 256 + 257 + (DoD): 258 + - A dummy tool can consume pointer events and update state deterministically. 259 + 260 + 261 + ============================================================================== 262 + 9. Milestone I: Select/move tool (MVP interaction) *wb-I* 263 + ============================================================================== 264 + 265 + Goal: select shapes and drag them. 266 + 267 + Selection: 268 + [ ] PointerDown: 269 + - if hit shape: selection = [shapeId] (or add with shift) 270 + - else selection = [] 271 + [ ] PointerMove while dragging selected: 272 + - translate selected shapes by deltaWorld 273 + [ ] PointerUp: 274 + - end drag 275 + 276 + Marquee select (smallest slices): 277 + [ ] Implement marquee start (on empty canvas pointerdown) 278 + [ ] Render marquee rectangle overlay 279 + [ ] On pointerup, select shapes whose bounds intersect marquee 280 + 281 + UX: 282 + [ ] Escape clears selection 283 + [ ] Delete removes selected shapes 284 + 285 + Tests: 286 + [ ] drag moves exactly by delta 287 + [ ] shift-click toggles membership 288 + [ ] delete removes and clears selection 289 + 290 + (DoD): 291 + - You can select and move shapes reliably. 292 + 293 + 294 + ============================================================================== 295 + 10. Milestone J: Create basic shapes via tools *wb-J* 296 + ============================================================================== 297 + 298 + Goal: place shapes with dedicated tools. 299 + 300 + Rect tool (repeat pattern for others): 301 + [ ] PointerDown on canvas: 302 + - create a draft rect shape with w/h=0 at startWorld 303 + - selection = [newId] 304 + [ ] PointerMove: 305 + - update w/h based on currentWorld - startWorld 306 + [ ] PointerUp: 307 + - if too small, delete it (click-cancel behavior) 308 + - else finalize 309 + 310 + [ ] Implement ellipse tool (same mechanics) 311 + [ ] Implement line tool (a=startWorld, b=currentWorld) 312 + [ ] Implement arrow tool (same as line but type="arrow") 313 + [ ] Implement text tool: 314 + - click to create text shape 315 + - open in-place editor overlay (contenteditable) in Svelte 316 + 317 + Tests: 318 + [ ] shape creation creates one record with correct props 319 + [ ] click-cancel removes zero-area shapes 320 + 321 + (DoD): 322 + - You can draw rect/ellipse/line/arrow/text on the canvas. 323 + 324 + 325 + ============================================================================== 326 + 11. Milestone K: Bindings for arrows (v0) *wb-K* 327 + ============================================================================== 328 + 329 + Goal: arrow endpoints can “stick” to shapes. 330 + 331 + Binding creation: 332 + [ ] On arrow finalize: 333 + - hit test start/end points 334 + - if point hits a target shape, create binding record for that handle 335 + 336 + Binding resolution: 337 + [ ] resolveArrowEndpoints(state, arrowId) -> { a, b } in world coords 338 + - if bound, compute endpoint at target shape bounds center (v0) 339 + - else use arrow props a/b 340 + 341 + Live update: 342 + [ ] When a target shape moves, bound arrow rerenders automatically 343 + - no mutation required if resolve happens during render 344 + 345 + Tests: 346 + [ ] moving bound shape changes resolved endpoint 347 + [ ] binding to missing target is ignored (or removed)—pick one and test 348 + 349 + (DoD): 350 + - Arrows remain connected to moved shapes (center-to-center is fine for v0). 351 + 352 + 353 + ============================================================================== 354 + 12. Milestone L: History (undo/redo) *wb-L* 355 + ============================================================================== 356 + 357 + Goal: every user-visible change is undoable. 358 + 359 + History model (/packages/core/src/history): 360 + [ ] Define Command: 361 + - do(state) -> state 362 + - undo(state) -> state 363 + 364 + [ ] Wrap mutations as commands: 365 + - CreateShapeCommand 366 + - UpdateShapeCommand (with before/after snapshot) 367 + - DeleteShapesCommand 368 + - SetSelectionCommand 369 + - SetCameraCommand 370 + 371 + [ ] Implement stacks: 372 + - undoStack, redoStack 373 + 374 + [ ] Wire shortcuts: 375 + - Ctrl/Cmd+Z undo 376 + - Ctrl/Cmd+Shift+Z redo 377 + 378 + Tests: 379 + [ ] round-trip: do -> undo returns to identical state (deep equal) 380 + [ ] redo re-applies exactly 381 + 382 + (DoD): 383 + - Undo/redo works for create/move/delete and camera changes. 384 + 385 + 386 + ============================================================================== 387 + 13. Milestone M: Persistence (web) *wb-M* 388 + ============================================================================== 389 + 390 + Goal: save/load documents locally. 391 + 392 + Serialization: 393 + [ ] serialize(state.doc) -> JSON string 394 + [ ] deserialize(json) -> doc (validate) 395 + 396 + Web storage: 397 + [ ] Implement autosave to IndexedDB (or localStorage v0) 398 + [ ] Implement "New / Save / Load" UI: 399 + - New resets doc 400 + - Save exports .json 401 + - Load imports .json and validates 402 + 403 + Tests: 404 + [ ] load(save(doc)) yields equivalent doc 405 + 406 + (DoD): 407 + - You can close the tab, reopen, and recover your last drawing. 408 + 409 + 410 + ============================================================================== 411 + 14. Milestone N: Desktop packaging (Tauri) *wb-N* 412 + ============================================================================== 413 + 414 + Goal: same app works as a desktop app with filesystem access. 415 + 416 + Tauri + SvelteKit integration: 417 + [ ] Configure SvelteKit for static/SPA output 418 + [ ] Ensure SSR is disabled for desktop build 419 + [ ] Configure Tauri to load the built assets 420 + 421 + File dialogs + FS: 422 + [ ] Implement "Save As…" using Tauri dialog + fs APIs 423 + [ ] Implement "Open…" using Tauri dialog + fs APIs 424 + [ ] Add recent files list (v0: store paths in Tauri local storage) 425 + 426 + (DoD): 427 + - Desktop app opens/saves JSON files on disk and reopens them correctly. 428 + 429 + 430 + ============================================================================== 431 + 15. Milestone O: Export (PNG/SVG) *wb-O* 432 + ============================================================================== 433 + 434 + Goal: export drawings as shareable artifacts. 435 + 436 + [ ] Implement exportViewportToPNG(canvas) (screen export) 437 + [ ] Implement exportSelectionToPNG (render selection bounds) 438 + [ ] Implement SVG export for basic shapes: 439 + - rect/ellipse/line/arrow/text 440 + - camera transform baked into output or removed—pick one and document 441 + 442 + Tests: 443 + [ ] exported SVG parses and contains expected elements 444 + 445 + (DoD): 446 + - One-click export works in both web and desktop. 447 + 448 + 449 + ============================================================================== 450 + 16. Milestone P: Performance + big docs (pragmatic) *wb-P* 451 + ============================================================================== 452 + 453 + Goal: the editor stays responsive with many shapes. 454 + 455 + [ ] Add spatial index (v0: simple grid buckets): 456 + - rebuild index on doc changes 457 + - query nearby shapes for hit testing 458 + 459 + [ ] Add view culling: 460 + - compute viewport bounds in world space 461 + - render only shapes whose bounds intersect viewport 462 + 463 + [ ] Reduce redraw frequency: 464 + - rAF only while dirty 465 + - optionally batch multiple store updates into one redraw 466 + 467 + [ ] Add microbench harness: 468 + - generate 10k shapes doc 469 + - measure hit test and render time 470 + 471 + (DoD): 472 + - 10k simple shapes pans/zooms smoothly on a typical machine. 473 + 474 + 475 + ============================================================================== 476 + 17. Milestone Q: Collaboration (optional, after v1) *wb-Q* 477 + ============================================================================== 478 + 479 + Goal: real-time multiplayer without breaking the core model. 480 + 481 + Approach A (recommended): CRDT document (Yjs) 482 + [ ] Map doc model to Y.Map / Y.Array: 483 + - pages (Y.Map) 484 + - shapes (Y.Map) 485 + - bindings (Y.Map) 486 + - ordering (Y.Array of ids) 487 + 488 + [ ] Implement doc<->store bridge: 489 + - local store updates write to Yjs 490 + - Yjs remote updates update store 491 + - avoid feedback loops (transaction origin tagging) 492 + 493 + [ ] Add presence: 494 + - user cursors (id, name, color, world pos) 495 + - selections (ids[]) 496 + 497 + [ ] Add provider: 498 + - websocket provider (self-host) 499 + - awareness / presence channel 500 + 501 + (DoD): 502 + - Two clients can draw, select, and see each other’s cursors live. 503 + 504 + 505 + ============================================================================== 506 + 18. Milestone R: Quality polish (what makes it feel "real") *wb-R* 507 + ============================================================================== 508 + 509 + Goal: the UX crosses the “this is legit” threshold. 510 + 511 + [ ] Snapping: 512 + - snap move to grid 513 + - snap to other shape edges/centers (basic) 514 + 515 + [ ] Handles: 516 + - resize handles for rect/ellipse 517 + - rotate handle 518 + - cursor affordances 519 + 520 + [ ] Keyboard affordances: 521 + - nudge with arrow keys 522 + - duplicate (Ctrl/Cmd+D) 523 + - bring forward/back 524 + 525 + [ ] Accessibility: 526 + - tool buttons navigable with keyboard 527 + - visible focus states 528 + - ARIA labels for controls 529 + 530 + (DoD): 531 + - A user can comfortably draw and edit without surprises. 532 + 533 + 534 + ============================================================================== 535 + Appendix: Suggested file layout *wb-files* 536 + ============================================================================== 537 + 538 + packages/core/src/ 539 + actions/ 540 + camera/ 541 + geom/ 542 + history/ 543 + id/ 544 + model/ 545 + store/ 546 + tools/ 547 + 548 + packages/renderer-canvas2d/src/ 549 + renderer.ts 550 + draw/ 551 + text/ 552 + 553 + apps/web/src/ 554 + routes/ 555 + lib/ 556 + canvas/ 557 + ui/ 558 + 559 + apps/desktop/ 560 + src-tauri/ 561 + (wraps web build) 562 + 563 + 564 + ============================================================================== 565 + References (URLs) *wb-refs* 566 + ============================================================================== 567 + 568 + tldraw conceptual references (inspiration only): 569 + - https://tldraw.dev/docs/shapes 570 + - https://tldraw.dev/docs/editor 571 + - https://tldraw.dev/reference/editor/Editor 572 + 573 + Yjs collaboration option: 574 + - https://docs.yjs.dev/ 575 + - https://docs.yjs.dev/getting-started/working-with-shared-types 576 + - https://github.com/yjs/yjs 577 + 578 + SvelteKit + Tauri packaging: 579 + - https://v2.tauri.app/start/frontend/sveltekit/ 580 + - https://svelte.dev/docs/kit/adapter-static 581 + - https://tauri.app/v1/guides/getting-started/setup/sveltekit/ 582 + 583 + Canvas/infinite-canvas performance ideas: 584 + - https://antv.vision/infinite-canvas-tutorial/guide/lesson-008 585 + - https://harrisonmilbradt.com/blog/canvas-panning-and-zooming
apps/.gitkeep

This is a binary file and will not be displayed.

+12
dprint.json
···
··· 1 + { 2 + "typescript": { 3 + "preferSingleLine": true, 4 + "jsx.bracketPosition": "sameLine" 5 + }, 6 + "json": { "preferSingleLine": true, "lineWidth": 121, "indentWidth": 2 }, 7 + "excludes": ["**/node_modules"], 8 + "plugins": [ 9 + "https://plugins.dprint.dev/typescript-0.95.8.wasm", 10 + "https://plugins.dprint.dev/json-0.20.0.wasm" 11 + ] 12 + }
+11
package.json
···
··· 1 + { 2 + "name": "inkfinite-monorepo", 3 + "version": "1.0.0", 4 + "private": true, 5 + "type": "module", 6 + "workspaces": ["packages/*"], 7 + "scripts": {}, 8 + "devDependencies": { "dprint": "^0.50.2" }, 9 + "engines": { "node": ">=18.0.0", "pnpm": ">=8.0.0" }, 10 + "packageManager": "pnpm@10.26.1" 11 + }
+40
packages/core/package.json
···
··· 1 + { 2 + "name": "tsdown-starter", 3 + "type": "module", 4 + "version": "0.0.0", 5 + "description": "A starter for creating a TypeScript package.", 6 + "author": "Author Name <author.name@mail.com>", 7 + "license": "MIT", 8 + "homepage": "https://github.com/author/library#readme", 9 + "repository": { 10 + "type": "git", 11 + "url": "git+https://github.com/author/library.git" 12 + }, 13 + "bugs": { 14 + "url": "https://github.com/author/library/issues" 15 + }, 16 + "exports": { 17 + ".": "./dist/index.mjs", 18 + "./package.json": "./package.json" 19 + }, 20 + "main": "./dist/index.mjs", 21 + "module": "./dist/index.mjs", 22 + "types": "./dist/index.d.mts", 23 + "files": [ 24 + "dist" 25 + ], 26 + "scripts": { 27 + "build": "tsdown", 28 + "dev": "tsdown --watch", 29 + "test": "vitest", 30 + "typecheck": "tsc --noEmit", 31 + "prepublishOnly": "pnpm run build" 32 + }, 33 + "devDependencies": { 34 + "@types/node": "^25.0.3", 35 + "bumpp": "^10.3.2", 36 + "tsdown": "^0.18.1", 37 + "typescript": "^5.9.3", 38 + "vitest": "^4.0.16" 39 + } 40 + }
+3
packages/core/src/index.ts
···
··· 1 + export function fn() { 2 + return 'Hello, tsdown!' 3 + }
+6
packages/core/tests/index.test.ts
···
··· 1 + import { expect, test } from 'vitest' 2 + import { fn } from '../src' 3 + 4 + test('fn', () => { 5 + expect(fn()).toBe('Hello, tsdown!') 6 + })
+20
packages/core/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 + }
+6
packages/core/tsdown.config.ts
···
··· 1 + import { defineConfig } from 'tsdown' 2 + 3 + export default defineConfig({ 4 + exports: true, 5 + // ...config options 6 + })
+40
packages/renderer/package.json
···
··· 1 + { 2 + "name": "tsdown-starter", 3 + "type": "module", 4 + "version": "0.0.0", 5 + "description": "A starter for creating a TypeScript package.", 6 + "author": "Author Name <author.name@mail.com>", 7 + "license": "MIT", 8 + "homepage": "https://github.com/author/library#readme", 9 + "repository": { 10 + "type": "git", 11 + "url": "git+https://github.com/author/library.git" 12 + }, 13 + "bugs": { 14 + "url": "https://github.com/author/library/issues" 15 + }, 16 + "exports": { 17 + ".": "./dist/index.mjs", 18 + "./package.json": "./package.json" 19 + }, 20 + "main": "./dist/index.mjs", 21 + "module": "./dist/index.mjs", 22 + "types": "./dist/index.d.mts", 23 + "files": [ 24 + "dist" 25 + ], 26 + "scripts": { 27 + "build": "tsdown", 28 + "dev": "tsdown --watch", 29 + "test": "vitest", 30 + "typecheck": "tsc --noEmit", 31 + "prepublishOnly": "pnpm run build" 32 + }, 33 + "devDependencies": { 34 + "@types/node": "^25.0.3", 35 + "bumpp": "^10.3.2", 36 + "tsdown": "^0.18.1", 37 + "typescript": "^5.9.3", 38 + "vitest": "^4.0.16" 39 + } 40 + }
+3
packages/renderer/src/index.ts
···
··· 1 + export function fn() { 2 + return 'Hello, tsdown!' 3 + }
+6
packages/renderer/tests/index.test.ts
···
··· 1 + import { expect, test } from "vitest"; 2 + import { fn } from "../src"; 3 + 4 + test("fn", () => { 5 + expect(fn()).toBe("Hello, tsdown!"); 6 + });
+20
packages/renderer/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 + }
+6
packages/renderer/tsdown.config.ts
···
··· 1 + import { defineConfig } from 'tsdown' 2 + 3 + export default defineConfig({ 4 + exports: true, 5 + // ...config options 6 + })
+1672
pnpm-lock.yaml
···
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + devDependencies: 11 + dprint: 12 + specifier: ^0.50.2 13 + version: 0.50.2 14 + 15 + packages/core: 16 + devDependencies: 17 + '@types/node': 18 + specifier: ^25.0.3 19 + version: 25.0.3 20 + bumpp: 21 + specifier: ^10.3.2 22 + version: 10.3.2 23 + tsdown: 24 + specifier: ^0.18.1 25 + version: 0.18.1(typescript@5.9.3) 26 + typescript: 27 + specifier: ^5.9.3 28 + version: 5.9.3 29 + vitest: 30 + specifier: ^4.0.16 31 + version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2) 32 + 33 + packages/renderer: 34 + devDependencies: 35 + '@types/node': 36 + specifier: ^25.0.3 37 + version: 25.0.3 38 + bumpp: 39 + specifier: ^10.3.2 40 + version: 10.3.2 41 + tsdown: 42 + specifier: ^0.18.1 43 + version: 0.18.1(typescript@5.9.3) 44 + typescript: 45 + specifier: ^5.9.3 46 + version: 5.9.3 47 + vitest: 48 + specifier: ^4.0.16 49 + version: 4.0.16(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2) 50 + 51 + packages: 52 + 53 + '@babel/generator@7.28.5': 54 + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} 55 + engines: {node: '>=6.9.0'} 56 + 57 + '@babel/helper-string-parser@7.27.1': 58 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 59 + engines: {node: '>=6.9.0'} 60 + 61 + '@babel/helper-validator-identifier@7.28.5': 62 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 63 + engines: {node: '>=6.9.0'} 64 + 65 + '@babel/parser@7.28.5': 66 + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} 67 + engines: {node: '>=6.0.0'} 68 + hasBin: true 69 + 70 + '@babel/types@7.28.5': 71 + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} 72 + engines: {node: '>=6.9.0'} 73 + 74 + '@dprint/darwin-arm64@0.50.2': 75 + resolution: {integrity: sha512-4d08INZlTxbPW9LK9W8+93viN543/qA2Kxn4azVnPW/xCb2Im03UqJBz8mMm3nJZdtNnK3uTVG3ib1VW+XJisw==} 76 + cpu: [arm64] 77 + os: [darwin] 78 + 79 + '@dprint/darwin-x64@0.50.2': 80 + resolution: {integrity: sha512-ZXWPBwdLojhdBATq+bKwJvB7D8bIzrD6eR/Xuq9UYE7evQazUiR069d9NPF0iVuzTo6wNf9ub9SXI7qDl11EGA==} 81 + cpu: [x64] 82 + os: [darwin] 83 + 84 + '@dprint/linux-arm64-glibc@0.50.2': 85 + resolution: {integrity: sha512-marxQzRw8atXAnaawwZHeeUaaAVewrGTlFKKcDASGyjPBhc23J5fHPUPremm8xCbgYZyTlokzrV8/1rDRWhJcw==} 86 + cpu: [arm64] 87 + os: [linux] 88 + 89 + '@dprint/linux-arm64-musl@0.50.2': 90 + resolution: {integrity: sha512-oGDq44ydzo0ZkJk6RHcUzUN5sOMT5HC6WA8kHXI6tkAsLUkaLO2DzZFfW4aAYZUn+hYNpQfQD8iGew0sjkyLyg==} 91 + cpu: [arm64] 92 + os: [linux] 93 + 94 + '@dprint/linux-riscv64-glibc@0.50.2': 95 + resolution: {integrity: sha512-QMmZoZYWsXezDcC03fBOwPfxhTpPEyHqutcgJ0oauN9QcSXGji9NSZITMmtLz2Ki3T1MIvdaLd1goGzNSvNqTQ==} 96 + cpu: [riscv64] 97 + os: [linux] 98 + 99 + '@dprint/linux-x64-glibc@0.50.2': 100 + resolution: {integrity: sha512-KMeHEzb4teQJChTgq8HuQzc+reRNDnarOTGTQovAZ9WNjOtKLViftsKWW5HsnRHtP5nUIPE9rF1QLjJ/gUsqvw==} 101 + cpu: [x64] 102 + os: [linux] 103 + 104 + '@dprint/linux-x64-musl@0.50.2': 105 + resolution: {integrity: sha512-qM37T7H69g5coBTfE7SsA+KZZaRBky6gaUhPgAYxW+fOsoVtZSVkXtfTtQauHTpqqOEtbxfCtum70Hz1fr1teg==} 106 + cpu: [x64] 107 + os: [linux] 108 + 109 + '@dprint/win32-arm64@0.50.2': 110 + resolution: {integrity: sha512-kuGVHGoxLwssVDsodefUIYQRoO2fQncurH/xKgXiZwMPOSzFcgUzYJQiyqmJEp+PENhO9VT1hXUHZtlyCAWBUQ==} 111 + cpu: [arm64] 112 + os: [win32] 113 + 114 + '@dprint/win32-x64@0.50.2': 115 + resolution: {integrity: sha512-N3l9k31c3IMfVXqL0L6ygIhJFvCIrfQ+Z5Jph6RnCcBO6oDYWeYhAv/qBk1vLsF2y/e79TKsR1tvaEwnrQ03XA==} 116 + cpu: [x64] 117 + os: [win32] 118 + 119 + '@emnapi/core@1.7.1': 120 + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} 121 + 122 + '@emnapi/runtime@1.7.1': 123 + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} 124 + 125 + '@emnapi/wasi-threads@1.1.0': 126 + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} 127 + 128 + '@esbuild/aix-ppc64@0.27.2': 129 + resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} 130 + engines: {node: '>=18'} 131 + cpu: [ppc64] 132 + os: [aix] 133 + 134 + '@esbuild/android-arm64@0.27.2': 135 + resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} 136 + engines: {node: '>=18'} 137 + cpu: [arm64] 138 + os: [android] 139 + 140 + '@esbuild/android-arm@0.27.2': 141 + resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} 142 + engines: {node: '>=18'} 143 + cpu: [arm] 144 + os: [android] 145 + 146 + '@esbuild/android-x64@0.27.2': 147 + resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} 148 + engines: {node: '>=18'} 149 + cpu: [x64] 150 + os: [android] 151 + 152 + '@esbuild/darwin-arm64@0.27.2': 153 + resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} 154 + engines: {node: '>=18'} 155 + cpu: [arm64] 156 + os: [darwin] 157 + 158 + '@esbuild/darwin-x64@0.27.2': 159 + resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} 160 + engines: {node: '>=18'} 161 + cpu: [x64] 162 + os: [darwin] 163 + 164 + '@esbuild/freebsd-arm64@0.27.2': 165 + resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} 166 + engines: {node: '>=18'} 167 + cpu: [arm64] 168 + os: [freebsd] 169 + 170 + '@esbuild/freebsd-x64@0.27.2': 171 + resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} 172 + engines: {node: '>=18'} 173 + cpu: [x64] 174 + os: [freebsd] 175 + 176 + '@esbuild/linux-arm64@0.27.2': 177 + resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} 178 + engines: {node: '>=18'} 179 + cpu: [arm64] 180 + os: [linux] 181 + 182 + '@esbuild/linux-arm@0.27.2': 183 + resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} 184 + engines: {node: '>=18'} 185 + cpu: [arm] 186 + os: [linux] 187 + 188 + '@esbuild/linux-ia32@0.27.2': 189 + resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} 190 + engines: {node: '>=18'} 191 + cpu: [ia32] 192 + os: [linux] 193 + 194 + '@esbuild/linux-loong64@0.27.2': 195 + resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} 196 + engines: {node: '>=18'} 197 + cpu: [loong64] 198 + os: [linux] 199 + 200 + '@esbuild/linux-mips64el@0.27.2': 201 + resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} 202 + engines: {node: '>=18'} 203 + cpu: [mips64el] 204 + os: [linux] 205 + 206 + '@esbuild/linux-ppc64@0.27.2': 207 + resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} 208 + engines: {node: '>=18'} 209 + cpu: [ppc64] 210 + os: [linux] 211 + 212 + '@esbuild/linux-riscv64@0.27.2': 213 + resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} 214 + engines: {node: '>=18'} 215 + cpu: [riscv64] 216 + os: [linux] 217 + 218 + '@esbuild/linux-s390x@0.27.2': 219 + resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} 220 + engines: {node: '>=18'} 221 + cpu: [s390x] 222 + os: [linux] 223 + 224 + '@esbuild/linux-x64@0.27.2': 225 + resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} 226 + engines: {node: '>=18'} 227 + cpu: [x64] 228 + os: [linux] 229 + 230 + '@esbuild/netbsd-arm64@0.27.2': 231 + resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} 232 + engines: {node: '>=18'} 233 + cpu: [arm64] 234 + os: [netbsd] 235 + 236 + '@esbuild/netbsd-x64@0.27.2': 237 + resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} 238 + engines: {node: '>=18'} 239 + cpu: [x64] 240 + os: [netbsd] 241 + 242 + '@esbuild/openbsd-arm64@0.27.2': 243 + resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} 244 + engines: {node: '>=18'} 245 + cpu: [arm64] 246 + os: [openbsd] 247 + 248 + '@esbuild/openbsd-x64@0.27.2': 249 + resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} 250 + engines: {node: '>=18'} 251 + cpu: [x64] 252 + os: [openbsd] 253 + 254 + '@esbuild/openharmony-arm64@0.27.2': 255 + resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==} 256 + engines: {node: '>=18'} 257 + cpu: [arm64] 258 + os: [openharmony] 259 + 260 + '@esbuild/sunos-x64@0.27.2': 261 + resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} 262 + engines: {node: '>=18'} 263 + cpu: [x64] 264 + os: [sunos] 265 + 266 + '@esbuild/win32-arm64@0.27.2': 267 + resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} 268 + engines: {node: '>=18'} 269 + cpu: [arm64] 270 + os: [win32] 271 + 272 + '@esbuild/win32-ia32@0.27.2': 273 + resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} 274 + engines: {node: '>=18'} 275 + cpu: [ia32] 276 + os: [win32] 277 + 278 + '@esbuild/win32-x64@0.27.2': 279 + resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} 280 + engines: {node: '>=18'} 281 + cpu: [x64] 282 + os: [win32] 283 + 284 + '@jridgewell/gen-mapping@0.3.13': 285 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 286 + 287 + '@jridgewell/resolve-uri@3.1.2': 288 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 289 + engines: {node: '>=6.0.0'} 290 + 291 + '@jridgewell/sourcemap-codec@1.5.5': 292 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 293 + 294 + '@jridgewell/trace-mapping@0.3.31': 295 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 296 + 297 + '@napi-rs/wasm-runtime@1.1.0': 298 + resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} 299 + 300 + '@oxc-project/types@0.103.0': 301 + resolution: {integrity: sha512-bkiYX5kaXWwUessFRSoXFkGIQTmc6dLGdxuRTrC+h8PSnIdZyuXHHlLAeTmOue5Br/a0/a7dHH0Gca6eXn9MKg==} 302 + 303 + '@quansync/fs@1.0.0': 304 + resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} 305 + 306 + '@rolldown/binding-android-arm64@1.0.0-beta.55': 307 + resolution: {integrity: sha512-5cPpHdO+zp+klznZnIHRO1bMHDq5hS9cqXodEKAaa/dQTPDjnE91OwAsy3o1gT2x4QaY8NzdBXAvutYdaw0WeA==} 308 + engines: {node: ^20.19.0 || >=22.12.0} 309 + cpu: [arm64] 310 + os: [android] 311 + 312 + '@rolldown/binding-darwin-arm64@1.0.0-beta.55': 313 + resolution: {integrity: sha512-l0887CGU2SXZr0UJmeEcXSvtDCOhDTTYXuoWbhrEJ58YQhQk24EVhDhHMTyjJb1PBRniUgNc1G0T51eF8z+TWw==} 314 + engines: {node: ^20.19.0 || >=22.12.0} 315 + cpu: [arm64] 316 + os: [darwin] 317 + 318 + '@rolldown/binding-darwin-x64@1.0.0-beta.55': 319 + resolution: {integrity: sha512-d7qP2AVYzN0tYIP4vJ7nmr26xvmlwdkLD/jWIc9Z9dqh5y0UGPigO3m5eHoHq9BNazmwdD9WzDHbQZyXFZjgtA==} 320 + engines: {node: ^20.19.0 || >=22.12.0} 321 + cpu: [x64] 322 + os: [darwin] 323 + 324 + '@rolldown/binding-freebsd-x64@1.0.0-beta.55': 325 + resolution: {integrity: sha512-j311E4NOB0VMmXHoDDZhrWidUf7L/Sa6bu/+i2cskvHKU40zcUNPSYeD2YiO2MX+hhDFa5bJwhliYfs+bTrSZw==} 326 + engines: {node: ^20.19.0 || >=22.12.0} 327 + cpu: [x64] 328 + os: [freebsd] 329 + 330 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.55': 331 + resolution: {integrity: sha512-lAsaYWhfNTW2A/9O7zCpb5eIJBrFeNEatOS/DDOZ5V/95NHy50g4b/5ViCqchfyFqRb7MKUR18/+xWkIcDkeIw==} 332 + engines: {node: ^20.19.0 || >=22.12.0} 333 + cpu: [arm] 334 + os: [linux] 335 + 336 + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.55': 337 + resolution: {integrity: sha512-2x6ffiVLZrQv7Xii9+JdtyT1U3bQhKj59K3eRnYlrXsKyjkjfmiDUVx2n+zSyijisUqD62fcegmx2oLLfeTkCA==} 338 + engines: {node: ^20.19.0 || >=22.12.0} 339 + cpu: [arm64] 340 + os: [linux] 341 + 342 + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.55': 343 + resolution: {integrity: sha512-QbNncvqAXziya5wleI+OJvmceEE15vE4yn4qfbI/hwT/+8ZcqxyfRZOOh62KjisXxp4D0h3JZspycXYejxAU3w==} 344 + engines: {node: ^20.19.0 || >=22.12.0} 345 + cpu: [arm64] 346 + os: [linux] 347 + 348 + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.55': 349 + resolution: {integrity: sha512-YZCTZZM+rujxwVc6A+QZaNMJXVtmabmFYLG2VGQTKaBfYGvBKUgtbMEttnp/oZ88BMi2DzadBVhOmfQV8SuHhw==} 350 + engines: {node: ^20.19.0 || >=22.12.0} 351 + cpu: [x64] 352 + os: [linux] 353 + 354 + '@rolldown/binding-linux-x64-musl@1.0.0-beta.55': 355 + resolution: {integrity: sha512-28q9OQ/DDpFh2keS4BVAlc3N65/wiqKbk5K1pgLdu/uWbKa8hgUJofhXxqO+a+Ya2HVTUuYHneWsI2u+eu3N5Q==} 356 + engines: {node: ^20.19.0 || >=22.12.0} 357 + cpu: [x64] 358 + os: [linux] 359 + 360 + '@rolldown/binding-openharmony-arm64@1.0.0-beta.55': 361 + resolution: {integrity: sha512-LiCA4BjCnm49B+j1lFzUtlC+4ZphBv0d0g5VqrEJua/uyv9Ey1v9tiaMql1C8c0TVSNDUmrkfHQ71vuQC7YfpQ==} 362 + engines: {node: ^20.19.0 || >=22.12.0} 363 + cpu: [arm64] 364 + os: [openharmony] 365 + 366 + '@rolldown/binding-wasm32-wasi@1.0.0-beta.55': 367 + resolution: {integrity: sha512-nZ76tY7T0Oe8vamz5Cv5CBJvrqeQxwj1WaJ2GxX8Msqs0zsQMMcvoyxOf0glnJlxxgKjtoBxAOxaAU8ERbW6Tg==} 368 + engines: {node: '>=14.0.0'} 369 + cpu: [wasm32] 370 + 371 + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.55': 372 + resolution: {integrity: sha512-TFVVfLfhL1G+pWspYAgPK/FSqjiBtRKYX9hixfs508QVEZPQlubYAepHPA7kEa6lZXYj5ntzF87KC6RNhxo+ew==} 373 + engines: {node: ^20.19.0 || >=22.12.0} 374 + cpu: [arm64] 375 + os: [win32] 376 + 377 + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.55': 378 + resolution: {integrity: sha512-j1WBlk0p+ISgLzMIgl0xHp1aBGXenoK2+qWYc/wil2Vse7kVOdFq9aeQ8ahK6/oxX2teQ5+eDvgjdywqTL+daA==} 379 + engines: {node: ^20.19.0 || >=22.12.0} 380 + cpu: [x64] 381 + os: [win32] 382 + 383 + '@rolldown/pluginutils@1.0.0-beta.55': 384 + resolution: {integrity: sha512-vajw/B3qoi7aYnnD4BQ4VoCcXQWnF0roSwE2iynbNxgW4l9mFwtLmLmUhpDdcTBfKyZm1p/T0D13qG94XBLohA==} 385 + 386 + '@rollup/rollup-android-arm-eabi@4.54.0': 387 + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} 388 + cpu: [arm] 389 + os: [android] 390 + 391 + '@rollup/rollup-android-arm64@4.54.0': 392 + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} 393 + cpu: [arm64] 394 + os: [android] 395 + 396 + '@rollup/rollup-darwin-arm64@4.54.0': 397 + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} 398 + cpu: [arm64] 399 + os: [darwin] 400 + 401 + '@rollup/rollup-darwin-x64@4.54.0': 402 + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} 403 + cpu: [x64] 404 + os: [darwin] 405 + 406 + '@rollup/rollup-freebsd-arm64@4.54.0': 407 + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} 408 + cpu: [arm64] 409 + os: [freebsd] 410 + 411 + '@rollup/rollup-freebsd-x64@4.54.0': 412 + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} 413 + cpu: [x64] 414 + os: [freebsd] 415 + 416 + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': 417 + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} 418 + cpu: [arm] 419 + os: [linux] 420 + 421 + '@rollup/rollup-linux-arm-musleabihf@4.54.0': 422 + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} 423 + cpu: [arm] 424 + os: [linux] 425 + 426 + '@rollup/rollup-linux-arm64-gnu@4.54.0': 427 + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} 428 + cpu: [arm64] 429 + os: [linux] 430 + 431 + '@rollup/rollup-linux-arm64-musl@4.54.0': 432 + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} 433 + cpu: [arm64] 434 + os: [linux] 435 + 436 + '@rollup/rollup-linux-loong64-gnu@4.54.0': 437 + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} 438 + cpu: [loong64] 439 + os: [linux] 440 + 441 + '@rollup/rollup-linux-ppc64-gnu@4.54.0': 442 + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} 443 + cpu: [ppc64] 444 + os: [linux] 445 + 446 + '@rollup/rollup-linux-riscv64-gnu@4.54.0': 447 + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} 448 + cpu: [riscv64] 449 + os: [linux] 450 + 451 + '@rollup/rollup-linux-riscv64-musl@4.54.0': 452 + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} 453 + cpu: [riscv64] 454 + os: [linux] 455 + 456 + '@rollup/rollup-linux-s390x-gnu@4.54.0': 457 + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} 458 + cpu: [s390x] 459 + os: [linux] 460 + 461 + '@rollup/rollup-linux-x64-gnu@4.54.0': 462 + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} 463 + cpu: [x64] 464 + os: [linux] 465 + 466 + '@rollup/rollup-linux-x64-musl@4.54.0': 467 + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} 468 + cpu: [x64] 469 + os: [linux] 470 + 471 + '@rollup/rollup-openharmony-arm64@4.54.0': 472 + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} 473 + cpu: [arm64] 474 + os: [openharmony] 475 + 476 + '@rollup/rollup-win32-arm64-msvc@4.54.0': 477 + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} 478 + cpu: [arm64] 479 + os: [win32] 480 + 481 + '@rollup/rollup-win32-ia32-msvc@4.54.0': 482 + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} 483 + cpu: [ia32] 484 + os: [win32] 485 + 486 + '@rollup/rollup-win32-x64-gnu@4.54.0': 487 + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} 488 + cpu: [x64] 489 + os: [win32] 490 + 491 + '@rollup/rollup-win32-x64-msvc@4.54.0': 492 + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} 493 + cpu: [x64] 494 + os: [win32] 495 + 496 + '@standard-schema/spec@1.1.0': 497 + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 498 + 499 + '@tybys/wasm-util@0.10.1': 500 + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} 501 + 502 + '@types/chai@5.2.3': 503 + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 504 + 505 + '@types/deep-eql@4.0.2': 506 + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 507 + 508 + '@types/estree@1.0.8': 509 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 510 + 511 + '@types/node@25.0.3': 512 + resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} 513 + 514 + '@vitest/expect@4.0.16': 515 + resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} 516 + 517 + '@vitest/mocker@4.0.16': 518 + resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} 519 + peerDependencies: 520 + msw: ^2.4.9 521 + vite: ^6.0.0 || ^7.0.0-0 522 + peerDependenciesMeta: 523 + msw: 524 + optional: true 525 + vite: 526 + optional: true 527 + 528 + '@vitest/pretty-format@4.0.16': 529 + resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} 530 + 531 + '@vitest/runner@4.0.16': 532 + resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} 533 + 534 + '@vitest/snapshot@4.0.16': 535 + resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} 536 + 537 + '@vitest/spy@4.0.16': 538 + resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} 539 + 540 + '@vitest/utils@4.0.16': 541 + resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} 542 + 543 + ansis@4.2.0: 544 + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} 545 + engines: {node: '>=14'} 546 + 547 + args-tokenizer@0.3.0: 548 + resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==} 549 + 550 + assertion-error@2.0.1: 551 + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 552 + engines: {node: '>=12'} 553 + 554 + ast-kit@2.2.0: 555 + resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==} 556 + engines: {node: '>=20.19.0'} 557 + 558 + birpc@4.0.0: 559 + resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} 560 + 561 + bumpp@10.3.2: 562 + resolution: {integrity: sha512-yUUkVx5zpTywLNX97MlrqtpanI7eMMwFwLntWR2EBVDw3/Pm3aRIzCoDEGHATLIiHK9PuJC7xWI4XNWqXItSPg==} 563 + engines: {node: '>=18'} 564 + hasBin: true 565 + 566 + c12@3.3.3: 567 + resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==} 568 + peerDependencies: 569 + magicast: '*' 570 + peerDependenciesMeta: 571 + magicast: 572 + optional: true 573 + 574 + cac@6.7.14: 575 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 576 + engines: {node: '>=8'} 577 + 578 + chai@6.2.1: 579 + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} 580 + engines: {node: '>=18'} 581 + 582 + chokidar@5.0.0: 583 + resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} 584 + engines: {node: '>= 20.19.0'} 585 + 586 + citty@0.1.6: 587 + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} 588 + 589 + confbox@0.2.2: 590 + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} 591 + 592 + consola@3.4.2: 593 + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 594 + engines: {node: ^14.18.0 || >=16.10.0} 595 + 596 + defu@6.1.4: 597 + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 598 + 599 + destr@2.0.5: 600 + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} 601 + 602 + dotenv@17.2.3: 603 + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} 604 + engines: {node: '>=12'} 605 + 606 + dprint@0.50.2: 607 + resolution: {integrity: sha512-+0Fzg+17jsMMUouK00/Fara5YtGOuE76EAJINHB8VpkXHd0n00rMXtw/03qorOgz23eo8Y0UpYvNZBJJo3aNtw==} 608 + hasBin: true 609 + 610 + dts-resolver@2.1.3: 611 + resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==} 612 + engines: {node: '>=20.19.0'} 613 + peerDependencies: 614 + oxc-resolver: '>=11.0.0' 615 + peerDependenciesMeta: 616 + oxc-resolver: 617 + optional: true 618 + 619 + empathic@2.0.0: 620 + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} 621 + engines: {node: '>=14'} 622 + 623 + es-module-lexer@1.7.0: 624 + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 625 + 626 + esbuild@0.27.2: 627 + resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} 628 + engines: {node: '>=18'} 629 + hasBin: true 630 + 631 + escalade@3.2.0: 632 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 633 + engines: {node: '>=6'} 634 + 635 + estree-walker@3.0.3: 636 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 637 + 638 + expect-type@1.3.0: 639 + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} 640 + engines: {node: '>=12.0.0'} 641 + 642 + exsolve@1.0.8: 643 + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} 644 + 645 + fdir@6.5.0: 646 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 647 + engines: {node: '>=12.0.0'} 648 + peerDependencies: 649 + picomatch: ^3 || ^4 650 + peerDependenciesMeta: 651 + picomatch: 652 + optional: true 653 + 654 + fsevents@2.3.3: 655 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 656 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 657 + os: [darwin] 658 + 659 + get-tsconfig@4.13.0: 660 + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} 661 + 662 + giget@2.0.0: 663 + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} 664 + hasBin: true 665 + 666 + hookable@5.5.3: 667 + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 668 + 669 + import-without-cache@0.2.4: 670 + resolution: {integrity: sha512-b/Ke0y4n26ffQhkLvgBxV/NVO/QEE6AZlrMj8DYuxBWNAAu4iMQWZTFWzKcCTEmv7VQ0ae0j8KwrlGzSy8sYQQ==} 671 + engines: {node: '>=20.19.0'} 672 + 673 + jiti@2.6.1: 674 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 675 + hasBin: true 676 + 677 + jsesc@3.1.0: 678 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 679 + engines: {node: '>=6'} 680 + hasBin: true 681 + 682 + jsonc-parser@3.3.1: 683 + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} 684 + 685 + magic-string@0.30.21: 686 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 687 + 688 + nanoid@3.3.11: 689 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 690 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 691 + hasBin: true 692 + 693 + node-fetch-native@1.6.7: 694 + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} 695 + 696 + nypm@0.6.2: 697 + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} 698 + engines: {node: ^14.16.0 || >=16.10.0} 699 + hasBin: true 700 + 701 + obug@2.1.1: 702 + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 703 + 704 + ohash@2.0.11: 705 + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} 706 + 707 + package-manager-detector@1.6.0: 708 + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} 709 + 710 + pathe@2.0.3: 711 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 712 + 713 + perfect-debounce@2.0.0: 714 + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} 715 + 716 + picocolors@1.1.1: 717 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 718 + 719 + picomatch@4.0.3: 720 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 721 + engines: {node: '>=12'} 722 + 723 + pkg-types@2.3.0: 724 + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} 725 + 726 + postcss@8.5.6: 727 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 728 + engines: {node: ^10 || ^12 || >=14} 729 + 730 + quansync@1.0.0: 731 + resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} 732 + 733 + rc9@2.1.2: 734 + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} 735 + 736 + readdirp@5.0.0: 737 + resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} 738 + engines: {node: '>= 20.19.0'} 739 + 740 + resolve-pkg-maps@1.0.0: 741 + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 742 + 743 + rolldown-plugin-dts@0.19.1: 744 + resolution: {integrity: sha512-6z501zDTGq6ZrIEdk57qNUwq7kBRGzv3I3SAN2HMJ2KFYjHLnAuPYOmvfiwdxbRZMJ0iMdkV9rYdC3GjurT2cg==} 745 + engines: {node: '>=20.19.0'} 746 + peerDependencies: 747 + '@ts-macro/tsc': ^0.3.6 748 + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' 749 + rolldown: ^1.0.0-beta.55 750 + typescript: ^5.0.0 751 + vue-tsc: ~3.1.0 752 + peerDependenciesMeta: 753 + '@ts-macro/tsc': 754 + optional: true 755 + '@typescript/native-preview': 756 + optional: true 757 + typescript: 758 + optional: true 759 + vue-tsc: 760 + optional: true 761 + 762 + rolldown@1.0.0-beta.55: 763 + resolution: {integrity: sha512-r8Ws43aYCnfO07ao0SvQRz4TBAtZJjGWNvScRBOHuiNHvjfECOJBIqJv0nUkL1GYcltjvvHswRilDF1ocsC0+g==} 764 + engines: {node: ^20.19.0 || >=22.12.0} 765 + hasBin: true 766 + 767 + rollup@4.54.0: 768 + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} 769 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 770 + hasBin: true 771 + 772 + semver@7.7.3: 773 + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 774 + engines: {node: '>=10'} 775 + hasBin: true 776 + 777 + siginfo@2.0.0: 778 + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 779 + 780 + source-map-js@1.2.1: 781 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 782 + engines: {node: '>=0.10.0'} 783 + 784 + stackback@0.0.2: 785 + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 786 + 787 + std-env@3.10.0: 788 + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 789 + 790 + tinybench@2.9.0: 791 + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 792 + 793 + tinyexec@1.0.2: 794 + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} 795 + engines: {node: '>=18'} 796 + 797 + tinyglobby@0.2.15: 798 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 799 + engines: {node: '>=12.0.0'} 800 + 801 + tinyrainbow@3.0.3: 802 + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} 803 + engines: {node: '>=14.0.0'} 804 + 805 + tree-kill@1.2.2: 806 + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 807 + hasBin: true 808 + 809 + tsdown@0.18.1: 810 + resolution: {integrity: sha512-na4MdVA8QS9Zw++0KovGpjvw1BY5WvoCWcE4Aw0dyfff9nWK8BPzniQEVs+apGUg3DHaYMDfs+XiFaDDgqDDzQ==} 811 + engines: {node: '>=20.19.0'} 812 + hasBin: true 813 + peerDependencies: 814 + '@arethetypeswrong/core': ^0.18.1 815 + '@vitejs/devtools': '*' 816 + publint: ^0.3.0 817 + typescript: ^5.0.0 818 + unplugin-lightningcss: ^0.4.0 819 + unplugin-unused: ^0.5.0 820 + peerDependenciesMeta: 821 + '@arethetypeswrong/core': 822 + optional: true 823 + '@vitejs/devtools': 824 + optional: true 825 + publint: 826 + optional: true 827 + typescript: 828 + optional: true 829 + unplugin-lightningcss: 830 + optional: true 831 + unplugin-unused: 832 + optional: true 833 + 834 + tslib@2.8.1: 835 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 836 + 837 + typescript@5.9.3: 838 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 839 + engines: {node: '>=14.17'} 840 + hasBin: true 841 + 842 + unconfig-core@7.4.2: 843 + resolution: {integrity: sha512-VgPCvLWugINbXvMQDf8Jh0mlbvNjNC6eSUziHsBCMpxR05OPrNrvDnyatdMjRgcHaaNsCqz+wjNXxNw1kRLHUg==} 844 + 845 + undici-types@7.16.0: 846 + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 847 + 848 + unrun@0.2.20: 849 + resolution: {integrity: sha512-YhobStTk93HYRN/4iBs3q3/sd7knvju1XrzwwrVVfRujyTG1K88hGONIxCoJN0PWBuO+BX7fFiHH0sVDfE3MWw==} 850 + engines: {node: '>=20.19.0'} 851 + hasBin: true 852 + peerDependencies: 853 + synckit: ^0.11.11 854 + peerDependenciesMeta: 855 + synckit: 856 + optional: true 857 + 858 + vite@7.3.0: 859 + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} 860 + engines: {node: ^20.19.0 || >=22.12.0} 861 + hasBin: true 862 + peerDependencies: 863 + '@types/node': ^20.19.0 || >=22.12.0 864 + jiti: '>=1.21.0' 865 + less: ^4.0.0 866 + lightningcss: ^1.21.0 867 + sass: ^1.70.0 868 + sass-embedded: ^1.70.0 869 + stylus: '>=0.54.8' 870 + sugarss: ^5.0.0 871 + terser: ^5.16.0 872 + tsx: ^4.8.1 873 + yaml: ^2.4.2 874 + peerDependenciesMeta: 875 + '@types/node': 876 + optional: true 877 + jiti: 878 + optional: true 879 + less: 880 + optional: true 881 + lightningcss: 882 + optional: true 883 + sass: 884 + optional: true 885 + sass-embedded: 886 + optional: true 887 + stylus: 888 + optional: true 889 + sugarss: 890 + optional: true 891 + terser: 892 + optional: true 893 + tsx: 894 + optional: true 895 + yaml: 896 + optional: true 897 + 898 + vitest@4.0.16: 899 + resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} 900 + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} 901 + hasBin: true 902 + peerDependencies: 903 + '@edge-runtime/vm': '*' 904 + '@opentelemetry/api': ^1.9.0 905 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 906 + '@vitest/browser-playwright': 4.0.16 907 + '@vitest/browser-preview': 4.0.16 908 + '@vitest/browser-webdriverio': 4.0.16 909 + '@vitest/ui': 4.0.16 910 + happy-dom: '*' 911 + jsdom: '*' 912 + peerDependenciesMeta: 913 + '@edge-runtime/vm': 914 + optional: true 915 + '@opentelemetry/api': 916 + optional: true 917 + '@types/node': 918 + optional: true 919 + '@vitest/browser-playwright': 920 + optional: true 921 + '@vitest/browser-preview': 922 + optional: true 923 + '@vitest/browser-webdriverio': 924 + optional: true 925 + '@vitest/ui': 926 + optional: true 927 + happy-dom: 928 + optional: true 929 + jsdom: 930 + optional: true 931 + 932 + why-is-node-running@2.3.0: 933 + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 934 + engines: {node: '>=8'} 935 + hasBin: true 936 + 937 + yaml@2.8.2: 938 + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} 939 + engines: {node: '>= 14.6'} 940 + hasBin: true 941 + 942 + snapshots: 943 + 944 + '@babel/generator@7.28.5': 945 + dependencies: 946 + '@babel/parser': 7.28.5 947 + '@babel/types': 7.28.5 948 + '@jridgewell/gen-mapping': 0.3.13 949 + '@jridgewell/trace-mapping': 0.3.31 950 + jsesc: 3.1.0 951 + 952 + '@babel/helper-string-parser@7.27.1': {} 953 + 954 + '@babel/helper-validator-identifier@7.28.5': {} 955 + 956 + '@babel/parser@7.28.5': 957 + dependencies: 958 + '@babel/types': 7.28.5 959 + 960 + '@babel/types@7.28.5': 961 + dependencies: 962 + '@babel/helper-string-parser': 7.27.1 963 + '@babel/helper-validator-identifier': 7.28.5 964 + 965 + '@dprint/darwin-arm64@0.50.2': 966 + optional: true 967 + 968 + '@dprint/darwin-x64@0.50.2': 969 + optional: true 970 + 971 + '@dprint/linux-arm64-glibc@0.50.2': 972 + optional: true 973 + 974 + '@dprint/linux-arm64-musl@0.50.2': 975 + optional: true 976 + 977 + '@dprint/linux-riscv64-glibc@0.50.2': 978 + optional: true 979 + 980 + '@dprint/linux-x64-glibc@0.50.2': 981 + optional: true 982 + 983 + '@dprint/linux-x64-musl@0.50.2': 984 + optional: true 985 + 986 + '@dprint/win32-arm64@0.50.2': 987 + optional: true 988 + 989 + '@dprint/win32-x64@0.50.2': 990 + optional: true 991 + 992 + '@emnapi/core@1.7.1': 993 + dependencies: 994 + '@emnapi/wasi-threads': 1.1.0 995 + tslib: 2.8.1 996 + optional: true 997 + 998 + '@emnapi/runtime@1.7.1': 999 + dependencies: 1000 + tslib: 2.8.1 1001 + optional: true 1002 + 1003 + '@emnapi/wasi-threads@1.1.0': 1004 + dependencies: 1005 + tslib: 2.8.1 1006 + optional: true 1007 + 1008 + '@esbuild/aix-ppc64@0.27.2': 1009 + optional: true 1010 + 1011 + '@esbuild/android-arm64@0.27.2': 1012 + optional: true 1013 + 1014 + '@esbuild/android-arm@0.27.2': 1015 + optional: true 1016 + 1017 + '@esbuild/android-x64@0.27.2': 1018 + optional: true 1019 + 1020 + '@esbuild/darwin-arm64@0.27.2': 1021 + optional: true 1022 + 1023 + '@esbuild/darwin-x64@0.27.2': 1024 + optional: true 1025 + 1026 + '@esbuild/freebsd-arm64@0.27.2': 1027 + optional: true 1028 + 1029 + '@esbuild/freebsd-x64@0.27.2': 1030 + optional: true 1031 + 1032 + '@esbuild/linux-arm64@0.27.2': 1033 + optional: true 1034 + 1035 + '@esbuild/linux-arm@0.27.2': 1036 + optional: true 1037 + 1038 + '@esbuild/linux-ia32@0.27.2': 1039 + optional: true 1040 + 1041 + '@esbuild/linux-loong64@0.27.2': 1042 + optional: true 1043 + 1044 + '@esbuild/linux-mips64el@0.27.2': 1045 + optional: true 1046 + 1047 + '@esbuild/linux-ppc64@0.27.2': 1048 + optional: true 1049 + 1050 + '@esbuild/linux-riscv64@0.27.2': 1051 + optional: true 1052 + 1053 + '@esbuild/linux-s390x@0.27.2': 1054 + optional: true 1055 + 1056 + '@esbuild/linux-x64@0.27.2': 1057 + optional: true 1058 + 1059 + '@esbuild/netbsd-arm64@0.27.2': 1060 + optional: true 1061 + 1062 + '@esbuild/netbsd-x64@0.27.2': 1063 + optional: true 1064 + 1065 + '@esbuild/openbsd-arm64@0.27.2': 1066 + optional: true 1067 + 1068 + '@esbuild/openbsd-x64@0.27.2': 1069 + optional: true 1070 + 1071 + '@esbuild/openharmony-arm64@0.27.2': 1072 + optional: true 1073 + 1074 + '@esbuild/sunos-x64@0.27.2': 1075 + optional: true 1076 + 1077 + '@esbuild/win32-arm64@0.27.2': 1078 + optional: true 1079 + 1080 + '@esbuild/win32-ia32@0.27.2': 1081 + optional: true 1082 + 1083 + '@esbuild/win32-x64@0.27.2': 1084 + optional: true 1085 + 1086 + '@jridgewell/gen-mapping@0.3.13': 1087 + dependencies: 1088 + '@jridgewell/sourcemap-codec': 1.5.5 1089 + '@jridgewell/trace-mapping': 0.3.31 1090 + 1091 + '@jridgewell/resolve-uri@3.1.2': {} 1092 + 1093 + '@jridgewell/sourcemap-codec@1.5.5': {} 1094 + 1095 + '@jridgewell/trace-mapping@0.3.31': 1096 + dependencies: 1097 + '@jridgewell/resolve-uri': 3.1.2 1098 + '@jridgewell/sourcemap-codec': 1.5.5 1099 + 1100 + '@napi-rs/wasm-runtime@1.1.0': 1101 + dependencies: 1102 + '@emnapi/core': 1.7.1 1103 + '@emnapi/runtime': 1.7.1 1104 + '@tybys/wasm-util': 0.10.1 1105 + optional: true 1106 + 1107 + '@oxc-project/types@0.103.0': {} 1108 + 1109 + '@quansync/fs@1.0.0': 1110 + dependencies: 1111 + quansync: 1.0.0 1112 + 1113 + '@rolldown/binding-android-arm64@1.0.0-beta.55': 1114 + optional: true 1115 + 1116 + '@rolldown/binding-darwin-arm64@1.0.0-beta.55': 1117 + optional: true 1118 + 1119 + '@rolldown/binding-darwin-x64@1.0.0-beta.55': 1120 + optional: true 1121 + 1122 + '@rolldown/binding-freebsd-x64@1.0.0-beta.55': 1123 + optional: true 1124 + 1125 + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.55': 1126 + optional: true 1127 + 1128 + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.55': 1129 + optional: true 1130 + 1131 + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.55': 1132 + optional: true 1133 + 1134 + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.55': 1135 + optional: true 1136 + 1137 + '@rolldown/binding-linux-x64-musl@1.0.0-beta.55': 1138 + optional: true 1139 + 1140 + '@rolldown/binding-openharmony-arm64@1.0.0-beta.55': 1141 + optional: true 1142 + 1143 + '@rolldown/binding-wasm32-wasi@1.0.0-beta.55': 1144 + dependencies: 1145 + '@napi-rs/wasm-runtime': 1.1.0 1146 + optional: true 1147 + 1148 + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.55': 1149 + optional: true 1150 + 1151 + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.55': 1152 + optional: true 1153 + 1154 + '@rolldown/pluginutils@1.0.0-beta.55': {} 1155 + 1156 + '@rollup/rollup-android-arm-eabi@4.54.0': 1157 + optional: true 1158 + 1159 + '@rollup/rollup-android-arm64@4.54.0': 1160 + optional: true 1161 + 1162 + '@rollup/rollup-darwin-arm64@4.54.0': 1163 + optional: true 1164 + 1165 + '@rollup/rollup-darwin-x64@4.54.0': 1166 + optional: true 1167 + 1168 + '@rollup/rollup-freebsd-arm64@4.54.0': 1169 + optional: true 1170 + 1171 + '@rollup/rollup-freebsd-x64@4.54.0': 1172 + optional: true 1173 + 1174 + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': 1175 + optional: true 1176 + 1177 + '@rollup/rollup-linux-arm-musleabihf@4.54.0': 1178 + optional: true 1179 + 1180 + '@rollup/rollup-linux-arm64-gnu@4.54.0': 1181 + optional: true 1182 + 1183 + '@rollup/rollup-linux-arm64-musl@4.54.0': 1184 + optional: true 1185 + 1186 + '@rollup/rollup-linux-loong64-gnu@4.54.0': 1187 + optional: true 1188 + 1189 + '@rollup/rollup-linux-ppc64-gnu@4.54.0': 1190 + optional: true 1191 + 1192 + '@rollup/rollup-linux-riscv64-gnu@4.54.0': 1193 + optional: true 1194 + 1195 + '@rollup/rollup-linux-riscv64-musl@4.54.0': 1196 + optional: true 1197 + 1198 + '@rollup/rollup-linux-s390x-gnu@4.54.0': 1199 + optional: true 1200 + 1201 + '@rollup/rollup-linux-x64-gnu@4.54.0': 1202 + optional: true 1203 + 1204 + '@rollup/rollup-linux-x64-musl@4.54.0': 1205 + optional: true 1206 + 1207 + '@rollup/rollup-openharmony-arm64@4.54.0': 1208 + optional: true 1209 + 1210 + '@rollup/rollup-win32-arm64-msvc@4.54.0': 1211 + optional: true 1212 + 1213 + '@rollup/rollup-win32-ia32-msvc@4.54.0': 1214 + optional: true 1215 + 1216 + '@rollup/rollup-win32-x64-gnu@4.54.0': 1217 + optional: true 1218 + 1219 + '@rollup/rollup-win32-x64-msvc@4.54.0': 1220 + optional: true 1221 + 1222 + '@standard-schema/spec@1.1.0': {} 1223 + 1224 + '@tybys/wasm-util@0.10.1': 1225 + dependencies: 1226 + tslib: 2.8.1 1227 + optional: true 1228 + 1229 + '@types/chai@5.2.3': 1230 + dependencies: 1231 + '@types/deep-eql': 4.0.2 1232 + assertion-error: 2.0.1 1233 + 1234 + '@types/deep-eql@4.0.2': {} 1235 + 1236 + '@types/estree@1.0.8': {} 1237 + 1238 + '@types/node@25.0.3': 1239 + dependencies: 1240 + undici-types: 7.16.0 1241 + 1242 + '@vitest/expect@4.0.16': 1243 + dependencies: 1244 + '@standard-schema/spec': 1.1.0 1245 + '@types/chai': 5.2.3 1246 + '@vitest/spy': 4.0.16 1247 + '@vitest/utils': 4.0.16 1248 + chai: 6.2.1 1249 + tinyrainbow: 3.0.3 1250 + 1251 + '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2))': 1252 + dependencies: 1253 + '@vitest/spy': 4.0.16 1254 + estree-walker: 3.0.3 1255 + magic-string: 0.30.21 1256 + optionalDependencies: 1257 + vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2) 1258 + 1259 + '@vitest/pretty-format@4.0.16': 1260 + dependencies: 1261 + tinyrainbow: 3.0.3 1262 + 1263 + '@vitest/runner@4.0.16': 1264 + dependencies: 1265 + '@vitest/utils': 4.0.16 1266 + pathe: 2.0.3 1267 + 1268 + '@vitest/snapshot@4.0.16': 1269 + dependencies: 1270 + '@vitest/pretty-format': 4.0.16 1271 + magic-string: 0.30.21 1272 + pathe: 2.0.3 1273 + 1274 + '@vitest/spy@4.0.16': {} 1275 + 1276 + '@vitest/utils@4.0.16': 1277 + dependencies: 1278 + '@vitest/pretty-format': 4.0.16 1279 + tinyrainbow: 3.0.3 1280 + 1281 + ansis@4.2.0: {} 1282 + 1283 + args-tokenizer@0.3.0: {} 1284 + 1285 + assertion-error@2.0.1: {} 1286 + 1287 + ast-kit@2.2.0: 1288 + dependencies: 1289 + '@babel/parser': 7.28.5 1290 + pathe: 2.0.3 1291 + 1292 + birpc@4.0.0: {} 1293 + 1294 + bumpp@10.3.2: 1295 + dependencies: 1296 + ansis: 4.2.0 1297 + args-tokenizer: 0.3.0 1298 + c12: 3.3.3 1299 + cac: 6.7.14 1300 + escalade: 3.2.0 1301 + jsonc-parser: 3.3.1 1302 + package-manager-detector: 1.6.0 1303 + semver: 7.7.3 1304 + tinyexec: 1.0.2 1305 + tinyglobby: 0.2.15 1306 + yaml: 2.8.2 1307 + transitivePeerDependencies: 1308 + - magicast 1309 + 1310 + c12@3.3.3: 1311 + dependencies: 1312 + chokidar: 5.0.0 1313 + confbox: 0.2.2 1314 + defu: 6.1.4 1315 + dotenv: 17.2.3 1316 + exsolve: 1.0.8 1317 + giget: 2.0.0 1318 + jiti: 2.6.1 1319 + ohash: 2.0.11 1320 + pathe: 2.0.3 1321 + perfect-debounce: 2.0.0 1322 + pkg-types: 2.3.0 1323 + rc9: 2.1.2 1324 + 1325 + cac@6.7.14: {} 1326 + 1327 + chai@6.2.1: {} 1328 + 1329 + chokidar@5.0.0: 1330 + dependencies: 1331 + readdirp: 5.0.0 1332 + 1333 + citty@0.1.6: 1334 + dependencies: 1335 + consola: 3.4.2 1336 + 1337 + confbox@0.2.2: {} 1338 + 1339 + consola@3.4.2: {} 1340 + 1341 + defu@6.1.4: {} 1342 + 1343 + destr@2.0.5: {} 1344 + 1345 + dotenv@17.2.3: {} 1346 + 1347 + dprint@0.50.2: 1348 + optionalDependencies: 1349 + '@dprint/darwin-arm64': 0.50.2 1350 + '@dprint/darwin-x64': 0.50.2 1351 + '@dprint/linux-arm64-glibc': 0.50.2 1352 + '@dprint/linux-arm64-musl': 0.50.2 1353 + '@dprint/linux-riscv64-glibc': 0.50.2 1354 + '@dprint/linux-x64-glibc': 0.50.2 1355 + '@dprint/linux-x64-musl': 0.50.2 1356 + '@dprint/win32-arm64': 0.50.2 1357 + '@dprint/win32-x64': 0.50.2 1358 + 1359 + dts-resolver@2.1.3: {} 1360 + 1361 + empathic@2.0.0: {} 1362 + 1363 + es-module-lexer@1.7.0: {} 1364 + 1365 + esbuild@0.27.2: 1366 + optionalDependencies: 1367 + '@esbuild/aix-ppc64': 0.27.2 1368 + '@esbuild/android-arm': 0.27.2 1369 + '@esbuild/android-arm64': 0.27.2 1370 + '@esbuild/android-x64': 0.27.2 1371 + '@esbuild/darwin-arm64': 0.27.2 1372 + '@esbuild/darwin-x64': 0.27.2 1373 + '@esbuild/freebsd-arm64': 0.27.2 1374 + '@esbuild/freebsd-x64': 0.27.2 1375 + '@esbuild/linux-arm': 0.27.2 1376 + '@esbuild/linux-arm64': 0.27.2 1377 + '@esbuild/linux-ia32': 0.27.2 1378 + '@esbuild/linux-loong64': 0.27.2 1379 + '@esbuild/linux-mips64el': 0.27.2 1380 + '@esbuild/linux-ppc64': 0.27.2 1381 + '@esbuild/linux-riscv64': 0.27.2 1382 + '@esbuild/linux-s390x': 0.27.2 1383 + '@esbuild/linux-x64': 0.27.2 1384 + '@esbuild/netbsd-arm64': 0.27.2 1385 + '@esbuild/netbsd-x64': 0.27.2 1386 + '@esbuild/openbsd-arm64': 0.27.2 1387 + '@esbuild/openbsd-x64': 0.27.2 1388 + '@esbuild/openharmony-arm64': 0.27.2 1389 + '@esbuild/sunos-x64': 0.27.2 1390 + '@esbuild/win32-arm64': 0.27.2 1391 + '@esbuild/win32-ia32': 0.27.2 1392 + '@esbuild/win32-x64': 0.27.2 1393 + 1394 + escalade@3.2.0: {} 1395 + 1396 + estree-walker@3.0.3: 1397 + dependencies: 1398 + '@types/estree': 1.0.8 1399 + 1400 + expect-type@1.3.0: {} 1401 + 1402 + exsolve@1.0.8: {} 1403 + 1404 + fdir@6.5.0(picomatch@4.0.3): 1405 + optionalDependencies: 1406 + picomatch: 4.0.3 1407 + 1408 + fsevents@2.3.3: 1409 + optional: true 1410 + 1411 + get-tsconfig@4.13.0: 1412 + dependencies: 1413 + resolve-pkg-maps: 1.0.0 1414 + 1415 + giget@2.0.0: 1416 + dependencies: 1417 + citty: 0.1.6 1418 + consola: 3.4.2 1419 + defu: 6.1.4 1420 + node-fetch-native: 1.6.7 1421 + nypm: 0.6.2 1422 + pathe: 2.0.3 1423 + 1424 + hookable@5.5.3: {} 1425 + 1426 + import-without-cache@0.2.4: {} 1427 + 1428 + jiti@2.6.1: {} 1429 + 1430 + jsesc@3.1.0: {} 1431 + 1432 + jsonc-parser@3.3.1: {} 1433 + 1434 + magic-string@0.30.21: 1435 + dependencies: 1436 + '@jridgewell/sourcemap-codec': 1.5.5 1437 + 1438 + nanoid@3.3.11: {} 1439 + 1440 + node-fetch-native@1.6.7: {} 1441 + 1442 + nypm@0.6.2: 1443 + dependencies: 1444 + citty: 0.1.6 1445 + consola: 3.4.2 1446 + pathe: 2.0.3 1447 + pkg-types: 2.3.0 1448 + tinyexec: 1.0.2 1449 + 1450 + obug@2.1.1: {} 1451 + 1452 + ohash@2.0.11: {} 1453 + 1454 + package-manager-detector@1.6.0: {} 1455 + 1456 + pathe@2.0.3: {} 1457 + 1458 + perfect-debounce@2.0.0: {} 1459 + 1460 + picocolors@1.1.1: {} 1461 + 1462 + picomatch@4.0.3: {} 1463 + 1464 + pkg-types@2.3.0: 1465 + dependencies: 1466 + confbox: 0.2.2 1467 + exsolve: 1.0.8 1468 + pathe: 2.0.3 1469 + 1470 + postcss@8.5.6: 1471 + dependencies: 1472 + nanoid: 3.3.11 1473 + picocolors: 1.1.1 1474 + source-map-js: 1.2.1 1475 + 1476 + quansync@1.0.0: {} 1477 + 1478 + rc9@2.1.2: 1479 + dependencies: 1480 + defu: 6.1.4 1481 + destr: 2.0.5 1482 + 1483 + readdirp@5.0.0: {} 1484 + 1485 + resolve-pkg-maps@1.0.0: {} 1486 + 1487 + rolldown-plugin-dts@0.19.1(rolldown@1.0.0-beta.55)(typescript@5.9.3): 1488 + dependencies: 1489 + '@babel/generator': 7.28.5 1490 + '@babel/parser': 7.28.5 1491 + '@babel/types': 7.28.5 1492 + ast-kit: 2.2.0 1493 + birpc: 4.0.0 1494 + dts-resolver: 2.1.3 1495 + get-tsconfig: 4.13.0 1496 + obug: 2.1.1 1497 + rolldown: 1.0.0-beta.55 1498 + optionalDependencies: 1499 + typescript: 5.9.3 1500 + transitivePeerDependencies: 1501 + - oxc-resolver 1502 + 1503 + rolldown@1.0.0-beta.55: 1504 + dependencies: 1505 + '@oxc-project/types': 0.103.0 1506 + '@rolldown/pluginutils': 1.0.0-beta.55 1507 + optionalDependencies: 1508 + '@rolldown/binding-android-arm64': 1.0.0-beta.55 1509 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.55 1510 + '@rolldown/binding-darwin-x64': 1.0.0-beta.55 1511 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.55 1512 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.55 1513 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.55 1514 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.55 1515 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.55 1516 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.55 1517 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.55 1518 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.55 1519 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.55 1520 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.55 1521 + 1522 + rollup@4.54.0: 1523 + dependencies: 1524 + '@types/estree': 1.0.8 1525 + optionalDependencies: 1526 + '@rollup/rollup-android-arm-eabi': 4.54.0 1527 + '@rollup/rollup-android-arm64': 4.54.0 1528 + '@rollup/rollup-darwin-arm64': 4.54.0 1529 + '@rollup/rollup-darwin-x64': 4.54.0 1530 + '@rollup/rollup-freebsd-arm64': 4.54.0 1531 + '@rollup/rollup-freebsd-x64': 4.54.0 1532 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 1533 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 1534 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 1535 + '@rollup/rollup-linux-arm64-musl': 4.54.0 1536 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 1537 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 1538 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 1539 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 1540 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 1541 + '@rollup/rollup-linux-x64-gnu': 4.54.0 1542 + '@rollup/rollup-linux-x64-musl': 4.54.0 1543 + '@rollup/rollup-openharmony-arm64': 4.54.0 1544 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 1545 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 1546 + '@rollup/rollup-win32-x64-gnu': 4.54.0 1547 + '@rollup/rollup-win32-x64-msvc': 4.54.0 1548 + fsevents: 2.3.3 1549 + 1550 + semver@7.7.3: {} 1551 + 1552 + siginfo@2.0.0: {} 1553 + 1554 + source-map-js@1.2.1: {} 1555 + 1556 + stackback@0.0.2: {} 1557 + 1558 + std-env@3.10.0: {} 1559 + 1560 + tinybench@2.9.0: {} 1561 + 1562 + tinyexec@1.0.2: {} 1563 + 1564 + tinyglobby@0.2.15: 1565 + dependencies: 1566 + fdir: 6.5.0(picomatch@4.0.3) 1567 + picomatch: 4.0.3 1568 + 1569 + tinyrainbow@3.0.3: {} 1570 + 1571 + tree-kill@1.2.2: {} 1572 + 1573 + tsdown@0.18.1(typescript@5.9.3): 1574 + dependencies: 1575 + ansis: 4.2.0 1576 + cac: 6.7.14 1577 + defu: 6.1.4 1578 + empathic: 2.0.0 1579 + hookable: 5.5.3 1580 + import-without-cache: 0.2.4 1581 + obug: 2.1.1 1582 + picomatch: 4.0.3 1583 + rolldown: 1.0.0-beta.55 1584 + rolldown-plugin-dts: 0.19.1(rolldown@1.0.0-beta.55)(typescript@5.9.3) 1585 + semver: 7.7.3 1586 + tinyexec: 1.0.2 1587 + tinyglobby: 0.2.15 1588 + tree-kill: 1.2.2 1589 + unconfig-core: 7.4.2 1590 + unrun: 0.2.20 1591 + optionalDependencies: 1592 + typescript: 5.9.3 1593 + transitivePeerDependencies: 1594 + - '@ts-macro/tsc' 1595 + - '@typescript/native-preview' 1596 + - oxc-resolver 1597 + - synckit 1598 + - vue-tsc 1599 + 1600 + tslib@2.8.1: 1601 + optional: true 1602 + 1603 + typescript@5.9.3: {} 1604 + 1605 + unconfig-core@7.4.2: 1606 + dependencies: 1607 + '@quansync/fs': 1.0.0 1608 + quansync: 1.0.0 1609 + 1610 + undici-types@7.16.0: {} 1611 + 1612 + unrun@0.2.20: 1613 + dependencies: 1614 + rolldown: 1.0.0-beta.55 1615 + 1616 + vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2): 1617 + dependencies: 1618 + esbuild: 0.27.2 1619 + fdir: 6.5.0(picomatch@4.0.3) 1620 + picomatch: 4.0.3 1621 + postcss: 8.5.6 1622 + rollup: 4.54.0 1623 + tinyglobby: 0.2.15 1624 + optionalDependencies: 1625 + '@types/node': 25.0.3 1626 + fsevents: 2.3.3 1627 + jiti: 2.6.1 1628 + yaml: 2.8.2 1629 + 1630 + vitest@4.0.16(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2): 1631 + dependencies: 1632 + '@vitest/expect': 4.0.16 1633 + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2)) 1634 + '@vitest/pretty-format': 4.0.16 1635 + '@vitest/runner': 4.0.16 1636 + '@vitest/snapshot': 4.0.16 1637 + '@vitest/spy': 4.0.16 1638 + '@vitest/utils': 4.0.16 1639 + es-module-lexer: 1.7.0 1640 + expect-type: 1.3.0 1641 + magic-string: 0.30.21 1642 + obug: 2.1.1 1643 + pathe: 2.0.3 1644 + picomatch: 4.0.3 1645 + std-env: 3.10.0 1646 + tinybench: 2.9.0 1647 + tinyexec: 1.0.2 1648 + tinyglobby: 0.2.15 1649 + tinyrainbow: 3.0.3 1650 + vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(yaml@2.8.2) 1651 + why-is-node-running: 2.3.0 1652 + optionalDependencies: 1653 + '@types/node': 25.0.3 1654 + transitivePeerDependencies: 1655 + - jiti 1656 + - less 1657 + - lightningcss 1658 + - msw 1659 + - sass 1660 + - sass-embedded 1661 + - stylus 1662 + - sugarss 1663 + - terser 1664 + - tsx 1665 + - yaml 1666 + 1667 + why-is-node-running@2.3.0: 1668 + dependencies: 1669 + siginfo: 2.0.0 1670 + stackback: 0.0.2 1671 + 1672 + yaml@2.8.2: {}
+5
pnpm-workspace.yaml
···
··· 1 + packages: 2 + - packages/* 3 + 4 + onlyBuiltDependencies: 5 + - esbuild