@jitl/opentui-core 0.1.97 → 0.2.15

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.
Files changed (132) hide show
  1. package/NativeSpanFeed.d.ts +2 -2
  2. package/README.md +2 -1
  3. package/Renderable.d.ts +12 -1
  4. package/audio.d.ts +89 -0
  5. package/buffer.d.ts +6 -5
  6. package/console.d.ts +3 -1
  7. package/edit-buffer.d.ts +1 -1
  8. package/editor-view.d.ts +1 -1
  9. package/{index-yxe6e14n.js → index-46f5e8m6.js} +1388 -1721
  10. package/index-46f5e8m6.js.map +36 -0
  11. package/index-5zwezmgj.js +639 -0
  12. package/index-5zwezmgj.js.map +11 -0
  13. package/index-axv7cw60.js +44 -0
  14. package/index-axv7cw60.js.map +10 -0
  15. package/{index-rhfjv9c1.js → index-g9agybj3.js} +4626 -984
  16. package/index-g9agybj3.js.map +82 -0
  17. package/index-k18nf2r7.js +21 -0
  18. package/{ffi-x3zvcksd.js.map → index-k18nf2r7.js.map} +1 -1
  19. package/{index-tkk6cmr2.js → index-rp7vz5rh.js} +125 -23
  20. package/index-rp7vz5rh.js.map +10 -0
  21. package/{index-kcpn1hka.js → index-xwsdfq5x.js} +16 -6
  22. package/index-xwsdfq5x.js.map +10 -0
  23. package/index.d.ts +1 -0
  24. package/index.js +37 -17
  25. package/index.js.map +1 -1
  26. package/lib/RGBA.d.ts +22 -6
  27. package/lib/clipboard.d.ts +1 -1
  28. package/lib/{keymapping.d.ts → keybinding.internal.d.ts} +10 -2
  29. package/lib/objects-in-viewport.d.ts +4 -4
  30. package/lib/parse.keypress-kitty.d.ts +1 -0
  31. package/lib/parse.keypress.d.ts +1 -0
  32. package/lib/render-geometry.d.ts +8 -0
  33. package/lib/stdin-parser.d.ts +4 -1
  34. package/lib/terminal-capability-detection.d.ts +2 -0
  35. package/lib/terminal-palette.d.ts +20 -5
  36. package/lib/tree-sitter/assets/update.d.ts +1 -0
  37. package/lib/tree-sitter/client.d.ts +2 -0
  38. package/lib/tree-sitter/default-parsers.d.ts +1 -1
  39. package/lib/tree-sitter/index.d.ts +0 -2
  40. package/lib/tree-sitter/update-assets.d.ts +3 -0
  41. package/lib/tree-sitter/update-assets.js +377 -0
  42. package/lib/tree-sitter/update-assets.js.map +12 -0
  43. package/lib/tree-sitter-styled-text.d.ts +6 -4
  44. package/node22-bun-ffi-structs-ha8fmzzb.js +396 -0
  45. package/node22-bun-ffi-structs-ha8fmzzb.js.map +10 -0
  46. package/package.json +23 -22
  47. package/parser.worker.js +161 -24
  48. package/parser.worker.js.map +12 -5
  49. package/platform/bun-ffi-structs.d.ts +2 -0
  50. package/platform/ffi.d.ts +126 -0
  51. package/platform/node22-bun-ffi-structs.d.ts +33 -0
  52. package/platform/node22-ffi.d.ts +33 -0
  53. package/{compat → platform}/runtime.d.ts +6 -0
  54. package/platform/worker.d.ts +4 -0
  55. package/renderables/Code.d.ts +4 -0
  56. package/renderables/Markdown.d.ts +62 -0
  57. package/renderables/ScrollBox.d.ts +1 -0
  58. package/renderables/Select.d.ts +3 -1
  59. package/renderables/TabSelect.d.ts +3 -1
  60. package/renderables/TextBufferRenderable.d.ts +1 -0
  61. package/renderables/TextTable.d.ts +15 -1
  62. package/renderables/Textarea.d.ts +5 -3
  63. package/renderables/markdown-parser.d.ts +1 -0
  64. package/renderer-theme-mode.d.ts +29 -0
  65. package/renderer.d.ts +142 -16
  66. package/runtime-plugin-support-configure.d.ts +4 -0
  67. package/runtime-plugin-support-configure.js +20 -0
  68. package/{index-re3ntm60.js.map → runtime-plugin-support-configure.js.map} +1 -1
  69. package/runtime-plugin-support.d.ts +3 -3
  70. package/runtime-plugin-support.js +9 -18
  71. package/runtime-plugin-support.js.map +3 -3
  72. package/runtime-plugin.d.ts +1 -4
  73. package/runtime-plugin.js +5 -5
  74. package/syntax-style.d.ts +11 -3
  75. package/testing/terminal-capabilities.d.ts +7 -0
  76. package/testing/test-recorder.d.ts +6 -6
  77. package/testing/test-renderer.d.ts +34 -2
  78. package/testing.d.ts +2 -0
  79. package/testing.js +329 -23
  80. package/testing.js.map +7 -5
  81. package/text-buffer-view.d.ts +2 -1
  82. package/text-buffer.d.ts +1 -1
  83. package/types.d.ts +33 -1
  84. package/zig-structs.d.ts +111 -20
  85. package/zig.d.ts +57 -7
  86. package/3d/SpriteResourceManager.d.ts +0 -74
  87. package/3d/SpriteUtils.d.ts +0 -13
  88. package/3d/TextureUtils.d.ts +0 -24
  89. package/3d/ThreeRenderable.d.ts +0 -40
  90. package/3d/WGPURenderer.d.ts +0 -61
  91. package/3d/animation/ExplodingSpriteEffect.d.ts +0 -71
  92. package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +0 -76
  93. package/3d/animation/SpriteAnimator.d.ts +0 -124
  94. package/3d/animation/SpriteParticleGenerator.d.ts +0 -62
  95. package/3d/canvas.d.ts +0 -44
  96. package/3d/index.d.ts +0 -12
  97. package/3d/physics/PlanckPhysicsAdapter.d.ts +0 -19
  98. package/3d/physics/RapierPhysicsAdapter.d.ts +0 -19
  99. package/3d/physics/physics-interface.d.ts +0 -27
  100. package/3d.d.ts +0 -2
  101. package/3d.js +0 -33843
  102. package/3d.js.map +0 -155
  103. package/Worker-vajwjk0s.js +0 -94
  104. package/Worker-vajwjk0s.js.map +0 -10
  105. package/compat/FFIType.d.ts +0 -304
  106. package/compat/Worker.d.ts +0 -1
  107. package/compat/bun-ffi-structs.d.ts +0 -2
  108. package/compat/ffi.d.ts +0 -86
  109. package/compat/nodejs/Worker.d.ts +0 -16
  110. package/compat/nodejs/bun-ffi-structs/index.d.ts +0 -46
  111. package/compat/nodejs/ffi.d.ts +0 -21
  112. package/compat/nodejs/registerResolveJs.d.ts +0 -1
  113. package/compat/nodejs/runtime.d.ts +0 -7
  114. package/compat/nodejs/test.d.ts +0 -4
  115. package/compat/nodejs/trampoline.worker.d.ts +0 -1
  116. package/compat/test.d.ts +0 -1
  117. package/compat/testHelpers.d.ts +0 -18
  118. package/ffi-x3zvcksd.js +0 -25
  119. package/index-5yqvbmcz.js +0 -220
  120. package/index-5yqvbmcz.js.map +0 -10
  121. package/index-bnfz2g63.js +0 -654
  122. package/index-bnfz2g63.js.map +0 -10
  123. package/index-cbvybypy.js +0 -43
  124. package/index-cbvybypy.js.map +0 -10
  125. package/index-kcpn1hka.js.map +0 -10
  126. package/index-re3ntm60.js +0 -51
  127. package/index-rhfjv9c1.js.map +0 -70
  128. package/index-tkk6cmr2.js.map +0 -10
  129. package/index-yxe6e14n.js.map +0 -42
  130. package/runtime-hdpkc6qf.js +0 -220
  131. package/runtime-hdpkc6qf.js.map +0 -17
  132. /package/{compat/nodejs/registerBun.d.ts → native-event-worker-repro.worker.d.ts} +0 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/platform/ffi.ts", "../src/platform/node22-ffi.ts"],
