@xincli/opentui-core 0.4.6 → 0.4.7
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/LICENSE +21 -0
- package/NativeSpanFeed.d.ts +52 -0
- package/README.md +0 -0
- package/Renderable.d.ts +346 -0
- package/animation/Timeline.d.ts +126 -0
- package/ansi.d.ts +17 -0
- package/audio.d.ts +89 -0
- package/buffer.d.ts +113 -0
- package/console.d.ts +146 -0
- package/edit-buffer.d.ts +97 -0
- package/editor-view.d.ts +72 -0
- package/index-m1y9e40w.js +10045 -0
- package/index-m1y9e40w.js.map +32 -0
- package/index-sqk4ajdf.js +16121 -0
- package/index-sqk4ajdf.js.map +58 -0
- package/index.d.ts +24 -0
- package/index.js +11709 -0
- package/index.js.map +35 -0
- package/lib/KeyHandler.d.ts +61 -0
- package/lib/RGBA.d.ts +42 -0
- package/lib/ascii.font.d.ts +508 -0
- package/lib/border.d.ts +51 -0
- package/lib/bunfs.d.ts +7 -0
- package/lib/clipboard.d.ts +15 -0
- package/lib/clock.d.ts +15 -0
- package/lib/data-paths.d.ts +26 -0
- package/lib/debounce.d.ts +42 -0
- package/lib/detect-links.d.ts +6 -0
- package/lib/env.d.ts +42 -0
- package/lib/extmarks-history.d.ts +17 -0
- package/lib/extmarks.d.ts +90 -0
- package/lib/hast-styled-text.d.ts +17 -0
- package/lib/index.d.ts +22 -0
- package/lib/keybinding.internal.d.ts +33 -0
- package/lib/objects-in-viewport.d.ts +24 -0
- package/lib/output.capture.d.ts +24 -0
- package/lib/parse.keypress-kitty.d.ts +3 -0
- package/lib/parse.keypress.d.ts +27 -0
- package/lib/parse.mouse.d.ts +30 -0
- package/lib/paste.d.ts +7 -0
- package/lib/queue.d.ts +15 -0
- package/lib/render-geometry.d.ts +8 -0
- package/lib/renderable.validations.d.ts +12 -0
- package/lib/scroll-acceleration.d.ts +43 -0
- package/lib/selection.d.ts +64 -0
- package/lib/singleton.d.ts +8 -0
- package/lib/stdin-parser.d.ts +90 -0
- package/lib/styled-text.d.ts +63 -0
- package/lib/terminal-capability-detection.d.ts +32 -0
- package/lib/terminal-palette.d.ts +65 -0
- package/lib/tree-sitter/assets/update.d.ts +12 -0
- package/lib/tree-sitter/client.d.ts +65 -0
- package/lib/tree-sitter/default-parsers.d.ts +2 -0
- package/lib/tree-sitter/download-utils.d.ts +21 -0
- package/lib/tree-sitter/index.d.ts +7 -0
- package/lib/tree-sitter/parser.worker.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +53 -0
- package/lib/tree-sitter/resolve-ft.d.ts +5 -0
- package/lib/tree-sitter/types.d.ts +185 -0
- package/lib/tree-sitter/update-assets.d.ts +3 -0
- package/lib/tree-sitter/update-assets.js +379 -0
- package/lib/tree-sitter/update-assets.js.map +12 -0
- package/lib/tree-sitter-styled-text.d.ts +16 -0
- package/lib/validate-dir-name.d.ts +1 -0
- package/lib/yoga.options.d.ts +32 -0
- package/native-event-worker-repro.worker.d.ts +1 -0
- package/package.json +52 -74
- package/parser.worker.js +1399 -0
- package/parser.worker.js.map +20 -0
- package/platform/ffi.d.ts +129 -0
- package/platform/runtime.d.ts +14 -0
- package/platform/test.d.ts +12 -0
- package/platform/worker.d.ts +26 -0
- package/platform/worker.node-test.d.ts +1 -0
- package/plugins/core-slot.d.ts +72 -0
- package/plugins/registry.d.ts +42 -0
- package/plugins/types.d.ts +34 -0
- package/post/effects.d.ts +147 -0
- package/post/filters.d.ts +65 -0
- package/post/matrices.d.ts +20 -0
- package/renderables/ASCIIFont.d.ts +52 -0
- package/renderables/Box.d.ts +85 -0
- package/renderables/Code.d.ts +97 -0
- package/renderables/Diff.d.ts +147 -0
- package/renderables/EditBufferRenderable.d.ts +238 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +72 -0
- package/renderables/LineNumberRenderable.d.ts +78 -0
- package/renderables/Markdown.d.ts +255 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +128 -0
- package/renderables/Select.d.ts +122 -0
- package/renderables/Slider.d.ts +47 -0
- package/renderables/TabSelect.d.ts +98 -0
- package/renderables/Text.d.ts +36 -0
- package/renderables/TextBufferRenderable.d.ts +107 -0
- package/renderables/TextNode.d.ts +92 -0
- package/renderables/TextTable.d.ts +154 -0
- package/renderables/Textarea.d.ts +65 -0
- package/renderables/TimeToFirstDraw.d.ts +24 -0
- package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
- package/renderables/composition/VRenderable.d.ts +16 -0
- package/renderables/composition/constructs.d.ts +35 -0
- package/renderables/composition/vnode.d.ts +46 -0
- package/renderables/index.d.ts +23 -0
- package/renderables/markdown-parser.d.ts +11 -0
- package/renderer-theme-mode.d.ts +29 -0
- package/renderer.d.ts +601 -0
- package/runtime-plugin-support-configure.d.ts +4 -0
- package/runtime-plugin-support-configure.js +36 -0
- package/runtime-plugin-support-configure.js.map +1 -0
- package/runtime-plugin-support-configure.node.js +15 -0
- package/runtime-plugin-support.d.ts +3 -0
- package/runtime-plugin-support.js +5 -0
- package/runtime-plugin-support.js.map +1 -0
- package/runtime-plugin-support.node.js +15 -0
- package/runtime-plugin.d.ts +16 -0
- package/runtime-plugin.js +473 -0
- package/runtime-plugin.js.map +1 -0
- package/runtime-plugin.node.js +15 -0
- package/syntax-style.d.ts +61 -0
- package/testing/bun-test-node.d.ts +87 -0
- package/testing/manual-clock.d.ts +17 -0
- package/testing/mock-keys.d.ts +81 -0
- package/testing/mock-mouse.d.ts +38 -0
- package/testing/mock-tree-sitter-client.d.ts +27 -0
- package/testing/spy.d.ts +7 -0
- package/testing/terminal-capabilities.d.ts +7 -0
- package/testing/test-recorder.d.ts +61 -0
- package/testing/test-renderer.d.ts +54 -0
- package/testing/test-streams.d.ts +12 -0
- package/testing.d.ts +8 -0
- package/testing.js +1004 -0
- package/testing.js.map +18 -0
- package/tests/yoga-upstream/tools/MeasureCounter.d.ts +16 -0
- package/tests/yoga-upstream/tools/utils.d.ts +11 -0
- package/text-buffer-view.d.ts +42 -0
- package/text-buffer.d.ts +66 -0
- package/types.d.ts +175 -0
- package/utils.d.ts +14 -0
- package/yoga.d.ts +437 -0
- package/yoga.js +193 -0
- package/yoga.js.map +9 -0
- package/zig-structs.d.ts +256 -0
- package/zig.d.ts +496 -0
- package/dev/keypress-debug-renderer.ts +0 -148
- package/dev/keypress-debug.ts +0 -43
- package/dev/print-env-vars.ts +0 -32
- package/dev/test-tmux-graphics-334.sh +0 -68
- package/dev/test-tmux-theme-queries.sh +0 -151
- package/dev/thai-debug-test.ts +0 -68
- package/dev/theme-mode.ts +0 -290
- package/docs/development.md +0 -144
- package/prebuilt/aarch64-android/libopentui.so +0 -0
- package/scripts/build-android.ts +0 -226
- package/scripts/build-native-termux.sh +0 -525
- package/scripts/build.ts +0 -530
- package/scripts/dist-test.ts +0 -312
- package/scripts/package-prebuilt.ts +0 -110
- package/scripts/publish.ts +0 -60
- package/scripts/test-node-hook.mjs +0 -16
- package/scripts/test-node.ts +0 -241
- package/scripts/vendor-deps.sh +0 -73
- package/src/NativeSpanFeed.ts +0 -375
- package/src/Renderable.ts +0 -1878
- package/src/__snapshots__/buffer.test.ts.snap +0 -28
- package/src/animation/Timeline.test.ts +0 -2709
- package/src/animation/Timeline.ts +0 -598
- package/src/ansi.ts +0 -22
- package/src/audio.ts +0 -479
- package/src/benchmark/attenuation-benchmark.ts +0 -81
- package/src/benchmark/audio-playback-benchmark.ts +0 -344
- package/src/benchmark/box-draw-benchmark.ts +0 -1042
- package/src/benchmark/colormatrix-benchmark.ts +0 -123
- package/src/benchmark/gain-benchmark.ts +0 -80
- package/src/benchmark/latest-all-bench-run.json +0 -707
- package/src/benchmark/latest-async-bench-run.json +0 -336
- package/src/benchmark/latest-default-bench-run.json +0 -657
- package/src/benchmark/latest-large-bench-run.json +0 -707
- package/src/benchmark/latest-quick-bench-run.json +0 -207
- package/src/benchmark/layout-benchmark.ts +0 -2547
- package/src/benchmark/markdown-benchmark.ts +0 -1796
- package/src/benchmark/native-span-feed-async-benchmark.ts +0 -355
- package/src/benchmark/native-span-feed-benchmark.md +0 -56
- package/src/benchmark/native-span-feed-benchmark.ts +0 -596
- package/src/benchmark/native-span-feed-compare.ts +0 -280
- package/src/benchmark/render-traversal-benchmark.ts +0 -928
- package/src/benchmark/text-buffer-render-benchmark.ts +0 -874
- package/src/benchmark/text-table-benchmark.ts +0 -948
- package/src/buffer.test.ts +0 -292
- package/src/buffer.ts +0 -564
- package/src/console.test.ts +0 -629
- package/src/console.ts +0 -1253
- package/src/edit-buffer.test.ts +0 -1852
- package/src/edit-buffer.ts +0 -417
- package/src/editor-view.test.ts +0 -1056
- package/src/editor-view.ts +0 -290
- package/src/index.ts +0 -25
- package/src/lib/KeyHandler.integration.test.ts +0 -292
- package/src/lib/KeyHandler.stopPropagation.test.ts +0 -289
- package/src/lib/KeyHandler.test.ts +0 -662
- package/src/lib/KeyHandler.ts +0 -222
- package/src/lib/RGBA.test.ts +0 -60
- package/src/lib/RGBA.ts +0 -343
- package/src/lib/ascii.font.ts +0 -330
- package/src/lib/border.test.ts +0 -83
- package/src/lib/border.ts +0 -170
- package/src/lib/bunfs.test.ts +0 -27
- package/src/lib/bunfs.ts +0 -18
- package/src/lib/clipboard.test.ts +0 -63
- package/src/lib/clipboard.ts +0 -41
- package/src/lib/clock.ts +0 -35
- package/src/lib/data-paths.test.ts +0 -133
- package/src/lib/data-paths.ts +0 -109
- package/src/lib/debounce.ts +0 -106
- package/src/lib/detect-links.test.ts +0 -98
- package/src/lib/detect-links.ts +0 -56
- package/src/lib/env.test.ts +0 -228
- package/src/lib/env.ts +0 -209
- package/src/lib/extmarks-history.ts +0 -51
- package/src/lib/extmarks-multiwidth.test.ts +0 -324
- package/src/lib/extmarks.test.ts +0 -3547
- package/src/lib/extmarks.ts +0 -861
- package/src/lib/fonts/block.json +0 -405
- package/src/lib/fonts/grid.json +0 -265
- package/src/lib/fonts/huge.json +0 -741
- package/src/lib/fonts/pallet.json +0 -314
- package/src/lib/fonts/shade.json +0 -591
- package/src/lib/fonts/slick.json +0 -321
- package/src/lib/fonts/tiny.json +0 -69
- package/src/lib/hast-styled-text.ts +0 -59
- package/src/lib/index.ts +0 -22
- package/src/lib/keybinding.internal.test.ts +0 -342
- package/src/lib/keybinding.internal.ts +0 -182
- package/src/lib/objects-in-viewport.test.ts +0 -789
- package/src/lib/objects-in-viewport.ts +0 -153
- package/src/lib/output.capture.ts +0 -58
- package/src/lib/parse.keypress-kitty.protocol.test.ts +0 -347
- package/src/lib/parse.keypress-kitty.test.ts +0 -712
- package/src/lib/parse.keypress-kitty.ts +0 -470
- package/src/lib/parse.keypress.test.ts +0 -2020
- package/src/lib/parse.keypress.ts +0 -480
- package/src/lib/parse.mouse.test.ts +0 -552
- package/src/lib/parse.mouse.ts +0 -232
- package/src/lib/paste.ts +0 -18
- package/src/lib/queue.ts +0 -65
- package/src/lib/render-geometry.ts +0 -36
- package/src/lib/renderable.validations.test.ts +0 -87
- package/src/lib/renderable.validations.ts +0 -83
- package/src/lib/scroll-acceleration.ts +0 -98
- package/src/lib/selection.ts +0 -261
- package/src/lib/singleton.ts +0 -34
- package/src/lib/stdin-parser.test.ts +0 -2439
- package/src/lib/stdin-parser.ts +0 -2007
- package/src/lib/styled-text.ts +0 -178
- package/src/lib/terminal-capability-detection.test.ts +0 -226
- package/src/lib/terminal-capability-detection.ts +0 -98
- package/src/lib/terminal-palette.test.ts +0 -954
- package/src/lib/terminal-palette.ts +0 -441
- package/src/lib/tree-sitter/assets/README.md +0 -119
- package/src/lib/tree-sitter/assets/update.ts +0 -360
- package/src/lib/tree-sitter/assets.d.ts +0 -9
- package/src/lib/tree-sitter/cache.test.ts +0 -291
- package/src/lib/tree-sitter/client.test.ts +0 -1434
- package/src/lib/tree-sitter/client.ts +0 -847
- package/src/lib/tree-sitter/default-parsers.ts +0 -133
- package/src/lib/tree-sitter/download-utils.ts +0 -148
- package/src/lib/tree-sitter/index.ts +0 -75
- package/src/lib/tree-sitter/parser.worker.ts +0 -1098
- package/src/lib/tree-sitter/parsers-config.ts +0 -81
- package/src/lib/tree-sitter/resolve-ft.test.ts +0 -55
- package/src/lib/tree-sitter/resolve-ft.ts +0 -189
- package/src/lib/tree-sitter/types.ts +0 -132
- package/src/lib/tree-sitter/update-assets.ts +0 -10
- package/src/lib/tree-sitter-styled-text.test.ts +0 -1253
- package/src/lib/tree-sitter-styled-text.ts +0 -314
- package/src/lib/validate-dir-name.ts +0 -55
- package/src/lib/yoga.options.test.ts +0 -628
- package/src/lib/yoga.options.ts +0 -346
- package/src/native-event-worker-repro.test.ts +0 -48
- package/src/native-event-worker-repro.worker.ts +0 -9
- package/src/native-handle.test.ts +0 -221
- package/src/platform/ffi.test.ts +0 -516
- package/src/platform/ffi.ts +0 -653
- package/src/platform/runtime.test.ts +0 -52
- package/src/platform/runtime.ts +0 -121
- package/src/platform/test.ts +0 -45
- package/src/platform/worker-handler-cleanup.fixture.ts +0 -12
- package/src/platform/worker-onmessage-startup.fixture.ts +0 -10
- package/src/platform/worker-startup.fixture.ts +0 -9
- package/src/platform/worker.node-test.ts +0 -153
- package/src/platform/worker.ts +0 -425
- package/src/plugins/core-slot.ts +0 -579
- package/src/plugins/registry.ts +0 -402
- package/src/plugins/types.ts +0 -46
- package/src/post/effects.ts +0 -948
- package/src/post/filters.ts +0 -512
- package/src/post/matrices.ts +0 -288
- package/src/renderables/ASCIIFont.ts +0 -219
- package/src/renderables/Box.test.ts +0 -474
- package/src/renderables/Box.ts +0 -353
- package/src/renderables/Code.test.ts +0 -2388
- package/src/renderables/Code.ts +0 -555
- package/src/renderables/Diff.regression.test.ts +0 -381
- package/src/renderables/Diff.test.ts +0 -3212
- package/src/renderables/Diff.ts +0 -1278
- package/src/renderables/EditBufferRenderable.test.ts +0 -288
- package/src/renderables/EditBufferRenderable.ts +0 -1152
- package/src/renderables/FrameBuffer.ts +0 -47
- package/src/renderables/Input.test.ts +0 -1310
- package/src/renderables/Input.ts +0 -273
- package/src/renderables/LineNumberRenderable.ts +0 -725
- package/src/renderables/Markdown.ts +0 -2144
- package/src/renderables/ScrollBar.ts +0 -423
- package/src/renderables/ScrollBox.ts +0 -903
- package/src/renderables/Select.test.ts +0 -1134
- package/src/renderables/Select.ts +0 -535
- package/src/renderables/Slider.test.ts +0 -456
- package/src/renderables/Slider.ts +0 -342
- package/src/renderables/TabSelect.test.ts +0 -238
- package/src/renderables/TabSelect.ts +0 -447
- package/src/renderables/Text.selection-buffer.test.ts +0 -118
- package/src/renderables/Text.test.ts +0 -2662
- package/src/renderables/Text.ts +0 -147
- package/src/renderables/TextBufferRenderable.ts +0 -504
- package/src/renderables/TextNode.test.ts +0 -1137
- package/src/renderables/TextNode.ts +0 -379
- package/src/renderables/TextTable.test.ts +0 -1411
- package/src/renderables/TextTable.ts +0 -1434
- package/src/renderables/Textarea.ts +0 -425
- package/src/renderables/TimeToFirstDraw.ts +0 -89
- package/src/renderables/__snapshots__/Code.test.ts.snap +0 -13
- package/src/renderables/__snapshots__/Diff.test.ts.snap +0 -785
- package/src/renderables/__snapshots__/Text.test.ts.snap +0 -421
- package/src/renderables/__snapshots__/TextTable.test.ts.snap +0 -215
- package/src/renderables/__tests__/Code.test.ts +0 -55
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox-simple.test.ts +0 -144
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +0 -827
- package/src/renderables/__tests__/LineNumberRenderable.test.ts +0 -1906
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
- package/src/renderables/__tests__/Markdown.code-colors.test.ts +0 -288
- package/src/renderables/__tests__/Markdown.test.ts +0 -4175
- package/src/renderables/__tests__/MultiRenderable.selection.test.ts +0 -87
- package/src/renderables/__tests__/Textarea.buffer.test.ts +0 -683
- package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +0 -675
- package/src/renderables/__tests__/Textarea.editing.test.ts +0 -2120
- package/src/renderables/__tests__/Textarea.error-handling.test.ts +0 -35
- package/src/renderables/__tests__/Textarea.events.test.ts +0 -738
- package/src/renderables/__tests__/Textarea.highlights.test.ts +0 -590
- package/src/renderables/__tests__/Textarea.keybinding.test.ts +0 -3275
- package/src/renderables/__tests__/Textarea.paste.test.ts +0 -357
- package/src/renderables/__tests__/Textarea.rendering.test.ts +0 -1927
- package/src/renderables/__tests__/Textarea.scroll.test.ts +0 -733
- package/src/renderables/__tests__/Textarea.selection.test.ts +0 -1589
- package/src/renderables/__tests__/Textarea.stress.test.ts +0 -670
- package/src/renderables/__tests__/Textarea.undo-redo.test.ts +0 -383
- package/src/renderables/__tests__/Textarea.visual-lines.test.ts +0 -310
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.code.test.ts.snap +0 -221
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox-simple.test.ts.snap +0 -89
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.scrollbox.test.ts.snap +0 -457
- package/src/renderables/__tests__/__snapshots__/LineNumberRenderable.test.ts.snap +0 -158
- package/src/renderables/__tests__/__snapshots__/Textarea.rendering.test.ts.snap +0 -387
- package/src/renderables/__tests__/markdown-parser.test.ts +0 -241
- package/src/renderables/__tests__/renderable-test-utils.ts +0 -60
- package/src/renderables/composition/README.md +0 -8
- package/src/renderables/composition/VRenderable.ts +0 -32
- package/src/renderables/composition/constructs.ts +0 -127
- package/src/renderables/composition/vnode.ts +0 -277
- package/src/renderables/index.ts +0 -23
- package/src/renderables/markdown-parser.ts +0 -79
- package/src/renderer-theme-mode.ts +0 -199
- package/src/renderer.ts +0 -4975
- package/src/runtime-plugin-support-configure.ts +0 -63
- package/src/runtime-plugin-support.ts +0 -13
- package/src/runtime-plugin.ts +0 -626
- package/src/specs/terminal-startup.md +0 -64
- package/src/syntax-style.test.ts +0 -841
- package/src/syntax-style.ts +0 -274
- package/src/testing/README.md +0 -219
- package/src/testing/bun-test-node.ts +0 -880
- package/src/testing/capture-spans.test.ts +0 -216
- package/src/testing/integration.test.ts +0 -276
- package/src/testing/manual-clock.ts +0 -117
- package/src/testing/mock-keys.test.ts +0 -1378
- package/src/testing/mock-keys.ts +0 -457
- package/src/testing/mock-mouse.test.ts +0 -218
- package/src/testing/mock-mouse.ts +0 -247
- package/src/testing/mock-tree-sitter-client.ts +0 -81
- package/src/testing/spy.ts +0 -13
- package/src/testing/terminal-capabilities.ts +0 -47
- package/src/testing/test-recorder.test.ts +0 -410
- package/src/testing/test-recorder.ts +0 -133
- package/src/testing/test-renderer.ts +0 -375
- package/src/testing/test-renderer.wait.test.ts +0 -278
- package/src/testing/test-streams.ts +0 -31
- package/src/testing.ts +0 -9
- package/src/tests/__snapshots__/absolute-positioning.snapshot.test.ts.snap +0 -481
- package/src/tests/__snapshots__/renderable.snapshot.test.ts.snap +0 -19
- package/src/tests/__snapshots__/scrollbox.test.ts.snap +0 -29
- package/src/tests/absolute-positioning.snapshot.test.ts +0 -638
- package/src/tests/allocator-stats.test.ts +0 -53
- package/src/tests/audio.test.ts +0 -303
- package/src/tests/destroy-during-render.test.ts +0 -200
- package/src/tests/destroy-on-exit.fixture.ts +0 -36
- package/src/tests/destroy-on-exit.test.ts +0 -62
- package/src/tests/ffi-borrowed-pointer-callsites.test.ts +0 -153
- package/src/tests/hover-cursor.test.ts +0 -98
- package/src/tests/native-backed-measurement-lifecycle.test.ts +0 -133
- package/src/tests/native-backed-measurement-parity.test.ts +0 -322
- package/src/tests/native-span-feed-async.test.ts +0 -173
- package/src/tests/native-span-feed-close.test.ts +0 -120
- package/src/tests/native-span-feed-coverage.test.ts +0 -227
- package/src/tests/native-span-feed-edge-cases.test.ts +0 -384
- package/src/tests/native-span-feed-use-after-free.test.ts +0 -45
- package/src/tests/opacity.test.ts +0 -123
- package/src/tests/renderable.snapshot.test.ts +0 -524
- package/src/tests/renderable.test.ts +0 -1851
- package/src/tests/renderer.clock.test.ts +0 -270
- package/src/tests/renderer.console-startup.test.ts +0 -2151
- package/src/tests/renderer.control.test.ts +0 -458
- package/src/tests/renderer.core-slot-binding.test.ts +0 -962
- package/src/tests/renderer.cursor.test.ts +0 -26
- package/src/tests/renderer.custom-stdout.test.ts +0 -1112
- package/src/tests/renderer.destroy-during-render.test.ts +0 -147
- package/src/tests/renderer.focus-restore.test.ts +0 -257
- package/src/tests/renderer.focus.test.ts +0 -329
- package/src/tests/renderer.idle.test.ts +0 -219
- package/src/tests/renderer.input.test.ts +0 -2615
- package/src/tests/renderer.kitty-flags.test.ts +0 -195
- package/src/tests/renderer.lifecycle.test.ts +0 -34
- package/src/tests/renderer.mouse.test.ts +0 -1315
- package/src/tests/renderer.notifications.test.ts +0 -27
- package/src/tests/renderer.palette.test.ts +0 -1199
- package/src/tests/renderer.remote.test.ts +0 -247
- package/src/tests/renderer.render-stats.test.ts +0 -146
- package/src/tests/renderer.scrollback-surface.test.ts +0 -474
- package/src/tests/renderer.selection.test.ts +0 -138
- package/src/tests/renderer.slot-registry.test.ts +0 -684
- package/src/tests/renderer.tracker.test.ts +0 -202
- package/src/tests/renderer.useMouse.test.ts +0 -83
- package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +0 -76
- package/src/tests/runtime-plugin-node-modules-import-like-string.fixture.ts +0 -48
- package/src/tests/runtime-plugin-node-modules-mjs.fixture.ts +0 -43
- package/src/tests/runtime-plugin-node-modules-no-bare-rewrite.fixture.ts +0 -67
- package/src/tests/runtime-plugin-node-modules-package-type-cache.fixture.ts +0 -72
- package/src/tests/runtime-plugin-node-modules-runtime-specifier.fixture.ts +0 -44
- package/src/tests/runtime-plugin-node-modules-scoped-package-bare-rewrite.fixture.ts +0 -85
- package/src/tests/runtime-plugin-path-alias.fixture.ts +0 -43
- package/src/tests/runtime-plugin-resolve-roots.fixture.ts +0 -65
- package/src/tests/runtime-plugin-support-configure.fixture.ts +0 -31
- package/src/tests/runtime-plugin-support-late-addition.fixture.ts +0 -17
- package/src/tests/runtime-plugin-support.fixture.ts +0 -11
- package/src/tests/runtime-plugin-support.test.ts +0 -54
- package/src/tests/runtime-plugin-windows-file-url.fixture.ts +0 -30
- package/src/tests/runtime-plugin.fixture.ts +0 -40
- package/src/tests/runtime-plugin.test.ts +0 -369
- package/src/tests/scrollbox-culling-bug.test.ts +0 -114
- package/src/tests/scrollbox-hitgrid-resize.test.ts +0 -136
- package/src/tests/scrollbox-hitgrid.test.ts +0 -909
- package/src/tests/scrollbox.test.ts +0 -1895
- package/src/tests/wrap-resize-perf.test.ts +0 -276
- package/src/tests/yoga-api-coverage.test.ts +0 -409
- package/src/tests/yoga-callback-stress.test.ts +0 -122
- package/src/tests/yoga-ffi.test.ts +0 -117
- package/src/tests/yoga-setters.test.ts +0 -921
- package/src/tests/yoga-upstream/YGAlignBaselineTest.test.ts +0 -124
- package/src/tests/yoga-upstream/YGComputedBorderTest.test.ts +0 -27
- package/src/tests/yoga-upstream/YGComputedMarginTest.test.ts +0 -27
- package/src/tests/yoga-upstream/YGComputedPaddingTest.test.ts +0 -27
- package/src/tests/yoga-upstream/YGDirtiedTest.test.ts +0 -157
- package/src/tests/yoga-upstream/YGErrataTest.test.ts +0 -40
- package/src/tests/yoga-upstream/YGFlexBasisAuto.test.ts +0 -23
- package/src/tests/yoga-upstream/YGHasNewLayout.test.ts +0 -81
- package/src/tests/yoga-upstream/YGMeasureCacheTest.test.ts +0 -31
- package/src/tests/yoga-upstream/YGMeasureTest.test.ts +0 -70
- package/src/tests/yoga-upstream/generated/YGAbsolutePositionTest.test.ts +0 -1864
- package/src/tests/yoga-upstream/generated/YGAlignContentTest.test.ts +0 -5829
- package/src/tests/yoga-upstream/generated/YGAlignItemsTest.test.ts +0 -2444
- package/src/tests/yoga-upstream/generated/YGAlignSelfTest.test.ts +0 -293
- package/src/tests/yoga-upstream/generated/YGAndroidNewsFeed.test.ts +0 -315
- package/src/tests/yoga-upstream/generated/YGAspectRatioTest.test.ts +0 -231
- package/src/tests/yoga-upstream/generated/YGAutoTest.test.ts +0 -347
- package/src/tests/yoga-upstream/generated/YGBorderTest.test.ts +0 -256
- package/src/tests/yoga-upstream/generated/YGBoxSizingTest.test.ts +0 -2747
- package/src/tests/yoga-upstream/generated/YGDimensionTest.test.ts +0 -129
- package/src/tests/yoga-upstream/generated/YGDisplayContentsTest.test.ts +0 -109
- package/src/tests/yoga-upstream/generated/YGDisplayTest.test.ts +0 -1097
- package/src/tests/yoga-upstream/generated/YGFlexDirectionTest.test.ts +0 -4562
- package/src/tests/yoga-upstream/generated/YGFlexTest.test.ts +0 -677
- package/src/tests/yoga-upstream/generated/YGFlexWrapTest.test.ts +0 -2071
- package/src/tests/yoga-upstream/generated/YGGapTest.test.ts +0 -3303
- package/src/tests/yoga-upstream/generated/YGIntrinsicSizeTest.test.ts +0 -582
- package/src/tests/yoga-upstream/generated/YGJustifyContentTest.test.ts +0 -2150
- package/src/tests/yoga-upstream/generated/YGMarginTest.test.ts +0 -1963
- package/src/tests/yoga-upstream/generated/YGMinMaxDimensionTest.test.ts +0 -1446
- package/src/tests/yoga-upstream/generated/YGPaddingTest.test.ts +0 -354
- package/src/tests/yoga-upstream/generated/YGPercentageTest.test.ts +0 -1760
- package/src/tests/yoga-upstream/generated/YGRoundingTest.test.ts +0 -1161
- package/src/tests/yoga-upstream/generated/YGSizeOverflowTest.test.ts +0 -207
- package/src/tests/yoga-upstream/generated/YGStaticPositionTest.test.ts +0 -6338
- package/src/tests/yoga-upstream/tools/MeasureCounter.ts +0 -54
- package/src/tests/yoga-upstream/tools/utils.ts +0 -81
- package/src/text-buffer-view.test.ts +0 -722
- package/src/text-buffer-view.ts +0 -193
- package/src/text-buffer.test.ts +0 -512
- package/src/text-buffer.ts +0 -250
- package/src/types.ts +0 -199
- package/src/utils.ts +0 -88
- package/src/yoga.ts +0 -1146
- package/src/zig/ansi.zig +0 -502
- package/src/zig/audio.zig +0 -1206
- package/src/zig/bench/README.md +0 -50
- package/src/zig/bench/buffer-color-blending_bench.zig +0 -350
- package/src/zig/bench/buffer-draw-box_bench.zig +0 -786
- package/src/zig/bench/buffer-draw-text-buffer_bench.zig +0 -894
- package/src/zig/bench/edit-buffer_bench.zig +0 -476
- package/src/zig/bench/editor-view_bench.zig +0 -169
- package/src/zig/bench/native-span-feed_bench.zig +0 -107
- package/src/zig/bench/rope-markers_bench.zig +0 -713
- package/src/zig/bench/rope_bench.zig +0 -514
- package/src/zig/bench/styled-text_bench.zig +0 -476
- package/src/zig/bench/text-buffer-coords_bench.zig +0 -362
- package/src/zig/bench/text-buffer-view_bench.zig +0 -459
- package/src/zig/bench/text-chunk-graphemes_bench.zig +0 -272
- package/src/zig/bench/utf8_bench.zig +0 -799
- package/src/zig/bench-utils.zig +0 -431
- package/src/zig/bench.zig +0 -223
- package/src/zig/buffer-methods.zig +0 -215
- package/src/zig/buffer.zig +0 -2515
- package/src/zig/build.zig +0 -700
- package/src/zig/build.zig.zon +0 -19
- package/src/zig/edit-buffer.zig +0 -900
- package/src/zig/editor-view.zig +0 -812
- package/src/zig/event-bus.zig +0 -28
- package/src/zig/event-emitter.zig +0 -65
- package/src/zig/file-logger.zig +0 -92
- package/src/zig/grapheme.zig +0 -838
- package/src/zig/handles.zig +0 -267
- package/src/zig/lib.zig +0 -2813
- package/src/zig/link.zig +0 -349
- package/src/zig/logger.zig +0 -43
- package/src/zig/mem-registry.zig +0 -126
- package/src/zig/miniaudio_shim.c +0 -21
- package/src/zig/native-renderable.zig +0 -112
- package/src/zig/native-span-feed-bench-lib.zig +0 -7
- package/src/zig/native-span-feed.zig +0 -747
- package/src/zig/renderer-output.zig +0 -677
- package/src/zig/renderer.zig +0 -2106
- package/src/zig/rope.zig +0 -1220
- package/src/zig/split-scrollback.zig +0 -88
- package/src/zig/syntax-style.zig +0 -174
- package/src/zig/terminal.zig +0 -1652
- package/src/zig/test.zig +0 -82
- package/src/zig/tests/README.md +0 -18
- package/src/zig/tests/ansi_test.zig +0 -18
- package/src/zig/tests/audio_test.zig +0 -439
- package/src/zig/tests/buffer-methods_test.zig +0 -1111
- package/src/zig/tests/buffer_test.zig +0 -2926
- package/src/zig/tests/edit-buffer-history_test.zig +0 -299
- package/src/zig/tests/edit-buffer_test.zig +0 -1688
- package/src/zig/tests/editor-view_test.zig +0 -3454
- package/src/zig/tests/event-emitter_test.zig +0 -249
- package/src/zig/tests/grapheme_test.zig +0 -1329
- package/src/zig/tests/handles_test.zig +0 -123
- package/src/zig/tests/link_test.zig +0 -220
- package/src/zig/tests/mem-registry_test.zig +0 -473
- package/src/zig/tests/memory_leak_regression_test.zig +0 -234
- package/src/zig/tests/native-renderable_test.zig +0 -16
- package/src/zig/tests/native-span-feed_test.zig +0 -1266
- package/src/zig/tests/renderer_test.zig +0 -2604
- package/src/zig/tests/rope-nested_test.zig +0 -712
- package/src/zig/tests/rope_fuzz_test.zig +0 -238
- package/src/zig/tests/rope_test.zig +0 -2362
- package/src/zig/tests/segment-merge.test.zig +0 -148
- package/src/zig/tests/split-scrollback_test.zig +0 -70
- package/src/zig/tests/syntax-style_test.zig +0 -558
- package/src/zig/tests/terminal_test.zig +0 -1489
- package/src/zig/tests/test-renderer.zig +0 -126
- package/src/zig/tests/text-buffer-drawing_test.zig +0 -3291
- package/src/zig/tests/text-buffer-highlights_test.zig +0 -706
- package/src/zig/tests/text-buffer-iterators_test.zig +0 -776
- package/src/zig/tests/text-buffer-segment_test.zig +0 -320
- package/src/zig/tests/text-buffer-selection_test.zig +0 -1056
- package/src/zig/tests/text-buffer-selection_viewport_test.zig +0 -358
- package/src/zig/tests/text-buffer-view_test.zig +0 -3672
- package/src/zig/tests/text-buffer_test.zig +0 -2191
- package/src/zig/tests/unicode-width-map.zon +0 -3909
- package/src/zig/tests/utf8_no_zwj_test.zig +0 -260
- package/src/zig/tests/utf8_test.zig +0 -4060
- package/src/zig/tests/utf8_wcwidth_cursor_test.zig +0 -267
- package/src/zig/tests/utf8_wcwidth_test.zig +0 -357
- package/src/zig/tests/word-wrap-editing_test.zig +0 -498
- package/src/zig/tests/wrap-cache-perf_test.zig +0 -113
- package/src/zig/tests/yoga_test.zig +0 -65
- package/src/zig/text-buffer-iterators.zig +0 -496
- package/src/zig/text-buffer-segment.zig +0 -403
- package/src/zig/text-buffer-view.zig +0 -1428
- package/src/zig/text-buffer.zig +0 -1272
- package/src/zig/utf8.zig +0 -1954
- package/src/zig/utils.zig +0 -12
- package/src/zig/uucode-stub.zig +0 -76
- package/src/zig/vendor/miniaudio/miniaudio.h +0 -93468
- package/src/zig/yoga.zig +0 -658
- package/src/zig-structs.ts +0 -381
- package/src/zig.ts +0 -5260
- package/tsconfig.build.json +0 -17
- package/tsconfig.json +0 -27
- package/tsconfig.node-test.json +0 -138
- /package/{src/lib/tree-sitter/assets → assets}/javascript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/javascript/tree-sitter-javascript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/injections.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown/tree-sitter-markdown.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/typescript/tree-sitter-typescript.wasm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/highlights.scm +0 -0
- /package/{src/lib/tree-sitter/assets → assets}/zig/tree-sitter-zig.wasm +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/.bun/emoji-regex@10.6.0/node_modules/emoji-regex/index.js", "../src/lib/tree-sitter/parser.worker.ts", "../src/lib/tree-sitter/download-utils.ts", "../src/lib/bunfs.ts", "../src/platform/runtime.ts", "../../../node_modules/.bun/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../../../node_modules/.bun/strip-ansi@7.1.2/node_modules/strip-ansi/index.js", "../../../node_modules/.bun/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/lookup.js", "../../../node_modules/.bun/get-east-asian-width@1.4.0/node_modules/get-east-asian-width/index.js", "../../../node_modules/.bun/string-width@7.2.0/node_modules/string-width/index.js", "../src/platform/worker.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"module.exports = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n",
|
|
6
|
+
"import { Parser, Query, Tree, Language } from \"web-tree-sitter\"\nimport type { Edit, QueryCapture, Range } from \"web-tree-sitter\"\nimport { mkdir } from \"fs/promises\"\nimport * as path from \"path\"\nimport type {\n HighlightRange,\n HighlightResponse,\n SimpleHighlight,\n FiletypeParserOptions,\n PerformanceStats,\n InjectionMapping,\n TreeSitterWorkerLogType,\n TreeSitterWorkerRequest,\n TreeSitterWorkerResponse,\n} from \"./types.js\"\nimport { DownloadUtils } from \"./download-utils.js\"\nimport { isBunfsPath, normalizeBunfsPath } from \"../bunfs.js\"\nimport { resolveBundledFilePath } from \"../../platform/runtime.js\"\nimport {\n isWorkerRuntime,\n postWorkerMessage,\n setWorkerMessageHandler,\n type WorkerMessageEvent,\n} from \"../../platform/worker.js\"\n\ntype ParserState = {\n parser: Parser\n tree: Tree\n queries: {\n highlights: Query\n injections?: Query\n }\n filetype: string\n content: string\n injectionMapping?: InjectionMapping\n}\n\ninterface FiletypeParser {\n filetype: string\n queries: {\n highlights: Query\n injections?: Query\n }\n language: Language\n injectionMapping?: InjectionMapping\n}\n\ninterface ReusableParserState {\n parser: Parser\n filetypeParser: FiletypeParser\n queries: {\n highlights: Query\n injections?: Query\n }\n}\n\nclass ParserWorker {\n private bufferParsers: Map<number, ParserState> = new Map()\n private filetypeParserOptions: Map<string, FiletypeParserOptions> = new Map()\n private filetypeAliases: Map<string, string> = new Map()\n private filetypeParsers: Map<string, FiletypeParser> = new Map()\n private filetypeParserPromises: Map<string, Promise<FiletypeParser | undefined>> = new Map()\n private reusableParsers: Map<string, ReusableParserState> = new Map()\n private reusableParserPromises: Map<string, Promise<ReusableParserState | undefined>> = new Map()\n private initializePromise: Promise<void> | undefined\n public performance: PerformanceStats\n private dataPath: string | undefined\n private tsDataPath: string | undefined\n private initialized: boolean = false\n\n constructor() {\n this.performance = {\n averageParseTime: 0,\n parseTimes: [],\n averageQueryTime: 0,\n queryTimes: [],\n }\n }\n\n private async fetchQueries(sources: string[], filetype: string): Promise<string> {\n if (!this.tsDataPath) {\n return \"\"\n }\n return DownloadUtils.fetchHighlightQueries(sources, this.tsDataPath, filetype)\n }\n\n async initialize({ dataPath }: { dataPath: string }) {\n if (this.initializePromise) {\n return this.initializePromise\n }\n this.initializePromise = (async () => {\n this.dataPath = dataPath\n this.tsDataPath = path.join(dataPath, \"tree-sitter\")\n\n await mkdir(path.join(this.tsDataPath, \"languages\"), { recursive: true })\n await mkdir(path.join(this.tsDataPath, \"queries\"), { recursive: true })\n\n let treeWasm = await resolveBundledFilePath(\n () => import(\"web-tree-sitter/tree-sitter.wasm\" as string, { with: { type: \"wasm\" } }),\n () => import.meta.resolve(\"web-tree-sitter/tree-sitter.wasm\"),\n import.meta.url,\n )\n\n if (isBunfsPath(treeWasm)) {\n treeWasm = normalizeBunfsPath(path.parse(treeWasm).base)\n }\n\n await Parser.init({\n locateFile() {\n return treeWasm\n },\n })\n\n this.initialized = true\n })()\n return this.initializePromise\n }\n\n public addFiletypeParser(filetypeParser: FiletypeParserOptions) {\n const previousAliases = this.filetypeParserOptions.get(filetypeParser.filetype)?.aliases ?? []\n for (const alias of previousAliases) {\n if (this.filetypeAliases.get(alias) === filetypeParser.filetype) {\n this.filetypeAliases.delete(alias)\n }\n }\n\n const aliases = [...new Set((filetypeParser.aliases ?? []).filter((alias) => alias !== filetypeParser.filetype))]\n\n this.filetypeAliases.delete(filetypeParser.filetype)\n this.filetypeParserOptions.set(filetypeParser.filetype, {\n ...filetypeParser,\n aliases,\n })\n\n for (const alias of aliases) {\n this.filetypeAliases.set(alias, filetypeParser.filetype)\n }\n\n this.invalidateParserCaches(filetypeParser.filetype)\n }\n\n private resolveCanonicalFiletype(filetype: string): string {\n if (this.filetypeParserOptions.has(filetype)) {\n return filetype\n }\n\n return this.filetypeAliases.get(filetype) ?? filetype\n }\n\n private invalidateParserCaches(filetype: string): void {\n this.filetypeParsers.delete(filetype)\n this.filetypeParserPromises.delete(filetype)\n\n const reusableParser = this.reusableParsers.get(filetype)\n if (reusableParser) {\n reusableParser.parser.delete()\n this.reusableParsers.delete(filetype)\n }\n\n this.reusableParserPromises.delete(filetype)\n }\n\n private async createQueries(\n filetypeParser: FiletypeParserOptions,\n language: Language,\n ): Promise<\n | {\n highlights: Query\n injections?: Query\n }\n | undefined\n > {\n try {\n const highlightQueryContent = await this.fetchQueries(filetypeParser.queries.highlights, filetypeParser.filetype)\n if (!highlightQueryContent) {\n console.error(\"Failed to fetch highlight queries for:\", filetypeParser.filetype)\n return undefined\n }\n\n const highlightsQuery = new Query(language, highlightQueryContent)\n const result: { highlights: Query; injections?: Query } = {\n highlights: highlightsQuery,\n }\n\n if (filetypeParser.queries.injections && filetypeParser.queries.injections.length > 0) {\n const injectionQueryContent = await this.fetchQueries(\n filetypeParser.queries.injections,\n filetypeParser.filetype,\n )\n if (injectionQueryContent) {\n result.injections = new Query(language, injectionQueryContent)\n }\n }\n\n return result\n } catch (error) {\n console.error(\"Error creating queries for\", filetypeParser.filetype, filetypeParser.queries)\n console.error(error)\n return undefined\n }\n }\n\n private async loadLanguage(languageSource: string): Promise<Language | undefined> {\n if (!this.initialized || !this.tsDataPath) {\n return undefined\n }\n\n const result = await DownloadUtils.downloadOrLoad(languageSource, this.tsDataPath, \"languages\", \".wasm\", false)\n\n if (result.error) {\n console.error(`Error loading language ${languageSource}:`, result.error)\n return undefined\n }\n\n if (!result.filePath) {\n return undefined\n }\n\n // Normalize path for Windows compatibility - tree-sitter expects forward slashes\n const normalizedPath = result.filePath.replaceAll(\"\\\\\", \"/\")\n\n try {\n const language = await Language.load(normalizedPath)\n return language\n } catch (error) {\n console.error(`Error loading language from ${normalizedPath}:`, error)\n return undefined\n }\n }\n\n private async resolveFiletypeParser(filetype: string): Promise<FiletypeParser | undefined> {\n const canonicalFiletype = this.resolveCanonicalFiletype(filetype)\n\n if (this.filetypeParsers.has(canonicalFiletype)) {\n return this.filetypeParsers.get(canonicalFiletype)\n }\n\n if (this.filetypeParserPromises.has(canonicalFiletype)) {\n return this.filetypeParserPromises.get(canonicalFiletype)\n }\n\n const loadingPromise = this.loadFiletypeParser(canonicalFiletype)\n this.filetypeParserPromises.set(canonicalFiletype, loadingPromise)\n\n try {\n const result = await loadingPromise\n if (result) {\n this.filetypeParsers.set(canonicalFiletype, result)\n }\n return result\n } finally {\n this.filetypeParserPromises.delete(canonicalFiletype)\n }\n }\n\n private async loadFiletypeParser(filetype: string): Promise<FiletypeParser | undefined> {\n const filetypeParserOptions = this.filetypeParserOptions.get(filetype)\n if (!filetypeParserOptions) {\n return undefined\n }\n const language = await this.loadLanguage(filetypeParserOptions.wasm)\n if (!language) {\n return undefined\n }\n const queries = await this.createQueries(filetypeParserOptions, language)\n if (!queries) {\n console.error(\"Failed to create queries for:\", filetype)\n return undefined\n }\n const filetypeParser: FiletypeParser = {\n ...filetypeParserOptions,\n queries,\n language,\n }\n return filetypeParser\n }\n\n public async preloadParser(filetype: string) {\n return this.resolveFiletypeParser(filetype)\n }\n\n private async getReusableParser(filetype: string): Promise<ReusableParserState | undefined> {\n const canonicalFiletype = this.resolveCanonicalFiletype(filetype)\n\n if (this.reusableParsers.has(canonicalFiletype)) {\n return this.reusableParsers.get(canonicalFiletype)\n }\n\n if (this.reusableParserPromises.has(canonicalFiletype)) {\n return this.reusableParserPromises.get(canonicalFiletype)\n }\n\n const creationPromise = this.createReusableParser(canonicalFiletype)\n this.reusableParserPromises.set(canonicalFiletype, creationPromise)\n\n try {\n const result = await creationPromise\n if (result) {\n this.reusableParsers.set(canonicalFiletype, result)\n }\n return result\n } finally {\n this.reusableParserPromises.delete(canonicalFiletype)\n }\n }\n\n private async createReusableParser(filetype: string): Promise<ReusableParserState | undefined> {\n const filetypeParser = await this.resolveFiletypeParser(filetype)\n if (!filetypeParser) {\n return undefined\n }\n\n const parser = new Parser()\n parser.setLanguage(filetypeParser.language)\n\n const reusableState: ReusableParserState = {\n parser,\n filetypeParser,\n queries: filetypeParser.queries,\n }\n\n return reusableState\n }\n\n async handleInitializeParser(\n bufferId: number,\n version: number,\n content: string,\n filetype: string,\n messageId: string,\n ) {\n const filetypeParser = await this.resolveFiletypeParser(filetype)\n\n if (!filetypeParser) {\n postWorkerMessage({\n type: \"PARSER_INIT_RESPONSE\",\n bufferId,\n messageId,\n hasParser: false,\n warning: `No parser available for filetype ${filetype}`,\n })\n return\n }\n\n const parser = new Parser()\n parser.setLanguage(filetypeParser.language)\n const tree = parser.parse(content)\n if (!tree) {\n postWorkerMessage({\n type: \"PARSER_INIT_RESPONSE\",\n bufferId,\n messageId,\n hasParser: false,\n error: \"Failed to parse buffer\",\n })\n return\n }\n\n const parserState: ParserState = {\n parser,\n tree,\n queries: filetypeParser.queries,\n filetype,\n content,\n injectionMapping: filetypeParser.injectionMapping,\n }\n this.bufferParsers.set(bufferId, parserState)\n\n postWorkerMessage({\n type: \"PARSER_INIT_RESPONSE\",\n bufferId,\n messageId,\n hasParser: true,\n })\n const highlights = await this.initialQuery(parserState)\n postWorkerMessage({\n type: \"HIGHLIGHT_RESPONSE\",\n bufferId,\n version,\n ...highlights,\n })\n }\n\n private async initialQuery(parserState: ParserState) {\n const query = parserState.queries.highlights\n const matches: QueryCapture[] = query.captures(parserState.tree.rootNode)\n let injectionRanges = new Map<string, Array<{ start: number; end: number }>>()\n\n if (parserState.queries.injections) {\n const injectionResult = await this.processInjections(parserState)\n matches.push(...injectionResult.captures)\n injectionRanges = injectionResult.injectionRanges\n }\n\n return this.getHighlights(parserState, matches, injectionRanges)\n }\n\n private getNodeText(node: any, content: string): string {\n return content.substring(node.startIndex, node.endIndex)\n }\n\n private async processInjections(\n parserState: ParserState,\n ): Promise<{ captures: QueryCapture[]; injectionRanges: Map<string, Array<{ start: number; end: number }>> }> {\n const injectionMatches: QueryCapture[] = []\n const injectionRanges = new Map<string, Array<{ start: number; end: number }>>()\n\n if (!parserState.queries.injections) {\n return { captures: injectionMatches, injectionRanges }\n }\n\n const content = parserState.content\n const injectionCaptures = parserState.queries.injections.captures(parserState.tree.rootNode)\n const languageGroups = new Map<string, Array<{ node: any; name: string }>>()\n\n // Use the injection mapping stored in the parser state\n const injectionMapping = parserState.injectionMapping\n\n for (const capture of injectionCaptures) {\n const captureName = capture.name\n\n if (captureName === \"injection.content\" || captureName.includes(\"injection\")) {\n const nodeType = capture.node.type\n let targetLanguage: string | undefined\n\n // First, check if there's a direct node type mapping\n if (injectionMapping?.nodeTypes && injectionMapping.nodeTypes[nodeType]) {\n targetLanguage = injectionMapping.nodeTypes[nodeType]\n } else if (nodeType === \"code_fence_content\") {\n // For code fence content, try to extract language from info_string\n const parent = capture.node.parent\n if (parent) {\n const infoString = parent.children.find((child: any) => child.type === \"info_string\")\n if (infoString) {\n const languageNode = infoString.children.find((child: any) => child.type === \"language\")\n if (languageNode) {\n const languageName = this.getNodeText(languageNode, content)\n\n if (injectionMapping?.infoStringMap && injectionMapping.infoStringMap[languageName]) {\n targetLanguage = injectionMapping.infoStringMap[languageName]\n } else {\n targetLanguage = languageName\n }\n }\n }\n }\n }\n\n if (targetLanguage) {\n if (!languageGroups.has(targetLanguage)) {\n languageGroups.set(targetLanguage, [])\n }\n languageGroups.get(targetLanguage)!.push({ node: capture.node, name: capture.name })\n }\n }\n }\n\n // Process each language group\n for (const [language, captures] of languageGroups.entries()) {\n const injectedParser = await this.getReusableParser(language)\n\n if (!injectedParser) {\n console.warn(`No parser found for injection language: ${language}`)\n continue\n }\n\n // Track injection ranges for this language\n if (!injectionRanges.has(language)) {\n injectionRanges.set(language, [])\n }\n\n const parser = injectedParser.parser\n for (const { node: injectionNode } of captures) {\n try {\n // Record the injection range\n injectionRanges.get(language)!.push({\n start: injectionNode.startIndex,\n end: injectionNode.endIndex,\n })\n\n const injectionContent = this.getNodeText(injectionNode, content)\n const tree = parser.parse(injectionContent)\n\n if (tree) {\n const matches = injectedParser.queries.highlights.captures(tree.rootNode)\n\n // Create new QueryCapture objects with offset positions\n for (const match of matches) {\n // Calculate offset positions by creating a new capture with adjusted node properties\n // Store the injected query reference so we can look up properties correctly\n const offsetCapture: QueryCapture & { _injectedQuery?: Query } = {\n name: match.name,\n patternIndex: match.patternIndex,\n _injectedQuery: injectedParser.queries.highlights, // Store the correct query reference\n node: {\n ...match.node,\n startPosition: {\n row: match.node.startPosition.row + injectionNode.startPosition.row,\n column:\n match.node.startPosition.row === 0\n ? match.node.startPosition.column + injectionNode.startPosition.column\n : match.node.startPosition.column,\n },\n endPosition: {\n row: match.node.endPosition.row + injectionNode.startPosition.row,\n column:\n match.node.endPosition.row === 0\n ? match.node.endPosition.column + injectionNode.startPosition.column\n : match.node.endPosition.column,\n },\n startIndex: match.node.startIndex + injectionNode.startIndex,\n endIndex: match.node.endIndex + injectionNode.startIndex,\n } as any, // Cast to any since we're creating a pseudo-node\n }\n\n injectionMatches.push(offsetCapture)\n }\n\n tree.delete()\n }\n } catch (error) {\n console.error(`Error processing injection for language ${language}:`, error)\n }\n }\n\n // NOTE: Do NOT call parser.delete() here - this is a reusable parser!\n }\n\n return { captures: injectionMatches, injectionRanges }\n }\n\n private editToRange(edit: Edit): Range {\n return {\n startPosition: {\n column: edit.startPosition.column,\n row: edit.startPosition.row,\n },\n endPosition: {\n column: edit.newEndPosition.column,\n row: edit.newEndPosition.row,\n },\n startIndex: edit.startIndex,\n endIndex: edit.newEndIndex,\n }\n }\n\n async handleEdits(\n bufferId: number,\n content: string,\n edits: Edit[],\n ): Promise<{ highlights?: HighlightResponse[]; warning?: string; error?: string }> {\n const parserState = this.bufferParsers.get(bufferId)\n if (!parserState) {\n return { warning: \"No parser state found for buffer\" }\n }\n\n parserState.content = content\n\n for (const edit of edits) {\n parserState.tree.edit(edit)\n }\n\n const startParse = performance.now()\n\n const newTree = parserState.parser.parse(content, parserState.tree)\n\n const endParse = performance.now()\n const parseTime = endParse - startParse\n this.performance.parseTimes.push(parseTime)\n if (this.performance.parseTimes.length > 10) {\n this.performance.parseTimes.shift()\n }\n this.performance.averageParseTime =\n this.performance.parseTimes.reduce((acc, time) => acc + time, 0) / this.performance.parseTimes.length\n\n if (!newTree) {\n return { error: \"Failed to parse buffer\" }\n }\n\n const changedRanges = parserState.tree.getChangedRanges(newTree)\n parserState.tree = newTree\n\n const startQuery = performance.now()\n const matches: QueryCapture[] = []\n\n if (changedRanges.length === 0) {\n edits.forEach((edit) => {\n const range = this.editToRange(edit)\n changedRanges.push(range)\n })\n }\n\n for (const range of changedRanges) {\n let node = parserState.tree.rootNode.descendantForPosition(range.startPosition, range.endPosition)\n\n if (!node) {\n continue\n }\n\n // If we got the root node, query with range to limit scope\n if (node.equals(parserState.tree.rootNode)) {\n // WHY ARE RANGES NOT WORKING!?\n // The changed ranges are not returning anything in some cases\n // Even this shit somehow returns many lines before the actual range,\n // and even though expanded by 1000 bytes it does not capture much beyond the actual range.\n // So freaking weird.\n const rangeCaptures = parserState.queries.highlights.captures(\n node,\n // WTF!?\n {\n startIndex: range.startIndex - 100,\n endIndex: range.endIndex + 1000,\n },\n )\n matches.push(...rangeCaptures)\n continue\n }\n\n while (node && !this.nodeContainsRange(node, range)) {\n node = node.parent\n }\n\n if (!node) {\n node = parserState.tree.rootNode\n }\n\n const nodeCaptures = parserState.queries.highlights.captures(node)\n matches.push(...nodeCaptures)\n }\n\n let injectionRanges = new Map<string, Array<{ start: number; end: number }>>()\n if (parserState.queries.injections) {\n const injectionResult = await this.processInjections(parserState)\n // Only add injection matches that are in the changed ranges\n // This is a simplification - ideally we'd only process injections in changed ranges\n matches.push(...injectionResult.captures)\n injectionRanges = injectionResult.injectionRanges\n }\n\n const endQuery = performance.now()\n const queryTime = endQuery - startQuery\n this.performance.queryTimes.push(queryTime)\n if (this.performance.queryTimes.length > 10) {\n this.performance.queryTimes.shift()\n }\n this.performance.averageQueryTime =\n this.performance.queryTimes.reduce((acc, time) => acc + time, 0) / this.performance.queryTimes.length\n\n return this.getHighlights(parserState, matches, injectionRanges)\n }\n\n private nodeContainsRange(node: any, range: any): boolean {\n return (\n node.startPosition.row <= range.startPosition.row &&\n node.endPosition.row >= range.endPosition.row &&\n (node.startPosition.row < range.startPosition.row || node.startPosition.column <= range.startPosition.column) &&\n (node.endPosition.row > range.endPosition.row || node.endPosition.column >= range.endPosition.column)\n )\n }\n\n private getHighlights(\n parserState: ParserState,\n matches: QueryCapture[],\n injectionRanges?: Map<string, Array<{ start: number; end: number }>>,\n ): { highlights: HighlightResponse[] } {\n const lineHighlights: Map<number, Map<number, HighlightRange>> = new Map()\n const droppedHighlights: Map<number, Map<number, HighlightRange>> = new Map()\n\n for (const match of matches) {\n const node = match.node\n const startLine = node.startPosition.row\n const endLine = node.endPosition.row\n\n const highlight = {\n startCol: node.startPosition.column,\n endCol: node.endPosition.column,\n group: match.name,\n }\n\n if (!lineHighlights.has(startLine)) {\n lineHighlights.set(startLine, new Map())\n droppedHighlights.set(startLine, new Map())\n }\n if (lineHighlights.get(startLine)?.has(node.id)) {\n droppedHighlights.get(startLine)?.set(node.id, lineHighlights.get(startLine)?.get(node.id)!)\n }\n lineHighlights.get(startLine)?.set(node.id, highlight)\n\n if (startLine !== endLine) {\n for (let line = startLine + 1; line <= endLine; line++) {\n if (!lineHighlights.has(line)) {\n lineHighlights.set(line, new Map())\n }\n const hl: HighlightRange = {\n startCol: 0,\n endCol: node.endPosition.column,\n group: match.name,\n }\n lineHighlights.get(line)?.set(node.id, hl)\n }\n }\n }\n\n return {\n highlights: Array.from(lineHighlights.entries()).map(([line, lineHighlights]) => ({\n line,\n highlights: Array.from(lineHighlights.values()),\n droppedHighlights: droppedHighlights.get(line) ? Array.from(droppedHighlights.get(line)!.values()) : [],\n })),\n }\n }\n\n private getSimpleHighlights(\n matches: QueryCapture[],\n injectionRanges: Map<string, Array<{ start: number; end: number }>>,\n ): SimpleHighlight[] {\n const highlights: SimpleHighlight[] = []\n\n const flatInjectionRanges: Array<{ start: number; end: number; lang: string }> = []\n for (const [lang, ranges] of injectionRanges.entries()) {\n for (const range of ranges) {\n flatInjectionRanges.push({ ...range, lang })\n }\n }\n\n for (const match of matches) {\n const node = match.node\n\n let isInjection = false\n let injectionLang: string | undefined\n let containsInjection = false\n for (const injRange of flatInjectionRanges) {\n if (node.startIndex >= injRange.start && node.endIndex <= injRange.end) {\n isInjection = true\n injectionLang = injRange.lang\n break\n } else if (node.startIndex <= injRange.start && node.endIndex >= injRange.end) {\n containsInjection = true\n break\n }\n }\n\n const matchQuery = (match as any)._injectedQuery\n const patternProperties = matchQuery?.setProperties?.[match.patternIndex]\n\n const concealValue = patternProperties?.conceal ?? match.setProperties?.conceal\n const concealLines = patternProperties?.conceal_lines ?? match.setProperties?.conceal_lines\n\n const meta: any = {}\n if (isInjection && injectionLang) {\n meta.isInjection = true\n meta.injectionLang = injectionLang\n }\n if (containsInjection) {\n meta.containsInjection = true\n }\n if (concealValue !== undefined) {\n meta.conceal = concealValue\n }\n if (concealLines !== undefined) {\n meta.concealLines = concealLines\n }\n\n if (Object.keys(meta).length > 0) {\n highlights.push([node.startIndex, node.endIndex, match.name, meta])\n } else {\n highlights.push([node.startIndex, node.endIndex, match.name])\n }\n }\n\n highlights.sort((a, b) => a[0] - b[0])\n\n return highlights\n }\n\n async handleResetBuffer(\n bufferId: number,\n version: number,\n content: string,\n ): Promise<{ highlights?: HighlightResponse[]; warning?: string; error?: string }> {\n const parserState = this.bufferParsers.get(bufferId)\n if (!parserState) {\n return { warning: \"No parser state found for buffer\" }\n }\n\n parserState.content = content\n\n const newTree = parserState.parser.parse(content)\n\n if (!newTree) {\n return { error: \"Failed to parse buffer during reset\" }\n }\n\n parserState.tree = newTree\n const matches = parserState.queries.highlights.captures(parserState.tree.rootNode)\n\n let injectionRanges = new Map<string, Array<{ start: number; end: number }>>()\n if (parserState.queries.injections) {\n const injectionResult = await this.processInjections(parserState)\n matches.push(...injectionResult.captures)\n injectionRanges = injectionResult.injectionRanges\n }\n\n return this.getHighlights(parserState, matches, injectionRanges)\n }\n\n disposeBuffer(bufferId: number): void {\n const parserState = this.bufferParsers.get(bufferId)\n if (!parserState) {\n return\n }\n\n parserState.tree.delete()\n parserState.parser.delete()\n\n this.bufferParsers.delete(bufferId)\n }\n\n async handleOneShotHighlight(content: string, filetype: string, messageId: string): Promise<void> {\n const reusableState = await this.getReusableParser(filetype)\n\n if (!reusableState) {\n postWorkerMessage({\n type: \"ONESHOT_HIGHLIGHT_RESPONSE\",\n messageId,\n hasParser: false,\n warning: `No parser available for filetype ${filetype}`,\n })\n return\n }\n\n // Markdown Parser BUG: For markdown, ensure content ends with newline so closing delimiters are parsed correctly\n // The tree-sitter markdown parser only creates closing delimiter nodes when followed by newline\n const parseContent = filetype === \"markdown\" && content.endsWith(\"```\") ? content + \"\\n\" : content\n\n const tree = reusableState.parser.parse(parseContent)\n\n if (!tree) {\n postWorkerMessage({\n type: \"ONESHOT_HIGHLIGHT_RESPONSE\",\n messageId,\n hasParser: false,\n error: \"Failed to parse content\",\n })\n return\n }\n\n try {\n const matches = reusableState.filetypeParser.queries.highlights.captures(tree.rootNode)\n\n let injectionRanges = new Map<string, Array<{ start: number; end: number }>>()\n if (reusableState.filetypeParser.queries.injections) {\n const parserState: ParserState = {\n parser: reusableState.parser,\n tree,\n queries: reusableState.filetypeParser.queries,\n filetype,\n content,\n injectionMapping: reusableState.filetypeParser.injectionMapping,\n }\n const injectionResult = await this.processInjections(parserState)\n\n matches.push(...injectionResult.captures)\n injectionRanges = injectionResult.injectionRanges\n }\n\n const highlights = this.getSimpleHighlights(matches, injectionRanges)\n\n postWorkerMessage({\n type: \"ONESHOT_HIGHLIGHT_RESPONSE\",\n messageId,\n hasParser: true,\n highlights,\n })\n } finally {\n tree.delete()\n }\n }\n\n async updateDataPath(dataPath: string): Promise<void> {\n this.dataPath = dataPath\n this.tsDataPath = path.join(dataPath, \"tree-sitter\")\n\n try {\n await mkdir(path.join(this.tsDataPath, \"languages\"), { recursive: true })\n await mkdir(path.join(this.tsDataPath, \"queries\"), { recursive: true })\n } catch (error) {\n throw new Error(`Failed to update data path: ${error}`)\n }\n }\n\n async clearCache(): Promise<void> {\n if (!this.dataPath || !this.tsDataPath) {\n throw new Error(\"No data path configured\")\n }\n\n const { rm } = await import(\"fs/promises\")\n\n try {\n const treeSitterPath = path.join(this.dataPath, \"tree-sitter\")\n\n await rm(treeSitterPath, { recursive: true, force: true })\n\n await mkdir(path.join(treeSitterPath, \"languages\"), { recursive: true })\n await mkdir(path.join(treeSitterPath, \"queries\"), { recursive: true })\n\n this.filetypeParsers.clear()\n this.filetypeParserPromises.clear()\n this.reusableParsers.clear()\n this.reusableParserPromises.clear()\n } catch (error) {\n throw new Error(`Failed to clear cache: ${error}`)\n }\n }\n}\n\nfunction logMessage(type: TreeSitterWorkerLogType, ...args: unknown[]): void {\n postWorkerMessage({\n type: \"WORKER_LOG\",\n logType: type,\n data: args,\n } satisfies TreeSitterWorkerResponse)\n}\n\nfunction postWorkerError(bufferId: number | undefined, error: unknown): void {\n postWorkerMessage({\n type: \"ERROR\",\n bufferId,\n error: error instanceof Error ? error.stack || error.message : String(error),\n } satisfies TreeSitterWorkerResponse)\n}\n\nif (isWorkerRuntime) {\n const worker = new ParserWorker()\n\n console.log = (...args) => logMessage(\"log\", ...args)\n console.error = (...args) => logMessage(\"error\", ...args)\n console.warn = (...args) => logMessage(\"warn\", ...args)\n\n setWorkerMessageHandler<TreeSitterWorkerRequest>(async (event: WorkerMessageEvent<TreeSitterWorkerRequest>) => {\n const message = event.data\n const messageType = String((event.data as { type?: unknown }).type ?? \"unknown\")\n\n try {\n switch (message.type) {\n case \"INIT\":\n try {\n await worker.initialize({ dataPath: message.dataPath })\n postWorkerMessage({ type: \"INIT_RESPONSE\" } satisfies TreeSitterWorkerResponse)\n } catch (error) {\n postWorkerMessage({\n type: \"INIT_RESPONSE\",\n error: error instanceof Error ? error.stack || error.message : String(error),\n } satisfies TreeSitterWorkerResponse)\n }\n break\n\n case \"ADD_FILETYPE_PARSER\":\n worker.addFiletypeParser(message.filetypeParser)\n break\n\n case \"PRELOAD_PARSER\": {\n const maybeParser = await worker.preloadParser(message.filetype)\n postWorkerMessage({\n type: \"PRELOAD_PARSER_RESPONSE\",\n messageId: message.messageId,\n hasParser: !!maybeParser,\n } satisfies TreeSitterWorkerResponse)\n break\n }\n\n case \"INITIALIZE_PARSER\":\n await worker.handleInitializeParser(\n message.bufferId,\n message.version,\n message.content,\n message.filetype,\n message.messageId,\n )\n break\n\n case \"HANDLE_EDITS\": {\n const response = await worker.handleEdits(message.bufferId, message.content, message.edits)\n if (response.highlights && response.highlights.length > 0) {\n postWorkerMessage({\n type: \"HIGHLIGHT_RESPONSE\",\n bufferId: message.bufferId,\n version: message.version,\n highlights: response.highlights,\n } satisfies TreeSitterWorkerResponse)\n } else if (response.warning) {\n postWorkerMessage({\n type: \"WARNING\",\n bufferId: message.bufferId,\n warning: response.warning,\n } satisfies TreeSitterWorkerResponse)\n } else if (response.error) {\n postWorkerMessage({\n type: \"ERROR\",\n bufferId: message.bufferId,\n error: response.error,\n } satisfies TreeSitterWorkerResponse)\n }\n break\n }\n\n case \"GET_PERFORMANCE\":\n postWorkerMessage({\n type: \"PERFORMANCE_RESPONSE\",\n performance: worker.performance,\n messageId: message.messageId,\n } satisfies TreeSitterWorkerResponse)\n break\n\n case \"RESET_BUFFER\": {\n const resetResponse = await worker.handleResetBuffer(message.bufferId, message.version, message.content)\n if (resetResponse.highlights && resetResponse.highlights.length > 0) {\n postWorkerMessage({\n type: \"HIGHLIGHT_RESPONSE\",\n bufferId: message.bufferId,\n version: message.version,\n highlights: resetResponse.highlights,\n } satisfies TreeSitterWorkerResponse)\n } else if (resetResponse.warning) {\n postWorkerMessage({\n type: \"WARNING\",\n bufferId: message.bufferId,\n warning: resetResponse.warning,\n } satisfies TreeSitterWorkerResponse)\n } else if (resetResponse.error) {\n postWorkerMessage({\n type: \"ERROR\",\n bufferId: message.bufferId,\n error: resetResponse.error,\n } satisfies TreeSitterWorkerResponse)\n }\n break\n }\n\n case \"DISPOSE_BUFFER\":\n worker.disposeBuffer(message.bufferId)\n postWorkerMessage({\n type: \"BUFFER_DISPOSED\",\n bufferId: message.bufferId,\n } satisfies TreeSitterWorkerResponse)\n break\n\n case \"ONESHOT_HIGHLIGHT\":\n await worker.handleOneShotHighlight(message.content, message.filetype, message.messageId)\n break\n\n case \"UPDATE_DATA_PATH\":\n try {\n await worker.updateDataPath(message.dataPath)\n postWorkerMessage({\n type: \"UPDATE_DATA_PATH_RESPONSE\",\n messageId: message.messageId,\n } satisfies TreeSitterWorkerResponse)\n } catch (error) {\n postWorkerMessage({\n type: \"UPDATE_DATA_PATH_RESPONSE\",\n messageId: message.messageId,\n error: error instanceof Error ? error.message : String(error),\n } satisfies TreeSitterWorkerResponse)\n }\n break\n\n case \"CLEAR_CACHE\":\n try {\n await worker.clearCache()\n postWorkerMessage({\n type: \"CLEAR_CACHE_RESPONSE\",\n messageId: message.messageId,\n } satisfies TreeSitterWorkerResponse)\n } catch (error) {\n postWorkerMessage({\n type: \"CLEAR_CACHE_RESPONSE\",\n messageId: message.messageId,\n error: error instanceof Error ? error.message : String(error),\n } satisfies TreeSitterWorkerResponse)\n }\n break\n\n default:\n postWorkerMessage({\n type: \"ERROR\",\n error: `Unknown message type: ${messageType}`,\n } satisfies TreeSitterWorkerResponse)\n }\n } catch (error) {\n if (\"bufferId\" in message) {\n postWorkerError(message.bufferId, error)\n } else {\n postWorkerError(undefined, error)\n }\n }\n })\n}\n",
|
|
7
|
+
"import { mkdir, readFile, writeFile } from \"fs/promises\"\nimport * as path from \"path\"\n\nexport interface DownloadResult {\n content?: Buffer\n filePath?: string\n error?: string\n}\n\nexport class DownloadUtils {\n private static hashUrl(url: string): string {\n let hash = 0\n for (let i = 0; i < url.length; i++) {\n const char = url.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash\n }\n return Math.abs(hash).toString(16)\n }\n\n /**\n * Download a file from URL or load from local path, with caching support\n */\n static async downloadOrLoad(\n source: string,\n cacheDir: string,\n cacheSubdir: string,\n fileExtension: string,\n useHashForCache: boolean = true,\n filetype?: string,\n ): Promise<DownloadResult> {\n const isUrl = source.startsWith(\"http://\") || source.startsWith(\"https://\")\n\n if (isUrl) {\n let cacheFileName: string\n if (useHashForCache) {\n const hash = this.hashUrl(source)\n cacheFileName = filetype ? `${filetype}-${hash}${fileExtension}` : `${hash}${fileExtension}`\n } else {\n cacheFileName = path.basename(source)\n }\n const cacheFile = path.join(cacheDir, cacheSubdir, cacheFileName)\n\n // Ensure cache directory exists\n await mkdir(path.dirname(cacheFile), { recursive: true })\n\n try {\n const cachedContent = await readFile(cacheFile)\n if (cachedContent.byteLength > 0) {\n console.log(`Loaded from cache: ${cacheFile} (${source})`)\n return { content: cachedContent, filePath: cacheFile }\n }\n } catch (error) {\n // Cache miss, continue to fetch\n }\n\n try {\n console.log(`Downloading from URL: ${source}`)\n const response = await fetch(source)\n if (!response.ok) {\n return { error: `Failed to fetch from ${source}: ${response.statusText}` }\n }\n const content = Buffer.from(await response.arrayBuffer())\n\n try {\n await writeFile(cacheFile, Buffer.from(content))\n console.log(`Cached: ${source}`)\n } catch (cacheError) {\n console.warn(`Failed to cache: ${cacheError}`)\n }\n\n return { content, filePath: cacheFile }\n } catch (error) {\n return { error: `Error downloading from ${source}: ${error}` }\n }\n } else {\n try {\n console.log(`Loading from local path: ${source}`)\n const content = await readFile(source)\n return { content, filePath: source }\n } catch (error) {\n return { error: `Error loading from local path ${source}: ${error}` }\n }\n }\n }\n\n /**\n * Download and save a file to a specific target path\n */\n static async downloadToPath(source: string, targetPath: string): Promise<DownloadResult> {\n const isUrl = source.startsWith(\"http://\") || source.startsWith(\"https://\")\n\n await mkdir(path.dirname(targetPath), { recursive: true })\n\n if (isUrl) {\n try {\n console.log(`Downloading from URL: ${source}`)\n const response = await fetch(source)\n if (!response.ok) {\n return { error: `Failed to fetch from ${source}: ${response.statusText}` }\n }\n const content = Buffer.from(await response.arrayBuffer())\n\n await writeFile(targetPath, Buffer.from(content))\n console.log(`Downloaded: ${source} -> ${targetPath}`)\n\n return { content, filePath: targetPath }\n } catch (error) {\n return { error: `Error downloading from ${source}: ${error}` }\n }\n } else {\n try {\n console.log(`Copying from local path: ${source}`)\n const content = await readFile(source)\n await writeFile(targetPath, Buffer.from(content))\n return { content, filePath: targetPath }\n } catch (error) {\n return { error: `Error copying from local path ${source}: ${error}` }\n }\n }\n }\n\n /**\n * Fetch multiple highlight queries and concatenate them\n */\n static async fetchHighlightQueries(sources: string[], cacheDir: string, filetype: string): Promise<string> {\n const queryPromises = sources.map((source) => this.fetchHighlightQuery(source, cacheDir, filetype))\n const queryResults = await Promise.all(queryPromises)\n\n const validQueries = queryResults.filter((query) => query.trim().length > 0)\n return validQueries.join(\"\\n\")\n }\n\n private static async fetchHighlightQuery(source: string, cacheDir: string, filetype: string): Promise<string> {\n const result = await this.downloadOrLoad(source, cacheDir, \"queries\", \".scm\", true, filetype)\n\n if (result.error) {\n console.error(`Error fetching highlight query from ${source}:`, result.error)\n return \"\"\n }\n\n if (result.content) {\n return new TextDecoder().decode(result.content)\n }\n\n return \"\"\n }\n}\n",
|
|
8
|
+
"import { basename, join } from \"node:path\"\n\nexport function isBunfsPath(path: string): boolean {\n // Removed ambiguous '//' check\n return path.includes(\"$bunfs\") || /^B:[\\\\/]~BUN/i.test(path)\n}\n\nexport function getBunfsRootPath(): string {\n return process.platform === \"win32\" ? \"B:\\\\~BUN\\\\root\" : \"/$bunfs/root\"\n}\n\n/**\n * Normalizes a path to the embedded root.\n * Flattens directory structure to ensure file exists at root.\n */\nexport function normalizeBunfsPath(fileName: string): string {\n return join(getBunfsRootPath(), basename(fileName))\n}\n",
|
|
9
|
+
"import { existsSync } from \"node:fs\"\nimport { mkdir, writeFile as writeFileNode } from \"node:fs/promises\"\nimport { dirname, isAbsolute, resolve } from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\n\nimport stringWidthLib from \"string-width\"\nimport stripAnsiLib from \"strip-ansi\"\n\nexport interface WriteFileOptions {\n createPath?: boolean\n mode?: number\n}\n\ninterface BunLike {\n sleep(msOrDate: number | Date): Promise<void>\n stringWidth(text: string): number\n stripANSI(text: string): string\n write(destination: string | URL, data: string | ArrayBufferView, options?: WriteFileOptions): Promise<number>\n}\n\ninterface FileImportModule {\n default: string\n}\n\ntype FilePathFallback = string | URL | (() => string | URL)\n\ntype GlobalWithBun = typeof globalThis & { Bun?: BunLike }\n\nconst TEXT_ENCODER = new TextEncoder()\nconst bun = (globalThis as GlobalWithBun).Bun\n\nexport const sleep: (msOrDate: number | Date) => Promise<void> = bun?.sleep ?? standardSleep\nexport const stringWidth: (text: string) => number = bun?.stringWidth ?? stringWidthLib\nexport const stripANSI: (text: string) => string = bun?.stripANSI ?? stripAnsiLib\nexport const writeFile: (\n destination: string | URL,\n data: string | ArrayBufferView,\n options?: WriteFileOptions,\n) => Promise<number> = bun?.write ?? writeFilePortable\n\n// Bun only discovers bundled file-like assets from the literal import expression at the call site.\nexport async function resolveBundledFilePath(\n loadBundledFile: () => Promise<FileImportModule>,\n fallbackPath: FilePathFallback,\n metaUrl: string,\n): Promise<string> {\n if (!bun) {\n const path = resolveFallbackFilePath(fallbackPath, metaUrl)\n if (existsSync(path)) {\n return path\n }\n\n return (await loadBundledFilePath(loadBundledFile, metaUrl)) ?? path\n }\n\n return normalizeLoadedFilePath((await loadBundledFile()).default, metaUrl)\n}\n\nfunction resolveFallbackFilePath(fallbackPath: FilePathFallback, metaUrl: string): string {\n const path = typeof fallbackPath === \"function\" ? fallbackPath() : fallbackPath\n return fileURLToPath(path instanceof URL ? path : new URL(path, metaUrl))\n}\n\nfunction normalizeLoadedFilePath(loadedPath: string, baseUrl: string): string {\n if (loadedPath.startsWith(\"file:\")) {\n return fileURLToPath(loadedPath)\n }\n\n if (isAbsolute(loadedPath)) {\n return loadedPath\n }\n\n return resolve(dirname(fileURLToPath(baseUrl)), loadedPath)\n}\n\nasync function loadBundledFilePath(\n loadBundledFile: () => Promise<FileImportModule>,\n metaUrl: string,\n): Promise<string | undefined> {\n const specifier = extractBundledImportSpecifier(loadBundledFile)\n if (!specifier) {\n return undefined\n }\n\n try {\n const moduleUrl = new URL(specifier, metaUrl)\n const loaded = (await import(moduleUrl.href)) as FileImportModule\n return normalizeLoadedFilePath(loaded.default, moduleUrl.href)\n } catch {\n return undefined\n }\n}\n\nfunction extractBundledImportSpecifier(loadBundledFile: () => Promise<FileImportModule>): string | undefined {\n const match = String(loadBundledFile).match(/\\bimport\\(\\s*([\"'`])([^\"'`]+)\\1/)\n return match?.[2]\n}\n\nfunction standardSleep(msOrDate: number | Date): Promise<void> {\n const ms = msOrDate instanceof Date ? msOrDate.getTime() - Date.now() : msOrDate\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nasync function writeFilePortable(\n destination: string | URL,\n data: string | ArrayBufferView,\n options?: WriteFileOptions,\n): Promise<number> {\n const destinationPath = destination instanceof URL ? fileURLToPath(destination) : destination\n\n if (options?.createPath) {\n await mkdir(dirname(destinationPath), { recursive: true })\n }\n\n const bytes =\n typeof data === \"string\" ? TEXT_ENCODER.encode(data) : new Uint8Array(data.buffer, data.byteOffset, data.byteLength)\n\n await writeFileNode(destinationPath, bytes, { mode: options?.mode })\n\n return bytes.byteLength\n}\n",
|
|
10
|
+
"export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n",
|
|
11
|
+
"import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n",
|
|
12
|
+
"// Generated code.\n\nfunction isAmbiguous(x) {\n\treturn x === 0xA1\n\t\t|| x === 0xA4\n\t\t|| x === 0xA7\n\t\t|| x === 0xA8\n\t\t|| x === 0xAA\n\t\t|| x === 0xAD\n\t\t|| x === 0xAE\n\t\t|| x >= 0xB0 && x <= 0xB4\n\t\t|| x >= 0xB6 && x <= 0xBA\n\t\t|| x >= 0xBC && x <= 0xBF\n\t\t|| x === 0xC6\n\t\t|| x === 0xD0\n\t\t|| x === 0xD7\n\t\t|| x === 0xD8\n\t\t|| x >= 0xDE && x <= 0xE1\n\t\t|| x === 0xE6\n\t\t|| x >= 0xE8 && x <= 0xEA\n\t\t|| x === 0xEC\n\t\t|| x === 0xED\n\t\t|| x === 0xF0\n\t\t|| x === 0xF2\n\t\t|| x === 0xF3\n\t\t|| x >= 0xF7 && x <= 0xFA\n\t\t|| x === 0xFC\n\t\t|| x === 0xFE\n\t\t|| x === 0x101\n\t\t|| x === 0x111\n\t\t|| x === 0x113\n\t\t|| x === 0x11B\n\t\t|| x === 0x126\n\t\t|| x === 0x127\n\t\t|| x === 0x12B\n\t\t|| x >= 0x131 && x <= 0x133\n\t\t|| x === 0x138\n\t\t|| x >= 0x13F && x <= 0x142\n\t\t|| x === 0x144\n\t\t|| x >= 0x148 && x <= 0x14B\n\t\t|| x === 0x14D\n\t\t|| x === 0x152\n\t\t|| x === 0x153\n\t\t|| x === 0x166\n\t\t|| x === 0x167\n\t\t|| x === 0x16B\n\t\t|| x === 0x1CE\n\t\t|| x === 0x1D0\n\t\t|| x === 0x1D2\n\t\t|| x === 0x1D4\n\t\t|| x === 0x1D6\n\t\t|| x === 0x1D8\n\t\t|| x === 0x1DA\n\t\t|| x === 0x1DC\n\t\t|| x === 0x251\n\t\t|| x === 0x261\n\t\t|| x === 0x2C4\n\t\t|| x === 0x2C7\n\t\t|| x >= 0x2C9 && x <= 0x2CB\n\t\t|| x === 0x2CD\n\t\t|| x === 0x2D0\n\t\t|| x >= 0x2D8 && x <= 0x2DB\n\t\t|| x === 0x2DD\n\t\t|| x === 0x2DF\n\t\t|| x >= 0x300 && x <= 0x36F\n\t\t|| x >= 0x391 && x <= 0x3A1\n\t\t|| x >= 0x3A3 && x <= 0x3A9\n\t\t|| x >= 0x3B1 && x <= 0x3C1\n\t\t|| x >= 0x3C3 && x <= 0x3C9\n\t\t|| x === 0x401\n\t\t|| x >= 0x410 && x <= 0x44F\n\t\t|| x === 0x451\n\t\t|| x === 0x2010\n\t\t|| x >= 0x2013 && x <= 0x2016\n\t\t|| x === 0x2018\n\t\t|| x === 0x2019\n\t\t|| x === 0x201C\n\t\t|| x === 0x201D\n\t\t|| x >= 0x2020 && x <= 0x2022\n\t\t|| x >= 0x2024 && x <= 0x2027\n\t\t|| x === 0x2030\n\t\t|| x === 0x2032\n\t\t|| x === 0x2033\n\t\t|| x === 0x2035\n\t\t|| x === 0x203B\n\t\t|| x === 0x203E\n\t\t|| x === 0x2074\n\t\t|| x === 0x207F\n\t\t|| x >= 0x2081 && x <= 0x2084\n\t\t|| x === 0x20AC\n\t\t|| x === 0x2103\n\t\t|| x === 0x2105\n\t\t|| x === 0x2109\n\t\t|| x === 0x2113\n\t\t|| x === 0x2116\n\t\t|| x === 0x2121\n\t\t|| x === 0x2122\n\t\t|| x === 0x2126\n\t\t|| x === 0x212B\n\t\t|| x === 0x2153\n\t\t|| x === 0x2154\n\t\t|| x >= 0x215B && x <= 0x215E\n\t\t|| x >= 0x2160 && x <= 0x216B\n\t\t|| x >= 0x2170 && x <= 0x2179\n\t\t|| x === 0x2189\n\t\t|| x >= 0x2190 && x <= 0x2199\n\t\t|| x === 0x21B8\n\t\t|| x === 0x21B9\n\t\t|| x === 0x21D2\n\t\t|| x === 0x21D4\n\t\t|| x === 0x21E7\n\t\t|| x === 0x2200\n\t\t|| x === 0x2202\n\t\t|| x === 0x2203\n\t\t|| x === 0x2207\n\t\t|| x === 0x2208\n\t\t|| x === 0x220B\n\t\t|| x === 0x220F\n\t\t|| x === 0x2211\n\t\t|| x === 0x2215\n\t\t|| x === 0x221A\n\t\t|| x >= 0x221D && x <= 0x2220\n\t\t|| x === 0x2223\n\t\t|| x === 0x2225\n\t\t|| x >= 0x2227 && x <= 0x222C\n\t\t|| x === 0x222E\n\t\t|| x >= 0x2234 && x <= 0x2237\n\t\t|| x === 0x223C\n\t\t|| x === 0x223D\n\t\t|| x === 0x2248\n\t\t|| x === 0x224C\n\t\t|| x === 0x2252\n\t\t|| x === 0x2260\n\t\t|| x === 0x2261\n\t\t|| x >= 0x2264 && x <= 0x2267\n\t\t|| x === 0x226A\n\t\t|| x === 0x226B\n\t\t|| x === 0x226E\n\t\t|| x === 0x226F\n\t\t|| x === 0x2282\n\t\t|| x === 0x2283\n\t\t|| x === 0x2286\n\t\t|| x === 0x2287\n\t\t|| x === 0x2295\n\t\t|| x === 0x2299\n\t\t|| x === 0x22A5\n\t\t|| x === 0x22BF\n\t\t|| x === 0x2312\n\t\t|| x >= 0x2460 && x <= 0x24E9\n\t\t|| x >= 0x24EB && x <= 0x254B\n\t\t|| x >= 0x2550 && x <= 0x2573\n\t\t|| x >= 0x2580 && x <= 0x258F\n\t\t|| x >= 0x2592 && x <= 0x2595\n\t\t|| x === 0x25A0\n\t\t|| x === 0x25A1\n\t\t|| x >= 0x25A3 && x <= 0x25A9\n\t\t|| x === 0x25B2\n\t\t|| x === 0x25B3\n\t\t|| x === 0x25B6\n\t\t|| x === 0x25B7\n\t\t|| x === 0x25BC\n\t\t|| x === 0x25BD\n\t\t|| x === 0x25C0\n\t\t|| x === 0x25C1\n\t\t|| x >= 0x25C6 && x <= 0x25C8\n\t\t|| x === 0x25CB\n\t\t|| x >= 0x25CE && x <= 0x25D1\n\t\t|| x >= 0x25E2 && x <= 0x25E5\n\t\t|| x === 0x25EF\n\t\t|| x === 0x2605\n\t\t|| x === 0x2606\n\t\t|| x === 0x2609\n\t\t|| x === 0x260E\n\t\t|| x === 0x260F\n\t\t|| x === 0x261C\n\t\t|| x === 0x261E\n\t\t|| x === 0x2640\n\t\t|| x === 0x2642\n\t\t|| x === 0x2660\n\t\t|| x === 0x2661\n\t\t|| x >= 0x2663 && x <= 0x2665\n\t\t|| x >= 0x2667 && x <= 0x266A\n\t\t|| x === 0x266C\n\t\t|| x === 0x266D\n\t\t|| x === 0x266F\n\t\t|| x === 0x269E\n\t\t|| x === 0x269F\n\t\t|| x === 0x26BF\n\t\t|| x >= 0x26C6 && x <= 0x26CD\n\t\t|| x >= 0x26CF && x <= 0x26D3\n\t\t|| x >= 0x26D5 && x <= 0x26E1\n\t\t|| x === 0x26E3\n\t\t|| x === 0x26E8\n\t\t|| x === 0x26E9\n\t\t|| x >= 0x26EB && x <= 0x26F1\n\t\t|| x === 0x26F4\n\t\t|| x >= 0x26F6 && x <= 0x26F9\n\t\t|| x === 0x26FB\n\t\t|| x === 0x26FC\n\t\t|| x === 0x26FE\n\t\t|| x === 0x26FF\n\t\t|| x === 0x273D\n\t\t|| x >= 0x2776 && x <= 0x277F\n\t\t|| x >= 0x2B56 && x <= 0x2B59\n\t\t|| x >= 0x3248 && x <= 0x324F\n\t\t|| x >= 0xE000 && x <= 0xF8FF\n\t\t|| x >= 0xFE00 && x <= 0xFE0F\n\t\t|| x === 0xFFFD\n\t\t|| x >= 0x1F100 && x <= 0x1F10A\n\t\t|| x >= 0x1F110 && x <= 0x1F12D\n\t\t|| x >= 0x1F130 && x <= 0x1F169\n\t\t|| x >= 0x1F170 && x <= 0x1F18D\n\t\t|| x === 0x1F18F\n\t\t|| x === 0x1F190\n\t\t|| x >= 0x1F19B && x <= 0x1F1AC\n\t\t|| x >= 0xE0100 && x <= 0xE01EF\n\t\t|| x >= 0xF0000 && x <= 0xFFFFD\n\t\t|| x >= 0x100000 && x <= 0x10FFFD;\n}\n\nfunction isFullWidth(x) {\n\treturn x === 0x3000\n\t\t|| x >= 0xFF01 && x <= 0xFF60\n\t\t|| x >= 0xFFE0 && x <= 0xFFE6;\n}\n\nfunction isWide(x) {\n\treturn x >= 0x1100 && x <= 0x115F\n\t\t|| x === 0x231A\n\t\t|| x === 0x231B\n\t\t|| x === 0x2329\n\t\t|| x === 0x232A\n\t\t|| x >= 0x23E9 && x <= 0x23EC\n\t\t|| x === 0x23F0\n\t\t|| x === 0x23F3\n\t\t|| x === 0x25FD\n\t\t|| x === 0x25FE\n\t\t|| x === 0x2614\n\t\t|| x === 0x2615\n\t\t|| x >= 0x2630 && x <= 0x2637\n\t\t|| x >= 0x2648 && x <= 0x2653\n\t\t|| x === 0x267F\n\t\t|| x >= 0x268A && x <= 0x268F\n\t\t|| x === 0x2693\n\t\t|| x === 0x26A1\n\t\t|| x === 0x26AA\n\t\t|| x === 0x26AB\n\t\t|| x === 0x26BD\n\t\t|| x === 0x26BE\n\t\t|| x === 0x26C4\n\t\t|| x === 0x26C5\n\t\t|| x === 0x26CE\n\t\t|| x === 0x26D4\n\t\t|| x === 0x26EA\n\t\t|| x === 0x26F2\n\t\t|| x === 0x26F3\n\t\t|| x === 0x26F5\n\t\t|| x === 0x26FA\n\t\t|| x === 0x26FD\n\t\t|| x === 0x2705\n\t\t|| x === 0x270A\n\t\t|| x === 0x270B\n\t\t|| x === 0x2728\n\t\t|| x === 0x274C\n\t\t|| x === 0x274E\n\t\t|| x >= 0x2753 && x <= 0x2755\n\t\t|| x === 0x2757\n\t\t|| x >= 0x2795 && x <= 0x2797\n\t\t|| x === 0x27B0\n\t\t|| x === 0x27BF\n\t\t|| x === 0x2B1B\n\t\t|| x === 0x2B1C\n\t\t|| x === 0x2B50\n\t\t|| x === 0x2B55\n\t\t|| x >= 0x2E80 && x <= 0x2E99\n\t\t|| x >= 0x2E9B && x <= 0x2EF3\n\t\t|| x >= 0x2F00 && x <= 0x2FD5\n\t\t|| x >= 0x2FF0 && x <= 0x2FFF\n\t\t|| x >= 0x3001 && x <= 0x303E\n\t\t|| x >= 0x3041 && x <= 0x3096\n\t\t|| x >= 0x3099 && x <= 0x30FF\n\t\t|| x >= 0x3105 && x <= 0x312F\n\t\t|| x >= 0x3131 && x <= 0x318E\n\t\t|| x >= 0x3190 && x <= 0x31E5\n\t\t|| x >= 0x31EF && x <= 0x321E\n\t\t|| x >= 0x3220 && x <= 0x3247\n\t\t|| x >= 0x3250 && x <= 0xA48C\n\t\t|| x >= 0xA490 && x <= 0xA4C6\n\t\t|| x >= 0xA960 && x <= 0xA97C\n\t\t|| x >= 0xAC00 && x <= 0xD7A3\n\t\t|| x >= 0xF900 && x <= 0xFAFF\n\t\t|| x >= 0xFE10 && x <= 0xFE19\n\t\t|| x >= 0xFE30 && x <= 0xFE52\n\t\t|| x >= 0xFE54 && x <= 0xFE66\n\t\t|| x >= 0xFE68 && x <= 0xFE6B\n\t\t|| x >= 0x16FE0 && x <= 0x16FE4\n\t\t|| x >= 0x16FF0 && x <= 0x16FF6\n\t\t|| x >= 0x17000 && x <= 0x18CD5\n\t\t|| x >= 0x18CFF && x <= 0x18D1E\n\t\t|| x >= 0x18D80 && x <= 0x18DF2\n\t\t|| x >= 0x1AFF0 && x <= 0x1AFF3\n\t\t|| x >= 0x1AFF5 && x <= 0x1AFFB\n\t\t|| x === 0x1AFFD\n\t\t|| x === 0x1AFFE\n\t\t|| x >= 0x1B000 && x <= 0x1B122\n\t\t|| x === 0x1B132\n\t\t|| x >= 0x1B150 && x <= 0x1B152\n\t\t|| x === 0x1B155\n\t\t|| x >= 0x1B164 && x <= 0x1B167\n\t\t|| x >= 0x1B170 && x <= 0x1B2FB\n\t\t|| x >= 0x1D300 && x <= 0x1D356\n\t\t|| x >= 0x1D360 && x <= 0x1D376\n\t\t|| x === 0x1F004\n\t\t|| x === 0x1F0CF\n\t\t|| x === 0x1F18E\n\t\t|| x >= 0x1F191 && x <= 0x1F19A\n\t\t|| x >= 0x1F200 && x <= 0x1F202\n\t\t|| x >= 0x1F210 && x <= 0x1F23B\n\t\t|| x >= 0x1F240 && x <= 0x1F248\n\t\t|| x === 0x1F250\n\t\t|| x === 0x1F251\n\t\t|| x >= 0x1F260 && x <= 0x1F265\n\t\t|| x >= 0x1F300 && x <= 0x1F320\n\t\t|| x >= 0x1F32D && x <= 0x1F335\n\t\t|| x >= 0x1F337 && x <= 0x1F37C\n\t\t|| x >= 0x1F37E && x <= 0x1F393\n\t\t|| x >= 0x1F3A0 && x <= 0x1F3CA\n\t\t|| x >= 0x1F3CF && x <= 0x1F3D3\n\t\t|| x >= 0x1F3E0 && x <= 0x1F3F0\n\t\t|| x === 0x1F3F4\n\t\t|| x >= 0x1F3F8 && x <= 0x1F43E\n\t\t|| x === 0x1F440\n\t\t|| x >= 0x1F442 && x <= 0x1F4FC\n\t\t|| x >= 0x1F4FF && x <= 0x1F53D\n\t\t|| x >= 0x1F54B && x <= 0x1F54E\n\t\t|| x >= 0x1F550 && x <= 0x1F567\n\t\t|| x === 0x1F57A\n\t\t|| x === 0x1F595\n\t\t|| x === 0x1F596\n\t\t|| x === 0x1F5A4\n\t\t|| x >= 0x1F5FB && x <= 0x1F64F\n\t\t|| x >= 0x1F680 && x <= 0x1F6C5\n\t\t|| x === 0x1F6CC\n\t\t|| x >= 0x1F6D0 && x <= 0x1F6D2\n\t\t|| x >= 0x1F6D5 && x <= 0x1F6D8\n\t\t|| x >= 0x1F6DC && x <= 0x1F6DF\n\t\t|| x === 0x1F6EB\n\t\t|| x === 0x1F6EC\n\t\t|| x >= 0x1F6F4 && x <= 0x1F6FC\n\t\t|| x >= 0x1F7E0 && x <= 0x1F7EB\n\t\t|| x === 0x1F7F0\n\t\t|| x >= 0x1F90C && x <= 0x1F93A\n\t\t|| x >= 0x1F93C && x <= 0x1F945\n\t\t|| x >= 0x1F947 && x <= 0x1F9FF\n\t\t|| x >= 0x1FA70 && x <= 0x1FA7C\n\t\t|| x >= 0x1FA80 && x <= 0x1FA8A\n\t\t|| x >= 0x1FA8E && x <= 0x1FAC6\n\t\t|| x === 0x1FAC8\n\t\t|| x >= 0x1FACD && x <= 0x1FADC\n\t\t|| x >= 0x1FADF && x <= 0x1FAEA\n\t\t|| x >= 0x1FAEF && x <= 0x1FAF8\n\t\t|| x >= 0x20000 && x <= 0x2FFFD\n\t\t|| x >= 0x30000 && x <= 0x3FFFD;\n}\n\nfunction getCategory(x) {\n\tif (isAmbiguous(x)) return 'ambiguous';\n\n\tif (isFullWidth(x)) return 'fullwidth';\n\n\tif (\n\t\tx === 0x20A9\n\t\t|| x >= 0xFF61 && x <= 0xFFBE\n\t\t|| x >= 0xFFC2 && x <= 0xFFC7\n\t\t|| x >= 0xFFCA && x <= 0xFFCF\n\t\t|| x >= 0xFFD2 && x <= 0xFFD7\n\t\t|| x >= 0xFFDA && x <= 0xFFDC\n\t\t|| x >= 0xFFE8 && x <= 0xFFEE\n\t) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (\n\t\tx >= 0x20 && x <= 0x7E\n\t\t|| x === 0xA2\n\t\t|| x === 0xA3\n\t\t|| x === 0xA5\n\t\t|| x === 0xA6\n\t\t|| x === 0xAC\n\t\t|| x === 0xAF\n\t\t|| x >= 0x27E6 && x <= 0x27ED\n\t\t|| x === 0x2985\n\t\t|| x === 0x2986\n\t) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(x)) return 'wide';\n\n\treturn 'neutral';\n}\n\nexport {isAmbiguous, isFullWidth, isWide, getCategory};\n",
|
|
13
|
+
"import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n",
|
|
14
|
+
"import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n",
|
|
15
|
+
"export const WORKER_UNAVAILABLE = \"OpenTUI tree-sitter workers are not available for this runtime yet.\"\n\nexport interface WorkerMessageEvent<T = unknown> {\n readonly data: T\n}\n\nexport interface WorkerErrorEvent {\n readonly error?: unknown\n readonly message: string\n}\n\nexport type WorkerMessageHandler<T = unknown> = (event: WorkerMessageEvent<T>) => void | Promise<void>\nexport type WorkerErrorHandler = (event: WorkerErrorEvent) => void\n\ntype AnyWorkerMessageHandler = WorkerMessageHandler<any>\n\nexport interface PlatformWorkerOptions {\n name?: string\n}\n\nexport interface PlatformWorkerHandle {\n onmessage: WorkerMessageHandler | null\n onerror: WorkerErrorHandler | null\n postMessage(value: unknown): void\n terminate(): void | Promise<number>\n addEventListener(type: \"message\" | \"error\", listener: WorkerMessageHandler | WorkerErrorHandler): void\n removeEventListener(type: \"message\" | \"error\", listener: WorkerMessageHandler | WorkerErrorHandler): void\n}\n\nexport type PlatformWorkerConstructor = new (\n specifier: string | URL,\n options?: PlatformWorkerOptions,\n) => PlatformWorkerHandle\n\ninterface NodeMessagePort {\n postMessage(value: unknown): void\n on(event: \"message\", listener: (value: unknown) => void): void\n off(event: \"message\", listener: (value: unknown) => void): void\n}\n\ninterface NodeWorkerThread {\n postMessage(value: unknown): void\n on(event: \"message\", listener: (value: unknown) => void): void\n on(event: \"error\", listener: (error: Error) => void): void\n off(event: \"message\", listener: (value: unknown) => void): void\n off(event: \"error\", listener: (error: Error) => void): void\n terminate(): Promise<number>\n}\n\ninterface NodeWorkerThreadsModule {\n Worker: new (\n filename: string,\n options: {\n eval: true\n type: \"module\"\n name?: string\n },\n ) => NodeWorkerThread\n readonly parentPort: NodeMessagePort | null\n readonly isMainThread: boolean\n}\n\ninterface WorkerRuntimeBridge {\n postMessage(value: unknown): void\n setMessageHandler<T>(handler: WorkerMessageHandler<T>): () => void\n}\n\ntype GlobalWithWorker = typeof globalThis & {\n Worker?: PlatformWorkerConstructor\n __opentuiWorkerMessageBridge?: true\n close?: () => void\n postMessage?: (value: unknown) => void\n}\n\ninterface NodePathModule {\n isAbsolute(path: string): boolean\n resolve(...paths: string[]): string\n}\n\ninterface NodeUrlModule {\n pathToFileURL(path: string): URL\n}\n\ninterface ProcessWithBuiltinModule {\n readonly getBuiltinModule?: (id: string) => unknown\n}\n\nconst globalWithWorker = globalThis as GlobalWithWorker\nconst nodeWorkerThreads = getBuiltinModule<NodeWorkerThreadsModule>(\"node:worker_threads\")\nconst runtimeBridge = loadWorkerRuntime(nodeWorkerThreads)\n\nclass UnsupportedWorker implements PlatformWorkerHandle {\n public onmessage: WorkerMessageHandler | null = null\n public onerror: WorkerErrorHandler | null = null\n\n constructor() {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n postMessage(): void {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n terminate(): void {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n addEventListener(): void {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n removeEventListener(): void {\n throw new Error(WORKER_UNAVAILABLE)\n }\n}\n\nexport const Worker: PlatformWorkerConstructor = loadWorkerConstructor()\nexport const isWorkerRuntime = runtimeBridge !== undefined\n\nexport function postWorkerMessage(value: unknown): void {\n if (!runtimeBridge) {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n runtimeBridge.postMessage(value)\n}\n\nexport function setWorkerMessageHandler<T>(handler: WorkerMessageHandler<T>): () => void {\n if (!runtimeBridge) {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n return runtimeBridge.setMessageHandler(handler)\n}\n\nfunction getBuiltinModule<T>(id: string): T | undefined {\n if (typeof process === \"undefined\") {\n return undefined\n }\n\n const loader = (process as typeof process & ProcessWithBuiltinModule).getBuiltinModule\n if (typeof loader !== \"function\") {\n return undefined\n }\n\n try {\n return loader(id) as T\n } catch {\n return undefined\n }\n}\n\nfunction loadWorkerConstructor(): PlatformWorkerConstructor {\n if (typeof globalWithWorker.Worker === \"function\") {\n return globalWithWorker.Worker\n }\n\n if (nodeWorkerThreads) {\n return createNodeWorkerConstructor(nodeWorkerThreads)\n }\n\n return UnsupportedWorker\n}\n\nfunction createNodeWorkerConstructor(node: NodeWorkerThreadsModule): PlatformWorkerConstructor {\n return class NodeWorkerShim implements PlatformWorkerHandle {\n public onmessage: WorkerMessageHandler | null = null\n public onerror: WorkerErrorHandler | null = null\n\n private readonly errorListeners = new Set<WorkerErrorHandler>()\n private readonly messageListeners = new Set<WorkerMessageHandler>()\n private readonly worker: NodeWorkerThread\n private terminationPromise: Promise<number> | undefined\n\n constructor(specifier: string | URL, options: PlatformWorkerOptions = {}) {\n const resolvedSpecifier = resolveWorkerImportSpecifier(specifier)\n\n this.worker = new node.Worker(createWorkerBootstrapSource(resolvedSpecifier), {\n eval: true,\n type: \"module\",\n name: options.name,\n })\n\n this.worker.on(\"message\", this.handleMessage)\n this.worker.on(\"error\", this.handleError)\n }\n\n postMessage(value: unknown): void {\n this.worker.postMessage(value)\n }\n\n terminate(): Promise<number> {\n if (this.terminationPromise) {\n return this.terminationPromise\n }\n\n this.worker.off(\"message\", this.handleMessage)\n this.worker.off(\"error\", this.handleError)\n const termination = this.worker.terminate().catch((error: unknown) => {\n this.terminationPromise = undefined\n this.worker.on(\"message\", this.handleMessage)\n this.worker.on(\"error\", this.handleError)\n throw error\n })\n this.terminationPromise = termination\n return termination\n }\n\n addEventListener(type: \"message\" | \"error\", listener: WorkerMessageHandler | WorkerErrorHandler): void {\n if (type === \"message\") {\n this.messageListeners.add(listener as WorkerMessageHandler)\n return\n }\n\n this.errorListeners.add(listener as WorkerErrorHandler)\n }\n\n removeEventListener(type: \"message\" | \"error\", listener: WorkerMessageHandler | WorkerErrorHandler): void {\n if (type === \"message\") {\n this.messageListeners.delete(listener as WorkerMessageHandler)\n return\n }\n\n this.errorListeners.delete(listener as WorkerErrorHandler)\n }\n\n private readonly handleMessage = (data: unknown): void => {\n const event: WorkerMessageEvent = { data }\n\n this.onmessage?.(event)\n\n for (const listener of this.messageListeners) {\n listener(event)\n }\n }\n\n private readonly handleError = (error: Error): void => {\n const event: WorkerErrorEvent = {\n error,\n message: error.message,\n }\n\n this.onerror?.(event)\n\n for (const listener of this.errorListeners) {\n listener(event)\n }\n }\n }\n}\n\nfunction createWorkerBootstrapSource(specifier: string): string {\n return `\n import { parentPort } from \"node:worker_threads\"\n\n const pendingMessages = []\n let messageHandler = null\n\n globalThis.self ??= globalThis\n globalThis.postMessage ??= (value) => parentPort?.postMessage(value)\n globalThis.__opentuiWorkerMessageBridge = true\n Object.defineProperty(globalThis, \"onmessage\", {\n configurable: true,\n get: () => messageHandler,\n set: (handler) => {\n messageHandler = typeof handler === \"function\" ? handler : null\n if (!messageHandler) return\n\n const messages = pendingMessages.splice(0)\n for (const data of messages) {\n messageHandler({ data })\n }\n },\n })\n parentPort?.on(\"message\", (data) => {\n if (messageHandler) {\n messageHandler({ data })\n } else {\n pendingMessages.push(data)\n }\n })\n\n await import(${JSON.stringify(specifier)})\n `\n}\n\nfunction resolveWorkerImportSpecifier(specifier: string | URL): string {\n if (specifier instanceof URL) {\n return specifier.href\n }\n\n if (isRuntimeSpecifier(specifier)) {\n return specifier\n }\n\n // The Node shim cannot infer the caller module URL for plain strings, so\n // relative override strings resolve from the current working directory.\n // Callers that need module-relative behavior should pass a URL instead.\n const nodePath = getBuiltinModule<NodePathModule>(\"node:path\")\n const nodeUrl = getBuiltinModule<NodeUrlModule>(\"node:url\")\n if (!nodePath || !nodeUrl) {\n throw new Error(WORKER_UNAVAILABLE)\n }\n\n const absolutePath = nodePath.isAbsolute(specifier) ? specifier : nodePath.resolve(specifier)\n\n return nodeUrl.pathToFileURL(absolutePath).href\n}\n\nfunction isRuntimeSpecifier(specifier: string): boolean {\n return (\n specifier.startsWith(\"file:\") ||\n specifier.startsWith(\"data:\") ||\n specifier.startsWith(\"node:\") ||\n specifier.startsWith(\"http:\") ||\n specifier.startsWith(\"https:\")\n )\n}\n\nfunction loadWorkerRuntime(node: NodeWorkerThreadsModule | undefined): WorkerRuntimeBridge | undefined {\n if (node?.parentPort && node.isMainThread === false) {\n if (globalWithWorker.__opentuiWorkerMessageBridge) {\n return createGlobalWorkerRuntimeBridge()\n }\n\n return {\n postMessage(value: unknown): void {\n node.parentPort?.postMessage(value)\n },\n setMessageHandler<T>(handler: WorkerMessageHandler<T>): () => void {\n const listener = (data: unknown): void => {\n void handler({ data: data as T })\n }\n\n node.parentPort?.on(\"message\", listener)\n\n return () => {\n node.parentPort?.off(\"message\", listener)\n }\n },\n }\n }\n\n if (!isGlobalWorkerRuntime()) {\n return undefined\n }\n\n return createGlobalWorkerRuntimeBridge()\n}\n\nfunction createGlobalWorkerRuntimeBridge(): WorkerRuntimeBridge {\n interface HandlerRegistration {\n active: boolean\n fallbackHandler: AnyWorkerMessageHandler | null\n listener: AnyWorkerMessageHandler\n previous?: HandlerRegistration\n }\n\n let currentRegistration: HandlerRegistration | undefined\n\n return {\n postMessage(value: unknown): void {\n globalWithWorker.postMessage?.(value)\n },\n setMessageHandler<T>(handler: WorkerMessageHandler<T>): () => void {\n const previousHandler = getGlobalWorkerMessageHandler()\n if (currentRegistration && previousHandler !== currentRegistration.listener) {\n currentRegistration = undefined\n }\n\n const listener: WorkerMessageHandler<T> = (event): void => {\n const normalizedEvent = normalizeWorkerMessageEvent<T>(event)\n void handler(normalizedEvent)\n }\n const registration: HandlerRegistration = {\n active: true,\n fallbackHandler: currentRegistration ? currentRegistration.fallbackHandler : previousHandler,\n listener,\n previous: currentRegistration,\n }\n\n currentRegistration = registration\n setGlobalWorkerMessageHandler(listener)\n\n return () => {\n registration.active = false\n if (currentRegistration !== registration || getGlobalWorkerMessageHandler() !== listener) {\n return\n }\n\n let previous = registration.previous\n while (previous && !previous.active) {\n previous = previous.previous\n }\n\n currentRegistration = previous\n setGlobalWorkerMessageHandler(previous?.listener ?? registration.fallbackHandler)\n }\n },\n }\n}\n\nfunction isGlobalWorkerRuntime(): boolean {\n if (typeof globalWithWorker.postMessage !== \"function\") {\n return false\n }\n\n return typeof document === \"undefined\" && typeof globalWithWorker.close === \"function\" && \"onmessage\" in globalThis\n}\n\nfunction normalizeWorkerMessageEvent<T>(event: unknown): WorkerMessageEvent<T> {\n if (event && typeof event === \"object\" && \"data\" in event) {\n return event as WorkerMessageEvent<T>\n }\n\n return { data: event as T }\n}\n\nfunction getGlobalWorkerMessageHandler(): AnyWorkerMessageHandler | null {\n return ((globalThis as { onmessage?: unknown }).onmessage as AnyWorkerMessageHandler | null | undefined) ?? null\n}\n\nfunction setGlobalWorkerMessageHandler(handler: AnyWorkerMessageHandler | null): void {\n ;(globalThis as { onmessage?: unknown }).onmessage = handler\n}\n"
|
|
16
|
+
],
|
|
17
|
+
"mappings": "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AAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KAAK,QAAU,KAAK,QACpB,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,MAAM,QACN,KAAK,QAAU,KAAK,QACpB,KA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",
|
|
18
|
+
"debugId": "0D88AD8518CAE38D64756E2164756E21",
|
|
19
|
+
"names": []
|
|
20
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
declare const pointerBrand: unique symbol;
|
|
2
|
+
export type PointerInput = number | bigint;
|
|
3
|
+
export type Pointer = PointerInput & {
|
|
4
|
+
readonly [pointerBrand]: "Pointer";
|
|
5
|
+
};
|
|
6
|
+
type PointerSource = ArrayBufferLike | ArrayBufferView;
|
|
7
|
+
type BunPointer = number;
|
|
8
|
+
export declare const FFIType: {
|
|
9
|
+
readonly char: "char";
|
|
10
|
+
readonly int8_t: "int8_t";
|
|
11
|
+
readonly i8: "i8";
|
|
12
|
+
readonly uint8_t: "uint8_t";
|
|
13
|
+
readonly u8: "u8";
|
|
14
|
+
readonly int16_t: "int16_t";
|
|
15
|
+
readonly i16: "i16";
|
|
16
|
+
readonly uint16_t: "uint16_t";
|
|
17
|
+
readonly u16: "u16";
|
|
18
|
+
readonly int32_t: "int32_t";
|
|
19
|
+
readonly i32: "i32";
|
|
20
|
+
readonly int: "int";
|
|
21
|
+
readonly uint32_t: "uint32_t";
|
|
22
|
+
readonly u32: "u32";
|
|
23
|
+
readonly int64_t: "int64_t";
|
|
24
|
+
readonly i64: "i64";
|
|
25
|
+
readonly uint64_t: "uint64_t";
|
|
26
|
+
readonly u64: "u64";
|
|
27
|
+
readonly double: "double";
|
|
28
|
+
readonly f64: "f64";
|
|
29
|
+
readonly float: "float";
|
|
30
|
+
readonly f32: "f32";
|
|
31
|
+
readonly bool: "bool";
|
|
32
|
+
readonly ptr: "ptr";
|
|
33
|
+
readonly pointer: "pointer";
|
|
34
|
+
readonly void: "void";
|
|
35
|
+
readonly cstring: "cstring";
|
|
36
|
+
readonly function: "function";
|
|
37
|
+
readonly usize: "usize";
|
|
38
|
+
readonly callback: "callback";
|
|
39
|
+
readonly napi_env: "napi_env";
|
|
40
|
+
readonly napi_value: "napi_value";
|
|
41
|
+
readonly buffer: "buffer";
|
|
42
|
+
};
|
|
43
|
+
export type FFIType = (typeof FFIType)[keyof typeof FFIType];
|
|
44
|
+
export type FFITypeOrString = FFIType;
|
|
45
|
+
export interface FFIFunction {
|
|
46
|
+
readonly args?: readonly FFITypeOrString[];
|
|
47
|
+
readonly returns?: FFITypeOrString;
|
|
48
|
+
readonly ptr?: Pointer;
|
|
49
|
+
readonly threadsafe?: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface FFICallbackInstance {
|
|
52
|
+
readonly ptr: Pointer | null;
|
|
53
|
+
readonly threadsafe: boolean;
|
|
54
|
+
close(): void;
|
|
55
|
+
}
|
|
56
|
+
export interface Library<Fns extends Record<string, FFIFunction>> {
|
|
57
|
+
symbols: {
|
|
58
|
+
[K in keyof Fns]: (...args: any[]) => any;
|
|
59
|
+
};
|
|
60
|
+
createCallback(callback: (...args: any[]) => any, definition: FFIFunction): FFICallbackInstance;
|
|
61
|
+
close(): void;
|
|
62
|
+
}
|
|
63
|
+
interface FfiBackend {
|
|
64
|
+
dlopen<Fns extends Record<string, FFIFunction>>(path: string | URL, symbols: Fns): Library<Fns>;
|
|
65
|
+
ptr(value: PointerSource): Pointer;
|
|
66
|
+
suffix: string;
|
|
67
|
+
toArrayBuffer(pointer: Pointer, offset: number | undefined, length: number): ArrayBuffer;
|
|
68
|
+
}
|
|
69
|
+
interface BunFFIFunction {
|
|
70
|
+
readonly args?: readonly FFITypeOrString[];
|
|
71
|
+
readonly returns?: FFITypeOrString;
|
|
72
|
+
readonly ptr?: BunPointer;
|
|
73
|
+
readonly threadsafe?: boolean;
|
|
74
|
+
}
|
|
75
|
+
interface BunFfiLibrary<Fns extends Record<string, BunFFIFunction>> {
|
|
76
|
+
symbols: {
|
|
77
|
+
[K in keyof Fns]: (...args: any[]) => any;
|
|
78
|
+
};
|
|
79
|
+
close(): void;
|
|
80
|
+
}
|
|
81
|
+
interface BunFfiBackend {
|
|
82
|
+
JSCallback: new (callback: (...args: any[]) => any, definition: BunFFIFunction) => FFICallbackInstance;
|
|
83
|
+
dlopen<Fns extends Record<string, BunFFIFunction>>(path: string | URL, symbols: Fns): BunFfiLibrary<Fns>;
|
|
84
|
+
ptr(value: PointerSource): Pointer;
|
|
85
|
+
suffix: string;
|
|
86
|
+
toArrayBuffer(pointer: BunPointer, offset: number | undefined, length: number): ArrayBuffer;
|
|
87
|
+
}
|
|
88
|
+
interface NodeFFIFunction {
|
|
89
|
+
readonly arguments: readonly string[];
|
|
90
|
+
readonly return: string;
|
|
91
|
+
}
|
|
92
|
+
interface NodeDynamicLibrary {
|
|
93
|
+
close(): void;
|
|
94
|
+
registerCallback(signature: NodeFFIFunction, callback: (...args: any[]) => any): bigint;
|
|
95
|
+
unregisterCallback(pointer: bigint): void;
|
|
96
|
+
}
|
|
97
|
+
interface NodeFfiLibrary {
|
|
98
|
+
readonly lib: NodeDynamicLibrary;
|
|
99
|
+
readonly functions: Record<string, (...args: any[]) => any>;
|
|
100
|
+
}
|
|
101
|
+
interface NodeFfiBackend {
|
|
102
|
+
dlopen(path: string | null, symbols: Record<string, NodeFFIFunction>): NodeFfiLibrary;
|
|
103
|
+
getRawPointer(source: ArrayBuffer): bigint;
|
|
104
|
+
suffix: string;
|
|
105
|
+
toArrayBuffer(pointer: bigint, length: number, copy?: boolean): ArrayBuffer;
|
|
106
|
+
}
|
|
107
|
+
export declare const FFI_UNAVAILABLE = "OpenTUI native FFI is not available for this runtime yet";
|
|
108
|
+
export declare const BUN_DLOPEN_NULL = "Bun FFI backend does not support dlopen(null)";
|
|
109
|
+
export declare const LIBRARY_CLOSED = "Cannot create FFI callback after library.close() has been called";
|
|
110
|
+
export declare const NODE_CALLBACK_THREADSAFE = "Node FFI callbacks are same-thread only and do not support threadsafe callbacks";
|
|
111
|
+
export declare const NODE_NAPI_UNSUPPORTED = "Node FFI backend does not support Bun N-API FFI types";
|
|
112
|
+
export declare const NODE_POINTER_OVERRIDE = "Node FFI backend does not support FFIFunction.ptr overrides";
|
|
113
|
+
export declare const NODE_POINTER_ARGUMENT = "Node FFI pointer arguments must be a Pointer, ArrayBuffer, or ArrayBufferView";
|
|
114
|
+
export declare const NODE_PTR_VALUE = "node:ffi ptr() only supports ArrayBuffer and ArrayBufferView values backed by ArrayBuffer";
|
|
115
|
+
export declare const NODE_STRING_RETURN = "Node FFI backend does not normalize string return values (yet)";
|
|
116
|
+
export declare const NODE_USIZE_UNSUPPORTED = "Node FFI backend does not support usize yet";
|
|
117
|
+
export declare const POINTER_NEGATIVE = "Pointer must be non-negative";
|
|
118
|
+
export declare const POINTER_OFFSET_NEGATIVE = "Pointer offset must be non-negative";
|
|
119
|
+
export declare const POINTER_OFFSET_UNSAFE = "Pointer offset must be a safe integer";
|
|
120
|
+
export declare const POINTER_UNSAFE = "Pointer exceeds safe integer range";
|
|
121
|
+
export declare function toPointer(value: PointerInput): Pointer;
|
|
122
|
+
export declare function ffiBool(value: boolean): 0 | 1;
|
|
123
|
+
export declare function createBunBackend(bun: BunFfiBackend): FfiBackend;
|
|
124
|
+
export declare function createNodeBackend(nodeFfi: NodeFfiBackend): FfiBackend;
|
|
125
|
+
export declare const dlopen: <Fns extends Record<string, FFIFunction>>(path: string | URL, symbols: Fns) => Library<Fns>;
|
|
126
|
+
export declare const ptr: (value: PointerSource) => Pointer;
|
|
127
|
+
export declare const suffix: string;
|
|
128
|
+
export declare const toArrayBuffer: (pointer: Pointer, offset: number | undefined, length: number) => ArrayBuffer;
|
|
129
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface WriteFileOptions {
|
|
2
|
+
createPath?: boolean;
|
|
3
|
+
mode?: number;
|
|
4
|
+
}
|
|
5
|
+
interface FileImportModule {
|
|
6
|
+
default: string;
|
|
7
|
+
}
|
|
8
|
+
type FilePathFallback = string | URL | (() => string | URL);
|
|
9
|
+
export declare const sleep: (msOrDate: number | Date) => Promise<void>;
|
|
10
|
+
export declare const stringWidth: (text: string) => number;
|
|
11
|
+
export declare const stripANSI: (text: string) => string;
|
|
12
|
+
export declare const writeFile: (destination: string | URL, data: string | ArrayBufferView, options?: WriteFileOptions) => Promise<number>;
|
|
13
|
+
export declare function resolveBundledFilePath(loadBundledFile: () => Promise<FileImportModule>, fallbackPath: FilePathFallback, metaUrl: string): Promise<string>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { after, afterEach, before, beforeEach, describe, it, test } from "node:test";
|
|
2
|
+
type ThrowMatcher = RegExp | string | Error | ((value: unknown) => boolean) | (new (...args: any[]) => Error);
|
|
3
|
+
declare class Expectation<T> {
|
|
4
|
+
private readonly received;
|
|
5
|
+
constructor(received: T);
|
|
6
|
+
toBe(expected: T): void;
|
|
7
|
+
toBeNull(): void;
|
|
8
|
+
toEqual(expected: unknown): void;
|
|
9
|
+
toThrow(expected?: ThrowMatcher): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function expect<T>(received: T): Expectation<T>;
|
|
12
|
+
export { after, afterEach, before, beforeEach, describe, it, test };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const WORKER_UNAVAILABLE = "OpenTUI tree-sitter workers are not available for this runtime yet.";
|
|
2
|
+
export interface WorkerMessageEvent<T = unknown> {
|
|
3
|
+
readonly data: T;
|
|
4
|
+
}
|
|
5
|
+
export interface WorkerErrorEvent {
|
|
6
|
+
readonly error?: unknown;
|
|
7
|
+
readonly message: string;
|
|
8
|
+
}
|
|
9
|
+
export type WorkerMessageHandler<T = unknown> = (event: WorkerMessageEvent<T>) => void | Promise<void>;
|
|
10
|
+
export type WorkerErrorHandler = (event: WorkerErrorEvent) => void;
|
|
11
|
+
export interface PlatformWorkerOptions {
|
|
12
|
+
name?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface PlatformWorkerHandle {
|
|
15
|
+
onmessage: WorkerMessageHandler | null;
|
|
16
|
+
onerror: WorkerErrorHandler | null;
|
|
17
|
+
postMessage(value: unknown): void;
|
|
18
|
+
terminate(): void | Promise<number>;
|
|
19
|
+
addEventListener(type: "message" | "error", listener: WorkerMessageHandler | WorkerErrorHandler): void;
|
|
20
|
+
removeEventListener(type: "message" | "error", listener: WorkerMessageHandler | WorkerErrorHandler): void;
|
|
21
|
+
}
|
|
22
|
+
export type PlatformWorkerConstructor = new (specifier: string | URL, options?: PlatformWorkerOptions) => PlatformWorkerHandle;
|
|
23
|
+
export declare const Worker: PlatformWorkerConstructor;
|
|
24
|
+
export declare const isWorkerRuntime: boolean;
|
|
25
|
+
export declare function postWorkerMessage(value: unknown): void;
|
|
26
|
+
export declare function setWorkerMessageHandler<T>(handler: WorkerMessageHandler<T>): () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { BaseRenderable, Renderable, type RenderableOptions } from "../Renderable.js";
|
|
2
|
+
import type { CliRenderer } from "../renderer.js";
|
|
3
|
+
import type { RenderContext } from "../types.js";
|
|
4
|
+
import { SlotRegistry, type SlotRegistryOptions } from "./registry.js";
|
|
5
|
+
import type { PluginContext, PluginErrorEvent, SlotMode } from "./types.js";
|
|
6
|
+
export type CoreSlotMode = SlotMode;
|
|
7
|
+
type CoreSlotProps<TSlotName extends string, TData extends object> = {
|
|
8
|
+
[K in TSlotName]: TData;
|
|
9
|
+
};
|
|
10
|
+
export type CoreSlotRegistry<TSlotName extends string, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> = SlotRegistry<BaseRenderable, CoreSlotProps<TSlotName, TData>, TContext>;
|
|
11
|
+
export type CoreSlotRenderer<TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> = (ctx: Readonly<TContext>, data: TData) => BaseRenderable;
|
|
12
|
+
export interface CoreManagedSlot<TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> {
|
|
13
|
+
render: CoreSlotRenderer<TContext, TData>;
|
|
14
|
+
onActivate?: (ctx: Readonly<TContext>) => void;
|
|
15
|
+
onDeactivate?: (ctx: Readonly<TContext>) => void;
|
|
16
|
+
onDispose?: (ctx: Readonly<TContext>) => void;
|
|
17
|
+
}
|
|
18
|
+
export type CoreSlotContribution<TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> = CoreSlotRenderer<TContext, TData> | CoreManagedSlot<TContext, TData>;
|
|
19
|
+
export interface CorePlugin<TSlotName extends string, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> {
|
|
20
|
+
id: string;
|
|
21
|
+
order?: number;
|
|
22
|
+
setup?: (ctx: Readonly<TContext>, renderer: CliRenderer) => void;
|
|
23
|
+
dispose?: () => void;
|
|
24
|
+
slots: Partial<Record<TSlotName, CoreSlotContribution<TContext, TData>>>;
|
|
25
|
+
}
|
|
26
|
+
export interface CoreResolvedSlotRenderer<TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> {
|
|
27
|
+
id: string;
|
|
28
|
+
renderer: CoreSlotRenderer<TContext, TData>;
|
|
29
|
+
}
|
|
30
|
+
type FallbackNodes = BaseRenderable | BaseRenderable[] | undefined;
|
|
31
|
+
export type CoreSlotFailurePlaceholder<TContext extends PluginContext = PluginContext> = (failure: PluginErrorEvent, ctx: Readonly<TContext>) => FallbackNodes;
|
|
32
|
+
export declare function createCoreSlotRegistry<TSlotName extends string, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>>(renderer: CliRenderer, context: TContext, options?: SlotRegistryOptions): CoreSlotRegistry<TSlotName, TContext, TData>;
|
|
33
|
+
export declare function registerCorePlugin<TSlotName extends string, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>>(registry: CoreSlotRegistry<TSlotName, TContext, TData>, plugin: CorePlugin<TSlotName, TContext, TData>): () => void;
|
|
34
|
+
export declare function resolveCoreSlot<TSlotName extends string, K extends TSlotName, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>>(registry: CoreSlotRegistry<TSlotName, TContext, TData>, slot: K): Array<CoreResolvedSlotRenderer<TContext, TData>>;
|
|
35
|
+
export interface SlotRenderableOptions<TSlotName extends string, K extends TSlotName, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> extends RenderableOptions {
|
|
36
|
+
registry: CoreSlotRegistry<TSlotName, TContext, TData>;
|
|
37
|
+
name: K;
|
|
38
|
+
data?: TData;
|
|
39
|
+
mode?: CoreSlotMode;
|
|
40
|
+
fallback?: FallbackNodes | (() => FallbackNodes);
|
|
41
|
+
pluginFailurePlaceholder?: CoreSlotFailurePlaceholder<TContext>;
|
|
42
|
+
}
|
|
43
|
+
export declare class SlotRenderable<TSlotName extends string = string, TContext extends PluginContext = PluginContext, TData extends object = Record<string, unknown>> extends Renderable {
|
|
44
|
+
private _mode;
|
|
45
|
+
private _slotRegistry;
|
|
46
|
+
private _slotName;
|
|
47
|
+
private _data;
|
|
48
|
+
private _fallbackOption;
|
|
49
|
+
private _pluginFailurePlaceholder?;
|
|
50
|
+
private _disposed;
|
|
51
|
+
private _mountedNodes;
|
|
52
|
+
private _pluginNodes;
|
|
53
|
+
private _activePluginIds;
|
|
54
|
+
private _fallbackNodes;
|
|
55
|
+
private _unsubscribe;
|
|
56
|
+
constructor(ctx: RenderContext, options: SlotRenderableOptions<TSlotName, TSlotName, TContext, TData>);
|
|
57
|
+
get mode(): CoreSlotMode;
|
|
58
|
+
set mode(value: CoreSlotMode);
|
|
59
|
+
get data(): TData;
|
|
60
|
+
set data(value: TData);
|
|
61
|
+
refresh(): void;
|
|
62
|
+
protected destroySelf(): void;
|
|
63
|
+
private _cleanupAll;
|
|
64
|
+
private _ensureFallbackNodes;
|
|
65
|
+
private _callManagedHook;
|
|
66
|
+
private _detachNodeFromMount;
|
|
67
|
+
private _cleanupInactivePluginNodes;
|
|
68
|
+
private _cleanupReplacedPluginNodes;
|
|
69
|
+
private _resolvePluginFailurePlaceholder;
|
|
70
|
+
private _reconcileMountedNodes;
|
|
71
|
+
}
|
|
72
|
+
export {};
|