@fairyhunter13/opentui-core 0.1.114 → 0.1.115
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 +34041 -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 +111 -0
- package/console.d.ts +144 -0
- package/edit-buffer.d.ts +98 -0
- package/editor-view.d.ts +73 -0
- package/index-j4m38kjn.js +411 -0
- package/index-j4m38kjn.js.map +10 -0
- package/index-tse8gzh0.js +20614 -0
- package/index-tse8gzh0.js.map +67 -0
- package/index-vv2jcd4r.js +12299 -0
- package/index-vv2jcd4r.js.map +42 -0
- package/index.d.ts +23 -0
- package/index.js +478 -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 +51 -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 +87 -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 +53 -0
- package/lib/tree-sitter/resolve-ft.d.ts +5 -0
- package/lib/tree-sitter/types.d.ts +82 -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 +50 -62
- package/parser.worker.js +899 -0
- package/parser.worker.js.map +12 -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 +81 -0
- package/renderables/Code.d.ts +78 -0
- package/renderables/Diff.d.ts +142 -0
- package/renderables/EditBufferRenderable.d.ts +237 -0
- package/renderables/FrameBuffer.d.ts +16 -0
- package/renderables/Input.d.ts +67 -0
- package/renderables/LineNumberRenderable.d.ts +78 -0
- package/renderables/Markdown.d.ts +185 -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 +47 -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 +63 -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 +10 -0
- package/renderer.d.ts +419 -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 +16 -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 +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 +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 +697 -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 +139 -0
- package/utils.d.ts +14 -0
- package/zig-structs.d.ts +155 -0
- package/zig.d.ts +353 -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 -144
- 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 -70
- 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 -1704
- 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/attenuation-benchmark.ts +0 -81
- package/src/benchmark/colormatrix-benchmark.ts +0 -128
- 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/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/renderer-benchmark.ts +0 -754
- package/src/benchmark/text-table-benchmark.ts +0 -948
- package/src/buffer.test.ts +0 -291
- package/src/buffer.ts +0 -554
- package/src/console.test.ts +0 -612
- package/src/console.ts +0 -1254
- 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 -924
- 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 -701
- package/src/examples/draggable-three-demo.ts +0 -259
- package/src/examples/editor-demo.ts +0 -322
- package/src/examples/extmarks-demo.ts +0 -196
- 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 -241
- 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 -926
- 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 -725
- 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 -623
- package/src/examples/physx-rapier-2d-demo.ts +0 -655
- 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 -1015
- 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 -453
- 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 -400
- package/src/examples/vnode-composition-demo.ts +0 -404
- package/src/examples/wide-grapheme-overlay-demo.ts +0 -280
- package/src/index.ts +0 -24
- 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 -170
- 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 -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 -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 -317
- package/src/lib/keymapping.ts +0 -115
- 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 -2290
- package/src/lib/stdin-parser.ts +0 -1810
- 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 -334
- package/src/lib/tree-sitter/assets.d.ts +0 -9
- package/src/lib/tree-sitter/cache.test.ts +0 -273
- package/src/lib/tree-sitter/client.test.ts +0 -1165
- package/src/lib/tree-sitter/client.ts +0 -607
- package/src/lib/tree-sitter/default-parsers.ts +0 -86
- 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 -1042
- 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 -82
- 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 -402
- package/src/plugins/types.ts +0 -46
- package/src/post/effects.ts +0 -930
- package/src/post/filters.ts +0 -489
- package/src/post/matrices.ts +0 -288
- package/src/renderables/ASCIIFont.ts +0 -219
- package/src/renderables/Box.test.ts +0 -205
- package/src/renderables/Box.ts +0 -326
- 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 -3101
- package/src/renderables/Diff.ts +0 -1211
- package/src/renderables/EditBufferRenderable.test.ts +0 -288
- package/src/renderables/EditBufferRenderable.ts +0 -1166
- package/src/renderables/FrameBuffer.ts +0 -47
- package/src/renderables/Input.test.ts +0 -1228
- package/src/renderables/Input.ts +0 -247
- package/src/renderables/LineNumberRenderable.ts +0 -724
- package/src/renderables/Markdown.ts +0 -1393
- package/src/renderables/ScrollBar.ts +0 -422
- package/src/renderables/ScrollBox.ts +0 -883
- package/src/renderables/Select.test.ts +0 -1033
- package/src/renderables/Select.ts +0 -524
- package/src/renderables/Slider.test.ts +0 -456
- package/src/renderables/Slider.ts +0 -342
- 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 -430
- 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 -1865
- package/src/renderables/__tests__/LineNumberRenderable.wrapping.test.ts +0 -85
- package/src/renderables/__tests__/Markdown.code-colors.test.ts +0 -242
- package/src/renderables/__tests__/Markdown.test.ts +0 -2518
- 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 -1866
- 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 -23
- package/src/renderables/markdown-parser.ts +0 -66
- package/src/renderer.ts +0 -2681
- package/src/runtime-plugin-support.ts +0 -39
- package/src/runtime-plugin.ts +0 -615
- package/src/syntax-style.test.ts +0 -841
- package/src/syntax-style.ts +0 -257
- 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 -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 -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 -132
- 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/destroy-on-exit.fixture.ts +0 -36
- package/src/tests/destroy-on-exit.test.ts +0 -41
- 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.clock.test.ts +0 -158
- package/src/tests/renderer.console-startup.test.ts +0 -185
- package/src/tests/renderer.control.test.ts +0 -425
- 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 -147
- package/src/tests/renderer.focus-restore.test.ts +0 -257
- package/src/tests/renderer.focus.test.ts +0 -294
- package/src/tests/renderer.idle.test.ts +0 -219
- package/src/tests/renderer.input.test.ts +0 -2237
- package/src/tests/renderer.kitty-flags.test.ts +0 -195
- package/src/tests/renderer.mouse.test.ts +0 -1274
- 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 -684
- package/src/tests/renderer.useMouse.test.ts +0 -47
- package/src/tests/runtime-plugin-node-modules-cycle.fixture.ts +0 -76
- 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.fixture.ts +0 -11
- package/src/tests/runtime-plugin-support.test.ts +0 -19
- 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 -354
- 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 -276
- 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 -161
- 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-methods.zig +0 -211
- package/src/zig/buffer.zig +0 -2281
- 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 -1854
- 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 -1393
- package/src/zig/rope.zig +0 -1220
- package/src/zig/syntax-style.zig +0 -161
- package/src/zig/terminal.zig +0 -987
- package/src/zig/test.zig +0 -72
- package/src/zig/tests/README.md +0 -18
- package/src/zig/tests/buffer-methods_test.zig +0 -1109
- package/src/zig/tests/buffer_test.zig +0 -2557
- 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 -1017
- 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 -754
- 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 -3884
- package/tsconfig.build.json +0 -24
- package/tsconfig.json +0 -27
- /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,415 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect, beforeEach, afterEach } from "bun:test"
|
|
2
|
-
import { createTestRenderer, type TestRenderer } from "./test-renderer.js"
|
|
3
|
-
import { TestRecorder } from "./test-recorder.js"
|
|
4
|
-
import { TextRenderable } from "../renderables/Text.js"
|
|
5
|
-
|
|
6
|
-
describe("TestRecorder", () => {
|
|
7
|
-
let renderer: TestRenderer
|
|
8
|
-
let recorder: TestRecorder
|
|
9
|
-
let renderOnce: () => Promise<void>
|
|
10
|
-
|
|
11
|
-
beforeEach(async () => {
|
|
12
|
-
const setup = await createTestRenderer({ width: 80, height: 24 })
|
|
13
|
-
renderer = setup.renderer
|
|
14
|
-
renderOnce = setup.renderOnce
|
|
15
|
-
recorder = new TestRecorder(renderer)
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
afterEach(() => {
|
|
19
|
-
recorder.stop()
|
|
20
|
-
renderer.destroy()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
test("should initialize with empty frames", () => {
|
|
24
|
-
expect(recorder.recordedFrames).toEqual([])
|
|
25
|
-
expect(recorder.isRecording).toBe(false)
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
test("should start recording", () => {
|
|
29
|
-
recorder.rec()
|
|
30
|
-
expect(recorder.isRecording).toBe(true)
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
test("should stop recording", () => {
|
|
34
|
-
recorder.rec()
|
|
35
|
-
expect(recorder.isRecording).toBe(true)
|
|
36
|
-
recorder.stop()
|
|
37
|
-
expect(recorder.isRecording).toBe(false)
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
test("should record frames during rendering", async () => {
|
|
41
|
-
recorder.rec()
|
|
42
|
-
|
|
43
|
-
const text = new TextRenderable(renderer, { content: "Hello World" })
|
|
44
|
-
renderer.root.add(text)
|
|
45
|
-
await Bun.sleep(1)
|
|
46
|
-
|
|
47
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
48
|
-
|
|
49
|
-
await renderOnce()
|
|
50
|
-
expect(recorder.recordedFrames.length).toBe(2)
|
|
51
|
-
|
|
52
|
-
recorder.stop()
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
test("should capture frame content correctly", async () => {
|
|
56
|
-
recorder.rec()
|
|
57
|
-
|
|
58
|
-
const text = new TextRenderable(renderer, { content: "Test Content" })
|
|
59
|
-
renderer.root.add(text)
|
|
60
|
-
await Bun.sleep(1)
|
|
61
|
-
|
|
62
|
-
const frames = recorder.recordedFrames
|
|
63
|
-
expect(frames.length).toBe(1)
|
|
64
|
-
expect(frames[0].frame).toContain("Test Content")
|
|
65
|
-
|
|
66
|
-
recorder.stop()
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
test("should include frame metadata", async () => {
|
|
70
|
-
recorder.rec()
|
|
71
|
-
|
|
72
|
-
const text = new TextRenderable(renderer, { content: "Frame Metadata" })
|
|
73
|
-
renderer.root.add(text)
|
|
74
|
-
await Bun.sleep(1)
|
|
75
|
-
|
|
76
|
-
const frames = recorder.recordedFrames
|
|
77
|
-
expect(frames.length).toBe(1)
|
|
78
|
-
expect(frames[0].timestamp).toBeGreaterThanOrEqual(0)
|
|
79
|
-
expect(frames[0].frameNumber).toBe(0)
|
|
80
|
-
|
|
81
|
-
recorder.stop()
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
test("should increment frame numbers", async () => {
|
|
85
|
-
recorder.rec()
|
|
86
|
-
|
|
87
|
-
const text = new TextRenderable(renderer, { content: "Multiple Frames" })
|
|
88
|
-
renderer.root.add(text)
|
|
89
|
-
await Bun.sleep(1)
|
|
90
|
-
|
|
91
|
-
await renderOnce()
|
|
92
|
-
await renderOnce()
|
|
93
|
-
|
|
94
|
-
const frames = recorder.recordedFrames
|
|
95
|
-
expect(frames.length).toBe(3)
|
|
96
|
-
expect(frames[0].frameNumber).toBe(0)
|
|
97
|
-
expect(frames[1].frameNumber).toBe(1)
|
|
98
|
-
expect(frames[2].frameNumber).toBe(2)
|
|
99
|
-
|
|
100
|
-
recorder.stop()
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
test("should capture changing content across frames", async () => {
|
|
104
|
-
recorder.rec()
|
|
105
|
-
|
|
106
|
-
const text = new TextRenderable(renderer, { content: "Initial" })
|
|
107
|
-
renderer.root.add(text)
|
|
108
|
-
await Bun.sleep(10)
|
|
109
|
-
|
|
110
|
-
text.content = "Changed"
|
|
111
|
-
await Bun.sleep(10)
|
|
112
|
-
recorder.stop()
|
|
113
|
-
|
|
114
|
-
// NOTE: Should this fail, make sure the Bun.sleeps are in sync with maxFps of the renderer
|
|
115
|
-
const frame1 = recorder.recordedFrames[0].frame
|
|
116
|
-
const frame2 = recorder.recordedFrames[1].frame
|
|
117
|
-
|
|
118
|
-
expect(frame1).toContain("Initial")
|
|
119
|
-
expect(frame2).toContain("Changed")
|
|
120
|
-
expect(frame1).not.toEqual(frame2)
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
test("should not record when not started", async () => {
|
|
124
|
-
const text = new TextRenderable(renderer, { content: "Not Recording" })
|
|
125
|
-
renderer.root.add(text)
|
|
126
|
-
await Bun.sleep(1)
|
|
127
|
-
|
|
128
|
-
expect(recorder.recordedFrames.length).toBe(0)
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
test("should not record after stopped", async () => {
|
|
132
|
-
recorder.rec()
|
|
133
|
-
|
|
134
|
-
const text = new TextRenderable(renderer, { content: "Stopped" })
|
|
135
|
-
renderer.root.add(text)
|
|
136
|
-
await Bun.sleep(1)
|
|
137
|
-
|
|
138
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
139
|
-
|
|
140
|
-
recorder.stop()
|
|
141
|
-
await renderOnce()
|
|
142
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
test("should clear recorded frames", async () => {
|
|
146
|
-
recorder.rec()
|
|
147
|
-
|
|
148
|
-
const text = new TextRenderable(renderer, { content: "Clear Test" })
|
|
149
|
-
renderer.root.add(text)
|
|
150
|
-
await Bun.sleep(1)
|
|
151
|
-
|
|
152
|
-
await renderOnce()
|
|
153
|
-
|
|
154
|
-
expect(recorder.recordedFrames.length).toBe(2)
|
|
155
|
-
recorder.clear()
|
|
156
|
-
expect(recorder.recordedFrames.length).toBe(0)
|
|
157
|
-
|
|
158
|
-
recorder.stop()
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
test("should handle multiple rec/stop cycles", async () => {
|
|
162
|
-
const text = new TextRenderable(renderer, { content: "Cycle Test" })
|
|
163
|
-
|
|
164
|
-
recorder.rec()
|
|
165
|
-
renderer.root.add(text)
|
|
166
|
-
await Bun.sleep(1)
|
|
167
|
-
recorder.stop()
|
|
168
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
169
|
-
|
|
170
|
-
recorder.clear()
|
|
171
|
-
recorder.rec()
|
|
172
|
-
await renderOnce()
|
|
173
|
-
await renderOnce()
|
|
174
|
-
recorder.stop()
|
|
175
|
-
expect(recorder.recordedFrames.length).toBe(2)
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
test("should not duplicate frames when rec is called multiple times", async () => {
|
|
179
|
-
recorder.rec()
|
|
180
|
-
recorder.rec()
|
|
181
|
-
|
|
182
|
-
const text = new TextRenderable(renderer, { content: "Duplicate Test" })
|
|
183
|
-
renderer.root.add(text)
|
|
184
|
-
await Bun.sleep(1)
|
|
185
|
-
|
|
186
|
-
recorder.stop()
|
|
187
|
-
|
|
188
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
189
|
-
})
|
|
190
|
-
|
|
191
|
-
test("should restore original renderNative after stop", async () => {
|
|
192
|
-
const text = new TextRenderable(renderer, { content: "Restore Test" })
|
|
193
|
-
|
|
194
|
-
recorder.rec()
|
|
195
|
-
renderer.root.add(text)
|
|
196
|
-
await Bun.sleep(1)
|
|
197
|
-
recorder.stop()
|
|
198
|
-
|
|
199
|
-
recorder.clear()
|
|
200
|
-
await renderOnce()
|
|
201
|
-
expect(recorder.recordedFrames.length).toBe(0)
|
|
202
|
-
|
|
203
|
-
recorder.rec()
|
|
204
|
-
await renderOnce()
|
|
205
|
-
recorder.stop()
|
|
206
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
207
|
-
})
|
|
208
|
-
|
|
209
|
-
test("should capture timestamps in increasing order", async () => {
|
|
210
|
-
let time = 0
|
|
211
|
-
recorder = new TestRecorder(renderer, { now: () => time })
|
|
212
|
-
recorder.rec()
|
|
213
|
-
|
|
214
|
-
await renderOnce()
|
|
215
|
-
time += 10
|
|
216
|
-
await renderOnce()
|
|
217
|
-
|
|
218
|
-
const frames = recorder.recordedFrames
|
|
219
|
-
expect(frames.length).toBe(2)
|
|
220
|
-
expect(frames[1].timestamp).toBeGreaterThan(frames[0].timestamp)
|
|
221
|
-
expect(frames[1].timestamp - frames[0].timestamp).toBe(10)
|
|
222
|
-
|
|
223
|
-
recorder.stop()
|
|
224
|
-
})
|
|
225
|
-
|
|
226
|
-
test("should return a copy of recorded frames", async () => {
|
|
227
|
-
recorder.rec()
|
|
228
|
-
|
|
229
|
-
const text = new TextRenderable(renderer, { content: "Copy Test" })
|
|
230
|
-
renderer.root.add(text)
|
|
231
|
-
await Bun.sleep(1)
|
|
232
|
-
|
|
233
|
-
const frames1 = recorder.recordedFrames
|
|
234
|
-
const frames2 = recorder.recordedFrames
|
|
235
|
-
|
|
236
|
-
expect(frames1).toEqual(frames2)
|
|
237
|
-
expect(frames1).not.toBe(frames2)
|
|
238
|
-
|
|
239
|
-
recorder.stop()
|
|
240
|
-
})
|
|
241
|
-
|
|
242
|
-
test("should handle empty renders", async () => {
|
|
243
|
-
recorder.rec()
|
|
244
|
-
await renderOnce()
|
|
245
|
-
|
|
246
|
-
expect(recorder.recordedFrames.length).toBe(1)
|
|
247
|
-
expect(recorder.recordedFrames[0].frame).toBeDefined()
|
|
248
|
-
|
|
249
|
-
recorder.stop()
|
|
250
|
-
})
|
|
251
|
-
|
|
252
|
-
test("should capture complex content", async () => {
|
|
253
|
-
recorder.rec()
|
|
254
|
-
|
|
255
|
-
const text1 = new TextRenderable(renderer, { content: "Line 1" })
|
|
256
|
-
const text2 = new TextRenderable(renderer, { content: "Line 2" })
|
|
257
|
-
renderer.root.add(text1)
|
|
258
|
-
renderer.root.add(text2)
|
|
259
|
-
await Bun.sleep(1)
|
|
260
|
-
|
|
261
|
-
const frame = recorder.recordedFrames[0].frame
|
|
262
|
-
expect(frame).toContain("Line 1")
|
|
263
|
-
expect(frame).toContain("Line 2")
|
|
264
|
-
|
|
265
|
-
recorder.stop()
|
|
266
|
-
})
|
|
267
|
-
|
|
268
|
-
test("should handle rapid render calls", async () => {
|
|
269
|
-
recorder.rec()
|
|
270
|
-
|
|
271
|
-
const text = new TextRenderable(renderer, { content: "Rapid Test" })
|
|
272
|
-
renderer.root.add(text)
|
|
273
|
-
await Bun.sleep(1)
|
|
274
|
-
|
|
275
|
-
for (let i = 0; i < 4; i++) {
|
|
276
|
-
await renderOnce()
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
expect(recorder.recordedFrames.length).toBe(5)
|
|
280
|
-
|
|
281
|
-
recorder.stop()
|
|
282
|
-
})
|
|
283
|
-
|
|
284
|
-
test("should optionally record fg buffer", async () => {
|
|
285
|
-
const recorderWithFg = new TestRecorder(renderer, { recordBuffers: { fg: true } })
|
|
286
|
-
recorderWithFg.rec()
|
|
287
|
-
|
|
288
|
-
const text = new TextRenderable(renderer, { content: "Buffer Test" })
|
|
289
|
-
renderer.root.add(text)
|
|
290
|
-
await Bun.sleep(1)
|
|
291
|
-
|
|
292
|
-
const frames = recorderWithFg.recordedFrames
|
|
293
|
-
expect(frames.length).toBe(1)
|
|
294
|
-
expect(frames[0].buffers).toBeDefined()
|
|
295
|
-
expect(frames[0].buffers?.fg).toBeInstanceOf(Float32Array)
|
|
296
|
-
expect(frames[0].buffers?.bg).toBeUndefined()
|
|
297
|
-
expect(frames[0].buffers?.attributes).toBeUndefined()
|
|
298
|
-
|
|
299
|
-
recorderWithFg.stop()
|
|
300
|
-
})
|
|
301
|
-
|
|
302
|
-
test("should optionally record bg buffer", async () => {
|
|
303
|
-
const recorderWithBg = new TestRecorder(renderer, { recordBuffers: { bg: true } })
|
|
304
|
-
recorderWithBg.rec()
|
|
305
|
-
|
|
306
|
-
const text = new TextRenderable(renderer, { content: "Buffer Test" })
|
|
307
|
-
renderer.root.add(text)
|
|
308
|
-
await Bun.sleep(1)
|
|
309
|
-
|
|
310
|
-
const frames = recorderWithBg.recordedFrames
|
|
311
|
-
expect(frames.length).toBe(1)
|
|
312
|
-
expect(frames[0].buffers).toBeDefined()
|
|
313
|
-
expect(frames[0].buffers?.bg).toBeInstanceOf(Float32Array)
|
|
314
|
-
expect(frames[0].buffers?.fg).toBeUndefined()
|
|
315
|
-
expect(frames[0].buffers?.attributes).toBeUndefined()
|
|
316
|
-
|
|
317
|
-
recorderWithBg.stop()
|
|
318
|
-
})
|
|
319
|
-
|
|
320
|
-
test("should optionally record attributes buffer", async () => {
|
|
321
|
-
const recorderWithAttrs = new TestRecorder(renderer, { recordBuffers: { attributes: true } })
|
|
322
|
-
recorderWithAttrs.rec()
|
|
323
|
-
|
|
324
|
-
const text = new TextRenderable(renderer, { content: "Buffer Test" })
|
|
325
|
-
renderer.root.add(text)
|
|
326
|
-
await Bun.sleep(1)
|
|
327
|
-
|
|
328
|
-
const frames = recorderWithAttrs.recordedFrames
|
|
329
|
-
expect(frames.length).toBe(1)
|
|
330
|
-
expect(frames[0].buffers).toBeDefined()
|
|
331
|
-
expect(frames[0].buffers?.attributes).toBeInstanceOf(Uint8Array)
|
|
332
|
-
expect(frames[0].buffers?.fg).toBeUndefined()
|
|
333
|
-
expect(frames[0].buffers?.bg).toBeUndefined()
|
|
334
|
-
|
|
335
|
-
recorderWithAttrs.stop()
|
|
336
|
-
})
|
|
337
|
-
|
|
338
|
-
test("should record multiple buffers when requested", async () => {
|
|
339
|
-
const recorderWithAll = new TestRecorder(renderer, {
|
|
340
|
-
recordBuffers: { fg: true, bg: true, attributes: true },
|
|
341
|
-
})
|
|
342
|
-
recorderWithAll.rec()
|
|
343
|
-
|
|
344
|
-
const text = new TextRenderable(renderer, { content: "Buffer Test" })
|
|
345
|
-
renderer.root.add(text)
|
|
346
|
-
await Bun.sleep(1)
|
|
347
|
-
|
|
348
|
-
const frames = recorderWithAll.recordedFrames
|
|
349
|
-
expect(frames.length).toBe(1)
|
|
350
|
-
expect(frames[0].buffers).toBeDefined()
|
|
351
|
-
expect(frames[0].buffers?.fg).toBeInstanceOf(Float32Array)
|
|
352
|
-
expect(frames[0].buffers?.bg).toBeInstanceOf(Float32Array)
|
|
353
|
-
expect(frames[0].buffers?.attributes).toBeInstanceOf(Uint8Array)
|
|
354
|
-
|
|
355
|
-
recorderWithAll.stop()
|
|
356
|
-
})
|
|
357
|
-
|
|
358
|
-
test("should not record buffers when not requested", async () => {
|
|
359
|
-
recorder.rec()
|
|
360
|
-
|
|
361
|
-
const text = new TextRenderable(renderer, { content: "No Buffer Test" })
|
|
362
|
-
renderer.root.add(text)
|
|
363
|
-
await Bun.sleep(1)
|
|
364
|
-
|
|
365
|
-
const frames = recorder.recordedFrames
|
|
366
|
-
expect(frames.length).toBe(1)
|
|
367
|
-
expect(frames[0].buffers).toBeUndefined()
|
|
368
|
-
|
|
369
|
-
recorder.stop()
|
|
370
|
-
})
|
|
371
|
-
|
|
372
|
-
test("should record independent buffer copies", async () => {
|
|
373
|
-
const recorderWithBuffers = new TestRecorder(renderer, { recordBuffers: { fg: true } })
|
|
374
|
-
recorderWithBuffers.rec()
|
|
375
|
-
|
|
376
|
-
const text = new TextRenderable(renderer, { content: "Copy Test" })
|
|
377
|
-
renderer.root.add(text)
|
|
378
|
-
await Bun.sleep(1)
|
|
379
|
-
|
|
380
|
-
await renderOnce()
|
|
381
|
-
|
|
382
|
-
const frames = recorderWithBuffers.recordedFrames
|
|
383
|
-
expect(frames.length).toBe(2)
|
|
384
|
-
|
|
385
|
-
const frame1Fg = frames[0].buffers?.fg
|
|
386
|
-
const frame2Fg = frames[1].buffers?.fg
|
|
387
|
-
|
|
388
|
-
expect(frame1Fg).toBeDefined()
|
|
389
|
-
expect(frame2Fg).toBeDefined()
|
|
390
|
-
expect(frame1Fg).not.toBe(frame2Fg)
|
|
391
|
-
|
|
392
|
-
recorderWithBuffers.stop()
|
|
393
|
-
})
|
|
394
|
-
|
|
395
|
-
test("should have correct buffer sizes", async () => {
|
|
396
|
-
const recorderWithAll = new TestRecorder(renderer, {
|
|
397
|
-
recordBuffers: { fg: true, bg: true, attributes: true },
|
|
398
|
-
})
|
|
399
|
-
recorderWithAll.rec()
|
|
400
|
-
|
|
401
|
-
const text = new TextRenderable(renderer, { content: "Size Test" })
|
|
402
|
-
renderer.root.add(text)
|
|
403
|
-
await Bun.sleep(1)
|
|
404
|
-
|
|
405
|
-
const frames = recorderWithAll.recordedFrames
|
|
406
|
-
expect(frames.length).toBe(1)
|
|
407
|
-
|
|
408
|
-
const expectedSize = renderer.width * renderer.height
|
|
409
|
-
expect(frames[0].buffers?.fg?.length).toBe(expectedSize * 4)
|
|
410
|
-
expect(frames[0].buffers?.bg?.length).toBe(expectedSize * 4)
|
|
411
|
-
expect(frames[0].buffers?.attributes?.length).toBe(expectedSize)
|
|
412
|
-
|
|
413
|
-
recorderWithAll.stop()
|
|
414
|
-
})
|
|
415
|
-
})
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import type { TestRenderer } from "./test-renderer.js"
|
|
2
|
-
|
|
3
|
-
export interface RecordBuffersOptions {
|
|
4
|
-
fg?: boolean
|
|
5
|
-
bg?: boolean
|
|
6
|
-
attributes?: boolean
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface RecordedBuffers {
|
|
10
|
-
fg?: Float32Array
|
|
11
|
-
bg?: Float32Array
|
|
12
|
-
attributes?: Uint8Array
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface RecordedFrame {
|
|
16
|
-
frame: string
|
|
17
|
-
timestamp: number
|
|
18
|
-
frameNumber: number
|
|
19
|
-
buffers?: RecordedBuffers
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface TestRecorderOptions {
|
|
23
|
-
recordBuffers?: RecordBuffersOptions
|
|
24
|
-
now?: () => number
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* TestRecorder records frames from a TestRenderer by hooking into the render pipeline.
|
|
29
|
-
* It captures the character frame after each native render pass.
|
|
30
|
-
*/
|
|
31
|
-
export class TestRecorder {
|
|
32
|
-
private renderer: TestRenderer
|
|
33
|
-
private frames: RecordedFrame[] = []
|
|
34
|
-
private recording: boolean = false
|
|
35
|
-
private frameNumber: number = 0
|
|
36
|
-
private startTime: number = 0
|
|
37
|
-
private originalRenderNative?: () => void
|
|
38
|
-
private decoder = new TextDecoder()
|
|
39
|
-
private recordBuffers: RecordBuffersOptions
|
|
40
|
-
private now: () => number
|
|
41
|
-
|
|
42
|
-
constructor(renderer: TestRenderer, options?: TestRecorderOptions) {
|
|
43
|
-
this.renderer = renderer
|
|
44
|
-
this.recordBuffers = options?.recordBuffers || {}
|
|
45
|
-
this.now = options?.now ?? (() => performance.now())
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Start recording frames. This hooks into the renderer's renderNative method.
|
|
50
|
-
*/
|
|
51
|
-
public rec(): void {
|
|
52
|
-
if (this.recording) {
|
|
53
|
-
return
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
this.recording = true
|
|
57
|
-
this.frames = []
|
|
58
|
-
this.frameNumber = 0
|
|
59
|
-
this.startTime = this.now()
|
|
60
|
-
|
|
61
|
-
// Store the original renderNative method
|
|
62
|
-
this.originalRenderNative = this.renderer["renderNative"].bind(this.renderer)
|
|
63
|
-
|
|
64
|
-
// Override renderNative to capture frames after each render
|
|
65
|
-
this.renderer["renderNative"] = () => {
|
|
66
|
-
// Call the original renderNative
|
|
67
|
-
this.originalRenderNative!()
|
|
68
|
-
|
|
69
|
-
// Capture the frame after rendering
|
|
70
|
-
this.captureFrame()
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Stop recording frames and restore the original renderNative method.
|
|
76
|
-
*/
|
|
77
|
-
public stop(): void {
|
|
78
|
-
if (!this.recording) {
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
this.recording = false
|
|
83
|
-
|
|
84
|
-
// Restore the original renderNative method
|
|
85
|
-
if (this.originalRenderNative) {
|
|
86
|
-
this.renderer["renderNative"] = this.originalRenderNative
|
|
87
|
-
this.originalRenderNative = undefined
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Get the recorded frames.
|
|
93
|
-
*/
|
|
94
|
-
public get recordedFrames(): RecordedFrame[] {
|
|
95
|
-
return [...this.frames]
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Clear all recorded frames.
|
|
100
|
-
*/
|
|
101
|
-
public clear(): void {
|
|
102
|
-
this.frames = []
|
|
103
|
-
this.frameNumber = 0
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Check if currently recording.
|
|
108
|
-
*/
|
|
109
|
-
public get isRecording(): boolean {
|
|
110
|
-
return this.recording
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Capture the current frame from the renderer's buffer.
|
|
115
|
-
*/
|
|
116
|
-
private captureFrame(): void {
|
|
117
|
-
const currentBuffer = this.renderer.currentRenderBuffer
|
|
118
|
-
const frameBytes = currentBuffer.getRealCharBytes(true)
|
|
119
|
-
const frame = this.decoder.decode(frameBytes)
|
|
120
|
-
|
|
121
|
-
const recordedFrame: RecordedFrame = {
|
|
122
|
-
frame,
|
|
123
|
-
timestamp: this.now() - this.startTime,
|
|
124
|
-
frameNumber: this.frameNumber++,
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Optionally record buffer data from currentRenderBuffer
|
|
128
|
-
if (this.recordBuffers.fg || this.recordBuffers.bg || this.recordBuffers.attributes) {
|
|
129
|
-
const buffers = currentBuffer.buffers
|
|
130
|
-
recordedFrame.buffers = {}
|
|
131
|
-
|
|
132
|
-
if (this.recordBuffers.fg) {
|
|
133
|
-
recordedFrame.buffers.fg = new Float32Array(buffers.fg)
|
|
134
|
-
}
|
|
135
|
-
if (this.recordBuffers.bg) {
|
|
136
|
-
recordedFrame.buffers.bg = new Float32Array(buffers.bg)
|
|
137
|
-
}
|
|
138
|
-
if (this.recordBuffers.attributes) {
|
|
139
|
-
recordedFrame.buffers.attributes = new Uint8Array(buffers.attributes)
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
this.frames.push(recordedFrame)
|
|
144
|
-
}
|
|
145
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { Readable, Writable } from "stream"
|
|
2
|
-
import { CliRenderer, type CliRendererConfig } from "../renderer.js"
|
|
3
|
-
import { resolveRenderLib } from "../zig.js"
|
|
4
|
-
import { createMockKeys } from "./mock-keys.js"
|
|
5
|
-
import { createMockMouse } from "./mock-mouse.js"
|
|
6
|
-
import type { CapturedFrame } from "../types.js"
|
|
7
|
-
|
|
8
|
-
export interface TestRendererOptions extends CliRendererConfig {
|
|
9
|
-
width?: number
|
|
10
|
-
height?: number
|
|
11
|
-
kittyKeyboard?: boolean
|
|
12
|
-
otherModifiersMode?: boolean
|
|
13
|
-
}
|
|
14
|
-
export interface TestRenderer extends CliRenderer {}
|
|
15
|
-
export type MockInput = ReturnType<typeof createMockKeys>
|
|
16
|
-
export type MockMouse = ReturnType<typeof createMockMouse>
|
|
17
|
-
|
|
18
|
-
const decoder = new TextDecoder()
|
|
19
|
-
|
|
20
|
-
class TestWriteStream extends Writable {
|
|
21
|
-
public readonly isTTY = true
|
|
22
|
-
public readonly columns: number
|
|
23
|
-
public readonly rows: number
|
|
24
|
-
|
|
25
|
-
constructor(columns: number, rows: number) {
|
|
26
|
-
super()
|
|
27
|
-
this.columns = columns
|
|
28
|
-
this.rows = rows
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
_write(_chunk: any, _encoding: BufferEncoding, callback: (error?: Error | null) => void): void {
|
|
32
|
-
callback()
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
getColorDepth(): number {
|
|
36
|
-
return 24
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export async function createTestRenderer(options: TestRendererOptions): Promise<{
|
|
41
|
-
renderer: TestRenderer
|
|
42
|
-
mockInput: MockInput
|
|
43
|
-
mockMouse: MockMouse
|
|
44
|
-
renderOnce: () => Promise<void>
|
|
45
|
-
captureCharFrame: () => string
|
|
46
|
-
captureSpans: () => CapturedFrame
|
|
47
|
-
resize: (width: number, height: number) => void
|
|
48
|
-
}> {
|
|
49
|
-
// Convert legacy kittyKeyboard boolean to new format
|
|
50
|
-
const useKittyKeyboard = options.kittyKeyboard ? { events: true } : options.useKittyKeyboard
|
|
51
|
-
|
|
52
|
-
const renderer = await setupTestRenderer({
|
|
53
|
-
...options,
|
|
54
|
-
useKittyKeyboard,
|
|
55
|
-
screenMode: options.screenMode ?? "main-screen",
|
|
56
|
-
footerHeight: options.footerHeight ?? 12,
|
|
57
|
-
consoleMode: options.consoleMode ?? "disabled",
|
|
58
|
-
externalOutputMode: options.externalOutputMode ?? "passthrough",
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
const mockInput = createMockKeys(renderer, {
|
|
62
|
-
kittyKeyboard: options.kittyKeyboard,
|
|
63
|
-
otherModifiersMode: options.otherModifiersMode,
|
|
64
|
-
})
|
|
65
|
-
const mockMouse = createMockMouse(renderer)
|
|
66
|
-
|
|
67
|
-
const renderOnce = async () => {
|
|
68
|
-
//@ts-expect-error - this is a test renderer
|
|
69
|
-
await renderer.loop()
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return {
|
|
73
|
-
renderer,
|
|
74
|
-
mockInput,
|
|
75
|
-
mockMouse,
|
|
76
|
-
renderOnce,
|
|
77
|
-
captureCharFrame: () => {
|
|
78
|
-
const currentBuffer = renderer.currentRenderBuffer
|
|
79
|
-
const frameBytes = currentBuffer.getRealCharBytes(true)
|
|
80
|
-
return decoder.decode(frameBytes)
|
|
81
|
-
},
|
|
82
|
-
captureSpans: () => {
|
|
83
|
-
const currentBuffer = renderer.currentRenderBuffer
|
|
84
|
-
const lines = currentBuffer.getSpanLines()
|
|
85
|
-
const cursorState = renderer.getCursorState()
|
|
86
|
-
return {
|
|
87
|
-
cols: currentBuffer.width,
|
|
88
|
-
rows: currentBuffer.height,
|
|
89
|
-
cursor: [cursorState.x, cursorState.y] as [number, number],
|
|
90
|
-
lines,
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
resize: (width: number, height: number) => {
|
|
94
|
-
//@ts-expect-error - this is a test renderer
|
|
95
|
-
renderer.processResize(width, height)
|
|
96
|
-
},
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
async function setupTestRenderer(config: TestRendererOptions) {
|
|
101
|
-
const stdin = config.stdin || (new Readable({ read() {} }) as NodeJS.ReadStream)
|
|
102
|
-
const width = config.width || config.stdout?.columns || process.stdout.columns || 80
|
|
103
|
-
const height = config.height || config.stdout?.rows || process.stdout.rows || 24
|
|
104
|
-
const stdout = config.stdout || (new TestWriteStream(width, height) as unknown as NodeJS.WriteStream)
|
|
105
|
-
const renderHeight = config.screenMode === "split-footer" ? (config.footerHeight ?? 12) : height
|
|
106
|
-
|
|
107
|
-
const ziglib = resolveRenderLib()
|
|
108
|
-
const rendererPtr = ziglib.createRenderer(width, renderHeight, {
|
|
109
|
-
testing: true,
|
|
110
|
-
remote: config.remote ?? false,
|
|
111
|
-
})
|
|
112
|
-
if (!rendererPtr) {
|
|
113
|
-
throw new Error("Failed to create test renderer")
|
|
114
|
-
}
|
|
115
|
-
if (config.useThread === undefined) {
|
|
116
|
-
config.useThread = true
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
if (process.platform === "linux") {
|
|
120
|
-
config.useThread = false
|
|
121
|
-
}
|
|
122
|
-
ziglib.setUseThread(rendererPtr, config.useThread)
|
|
123
|
-
|
|
124
|
-
const renderer = new CliRenderer(ziglib, rendererPtr, stdin, stdout, width, height, config)
|
|
125
|
-
|
|
126
|
-
process.off("SIGWINCH", renderer["sigwinchHandler"])
|
|
127
|
-
|
|
128
|
-
// Do not setup the terminal for testing as we will not actually output anything to the terminal
|
|
129
|
-
// await renderer.setupTerminal()
|
|
130
|
-
|
|
131
|
-
return renderer
|
|
132
|
-
}
|
package/src/testing.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// Testing utilities module exports
|
|
2
|
-
export * from "./testing/test-renderer.js"
|
|
3
|
-
export * from "./testing/mock-keys.js"
|
|
4
|
-
export * from "./testing/mock-mouse.js"
|
|
5
|
-
export * from "./testing/mock-tree-sitter-client.js"
|
|
6
|
-
export * from "./testing/spy.js"
|
|
7
|
-
export { TestRecorder, type RecordedFrame } from "./testing/test-recorder.js"
|