4
+ "sourcesContent": [
5
+ "import { createRequire } from \"node:module\"\nimport { fileURLToPath } from \"node:url\"\nimport { createNode22Backend } from \"./node22-ffi.js\"\n\ndeclare const pointerBrand: unique symbol\n\n// This module owns OpenTUI's native FFI surface. Portable code imports this\n// file instead of bun:ffi, so backends can keep the same call sites.\n\n// External FFI producers may expose their own branded pointer types. Public APIs\n// that consume foreign pointers should accept the raw pointer shape and normalize\n// it before crossing OpenTUI's native boundary.\nexport type PointerInput = number | bigint\n\n// Runtime pointers are numbers in Bun and bigints in Node's experimental FFI.\n// Keep both in our own type, and narrow only inside a backend that requires it.\nexport type Pointer = PointerInput & { readonly [pointerBrand]: \"Pointer\" }\n\ntype PointerSource = ArrayBufferLike | ArrayBufferView\n\n// Bun accepts numeric pointers only. Keep this type private so Bun's pointer\n// model does not leak into the exported surface.\ntype BunPointer = number\n\n// These names match the Bun FFI type strings OpenTUI uses today. Other\n// backends map them at library load time instead of wrapping every native call.\nexport const FFIType = {\n char: \"char\",\n int8_t: \"int8_t\",\n i8: \"i8\",\n uint8_t: \"uint8_t\",\n u8: \"u8\",\n int16_t: \"int16_t\",\n i16: \"i16\",\n uint16_t: \"uint16_t\",\n u16: \"u16\",\n int32_t: \"int32_t\",\n i32: \"i32\",\n int: \"int\",\n uint32_t: \"uint32_t\",\n u32: \"u32\",\n int64_t: \"int64_t\",\n i64: \"i64\",\n uint64_t: \"uint64_t\",\n u64: \"u64\",\n double: \"double\",\n f64: \"f64\",\n float: \"float\",\n f32: \"f32\",\n bool: \"bool\",\n ptr: \"ptr\",\n pointer: \"pointer\",\n void: \"void\",\n cstring: \"cstring\",\n function: \"function\",\n usize: \"usize\",\n callback: \"callback\",\n napi_env: \"napi_env\",\n napi_value: \"napi_value\",\n buffer: \"buffer\",\n} as const\n\nexport type FFIType = (typeof FFIType)[keyof typeof FFIType]\n// Kept as a source-shape compatibility alias for Bun-style call sites.\nexport type FFITypeOrString = FFIType\n\n// A function definition describes one native symbol. `ptr` overrides the symbol\n// address and follows the same pointer safety rules as normal pointer values.\nexport interface FFIFunction {\n readonly args?: readonly FFITypeOrString[]\n readonly returns?: FFITypeOrString\n readonly ptr?: Pointer\n readonly threadsafe?: boolean\n}\n\n// A callback instance owns a native trampoline. `close()` invalidates `ptr`;\n// callers must not pass that pointer to native code after close.\nexport interface FFICallbackInstance {\n readonly ptr: Pointer | null\n readonly threadsafe: boolean\n close(): void\n}\n\n// A loaded library owns callbacks created through `createCallback()`.\n//\n// Typical use:\n// const callback = library.createCallback(handler, { args: [\"ptr\"], returns: \"void\" })\n// library.symbols.setLogCallback(callback.ptr)\n//\n// `close()` first closes the native library, then closes any callbacks that\n// remain open.\nexport interface Library<Fns extends Record<string, FFIFunction>> {\n symbols: { [K in keyof Fns]: (...args: any[]) => any }\n createCallback(callback: (...args: any[]) => any, definition: FFIFunction): FFICallbackInstance\n close(): void\n}\n\n// A backend normalizes runtime differences once. Do not wrap hot symbol calls\n// here unless a backend must adapt them.\nexport interface FfiBackend {\n dlopen<Fns extends Record<string, FFIFunction>>(path: string | URL, symbols: Fns): Library<Fns>\n ptr(value: PointerSource): Pointer\n suffix: string\n toArrayBuffer(pointer: Pointer, offset: number | undefined, length: number): ArrayBuffer\n}\n\ninterface BunFFIFunction {\n readonly args?: readonly FFITypeOrString[]\n readonly returns?: FFITypeOrString\n readonly ptr?: BunPointer\n readonly threadsafe?: boolean\n}\n\ninterface BunFfiLibrary<Fns extends Record<string, BunFFIFunction>> {\n symbols: { [K in keyof Fns]: (...args: any[]) => any }\n close(): void\n}\n\ninterface BunFfiBackend {\n JSCallback: new (callback: (...args: any[]) => any, definition: BunFFIFunction) => FFICallbackInstance\n dlopen<Fns extends Record<string, BunFFIFunction>>(path: string | URL, symbols: Fns): BunFfiLibrary<Fns>\n ptr(value: PointerSource): Pointer\n suffix: string\n toArrayBuffer(pointer: BunPointer, offset: number | undefined, length: number): ArrayBuffer\n}\n\ninterface NodeFFIFunction {\n readonly parameters: readonly string[]\n readonly result: string\n}\n\ninterface NodeDynamicLibrary {\n close(): void\n registerCallback(signature: NodeFFIFunction, callback: (...args: any[]) => any): bigint\n unregisterCallback(pointer: bigint): void\n}\n\ninterface NodeFfiLibrary {\n readonly lib: NodeDynamicLibrary\n readonly functions: Record<string, (...args: any[]) => any>\n}\n\ninterface NodeFfiBackend {\n dlopen(path: string | null, symbols: Record<string, NodeFFIFunction>): NodeFfiLibrary\n getRawPointer(source: ArrayBuffer): bigint\n suffix: string\n toArrayBuffer(pointer: bigint, length: number, copy?: boolean): ArrayBuffer\n}\n\nexport const FFI_UNAVAILABLE = \"OpenTUI native FFI is not available for this runtime yet\"\nexport const BUN_DLOPEN_NULL = \"Bun FFI backend does not support dlopen(null)\"\nexport const LIBRARY_CLOSED = \"Cannot create FFI callback after library.close() has been called\"\nexport const NODE_CALLBACK_THREADSAFE =\n \"Node FFI callbacks are same-thread only and do not support threadsafe callbacks\"\nexport const NODE_NAPI_UNSUPPORTED = \"Node FFI backend does not support Bun N-API FFI types\"\nexport const NODE_POINTER_OVERRIDE = \"Node FFI backend does not support FFIFunction.ptr overrides\"\nexport const NODE_PTR_VALUE =\n \"node:ffi ptr() only supports ArrayBuffer and ArrayBufferView values backed by ArrayBuffer\"\nexport const NODE_STRING_RETURN = \"Node FFI backend does not normalize string return values (yet)\"\nexport const NODE_USIZE_UNSUPPORTED = \"Node FFI backend does not support usize until (yet)\"\nexport const POINTER_NEGATIVE = \"Pointer must be non-negative\"\nexport const POINTER_UNSAFE = \"Pointer exceeds safe integer range\"\n\nfunction unavailable(cause?: unknown): never {\n throw new Error(FFI_UNAVAILABLE, { cause })\n}\n\n// The placeholder backend lets non-Bun runtimes load without errors.\nfunction createUnsupportedBackend(cause?: unknown): FfiBackend {\n return {\n dlopen() {\n return unavailable(cause)\n },\n ptr() {\n return unavailable(cause)\n },\n suffix: \"\",\n toArrayBuffer() {\n return unavailable(cause)\n },\n }\n}\n\nconst isBun =\n typeof process !== \"undefined\" &&\n typeof process.versions === \"object\" &&\n process.versions !== null &&\n typeof process.versions.bun === \"string\"\n\nconst requireModule = createRequire(import.meta.url)\nconst backend = loadBackend()\n\nfunction loadBackend(): FfiBackend {\n // Keep the Bun module import behind the runtime check so Node does not\n // resolve bun:ffi during import.\n if (isBun) {\n return createBunBackend(requireModule(\"bun:ffi\") as BunFfiBackend)\n }\n\n try {\n const nodeFfi = requireModule(\"node:ffi\") as NodeFfiBackend & { default?: NodeFfiBackend }\n return createNodeBackend(nodeFfi.default ?? nodeFfi)\n } catch (error) {\n try {\n return createNode22Backend()\n } catch (fallbackError) {\n return createUnsupportedBackend(fallbackError ?? error)\n }\n }\n}\n\n// Normalize foreign pointer-like values into the current runtime's pointer\n// representation before passing them to native code.\nexport function toPointer(value: PointerInput): Pointer {\n if (isBun && typeof value === \"bigint\") {\n return toSafeNumberPointer(value) as Pointer\n }\n\n if (!isBun && typeof value === \"number\") {\n return toSafeBigIntPointer(value) as Pointer\n }\n\n return value as Pointer\n}\n\nexport function ffiBool(value: boolean): 0 | 1 {\n return value ? 1 : 0\n}\n\n// Convert a bigint pointer to a number only when JavaScript can represent it\n// exactly. A rounded pointer would target the wrong address.\nfunction toSafeNumberPointer(pointer: bigint): number {\n if (pointer < 0n) {\n throw new Error(POINTER_NEGATIVE)\n }\n\n if (pointer > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(POINTER_UNSAFE)\n }\n\n return Number(pointer)\n}\n\nfunction toSafeBigIntPointer(pointer: number): bigint {\n if (pointer < 0) {\n throw new Error(POINTER_NEGATIVE)\n }\n\n if (!Number.isSafeInteger(pointer)) {\n throw new Error(POINTER_UNSAFE)\n }\n\n return BigInt(pointer)\n}\n\n// Wrap a backend callback so the loaded library can close it later. The wrapper\n// keeps `ptr` live until close, then clears it so callers cannot reuse a stale\n// trampoline pointer.\nfunction createManagedCallback(raw: FFICallbackInstance, callbacks: Set<FFICallbackInstance>): FFICallbackInstance {\n let ptr = raw.ptr\n let closed = false\n\n const instance: FFICallbackInstance = {\n get ptr() {\n return ptr\n },\n get threadsafe() {\n return raw.threadsafe\n },\n close() {\n if (closed) {\n return\n }\n\n closed = true\n callbacks.delete(instance)\n try {\n raw.close()\n } finally {\n // Clear the pointer even if the backend close throws. The trampoline is\n // no longer safe to use.\n ptr = null\n }\n },\n }\n\n callbacks.add(instance)\n\n return instance\n}\n\nfunction normalizeBunDefinitions<Fns extends Record<string, FFIFunction>>(\n definitions: Fns,\n): { [K in keyof Fns]: BunFFIFunction } {\n // Normalize all Bun definitions before `dlopen()`. Bun rejects bigint pointer\n // overrides, so convert them once before loading the native library.\n return Object.fromEntries(\n Object.entries(definitions).map(([name, definition]) => [name, normalizeBunDefinition(definition)]),\n ) as { [K in keyof Fns]: BunFFIFunction }\n}\n\nfunction normalizeBunDefinition(definition: FFIFunction): BunFFIFunction {\n return {\n args: definition.args,\n returns: definition.returns,\n ptr: definition.ptr == null ? undefined : toBunPointer(definition.ptr),\n threadsafe: definition.threadsafe,\n }\n}\n\n// Convert Pointer pointers to Bun pointers at the Bun boundary only.\nfunction toBunPointer(pointer: Pointer): BunPointer {\n return typeof pointer === \"bigint\" ? toSafeNumberPointer(pointer) : pointer\n}\n\n// Create a Bun backend from bun:ffi.\nexport function createBunBackend(bun: BunFfiBackend): FfiBackend {\n return {\n dlopen(path, symbols) {\n if (path === null) {\n throw new Error(BUN_DLOPEN_NULL)\n }\n\n const library = bun.dlopen(path, normalizeBunDefinitions(symbols))\n const callbacks = new Set<FFICallbackInstance>()\n let closed = false\n\n return {\n symbols: library.symbols,\n createCallback(callback, definition) {\n if (closed) {\n // A closed library no longer owns native state. New callbacks would\n // have no cleanup path.\n throw new Error(LIBRARY_CLOSED)\n }\n\n // Bun callbacks are standalone objects. OpenTUI treats them as\n // library-owned to match the future Node FFI shape and to avoid\n // leaked trampolines.\n const raw = new bun.JSCallback(callback, normalizeBunDefinition(definition))\n\n return createManagedCallback(raw, callbacks)\n },\n close() {\n if (closed) {\n return\n }\n\n closed = true\n\n try {\n // Close native state while callbacks still point to live\n // trampolines. Native teardown may call back during final cleanup.\n library.close()\n } finally {\n // After native teardown, close any JS trampolines the caller did\n // not close explicitly.\n for (const callback of [...callbacks]) {\n callback.close()\n }\n }\n },\n }\n },\n ptr: bun.ptr,\n suffix: bun.suffix,\n toArrayBuffer(pointer, offset, length) {\n // Bun only accepts numeric pointers here. Keep the coercion at this\n // backend boundary.\n return bun.toArrayBuffer(toBunPointer(pointer), offset, length)\n },\n }\n}\n\n// Create a Node backend from node:ffi.\nexport function createNodeBackend(nodeFfi: NodeFfiBackend): FfiBackend {\n return {\n dlopen(path, symbols) {\n const { lib, functions } = nodeFfi.dlopen(toNodeLibraryPath(path), normalizeNodeDefinitions(symbols))\n const callbacks = new Set<FFICallbackInstance>()\n let closed = false\n let libraryClosed = false\n\n return {\n symbols: functions as { [K in keyof typeof symbols]: (...args: any[]) => any },\n createCallback(callback, definition) {\n if (closed) {\n throw new Error(LIBRARY_CLOSED)\n }\n\n if (definition.threadsafe) {\n throw new Error(NODE_CALLBACK_THREADSAFE)\n }\n\n const callbackPointer = lib.registerCallback(normalizeNodeDefinition(definition), callback)\n const raw: FFICallbackInstance = {\n ptr: callbackPointer as Pointer,\n threadsafe: false,\n close() {\n if (!libraryClosed) {\n lib.unregisterCallback(callbackPointer)\n }\n },\n }\n\n return createManagedCallback(raw, callbacks)\n },\n close() {\n if (closed) {\n return\n }\n\n closed = true\n\n try {\n libraryClosed = true\n lib.close()\n } finally {\n for (const callback of [...callbacks]) {\n callback.close()\n }\n }\n },\n }\n },\n ptr(value) {\n if (ArrayBuffer.isView(value)) {\n if (!(value.buffer instanceof ArrayBuffer)) {\n throw new TypeError(NODE_PTR_VALUE)\n }\n\n return (nodeFfi.getRawPointer(value.buffer) + BigInt(value.byteOffset)) as Pointer\n }\n\n if (value instanceof ArrayBuffer) {\n return nodeFfi.getRawPointer(value) as Pointer\n }\n\n throw new TypeError(NODE_PTR_VALUE)\n },\n suffix: nodeFfi.suffix,\n toArrayBuffer(pointer, offset, length) {\n return nodeFfi.toArrayBuffer(toBigIntPointer(pointer) + BigInt(offset ?? 0), length, false)\n },\n }\n}\n\nfunction toNodeLibraryPath(path: string | URL | null): string | null {\n return path instanceof URL ? fileURLToPath(path) : path\n}\n\nfunction normalizeNodeDefinitions<Fns extends Record<string, FFIFunction>>(\n definitions: Fns,\n): Record<string, NodeFFIFunction> {\n return Object.fromEntries(\n Object.entries(definitions).map(([name, definition]) => [name, normalizeNodeDefinition(definition)]),\n )\n}\n\nfunction normalizeNodeDefinition(definition: FFIFunction): NodeFFIFunction {\n if (definition.ptr != null) {\n throw new Error(NODE_POINTER_OVERRIDE)\n }\n\n return {\n parameters: (definition.args ?? []).map((type) => toNodeFFIType(type, \"parameter\")),\n result: toNodeFFIType(definition.returns ?? FFIType.void, \"result\"),\n }\n}\n\nfunction toNodeFFIType(type: FFITypeOrString, position: \"parameter\" | \"result\"): string {\n switch (type) {\n case FFIType.char:\n return \"char\"\n case FFIType.int8_t:\n case FFIType.i8:\n return \"i8\"\n case FFIType.uint8_t:\n case FFIType.u8:\n return \"u8\"\n case FFIType.int16_t:\n case FFIType.i16:\n return \"i16\"\n case FFIType.uint16_t:\n case FFIType.u16:\n return \"u16\"\n case FFIType.int32_t:\n case FFIType.int:\n case FFIType.i32:\n return \"i32\"\n case FFIType.uint32_t:\n case FFIType.u32:\n return \"u32\"\n case FFIType.int64_t:\n case FFIType.i64:\n return \"i64\"\n case FFIType.uint64_t:\n case FFIType.u64:\n return \"u64\"\n case FFIType.double:\n case FFIType.f64:\n return \"f64\"\n case FFIType.float:\n case FFIType.f32:\n return \"f32\"\n case FFIType.bool:\n return \"bool\"\n case FFIType.ptr:\n case FFIType.pointer:\n return \"pointer\"\n case FFIType.void:\n return \"void\"\n case FFIType.cstring:\n // TODO(audit): cstring vs string semantics differ between backends.\n //\n // The type-name mapping here is intentional, but the runtime marshalling\n // is not equivalent:\n // - Bun's `cstring` parameter rejects raw JavaScript strings; callers\n // must pass a TypedArray, a Pointer, or a CString.\n // - Node's `string` parameter copies a JavaScript string to a\n // temporary NUL-terminated UTF-8 buffer for the duration of the\n // call.\n //\n // Callsites should encode strings into byte buffers and pass pointers\n // instead of relying on either backend's string handling.\n if (position === \"result\") {\n throw new Error(NODE_STRING_RETURN)\n }\n\n return \"string\"\n case FFIType.function:\n case FFIType.callback:\n // Pointer-like types (pointer, string, buffer, arraybuffer, and function)\n // are all passed as pointers in node:ffi.\n return \"pointer\"\n case FFIType.usize:\n // `usize` needs an ABI audit before Node support; use u64 would require\n // BigInt call sites and u32 can truncate pointers.\n throw new Error(NODE_USIZE_UNSUPPORTED)\n case FFIType.napi_env:\n case FFIType.napi_value:\n // Bun's N-API bridge types are not equivalent to raw Node FFI pointers.\n throw new Error(NODE_NAPI_UNSUPPORTED)\n case FFIType.buffer:\n return \"buffer\"\n default:\n return unsupportedNodeFFIType(type)\n }\n}\n\nfunction unsupportedNodeFFIType(type: never): never {\n throw new Error(`Unsupported FFIType for node:ffi: ${String(type)}`)\n}\n\nfunction toBigIntPointer(pointer: Pointer): bigint {\n if (typeof pointer === \"bigint\") {\n if (pointer < 0n) {\n throw new Error(POINTER_NEGATIVE)\n }\n\n return pointer\n }\n\n return toSafeBigIntPointer(pointer)\n}\n\nexport const dlopen = backend.dlopen\nexport const ptr = backend.ptr\nexport const suffix = backend.suffix\nexport const toArrayBuffer = backend.toArrayBuffer\n",
6
+ "import { createRequire } from \"node:module\"\nimport { fileURLToPath } from \"node:url\"\nimport { isAnyArrayBuffer, isArrayBuffer, isArrayBufferView } from \"node:util/types\"\nimport {\n LIBRARY_CLOSED,\n NODE_CALLBACK_THREADSAFE,\n NODE_NAPI_UNSUPPORTED,\n NODE_POINTER_OVERRIDE,\n NODE_PTR_VALUE,\n NODE_STRING_RETURN,\n POINTER_NEGATIVE,\n POINTER_UNSAFE,\n type FFICallbackInstance,\n type FFIFunction,\n type FFITypeOrString,\n type FfiBackend,\n type Pointer,\n} from \"./ffi.js\"\n\ntype KoffiExternal = object & { __koffi_external__: true }\ntype KoffiFunction = ((...args: unknown[]) => unknown) & { async?: unknown }\ntype KoffiRegisteredCallback = KoffiExternal\ntype KoffiTypeSpec = unknown\ntype UnsafePointerOf = (value: ArrayBuffer) => Pointer\ntype UnsafeArrayBufferAt = (pointer: Pointer, offset: number | undefined, length: number) => ArrayBuffer\n\ninterface KoffiModule {\n address(pointer: KoffiExternal): bigint | number\n extension: string\n load(path: string): KoffiLib\n opaque(name?: string): KoffiTypeSpec\n pointer(nameOrType: string | KoffiTypeSpec, type?: KoffiTypeSpec): KoffiTypeSpec\n proto(returns: KoffiTypeSpec, args: KoffiTypeSpec[]): KoffiTypeSpec\n register(callback: (...args: any[]) => any, type: KoffiTypeSpec): KoffiRegisteredCallback\n unregister(callback: KoffiRegisteredCallback): void\n types: Record<string, KoffiTypeSpec>\n}\n\ninterface KoffiLib {\n func(name: string, returns: KoffiTypeSpec, args: KoffiTypeSpec[]): KoffiFunction\n unload(): void\n}\n\ninterface UnsafePointerModule {\n unsafePointerOf: UnsafePointerOf\n unsafeArrayBufferAt: UnsafeArrayBufferAt\n}\n\ninterface Node22Modules {\n koffi: KoffiModule\n unsafePointerOf: UnsafePointerOf\n unsafeArrayBufferAt: UnsafeArrayBufferAt\n}\n\nconst requireModule = createRequire(import.meta.url)\nconst emptyPtrSentinel = new Uint8Array(1)\n\nexport function createNode22Backend(modules = loadNode22Modules()): FfiBackend {\n const { koffi, unsafePointerOf, unsafeArrayBufferAt } = modules\n const bunPtrType = koffi.pointer(\"BunPtr\", koffi.opaque())\n const bufferType = koffi.opaque(\"Buffer\")\n const napiEnvType = koffi.opaque(\"NapiEnv\")\n const napiValueType = koffi.opaque(\"NapiValue\")\n\n const ffiTypeToKoffiType = (type: FFITypeOrString, position: \"parameter\" | \"result\"): KoffiTypeSpec => {\n switch (type) {\n case \"char\":\n return koffi.types.char\n case \"int8_t\":\n case \"i8\":\n return koffi.types.int8_t\n case \"uint8_t\":\n case \"u8\":\n return koffi.types.uint8_t\n case \"int16_t\":\n case \"i16\":\n return koffi.types.int16_t\n case \"uint16_t\":\n case \"u16\":\n return koffi.types.uint16_t\n case \"int32_t\":\n case \"int\":\n case \"i32\":\n return koffi.types.int32_t\n case \"uint32_t\":\n case \"u32\":\n return koffi.types.uint32_t\n case \"int64_t\":\n case \"i64\":\n return koffi.types.int64_t\n case \"uint64_t\":\n case \"u64\":\n case \"usize\":\n return koffi.types.uint64_t\n case \"double\":\n case \"f64\":\n return koffi.types.double\n case \"float\":\n case \"f32\":\n return koffi.types.float\n case \"bool\":\n return koffi.types.bool\n case \"ptr\":\n case \"pointer\":\n case \"function\":\n case \"callback\":\n return bunPtrType\n case \"void\":\n return koffi.types.void\n case \"cstring\":\n if (position === \"result\") {\n throw new Error(NODE_STRING_RETURN)\n }\n\n return koffi.types.string\n case \"buffer\":\n return bufferType\n case \"napi_env\":\n throw new Error(NODE_NAPI_UNSUPPORTED, { cause: napiEnvType })\n case \"napi_value\":\n throw new Error(NODE_NAPI_UNSUPPORTED, { cause: napiValueType })\n default:\n return unsupportedNode22FFIType(type)\n }\n }\n\n const argsToKoffiTypes = (args: readonly FFITypeOrString[] | undefined): KoffiTypeSpec[] =>\n args?.map((type) => ffiTypeToKoffiType(type, \"parameter\")) ?? []\n\n const returnsToKoffiType = (returns: FFITypeOrString | undefined): KoffiTypeSpec =>\n ffiTypeToKoffiType(returns ?? \"void\", \"result\")\n\n const createRawCallback = (callback: (...args: any[]) => any, definition: FFIFunction): FFICallbackInstance => {\n if (definition.ptr != null) {\n throw new Error(NODE_POINTER_OVERRIDE)\n }\n\n if (definition.threadsafe) {\n throw new Error(NODE_CALLBACK_THREADSAFE)\n }\n\n const pointerArgIndices = getTypeIndices(definition.args, isPointerType)\n const wrappedCallback =\n pointerArgIndices.length === 0\n ? callback\n : (...args: any[]) => {\n for (const index of pointerArgIndices) {\n args[index] = koffiPointerToPointer(koffi, args[index])\n }\n return callback(...args)\n }\n\n const proto = koffi.proto(returnsToKoffiType(definition.returns), argsToKoffiTypes(definition.args))\n let registeredCallback: KoffiRegisteredCallback | null = koffi.register(wrappedCallback, koffi.pointer(proto))\n\n return {\n get ptr() {\n return registeredCallback ? koffiPointerToPointer(koffi, registeredCallback) : null\n },\n threadsafe: false,\n close() {\n if (!registeredCallback) {\n return\n }\n\n koffi.unregister(registeredCallback)\n registeredCallback = null\n },\n }\n }\n\n const createFunction = (lib: KoffiLib, name: string, definition: FFIFunction): KoffiFunction => {\n if (definition.ptr != null) {\n throw new Error(NODE_POINTER_OVERRIDE)\n }\n\n const func = lib.func(name, returnsToKoffiType(definition.returns), argsToKoffiTypes(definition.args))\n const pointerArgIndices = getTypeIndices(definition.args, isPointerType)\n const boolArgIndices = getTypeIndices(definition.args, isBoolType)\n const returnsPointer = isPointerType(definition.returns)\n const returnsBigInt = isBigIntType(definition.returns)\n\n if (pointerArgIndices.length === 0 && boolArgIndices.length === 0 && !returnsPointer && !returnsBigInt) {\n return func\n }\n\n const wrapper = (...args: unknown[]) => {\n for (const index of boolArgIndices) {\n args[index] = Boolean(args[index])\n }\n\n for (const index of pointerArgIndices) {\n args[index] = pointerArgToKoffiArg(args[index])\n }\n\n const result = func(...args)\n\n if (returnsPointer) {\n return koffiPointerToPointer(koffi, result)\n }\n\n if (returnsBigInt) {\n return typeof result === \"bigint\" ? result : BigInt(result as number)\n }\n\n return result\n }\n\n Object.defineProperty(wrapper, \"name\", { value: name })\n return wrapper\n }\n\n return {\n dlopen(path, symbols) {\n if (path === null) {\n throw new Error(\"Node 22 FFI backend does not support dlopen(null)\")\n }\n\n const lib = koffi.load(path instanceof URL ? fileURLToPath(path) : path)\n const callbacks = new Set<FFICallbackInstance>()\n let closed = false\n\n return {\n symbols: Object.fromEntries(\n Object.entries(symbols).map(([name, definition]) => [name, createFunction(lib, name, definition)]),\n ) as { [K in keyof typeof symbols]: (...args: any[]) => any },\n createCallback(callback, definition) {\n if (closed) {\n throw new Error(LIBRARY_CLOSED)\n }\n\n const raw = createRawCallback(callback, definition)\n const managed = createManagedCallback(raw, callbacks)\n callbacks.add(managed)\n return managed\n },\n close() {\n if (closed) {\n return\n }\n\n closed = true\n\n try {\n lib.unload()\n } finally {\n for (const callback of [...callbacks]) {\n callback.close()\n }\n }\n },\n }\n },\n ptr(value) {\n if (isArrayBufferView(value)) {\n if (!isArrayBuffer(value.buffer)) {\n throw new TypeError(NODE_PTR_VALUE)\n }\n\n return offsetPointer(unsafePointerOf(value.buffer), value.byteOffset)\n }\n\n if (isAnyArrayBuffer(value)) {\n return unsafePointerOf(value as ArrayBuffer)\n }\n\n throw new TypeError(NODE_PTR_VALUE)\n },\n suffix: koffi.extension.slice(1),\n toArrayBuffer: unsafeArrayBufferAt,\n }\n}\n\nfunction loadNode22Modules(): Node22Modules {\n const koffiModule = requireModule(\"koffi\") as KoffiModule & { default?: KoffiModule }\n const unsafePointerModule = requireModule(\"unsafe-pointer\") as UnsafePointerModule\n\n return {\n koffi: koffiModule.default ?? koffiModule,\n unsafePointerOf: unsafePointerModule.unsafePointerOf,\n unsafeArrayBufferAt: unsafePointerModule.unsafeArrayBufferAt,\n }\n}\n\nfunction createManagedCallback(raw: FFICallbackInstance, callbacks: Set<FFICallbackInstance>): FFICallbackInstance {\n let ptr = raw.ptr\n let closed = false\n\n const instance: FFICallbackInstance = {\n get ptr() {\n return ptr\n },\n get threadsafe() {\n return raw.threadsafe\n },\n close() {\n if (closed) {\n return\n }\n\n closed = true\n callbacks.delete(instance)\n try {\n raw.close()\n } finally {\n ptr = null\n }\n },\n }\n\n return instance\n}\n\nfunction getTypeIndices(\n types: readonly FFITypeOrString[] | undefined,\n predicate: (type: FFITypeOrString | undefined) => boolean,\n): number[] {\n const indices: number[] = []\n\n for (let index = 0; index < (types?.length ?? 0); index++) {\n if (predicate(types?.[index])) {\n indices.push(index)\n }\n }\n\n return indices\n}\n\nfunction isPointerType(type: FFITypeOrString | undefined): boolean {\n return type === \"ptr\" || type === \"pointer\" || type === \"function\" || type === \"callback\"\n}\n\nfunction isBoolType(type: FFITypeOrString | undefined): boolean {\n return type === \"bool\"\n}\n\nfunction isBigIntType(type: FFITypeOrString | undefined): boolean {\n return type === \"int64_t\" || type === \"i64\" || type === \"uint64_t\" || type === \"u64\" || type === \"usize\"\n}\n\nfunction pointerArgToKoffiArg(arg: unknown): unknown {\n if (typeof arg === \"number\") {\n return BigInt(arg)\n }\n\n if (typeof arg === \"bigint\") {\n return arg\n }\n\n if ((isArrayBufferView(arg) || isAnyArrayBuffer(arg)) && arg.byteLength === 0) {\n return emptyPtrSentinel\n }\n\n return arg\n}\n\nfunction koffiPointerToPointer(koffi: KoffiModule, pointer: KoffiExternal | bigint | number | null | unknown): Pointer {\n if (pointer === null) {\n return 0 as Pointer\n }\n\n if (typeof pointer === \"object\") {\n return toSafeNumberPointer(koffi.address(pointer as KoffiExternal)) as Pointer\n }\n\n return toSafeNumberPointer(pointer as bigint | number) as Pointer\n}\n\nfunction offsetPointer(pointer: Pointer, offset: number): Pointer {\n return toSafeNumberPointer(BigInt(pointer) + BigInt(offset)) as Pointer\n}\n\nfunction toSafeNumberPointer(pointer: bigint | number): number {\n if (typeof pointer === \"number\") {\n if (pointer < 0) {\n throw new Error(POINTER_NEGATIVE)\n }\n\n if (!Number.isSafeInteger(pointer)) {\n throw new Error(POINTER_UNSAFE)\n }\n\n return pointer\n }\n\n if (pointer < 0n) {\n throw new Error(POINTER_NEGATIVE)\n }\n\n if (pointer > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(POINTER_UNSAFE)\n }\n\n return Number(pointer)\n}\n\nfunction unsupportedNode22FFIType(type: never): never {\n throw new Error(`Unsupported FFIType for Node 22 koffi backend: ${String(type)}`)\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "4F23A8FFF12D7B5A64756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,44 @@
1
+ // @bun
2
+ import {
3
+ createRuntimePlugin
4
+ } from "./index-xwsdfq5x.js";
5
+
6
+ // src/runtime-plugin-support-configure.ts
7
+ var {plugin: registerBunPlugin } = globalThis.Bun;
8
+ var runtimePluginSupportInstalledKey = "__opentuiCoreRuntimePluginSupportInstalled__";
9
+ function normalizeRewriteKey(rewrite) {
10
+ return `${rewrite?.nodeModulesRuntimeSpecifiers ?? true}:${rewrite?.nodeModulesBareSpecifiers ?? false}`;
11
+ }
12
+ function assertCompatibleInstall(install, options) {
13
+ for (const specifier of Object.keys(options.additional ?? {})) {
14
+ if (!install.additionalSpecifiers.has(specifier)) {
15
+ throw new Error(`OpenTUI Core runtime plugin support is already installed without ${specifier}. Call ensureRuntimePluginSupport({ additional }) from @jitl/opentui-core/runtime-plugin-support/configure before importing @jitl/opentui-core/runtime-plugin-support.`);
16
+ }
17
+ }
18
+ if (options.core && options.core !== install.core) {
19
+ throw new Error("OpenTUI Core runtime plugin support is already installed with a different core runtime module.");
20
+ }
21
+ if (options.rewrite && normalizeRewriteKey(options.rewrite) !== install.rewriteKey) {
22
+ throw new Error("OpenTUI Core runtime plugin support is already installed with different rewrite options.");
23
+ }
24
+ }
25
+ function ensureRuntimePluginSupport(options = {}) {
26
+ const state = globalThis;
27
+ const install = state[runtimePluginSupportInstalledKey];
28
+ if (install) {
29
+ assertCompatibleInstall(install, options);
30
+ return false;
31
+ }
32
+ registerBunPlugin(createRuntimePlugin(options));
33
+ state[runtimePluginSupportInstalledKey] = {
34
+ additionalSpecifiers: new Set(Object.keys(options.additional ?? {})),
35
+ core: options.core,
36
+ rewriteKey: normalizeRewriteKey(options.rewrite)
37
+ };
38
+ return true;
39
+ }
40
+
41
+ export { ensureRuntimePluginSupport };
42
+
43
+ //# debugId=09C0597CB92E654F64756E2164756E21
44
+ //# sourceMappingURL=index-axv7cw60.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/runtime-plugin-support-configure.ts"],
4
+ "sourcesContent": [
5
+ "import { plugin as registerBunPlugin } from \"bun\"\nimport { createRuntimePlugin, type CreateRuntimePluginOptions, type RuntimeModuleEntry } from \"./runtime-plugin.js\"\n\nconst runtimePluginSupportInstalledKey = \"__opentuiCoreRuntimePluginSupportInstalled__\"\n\ninterface RuntimePluginSupportInstall {\n additionalSpecifiers: ReadonlySet<string>\n core?: RuntimeModuleEntry\n rewriteKey: string\n}\n\ntype RuntimePluginSupportState = typeof globalThis & {\n [runtimePluginSupportInstalledKey]?: RuntimePluginSupportInstall\n}\n\nfunction normalizeRewriteKey(rewrite: CreateRuntimePluginOptions[\"rewrite\"] | undefined): string {\n return `${rewrite?.nodeModulesRuntimeSpecifiers ?? true}:${rewrite?.nodeModulesBareSpecifiers ?? false}`\n}\n\nfunction assertCompatibleInstall(install: RuntimePluginSupportInstall, options: CreateRuntimePluginOptions): void {\n for (const specifier of Object.keys(options.additional ?? {})) {\n if (!install.additionalSpecifiers.has(specifier)) {\n throw new Error(\n `OpenTUI Core runtime plugin support is already installed without ${specifier}. Call ensureRuntimePluginSupport({ additional }) from @jitl/opentui-core/runtime-plugin-support/configure before importing @jitl/opentui-core/runtime-plugin-support.`,\n )\n }\n }\n\n if (options.core && options.core !== install.core) {\n throw new Error(\"OpenTUI Core runtime plugin support is already installed with a different core runtime module.\")\n }\n\n if (options.rewrite && normalizeRewriteKey(options.rewrite) !== install.rewriteKey) {\n throw new Error(\"OpenTUI Core runtime plugin support is already installed with different rewrite options.\")\n }\n}\n\nexport function ensureRuntimePluginSupport(options: CreateRuntimePluginOptions = {}): boolean {\n const state = globalThis as RuntimePluginSupportState\n const install = state[runtimePluginSupportInstalledKey]\n\n if (install) {\n assertCompatibleInstall(install, options)\n return false\n }\n\n registerBunPlugin(createRuntimePlugin(options))\n\n state[runtimePluginSupportInstalledKey] = {\n additionalSpecifiers: new Set(Object.keys(options.additional ?? {})),\n core: options.core,\n rewriteKey: normalizeRewriteKey(options.rewrite),\n }\n return true\n}\n\nexport { createRuntimePlugin, runtimeModuleIdForSpecifier } from \"./runtime-plugin.js\"\nexport type {\n CreateRuntimePluginOptions,\n RuntimeModuleEntry,\n RuntimeModuleExports,\n RuntimeModuleLoader,\n} from \"./runtime-plugin.js\"\n"
6
+ ],
7
+ "mappings": ";;;;;;AAAA;AAGA,IAAM,mCAAmC;AAYzC,SAAS,mBAAmB,CAAC,SAAoE;AAAA,EAC/F,OAAO,GAAG,SAAS,gCAAgC,QAAQ,SAAS,6BAA6B;AAAA;AAGnG,SAAS,uBAAuB,CAAC,SAAsC,SAA2C;AAAA,EAChH,WAAW,aAAa,OAAO,KAAK,QAAQ,cAAc,CAAC,CAAC,GAAG;AAAA,IAC7D,IAAI,CAAC,QAAQ,qBAAqB,IAAI,SAAS,GAAG;AAAA,MAChD,MAAM,IAAI,MACR,oEAAoE,uKACtE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AAAA,IACjD,MAAM,IAAI,MAAM,gGAAgG;AAAA,EAClH;AAAA,EAEA,IAAI,QAAQ,WAAW,oBAAoB,QAAQ,OAAO,MAAM,QAAQ,YAAY;AAAA,IAClF,MAAM,IAAI,MAAM,0FAA0F;AAAA,EAC5G;AAAA;AAGK,SAAS,0BAA0B,CAAC,UAAsC,CAAC,GAAY;AAAA,EAC5F,MAAM,QAAQ;AAAA,EACd,MAAM,UAAU,MAAM;AAAA,EAEtB,IAAI,SAAS;AAAA,IACX,wBAAwB,SAAS,OAAO;AAAA,IACxC,OAAO;AAAA,EACT;AAAA,EAEA,kBAAkB,oBAAoB,OAAO,CAAC;AAAA,EAE9C,MAAM,oCAAoC;AAAA,IACxC,sBAAsB,IAAI,IAAI,OAAO,KAAK,QAAQ,cAAc,CAAC,CAAC,CAAC;AAAA,IACnE,MAAM,QAAQ;AAAA,IACd,YAAY,oBAAoB,QAAQ,OAAO;AAAA,EACjD;AAAA,EACA,OAAO;AAAA;",
8
+ "debugId": "09C0597CB92E654F64756E2164756E21",
9
+ "names": []
10
+ }