@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,396 @@
1
+ // @bun
2
+ import {
3
+ ptr,
4
+ toArrayBuffer
5
+ } from "./index-5zwezmgj.js";
6
+ import"./index-k18nf2r7.js";
7
+
8
+ // src/platform/node22-bun-ffi-structs.ts
9
+ var pointerSize = process.arch === "x64" || process.arch === "arm64" ? 8 : 4;
10
+ var typeSizes = {
11
+ u8: 1,
12
+ bool_u8: 1,
13
+ bool_u32: 4,
14
+ u16: 2,
15
+ i16: 2,
16
+ u32: 4,
17
+ i32: 4,
18
+ u64: 8,
19
+ f32: 4,
20
+ f64: 8,
21
+ pointer: pointerSize
22
+ };
23
+ var typeAlignments = { ...typeSizes };
24
+ var primitiveKeys = Object.keys(typeSizes);
25
+ var encoder = new TextEncoder;
26
+ var decoder = new TextDecoder;
27
+ function alignOffset(offset, align) {
28
+ return offset + (align - 1) & ~(align - 1);
29
+ }
30
+ function isPrimitiveType(type) {
31
+ return typeof type === "string" && primitiveKeys.includes(type);
32
+ }
33
+ function isEnum(type) {
34
+ return typeof type === "object" && type !== null && type.__type === "enum";
35
+ }
36
+ function isStruct(type) {
37
+ return typeof type === "object" && type !== null && type.__type === "struct";
38
+ }
39
+ function primitivePackers(type) {
40
+ switch (type) {
41
+ case "u8":
42
+ return {
43
+ pack: (view, offset, value) => view.setUint8(offset, value ?? 0),
44
+ unpack: (view, offset) => view.getUint8(offset)
45
+ };
46
+ case "bool_u8":
47
+ return {
48
+ pack: (view, offset, value) => view.setUint8(offset, value ? 1 : 0),
49
+ unpack: (view, offset) => Boolean(view.getUint8(offset))
50
+ };
51
+ case "bool_u32":
52
+ return {
53
+ pack: (view, offset, value) => view.setUint32(offset, value ? 1 : 0, true),
54
+ unpack: (view, offset) => Boolean(view.getUint32(offset, true))
55
+ };
56
+ case "u16":
57
+ return {
58
+ pack: (view, offset, value) => view.setUint16(offset, value ?? 0, true),
59
+ unpack: (view, offset) => view.getUint16(offset, true)
60
+ };
61
+ case "i16":
62
+ return {
63
+ pack: (view, offset, value) => view.setInt16(offset, value ?? 0, true),
64
+ unpack: (view, offset) => view.getInt16(offset, true)
65
+ };
66
+ case "u32":
67
+ return {
68
+ pack: (view, offset, value) => view.setUint32(offset, value ?? 0, true),
69
+ unpack: (view, offset) => view.getUint32(offset, true)
70
+ };
71
+ case "i32":
72
+ return {
73
+ pack: (view, offset, value) => view.setInt32(offset, value ?? 0, true),
74
+ unpack: (view, offset) => view.getInt32(offset, true)
75
+ };
76
+ case "u64":
77
+ return {
78
+ pack: (view, offset, value) => view.setBigUint64(offset, BigInt(value ?? 0), true),
79
+ unpack: (view, offset) => view.getBigUint64(offset, true)
80
+ };
81
+ case "f32":
82
+ return {
83
+ pack: (view, offset, value) => view.setFloat32(offset, value ?? 0, true),
84
+ unpack: (view, offset) => view.getFloat32(offset, true)
85
+ };
86
+ case "f64":
87
+ return {
88
+ pack: (view, offset, value) => view.setFloat64(offset, value ?? 0, true),
89
+ unpack: (view, offset) => view.getFloat64(offset, true)
90
+ };
91
+ case "pointer":
92
+ return {
93
+ pack: (view, offset, value) => {
94
+ if (pointerSize === 8) {
95
+ view.setBigUint64(offset, value == null ? 0n : BigInt(value), true);
96
+ } else {
97
+ view.setUint32(offset, value == null ? 0 : Number(value), true);
98
+ }
99
+ },
100
+ unpack: (view, offset) => {
101
+ const value = pointerSize === 8 ? view.getBigUint64(offset, true) : BigInt(view.getUint32(offset, true));
102
+ return Number(value);
103
+ }
104
+ };
105
+ default:
106
+ throw new Error(`Unsupported primitive type: ${type}`);
107
+ }
108
+ }
109
+ var { pack: packPointer, unpack: unpackPointer } = primitivePackers("pointer");
110
+ function defineEnum(mapping, base = "u32") {
111
+ const reverse = Object.fromEntries(Object.entries(mapping).map(([key, value]) => [value, key]));
112
+ return {
113
+ __type: "enum",
114
+ type: base,
115
+ enum: mapping,
116
+ to(value) {
117
+ if (typeof value === "number") {
118
+ return value;
119
+ }
120
+ if (Object.hasOwn(mapping, value)) {
121
+ return mapping[value];
122
+ }
123
+ throw new TypeError(`Invalid enum value: ${value}`);
124
+ },
125
+ from(value) {
126
+ const key = reverse[Number(value)];
127
+ if (key == null) {
128
+ throw new TypeError(`Invalid enum value: ${String(value)}`);
129
+ }
130
+ return key;
131
+ }
132
+ };
133
+ }
134
+ function objectPtr() {
135
+ return { __type: "objectPointer" };
136
+ }
137
+ function packObjectArray(values) {
138
+ const buffer = new ArrayBuffer(values.length * pointerSize);
139
+ const view = new DataView(buffer);
140
+ for (let i = 0;i < values.length; i++) {
141
+ packPointer(view, i * pointerSize, values[i]?.ptr ?? null);
142
+ }
143
+ return view;
144
+ }
145
+ function allocStruct(structDef, options) {
146
+ const buffer = new ArrayBuffer(structDef.size);
147
+ const view = new DataView(buffer);
148
+ const result = { buffer, view };
149
+ if (!options?.lengths) {
150
+ return result;
151
+ }
152
+ const subBuffers = {};
153
+ for (const [fieldName, length] of Object.entries(options.lengths)) {
154
+ const arrayMeta = structDef.arrayFields.get(fieldName);
155
+ if (!arrayMeta) {
156
+ throw new Error(`Field '${fieldName}' is not an array field with a lengthOf field`);
157
+ }
158
+ const subBuffer = new ArrayBuffer(length * arrayMeta.elementSize);
159
+ subBuffers[fieldName] = subBuffer;
160
+ packPointer(view, arrayMeta.arrayOffset, length > 0 ? ptr(subBuffer) : null);
161
+ arrayMeta.lengthPack(view, arrayMeta.lengthOffset, length);
162
+ }
163
+ result.subBuffers = subBuffers;
164
+ return result;
165
+ }
166
+ function defineStruct(fields, structDefOptions = {}) {
167
+ const layout = [];
168
+ const lengthOfFields = new Map;
169
+ const arrayFields = new Map;
170
+ let offset = 0;
171
+ let maxAlign = 1;
172
+ for (const [name, rawType, options = {}] of fields) {
173
+ if (options.condition && !options.condition()) {
174
+ continue;
175
+ }
176
+ const field = buildField(name, rawType, options);
177
+ offset = alignOffset(offset, field.align);
178
+ field.offset = offset;
179
+ layout.push(field);
180
+ offset += field.size;
181
+ maxAlign = Math.max(maxAlign, field.align);
182
+ if (options.lengthOf) {
183
+ lengthOfFields.set(options.lengthOf, field);
184
+ }
185
+ if (field.arrayElementType) {
186
+ arrayFields.set(name, {
187
+ elementSize: field.elementSize,
188
+ arrayOffset: field.offset,
189
+ lengthOffset: 0,
190
+ lengthPack: primitivePackers("u32").pack
191
+ });
192
+ }
193
+ }
194
+ const totalSize = alignOffset(offset, maxAlign);
195
+ for (const [arrayName, lengthField] of lengthOfFields) {
196
+ const field = layout.find((candidate) => candidate.name === arrayName);
197
+ if (field) {
198
+ field.lengthField = lengthField;
199
+ }
200
+ const arrayMeta = arrayFields.get(arrayName);
201
+ if (arrayMeta) {
202
+ arrayMeta.lengthOffset = lengthField.offset;
203
+ arrayMeta.lengthPack = lengthField.packRaw;
204
+ }
205
+ }
206
+ const structDef = {
207
+ __type: "struct",
208
+ size: totalSize,
209
+ align: maxAlign,
210
+ layoutByName: new Map(layout.map((field) => [field.name, field])),
211
+ arrayFields,
212
+ pack(value, options) {
213
+ const buffer = new ArrayBuffer(totalSize);
214
+ const view = new DataView(buffer);
215
+ const mappedValue = structDefOptions.mapValue ? structDefOptions.mapValue(value) : value;
216
+ const context = { lengths: new Map, subBuffers: [] };
217
+ for (const field of layout) {
218
+ const fieldValue = mappedValue[field.name] ?? field.default;
219
+ field.pack(view, field.offset, fieldValue, mappedValue, options, context);
220
+ }
221
+ if (context.subBuffers.length > 0) {
222
+ Object.defineProperty(buffer, "__opentuiSubBuffers", { value: context.subBuffers });
223
+ }
224
+ return buffer;
225
+ },
226
+ packInto(value, view, baseOffset, options) {
227
+ const mappedValue = structDefOptions.mapValue ? structDefOptions.mapValue(value) : value;
228
+ const context = { lengths: new Map, subBuffers: [] };
229
+ for (const field of layout) {
230
+ const fieldValue = mappedValue[field.name] ?? field.default;
231
+ field.pack(view, baseOffset + field.offset, fieldValue, mappedValue, options, context);
232
+ }
233
+ },
234
+ unpack(buffer) {
235
+ if (buffer.byteLength < totalSize) {
236
+ throw new Error(`Buffer size (${buffer.byteLength}) is smaller than struct size (${totalSize}) for unpacking.`);
237
+ }
238
+ const view = new DataView(buffer);
239
+ const result = structDefOptions.default ? { ...structDefOptions.default } : {};
240
+ for (const field of layout) {
241
+ if (!field.deferredUnpack) {
242
+ result[field.name] = field.unpack(view, field.offset, result);
243
+ }
244
+ }
245
+ for (const field of layout) {
246
+ if (field.deferredUnpack) {
247
+ result[field.name] = field.unpack(view, field.offset, result);
248
+ }
249
+ }
250
+ return structDefOptions.reduceValue ? structDefOptions.reduceValue(result) : result;
251
+ },
252
+ packList(values, options) {
253
+ const buffer = new ArrayBuffer(totalSize * values.length);
254
+ const view = new DataView(buffer);
255
+ const subBuffers = [];
256
+ values.forEach((value, index) => {
257
+ const mappedValue = structDefOptions.mapValue ? structDefOptions.mapValue(value) : value;
258
+ const context = { lengths: new Map, subBuffers };
259
+ for (const field of layout) {
260
+ const fieldValue = mappedValue[field.name] ?? field.default;
261
+ field.pack(view, index * totalSize + field.offset, fieldValue, mappedValue, options, context);
262
+ }
263
+ });
264
+ if (subBuffers.length > 0) {
265
+ Object.defineProperty(buffer, "__opentuiSubBuffers", { value: subBuffers });
266
+ }
267
+ return buffer;
268
+ },
269
+ unpackList(buffer, count) {
270
+ const result = [];
271
+ for (let index = 0;index < count; index++) {
272
+ result.push(structDef.unpack(buffer.slice(index * totalSize, (index + 1) * totalSize)));
273
+ }
274
+ return result;
275
+ }
276
+ };
277
+ return structDef;
278
+ }
279
+ function buildField(name, rawType, options) {
280
+ const field = {
281
+ name,
282
+ type: rawType,
283
+ default: options.default,
284
+ optional: options.optional || options.default !== undefined || options.lengthOf !== undefined,
285
+ deferredUnpack: false
286
+ };
287
+ if (isPrimitiveType(rawType)) {
288
+ const { pack, unpack } = primitivePackers(rawType);
289
+ field.size = typeSizes[rawType];
290
+ field.align = typeAlignments[rawType];
291
+ field.packRaw = pack;
292
+ field.pack = (view, offset, value, input, _packOptions, context) => {
293
+ const lengthValue = options.lengthOf ? context.lengths.get(options.lengthOf) : undefined;
294
+ const packedValue = options.packTransform ? options.packTransform(value) : lengthValue ?? value;
295
+ pack(view, offset, packedValue);
296
+ };
297
+ field.unpack = (view, offset) => {
298
+ const value = unpack(view, offset);
299
+ return options.unpackTransform ? options.unpackTransform(value) : value;
300
+ };
301
+ return field;
302
+ }
303
+ if (rawType === "char*" || rawType === "cstring") {
304
+ field.size = pointerSize;
305
+ field.align = pointerSize;
306
+ field.deferredUnpack = rawType === "char*";
307
+ field.pack = (view, offset, value, _input, _packOptions, context) => {
308
+ if (!value) {
309
+ packPointer(view, offset, null);
310
+ context.lengths.set(name, 0);
311
+ return;
312
+ }
313
+ const buffer = rawType === "cstring" ? encoder.encode(`${value}\x00`).buffer : encoder.encode(value).buffer;
314
+ context.subBuffers.push(buffer);
315
+ context.lengths.set(name, rawType === "cstring" ? buffer.byteLength - 1 : buffer.byteLength);
316
+ packPointer(view, offset, ptr(buffer));
317
+ };
318
+ field.unpack = (view, offset, result) => {
319
+ const pointer = unpackPointer(view, offset);
320
+ if (!pointer) {
321
+ return rawType === "char*" && field.lengthField == null ? 0 : null;
322
+ }
323
+ const length = Number(result[field.lengthField?.name] ?? 0);
324
+ if (rawType === "char*" && length > 0) {
325
+ return decoder.decode(toArrayBuffer(pointer, 0, length));
326
+ }
327
+ return pointer;
328
+ };
329
+ return field;
330
+ }
331
+ if (isEnum(rawType)) {
332
+ const { pack, unpack } = primitivePackers(rawType.type);
333
+ field.size = typeSizes[rawType.type];
334
+ field.align = typeAlignments[rawType.type];
335
+ field.packRaw = pack;
336
+ field.pack = (view, offset, value) => pack(view, offset, rawType.to(value ?? field.default));
337
+ field.unpack = (view, offset) => rawType.from(unpack(view, offset));
338
+ return field;
339
+ }
340
+ if (isStruct(rawType)) {
341
+ field.size = rawType.size;
342
+ field.align = rawType.align;
343
+ field.pack = (view, offset, value, _input, packOptions) => rawType.packInto(value, view, offset, packOptions);
344
+ field.unpack = (view, offset) => rawType.unpack(view.buffer.slice(offset, offset + rawType.size));
345
+ return field;
346
+ }
347
+ if (Array.isArray(rawType) && rawType.length === 1) {
348
+ const elementType = rawType[0];
349
+ field.size = pointerSize;
350
+ field.align = pointerSize;
351
+ field.arrayElementType = elementType;
352
+ field.elementSize = isPrimitiveType(elementType) ? typeSizes[elementType] : elementType.size;
353
+ field.deferredUnpack = true;
354
+ field.pack = (view, offset, value, _input, packOptions, context) => {
355
+ const values = [...value ?? []];
356
+ context.lengths.set(name, values.length);
357
+ if (values.length === 0) {
358
+ packPointer(view, offset, null);
359
+ return;
360
+ }
361
+ const buffer = new ArrayBuffer(values.length * field.elementSize);
362
+ const arrayView = new DataView(buffer);
363
+ const { pack } = isPrimitiveType(elementType) ? primitivePackers(elementType) : { pack: elementType.packInto };
364
+ values.forEach((item, index) => pack(arrayView, index * field.elementSize, item, item, packOptions));
365
+ context.subBuffers.push(buffer);
366
+ packPointer(view, offset, ptr(buffer));
367
+ };
368
+ field.unpack = (view, offset, result) => {
369
+ const pointer = unpackPointer(view, offset);
370
+ const length = Number(result[field.lengthField?.name] ?? 0);
371
+ if (!pointer || length === 0) {
372
+ return [];
373
+ }
374
+ const buffer = toArrayBuffer(pointer, 0, length * field.elementSize);
375
+ const arrayView = new DataView(buffer);
376
+ if (isPrimitiveType(elementType)) {
377
+ const { unpack } = primitivePackers(elementType);
378
+ return Array.from({ length }, (_, index) => unpack(arrayView, index * field.elementSize));
379
+ }
380
+ return Array.from({ length }, (_, index) => elementType.unpack(buffer.slice(index * field.elementSize, (index + 1) * field.elementSize)));
381
+ };
382
+ return field;
383
+ }
384
+ throw new Error(`Unsupported struct field type for ${name}: ${String(rawType)}`);
385
+ }
386
+ export {
387
+ pointerSize,
388
+ packObjectArray,
389
+ objectPtr,
390
+ defineStruct,
391
+ defineEnum,
392
+ allocStruct
393
+ };
394
+
395
+ //# debugId=D7B4DD456E2CCCA064756E2164756E21
396
+ //# sourceMappingURL=node22-bun-ffi-structs-ha8fmzzb.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/platform/node22-bun-ffi-structs.ts"],
4
+ "sourcesContent": [
5
+ "// @ts-nocheck\nimport { ptr, toArrayBuffer } from \"./ffi.js\"\n\nexport const pointerSize = process.arch === \"x64\" || process.arch === \"arm64\" ? 8 : 4\n\nconst typeSizes = {\n u8: 1,\n bool_u8: 1,\n bool_u32: 4,\n u16: 2,\n i16: 2,\n u32: 4,\n i32: 4,\n u64: 8,\n f32: 4,\n f64: 8,\n pointer: pointerSize,\n}\n\nconst typeAlignments = { ...typeSizes }\nconst primitiveKeys = Object.keys(typeSizes)\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\nfunction alignOffset(offset: number, align: number): number {\n return (offset + (align - 1)) & ~(align - 1)\n}\n\nfunction isPrimitiveType(type: unknown): boolean {\n return typeof type === \"string\" && primitiveKeys.includes(type)\n}\n\nfunction isEnum(type: unknown): boolean {\n return typeof type === \"object\" && type !== null && type.__type === \"enum\"\n}\n\nfunction isStruct(type: unknown): boolean {\n return typeof type === \"object\" && type !== null && type.__type === \"struct\"\n}\n\nfunction primitivePackers(type: string) {\n switch (type) {\n case \"u8\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setUint8(offset, value ?? 0),\n unpack: (view: DataView, offset: number) => view.getUint8(offset),\n }\n case \"bool_u8\":\n return {\n pack: (view: DataView, offset: number, value: boolean) => view.setUint8(offset, value ? 1 : 0),\n unpack: (view: DataView, offset: number) => Boolean(view.getUint8(offset)),\n }\n case \"bool_u32\":\n return {\n pack: (view: DataView, offset: number, value: boolean) => view.setUint32(offset, value ? 1 : 0, true),\n unpack: (view: DataView, offset: number) => Boolean(view.getUint32(offset, true)),\n }\n case \"u16\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setUint16(offset, value ?? 0, true),\n unpack: (view: DataView, offset: number) => view.getUint16(offset, true),\n }\n case \"i16\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setInt16(offset, value ?? 0, true),\n unpack: (view: DataView, offset: number) => view.getInt16(offset, true),\n }\n case \"u32\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setUint32(offset, value ?? 0, true),\n unpack: (view: DataView, offset: number) => view.getUint32(offset, true),\n }\n case \"i32\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setInt32(offset, value ?? 0, true),\n unpack: (view: DataView, offset: number) => view.getInt32(offset, true),\n }\n case \"u64\":\n return {\n pack: (view: DataView, offset: number, value: bigint | number) =>\n view.setBigUint64(offset, BigInt(value ?? 0), true),\n unpack: (view: DataView, offset: number) => view.getBigUint64(offset, true),\n }\n case \"f32\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setFloat32(offset, value ?? 0, true),\n unpack: (view: DataView, offset: number) => view.getFloat32(offset, true),\n }\n case \"f64\":\n return {\n pack: (view: DataView, offset: number, value: number) => view.setFloat64(offset, value ?? 0, true),\n unpack: (view: DataView, offset: number) => view.getFloat64(offset, true),\n }\n case \"pointer\":\n return {\n pack: (view: DataView, offset: number, value: bigint | number | null) => {\n if (pointerSize === 8) {\n view.setBigUint64(offset, value == null ? 0n : BigInt(value), true)\n } else {\n view.setUint32(offset, value == null ? 0 : Number(value), true)\n }\n },\n unpack: (view: DataView, offset: number) => {\n const value = pointerSize === 8 ? view.getBigUint64(offset, true) : BigInt(view.getUint32(offset, true))\n return Number(value)\n },\n }\n default:\n throw new Error(`Unsupported primitive type: ${type}`)\n }\n}\n\nconst { pack: packPointer, unpack: unpackPointer } = primitivePackers(\"pointer\")\n\nexport function defineEnum(mapping: Record<string, number>, base = \"u32\") {\n const reverse = Object.fromEntries(Object.entries(mapping).map(([key, value]) => [value, key]))\n\n return {\n __type: \"enum\",\n type: base,\n enum: mapping,\n to(value: string | number) {\n if (typeof value === \"number\") {\n return value\n }\n\n if (Object.hasOwn(mapping, value)) {\n return mapping[value]\n }\n\n throw new TypeError(`Invalid enum value: ${value}`)\n },\n from(value: number | bigint) {\n const key = reverse[Number(value)]\n if (key == null) {\n throw new TypeError(`Invalid enum value: ${String(value)}`)\n }\n return key\n },\n }\n}\n\nexport function objectPtr() {\n return { __type: \"objectPointer\" }\n}\n\nexport function packObjectArray(values: Array<{ ptr?: number | bigint | null } | null>): DataView {\n const buffer = new ArrayBuffer(values.length * pointerSize)\n const view = new DataView(buffer)\n\n for (let i = 0; i < values.length; i++) {\n packPointer(view, i * pointerSize, values[i]?.ptr ?? null)\n }\n\n return view\n}\n\nexport function allocStruct(structDef: any, options?: { lengths?: Record<string, number> }) {\n const buffer = new ArrayBuffer(structDef.size)\n const view = new DataView(buffer)\n const result: { buffer: ArrayBuffer; view: DataView; subBuffers?: Record<string, ArrayBuffer> } = { buffer, view }\n\n if (!options?.lengths) {\n return result\n }\n\n const subBuffers: Record<string, ArrayBuffer> = {}\n for (const [fieldName, length] of Object.entries(options.lengths)) {\n const arrayMeta = structDef.arrayFields.get(fieldName)\n if (!arrayMeta) {\n throw new Error(`Field '${fieldName}' is not an array field with a lengthOf field`)\n }\n\n const subBuffer = new ArrayBuffer(length * arrayMeta.elementSize)\n subBuffers[fieldName] = subBuffer\n packPointer(view, arrayMeta.arrayOffset, length > 0 ? ptr(subBuffer) : null)\n arrayMeta.lengthPack(view, arrayMeta.lengthOffset, length)\n }\n\n result.subBuffers = subBuffers\n return result\n}\n\nexport function defineStruct(fields: any[], structDefOptions: any = {}) {\n const layout: any[] = []\n const lengthOfFields = new Map<string, any>()\n const arrayFields = new Map<string, any>()\n let offset = 0\n let maxAlign = 1\n\n for (const [name, rawType, options = {}] of fields) {\n if (options.condition && !options.condition()) {\n continue\n }\n\n const field = buildField(name, rawType, options)\n offset = alignOffset(offset, field.align)\n field.offset = offset\n layout.push(field)\n offset += field.size\n maxAlign = Math.max(maxAlign, field.align)\n\n if (options.lengthOf) {\n lengthOfFields.set(options.lengthOf, field)\n }\n\n if (field.arrayElementType) {\n arrayFields.set(name, {\n elementSize: field.elementSize,\n arrayOffset: field.offset,\n lengthOffset: 0,\n lengthPack: primitivePackers(\"u32\").pack,\n })\n }\n }\n\n const totalSize = alignOffset(offset, maxAlign)\n\n for (const [arrayName, lengthField] of lengthOfFields) {\n const field = layout.find((candidate) => candidate.name === arrayName)\n if (field) {\n field.lengthField = lengthField\n }\n\n const arrayMeta = arrayFields.get(arrayName)\n if (arrayMeta) {\n arrayMeta.lengthOffset = lengthField.offset\n arrayMeta.lengthPack = lengthField.packRaw\n }\n }\n\n const structDef = {\n __type: \"struct\",\n size: totalSize,\n align: maxAlign,\n layoutByName: new Map(layout.map((field) => [field.name, field])),\n arrayFields,\n pack(value: any, options?: any) {\n const buffer = new ArrayBuffer(totalSize)\n const view = new DataView(buffer)\n const mappedValue = structDefOptions.mapValue ? structDefOptions.mapValue(value) : value\n const context = { lengths: new Map<string, number>(), subBuffers: [] as ArrayBuffer[] }\n\n for (const field of layout) {\n const fieldValue = mappedValue[field.name] ?? field.default\n field.pack(view, field.offset, fieldValue, mappedValue, options, context)\n }\n\n if (context.subBuffers.length > 0) {\n Object.defineProperty(buffer, \"__opentuiSubBuffers\", { value: context.subBuffers })\n }\n\n return buffer\n },\n packInto(value: any, view: DataView, baseOffset: number, options?: any) {\n const mappedValue = structDefOptions.mapValue ? structDefOptions.mapValue(value) : value\n const context = { lengths: new Map<string, number>(), subBuffers: [] as ArrayBuffer[] }\n\n for (const field of layout) {\n const fieldValue = mappedValue[field.name] ?? field.default\n field.pack(view, baseOffset + field.offset, fieldValue, mappedValue, options, context)\n }\n },\n unpack(buffer: ArrayBuffer) {\n if (buffer.byteLength < totalSize) {\n throw new Error(`Buffer size (${buffer.byteLength}) is smaller than struct size (${totalSize}) for unpacking.`)\n }\n\n const view = new DataView(buffer)\n const result: Record<string, unknown> = structDefOptions.default ? { ...structDefOptions.default } : {}\n\n for (const field of layout) {\n if (!field.deferredUnpack) {\n result[field.name] = field.unpack(view, field.offset, result)\n }\n }\n\n for (const field of layout) {\n if (field.deferredUnpack) {\n result[field.name] = field.unpack(view, field.offset, result)\n }\n }\n\n return structDefOptions.reduceValue ? structDefOptions.reduceValue(result) : result\n },\n packList(values: any[], options?: any) {\n const buffer = new ArrayBuffer(totalSize * values.length)\n const view = new DataView(buffer)\n const subBuffers: ArrayBuffer[] = []\n\n values.forEach((value, index) => {\n const mappedValue = structDefOptions.mapValue ? structDefOptions.mapValue(value) : value\n const context = { lengths: new Map<string, number>(), subBuffers }\n for (const field of layout) {\n const fieldValue = mappedValue[field.name] ?? field.default\n field.pack(view, index * totalSize + field.offset, fieldValue, mappedValue, options, context)\n }\n })\n\n if (subBuffers.length > 0) {\n Object.defineProperty(buffer, \"__opentuiSubBuffers\", { value: subBuffers })\n }\n\n return buffer\n },\n unpackList(buffer: ArrayBuffer, count: number) {\n const result = []\n for (let index = 0; index < count; index++) {\n result.push(structDef.unpack(buffer.slice(index * totalSize, (index + 1) * totalSize)))\n }\n return result\n },\n }\n\n return structDef\n}\n\nfunction buildField(name: string, rawType: any, options: any) {\n const field: any = {\n name,\n type: rawType,\n default: options.default,\n optional: options.optional || options.default !== undefined || options.lengthOf !== undefined,\n deferredUnpack: false,\n }\n\n if (isPrimitiveType(rawType)) {\n const { pack, unpack } = primitivePackers(rawType)\n field.size = typeSizes[rawType]\n field.align = typeAlignments[rawType]\n field.packRaw = pack\n field.pack = (view: DataView, offset: number, value: unknown, input: any, _packOptions: any, context: any) => {\n const lengthValue = options.lengthOf ? context.lengths.get(options.lengthOf) : undefined\n const packedValue = options.packTransform ? options.packTransform(value) : (lengthValue ?? value)\n pack(view, offset, packedValue)\n }\n field.unpack = (view: DataView, offset: number) => {\n const value = unpack(view, offset)\n return options.unpackTransform ? options.unpackTransform(value) : value\n }\n return field\n }\n\n if (rawType === \"char*\" || rawType === \"cstring\") {\n field.size = pointerSize\n field.align = pointerSize\n field.deferredUnpack = rawType === \"char*\"\n field.pack = (\n view: DataView,\n offset: number,\n value: string | null | undefined,\n _input: any,\n _packOptions: any,\n context: any,\n ) => {\n if (!value) {\n packPointer(view, offset, null)\n context.lengths.set(name, 0)\n return\n }\n\n const buffer = rawType === \"cstring\" ? encoder.encode(`${value}\\0`).buffer : encoder.encode(value).buffer\n context.subBuffers.push(buffer)\n context.lengths.set(name, rawType === \"cstring\" ? buffer.byteLength - 1 : buffer.byteLength)\n packPointer(view, offset, ptr(buffer))\n }\n field.unpack = (view: DataView, offset: number, result: Record<string, unknown>) => {\n const pointer = unpackPointer(view, offset)\n if (!pointer) {\n return rawType === \"char*\" && field.lengthField == null ? 0 : null\n }\n\n const length = Number(result[field.lengthField?.name] ?? 0)\n if (rawType === \"char*\" && length > 0) {\n return decoder.decode(toArrayBuffer(pointer, 0, length))\n }\n\n return pointer\n }\n return field\n }\n\n if (isEnum(rawType)) {\n const { pack, unpack } = primitivePackers(rawType.type)\n field.size = typeSizes[rawType.type]\n field.align = typeAlignments[rawType.type]\n field.packRaw = pack\n field.pack = (view: DataView, offset: number, value: unknown) =>\n pack(view, offset, rawType.to(value ?? field.default))\n field.unpack = (view: DataView, offset: number) => rawType.from(unpack(view, offset))\n return field\n }\n\n if (isStruct(rawType)) {\n field.size = rawType.size\n field.align = rawType.align\n field.pack = (view: DataView, offset: number, value: unknown, _input: any, packOptions: any) =>\n rawType.packInto(value, view, offset, packOptions)\n field.unpack = (view: DataView, offset: number) => rawType.unpack(view.buffer.slice(offset, offset + rawType.size))\n return field\n }\n\n if (Array.isArray(rawType) && rawType.length === 1) {\n const elementType = rawType[0]\n field.size = pointerSize\n field.align = pointerSize\n field.arrayElementType = elementType\n field.elementSize = isPrimitiveType(elementType) ? typeSizes[elementType] : elementType.size\n field.deferredUnpack = true\n field.pack = (\n view: DataView,\n offset: number,\n value: Iterable<unknown> | null | undefined,\n _input: any,\n packOptions: any,\n context: any,\n ) => {\n const values = [...(value ?? [])]\n context.lengths.set(name, values.length)\n\n if (values.length === 0) {\n packPointer(view, offset, null)\n return\n }\n\n const buffer = new ArrayBuffer(values.length * field.elementSize)\n const arrayView = new DataView(buffer)\n const { pack } = isPrimitiveType(elementType) ? primitivePackers(elementType) : { pack: elementType.packInto }\n values.forEach((item, index) => pack(arrayView, index * field.elementSize, item, item, packOptions))\n context.subBuffers.push(buffer)\n packPointer(view, offset, ptr(buffer))\n }\n field.unpack = (view: DataView, offset: number, result: Record<string, unknown>) => {\n const pointer = unpackPointer(view, offset)\n const length = Number(result[field.lengthField?.name] ?? 0)\n if (!pointer || length === 0) {\n return []\n }\n\n const buffer = toArrayBuffer(pointer, 0, length * field.elementSize)\n const arrayView = new DataView(buffer)\n if (isPrimitiveType(elementType)) {\n const { unpack } = primitivePackers(elementType)\n return Array.from({ length }, (_, index) => unpack(arrayView, index * field.elementSize))\n }\n\n return Array.from({ length }, (_, index) =>\n elementType.unpack(buffer.slice(index * field.elementSize, (index + 1) * field.elementSize)),\n )\n }\n return field\n }\n\n throw new Error(`Unsupported struct field type for ${name}: ${String(rawType)}`)\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "D7B4DD456E2CCCA064756E2164756E21",
9
+ "names": []
10
+ }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "type": "module",
7
- "version": "0.1.97",
7
+ "version": "0.2.15",
8
8
  "description": "OpenTUI is a TypeScript library on a native Zig core for building terminal user interfaces (TUIs)",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -18,11 +18,6 @@
