@fairyhunter13/opentui-core 0.1.91 → 0.1.94
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/3d/SpriteResourceManager.d.ts +74 -0
- package/3d/SpriteUtils.d.ts +13 -0
- package/3d/TextureUtils.d.ts +24 -0
- package/3d/ThreeRenderable.d.ts +40 -0
- package/3d/WGPURenderer.d.ts +61 -0
- package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
- package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
- package/3d/animation/SpriteAnimator.d.ts +124 -0
- package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
- package/3d/canvas.d.ts +44 -0
- package/3d/index.d.ts +12 -0
- package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
- package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
- package/3d/physics/physics-interface.d.ts +27 -0
- package/3d.d.ts +2 -0
- package/3d.js +34042 -0
- package/3d.js.map +155 -0
- package/LICENSE +21 -0
- package/NativeSpanFeed.d.ts +41 -0
- package/Renderable.d.ts +334 -0
- package/animation/Timeline.d.ts +126 -0
- package/ansi.d.ts +13 -0
- package/buffer.d.ts +107 -0
- package/console.d.ts +143 -0
- package/edit-buffer.d.ts +98 -0
- package/editor-view.d.ts +73 -0
- package/index-e6ec7apq.js +18415 -0
- package/index-e6ec7apq.js.map +64 -0
- package/index-h066zmrb.js +12619 -0
- package/index-h066zmrb.js.map +43 -0
- package/index-ynzawt3n.js +113 -0
- package/index-ynzawt3n.js.map +10 -0
- package/index.d.ts +21 -0
- package/index.js +430 -0
- package/index.js.map +9 -0
- package/lib/KeyHandler.d.ts +61 -0
- package/lib/RGBA.d.ts +25 -0
- package/lib/ascii.font.d.ts +508 -0
- package/lib/border.d.ts +49 -0
- package/lib/bunfs.d.ts +7 -0
- package/lib/clipboard.d.ts +17 -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 +89 -0
- package/lib/hast-styled-text.d.ts +17 -0
- package/lib/index.d.ts +21 -0
- package/lib/keymapping.d.ts +25 -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 +2 -0
- package/lib/parse.keypress.d.ts +26 -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/renderable.validations.d.ts +12 -0
- package/lib/scroll-acceleration.d.ts +43 -0
- package/lib/selection.d.ts +63 -0
- package/lib/singleton.d.ts +7 -0
- package/lib/stdin-parser.d.ts +76 -0
- package/lib/styled-text.d.ts +63 -0
- package/lib/terminal-capability-detection.d.ts +30 -0
- package/lib/terminal-palette.d.ts +50 -0
- package/lib/tree-sitter/assets/update.d.ts +11 -0
- package/lib/tree-sitter/client.d.ts +47 -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 +8 -0
- package/lib/tree-sitter/parser.worker.d.ts +1 -0
- package/lib/tree-sitter/parsers-config.d.ts +38 -0
- package/lib/tree-sitter/resolve-ft.d.ts +2 -0
- package/lib/tree-sitter/types.d.ts +81 -0
- package/lib/tree-sitter-styled-text.d.ts +14 -0
- package/lib/validate-dir-name.d.ts +1 -0
- package/lib/yoga.options.d.ts +32 -0
- package/package.json +51 -63
- package/parser.worker.js +869 -0
- package/parser.worker.js.map +12 -0
- package/plugins/core-slot.d.ts +72 -0
- package/plugins/registry.d.ts +38 -0
- package/plugins/types.d.ts +34 -0
- package/post/filters.d.ts +105 -0
- package/renderables/ASCIIFont.d.ts +52 -0
- package/renderables/Box.d.ts +72 -0
- package/renderables/Code.d.ts +78 -0
- package/renderables/Diff.d.ts +142 -0
- package/renderables/EditBufferRenderable.d.ts +162 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +67 -0
- package/renderables/LineNumberRenderable.d.ts +74 -0
- package/renderables/Markdown.d.ts +173 -0
- package/renderables/ScrollBar.d.ts +77 -0
- package/renderables/ScrollBox.d.ts +124 -0
- package/renderables/Select.d.ts +115 -0
- package/renderables/Slider.d.ts +44 -0
- package/renderables/TabSelect.d.ts +96 -0
- package/renderables/Text.d.ts +36 -0
- package/renderables/TextBufferRenderable.d.ts +105 -0
- package/renderables/TextNode.d.ts +91 -0
- package/renderables/TextTable.d.ts +140 -0
- package/renderables/Textarea.d.ts +114 -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 +22 -0
- package/renderables/markdown-parser.d.ts +10 -0
- package/renderer.d.ts +388 -0
- package/runtime-plugin-support.d.ts +3 -0
- package/runtime-plugin-support.js +29 -0
- package/runtime-plugin-support.js.map +10 -0
- package/runtime-plugin.d.ts +11 -0
- package/runtime-plugin.js +16 -0
- package/runtime-plugin.js.map +9 -0
- package/syntax-style.d.ts +54 -0
- package/testing/manual-clock.d.ts +16 -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 +23 -0
- package/testing/spy.d.ts +7 -0
- package/testing/test-recorder.d.ts +61 -0
- package/testing/test-renderer.d.ts +23 -0
- package/testing.d.ts +6 -0
- package/testing.js +675 -0
- package/testing.js.map +15 -0
- package/text-buffer-view.d.ts +42 -0
- package/text-buffer.d.ts +67 -0
- package/types.d.ts +131 -0
- package/utils.d.ts +14 -0
- package/zig-structs.d.ts +155 -0
- package/zig.d.ts +351 -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/thai-debug-test.ts +0 -68
- package/docs/development.md +0 -141
- package/docs/env-vars.md +0 -140
- package/docs/getting-started.md +0 -353
- package/docs/renderables-vs-constructs.md +0 -159
- package/docs/tree-sitter.md +0 -311
- package/scripts/build.ts +0 -400
- package/scripts/publish.ts +0 -60
- package/src/3d/SpriteResourceManager.ts +0 -286
- package/src/3d/SpriteUtils.ts +0 -71
- package/src/3d/TextureUtils.ts +0 -196
- package/src/3d/ThreeRenderable.ts +0 -197
- package/src/3d/WGPURenderer.ts +0 -294
- package/src/3d/animation/ExplodingSpriteEffect.ts +0 -513
- package/src/3d/animation/PhysicsExplodingSpriteEffect.ts +0 -429
- package/src/3d/animation/SpriteAnimator.ts +0 -633
- package/src/3d/animation/SpriteParticleGenerator.ts +0 -435
- package/src/3d/canvas.ts +0 -464
- package/src/3d/index.ts +0 -12
- package/src/3d/physics/PlanckPhysicsAdapter.ts +0 -72
- package/src/3d/physics/RapierPhysicsAdapter.ts +0 -66
- package/src/3d/physics/physics-interface.ts +0 -31
- package/src/3d/shaders/supersampling.wgsl +0 -201
- package/src/3d.ts +0 -3
- package/src/NativeSpanFeed.ts +0 -300
- package/src/Renderable.ts +0 -1698
- 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 -18
- 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/markdown-benchmark.ts +0 -1804
- 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/renderer-benchmark.ts +0 -754
- package/src/benchmark/text-table-benchmark.ts +0 -947
- package/src/buffer.test.ts +0 -291
- package/src/buffer.ts +0 -519
- package/src/console.test.ts +0 -612
- package/src/console.ts +0 -1255
- package/src/edit-buffer.test.ts +0 -1769
- package/src/edit-buffer.ts +0 -411
- package/src/editor-view.test.ts +0 -1032
- package/src/editor-view.ts +0 -284
- package/src/examples/ascii-font-selection-demo.ts +0 -245
- package/src/examples/assets/Water_2_M_Normal.jpg +0 -0
- package/src/examples/assets/concrete.png +0 -0
- package/src/examples/assets/crate.png +0 -0
- package/src/examples/assets/crate_emissive.png +0 -0
- package/src/examples/assets/forrest_background.png +0 -0
- package/src/examples/assets/hast-example.json +0 -1018
- package/src/examples/assets/heart.png +0 -0
- package/src/examples/assets/main_char_heavy_attack.png +0 -0
- package/src/examples/assets/main_char_idle.png +0 -0
- package/src/examples/assets/main_char_jump_end.png +0 -0
- package/src/examples/assets/main_char_jump_landing.png +0 -0
- package/src/examples/assets/main_char_jump_start.png +0 -0
- package/src/examples/assets/main_char_run_loop.png +0 -0
- package/src/examples/assets/roughness_map.jpg +0 -0
- package/src/examples/build.ts +0 -115
- package/src/examples/code-demo.ts +0 -584
- package/src/examples/console-demo.ts +0 -358
- package/src/examples/core-plugin-slots-demo.ts +0 -759
- package/src/examples/diff-demo.ts +0 -699
- package/src/examples/draggable-three-demo.ts +0 -259
- package/src/examples/editor-demo.ts +0 -322
- package/src/examples/extmarks-demo.ts +0 -204
- package/src/examples/focus-restore-demo.ts +0 -310
- package/src/examples/fonts.ts +0 -245
- package/src/examples/fractal-shader-demo.ts +0 -268
- package/src/examples/framebuffer-demo.ts +0 -674
- package/src/examples/full-unicode-demo.ts +0 -181
- package/src/examples/golden-star-demo.ts +0 -933
- package/src/examples/grayscale-buffer-demo.ts +0 -249
- package/src/examples/hast-syntax-highlighting-demo.ts +0 -129
- package/src/examples/index.ts +0 -925
- package/src/examples/input-demo.ts +0 -377
- package/src/examples/input-select-layout-demo.ts +0 -425
- package/src/examples/install.sh +0 -143
- package/src/examples/keypress-debug-demo.ts +0 -452
- package/src/examples/lib/HexList.ts +0 -122
- package/src/examples/lib/PaletteGrid.ts +0 -125
- package/src/examples/lib/standalone-keys.ts +0 -25
- package/src/examples/lib/tab-controller.ts +0 -243
- package/src/examples/lights-phong-demo.ts +0 -290
- package/src/examples/link-demo.ts +0 -220
- package/src/examples/live-state-demo.ts +0 -480
- package/src/examples/markdown-demo.ts +0 -620
- package/src/examples/mouse-interaction-demo.ts +0 -428
- package/src/examples/nested-zindex-demo.ts +0 -357
- package/src/examples/opacity-example.ts +0 -235
- package/src/examples/opentui-demo.ts +0 -1057
- package/src/examples/physx-planck-2d-demo.ts +0 -507
- package/src/examples/physx-rapier-2d-demo.ts +0 -526
- package/src/examples/relative-positioning-demo.ts +0 -323
- package/src/examples/scroll-example.ts +0 -214
- package/src/examples/scrollbox-mouse-test.ts +0 -112
- package/src/examples/scrollbox-overlay-hit-test.ts +0 -206
- package/src/examples/select-demo.ts +0 -237
- package/src/examples/shader-cube-demo.ts +0 -772
- package/src/examples/simple-layout-example.ts +0 -591
- package/src/examples/slider-demo.ts +0 -617
- package/src/examples/split-mode-demo.ts +0 -445
- package/src/examples/sprite-animation-demo.ts +0 -443
- package/src/examples/sprite-particle-generator-demo.ts +0 -486
- package/src/examples/static-sprite-demo.ts +0 -193
- package/src/examples/sticky-scroll-example.ts +0 -308
- package/src/examples/styled-text-demo.ts +0 -282
- package/src/examples/tab-select-demo.ts +0 -219
- package/src/examples/terminal-title.ts +0 -29
- package/src/examples/terminal.ts +0 -305
- package/src/examples/text-node-demo.ts +0 -416
- package/src/examples/text-selection-demo.ts +0 -377
- package/src/examples/text-table-demo.ts +0 -503
- package/src/examples/text-truncation-demo.ts +0 -481
- package/src/examples/text-wrap.ts +0 -757
- package/src/examples/texture-loading-demo.ts +0 -259
- package/src/examples/timeline-example.ts +0 -670
- package/src/examples/transparency-demo.ts +0 -241
- package/src/examples/vnode-composition-demo.ts +0 -404
- package/src/index.ts +0 -22
- 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 -984
- package/src/lib/RGBA.ts +0 -204
- package/src/lib/ascii.font.ts +0 -330
- package/src/lib/border.test.ts +0 -83
- package/src/lib/border.ts +0 -168
- package/src/lib/bunfs.test.ts +0 -27
- package/src/lib/bunfs.ts +0 -18
- package/src/lib/clipboard.test.ts +0 -41
- package/src/lib/clipboard.ts +0 -47
- package/src/lib/clock.ts +0 -31
- 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 -322
- package/src/lib/extmarks.test.ts +0 -3457
- package/src/lib/extmarks.ts +0 -843
- 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 -21
- package/src/lib/keymapping.test.ts +0 -280
- package/src/lib/keymapping.ts +0 -87
- package/src/lib/objects-in-viewport.test.ts +0 -787
- 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 -340
- package/src/lib/parse.keypress-kitty.test.ts +0 -663
- package/src/lib/parse.keypress-kitty.ts +0 -439
- package/src/lib/parse.keypress.test.ts +0 -1849
- package/src/lib/parse.keypress.ts +0 -397
- package/src/lib/parse.mouse.test.ts +0 -552
- package/src/lib/parse.mouse.ts +0 -232
- package/src/lib/paste.ts +0 -16
- package/src/lib/queue.ts +0 -65
- 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 -240
- package/src/lib/singleton.ts +0 -28
- package/src/lib/stdin-parser.test.ts +0 -1676
- package/src/lib/stdin-parser.ts +0 -1248
- package/src/lib/styled-text.ts +0 -178
- package/src/lib/terminal-capability-detection.test.ts +0 -202
- package/src/lib/terminal-capability-detection.ts +0 -79
- package/src/lib/terminal-palette.test.ts +0 -878
- package/src/lib/terminal-palette.ts +0 -383
- package/src/lib/tree-sitter/assets/README.md +0 -118
- package/src/lib/tree-sitter/assets/update.ts +0 -331
- package/src/lib/tree-sitter/assets.d.ts +0 -9
- package/src/lib/tree-sitter/cache.test.ts +0 -270
- package/src/lib/tree-sitter/client.test.ts +0 -1061
- package/src/lib/tree-sitter/client.ts +0 -615
- package/src/lib/tree-sitter/default-parsers.ts +0 -80
- package/src/lib/tree-sitter/download-utils.ts +0 -148
- package/src/lib/tree-sitter/index.ts +0 -28
- package/src/lib/tree-sitter/parser.worker.ts +0 -1001
- package/src/lib/tree-sitter/parsers-config.ts +0 -75
- package/src/lib/tree-sitter/resolve-ft.ts +0 -62
- package/src/lib/tree-sitter/types.ts +0 -81
- package/src/lib/tree-sitter-styled-text.test.ts +0 -1253
- package/src/lib/tree-sitter-styled-text.ts +0 -306
- 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/plugins/core-slot.ts +0 -579
- package/src/plugins/registry.ts +0 -377
- package/src/plugins/types.ts +0 -46
- package/src/post/filters.ts +0 -888
- package/src/renderables/ASCIIFont.ts +0 -219
- package/src/renderables/Box.test.ts +0 -160
- package/src/renderables/Box.ts +0 -295
- package/src/renderables/Code.test.ts +0 -2062
- package/src/renderables/Code.ts +0 -357
- package/src/renderables/Diff.regression.test.ts +0 -226
- package/src/renderables/Diff.test.ts +0 -3027
- package/src/renderables/Diff.ts +0 -1209
- package/src/renderables/EditBufferRenderable.ts +0 -764
- package/src/renderables/FrameBuffer.ts +0 -47
- package/src/renderables/Input.test.ts +0 -1228
- package/src/renderables/Input.ts +0 -245
- package/src/renderables/LineNumberRenderable.ts +0 -675
- package/src/renderables/Markdown.ts +0 -1106
- package/src/renderables/ScrollBar.ts +0 -422
- package/src/renderables/ScrollBox.ts +0 -883
- package/src/renderables/Select.test.ts +0 -1010
- package/src/renderables/Select.ts +0 -523
- package/src/renderables/Slider.test.ts +0 -456
- package/src/renderables/Slider.ts +0 -347
- package/src/renderables/TabSelect.test.ts +0 -197
- package/src/renderables/TabSelect.ts +0 -455
- package/src/renderables/Text.selection-buffer.test.ts +0 -123
- package/src/renderables/Text.test.ts +0 -2660
- package/src/renderables/Text.ts +0 -147
- package/src/renderables/TextBufferRenderable.ts +0 -518
- package/src/renderables/TextNode.test.ts +0 -1058
- package/src/renderables/TextNode.ts +0 -325
- package/src/renderables/TextTable.test.ts +0 -1421
- package/src/renderables/TextTable.ts +0 -1344
- package/src/renderables/Textarea.ts +0 -732
- 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__/LineNumberRenderable.scrollbox-simple.test.ts +0 -144
- package/src/renderables/__tests__/LineNumberRenderable.scrollbox.test.ts +0 -816
- package/src/renderables/__tests__/LineNumberRenderable.test.ts +0 -1787
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
- package/src/renderables/__tests__/Markdown.test.ts +0 -2287
- package/src/renderables/__tests__/MultiRenderable.selection.test.ts +0 -87
- package/src/renderables/__tests__/Textarea.buffer.test.ts +0 -682
- package/src/renderables/__tests__/Textarea.destroyed-events.test.ts +0 -675
- package/src/renderables/__tests__/Textarea.editing.test.ts +0 -2041
- 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 -3149
- package/src/renderables/__tests__/Textarea.paste.test.ts +0 -357
- package/src/renderables/__tests__/Textarea.rendering.test.ts +0 -1864
- package/src/renderables/__tests__/Textarea.scroll.test.ts +0 -733
- package/src/renderables/__tests__/Textarea.selection.test.ts +0 -1590
- 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 -217
- 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 -289
- package/src/renderables/index.ts +0 -22
- package/src/renderables/markdown-parser.ts +0 -66
- package/src/renderer.ts +0 -2363
- package/src/runtime-plugin-support.ts +0 -39
- package/src/runtime-plugin.ts +0 -144
- package/src/syntax-style.test.ts +0 -841
- package/src/syntax-style.ts +0 -264
- package/src/testing/README.md +0 -210
- package/src/testing/capture-spans.test.ts +0 -194
- package/src/testing/integration.test.ts +0 -276
- package/src/testing/manual-clock.ts +0 -106
- package/src/testing/mock-keys.test.ts +0 -1356
- package/src/testing/mock-keys.ts +0 -449
- 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 -73
- package/src/testing/spy.ts +0 -13
- package/src/testing/test-recorder.test.ts +0 -415
- package/src/testing/test-recorder.ts +0 -145
- package/src/testing/test-renderer.ts +0 -116
- package/src/testing.ts +0 -7
- 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 -38
- package/src/tests/destroy-during-render.test.ts +0 -200
- package/src/tests/hover-cursor.test.ts +0 -98
- 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 -352
- 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 -1281
- package/src/tests/renderer.console-startup.test.ts +0 -65
- package/src/tests/renderer.control.test.ts +0 -364
- package/src/tests/renderer.core-slot-binding.test.ts +0 -952
- package/src/tests/renderer.cursor.test.ts +0 -26
- package/src/tests/renderer.destroy-during-render.test.ts +0 -110
- package/src/tests/renderer.focus-restore.test.ts +0 -228
- package/src/tests/renderer.focus.test.ts +0 -251
- package/src/tests/renderer.idle.test.ts +0 -219
- package/src/tests/renderer.input.test.ts +0 -2145
- package/src/tests/renderer.kitty-flags.test.ts +0 -195
- package/src/tests/renderer.mouse.test.ts +0 -1269
- package/src/tests/renderer.palette.test.ts +0 -629
- package/src/tests/renderer.selection.test.ts +0 -49
- package/src/tests/renderer.slot-registry.test.ts +0 -649
- package/src/tests/renderer.useMouse.test.ts +0 -50
- package/src/tests/runtime-plugin-support.fixture.ts +0 -11
- package/src/tests/runtime-plugin-support.test.ts +0 -28
- package/src/tests/runtime-plugin.fixture.ts +0 -40
- package/src/tests/runtime-plugin.test.ts +0 -190
- 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 -1530
- package/src/tests/wrap-resize-perf.test.ts +0 -229
- package/src/tests/yoga-setters.test.ts +0 -921
- package/src/text-buffer-view.test.ts +0 -705
- package/src/text-buffer-view.ts +0 -189
- package/src/text-buffer.test.ts +0 -347
- package/src/text-buffer.ts +0 -250
- package/src/types.ts +0 -152
- package/src/utils.ts +0 -88
- package/src/zig/ansi.zig +0 -268
- package/src/zig/bench/README.md +0 -50
- package/src/zig/bench/buffer-draw-text-buffer_bench.zig +0 -887
- package/src/zig/bench/edit-buffer_bench.zig +0 -476
- package/src/zig/bench/native-span-feed_bench.zig +0 -100
- 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 -470
- 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 -273
- package/src/zig/bench/utf8_bench.zig +0 -799
- package/src/zig/bench-utils.zig +0 -431
- package/src/zig/bench.zig +0 -217
- package/src/zig/buffer.zig +0 -2223
- package/src/zig/build.zig +0 -289
- package/src/zig/build.zig.zon +0 -16
- package/src/zig/edit-buffer.zig +0 -825
- package/src/zig/editor-view.zig +0 -802
- package/src/zig/event-bus.zig +0 -13
- package/src/zig/event-emitter.zig +0 -65
- package/src/zig/file-logger.zig +0 -92
- package/src/zig/grapheme.zig +0 -599
- package/src/zig/lib.zig +0 -1834
- package/src/zig/link.zig +0 -333
- package/src/zig/logger.zig +0 -43
- package/src/zig/mem-registry.zig +0 -125
- package/src/zig/native-span-feed-bench-lib.zig +0 -7
- package/src/zig/native-span-feed.zig +0 -708
- package/src/zig/renderer.zig +0 -1386
- package/src/zig/rope.zig +0 -1220
- package/src/zig/syntax-style.zig +0 -161
- package/src/zig/terminal.zig +0 -975
- package/src/zig/test.zig +0 -70
- package/src/zig/tests/README.md +0 -18
- package/src/zig/tests/buffer_test.zig +0 -2526
- package/src/zig/tests/edit-buffer-history_test.zig +0 -271
- package/src/zig/tests/edit-buffer_test.zig +0 -1689
- package/src/zig/tests/editor-view_test.zig +0 -3299
- package/src/zig/tests/event-emitter_test.zig +0 -249
- package/src/zig/tests/grapheme_test.zig +0 -1304
- package/src/zig/tests/link_test.zig +0 -190
- package/src/zig/tests/mem-registry_test.zig +0 -473
- package/src/zig/tests/memory_leak_regression_test.zig +0 -159
- package/src/zig/tests/native-span-feed_test.zig +0 -1264
- package/src/zig/tests/renderer_test.zig +0 -1010
- 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/syntax-style_test.zig +0 -557
- package/src/zig/tests/terminal_test.zig +0 -719
- package/src/zig/tests/text-buffer-drawing_test.zig +0 -3237
- package/src/zig/tests/text-buffer-highlights_test.zig +0 -666
- 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 -1035
- package/src/zig/tests/text-buffer-selection_viewport_test.zig +0 -358
- package/src/zig/tests/text-buffer-view_test.zig +0 -3649
- 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 -4057
- 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/text-buffer-iterators.zig +0 -499
- package/src/zig/text-buffer-segment.zig +0 -404
- package/src/zig/text-buffer-view.zig +0 -1371
- package/src/zig/text-buffer.zig +0 -1180
- package/src/zig/utf8.zig +0 -1948
- package/src/zig/utils.zig +0 -9
- package/src/zig-structs.ts +0 -261
- package/src/zig.ts +0 -3843
- package/tsconfig.build.json +0 -22
- package/tsconfig.json +0 -28
- /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
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { readFile, writeFile, mkdir } from "fs/promises"
|
|
4
|
-
import * as path from "path"
|
|
5
|
-
import { DownloadUtils } from "../download-utils.js"
|
|
6
|
-
import { parseArgs } from "util"
|
|
7
|
-
import type { FiletypeParserOptions } from "../types.js"
|
|
8
|
-
import { readdir } from "fs/promises"
|
|
9
|
-
|
|
10
|
-
interface ParsersConfig {
|
|
11
|
-
parsers: FiletypeParserOptions[]
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface GeneratedParser {
|
|
15
|
-
filetype: string
|
|
16
|
-
languagePath: string
|
|
17
|
-
highlightsPath: string
|
|
18
|
-
injectionsPath?: string
|
|
19
|
-
injectionMapping?: any
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface UpdateOptions {
|
|
23
|
-
/** Path to parsers-config.json */
|
|
24
|
-
configPath: string
|
|
25
|
-
/** Directory where .wasm and .scm files will be downloaded */
|
|
26
|
-
assetsDir: string
|
|
27
|
-
/** Path where the generated TypeScript file will be written */
|
|
28
|
-
outputPath: string
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function getDefaultOptions(): UpdateOptions {
|
|
32
|
-
return {
|
|
33
|
-
configPath: path.resolve(__dirname, "../parsers-config"),
|
|
34
|
-
assetsDir: path.resolve(__dirname),
|
|
35
|
-
outputPath: path.resolve(__dirname, "../default-parsers.ts"),
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function loadConfig(configPath: string): Promise<ParsersConfig> {
|
|
40
|
-
let ext = path.extname(configPath)
|
|
41
|
-
let resolvedConfigPath = configPath
|
|
42
|
-
|
|
43
|
-
if (ext === "") {
|
|
44
|
-
const files = await readdir(path.dirname(configPath))
|
|
45
|
-
const file = files.find(
|
|
46
|
-
(file) =>
|
|
47
|
-
file.startsWith(path.basename(configPath)) &&
|
|
48
|
-
(file.endsWith(".json") || file.endsWith(".ts") || file.endsWith(".js")),
|
|
49
|
-
)
|
|
50
|
-
if (!file) {
|
|
51
|
-
throw new Error(`No config file found for ${configPath}`)
|
|
52
|
-
}
|
|
53
|
-
resolvedConfigPath = path.join(path.dirname(configPath), file)
|
|
54
|
-
ext = path.extname(resolvedConfigPath)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (ext === ".json") {
|
|
58
|
-
const configContent = await readFile(resolvedConfigPath, "utf-8")
|
|
59
|
-
return JSON.parse(configContent)
|
|
60
|
-
} else if (ext === ".ts" || ext === ".js") {
|
|
61
|
-
const { default: configContent } = await import(resolvedConfigPath)
|
|
62
|
-
return configContent
|
|
63
|
-
}
|
|
64
|
-
throw new Error(`Unsupported config file extension: ${ext}`)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
async function downloadLanguage(
|
|
68
|
-
filetype: string,
|
|
69
|
-
languageUrl: string,
|
|
70
|
-
assetsDir: string,
|
|
71
|
-
outputPath: string,
|
|
72
|
-
): Promise<string> {
|
|
73
|
-
const languageDir = path.join(assetsDir, filetype)
|
|
74
|
-
const languageFilename = path.basename(languageUrl)
|
|
75
|
-
const languagePath = path.join(languageDir, languageFilename)
|
|
76
|
-
|
|
77
|
-
const result = await DownloadUtils.downloadToPath(languageUrl, languagePath)
|
|
78
|
-
|
|
79
|
-
if (result.error) {
|
|
80
|
-
throw new Error(`Failed to download language for ${filetype}: ${result.error}`)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return "./" + path.relative(path.dirname(outputPath), languagePath)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
async function downloadAndCombineQueries(
|
|
87
|
-
filetype: string,
|
|
88
|
-
queryUrls: string[],
|
|
89
|
-
assetsDir: string,
|
|
90
|
-
outputPath: string,
|
|
91
|
-
queryType: "highlights" | "injections",
|
|
92
|
-
configPath: string,
|
|
93
|
-
): Promise<string> {
|
|
94
|
-
const queriesDir = path.join(assetsDir, filetype)
|
|
95
|
-
const queryPath = path.join(queriesDir, `${queryType}.scm`)
|
|
96
|
-
|
|
97
|
-
const queryContents: string[] = []
|
|
98
|
-
|
|
99
|
-
for (let i = 0; i < queryUrls.length; i++) {
|
|
100
|
-
const queryUrl = queryUrls[i]
|
|
101
|
-
|
|
102
|
-
if (queryUrl.startsWith("./")) {
|
|
103
|
-
console.log(` Using local query ${i + 1}/${queryUrls.length}: ${queryUrl}`)
|
|
104
|
-
|
|
105
|
-
try {
|
|
106
|
-
const localPath = path.resolve(path.dirname(configPath), queryUrl)
|
|
107
|
-
const content = await readFile(localPath, "utf-8")
|
|
108
|
-
|
|
109
|
-
if (content.trim()) {
|
|
110
|
-
queryContents.push(content)
|
|
111
|
-
console.log(` ✓ Loaded ${content.split("\n").length} lines from local file`)
|
|
112
|
-
}
|
|
113
|
-
} catch (error) {
|
|
114
|
-
console.warn(`Failed to read local query from ${queryUrl}: ${error}`)
|
|
115
|
-
continue
|
|
116
|
-
}
|
|
117
|
-
} else {
|
|
118
|
-
console.log(` Downloading query ${i + 1}/${queryUrls.length}: ${queryUrl}`)
|
|
119
|
-
|
|
120
|
-
try {
|
|
121
|
-
const response = await fetch(queryUrl)
|
|
122
|
-
if (!response.ok) {
|
|
123
|
-
console.warn(`Failed to download query from ${queryUrl}: ${response.statusText}`)
|
|
124
|
-
continue
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const content = await response.text()
|
|
128
|
-
if (content.trim()) {
|
|
129
|
-
queryContents.push(`; Query from: ${queryUrl}\n${content}`)
|
|
130
|
-
console.log(` ✓ Downloaded ${content.split("\n").length} lines`)
|
|
131
|
-
}
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.warn(`Failed to download query from ${queryUrl}: ${error}`)
|
|
134
|
-
continue
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
const combinedContent = queryContents.join("\n\n")
|
|
140
|
-
await writeFile(queryPath, combinedContent, "utf-8")
|
|
141
|
-
|
|
142
|
-
console.log(` Combined ${queryContents.length} queries into ${queryPath}`)
|
|
143
|
-
|
|
144
|
-
return "./" + path.relative(path.dirname(outputPath), queryPath)
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
async function generateDefaultParsersFile(parsers: GeneratedParser[], outputPath: string): Promise<void> {
|
|
148
|
-
const imports = parsers
|
|
149
|
-
.map((parser) => {
|
|
150
|
-
const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, "_")
|
|
151
|
-
const lines = [
|
|
152
|
-
`import ${safeFiletype}_highlights from "${parser.highlightsPath}" with { type: "file" }`,
|
|
153
|
-
`import ${safeFiletype}_language from "${parser.languagePath}" with { type: "file" }`,
|
|
154
|
-
]
|
|
155
|
-
if (parser.injectionsPath) {
|
|
156
|
-
lines.push(`import ${safeFiletype}_injections from "${parser.injectionsPath}" with { type: "file" }`)
|
|
157
|
-
}
|
|
158
|
-
return lines.join("\n")
|
|
159
|
-
})
|
|
160
|
-
.join("\n")
|
|
161
|
-
|
|
162
|
-
const parserDefinitions = parsers
|
|
163
|
-
.map((parser) => {
|
|
164
|
-
const safeFiletype = parser.filetype.replace(/[^a-zA-Z0-9]/g, "_")
|
|
165
|
-
const queriesLines = [
|
|
166
|
-
` highlights: [resolve(dirname(fileURLToPath(import.meta.url)), ${safeFiletype}_highlights)],`,
|
|
167
|
-
]
|
|
168
|
-
if (parser.injectionsPath) {
|
|
169
|
-
queriesLines.push(
|
|
170
|
-
` injections: [resolve(dirname(fileURLToPath(import.meta.url)), ${safeFiletype}_injections)],`,
|
|
171
|
-
)
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
const injectionMappingLine = parser.injectionMapping
|
|
175
|
-
? ` injectionMapping: ${JSON.stringify(parser.injectionMapping, null, 10)},`
|
|
176
|
-
: ""
|
|
177
|
-
|
|
178
|
-
return ` {
|
|
179
|
-
filetype: "${parser.filetype}",
|
|
180
|
-
queries: {
|
|
181
|
-
${queriesLines.join("\n")}
|
|
182
|
-
},
|
|
183
|
-
wasm: resolve(dirname(fileURLToPath(import.meta.url)), ${safeFiletype}_language),${injectionMappingLine ? "\n" + injectionMappingLine : ""}
|
|
184
|
-
}`
|
|
185
|
-
})
|
|
186
|
-
.join(",\n")
|
|
187
|
-
|
|
188
|
-
const fileContent = `// This file is generated by assets/update.ts - DO NOT EDIT MANUALLY
|
|
189
|
-
// Run 'bun assets/update.ts' to regenerate this file
|
|
190
|
-
// Last generated: ${new Date().toISOString()}
|
|
191
|
-
|
|
192
|
-
import type { FiletypeParserOptions } from "./types"
|
|
193
|
-
import { resolve, dirname } from "path"
|
|
194
|
-
import { fileURLToPath } from "url"
|
|
195
|
-
|
|
196
|
-
${imports}
|
|
197
|
-
|
|
198
|
-
// Cached parsers to avoid re-resolving paths on every call
|
|
199
|
-
let _cachedParsers: FiletypeParserOptions[] | undefined
|
|
200
|
-
|
|
201
|
-
export function getParsers(): FiletypeParserOptions[] {
|
|
202
|
-
if (!_cachedParsers) {
|
|
203
|
-
_cachedParsers = [
|
|
204
|
-
${parserDefinitions},
|
|
205
|
-
]
|
|
206
|
-
}
|
|
207
|
-
return _cachedParsers
|
|
208
|
-
}
|
|
209
|
-
`
|
|
210
|
-
|
|
211
|
-
await mkdir(path.dirname(outputPath), { recursive: true })
|
|
212
|
-
await writeFile(outputPath, fileContent, "utf-8")
|
|
213
|
-
console.log(`Generated ${path.basename(outputPath)} with ${parsers.length} parsers`)
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
async function main(options?: Partial<UpdateOptions>): Promise<void> {
|
|
217
|
-
const opts = { ...getDefaultOptions(), ...options }
|
|
218
|
-
|
|
219
|
-
try {
|
|
220
|
-
console.log("Loading parsers configuration...")
|
|
221
|
-
console.log(` Config: ${opts.configPath}`)
|
|
222
|
-
console.log(` Assets Dir: ${opts.assetsDir}`)
|
|
223
|
-
console.log(` Output: ${opts.outputPath}`)
|
|
224
|
-
|
|
225
|
-
const config = await loadConfig(opts.configPath)
|
|
226
|
-
|
|
227
|
-
console.log(`Found ${config.parsers.length} parsers to process`)
|
|
228
|
-
|
|
229
|
-
const generatedParsers: GeneratedParser[] = []
|
|
230
|
-
|
|
231
|
-
for (const parser of config.parsers) {
|
|
232
|
-
console.log(`Processing ${parser.filetype}...`)
|
|
233
|
-
|
|
234
|
-
console.log(` Downloading language...`)
|
|
235
|
-
const languagePath = await downloadLanguage(parser.filetype, parser.wasm, opts.assetsDir, opts.outputPath)
|
|
236
|
-
|
|
237
|
-
console.log(` Downloading ${parser.queries.highlights.length} highlight queries...`)
|
|
238
|
-
const highlightsPath = await downloadAndCombineQueries(
|
|
239
|
-
parser.filetype,
|
|
240
|
-
parser.queries.highlights,
|
|
241
|
-
opts.assetsDir,
|
|
242
|
-
opts.outputPath,
|
|
243
|
-
"highlights",
|
|
244
|
-
opts.configPath,
|
|
245
|
-
)
|
|
246
|
-
|
|
247
|
-
let injectionsPath: string | undefined
|
|
248
|
-
if (parser.queries.injections && parser.queries.injections.length > 0) {
|
|
249
|
-
console.log(` Downloading ${parser.queries.injections.length} injection queries...`)
|
|
250
|
-
injectionsPath = await downloadAndCombineQueries(
|
|
251
|
-
parser.filetype,
|
|
252
|
-
parser.queries.injections,
|
|
253
|
-
opts.assetsDir,
|
|
254
|
-
opts.outputPath,
|
|
255
|
-
"injections",
|
|
256
|
-
opts.configPath,
|
|
257
|
-
)
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
generatedParsers.push({
|
|
261
|
-
filetype: parser.filetype,
|
|
262
|
-
languagePath,
|
|
263
|
-
highlightsPath,
|
|
264
|
-
injectionsPath,
|
|
265
|
-
injectionMapping: parser.injectionMapping,
|
|
266
|
-
})
|
|
267
|
-
|
|
268
|
-
console.log(` ✓ Completed ${parser.filetype}`)
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
console.log("Generating output file...")
|
|
272
|
-
await generateDefaultParsersFile(generatedParsers, opts.outputPath)
|
|
273
|
-
|
|
274
|
-
console.log("✅ Update completed successfully!")
|
|
275
|
-
} catch (error) {
|
|
276
|
-
console.error("❌ Update failed:", error)
|
|
277
|
-
process.exit(1)
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
function parseCLIArgs(): Partial<UpdateOptions> | null {
|
|
282
|
-
try {
|
|
283
|
-
const { values } = parseArgs({
|
|
284
|
-
args: Bun.argv.slice(2),
|
|
285
|
-
options: {
|
|
286
|
-
config: { type: "string" },
|
|
287
|
-
assets: { type: "string" },
|
|
288
|
-
output: { type: "string" },
|
|
289
|
-
help: { type: "boolean" },
|
|
290
|
-
},
|
|
291
|
-
strict: true,
|
|
292
|
-
})
|
|
293
|
-
|
|
294
|
-
if (values.help) {
|
|
295
|
-
console.log(`Usage: bun update.ts [options]
|
|
296
|
-
|
|
297
|
-
Options:
|
|
298
|
-
--config <path> Path to parsers-config.json
|
|
299
|
-
--assets <path> Directory where .wasm and .scm files will be downloaded
|
|
300
|
-
--output <path> Path where the generated TypeScript file will be written
|
|
301
|
-
--help Show this help message
|
|
302
|
-
|
|
303
|
-
Examples:
|
|
304
|
-
# Use default paths (for OpenTUI core development)
|
|
305
|
-
bun update.ts
|
|
306
|
-
|
|
307
|
-
# Use custom paths (for application integration)
|
|
308
|
-
bun update.ts --config ./my-parsers.json --assets ./src/parsers --output ./src/parsers.ts
|
|
309
|
-
`)
|
|
310
|
-
process.exit(0)
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
const options: Partial<UpdateOptions> = {}
|
|
314
|
-
if (values.config) options.configPath = path.resolve(values.config)
|
|
315
|
-
if (values.assets) options.assetsDir = path.resolve(values.assets)
|
|
316
|
-
if (values.output) options.outputPath = path.resolve(values.output)
|
|
317
|
-
|
|
318
|
-
return Object.keys(options).length > 0 ? options : null
|
|
319
|
-
} catch (error) {
|
|
320
|
-
console.error(`Error parsing arguments: ${error}`)
|
|
321
|
-
console.log("Run with --help for usage information")
|
|
322
|
-
process.exit(1)
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
if (import.meta.main) {
|
|
327
|
-
const cliOptions = parseCLIArgs()
|
|
328
|
-
main(cliOptions || undefined)
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
export { main as updateAssets }
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import { test, expect, beforeEach, beforeAll, afterAll, describe } from "bun:test"
|
|
2
|
-
import { TreeSitterClient, addDefaultParsers } from "./client.js"
|
|
3
|
-
import { tmpdir } from "node:os"
|
|
4
|
-
import { join, resolve } from "node:path"
|
|
5
|
-
import { mkdir, readdir, stat } from "node:fs/promises"
|
|
6
|
-
import { readFileSync } from "node:fs"
|
|
7
|
-
import type { FiletypeParserOptions } from "./types.js"
|
|
8
|
-
|
|
9
|
-
describe("TreeSitterClient Caching", () => {
|
|
10
|
-
let dataPath: string
|
|
11
|
-
let testServer: any
|
|
12
|
-
const TEST_PORT = 55231
|
|
13
|
-
const BASE_URL = `http://localhost:${TEST_PORT}`
|
|
14
|
-
|
|
15
|
-
beforeAll(async () => {
|
|
16
|
-
const assetsDir = resolve(__dirname, "assets")
|
|
17
|
-
testServer = Bun.serve({
|
|
18
|
-
port: TEST_PORT,
|
|
19
|
-
fetch(req) {
|
|
20
|
-
const url = new URL(req.url)
|
|
21
|
-
const filePath = join(assetsDir, url.pathname)
|
|
22
|
-
return new Response(readFileSync(filePath))
|
|
23
|
-
},
|
|
24
|
-
})
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
afterAll(async () => {
|
|
28
|
-
if (testServer) {
|
|
29
|
-
testServer.stop()
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
beforeEach(async () => {
|
|
34
|
-
dataPath = join(tmpdir(), "tree-sitter-cache-test-" + Math.random().toString(36).slice(2))
|
|
35
|
-
await mkdir(dataPath, { recursive: true })
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
test("should create storage directories on initialization", async () => {
|
|
39
|
-
const client = new TreeSitterClient({ dataPath })
|
|
40
|
-
await client.initialize()
|
|
41
|
-
|
|
42
|
-
const languagesDir = join(dataPath, "tree-sitter", "languages")
|
|
43
|
-
const queriesDir = join(dataPath, "tree-sitter", "queries")
|
|
44
|
-
|
|
45
|
-
const languagesStat = await stat(languagesDir)
|
|
46
|
-
const queriesStat = await stat(queriesDir)
|
|
47
|
-
|
|
48
|
-
expect(languagesStat.isDirectory()).toBe(true)
|
|
49
|
-
expect(queriesStat.isDirectory()).toBe(true)
|
|
50
|
-
|
|
51
|
-
await client.destroy()
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
test("should cache downloaded language files", async () => {
|
|
55
|
-
const client = new TreeSitterClient({ dataPath })
|
|
56
|
-
await client.initialize()
|
|
57
|
-
|
|
58
|
-
// Add URL-based parser for this test
|
|
59
|
-
client.addFiletypeParser({
|
|
60
|
-
filetype: "javascript",
|
|
61
|
-
queries: {
|
|
62
|
-
highlights: [`${BASE_URL}/javascript/highlights.scm`],
|
|
63
|
-
},
|
|
64
|
-
wasm: `${BASE_URL}/javascript/tree-sitter-javascript.wasm`,
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
const hasParser = await client.preloadParser("javascript")
|
|
68
|
-
expect(hasParser).toBe(true)
|
|
69
|
-
|
|
70
|
-
const languagesDir = join(dataPath, "tree-sitter", "languages")
|
|
71
|
-
const cachedFiles = await readdir(languagesDir)
|
|
72
|
-
|
|
73
|
-
expect(cachedFiles).toContain("tree-sitter-javascript.wasm")
|
|
74
|
-
|
|
75
|
-
await client.destroy()
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
test("should cache downloaded highlight queries", async () => {
|
|
79
|
-
const client = new TreeSitterClient({ dataPath })
|
|
80
|
-
await client.initialize()
|
|
81
|
-
|
|
82
|
-
// Add URL-based parser for this test
|
|
83
|
-
client.addFiletypeParser({
|
|
84
|
-
filetype: "javascript",
|
|
85
|
-
queries: {
|
|
86
|
-
highlights: [`${BASE_URL}/javascript/highlights.scm`],
|
|
87
|
-
},
|
|
88
|
-
wasm: `${BASE_URL}/javascript/tree-sitter-javascript.wasm`,
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
const hasParser = await client.preloadParser("javascript")
|
|
92
|
-
expect(hasParser).toBe(true)
|
|
93
|
-
|
|
94
|
-
const queriesDir = join(dataPath, "tree-sitter", "queries")
|
|
95
|
-
const cachedQueries = await readdir(queriesDir)
|
|
96
|
-
|
|
97
|
-
const scmFiles = cachedQueries.filter((file) => file.endsWith(".scm"))
|
|
98
|
-
expect(scmFiles.length).toBeGreaterThan(0)
|
|
99
|
-
|
|
100
|
-
await client.destroy()
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
// TODO: This is flaky, there must be a more reliable way to test this
|
|
104
|
-
test.skip("should reuse cached files across client instances", async () => {
|
|
105
|
-
const jsParser: FiletypeParserOptions = {
|
|
106
|
-
filetype: "javascript",
|
|
107
|
-
queries: {
|
|
108
|
-
highlights: [`${BASE_URL}/javascript/highlights.scm`],
|
|
109
|
-
},
|
|
110
|
-
wasm: `${BASE_URL}/javascript/tree-sitter-javascript.wasm`,
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
let client1 = new TreeSitterClient({ dataPath })
|
|
114
|
-
await client1.initialize()
|
|
115
|
-
client1.addFiletypeParser(jsParser)
|
|
116
|
-
|
|
117
|
-
console.log("=== First client (should download) ===")
|
|
118
|
-
const start1 = Date.now()
|
|
119
|
-
const hasParser1 = await client1.preloadParser("javascript")
|
|
120
|
-
const duration1 = Date.now() - start1
|
|
121
|
-
expect(hasParser1).toBe(true)
|
|
122
|
-
|
|
123
|
-
await client1.destroy()
|
|
124
|
-
|
|
125
|
-
let client2 = new TreeSitterClient({ dataPath })
|
|
126
|
-
await client2.initialize()
|
|
127
|
-
client2.addFiletypeParser(jsParser)
|
|
128
|
-
|
|
129
|
-
console.log("=== Second client (should use cache) ===")
|
|
130
|
-
const start2 = Date.now()
|
|
131
|
-
const hasParser2 = await client2.preloadParser("javascript")
|
|
132
|
-
const duration2 = Date.now() - start2
|
|
133
|
-
expect(hasParser2).toBe(true)
|
|
134
|
-
|
|
135
|
-
console.log(`First client: ${duration1}ms, Second client: ${duration2}ms`)
|
|
136
|
-
|
|
137
|
-
expect(duration2).toBeLessThanOrEqual(duration1)
|
|
138
|
-
expect(duration2).toBeLessThan(100) // Should be very fast with cache
|
|
139
|
-
|
|
140
|
-
await client2.destroy()
|
|
141
|
-
})
|
|
142
|
-
|
|
143
|
-
test("should handle multiple parsers with independent caching", async () => {
|
|
144
|
-
const client = new TreeSitterClient({ dataPath })
|
|
145
|
-
await client.initialize()
|
|
146
|
-
|
|
147
|
-
// Add URL-based parsers for this test
|
|
148
|
-
client.addFiletypeParser({
|
|
149
|
-
filetype: "javascript",
|
|
150
|
-
queries: {
|
|
151
|
-
highlights: [`${BASE_URL}/javascript/highlights.scm`],
|
|
152
|
-
},
|
|
153
|
-
wasm: `${BASE_URL}/javascript/tree-sitter-javascript.wasm`,
|
|
154
|
-
})
|
|
155
|
-
client.addFiletypeParser({
|
|
156
|
-
filetype: "typescript",
|
|
157
|
-
queries: {
|
|
158
|
-
highlights: [`${BASE_URL}/typescript/highlights.scm`],
|
|
159
|
-
},
|
|
160
|
-
wasm: `${BASE_URL}/typescript/tree-sitter-typescript.wasm`,
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
const hasJS = await client.preloadParser("javascript")
|
|
164
|
-
const hasTS = await client.preloadParser("typescript")
|
|
165
|
-
|
|
166
|
-
expect(hasJS).toBe(true)
|
|
167
|
-
expect(hasTS).toBe(true)
|
|
168
|
-
|
|
169
|
-
const languagesDir = join(dataPath, "tree-sitter", "languages")
|
|
170
|
-
const cachedFiles = await readdir(languagesDir)
|
|
171
|
-
|
|
172
|
-
expect(cachedFiles).toContain("tree-sitter-javascript.wasm")
|
|
173
|
-
expect(cachedFiles).toContain("tree-sitter-typescript.wasm")
|
|
174
|
-
|
|
175
|
-
const queriesDir = join(dataPath, "tree-sitter", "queries")
|
|
176
|
-
const cachedQueries = await readdir(queriesDir)
|
|
177
|
-
const scmFiles = cachedQueries.filter((file) => file.endsWith(".scm"))
|
|
178
|
-
|
|
179
|
-
expect(scmFiles.length).toBe(2)
|
|
180
|
-
|
|
181
|
-
await client.destroy()
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
test("should store files in dataPath subdirectories", async () => {
|
|
185
|
-
const client = new TreeSitterClient({ dataPath })
|
|
186
|
-
await client.initialize()
|
|
187
|
-
|
|
188
|
-
// Add URL-based parser for this test
|
|
189
|
-
client.addFiletypeParser({
|
|
190
|
-
filetype: "javascript",
|
|
191
|
-
queries: {
|
|
192
|
-
highlights: [`${BASE_URL}/javascript/highlights.scm`],
|
|
193
|
-
},
|
|
194
|
-
wasm: `${BASE_URL}/javascript/tree-sitter-javascript.wasm`,
|
|
195
|
-
})
|
|
196
|
-
|
|
197
|
-
const hasParser = await client.preloadParser("javascript")
|
|
198
|
-
expect(hasParser).toBe(true)
|
|
199
|
-
|
|
200
|
-
const languagesDir = join(dataPath, "tree-sitter", "languages")
|
|
201
|
-
const queriesDir = join(dataPath, "tree-sitter", "queries")
|
|
202
|
-
|
|
203
|
-
const languagesStat = await stat(languagesDir)
|
|
204
|
-
const queriesStat = await stat(queriesDir)
|
|
205
|
-
|
|
206
|
-
expect(languagesStat.isDirectory()).toBe(true)
|
|
207
|
-
expect(queriesStat.isDirectory()).toBe(true)
|
|
208
|
-
|
|
209
|
-
const cachedFiles = await readdir(languagesDir)
|
|
210
|
-
expect(cachedFiles).toContain("tree-sitter-javascript.wasm")
|
|
211
|
-
|
|
212
|
-
await client.destroy()
|
|
213
|
-
})
|
|
214
|
-
|
|
215
|
-
test("should handle directory creation errors gracefully", async () => {
|
|
216
|
-
const invalidDataPath = "/invalid/path/that/cannot/be/created"
|
|
217
|
-
const client = new TreeSitterClient({ dataPath: invalidDataPath })
|
|
218
|
-
|
|
219
|
-
await expect(client.initialize()).rejects.toThrow()
|
|
220
|
-
|
|
221
|
-
await client.destroy()
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
test("should handle data path changes", async () => {
|
|
225
|
-
const initialDataPath = join(tmpdir(), "tree-sitter-initial-" + Math.random().toString(36).slice(2))
|
|
226
|
-
const newDataPath = join(tmpdir(), "tree-sitter-new-" + Math.random().toString(36).slice(2))
|
|
227
|
-
|
|
228
|
-
await mkdir(initialDataPath, { recursive: true })
|
|
229
|
-
await mkdir(newDataPath, { recursive: true })
|
|
230
|
-
|
|
231
|
-
const client = new TreeSitterClient({ dataPath: initialDataPath })
|
|
232
|
-
await client.initialize()
|
|
233
|
-
|
|
234
|
-
// Add URL-based parsers for this test
|
|
235
|
-
client.addFiletypeParser({
|
|
236
|
-
filetype: "javascript",
|
|
237
|
-
queries: {
|
|
238
|
-
highlights: [`${BASE_URL}/javascript/highlights.scm`],
|
|
239
|
-
},
|
|
240
|
-
wasm: `${BASE_URL}/javascript/tree-sitter-javascript.wasm`,
|
|
241
|
-
})
|
|
242
|
-
|
|
243
|
-
const hasParser1 = await client.preloadParser("javascript")
|
|
244
|
-
expect(hasParser1).toBe(true)
|
|
245
|
-
|
|
246
|
-
const initialLanguagesDir = join(initialDataPath, "tree-sitter", "languages")
|
|
247
|
-
const initialFiles = await readdir(initialLanguagesDir)
|
|
248
|
-
expect(initialFiles).toContain("tree-sitter-javascript.wasm")
|
|
249
|
-
|
|
250
|
-
await client.setDataPath(newDataPath)
|
|
251
|
-
|
|
252
|
-
// Add typescript parser for the new data path
|
|
253
|
-
client.addFiletypeParser({
|
|
254
|
-
filetype: "typescript",
|
|
255
|
-
queries: {
|
|
256
|
-
highlights: [`${BASE_URL}/typescript/highlights.scm`],
|
|
257
|
-
},
|
|
258
|
-
wasm: `${BASE_URL}/typescript/tree-sitter-typescript.wasm`,
|
|
259
|
-
})
|
|
260
|
-
|
|
261
|
-
const hasParser2 = await client.preloadParser("typescript")
|
|
262
|
-
expect(hasParser2).toBe(true)
|
|
263
|
-
|
|
264
|
-
const newLanguagesDir = join(newDataPath, "tree-sitter", "languages")
|
|
265
|
-
const newFiles = await readdir(newLanguagesDir)
|
|
266
|
-
expect(newFiles).toContain("tree-sitter-typescript.wasm")
|
|
267
|
-
|
|
268
|
-
await client.destroy()
|
|
269
|
-
})
|
|
270
|
-
})
|