@oh-just-another/text-wasm 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ # @oh-just-another/text-wasm
2
+
3
+ ## 0.57.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Version bump just for publishing.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @oh-just-another/renderer-core@0.57.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Rustam Garifulin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # @oh-just-another/text-wasm
2
+
3
+ WASM-backed `TextShaper` implementation for the diagram renderer (Phase 46).
4
+
5
+ Default fallback: a synchronous geometric estimate so first paint isn't blank. Plug a real WASM module (HarfBuzz / harfbuzzjs / ICU4X / canvaskit-text) via `loadModule(...)` once it is fetched.
6
+
7
+ ```ts
8
+ import { WasmTextShaper } from "@oh-just-another/text-wasm";
9
+
10
+ const shaper = new WasmTextShaper();
11
+ await shaper.loadModule("/text-shaper.wasm"); // optional — without it, fallback is used
12
+
13
+ // pass into the editor
14
+ const editor = new Editor({ textShaper: shaper /* … */ });
15
+ ```
16
+
17
+ ## Expected WASM exports
18
+
19
+ ```ts
20
+ interface WasmShaperExports {
21
+ memory: WebAssembly.Memory;
22
+ alloc(bytes: number): number;
23
+ free(ptr: number, bytes: number): void;
24
+ setFont(familyPtr: number, familyLen: number, size: number): void;
25
+ measure(textPtr: number, textLen: number): number; // advance width in CSS px
26
+ }
27
+ ```
28
+
29
+ Any toolchain that emits a `WebAssembly.Instance` matching this shape works (Rust + `wasm-bindgen` with `#[no_mangle]` exports, AssemblyScript, hand-crafted `.wat`, …). The kernel does not ship a bundled module — hosts pick the engine that matches their font pipeline.
30
+
31
+ See `@oh-just-another/renderer-core`'s `TextShaper` interface.
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/constants.ts","../../types/dist/vec2.d.ts","../../types/dist/bounds.d.ts","../../types/dist/transform.d.ts","../../types/dist/color.d.ts","../../types/dist/ids.d.ts","../../types/dist/events.d.ts","../../types/dist/index.d.ts","../../renderer-core/dist/render-target.d.ts","../../scene/dist/style.d.ts","../../scene/dist/constants.d.ts","../../../node_modules/.pnpm/fractional-keys@0.1.1/node_modules/fractional-keys/dist/types.d.ts","../../../node_modules/.pnpm/fractional-keys@0.1.1/node_modules/fractional-keys/dist/generate.d.ts","../../../node_modules/.pnpm/fractional-keys@0.1.1/node_modules/fractional-keys/dist/jitter.d.ts","../../../node_modules/.pnpm/fractional-keys@0.1.1/node_modules/fractional-keys/dist/digits.d.ts","../../../node_modules/.pnpm/fractional-keys@0.1.1/node_modules/fractional-keys/dist/errors.d.ts","../../../node_modules/.pnpm/fractional-keys@0.1.1/node_modules/fractional-keys/dist/index.d.ts","../../scene/dist/edge.d.ts","../../scene/dist/shape.d.ts","../../scene/dist/edge-curve.d.ts","../../scene/dist/annotation.d.ts","../../scene/dist/file.d.ts","../../scene/dist/layer.d.ts","../../scene/dist/viewport.d.ts","../../scene/dist/patch.d.ts","../../scene/dist/scene.d.ts","../../scene/dist/edge-geometry.d.ts","../../scene/dist/operations.d.ts","../../scene/dist/render-bounds.d.ts","../../scene/dist/text-measure.d.ts","../../scene/dist/anchors.d.ts","../../scene/dist/snap.d.ts","../../scene/dist/outline.d.ts","../../scene/dist/annotation-geometry.d.ts","../../scene/dist/spatial.d.ts","../../scene/dist/queries.d.ts","../../scene/dist/a11y.d.ts","../../scene/dist/layout.d.ts","../../scene/dist/layout-registry.d.ts","../../scene/dist/elbow-router.d.ts","../../scene/dist/elbow-link.d.ts","../../scene/dist/heading.d.ts","../../scene/dist/diff.d.ts","../../scene/dist/three-way-merge.d.ts","../../scene/dist/container.d.ts","../../scene/dist/index.d.ts","../../renderer-core/dist/shape-renderer.d.ts","../../renderer-core/dist/layers.d.ts","../../renderer-core/dist/shape-cache.d.ts","../../renderer-core/dist/layer-cache-composite.d.ts","../../renderer-core/dist/scene-renderer.d.ts","../../renderer-core/dist/edge-cache.d.ts","../../renderer-core/dist/edge-cache-bitmap.d.ts","../../renderer-core/dist/edge-renderer.d.ts","../../renderer-core/dist/grid-renderer.d.ts","../../renderer-core/dist/built-in-renderers.d.ts","../../renderer-core/dist/text-shaper.d.ts","../../renderer-core/dist/text-layout.d.ts","../../renderer-core/dist/text-editing.d.ts","../../renderer-core/dist/shape-cache-bitmap.d.ts","../../renderer-core/dist/animation-adapter.d.ts","../../renderer-core/dist/rasterizer.d.ts","../../renderer-core/dist/js-rasterizer.d.ts","../../renderer-core/dist/worker-render.d.ts","../../renderer-core/dist/tile-renderer.d.ts","../../renderer-core/dist/constants.d.ts","../../renderer-core/dist/index.d.ts","../src/wasm-text-shaper.ts","../src/index.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.19.19/node_modules/@types/node/index.d.ts"],"fileIdsList":[[133,179,180,182,199,200],[133,181,182,199,200],[182,199,200],[133,182,187,199,200,217],[133,182,183,188,193,199,200,202,214,225],[133,182,183,184,193,199,200,202],[133,182,199,200],[128,129,130,133,182,199,200],[133,182,185,199,200,226],[133,182,186,187,194,199,200,203],[133,182,187,199,200,214,222],[133,182,188,190,193,199,200,202],[133,181,182,189,199,200],[133,182,190,191,199,200],[133,182,192,193,199,200],[133,181,182,193,199,200],[133,182,193,194,195,199,200,214,225],[133,182,193,194,195,199,200,209,214,217],[133,175,182,190,193,196,199,200,202,214,225],[133,182,193,194,196,197,199,200,202,214,222,225],[133,182,196,198,199,200,214,222,225],[131,132,133,134,135,136,137,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231],[133,182,193,199,200],[133,182,199,200,201,225],[133,182,190,193,199,200,202,214],[133,182,199,200,203],[133,182,199,200,204],[133,181,182,199,200,205],[133,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231],[133,182,199,200,207],[133,182,199,200,208],[133,182,193,199,200,209,210],[133,182,199,200,209,211,226,228],[133,182,194,199,200],[133,182,193,199,200,214,215,217],[133,182,199,200,216,217],[133,182,199,200,214,215],[133,182,199,200,217],[133,182,199,200,218],[133,179,182,199,200,214,219,225],[133,182,193,199,200,220,221],[133,182,199,200,220,221],[133,182,187,199,200,202,214,222],[133,182,199,200,223],[133,182,199,200,202,224],[133,182,196,199,200,208,225],[133,182,187,199,200,226],[133,182,199,200,214,227],[133,182,199,200,201,228],[133,182,199,200,229],[133,175,182,199,200],[133,175,182,193,195,199,200,205,214,217,225,227,228,230],[133,182,199,200,214,231],[70,133,182,199,200],[70,71,72,73,74,133,182,199,200],[133,147,151,182,199,200,225],[133,147,182,199,200,214,225],[133,142,182,199,200],[133,144,147,182,199,200,222,225],[133,182,199,200,202,222],[133,182,199,200,232],[133,142,182,199,200,232],[133,144,147,182,199,200,202,225],[133,139,140,143,146,182,193,199,200,214,225],[133,147,154,182,199,200],[133,139,145,182,199,200],[133,147,168,169,182,199,200],[133,143,147,182,199,200,217,225,232],[133,168,182,199,200,232],[133,141,142,182,199,200,232],[133,147,182,199,200],[133,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,169,170,171,172,173,174,182,199,200],[133,147,162,182,199,200],[133,147,154,155,182,199,200],[133,145,147,155,156,182,199,200],[133,146,182,199,200],[133,139,142,147,182,199,200],[133,147,151,155,156,182,199,200],[133,151,182,199,200],[133,145,147,150,182,199,200,225],[133,139,144,147,154,182,199,200],[133,182,199,200,214],[133,142,147,168,182,199,200,230,232],[109,133,182,199,200],[104,133,182,199,200],[66,104,133,182,199,200],[66,67,104,110,111,133,182,199,200],[67,104,133,182,199,200],[67,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,133,182,199,200],[120,133,182,199,200],[66,133,182,199,200],[66,67,104,107,108,133,182,199,200],[67,133,182,199,200],[67,115,133,182,199,200],[77,133,182,199,200],[66,76,77,133,182,199,200],[66,79,84,133,182,199,200],[66,77,84,133,182,199,200],[66,84,133,182,199,200],[66,76,78,84,133,182,199,200],[66,68,75,133,182,199,200],[66,76,84,133,182,199,200],[66,77,133,182,199,200],[68,69,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,133,182,199,200],[66,75,133,182,199,200],[66,83,84,133,182,199,200],[66,77,83,84,133,182,199,200],[66,76,77,79,81,82,83,84,133,182,199,200],[66,76,77,79,80,81,82,133,182,199,200],[66,76,77,81,84,93,133,182,199,200],[66,75,76,77,79,80,81,82,83,133,182,199,200],[66,68,75,76,133,182,199,200],[59,126,133,182,199,200],[59,125,133,182,195,199,200,225],[60,133,182,199,200],[60,61,62,63,64,65,133,182,199,200]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fae68b5d789ffaee804ac1d17a87390997f4f10216908d9d1a60a4ac1c65686","signature":"d46026b3b5f3e599f8de375ad5dda84967641f323d7750c5b10bf531c47a550f"},"a9dc2e59fb40b94411bd995a0013c15385b99599a18b7141cf3eafd80c7f0f96","4015dc819b09b93f989d4df8f1f0f36cb99cb2aad8102ab8b4b27fb6020beb5f","ed06a7b359e2125c375f6bada6631fd038473dd624309b8a43a824693a6f6c89","46fa0b276ad58dc963c574f72bb9456b881f3d61bc0fe6827c24f3f02baa6038","1f0260dbafda11af88b11f1b6d662ee45517d44c8cc9a7248bd61d2d8ab1f880","502657b9a54e290098ba4f955efa476b91648b24d5310b8c6e7aa0d4cf8945ae","90755de39a18e2894ad3cced6cdf4cb670e09868b01a6f6465af558d865bf848","799b9bc7d88f13ae6e51415c1e663e685fcbe77164eb2be78b08893d9b299bf0","b8e3c1f3a85e05bcbc56fa28558cffc68ac40e4158afdc2d702ea825ce21d14d","c196961c4aa13e3bf28a7e56ac7fa0b0cbfc668eca4496292d629dd18f43296b",{"version":"bce89d3ef847715b91ffd525a157c779be8fafebe823671815f7ce96f27afcda","impliedFormat":99},{"version":"c67f9d85070618f586d632cf184b986eb604f426b90aa68ecdad1ac68ca3151c","impliedFormat":99},{"version":"c656cc6ded557aff87a6c823142852e3548c6a14f84bb48ee35c3e57b6ebc03b","impliedFormat":99},{"version":"0e34130243c29d8d826f868c4e00ff586b349627cb241b3d89f0459a6cdeff4d","impliedFormat":99},{"version":"d555c6cb465cc5cf8127adbbc496720d5200c9dfafa777bbf9dfdea74ebfe3a3","impliedFormat":99},{"version":"27a6936a863edf777150af3ebc65939fa34f51d68385f8a7f198d8ea53685a4d","impliedFormat":99},"17ee722c53770caad5479081a3db9f0df8135a8f061ea9ce57a507ca0c424cce","78bde316dcb094df77d06b893e0b965d318ac5708d09e7cf6206931263be32e6","d081374b0bf74e2748138e8b0a56458e12e2ee7bd07fb239b92c97a33bba8d70","b85f83aa4b7fb1abc375a73cb706295a146b9f22cf9fa5ec89105fcff6ea1495","fd0cd0a179e95f7d4d5f7370209f6b413006242a045137d33ca230ae015ba760","fa716666e5bedc99e38d37def5182924b9dd9e6298c2751f8cebe0fc631ef697","48280d2635c39dd226b7e5bb71d0519f355b60d4d92e9f6b5b4a427aa28412f8","8bdcd8a58fead736e81808193884907482c8d354f13a0516e9b236a07622c727","8ebfa15cb2e79b885a21ae5f92507b5b9dd9b01041143554903c163f86611849","4233c4d8ac9cb79b3b71e4923eb486f08f5f2c6508fc177192081a402bee38b3","dfa88df7638cc24634255691d0a3fb72a4910b73211da89fab8f2362730cb3b2","75ea946ee4d31489f494b0def56b2db669c3aac052713387d6edc51dc2ca86db","26ce9aa6f798212e39770c45142239f3a54fa63697ba90bae90c6d7ac7da825a","eceda86937454d399a4e4cd4a3e25835a4ac80ab930f399b20f53d8f1c772457","8b12bcaa49f76ee1ce7f77943a297078dba53abedd344da6d370012eab482c07","ebfed381c5296dbb1ebae8265ca08dbce33929fa829f6ac11f2f591beb1f4485","ae557ba7a3d28e8909ac395365eb5f8ff63bc28eb2eaace61650ed51f1bc1808","95784f449b26dbdf4aadd2f99a5c2f6c419d80f993ececa6c0c3e0159b452aa5","89c0f7c64772fcb38eda1e15b26da3e53e4101c968a0eeb14954f154aee4dac1","6e7e44d7615d2899c2dd6be4e15bbb2cd0b7f4afec2379c08db14b9eac5c9b43","a1f5b4a129cd4b8f013533f200baf74615d690c41f1ef2147bd40ef6110c4a1b","d1b901b618ec72bff0fcb657edf03d83e2bcbb2687a9cddadea48a24ab23faf2","9a02cb3cccc3eeb3fea9327c47dbda2076e21f3da7b2eb659871dc91b8572f42","1778dfd35a7d5885896c436792662c8d602ea8cf03aeed97b0381b6e82c4e980","f730ff4577c8d45cb4a587d078ee5b692613c3de57f26a27a4be74c183adc226","60bd456f1b63861f880c386ddf1b3916098bbafbf4b5a46a5e5ebc4fcb9434c4","f2c0b5b634eed4010d9396710281a7fdc7019fe47507e8bcb706a58af985548a","baeb8f9be968778478ffa26099ec4211dd28c6dea1633fd8fd1560c34fdd0269","5df76ca2d799039334a825b621129061b89022808e0943397e045bc6feec894c","9b6e1a724771bd1fb7ea1a2551ed5b13b92d87aeaba331d520716e725d7b63a5","66c6888608b17316a09ede6335f5568748a24af4090990c9cf8050ac8b318c34","e89c865ca4785f4a56fbfe95b04df807ebf6d320b174b484f3a08d54321447a7","403e6bc805dc2cdcbb3f6bb38cf78bd70d4202ebe405178fd8dc917bf84dd124","fcf3b586398c415038922a229576ddc3c9ac81f17113f4564f860b90222fc463","e6a79d0cfe8e75f37a20cb36e05795fa8116c4510a4b3cfc3fa89a427f356b3c","6aee942b8a0c7c10cd2315315b0b88b85daf969ed761cda7d1c045badba8b058","2a113e6e70cb236e8f367e088f0470fe9155b04ea16ce315606095ea7f9a06c1","b505287deeb59270e8d172f30f625adf6e8394c16e68f1caeff1d933fb6a239a","f9bdf17d1b11f604f4c3db96f3ab31d1a5d0e81f95765ba3eaf60069b6892f49","d84043e3d658e5b2fd1351c18cefeeed153fa37c5828c234c2c343e89511ce34","8bfb061a2c3561bd22bdf252a4a32e504cd1cf1af601e377d51fc006104e927d","28bc1aaad7be71d47e0e278e97f43ab7b736e4f042a3c086a239543e7d0f9b24","71441b9d36fd4591e4606665559a533274dc04ebabfa841a45362ef273f2e8ce","2b7e1ab6757e4fed93a787ff649719bc13aaf8607e12c0b3c8c3e8c190d65680","6257c11ddda8274e26d5e46fb41272edddd4a8d6a9686ddd79c86b0f5484ba8f","5f442f7b5b287323065b77d9e991937bc10f974bfd65a0f36d2ccc10bb490a6c","e2467441777ecea9f274b465d652ac217fb76872b2403a2fd049929a57a9e15d","54f06de0591cca133a51d2004cb4d3f6370315e1e1dd6618280524fe91f8a01c","9dae069538bed39f3ffbe84975f1deac55843f229314982ee15a4b8ed4d9a98d","d9579c3abb9e4ed7d64b4619f2732191a1917989e63120156adcbfaff100b001",{"version":"5115a24190740b6da8fc5f9c01c7385f2c65f5094e8985cce5eb63c06c5b9988","signature":"f139b528c39017fe629b45e8f1e858bbb9095aefd9e4a1d3935821d8e5967650"},{"version":"3a257ba8a2ac610c6358e1be76daf36f6337071e9e67ae23914dc1556cf46f95","signature":"a2752f8c93f30de9b3e22ca2bf04ce96c639c5430091fa63e028623bfcc011a8"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"73b5fa37db36eeac90c4d752e39586f1b57187400c4f5280fd05f16437287a45","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1}],"root":[59,126,127],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":false,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[179,1],[180,1],[181,2],[133,3],[182,4],[183,5],[184,6],[128,7],[131,8],[129,7],[130,7],[185,9],[186,10],[187,11],[188,12],[189,13],[190,14],[191,14],[192,15],[193,16],[194,17],[195,18],[134,7],[132,7],[196,19],[197,20],[198,21],[232,22],[199,23],[200,7],[201,24],[202,25],[203,26],[204,27],[205,28],[206,29],[207,30],[208,31],[209,32],[210,32],[211,33],[212,7],[213,34],[214,35],[216,36],[215,37],[217,38],[218,39],[219,40],[220,41],[221,42],[222,43],[223,44],[224,45],[225,46],[226,47],[227,48],[228,49],[229,50],[135,7],[136,7],[137,7],[176,51],[177,7],[178,7],[230,52],[231,53],[138,7],[73,7],[74,7],[71,54],[75,55],[72,54],[70,7],[57,7],[58,7],[10,7],[12,7],[11,7],[2,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[3,7],[21,7],[22,7],[4,7],[23,7],[27,7],[24,7],[25,7],[26,7],[28,7],[29,7],[30,7],[5,7],[31,7],[32,7],[33,7],[34,7],[6,7],[38,7],[35,7],[36,7],[37,7],[39,7],[7,7],[40,7],[45,7],[46,7],[41,7],[42,7],[43,7],[44,7],[8,7],[50,7],[47,7],[48,7],[49,7],[51,7],[9,7],[52,7],[53,7],[54,7],[56,7],[55,7],[1,7],[154,56],[164,57],[153,56],[174,58],[145,59],[144,60],[173,61],[167,62],[172,63],[147,64],[161,65],[146,66],[170,67],[142,68],[141,61],[171,69],[143,70],[148,71],[149,7],[152,71],[139,7],[175,72],[165,73],[156,74],[157,75],[159,76],[155,77],[158,78],[168,61],[150,79],[151,80],[160,81],[140,82],[163,73],[162,71],[166,7],[169,83],[119,7],[114,7],[124,84],[111,85],[110,86],[112,87],[113,88],[125,89],[121,90],[108,91],[106,7],[120,86],[67,91],[109,92],[118,85],[107,86],[105,88],[117,93],[116,94],[115,93],[123,91],[122,86],[95,95],[89,96],[92,97],[79,91],[69,7],[103,98],[101,99],[78,91],[85,100],[76,101],[99,102],[98,91],[80,91],[100,103],[104,104],[81,105],[97,106],[96,107],[86,108],[91,103],[83,109],[94,110],[87,103],[84,111],[77,112],[90,99],[93,91],[68,91],[88,7],[102,98],[82,91],[59,7],[127,113],[126,114],[61,7],[63,7],[65,115],[64,7],[66,116],[62,7],[60,7]],"latestChangedDtsFile":"./index.d.ts","version":"5.9.3"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Per-package constants — adjustable defaults for the WASM text
3
+ * shaper. Tuned conservatively for browsers; hosts override via
4
+ * `WasmTextShaper` constructor options.
5
+ */
6
+ /**
7
+ * Fallback advance width (CSS px) for shaper queries that arrive
8
+ * before the WASM module finishes loading. Sized to roughly match
9
+ * `0.55 * fontSize` for proportional fonts. Returned as
10
+ * `text.length * (fontSize * FALLBACK_ADVANCE_FACTOR)` so layout
11
+ * stays roughly proportional during the warm-up window.
12
+ */
13
+ export declare const FALLBACK_ADVANCE_FACTOR = 0.55;
14
+ /**
15
+ * LRU cap for the measure cache (entries, not bytes). Each entry
16
+ * is a small object — a few hundred bytes — so 10k entries cost
17
+ * ≤ ~4 MB. Hosts hosting larger documents (think 100k labels)
18
+ * should raise via constructor options.
19
+ */
20
+ export declare const MEASURE_CACHE_SIZE = 10000;
21
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAS,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Per-package constants — adjustable defaults for the WASM text
3
+ * shaper. Tuned conservatively for browsers; hosts override via
4
+ * `WasmTextShaper` constructor options.
5
+ */
6
+ /**
7
+ * Fallback advance width (CSS px) for shaper queries that arrive
8
+ * before the WASM module finishes loading. Sized to roughly match
9
+ * `0.55 * fontSize` for proportional fonts. Returned as
10
+ * `text.length * (fontSize * FALLBACK_ADVANCE_FACTOR)` so layout
11
+ * stays roughly proportional during the warm-up window.
12
+ */
13
+ export const FALLBACK_ADVANCE_FACTOR = 0.55;
14
+ /**
15
+ * LRU cap for the measure cache (entries, not bytes). Each entry
16
+ * is a small object — a few hundred bytes — so 10k entries cost
17
+ * ≤ ~4 MB. Hosts hosting larger documents (think 100k labels)
18
+ * should raise via constructor options.
19
+ */
20
+ export const MEASURE_CACHE_SIZE = 10_000;
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { WasmTextShaper, type WasmShaperExports, type WasmTextShaperOptions, type GlyphMetrics, type MsdfGlyphTile, } from "./wasm-text-shaper.js";
2
+ export { FALLBACK_ADVANCE_FACTOR, MEASURE_CACHE_SIZE } from "./constants.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { WasmTextShaper, } from "./wasm-text-shaper.js";
2
+ export { FALLBACK_ADVANCE_FACTOR, MEASURE_CACHE_SIZE } from "./constants.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAKf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,177 @@
1
+ import type { ShapedGlyph, ShaperFont, TextShaper } from "@oh-just-another/renderer-core";
2
+ /**
3
+ * WASM-backed text shaper.
4
+ *
5
+ * The kernel ships an interface in `@oh-just-another/renderer-core` so
6
+ * hosts can swap measurement engines. This package provides the
7
+ * default WASM-aware implementation:
8
+ *
9
+ * • Until a WASM module is loaded via `loadModule`, calls fall
10
+ * back to a synchronous geometric estimate (proportional
11
+ * monospace-style advance). Layout stays roughly correct so
12
+ * the first paint isn't blank.
13
+ * • `loadModule(bytes | url, exports)` plugs a real shaper in.
14
+ * The expected `exports` shape is documented inline — any
15
+ * HarfBuzz / harfbuzzjs / ICU4X build that exposes a
16
+ * `measure(textPtr, len, fontPtr) → width` function and
17
+ * conventional `memory` + `alloc`/`free` can be wired up.
18
+ * • Cache: small LRU keyed on the (text, font) pair so repeated
19
+ * measurements (re-renders of the same labels) are O(1).
20
+ *
21
+ * The JS fallback in `shape()` only fills `advance` for each
22
+ * character so decoration positioning lines up roughly even before
23
+ * the WASM module loads.
24
+ */
25
+ export interface WasmShaperExports {
26
+ readonly memory: WebAssembly.Memory;
27
+ readonly alloc: (bytes: number) => number;
28
+ readonly free: (ptr: number, bytes: number) => void;
29
+ readonly setFont: (familyPtr: number, familyLen: number, size: number, bold: number, italic: number) => void;
30
+ readonly measure: (textPtr: number, textLen: number) => number;
31
+ /**
32
+ * Optional — resolve a UTF-8 CSS font-family + bold/italic flags to a
33
+ * font id `familyBase + (bold?1:0) + (italic?2:0)` where familyBase is
34
+ * 0/4/8 (sans/serif/mono). Present in multi-font modules. Single-font
35
+ * modules omit it (host treats everything as id 0).
36
+ */
37
+ readonly resolveFont?: (familyPtr: number, familyLen: number, bold: number, italic: number) => number;
38
+ /**
39
+ * Optional — only present when the bundled MSDF-capable module is
40
+ * loaded. Returns a pointer to 24 bytes (6 × f32 little-endian) with
41
+ * the layout `[advance, bboxXMin, bboxYMin, bboxW, bboxH, unitsPerEm]`
42
+ * in font units. Pointer stays valid until the next `reset()`.
43
+ * `fontId` selects the embedded font.
44
+ */
45
+ readonly glyphMetrics?: (fontId: number, codePoint: number) => number;
46
+ /**
47
+ * Optional — only present when the bundled MSDF-capable module is
48
+ * loaded. Returns a pointer to `atlasSize * atlasSize * 3` RGB
49
+ * bytes containing the multi-channel signed distance field for the
50
+ * supplied code point. `range` is the SDF range in atlas pixels
51
+ * (the host's shader uses `median(r,g,b)` + `smoothstep` to
52
+ * antialias). Empty / missing glyphs return an all-zero buffer.
53
+ * `fontId` selects the embedded font.
54
+ */
55
+ readonly rasterizeGlyphMSDF?: (fontId: number, codePoint: number, atlasSize: number, range: number) => number;
56
+ readonly reset?: () => void;
57
+ }
58
+ /**
59
+ * Per-glyph metrics in font units. The host converts to pixels via
60
+ * `value * fontSize / unitsPerEm`. `bbox` is the glyph's tight
61
+ * bounding box (in font coords — y-up, origin at left of baseline);
62
+ * `advance` is the horizontal advance (how far the cursor moves to
63
+ * place the next glyph). All values are zero for missing glyphs.
64
+ */
65
+ export interface GlyphMetrics {
66
+ readonly advance: number;
67
+ readonly bboxXMin: number;
68
+ readonly bboxYMin: number;
69
+ readonly bboxW: number;
70
+ readonly bboxH: number;
71
+ readonly unitsPerEm: number;
72
+ }
73
+ /**
74
+ * Raw MSDF tile for a single glyph. `data` is `atlasSize *
75
+ * atlasSize * 3` bytes in RGB order. `data` is a view into the WASM
76
+ * linear memory and must be copied before the next WASM call (which
77
+ * may grow / re-alloc the arena).
78
+ */
79
+ export interface MsdfGlyphTile {
80
+ readonly atlasSize: number;
81
+ readonly range: number;
82
+ readonly data: Uint8Array;
83
+ }
84
+ export interface WasmTextShaperOptions {
85
+ /** Override the LRU cap. Defaults to `MEASURE_CACHE_SIZE`. */
86
+ readonly cacheSize?: number;
87
+ /** Override the fallback advance factor. */
88
+ readonly fallbackAdvanceFactor?: number;
89
+ }
90
+ export declare class WasmTextShaper implements TextShaper {
91
+ private readonly cacheSize;
92
+ private readonly fallbackFactor;
93
+ private readonly cache;
94
+ private wasm;
95
+ private currentFontKey;
96
+ private readonly textEncoder;
97
+ constructor(options?: WasmTextShaperOptions);
98
+ /** Returns `true` once a WASM module has been successfully loaded. */
99
+ get isReady(): boolean;
100
+ /**
101
+ * Load a WASM module that exposes the `WasmShaperExports` interface.
102
+ * Accepts either a fetched URL (resolves a Response) or a raw
103
+ * ArrayBuffer / TypedArray of the module bytes.
104
+ *
105
+ * Resets the cache — fallback measurements are usually very
106
+ * different from the real ones, so reusing them would produce a
107
+ * layout pop on the next paint.
108
+ */
109
+ loadModule(source: string | URL | ArrayBuffer | Uint8Array | Response): Promise<void>;
110
+ /**
111
+ * Load the bundled `text_shaper.wasm` shipped with this package.
112
+ * Equivalent to
113
+ *
114
+ * shaper.loadModule(new URL("../wasm/text_shaper.wasm",
115
+ * import.meta.url))
116
+ *
117
+ * In a Vite-built host the URL resolves to a hashed bundle asset;
118
+ * in Node, `fetch` (Node 18+) reads it from disk through the
119
+ * `file://` URL. SSR-only hosts can pass the bytes directly to
120
+ * `loadModule(...)` to skip the fetch hop.
121
+ */
122
+ static loadBundled(): Promise<WasmTextShaper>;
123
+ measure(text: string, font: ShaperFont): {
124
+ width: number;
125
+ };
126
+ shape(text: string, font: ShaperFont): readonly ShapedGlyph[];
127
+ /**
128
+ * Resolve a CSS font-family stack to an embedded font id (0=sans,
129
+ * 1=serif, 2=mono). Returns 0 when the module is single-font (no
130
+ * `resolveFont` export) or not yet loaded, so callers degrade to the
131
+ * default font transparently. The atlas keys glyphs by this id, so
132
+ * the same code point in two families gets two tiles.
133
+ */
134
+ resolveFontId(family: string, bold?: boolean, italic?: boolean): number;
135
+ /**
136
+ * Pull per-glyph metrics (advance + tight bbox + UPM) from the WASM
137
+ * shaper for a single code point. Returns `null` if the loaded
138
+ * module doesn't expose `glyphMetrics` or before `loadModule()` has
139
+ * resolved. All values are in font units; the host scales via
140
+ * `fontSize / unitsPerEm` — same convention as `measure` uses
141
+ * internally. `fontId` selects the embedded font.
142
+ *
143
+ * The returned object is detached (plain object, not a memory
144
+ * view), so callers can keep it past further WASM calls.
145
+ */
146
+ glyphMetrics(codePoint: number, fontId?: number): GlyphMetrics | null;
147
+ /**
148
+ * Rasterise a single glyph as an MSDF tile. The bundled wasm uses
149
+ * the `fdsm` crate (pure-Rust msdfgen-style implementation) — three
150
+ * channels, 3°-equivalent corner detection, sign-correction
151
+ * post-pass. `atlasSize` is the tile edge in pixels (typical 32 /
152
+ * 48 / 64); `range` is the SDF range in atlas pixels (typically
153
+ * `atlasSize / 8`, so the shader has ~`range`px to soften the edge
154
+ * with `smoothstep`).
155
+ *
156
+ * Returns `null` when the loaded module doesn't expose
157
+ * `rasterizeGlyphMSDF`. Returns a buffer of zeros for missing or
158
+ * empty (whitespace) glyphs — the host shader reads zero as "fully
159
+ * outside" which is the correct visual outcome.
160
+ *
161
+ * The returned `data` is a **copy** of the WASM-side buffer so the
162
+ * tile survives subsequent WASM calls that may grow the arena.
163
+ */
164
+ rasterizeGlyphMSDF(codePoint: number, atlasSize: number, range: number, fontId?: number): MsdfGlyphTile | null;
165
+ /**
166
+ * Reset the WASM bump arena to zero — frees all transient
167
+ * allocations (font-family copies, measure inputs, MSDF tiles).
168
+ * Safe to call between batches; no-op if the loaded module doesn't
169
+ * expose `reset`. Hosts that hammer the atlas (large strings,
170
+ * many glyphs) should call this after each frame to avoid
171
+ * unbounded arena growth.
172
+ */
173
+ resetArena(): void;
174
+ private measureFallback;
175
+ private measureViaWasm;
176
+ }
177
+ //# sourceMappingURL=wasm-text-shaper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-text-shaper.d.ts","sourceRoot":"","sources":["../src/wasm-text-shaper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ import { FALLBACK_ADVANCE_FACTOR, MEASURE_CACHE_SIZE } from "./constants.js";
2
+ export class WasmTextShaper {
3
+ cacheSize;
4
+ fallbackFactor;
5
+ cache = new Map();
6
+ wasm = null;
7
+ currentFontKey = null;
8
+ textEncoder = new TextEncoder();
9
+ constructor(options = {}) {
10
+ this.cacheSize = options.cacheSize ?? MEASURE_CACHE_SIZE;
11
+ this.fallbackFactor = options.fallbackAdvanceFactor ?? FALLBACK_ADVANCE_FACTOR;
12
+ }
13
+ /** Returns `true` once a WASM module has been successfully loaded. */
14
+ get isReady() {
15
+ return this.wasm !== null;
16
+ }
17
+ /**
18
+ * Load a WASM module that exposes the `WasmShaperExports` interface.
19
+ * Accepts either a fetched URL (resolves a Response) or a raw
20
+ * ArrayBuffer / TypedArray of the module bytes.
21
+ *
22
+ * Resets the cache — fallback measurements are usually very
23
+ * different from the real ones, so reusing them would produce a
24
+ * layout pop on the next paint.
25
+ */
26
+ async loadModule(source) {
27
+ const bytes = await fetchModuleBytes(source);
28
+ const { instance } = await WebAssembly.instantiate(bytes, {});
29
+ this.wasm = instance.exports;
30
+ this.cache.clear();
31
+ this.currentFontKey = null;
32
+ }
33
+ /**
34
+ * Load the bundled `text_shaper.wasm` shipped with this package.
35
+ * Equivalent to
36
+ *
37
+ * shaper.loadModule(new URL("../wasm/text_shaper.wasm",
38
+ * import.meta.url))
39
+ *
40
+ * In a Vite-built host the URL resolves to a hashed bundle asset;
41
+ * in Node, `fetch` (Node 18+) reads it from disk through the
42
+ * `file://` URL. SSR-only hosts can pass the bytes directly to
43
+ * `loadModule(...)` to skip the fetch hop.
44
+ */
45
+ static async loadBundled() {
46
+ const shaper = new WasmTextShaper();
47
+ const url = new URL("../wasm/text_shaper.wasm", import.meta.url);
48
+ await shaper.loadModule(url);
49
+ return shaper;
50
+ }
51
+ measure(text, font) {
52
+ const cacheKey = `${fontKey(font)}|${text}`;
53
+ const cached = this.cache.get(cacheKey);
54
+ if (cached) {
55
+ // Promote — Map preserves insertion order, so re-set on hit.
56
+ this.cache.delete(cacheKey);
57
+ this.cache.set(cacheKey, cached);
58
+ return cached;
59
+ }
60
+ const result = this.wasm
61
+ ? this.measureViaWasm(text, font, this.wasm)
62
+ : this.measureFallback(text, font);
63
+ if (this.cache.size >= this.cacheSize) {
64
+ // Evict oldest entry (insertion order is LRU order).
65
+ const oldest = this.cache.keys().next().value;
66
+ if (oldest !== undefined)
67
+ this.cache.delete(oldest);
68
+ }
69
+ this.cache.set(cacheKey, result);
70
+ return result;
71
+ }
72
+ shape(text, font) {
73
+ // No WASM glyph-id mapping — emit one synthetic glyph per code
74
+ // point so callers that decorate (underline, strikeout) have
75
+ // positions to work with.
76
+ const total = this.measure(text, font);
77
+ const perChar = text.length === 0 ? 0 : total.width / text.length;
78
+ const out = [];
79
+ for (let i = 0; i < text.length; i++) {
80
+ out.push({
81
+ glyphId: text.charCodeAt(i),
82
+ advance: perChar,
83
+ x: i * perChar,
84
+ y: 0,
85
+ });
86
+ }
87
+ return out;
88
+ }
89
+ /**
90
+ * Resolve a CSS font-family stack to an embedded font id (0=sans,
91
+ * 1=serif, 2=mono). Returns 0 when the module is single-font (no
92
+ * `resolveFont` export) or not yet loaded, so callers degrade to the
93
+ * default font transparently. The atlas keys glyphs by this id, so
94
+ * the same code point in two families gets two tiles.
95
+ */
96
+ resolveFontId(family, bold = false, italic = false) {
97
+ const wasm = this.wasm;
98
+ if (!wasm?.resolveFont)
99
+ return 0;
100
+ const bytes = this.textEncoder.encode(family);
101
+ const ptr = wasm.alloc(bytes.byteLength);
102
+ new Uint8Array(wasm.memory.buffer, ptr, bytes.byteLength).set(bytes);
103
+ const id = wasm.resolveFont(ptr, bytes.byteLength, bold ? 1 : 0, italic ? 1 : 0);
104
+ wasm.free(ptr, bytes.byteLength);
105
+ return id;
106
+ }
107
+ /**
108
+ * Pull per-glyph metrics (advance + tight bbox + UPM) from the WASM
109
+ * shaper for a single code point. Returns `null` if the loaded
110
+ * module doesn't expose `glyphMetrics` or before `loadModule()` has
111
+ * resolved. All values are in font units; the host scales via
112
+ * `fontSize / unitsPerEm` — same convention as `measure` uses
113
+ * internally. `fontId` selects the embedded font.
114
+ *
115
+ * The returned object is detached (plain object, not a memory
116
+ * view), so callers can keep it past further WASM calls.
117
+ */
118
+ glyphMetrics(codePoint, fontId = 0) {
119
+ const wasm = this.wasm;
120
+ if (!wasm?.glyphMetrics)
121
+ return null;
122
+ const ptr = wasm.glyphMetrics(fontId, codePoint);
123
+ const buffer = wasm.memory.buffer;
124
+ // 6 contiguous little-endian f32 (24 bytes). Read via DataView, not
125
+ // `new Float32Array(buffer, ptr, 6)`: the WASM ABI does not
126
+ // guarantee `ptr` is 4-byte aligned, and a typed-array view throws
127
+ // `RangeError: start offset … should be a multiple of 4` on an
128
+ // unaligned pointer. DataView has no alignment constraint. Guard the
129
+ // bounds so a stray pointer returns null instead of throwing.
130
+ if (ptr <= 0 || ptr + 24 > buffer.byteLength)
131
+ return null;
132
+ const dv = new DataView(buffer, ptr, 24);
133
+ return {
134
+ advance: dv.getFloat32(0, true),
135
+ bboxXMin: dv.getFloat32(4, true),
136
+ bboxYMin: dv.getFloat32(8, true),
137
+ bboxW: dv.getFloat32(12, true),
138
+ bboxH: dv.getFloat32(16, true),
139
+ unitsPerEm: dv.getFloat32(20, true),
140
+ };
141
+ }
142
+ /**
143
+ * Rasterise a single glyph as an MSDF tile. The bundled wasm uses
144
+ * the `fdsm` crate (pure-Rust msdfgen-style implementation) — three
145
+ * channels, 3°-equivalent corner detection, sign-correction
146
+ * post-pass. `atlasSize` is the tile edge in pixels (typical 32 /
147
+ * 48 / 64); `range` is the SDF range in atlas pixels (typically
148
+ * `atlasSize / 8`, so the shader has ~`range`px to soften the edge
149
+ * with `smoothstep`).
150
+ *
151
+ * Returns `null` when the loaded module doesn't expose
152
+ * `rasterizeGlyphMSDF`. Returns a buffer of zeros for missing or
153
+ * empty (whitespace) glyphs — the host shader reads zero as "fully
154
+ * outside" which is the correct visual outcome.
155
+ *
156
+ * The returned `data` is a **copy** of the WASM-side buffer so the
157
+ * tile survives subsequent WASM calls that may grow the arena.
158
+ */
159
+ rasterizeGlyphMSDF(codePoint, atlasSize, range, fontId = 0) {
160
+ const wasm = this.wasm;
161
+ if (!wasm?.rasterizeGlyphMSDF)
162
+ return null;
163
+ const ptr = wasm.rasterizeGlyphMSDF(fontId, codePoint, atlasSize, range);
164
+ const len = atlasSize * atlasSize * 3;
165
+ // Copy out of WASM memory into a standalone Uint8Array. `slice()`
166
+ // allocates fresh storage so the caller is safe even after
167
+ // subsequent allocs grow / move the WASM arena.
168
+ const view = new Uint8Array(wasm.memory.buffer, ptr, len);
169
+ const data = new Uint8Array(view); // copy
170
+ return { atlasSize, range, data };
171
+ }
172
+ /**
173
+ * Reset the WASM bump arena to zero — frees all transient
174
+ * allocations (font-family copies, measure inputs, MSDF tiles).
175
+ * Safe to call between batches; no-op if the loaded module doesn't
176
+ * expose `reset`. Hosts that hammer the atlas (large strings,
177
+ * many glyphs) should call this after each frame to avoid
178
+ * unbounded arena growth.
179
+ */
180
+ resetArena() {
181
+ this.wasm?.reset?.();
182
+ this.currentFontKey = null;
183
+ }
184
+ measureFallback(text, font) {
185
+ return { width: text.length * font.size * this.fallbackFactor };
186
+ }
187
+ measureViaWasm(text, font, wasm) {
188
+ // Update the WASM-side font only when it changes — the setFont
189
+ // call is the expensive one (the host engine has to re-resolve
190
+ // the font on every flip).
191
+ const fkey = fontKey(font);
192
+ if (fkey !== this.currentFontKey) {
193
+ const familyBytes = this.textEncoder.encode(font.family);
194
+ const familyPtr = wasm.alloc(familyBytes.byteLength);
195
+ const familyView = new Uint8Array(wasm.memory.buffer, familyPtr, familyBytes.byteLength);
196
+ familyView.set(familyBytes);
197
+ // The `measure()` path has no weight/style channel (ShaperFont is
198
+ // family+size only) — measure the regular face. The bold/italic
199
+ // glyph advances reach callers via the atlas path (`glyphMetrics`
200
+ // with an explicit fontId), which is what the WebGL2 backend uses.
201
+ wasm.setFont(familyPtr, familyBytes.byteLength, font.size, 0, 0);
202
+ wasm.free(familyPtr, familyBytes.byteLength);
203
+ this.currentFontKey = fkey;
204
+ }
205
+ const textBytes = this.textEncoder.encode(text);
206
+ const textPtr = wasm.alloc(textBytes.byteLength);
207
+ const textView = new Uint8Array(wasm.memory.buffer, textPtr, textBytes.byteLength);
208
+ textView.set(textBytes);
209
+ const width = wasm.measure(textPtr, textBytes.byteLength);
210
+ wasm.free(textPtr, textBytes.byteLength);
211
+ return { width };
212
+ }
213
+ }
214
+ const fontKey = (font) => `${font.family}|${font.size}|${font.weight ?? "normal"}|${font.style ?? "normal"}`;
215
+ const fetchModuleBytes = async (source) => {
216
+ if (source instanceof ArrayBuffer)
217
+ return source;
218
+ if (source instanceof Uint8Array) {
219
+ return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);
220
+ }
221
+ if (source instanceof Response)
222
+ return source.arrayBuffer();
223
+ // Node's WHATWG fetch refuses `file://` URLs (not implemented as
224
+ // of Node 22). Detect the protocol and read straight from disk
225
+ // so `loadBundled()` works in tests / SSR / CLI contexts.
226
+ const urlStr = typeof source === "string" ? source : source.href;
227
+ if (urlStr.startsWith("file:")) {
228
+ const { readFile } = await import("node:fs/promises");
229
+ const { fileURLToPath } = await import("node:url");
230
+ const path = fileURLToPath(urlStr);
231
+ const buf = await readFile(path);
232
+ return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
233
+ }
234
+ const res = await fetch(source);
235
+ if (!res.ok) {
236
+ throw new Error(`WasmTextShaper.loadModule: fetch failed (${res.status})`);
237
+ }
238
+ return res.arrayBuffer();
239
+ };
240
+ //# sourceMappingURL=wasm-text-shaper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-text-shaper.js","sourceRoot":"","sources":["../src/wasm-text-shaper.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@oh-just-another/text-wasm",
3
+ "version": "0.57.0",
4
+ "description": "WASM text-shaping backend for the diagram renderer.",
5
+ "license": "MIT",
6
+ "author": "Rustam Garifulin <rustam@n69.in>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/oh-just-another/diagram.git",
10
+ "directory": "packages/text-wasm"
11
+ },
12
+ "homepage": "https://github.com/oh-just-another/diagram#readme",
13
+ "bugs": "https://github.com/oh-just-another/diagram/issues",
14
+ "keywords": [
15
+ "diagram",
16
+ "canvas",
17
+ "svg",
18
+ "editor",
19
+ "graph",
20
+ "drawing"
21
+ ],
22
+ "type": "module",
23
+ "main": "./dist/index.js",
24
+ "module": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js"
30
+ }
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "wasm",
35
+ "README.md",
36
+ "CHANGELOG.md"
37
+ ],
38
+ "sideEffects": false,
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "dependencies": {
43
+ "@oh-just-another/renderer-core": "0.57.0"
44
+ },
45
+ "scripts": {
46
+ "build": "tsc -b tsconfig.build.json",
47
+ "typecheck": "tsc --noEmit",
48
+ "test": "vitest run",
49
+ "test:watch": "vitest",
50
+ "lint": "eslint src tests",
51
+ "clean": "rm -rf dist *.tsbuildinfo"
52
+ }
53
+ }
Binary file