18
18
  "require": "./index.js",
19
19
  "types": "./index.d.ts"
20
20
  },
21
- "./3d": {
22
- "import": "./3d.js",
23
- "require": "./3d.js",
24
- "types": "./3d.d.ts"
25
- },
26
21
  "./testing": {
27
22
  "import": "./testing.js",
28
23
  "require": "./testing.js",
@@ -38,6 +33,16 @@
38
33
  "require": "./runtime-plugin-support.js",
39
34
  "types": "./runtime-plugin-support.d.ts"
40
35
  },
36
+ "./runtime-plugin-support/configure": {
37
+ "import": "./runtime-plugin-support-configure.js",
38
+ "require": "./runtime-plugin-support-configure.js",
39
+ "types": "./runtime-plugin-support-configure.d.ts"
40
+ },
41
+ "./tree-sitter/update-assets": {
42
+ "import": "./lib/tree-sitter/update-assets.js",
43
+ "require": "./lib/tree-sitter/update-assets.js",
44
+ "types": "./lib/tree-sitter/update-assets.d.ts"
45
+ },
41
46
  "./parser.worker": {
42
47
  "import": "./lib/tree-sitter/parser.worker.js",
43
48
  "require": "./lib/tree-sitter/parser.worker.js",
@@ -45,18 +50,18 @@
45
50
  }
