[READ-ONLY] Mirror of https://github.com/bombshell-dev/tty. Platform independent 2D layout engine for terminal applications based on Clay
5

Configure Feed

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

⚙️ vitest -> tinybench

Nate Moore (May 24, 2026, 2:26 PM EDT) 7badc6ce 64170a50

+294 -845
+34 -44
bench/input.bench.ts
··· 1 - import { beforeAll, bench, describe } from "vitest"; 2 - import { createInput, type Input } from "../input.ts"; 1 + import { Bench } from "tinybench"; 2 + import { withCodSpeed } from "@codspeed/tinybench-plugin"; 3 + import { createInput } from "../input.ts"; 3 4 4 5 function bytes(...values: number[]): Uint8Array { 5 6 return new Uint8Array(values); ··· 9 10 return new TextEncoder().encode(s); 10 11 } 11 12 12 - describe("input parsing", () => { 13 - let input: Input; 13 + let input = await createInput({ escLatency: 25 }); 14 14 15 - beforeAll(async () => { 16 - input = await createInput({ escLatency: 25 }); 17 - }); 15 + let longBurst = new Uint8Array(200); 16 + for (let i = 0; i < 200; i++) { 17 + longBurst[i] = 0x61 + (i % 26); 18 + } 18 19 19 - bench("printable ASCII (single char)", () => { 20 + let bench = withCodSpeed(new Bench()); 21 + 22 + bench 23 + .add("printable ASCII (single char)", () => { 20 24 input.scan(bytes(0x61)); 21 - }); 22 - 23 - bench("printable ASCII (short string)", () => { 25 + }) 26 + .add("printable ASCII (short string)", () => { 24 27 input.scan(str("hello world")); 25 - }); 26 - 27 - bench("arrow key (CSI sequence)", () => { 28 + }) 29 + .add("arrow key (CSI sequence)", () => { 28 30 input.scan(bytes(0x1b, 0x5b, 0x41)); 29 - }); 30 - 31 - bench("modifier combo (Ctrl+Shift+Arrow)", () => { 31 + }) 32 + .add("modifier combo (Ctrl+Shift+Arrow)", () => { 32 33 input.scan(bytes(0x1b, 0x5b, 0x31, 0x3b, 0x38, 0x41)); 33 - }); 34 - 35 - bench("SGR mouse press", () => { 34 + }) 35 + .add("SGR mouse press", () => { 36 36 input.scan(str("\x1b[<0;35;12M")); 37 - }); 38 - 39 - bench("multi-event burst (arrows + text)", () => { 40 - input.scan( 41 - bytes(0x1b, 0x5b, 0x41, 0x1b, 0x5b, 0x42, 0x68, 0x69), 42 - ); 43 - }); 44 - 45 - bench("UTF-8 3-byte character", () => { 37 + }) 38 + .add("multi-event burst (arrows + text)", () => { 39 + input.scan(bytes(0x1b, 0x5b, 0x41, 0x1b, 0x5b, 0x42, 0x68, 0x69)); 40 + }) 41 + .add("UTF-8 3-byte character", () => { 46 42 input.scan(bytes(0xe4, 0xb8, 0xad)); 47 - }); 48 - 49 - bench("UTF-8 4-byte emoji", () => { 43 + }) 44 + .add("UTF-8 4-byte emoji", () => { 50 45 input.scan(bytes(0xf0, 0x9f, 0x8e, 0x89)); 51 - }); 52 - 53 - bench("Kitty protocol (CSI u with modifiers)", () => { 46 + }) 47 + .add("Kitty protocol (CSI u with modifiers)", () => { 54 48 input.scan(str("\x1b[97;3u")); 49 + }) 50 + .add("long input burst (200 bytes)", () => { 51 + input.scan(longBurst); 55 52 }); 56 53 57 - let longBurst = new Uint8Array(200); 58 - for (let i = 0; i < 200; i++) { 59 - longBurst[i] = 0x61 + (i % 26); 60 - } 61 - 62 - bench("long input burst (200 bytes)", () => { 63 - input.scan(longBurst); 64 - }); 65 - }); 54 + await bench.run(); 55 + console.table(bench.table());
+3
bench/mod.ts
··· 1 + import "./input.bench.ts"; 2 + import "./render.bench.ts"; 3 + import "./ops.bench.ts";
+102 -99
bench/ops.bench.ts
··· 1 - import { bench, describe } from "vitest"; 1 + import { Bench } from "tinybench"; 2 + import { withCodSpeed } from "@codspeed/tinybench-plugin"; 2 3 import { close, fixed, grow, open, pack, rgba, text } from "../ops.ts"; 3 4 import type { Op } from "../ops.ts"; 4 5 ··· 6 7 return new ArrayBuffer(size); 7 8 } 8 9 9 - describe("pack", () => { 10 - let simpleOps: Op[] = [ 11 - open("root", { 12 - layout: { width: grow(), height: grow(), direction: "ttb" }, 13 - }), 14 - text("Hello, World!"), 15 - close(), 16 - ]; 10 + let simpleOps: Op[] = [ 11 + open("root", { 12 + layout: { width: grow(), height: grow(), direction: "ttb" }, 13 + }), 14 + text("Hello, World!"), 15 + close(), 16 + ]; 17 17 18 - bench("simple tree (root + text)", () => { 19 - let buf = makeBuf(4096); 20 - pack(simpleOps, buf, 0); 21 - }); 18 + let complexOps: Op[] = [ 19 + open("root", { 20 + layout: { width: grow(), height: grow(), direction: "ttb" }, 21 + }), 22 + open("header", { 23 + layout: { 24 + width: grow(), 25 + height: fixed(3), 26 + padding: { left: 1, right: 1 }, 27 + direction: "ltr", 28 + }, 29 + bg: rgba(30, 30, 40), 30 + border: { 31 + color: rgba(100, 100, 120), 32 + bottom: 1, 33 + }, 34 + }), 35 + text("Title", { color: rgba(255, 255, 255), fontSize: 1 }), 36 + close(), 37 + open("body", { 38 + layout: { 39 + width: grow(), 40 + height: grow(), 41 + direction: "ltr", 42 + gap: 1, 43 + }, 44 + }), 45 + open("sidebar", { 46 + layout: { 47 + width: fixed(20), 48 + height: grow(), 49 + direction: "ttb", 50 + padding: { left: 1, right: 1, top: 1 }, 51 + }, 52 + bg: rgba(25, 25, 35), 53 + border: { 54 + color: rgba(60, 60, 80), 55 + right: 1, 56 + }, 57 + }), 58 + text("Menu Item 1"), 59 + text("Menu Item 2"), 60 + text("Menu Item 3"), 61 + close(), 62 + open("main", { 63 + layout: { 64 + width: grow(), 65 + height: grow(), 66 + direction: "ttb", 67 + padding: { left: 2, top: 1 }, 68 + }, 69 + }), 70 + text("Main content area with longer text to exercise the encoder"), 71 + close(), 72 + close(), 73 + open("footer", { 74 + layout: { 75 + width: grow(), 76 + height: fixed(1), 77 + padding: { left: 1 }, 78 + direction: "ltr", 79 + }, 80 + bg: rgba(30, 30, 40), 81 + }), 82 + text("Status: OK"), 83 + close(), 84 + close(), 85 + ]; 22 86 23 - let complexOps: Op[] = [ 24 - open("root", { 25 - layout: { width: grow(), height: grow(), direction: "ttb" }, 26 - }), 27 - open("header", { 28 - layout: { 29 - width: grow(), 30 - height: fixed(3), 31 - padding: { left: 1, right: 1 }, 32 - direction: "ltr", 33 - }, 34 - bg: rgba(30, 30, 40), 35 - border: { 36 - color: rgba(100, 100, 120), 37 - bottom: 1, 38 - }, 39 - }), 40 - text("Title", { color: rgba(255, 255, 255), fontSize: 1 }), 41 - close(), 42 - open("body", { 43 - layout: { 44 - width: grow(), 45 - height: grow(), 46 - direction: "ltr", 47 - gap: 1, 48 - }, 49 - }), 50 - open("sidebar", { 51 - layout: { 52 - width: fixed(20), 53 - height: grow(), 54 - direction: "ttb", 55 - padding: { left: 1, right: 1, top: 1 }, 56 - }, 57 - bg: rgba(25, 25, 35), 58 - border: { 59 - color: rgba(60, 60, 80), 60 - right: 1, 61 - }, 62 - }), 63 - text("Menu Item 1"), 64 - text("Menu Item 2"), 65 - text("Menu Item 3"), 66 - close(), 67 - open("main", { 68 - layout: { 69 - width: grow(), 70 - height: grow(), 71 - direction: "ttb", 72 - padding: { left: 2, top: 1 }, 73 - }, 74 - }), 75 - text("Main content area with longer text to exercise the encoder"), 76 - close(), 77 - close(), 78 - open("footer", { 87 + let listOps: Op[] = [ 88 + open("root", { 89 + layout: { width: grow(), height: grow(), direction: "ttb" }, 90 + }), 91 + ...Array.from({ length: 50 }, (_, i) => [ 92 + open(`item-${i}`, { 79 93 layout: { 80 94 width: grow(), 81 95 height: fixed(1), 82 - padding: { left: 1 }, 96 + padding: { left: 2 }, 83 97 direction: "ltr", 84 98 }, 85 - bg: rgba(30, 30, 40), 99 + bg: i % 2 === 0 ? rgba(30, 30, 40) : rgba(35, 35, 45), 86 100 }), 87 - text("Status: OK"), 101 + text(`List item ${i}: some description text`), 88 102 close(), 89 - close(), 90 - ]; 103 + ]).flat(), 104 + close(), 105 + ]; 106 + 107 + let bench = withCodSpeed(new Bench()); 91 108 92 - bench("complex layout (header + sidebar + main + footer)", () => { 109 + bench 110 + .add("simple tree (root + text)", () => { 111 + let buf = makeBuf(4096); 112 + pack(simpleOps, buf, 0); 113 + }) 114 + .add("complex layout (header + sidebar + main + footer)", () => { 93 115 let buf = makeBuf(8192); 94 116 pack(complexOps, buf, 0); 95 - }); 96 - 97 - let listOps: Op[] = [ 98 - open("root", { 99 - layout: { width: grow(), height: grow(), direction: "ttb" }, 100 - }), 101 - ...Array.from({ length: 50 }, (_, i) => [ 102 - open(`item-${i}`, { 103 - layout: { 104 - width: grow(), 105 - height: fixed(1), 106 - padding: { left: 2 }, 107 - direction: "ltr", 108 - }, 109 - bg: i % 2 === 0 ? rgba(30, 30, 40) : rgba(35, 35, 45), 110 - }), 111 - text(`List item ${i}: some description text`), 112 - close(), 113 - ]).flat(), 114 - close(), 115 - ]; 116 - 117 - bench("large list (50 items)", () => { 117 + }) 118 + .add("large list (50 items)", () => { 118 119 let buf = makeBuf(32768); 119 120 pack(listOps, buf, 0); 120 121 }); 121 - }); 122 + 123 + await bench.run(); 124 + console.table(bench.table());
+139 -151
bench/render.bench.ts
··· 1 - import { beforeAll, bench, describe } from "vitest"; 2 - import { createTerm, type Term } from "../term.ts"; 1 + import { Bench } from "tinybench"; 2 + import { withCodSpeed } from "@codspeed/tinybench-plugin"; 3 + import { createTerm } from "../term.ts"; 3 4 import { close, fixed, grow, open, rgba, text } from "../ops.ts"; 4 5 import type { Op } from "../ops.ts"; 5 6 6 - describe("render", () => { 7 - let term: Term; 7 + let term = await createTerm({ width: 80, height: 24 }); 8 + let termPtr = await createTerm({ width: 80, height: 24 }); 8 9 9 - beforeAll(async () => { 10 - term = await createTerm({ width: 80, height: 24 }); 11 - }); 10 + let helloOps: Op[] = [ 11 + open("root", { 12 + layout: { width: grow(), height: grow(), direction: "ttb" }, 13 + }), 14 + text("Hello, World!"), 15 + close(), 16 + ]; 12 17 13 - let helloOps: Op[] = [ 14 - open("root", { 15 - layout: { width: grow(), height: grow(), direction: "ttb" }, 16 - }), 17 - text("Hello, World!"), 18 - close(), 19 - ]; 18 + let borderedOps: Op[] = [ 19 + open("root", { 20 + layout: { width: grow(), height: grow(), direction: "ttb" }, 21 + }), 22 + open("box", { 23 + layout: { 24 + width: grow(), 25 + height: grow(), 26 + padding: { left: 1, right: 1, top: 1, bottom: 1 }, 27 + direction: "ttb", 28 + }, 29 + border: { 30 + color: rgba(0, 255, 0), 31 + left: 1, 32 + right: 1, 33 + top: 1, 34 + bottom: 1, 35 + }, 36 + cornerRadius: { tl: 1, tr: 1, bl: 1, br: 1 }, 37 + }), 38 + text("Bordered content"), 39 + close(), 40 + close(), 41 + ]; 20 42 21 - bench("simple text", () => { 22 - term.render(helloOps); 23 - }); 24 - 25 - let borderedOps: Op[] = [ 26 - open("root", { 27 - layout: { width: grow(), height: grow(), direction: "ttb" }, 28 - }), 29 - open("box", { 43 + let dashboardOps: Op[] = [ 44 + open("root", { 45 + layout: { width: grow(), height: grow(), direction: "ttb" }, 46 + }), 47 + open("header", { 48 + layout: { 49 + width: grow(), 50 + height: fixed(3), 51 + padding: { left: 1 }, 52 + direction: "ltr", 53 + }, 54 + bg: rgba(30, 30, 40), 55 + border: { color: rgba(80, 80, 100), bottom: 1 }, 56 + }), 57 + text("Dashboard", { color: rgba(255, 255, 255) }), 58 + close(), 59 + open("body", { 60 + layout: { width: grow(), height: grow(), direction: "ltr" }, 61 + }), 62 + open("sidebar", { 63 + layout: { 64 + width: fixed(20), 65 + height: grow(), 66 + direction: "ttb", 67 + padding: { left: 1, top: 1 }, 68 + }, 69 + bg: rgba(25, 25, 35), 70 + border: { color: rgba(60, 60, 80), right: 1 }, 71 + }), 72 + text("Nav 1"), 73 + text("Nav 2"), 74 + text("Nav 3"), 75 + text("Nav 4"), 76 + close(), 77 + open("main", { 78 + layout: { 79 + width: grow(), 80 + height: grow(), 81 + direction: "ttb", 82 + padding: { left: 2, top: 1 }, 83 + }, 84 + }), 85 + ...Array.from({ length: 10 }, (_, i) => [ 86 + open(`row-${i}`, { 30 87 layout: { 31 88 width: grow(), 32 - height: grow(), 33 - padding: { left: 1, right: 1, top: 1, bottom: 1 }, 34 - direction: "ttb", 35 - }, 36 - border: { 37 - color: rgba(0, 255, 0), 38 - left: 1, 39 - right: 1, 40 - top: 1, 41 - bottom: 1, 89 + height: fixed(1), 90 + direction: "ltr", 42 91 }, 43 - cornerRadius: { tl: 1, tr: 1, bl: 1, br: 1 }, 92 + bg: i % 2 === 0 ? rgba(35, 35, 45) : undefined, 44 93 }), 45 - text("Bordered content"), 94 + text(`Row ${i}: data value ${i * 42}`), 46 95 close(), 47 - close(), 48 - ]; 96 + ]).flat(), 97 + close(), 98 + close(), 99 + open("footer", { 100 + layout: { 101 + width: grow(), 102 + height: fixed(1), 103 + padding: { left: 1 }, 104 + }, 105 + bg: rgba(30, 30, 40), 106 + }), 107 + text("Ready"), 108 + close(), 109 + close(), 110 + ]; 49 111 50 - bench("bordered box with corner radius", () => { 51 - term.render(borderedOps); 52 - }); 112 + let uiOps: Op[] = [ 113 + open("root", { 114 + layout: { width: grow(), height: grow(), direction: "ttb" }, 115 + }), 116 + open("button", { 117 + layout: { 118 + width: fixed(20), 119 + height: fixed(3), 120 + padding: { left: 1, right: 1 }, 121 + }, 122 + bg: rgba(50, 50, 200), 123 + border: { 124 + color: rgba(100, 100, 255), 125 + left: 1, 126 + right: 1, 127 + top: 1, 128 + bottom: 1, 129 + }, 130 + cornerRadius: { tl: 1, tr: 1, bl: 1, br: 1 }, 131 + }), 132 + text("Click me"), 133 + close(), 134 + close(), 135 + ]; 53 136 54 - let dashboardOps: Op[] = [ 55 - open("root", { 56 - layout: { width: grow(), height: grow(), direction: "ttb" }, 57 - }), 58 - open("header", { 59 - layout: { 60 - width: grow(), 61 - height: fixed(3), 62 - padding: { left: 1 }, 63 - direction: "ltr", 64 - }, 65 - bg: rgba(30, 30, 40), 66 - border: { color: rgba(80, 80, 100), bottom: 1 }, 67 - }), 68 - text("Dashboard", { color: rgba(255, 255, 255) }), 69 - close(), 70 - open("body", { 71 - layout: { width: grow(), height: grow(), direction: "ltr" }, 72 - }), 73 - open("sidebar", { 74 - layout: { 75 - width: fixed(20), 76 - height: grow(), 77 - direction: "ttb", 78 - padding: { left: 1, top: 1 }, 79 - }, 80 - bg: rgba(25, 25, 35), 81 - border: { color: rgba(60, 60, 80), right: 1 }, 82 - }), 83 - text("Nav 1"), 84 - text("Nav 2"), 85 - text("Nav 3"), 86 - text("Nav 4"), 87 - close(), 88 - open("main", { 89 - layout: { 90 - width: grow(), 91 - height: grow(), 92 - direction: "ttb", 93 - padding: { left: 2, top: 1 }, 94 - }, 95 - }), 96 - ...Array.from({ length: 10 }, (_, i) => [ 97 - open(`row-${i}`, { 98 - layout: { 99 - width: grow(), 100 - height: fixed(1), 101 - direction: "ltr", 102 - }, 103 - bg: i % 2 === 0 ? rgba(35, 35, 45) : undefined, 104 - }), 105 - text(`Row ${i}: data value ${i * 42}`), 106 - close(), 107 - ]).flat(), 108 - close(), 109 - close(), 110 - open("footer", { 111 - layout: { 112 - width: grow(), 113 - height: fixed(1), 114 - padding: { left: 1 }, 115 - }, 116 - bg: rgba(30, 30, 40), 117 - }), 118 - text("Ready"), 119 - close(), 120 - close(), 121 - ]; 137 + let bench = withCodSpeed(new Bench()); 122 138 123 - bench("dashboard layout", () => { 139 + bench 140 + .add("simple text", () => { 141 + term.render(helloOps); 142 + }) 143 + .add("bordered box with corner radius", () => { 144 + term.render(borderedOps); 145 + }) 146 + .add("dashboard layout", () => { 124 147 term.render(dashboardOps); 125 - }); 126 - 127 - bench("diff render (second frame)", () => { 128 - // First render populates the front buffer 148 + }) 149 + .add("diff render (second frame)", () => { 129 150 term.render(dashboardOps); 130 - // Second render exercises the diff path 131 151 term.render(dashboardOps); 132 - }); 133 - }); 134 - 135 - describe("render with pointer", () => { 136 - let term: Term; 137 - 138 - beforeAll(async () => { 139 - term = await createTerm({ width: 80, height: 24 }); 152 + }) 153 + .add("render with pointer hit testing", () => { 154 + termPtr.render(uiOps, { pointer: { x: 10, y: 1, down: false } }); 140 155 }); 141 156 142 - let uiOps: Op[] = [ 143 - open("root", { 144 - layout: { width: grow(), height: grow(), direction: "ttb" }, 145 - }), 146 - open("button", { 147 - layout: { 148 - width: fixed(20), 149 - height: fixed(3), 150 - padding: { left: 1, right: 1 }, 151 - }, 152 - bg: rgba(50, 50, 200), 153 - border: { 154 - color: rgba(100, 100, 255), 155 - left: 1, 156 - right: 1, 157 - top: 1, 158 - bottom: 1, 159 - }, 160 - cornerRadius: { tl: 1, tr: 1, bl: 1, br: 1 }, 161 - }), 162 - text("Click me"), 163 - close(), 164 - close(), 165 - ]; 166 - 167 - bench("render with pointer hit testing", () => { 168 - term.render(uiOps, { pointer: { x: 10, y: 1, down: false } }); 169 - }); 170 - }); 157 + await bench.run(); 158 + console.table(bench.table());
+3 -3
deno.json
··· 8 8 "build:npm": "deno run -A tasks/build-npm.ts", 9 9 "build:jsr": "deno run -A tasks/build-jsr.ts", 10 10 "demo": "deno run demo/keyboard.ts", 11 - "bench": "deno run -A npm:vitest bench --run" 11 + "bench": "deno run -A bench/mod.ts" 12 12 }, 13 13 "imports": { 14 14 "@std/testing": "jsr:@std/testing@1", ··· 17 17 "dnt": "jsr:@deno/dnt@0.42.3", 18 18 "effection": "npm:effection@^4.0.2", 19 19 "@std/encoding": "jsr:@std/encoding@1", 20 - "@codspeed/vitest-plugin": "npm:@codspeed/vitest-plugin@^5.4.0", 21 - "vitest": "npm:vitest@^4.1.7" 20 + "@codspeed/tinybench-plugin": "npm:@codspeed/tinybench-plugin@^5.4.0", 21 + "tinybench": "npm:tinybench@^6.0.2" 22 22 }, 23 23 "exports": { 24 24 ".": "./mod.ts",
+13 -548
deno.lock
··· 20 20 "jsr:@std/testing@1": "1.0.17", 21 21 "jsr:@ts-morph/bootstrap@0.27": "0.27.0", 22 22 "jsr:@ts-morph/common@0.27": "0.27.0", 23 - "npm:@codspeed/vitest-plugin@^5.4.0": "5.4.0_tinybench@2.9.0_vite@7.3.3_vitest@4.1.7__vite@7.3.3", 23 + "npm:@codspeed/tinybench-plugin@^5.4.0": "5.4.0_tinybench@6.0.2", 24 24 "npm:@sinclair/typebox@*": "0.34.48", 25 25 "npm:@sinclair/typebox@0.34": "0.34.48", 26 26 "npm:effection@^4.0.2": "4.0.2", 27 - "npm:valrs@*": "0.1.0", 28 - "npm:vitest@^4.1.7": "4.1.7_vite@7.3.3" 27 + "npm:tinybench@^6.0.2": "6.0.2", 28 + "npm:valrs@*": "0.1.0" 29 29 }, 30 30 "jsr": { 31 31 "@david/code-block-writer@13.0.3": { ··· 120 120 "node-gyp-build" 121 121 ] 122 122 }, 123 - "@codspeed/vitest-plugin@5.4.0_tinybench@2.9.0_vite@7.3.3_vitest@4.1.7__vite@7.3.3": { 124 - "integrity": "sha512-Xa9HaZHUjYXn1T39bTipV5hmguk1vIuDZs3Gc5OYA8X4ohftYbKfyoFtBqVFfB/ii/p1ihuwt+tltraKMcRDsA==", 123 + "@codspeed/tinybench-plugin@5.4.0_tinybench@6.0.2": { 124 + "integrity": "sha512-jzuFoyyoGxc3Lc+TTl54PnRsgqO3CYbbbnwYSVp/m/4rqvCwSUZChY9EuQJ6uZFbamT3UhWF2N6tDEGShkvsrw==", 125 125 "dependencies": [ 126 126 "@codspeed/core", 127 - "tinybench", 128 - "vite", 129 - "vitest" 127 + "stack-trace", 128 + "tinybench" 130 129 ] 131 130 }, 132 - "@esbuild/aix-ppc64@0.27.7": { 133 - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", 134 - "os": ["aix"], 135 - "cpu": ["ppc64"] 136 - }, 137 - "@esbuild/android-arm64@0.27.7": { 138 - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", 139 - "os": ["android"], 140 - "cpu": ["arm64"] 141 - }, 142 - "@esbuild/android-arm@0.27.7": { 143 - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", 144 - "os": ["android"], 145 - "cpu": ["arm"] 146 - }, 147 - "@esbuild/android-x64@0.27.7": { 148 - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", 149 - "os": ["android"], 150 - "cpu": ["x64"] 151 - }, 152 - "@esbuild/darwin-arm64@0.27.7": { 153 - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", 154 - "os": ["darwin"], 155 - "cpu": ["arm64"] 156 - }, 157 - "@esbuild/darwin-x64@0.27.7": { 158 - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", 159 - "os": ["darwin"], 160 - "cpu": ["x64"] 161 - }, 162 - "@esbuild/freebsd-arm64@0.27.7": { 163 - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", 164 - "os": ["freebsd"], 165 - "cpu": ["arm64"] 166 - }, 167 - "@esbuild/freebsd-x64@0.27.7": { 168 - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", 169 - "os": ["freebsd"], 170 - "cpu": ["x64"] 171 - }, 172 - "@esbuild/linux-arm64@0.27.7": { 173 - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", 174 - "os": ["linux"], 175 - "cpu": ["arm64"] 176 - }, 177 - "@esbuild/linux-arm@0.27.7": { 178 - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", 179 - "os": ["linux"], 180 - "cpu": ["arm"] 181 - }, 182 - "@esbuild/linux-ia32@0.27.7": { 183 - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", 184 - "os": ["linux"], 185 - "cpu": ["ia32"] 186 - }, 187 - "@esbuild/linux-loong64@0.27.7": { 188 - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", 189 - "os": ["linux"], 190 - "cpu": ["loong64"] 191 - }, 192 - "@esbuild/linux-mips64el@0.27.7": { 193 - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", 194 - "os": ["linux"], 195 - "cpu": ["mips64el"] 196 - }, 197 - "@esbuild/linux-ppc64@0.27.7": { 198 - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", 199 - "os": ["linux"], 200 - "cpu": ["ppc64"] 201 - }, 202 - "@esbuild/linux-riscv64@0.27.7": { 203 - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", 204 - "os": ["linux"], 205 - "cpu": ["riscv64"] 206 - }, 207 - "@esbuild/linux-s390x@0.27.7": { 208 - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", 209 - "os": ["linux"], 210 - "cpu": ["s390x"] 211 - }, 212 - "@esbuild/linux-x64@0.27.7": { 213 - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", 214 - "os": ["linux"], 215 - "cpu": ["x64"] 216 - }, 217 - "@esbuild/netbsd-arm64@0.27.7": { 218 - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", 219 - "os": ["netbsd"], 220 - "cpu": ["arm64"] 221 - }, 222 - "@esbuild/netbsd-x64@0.27.7": { 223 - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", 224 - "os": ["netbsd"], 225 - "cpu": ["x64"] 226 - }, 227 - "@esbuild/openbsd-arm64@0.27.7": { 228 - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", 229 - "os": ["openbsd"], 230 - "cpu": ["arm64"] 231 - }, 232 - "@esbuild/openbsd-x64@0.27.7": { 233 - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", 234 - "os": ["openbsd"], 235 - "cpu": ["x64"] 236 - }, 237 - "@esbuild/openharmony-arm64@0.27.7": { 238 - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", 239 - "os": ["openharmony"], 240 - "cpu": ["arm64"] 241 - }, 242 - "@esbuild/sunos-x64@0.27.7": { 243 - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", 244 - "os": ["sunos"], 245 - "cpu": ["x64"] 246 - }, 247 - "@esbuild/win32-arm64@0.27.7": { 248 - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", 249 - "os": ["win32"], 250 - "cpu": ["arm64"] 251 - }, 252 - "@esbuild/win32-ia32@0.27.7": { 253 - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", 254 - "os": ["win32"], 255 - "cpu": ["ia32"] 256 - }, 257 - "@esbuild/win32-x64@0.27.7": { 258 - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", 259 - "os": ["win32"], 260 - "cpu": ["x64"] 261 - }, 262 - "@jridgewell/sourcemap-codec@1.5.5": { 263 - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" 264 - }, 265 - "@rollup/rollup-android-arm-eabi@4.60.4": { 266 - "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", 267 - "os": ["android"], 268 - "cpu": ["arm"] 269 - }, 270 - "@rollup/rollup-android-arm64@4.60.4": { 271 - "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", 272 - "os": ["android"], 273 - "cpu": ["arm64"] 274 - }, 275 - "@rollup/rollup-darwin-arm64@4.60.4": { 276 - "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", 277 - "os": ["darwin"], 278 - "cpu": ["arm64"] 279 - }, 280 - "@rollup/rollup-darwin-x64@4.60.4": { 281 - "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", 282 - "os": ["darwin"], 283 - "cpu": ["x64"] 284 - }, 285 - "@rollup/rollup-freebsd-arm64@4.60.4": { 286 - "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", 287 - "os": ["freebsd"], 288 - "cpu": ["arm64"] 289 - }, 290 - "@rollup/rollup-freebsd-x64@4.60.4": { 291 - "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", 292 - "os": ["freebsd"], 293 - "cpu": ["x64"] 294 - }, 295 - "@rollup/rollup-linux-arm-gnueabihf@4.60.4": { 296 - "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", 297 - "os": ["linux"], 298 - "cpu": ["arm"] 299 - }, 300 - "@rollup/rollup-linux-arm-musleabihf@4.60.4": { 301 - "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", 302 - "os": ["linux"], 303 - "cpu": ["arm"] 304 - }, 305 - "@rollup/rollup-linux-arm64-gnu@4.60.4": { 306 - "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", 307 - "os": ["linux"], 308 - "cpu": ["arm64"] 309 - }, 310 - "@rollup/rollup-linux-arm64-musl@4.60.4": { 311 - "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", 312 - "os": ["linux"], 313 - "cpu": ["arm64"] 314 - }, 315 - "@rollup/rollup-linux-loong64-gnu@4.60.4": { 316 - "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", 317 - "os": ["linux"], 318 - "cpu": ["loong64"] 319 - }, 320 - "@rollup/rollup-linux-loong64-musl@4.60.4": { 321 - "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", 322 - "os": ["linux"], 323 - "cpu": ["loong64"] 324 - }, 325 - "@rollup/rollup-linux-ppc64-gnu@4.60.4": { 326 - "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", 327 - "os": ["linux"], 328 - "cpu": ["ppc64"] 329 - }, 330 - "@rollup/rollup-linux-ppc64-musl@4.60.4": { 331 - "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", 332 - "os": ["linux"], 333 - "cpu": ["ppc64"] 334 - }, 335 - "@rollup/rollup-linux-riscv64-gnu@4.60.4": { 336 - "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", 337 - "os": ["linux"], 338 - "cpu": ["riscv64"] 339 - }, 340 - "@rollup/rollup-linux-riscv64-musl@4.60.4": { 341 - "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", 342 - "os": ["linux"], 343 - "cpu": ["riscv64"] 344 - }, 345 - "@rollup/rollup-linux-s390x-gnu@4.60.4": { 346 - "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", 347 - "os": ["linux"], 348 - "cpu": ["s390x"] 349 - }, 350 - "@rollup/rollup-linux-x64-gnu@4.60.4": { 351 - "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", 352 - "os": ["linux"], 353 - "cpu": ["x64"] 354 - }, 355 - "@rollup/rollup-linux-x64-musl@4.60.4": { 356 - "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", 357 - "os": ["linux"], 358 - "cpu": ["x64"] 359 - }, 360 - "@rollup/rollup-openbsd-x64@4.60.4": { 361 - "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", 362 - "os": ["openbsd"], 363 - "cpu": ["x64"] 364 - }, 365 - "@rollup/rollup-openharmony-arm64@4.60.4": { 366 - "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", 367 - "os": ["openharmony"], 368 - "cpu": ["arm64"] 369 - }, 370 - "@rollup/rollup-win32-arm64-msvc@4.60.4": { 371 - "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", 372 - "os": ["win32"], 373 - "cpu": ["arm64"] 374 - }, 375 - "@rollup/rollup-win32-ia32-msvc@4.60.4": { 376 - "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", 377 - "os": ["win32"], 378 - "cpu": ["ia32"] 379 - }, 380 - "@rollup/rollup-win32-x64-gnu@4.60.4": { 381 - "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", 382 - "os": ["win32"], 383 - "cpu": ["x64"] 384 - }, 385 - "@rollup/rollup-win32-x64-msvc@4.60.4": { 386 - "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", 387 - "os": ["win32"], 388 - "cpu": ["x64"] 389 - }, 390 131 "@sinclair/typebox@0.34.48": { 391 132 "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==" 392 133 }, 393 - "@standard-schema/spec@1.1.0": { 394 - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==" 395 - }, 396 - "@types/chai@5.2.3": { 397 - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", 398 - "dependencies": [ 399 - "@types/deep-eql", 400 - "assertion-error" 401 - ] 402 - }, 403 - "@types/deep-eql@4.0.2": { 404 - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==" 405 - }, 406 - "@types/estree@1.0.8": { 407 - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" 408 - }, 409 - "@vitest/expect@4.1.7": { 410 - "integrity": "sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w==", 411 - "dependencies": [ 412 - "@standard-schema/spec", 413 - "@types/chai", 414 - "@vitest/spy", 415 - "@vitest/utils", 416 - "chai", 417 - "tinyrainbow" 418 - ] 419 - }, 420 - "@vitest/mocker@4.1.7_vite@7.3.3": { 421 - "integrity": "sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA==", 422 - "dependencies": [ 423 - "@vitest/spy", 424 - "estree-walker", 425 - "magic-string", 426 - "vite" 427 - ], 428 - "optionalPeers": [ 429 - "vite" 430 - ] 431 - }, 432 - "@vitest/pretty-format@4.1.7": { 433 - "integrity": "sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw==", 434 - "dependencies": [ 435 - "tinyrainbow" 436 - ] 437 - }, 438 - "@vitest/runner@4.1.7": { 439 - "integrity": "sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw==", 440 - "dependencies": [ 441 - "@vitest/utils", 442 - "pathe" 443 - ] 444 - }, 445 - "@vitest/snapshot@4.1.7": { 446 - "integrity": "sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw==", 447 - "dependencies": [ 448 - "@vitest/pretty-format", 449 - "@vitest/utils", 450 - "magic-string", 451 - "pathe" 452 - ] 453 - }, 454 - "@vitest/spy@4.1.7": { 455 - "integrity": "sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q==" 456 - }, 457 - "@vitest/utils@4.1.7": { 458 - "integrity": "sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw==", 459 - "dependencies": [ 460 - "@vitest/pretty-format", 461 - "convert-source-map", 462 - "tinyrainbow" 463 - ] 464 - }, 465 134 "agent-base@6.0.2": { 466 135 "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 467 136 "dependencies": [ 468 137 "debug" 469 138 ] 470 - }, 471 - "assertion-error@2.0.1": { 472 - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==" 473 139 }, 474 140 "asynckit@0.4.0": { 475 141 "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" ··· 489 155 "es-errors", 490 156 "function-bind" 491 157 ] 492 - }, 493 - "chai@6.2.2": { 494 - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==" 495 158 }, 496 159 "combined-stream@1.0.8": { 497 160 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", ··· 499 162 "delayed-stream" 500 163 ] 501 164 }, 502 - "convert-source-map@2.0.0": { 503 - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" 504 - }, 505 165 "debug@4.4.3": { 506 166 "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 507 167 "dependencies": [ ··· 528 188 "es-errors@1.3.0": { 529 189 "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" 530 190 }, 531 - "es-module-lexer@2.1.0": { 532 - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==" 533 - }, 534 191 "es-object-atoms@1.1.2": { 535 192 "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", 536 193 "dependencies": [ ··· 546 203 "hasown" 547 204 ] 548 205 }, 549 - "esbuild@0.27.7": { 550 - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", 551 - "optionalDependencies": [ 552 - "@esbuild/aix-ppc64", 553 - "@esbuild/android-arm", 554 - "@esbuild/android-arm64", 555 - "@esbuild/android-x64", 556 - "@esbuild/darwin-arm64", 557 - "@esbuild/darwin-x64", 558 - "@esbuild/freebsd-arm64", 559 - "@esbuild/freebsd-x64", 560 - "@esbuild/linux-arm", 561 - "@esbuild/linux-arm64", 562 - "@esbuild/linux-ia32", 563 - "@esbuild/linux-loong64", 564 - "@esbuild/linux-mips64el", 565 - "@esbuild/linux-ppc64", 566 - "@esbuild/linux-riscv64", 567 - "@esbuild/linux-s390x", 568 - "@esbuild/linux-x64", 569 - "@esbuild/netbsd-arm64", 570 - "@esbuild/netbsd-x64", 571 - "@esbuild/openbsd-arm64", 572 - "@esbuild/openbsd-x64", 573 - "@esbuild/openharmony-arm64", 574 - "@esbuild/sunos-x64", 575 - "@esbuild/win32-arm64", 576 - "@esbuild/win32-ia32", 577 - "@esbuild/win32-x64" 578 - ], 579 - "scripts": true, 580 - "bin": true 581 - }, 582 - "estree-walker@3.0.3": { 583 - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 584 - "dependencies": [ 585 - "@types/estree" 586 - ] 587 - }, 588 - "expect-type@1.3.0": { 589 - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==" 590 - }, 591 - "fdir@6.5.0_picomatch@4.0.4": { 592 - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 593 - "dependencies": [ 594 - "picomatch" 595 - ], 596 - "optionalPeers": [ 597 - "picomatch" 598 - ] 599 - }, 600 206 "find-up@6.3.0": { 601 207 "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", 602 208 "dependencies": [ ··· 616 222 "hasown", 617 223 "mime-types" 618 224 ] 619 - }, 620 - "fsevents@2.3.3": { 621 - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 622 - "os": ["darwin"], 623 - "scripts": true 624 225 }, 625 226 "function-bind@1.1.2": { 626 227 "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" ··· 678 279 "p-locate" 679 280 ] 680 281 }, 681 - "magic-string@0.30.21": { 682 - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 683 - "dependencies": [ 684 - "@jridgewell/sourcemap-codec" 685 - ] 686 - }, 687 282 "math-intrinsics@1.1.0": { 688 283 "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" 689 284 }, ··· 699 294 "ms@2.1.3": { 700 295 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 701 296 }, 702 - "nanoid@3.3.12": { 703 - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", 704 - "bin": true 705 - }, 706 297 "node-gyp-build@4.8.4": { 707 298 "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", 708 299 "bin": true 709 - }, 710 - "obug@2.1.1": { 711 - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==" 712 300 }, 713 301 "p-limit@4.0.0": { 714 302 "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", ··· 725 313 "path-exists@5.0.0": { 726 314 "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" 727 315 }, 728 - "pathe@2.0.3": { 729 - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" 730 - }, 731 - "picocolors@1.1.1": { 732 - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 733 - }, 734 - "picomatch@4.0.4": { 735 - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==" 736 - }, 737 - "postcss@8.5.15": { 738 - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", 739 - "dependencies": [ 740 - "nanoid", 741 - "picocolors", 742 - "source-map-js" 743 - ] 744 - }, 745 316 "proxy-from-env@2.1.0": { 746 317 "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==" 747 318 }, 748 - "rollup@4.60.4": { 749 - "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", 750 - "dependencies": [ 751 - "@types/estree" 752 - ], 753 - "optionalDependencies": [ 754 - "@rollup/rollup-android-arm-eabi", 755 - "@rollup/rollup-android-arm64", 756 - "@rollup/rollup-darwin-arm64", 757 - "@rollup/rollup-darwin-x64", 758 - "@rollup/rollup-freebsd-arm64", 759 - "@rollup/rollup-freebsd-x64", 760 - "@rollup/rollup-linux-arm-gnueabihf", 761 - "@rollup/rollup-linux-arm-musleabihf", 762 - "@rollup/rollup-linux-arm64-gnu", 763 - "@rollup/rollup-linux-arm64-musl", 764 - "@rollup/rollup-linux-loong64-gnu", 765 - "@rollup/rollup-linux-loong64-musl", 766 - "@rollup/rollup-linux-ppc64-gnu", 767 - "@rollup/rollup-linux-ppc64-musl", 768 - "@rollup/rollup-linux-riscv64-gnu", 769 - "@rollup/rollup-linux-riscv64-musl", 770 - "@rollup/rollup-linux-s390x-gnu", 771 - "@rollup/rollup-linux-x64-gnu", 772 - "@rollup/rollup-linux-x64-musl", 773 - "@rollup/rollup-openbsd-x64", 774 - "@rollup/rollup-openharmony-arm64", 775 - "@rollup/rollup-win32-arm64-msvc", 776 - "@rollup/rollup-win32-ia32-msvc", 777 - "@rollup/rollup-win32-x64-gnu", 778 - "@rollup/rollup-win32-x64-msvc", 779 - "fsevents" 780 - ], 781 - "bin": true 782 - }, 783 - "siginfo@2.0.0": { 784 - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==" 785 - }, 786 - "source-map-js@1.2.1": { 787 - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" 788 - }, 789 - "stackback@0.0.2": { 790 - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==" 791 - }, 792 - "std-env@4.1.0": { 793 - "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==" 794 - }, 795 - "tinybench@2.9.0": { 796 - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==" 797 - }, 798 - "tinyexec@1.2.2": { 799 - "integrity": "sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==" 800 - }, 801 - "tinyglobby@0.2.16": { 802 - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", 803 - "dependencies": [ 804 - "fdir", 805 - "picomatch" 806 - ] 319 + "stack-trace@1.0.0-pre2": { 320 + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==" 807 321 }, 808 - "tinyrainbow@3.1.0": { 809 - "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==" 322 + "tinybench@6.0.2": { 323 + "integrity": "sha512-FlHoQpcFvCzeXK5kVPvV7IVgW/hs/B36QWTz876iSdeJguBDfdTSRQmYmaHX+fQNt4hp+gEFB2XXw+8hT4/y8A==" 810 324 }, 811 325 "valrs@0.1.0": { 812 326 "integrity": "sha512-BqVkjx3qhsRLHerblLDoqEx0OEx7ms0DB6LPv40oWkMfFKUVKrqVuklaGdrPrHyubC5hSHYfEtUiQXrCkC6xHQ==" 813 327 }, 814 - "vite@7.3.3": { 815 - "integrity": "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==", 816 - "dependencies": [ 817 - "esbuild", 818 - "fdir", 819 - "picomatch", 820 - "postcss", 821 - "rollup", 822 - "tinyglobby" 823 - ], 824 - "optionalDependencies": [ 825 - "fsevents" 826 - ], 827 - "bin": true 828 - }, 829 - "vitest@4.1.7_vite@7.3.3": { 830 - "integrity": "sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA==", 831 - "dependencies": [ 832 - "@vitest/expect", 833 - "@vitest/mocker", 834 - "@vitest/pretty-format", 835 - "@vitest/runner", 836 - "@vitest/snapshot", 837 - "@vitest/spy", 838 - "@vitest/utils", 839 - "es-module-lexer", 840 - "expect-type", 841 - "magic-string", 842 - "obug", 843 - "pathe", 844 - "picomatch", 845 - "std-env", 846 - "tinybench", 847 - "tinyexec", 848 - "tinyglobby", 849 - "tinyrainbow", 850 - "vite", 851 - "why-is-node-running" 852 - ], 853 - "bin": true 854 - }, 855 - "why-is-node-running@2.3.0": { 856 - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 857 - "dependencies": [ 858 - "siginfo", 859 - "stackback" 860 - ], 861 - "bin": true 862 - }, 863 328 "yocto-queue@1.2.2": { 864 329 "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==" 865 330 } ··· 870 335 "jsr:@std/encoding@1", 871 336 "jsr:@std/expect@1", 872 337 "jsr:@std/testing@1", 873 - "npm:@codspeed/vitest-plugin@^5.4.0", 338 + "npm:@codspeed/tinybench-plugin@^5.4.0", 874 339 "npm:@sinclair/typebox@0.34", 875 340 "npm:effection@^4.0.2", 876 - "npm:vitest@^4.1.7" 341 + "npm:tinybench@^6.0.2" 877 342 ] 878 343 } 879 344 }