46
51
  },
47
52
  "dependencies": {
48
- "bun-ffi-structs": "0.1.2",
49
- "diff": "8.0.2",
50
- "jimp": "1.6.0",
53
+ "bun-ffi-structs": "0.2.2",
54
+ "diff": "9.0.0",
51
55
  "marked": "17.0.1",
52
- "string-width": "8.2.0",
53
- "strip-ansi": "7.2.0",
56
+ "string-width": "7.2.0",
57
+ "strip-ansi": "7.1.2",
54
58
  "yoga-layout": "3.2.1"
55
59
  },
56
60
  "devDependencies": {
61
+ "@jitl/opentui-keymap": "workspace:*",
57
62
  "@types/bun": "latest",
58
63
  "@types/node": "^24.0.0",
59
- "@types/three": "0.177.0",
64
+ "commander": "^13.1.0",
60
65
  "typescript": "^5",
61
66
  "web-tree-sitter": "0.25.10"
62
67
  },
@@ -64,17 +69,13 @@
64
69
  "web-tree-sitter": "0.25.10"
65
70
  },
66
71
  "optionalDependencies": {
67
- "@dimforge/rapier2d-simd-compat": "^0.17.3",
68
- "@jitl/opentui-core-darwin-arm64": "0.1.97",
69
- "@jitl/opentui-core-darwin-x64": "0.1.97",
70
- "@jitl/opentui-core-linux-arm64": "0.1.97",
71
- "@jitl/opentui-core-linux-x64": "0.1.97",
72
- "@jitl/opentui-core-win32-arm64": "0.1.97",
73
- "@jitl/opentui-core-win32-x64": "0.1.97",
74
- "bun-webgpu": "0.1.5",
72
+ "@jitl/opentui-core-darwin-x64": "0.2.15",
73
+ "@jitl/opentui-core-darwin-arm64": "0.2.15",
74
+ "@jitl/opentui-core-linux-x64": "0.2.15",
75
+ "@jitl/opentui-core-linux-arm64": "0.2.15",
76
+ "@jitl/opentui-core-win32-x64": "0.2.15",
77
+ "@jitl/opentui-core-win32-arm64": "0.2.15",
75
78
  "koffi": "2.15.6",
76
- "planck": "^1.4.2",
77
- "three": "0.177.0",
78
79
  "unsafe-pointer": "0.2.0"
79
80
  }
80
81
  }