@jitl/opentui-core 0.1.97-next.c8a3f05

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 (180) hide show
  1. package/3d/SpriteResourceManager.d.ts +74 -0
  2. package/3d/SpriteUtils.d.ts +13 -0
  3. package/3d/TextureUtils.d.ts +24 -0
  4. package/3d/ThreeRenderable.d.ts +40 -0
  5. package/3d/WGPURenderer.d.ts +61 -0
  6. package/3d/animation/ExplodingSpriteEffect.d.ts +71 -0
  7. package/3d/animation/PhysicsExplodingSpriteEffect.d.ts +76 -0
  8. package/3d/animation/SpriteAnimator.d.ts +124 -0
  9. package/3d/animation/SpriteParticleGenerator.d.ts +62 -0
  10. package/3d/canvas.d.ts +44 -0
  11. package/3d/index.d.ts +12 -0
  12. package/3d/physics/PlanckPhysicsAdapter.d.ts +19 -0
  13. package/3d/physics/RapierPhysicsAdapter.d.ts +19 -0
  14. package/3d/physics/physics-interface.d.ts +27 -0
  15. package/3d.d.ts +2 -0
  16. package/3d.js +33843 -0
  17. package/3d.js.map +155 -0
  18. package/LICENSE +21 -0
  19. package/NativeSpanFeed.d.ts +41 -0
  20. package/README.md +65 -0
  21. package/Renderable.d.ts +334 -0
  22. package/Worker-vajwjk0s.js +94 -0
  23. package/Worker-vajwjk0s.js.map +10 -0
  24. package/animation/Timeline.d.ts +126 -0
  25. package/ansi.d.ts +13 -0
  26. package/assets/javascript/highlights.scm +205 -0
  27. package/assets/javascript/tree-sitter-javascript.wasm +0 -0
  28. package/assets/markdown/highlights.scm +150 -0
  29. package/assets/markdown/injections.scm +27 -0
  30. package/assets/markdown/tree-sitter-markdown.wasm +0 -0
  31. package/assets/markdown_inline/highlights.scm +115 -0
  32. package/assets/markdown_inline/tree-sitter-markdown_inline.wasm +0 -0
  33. package/assets/typescript/highlights.scm +604 -0
  34. package/assets/typescript/tree-sitter-typescript.wasm +0 -0
  35. package/assets/zig/highlights.scm +284 -0
  36. package/assets/zig/tree-sitter-zig.wasm +0 -0
  37. package/buffer.d.ts +111 -0
  38. package/compat/FFIType.d.ts +304 -0
  39. package/compat/Worker.d.ts +1 -0
  40. package/compat/bun-ffi-structs.d.ts +2 -0
  41. package/compat/ffi.d.ts +86 -0
  42. package/compat/nodejs/Worker.d.ts +16 -0
  43. package/compat/nodejs/bun-ffi-structs/index.d.ts +46 -0
  44. package/compat/nodejs/ffi.d.ts +21 -0
  45. package/compat/nodejs/registerBun.d.ts +1 -0
  46. package/compat/nodejs/registerResolveJs.d.ts +1 -0
  47. package/compat/nodejs/runtime.d.ts +7 -0
  48. package/compat/nodejs/test.d.ts +4 -0
  49. package/compat/nodejs/trampoline.worker.d.ts +1 -0
  50. package/compat/runtime.d.ts +8 -0
  51. package/compat/test.d.ts +1 -0
  52. package/compat/testHelpers.d.ts +18 -0
  53. package/console.d.ts +144 -0
  54. package/edit-buffer.d.ts +98 -0
  55. package/editor-view.d.ts +73 -0
  56. package/ffi-x3zvcksd.js +25 -0
  57. package/ffi-x3zvcksd.js.map +9 -0
  58. package/index-5yqvbmcz.js +220 -0
  59. package/index-5yqvbmcz.js.map +10 -0
  60. package/index-bnfz2g63.js +654 -0
  61. package/index-bnfz2g63.js.map +10 -0
  62. package/index-cbvybypy.js +43 -0
  63. package/index-cbvybypy.js.map +10 -0
  64. package/index-hjna9d1h.js +12074 -0
  65. package/index-hjna9d1h.js.map +42 -0
  66. package/index-jjp8mmgk.js +19991 -0
  67. package/index-jjp8mmgk.js.map +70 -0
  68. package/index-re3ntm60.js +51 -0
  69. package/index-re3ntm60.js.map +9 -0
  70. package/index-t16hn6zn.js +411 -0
  71. package/index-t16hn6zn.js.map +10 -0
  72. package/index-tkk6cmr2.js +650 -0
  73. package/index-tkk6cmr2.js.map +10 -0
  74. package/index.d.ts +23 -0
  75. package/index.js +480 -0
  76. package/index.js.map +9 -0
  77. package/lib/KeyHandler.d.ts +61 -0
  78. package/lib/RGBA.d.ts +26 -0
  79. package/lib/ascii.font.d.ts +508 -0
  80. package/lib/border.d.ts +51 -0
  81. package/lib/bunfs.d.ts +7 -0
  82. package/lib/clipboard.d.ts +17 -0
  83. package/lib/clock.d.ts +15 -0
  84. package/lib/data-paths.d.ts +26 -0
  85. package/lib/debounce.d.ts +42 -0
  86. package/lib/detect-links.d.ts +6 -0
  87. package/lib/env.d.ts +42 -0
  88. package/lib/extmarks-history.d.ts +17 -0
  89. package/lib/extmarks.d.ts +89 -0
  90. package/lib/hast-styled-text.d.ts +17 -0
  91. package/lib/index.d.ts +21 -0
  92. package/lib/keymapping.d.ts +25 -0
  93. package/lib/objects-in-viewport.d.ts +24 -0
  94. package/lib/output.capture.d.ts +24 -0
  95. package/lib/parse.keypress-kitty.d.ts +2 -0
  96. package/lib/parse.keypress.d.ts +26 -0
  97. package/lib/parse.mouse.d.ts +30 -0
  98. package/lib/paste.d.ts +7 -0
  99. package/lib/queue.d.ts +15 -0
  100. package/lib/renderable.validations.d.ts +12 -0
  101. package/lib/scroll-acceleration.d.ts +43 -0
  102. package/lib/selection.d.ts +64 -0
  103. package/lib/singleton.d.ts +7 -0
  104. package/lib/stdin-parser.d.ts +87 -0
  105. package/lib/styled-text.d.ts +63 -0
  106. package/lib/terminal-capability-detection.d.ts +30 -0
  107. package/lib/terminal-palette.d.ts +50 -0
  108. package/lib/tree-sitter/assets/update.d.ts +11 -0
  109. package/lib/tree-sitter/client.d.ts +47 -0
  110. package/lib/tree-sitter/default-parsers.d.ts +2 -0
  111. package/lib/tree-sitter/download-utils.d.ts +21 -0
  112. package/lib/tree-sitter/index.d.ts +8 -0
  113. package/lib/tree-sitter/parser.worker.d.ts +1 -0
  114. package/lib/tree-sitter/parsers-config.d.ts +53 -0
  115. package/lib/tree-sitter/resolve-ft.d.ts +5 -0
  116. package/lib/tree-sitter/types.d.ts +82 -0
  117. package/lib/tree-sitter-styled-text.d.ts +14 -0
  118. package/lib/validate-dir-name.d.ts +1 -0
  119. package/lib/yoga.options.d.ts +32 -0
  120. package/package.json +80 -0
  121. package/parser.worker.js +888 -0
  122. package/parser.worker.js.map +12 -0
  123. package/plugins/core-slot.d.ts +72 -0
  124. package/plugins/registry.d.ts +42 -0
  125. package/plugins/types.d.ts +34 -0
  126. package/post/effects.d.ts +147 -0
  127. package/post/filters.d.ts +65 -0
  128. package/post/matrices.d.ts +20 -0
  129. package/renderables/ASCIIFont.d.ts +52 -0
  130. package/renderables/Box.d.ts +81 -0
  131. package/renderables/Code.d.ts +78 -0
  132. package/renderables/Diff.d.ts +142 -0
  133. package/renderables/EditBufferRenderable.d.ts +237 -0
  134. package/renderables/FrameBuffer.d.ts +16 -0
  135. package/renderables/Input.d.ts +67 -0
  136. package/renderables/LineNumberRenderable.d.ts +78 -0
  137. package/renderables/Markdown.d.ts +181 -0
  138. package/renderables/ScrollBar.d.ts +77 -0
  139. package/renderables/ScrollBox.d.ts +124 -0
  140. package/renderables/Select.d.ts +115 -0
  141. package/renderables/Slider.d.ts +47 -0
  142. package/renderables/TabSelect.d.ts +96 -0
  143. package/renderables/Text.d.ts +36 -0
  144. package/renderables/TextBufferRenderable.d.ts +105 -0
  145. package/renderables/TextNode.d.ts +91 -0
  146. package/renderables/TextTable.d.ts +140 -0
  147. package/renderables/Textarea.d.ts +63 -0
  148. package/renderables/TimeToFirstDraw.d.ts +24 -0
  149. package/renderables/__tests__/renderable-test-utils.d.ts +12 -0
  150. package/renderables/composition/VRenderable.d.ts +16 -0
  151. package/renderables/composition/constructs.d.ts +35 -0
  152. package/renderables/composition/vnode.d.ts +46 -0
  153. package/renderables/index.d.ts +23 -0
  154. package/renderables/markdown-parser.d.ts +10 -0
  155. package/renderer.d.ts +419 -0
  156. package/runtime-hdpkc6qf.js +220 -0
  157. package/runtime-hdpkc6qf.js.map +17 -0
  158. package/runtime-plugin-support.d.ts +3 -0
  159. package/runtime-plugin-support.js +31 -0
  160. package/runtime-plugin-support.js.map +10 -0
  161. package/runtime-plugin.d.ts +19 -0
  162. package/runtime-plugin.js +18 -0
  163. package/runtime-plugin.js.map +9 -0
  164. package/syntax-style.d.ts +54 -0
  165. package/testing/manual-clock.d.ts +17 -0
  166. package/testing/mock-keys.d.ts +81 -0
  167. package/testing/mock-mouse.d.ts +38 -0
  168. package/testing/mock-tree-sitter-client.d.ts +23 -0
  169. package/testing/spy.d.ts +7 -0
  170. package/testing/test-recorder.d.ts +61 -0
  171. package/testing/test-renderer.d.ts +23 -0
  172. package/testing.d.ts +6 -0
  173. package/testing.js +699 -0
  174. package/testing.js.map +15 -0
  175. package/text-buffer-view.d.ts +42 -0
  176. package/text-buffer.d.ts +67 -0
  177. package/types.d.ts +139 -0
  178. package/utils.d.ts +14 -0
  179. package/zig-structs.d.ts +155 -0
  180. package/zig.d.ts +353 -0
@@ -0,0 +1,650 @@
1
+ // @bun
2
+ import"./index-re3ntm60.js";
3
+
4
+ // ../../node_modules/.bun/bun-ffi-structs@0.1.2+1fb4c65d43e298b9/node_modules/bun-ffi-structs/index.js
5
+ import { ptr, toArrayBuffer } from "bun:ffi";
6
+ function fatalError(...args) {
7
+ const message = args.join(" ");
8
+ console.error("FATAL ERROR:", message);
9
+ throw new Error(message);
10
+ }
11
+ var pointerSize = process.arch === "x64" || process.arch === "arm64" ? 8 : 4;
12
+ var typeSizes = {
13
+ u8: 1,
14
+ bool_u8: 1,
15
+ bool_u32: 4,
16
+ u16: 2,
17
+ i16: 2,
18
+ u32: 4,
19
+ u64: 8,
20
+ f32: 4,
21
+ f64: 8,
22
+ pointer: pointerSize,
23
+ i32: 4
24
+ };
25
+ var primitiveKeys = Object.keys(typeSizes);
26
+ function isPrimitiveType(type) {
27
+ return typeof type === "string" && primitiveKeys.includes(type);
28
+ }
29
+ var typeAlignments = { ...typeSizes };
30
+ var typeGetters = {
31
+ u8: (view, offset) => view.getUint8(offset),
32
+ bool_u8: (view, offset) => Boolean(view.getUint8(offset)),
33
+ bool_u32: (view, offset) => Boolean(view.getUint32(offset, true)),
34
+ u16: (view, offset) => view.getUint16(offset, true),
35
+ i16: (view, offset) => view.getInt16(offset, true),
36
+ u32: (view, offset) => view.getUint32(offset, true),
37
+ u64: (view, offset) => view.getBigUint64(offset, true),
38
+ f32: (view, offset) => view.getFloat32(offset, true),
39
+ f64: (view, offset) => view.getFloat64(offset, true),
40
+ i32: (view, offset) => view.getInt32(offset, true),
41
+ pointer: (view, offset) => pointerSize === 8 ? view.getBigUint64(offset, true) : BigInt(view.getUint32(offset, true))
42
+ };
43
+ function objectPtr() {
44
+ return {
45
+ __type: "objectPointer"
46
+ };
47
+ }
48
+ function isObjectPointerDef(type) {
49
+ return typeof type === "object" && type !== null && type.__type === "objectPointer";
50
+ }
51
+ function allocStruct(structDef, options) {
52
+ const buffer = new ArrayBuffer(structDef.size);
53
+ const view = new DataView(buffer);
54
+ const result = { buffer, view };
55
+ const { pack: pointerPacker } = primitivePackers("pointer");
56
+ if (options?.lengths) {
57
+ const subBuffers = {};
58
+ for (const [arrayFieldName, length] of Object.entries(options.lengths)) {
59
+ const arrayMeta = structDef.arrayFields.get(arrayFieldName);
60
+ if (!arrayMeta) {
61
+ throw new Error(`Field '${arrayFieldName}' is not an array field with a lengthOf field`);
62
+ }
63
+ const subBuffer = new ArrayBuffer(length * arrayMeta.elementSize);
64
+ subBuffers[arrayFieldName] = subBuffer;
65
+ const pointer = length > 0 ? ptr(subBuffer) : null;
66
+ pointerPacker(view, arrayMeta.arrayOffset, pointer);
67
+ arrayMeta.lengthPack(view, arrayMeta.lengthOffset, length);
68
+ }
69
+ if (Object.keys(subBuffers).length > 0) {
70
+ result.subBuffers = subBuffers;
71
+ }
72
+ }
73
+ return result;
74
+ }
75
+ function alignOffset(offset, align) {
76
+ return offset + (align - 1) & ~(align - 1);
77
+ }
78
+ function enumTypeError(value) {
79
+ throw new TypeError(`Invalid enum value: ${value}`);
80
+ }
81
+ function defineEnum(mapping, base = "u32") {
82
+ const reverse = Object.fromEntries(Object.entries(mapping).map(([k, v]) => [v, k]));
83
+ return {
84
+ __type: "enum",
85
+ type: base,
86
+ to(value) {
87
+ return typeof value === "number" ? value : mapping[value] ?? enumTypeError(String(value));
88
+ },
89
+ from(value) {
90
+ return reverse[value] ?? enumTypeError(String(value));
91
+ },
92
+ enum: mapping
93
+ };
94
+ }
95
+ function isEnum(type) {
96
+ return typeof type === "object" && type.__type === "enum";
97
+ }
98
+ function isStruct(type) {
99
+ return typeof type === "object" && type.__type === "struct";
100
+ }
101
+ function primitivePackers(type) {
102
+ let pack;
103
+ let unpack;
104
+ switch (type) {
105
+ case "u8":
106
+ pack = (view, off, val) => view.setUint8(off, val);
107
+ unpack = (view, off) => view.getUint8(off);
108
+ break;
109
+ case "bool_u8":
110
+ pack = (view, off, val) => view.setUint8(off, val ? 1 : 0);
111
+ unpack = (view, off) => Boolean(view.getUint8(off));
112
+ break;
113
+ case "bool_u32":
114
+ pack = (view, off, val) => view.setUint32(off, val ? 1 : 0, true);
115
+ unpack = (view, off) => Boolean(view.getUint32(off, true));
116
+ break;
117
+ case "u16":
118
+ pack = (view, off, val) => view.setUint16(off, val, true);
119
+ unpack = (view, off) => view.getUint16(off, true);
120
+ break;
121
+ case "i16":
122
+ pack = (view, off, val) => view.setInt16(off, val, true);
123
+ unpack = (view, off) => view.getInt16(off, true);
124
+ break;
125
+ case "u32":
126
+ pack = (view, off, val) => view.setUint32(off, val, true);
127
+ unpack = (view, off) => view.getUint32(off, true);
128
+ break;
129
+ case "i32":
130
+ pack = (view, off, val) => view.setInt32(off, val, true);
131
+ unpack = (view, off) => view.getInt32(off, true);
132
+ break;
133
+ case "u64":
134
+ pack = (view, off, val) => view.setBigUint64(off, BigInt(val), true);
135
+ unpack = (view, off) => view.getBigUint64(off, true);
136
+ break;
137
+ case "f32":
138
+ pack = (view, off, val) => view.setFloat32(off, val, true);
139
+ unpack = (view, off) => view.getFloat32(off, true);
140
+ break;
141
+ case "f64":
142
+ pack = (view, off, val) => view.setFloat64(off, val, true);
143
+ unpack = (view, off) => view.getFloat64(off, true);
144
+ break;
145
+ case "pointer":
146
+ pack = (view, off, val) => {
147
+ pointerSize === 8 ? view.setBigUint64(off, val ? BigInt(val) : 0n, true) : view.setUint32(off, val ? Number(val) : 0, true);
148
+ };
149
+ unpack = (view, off) => {
150
+ const bint = pointerSize === 8 ? view.getBigUint64(off, true) : BigInt(view.getUint32(off, true));
151
+ return Number(bint);
152
+ };
153
+ break;
154
+ default:
155
+ fatalError(`Unsupported primitive type: ${type}`);
156
+ }
157
+ return { pack, unpack };
158
+ }
159
+ var { pack: pointerPacker, unpack: pointerUnpacker } = primitivePackers("pointer");
160
+ function packObjectArray(val) {
161
+ const buffer = new ArrayBuffer(val.length * pointerSize);
162
+ const bufferView = new DataView(buffer);
163
+ for (let i = 0;i < val.length; i++) {
164
+ const instance = val[i];
165
+ const ptrValue = instance?.ptr ?? null;
166
+ pointerPacker(bufferView, i * pointerSize, ptrValue);
167
+ }
168
+ return bufferView;
169
+ }
170
+ var encoder = new TextEncoder;
171
+ var decoder = new TextDecoder;
172
+ function defineStruct(fields, structDefOptions) {
173
+ let offset = 0;
174
+ let maxAlign = 1;
175
+ const layout = [];
176
+ const lengthOfFields = {};
177
+ const lengthOfRequested = [];
178
+ const arrayFieldsMetadata = {};
179
+ for (const [name, typeOrStruct, options = {}] of fields) {
180
+ if (options.condition && !options.condition()) {
181
+ continue;
182
+ }
183
+ let size = 0, align = 0;
184
+ let pack;
185
+ let unpack;
186
+ let needsLengthOf = false;
187
+ let lengthOfDef = null;
188
+ if (isPrimitiveType(typeOrStruct)) {
189
+ size = typeSizes[typeOrStruct];
190
+ align = typeAlignments[typeOrStruct];
191
+ ({ pack, unpack } = primitivePackers(typeOrStruct));
192
+ } else if (typeof typeOrStruct === "string" && typeOrStruct === "cstring") {
193
+ size = pointerSize;
194
+ align = pointerSize;
195
+ pack = (view, off, val) => {
196
+ const bufPtr = val ? ptr(encoder.encode(val + "\x00")) : null;
197
+ pointerPacker(view, off, bufPtr);
198
+ };
199
+ unpack = (view, off) => {
200
+ const ptrVal = pointerUnpacker(view, off);
201
+ return ptrVal;
202
+ };
203
+ } else if (typeof typeOrStruct === "string" && typeOrStruct === "char*") {
204
+ size = pointerSize;
205
+ align = pointerSize;
206
+ pack = (view, off, val) => {
207
+ const bufPtr = val ? ptr(encoder.encode(val)) : null;
208
+ pointerPacker(view, off, bufPtr);
209
+ };
210
+ unpack = (view, off) => {
211
+ const ptrVal = pointerUnpacker(view, off);
212
+ return ptrVal;
213
+ };
214
+ needsLengthOf = true;
215
+ } else if (isEnum(typeOrStruct)) {
216
+ const base = typeOrStruct.type;
217
+ size = typeSizes[base];
218
+ align = typeAlignments[base];
219
+ const { pack: packEnum } = primitivePackers(base);
220
+ pack = (view, off, val) => {
221
+ const num = typeOrStruct.to(val);
222
+ packEnum(view, off, num);
223
+ };
224
+ unpack = (view, off) => {
225
+ const raw = typeGetters[base](view, off);
226
+ return typeOrStruct.from(raw);
227
+ };
228
+ } else if (isStruct(typeOrStruct)) {
229
+ if (options.asPointer === true) {
230
+ size = pointerSize;
231
+ align = pointerSize;
232
+ pack = (view, off, val, obj, options2) => {
233
+ if (!val) {
234
+ pointerPacker(view, off, null);
235
+ return;
236
+ }
237
+ const nestedBuf = typeOrStruct.pack(val, options2);
238
+ pointerPacker(view, off, ptr(nestedBuf));
239
+ };
240
+ unpack = (view, off) => {
241
+ throw new Error("Not implemented yet");
242
+ };
243
+ } else {
244
+ size = typeOrStruct.size;
245
+ align = typeOrStruct.align;
246
+ pack = (view, off, val, obj, options2) => {
247
+ const nestedBuf = typeOrStruct.pack(val, options2);
248
+ const nestedView = new Uint8Array(nestedBuf);
249
+ const dView = new Uint8Array(view.buffer);
250
+ dView.set(nestedView, off);
251
+ };
252
+ unpack = (view, off) => {
253
+ const slice = view.buffer.slice(off, off + size);
254
+ return typeOrStruct.unpack(slice);
255
+ };
256
+ }
257
+ } else if (isObjectPointerDef(typeOrStruct)) {
258
+ size = pointerSize;
259
+ align = pointerSize;
260
+ pack = (view, off, value) => {
261
+ const ptrValue = value?.ptr ?? null;
262
+ if (ptrValue === undefined) {
263
+ console.warn(`Field '${name}' expected object with '.ptr' property, but got undefined pointer value from:`, value);
264
+ pointerPacker(view, off, null);
265
+ } else {
266
+ pointerPacker(view, off, ptrValue);
267
+ }
268
+ };
269
+ unpack = (view, off) => {
270
+ return pointerUnpacker(view, off);
271
+ };
272
+ } else if (Array.isArray(typeOrStruct) && typeOrStruct.length === 1 && typeOrStruct[0] !== undefined) {
273
+ const [def] = typeOrStruct;
274
+ size = pointerSize;
275
+ align = pointerSize;
276
+ let arrayElementSize;
277
+ if (isEnum(def)) {
278
+ arrayElementSize = typeSizes[def.type];
279
+ pack = (view, off, val, obj) => {
280
+ if (!val || val.length === 0) {
281
+ pointerPacker(view, off, null);
282
+ return;
283
+ }
284
+ const buffer = new ArrayBuffer(val.length * arrayElementSize);
285
+ const bufferView = new DataView(buffer);
286
+ for (let i = 0;i < val.length; i++) {
287
+ const num = def.to(val[i]);
288
+ bufferView.setUint32(i * arrayElementSize, num, true);
289
+ }
290
+ pointerPacker(view, off, ptr(buffer));
291
+ };
292
+ unpack = null;
293
+ needsLengthOf = true;
294
+ lengthOfDef = def;
295
+ } else if (isStruct(def)) {
296
+ arrayElementSize = def.size;
297
+ pack = (view, off, val, obj, options2) => {
298
+ if (!val || val.length === 0) {
299
+ pointerPacker(view, off, null);
300
+ return;
301
+ }
302
+ const buffer = new ArrayBuffer(val.length * arrayElementSize);
303
+ const bufferView = new DataView(buffer);
304
+ for (let i = 0;i < val.length; i++) {
305
+ def.packInto(val[i], bufferView, i * arrayElementSize, options2);
306
+ }
307
+ pointerPacker(view, off, ptr(buffer));
308
+ };
309
+ unpack = (view, off) => {
310
+ throw new Error("Not implemented yet");
311
+ };
312
+ } else if (isPrimitiveType(def)) {
313
+ arrayElementSize = typeSizes[def];
314
+ const { pack: primitivePack } = primitivePackers(def);
315
+ pack = (view, off, val) => {
316
+ if (!val || val.length === 0) {
317
+ pointerPacker(view, off, null);
318
+ return;
319
+ }
320
+ const buffer = new ArrayBuffer(val.length * arrayElementSize);
321
+ const bufferView = new DataView(buffer);
322
+ for (let i = 0;i < val.length; i++) {
323
+ primitivePack(bufferView, i * arrayElementSize, val[i]);
324
+ }
325
+ pointerPacker(view, off, ptr(buffer));
326
+ };
327
+ unpack = null;
328
+ needsLengthOf = true;
329
+ lengthOfDef = def;
330
+ } else if (isObjectPointerDef(def)) {
331
+ arrayElementSize = pointerSize;
332
+ pack = (view, off, val) => {
333
+ if (!val || val.length === 0) {
334
+ pointerPacker(view, off, null);
335
+ return;
336
+ }
337
+ const packedView = packObjectArray(val);
338
+ pointerPacker(view, off, ptr(packedView.buffer));
339
+ };
340
+ unpack = () => {
341
+ throw new Error("not implemented yet");
342
+ };
343
+ } else {
344
+ throw new Error(`Unsupported array element type for ${name}: ${JSON.stringify(def)}`);
345
+ }
346
+ const lengthOfField = Object.values(lengthOfFields).find((f) => f.lengthOf === name);
347
+ if (lengthOfField && isPrimitiveType(lengthOfField.type)) {
348
+ const { pack: lengthPack } = primitivePackers(lengthOfField.type);
349
+ arrayFieldsMetadata[name] = {
350
+ elementSize: arrayElementSize,
351
+ arrayOffset: offset,
352
+ lengthOffset: lengthOfField.offset,
353
+ lengthPack
354
+ };
355
+ }
356
+ } else {
357
+ throw new Error(`Unsupported field type for ${name}: ${JSON.stringify(typeOrStruct)}`);
358
+ }
359
+ offset = alignOffset(offset, align);
360
+ if (options.unpackTransform) {
361
+ const originalUnpack = unpack;
362
+ unpack = (view, off) => options.unpackTransform(originalUnpack(view, off));
363
+ }
364
+ if (options.packTransform) {
365
+ const originalPack = pack;
366
+ pack = (view, off, val, obj, packOptions) => originalPack(view, off, options.packTransform(val), obj, packOptions);
367
+ }
368
+ if (options.optional) {
369
+ const originalPack = pack;
370
+ if (isStruct(typeOrStruct) && !options.asPointer) {
371
+ pack = (view, off, val, obj, packOptions) => {
372
+ if (val || options.mapOptionalInline) {
373
+ originalPack(view, off, val, obj, packOptions);
374
+ }
375
+ };
376
+ } else {
377
+ pack = (view, off, val, obj, packOptions) => originalPack(view, off, val ?? 0, obj, packOptions);
378
+ }
379
+ }
380
+ if (options.lengthOf) {
381
+ const originalPack = pack;
382
+ pack = (view, off, val, obj, packOptions) => {
383
+ const targetValue = obj[options.lengthOf];
384
+ let length = 0;
385
+ if (targetValue) {
386
+ if (typeof targetValue === "string") {
387
+ length = Buffer.byteLength(targetValue);
388
+ } else {
389
+ length = targetValue.length;
390
+ }
391
+ }
392
+ return originalPack(view, off, length, obj, packOptions);
393
+ };
394
+ }
395
+ let validateFunctions;
396
+ if (options.validate) {
397
+ validateFunctions = Array.isArray(options.validate) ? options.validate : [options.validate];
398
+ }
399
+ const layoutField = {
400
+ name,
401
+ offset,
402
+ size,
403
+ align,
404
+ validate: validateFunctions,
405
+ optional: !!options.optional || !!options.lengthOf || options.default !== undefined,
406
+ default: options.default,
407
+ pack,
408
+ unpack,
409
+ type: typeOrStruct,
410
+ lengthOf: options.lengthOf
411
+ };
412
+ layout.push(layoutField);
413
+ if (options.lengthOf) {
414
+ lengthOfFields[options.lengthOf] = layoutField;
415
+ }
416
+ if (needsLengthOf) {
417
+ const def = typeof typeOrStruct === "string" && typeOrStruct === "char*" ? "char*" : lengthOfDef;
418
+ if (!def)
419
+ fatalError(`Internal error: needsLengthOf=true but def is null for ${name}`);
420
+ lengthOfRequested.push({ requester: layoutField, def });
421
+ }
422
+ offset += size;
423
+ maxAlign = Math.max(maxAlign, align);
424
+ }
425
+ for (const { requester, def } of lengthOfRequested) {
426
+ const lengthOfField = lengthOfFields[requester.name];
427
+ if (!lengthOfField) {
428
+ if (def === "char*") {
429
+ continue;
430
+ }
431
+ throw new Error(`lengthOf field not found for array field ${requester.name}`);
432
+ }
433
+ if (def === "char*") {
434
+ requester.unpack = (view, off) => {
435
+ const ptrAddress = pointerUnpacker(view, off);
436
+ const length = lengthOfField.unpack(view, lengthOfField.offset);
437
+ if (ptrAddress === 0) {
438
+ return null;
439
+ }
440
+ const byteLength = typeof length === "bigint" ? Number(length) : length;
441
+ if (byteLength === 0) {
442
+ return "";
443
+ }
444
+ const buffer = toArrayBuffer(ptrAddress, 0, byteLength);
445
+ return decoder.decode(buffer);
446
+ };
447
+ } else if (isPrimitiveType(def)) {
448
+ const elemSize = typeSizes[def];
449
+ const { unpack: primitiveUnpack } = primitivePackers(def);
450
+ requester.unpack = (view, off) => {
451
+ const result = [];
452
+ const length = lengthOfField.unpack(view, lengthOfField.offset);
453
+ const ptrAddress = pointerUnpacker(view, off);
454
+ if (ptrAddress === 0n && length > 0) {
455
+ throw new Error(`Array field ${requester.name} has null pointer but length ${length}.`);
456
+ }
457
+ if (ptrAddress === 0n || length === 0) {
458
+ return [];
459
+ }
460
+ const buffer = toArrayBuffer(ptrAddress, 0, length * elemSize);
461
+ const bufferView = new DataView(buffer);
462
+ for (let i = 0;i < length; i++) {
463
+ result.push(primitiveUnpack(bufferView, i * elemSize));
464
+ }
465
+ return result;
466
+ };
467
+ } else {
468
+ const elemSize = def.type === "u32" ? 4 : 8;
469
+ requester.unpack = (view, off) => {
470
+ const result = [];
471
+ const length = lengthOfField.unpack(view, lengthOfField.offset);
472
+ const ptrAddress = pointerUnpacker(view, off);
473
+ if (ptrAddress === 0n && length > 0) {
474
+ throw new Error(`Array field ${requester.name} has null pointer but length ${length}.`);
475
+ }
476
+ if (ptrAddress === 0n || length === 0) {
477
+ return [];
478
+ }
479
+ const buffer = toArrayBuffer(ptrAddress, 0, length * elemSize);
480
+ const bufferView = new DataView(buffer);
481
+ for (let i = 0;i < length; i++) {
482
+ result.push(def.from(bufferView.getUint32(i * elemSize, true)));
483
+ }
484
+ return result;
485
+ };
486
+ }
487
+ }
488
+ const totalSize = alignOffset(offset, maxAlign);
489
+ const description = layout.map((f) => ({
490
+ name: f.name,
491
+ offset: f.offset,
492
+ size: f.size,
493
+ align: f.align,
494
+ optional: f.optional,
495
+ type: f.type,
496
+ lengthOf: f.lengthOf
497
+ }));
498
+ const layoutByName = new Map(description.map((f) => [f.name, f]));
499
+ const arrayFields = new Map(Object.entries(arrayFieldsMetadata));
500
+ return {
501
+ __type: "struct",
502
+ size: totalSize,
503
+ align: maxAlign,
504
+ hasMapValue: !!structDefOptions?.mapValue,
505
+ layoutByName,
506
+ arrayFields,
507
+ pack(obj, options) {
508
+ const buf = new ArrayBuffer(totalSize);
509
+ const view = new DataView(buf);
510
+ let mappedObj = obj;
511
+ if (structDefOptions?.mapValue) {
512
+ mappedObj = structDefOptions.mapValue(obj);
513
+ }
514
+ for (const field of layout) {
515
+ const value = mappedObj[field.name] ?? field.default;
516
+ if (!field.optional && value === undefined) {
517
+ fatalError(`Packing non-optional field '${field.name}' but value is undefined (and no default provided)`);
518
+ }
519
+ if (field.validate) {
520
+ for (const validateFn of field.validate) {
521
+ validateFn(value, field.name, {
522
+ hints: options?.validationHints,
523
+ input: mappedObj
524
+ });
525
+ }
526
+ }
527
+ field.pack(view, field.offset, value, mappedObj, options);
528
+ }
529
+ return view.buffer;
530
+ },
531
+ packInto(obj, view, offset2, options) {
532
+ let mappedObj = obj;
533
+ if (structDefOptions?.mapValue) {
534
+ mappedObj = structDefOptions.mapValue(obj);
535
+ }
536
+ for (const field of layout) {
537
+ const value = mappedObj[field.name] ?? field.default;
538
+ if (!field.optional && value === undefined) {
539
+ console.warn(`packInto missing value for non-optional field '${field.name}' at offset ${offset2 + field.offset}. Writing default or zero.`);
540
+ }
541
+ if (field.validate) {
542
+ for (const validateFn of field.validate) {
543
+ validateFn(value, field.name, {
544
+ hints: options?.validationHints,
545
+ input: mappedObj
546
+ });
547
+ }
548
+ }
549
+ field.pack(view, offset2 + field.offset, value, mappedObj, options);
550
+ }
551
+ },
552
+ unpack(buf) {
553
+ if (buf.byteLength < totalSize) {
554
+ fatalError(`Buffer size (${buf.byteLength}) is smaller than struct size (${totalSize}) for unpacking.`);
555
+ }
556
+ const view = new DataView(buf);
557
+ const result = structDefOptions?.default ? { ...structDefOptions.default } : {};
558
+ for (const field of layout) {
559
+ if (!field.unpack) {
560
+ continue;
561
+ }
562
+ try {
563
+ result[field.name] = field.unpack(view, field.offset);
564
+ } catch (e) {
565
+ console.error(`Error unpacking field '${field.name}' at offset ${field.offset}:`, e);
566
+ throw e;
567
+ }
568
+ }
569
+ if (structDefOptions?.reduceValue) {
570
+ return structDefOptions.reduceValue(result);
571
+ }
572
+ return result;
573
+ },
574
+ packList(objects, options) {
575
+ if (objects.length === 0) {
576
+ return new ArrayBuffer(0);
577
+ }
578
+ const buffer = new ArrayBuffer(totalSize * objects.length);
579
+ const view = new DataView(buffer);
580
+ for (let i = 0;i < objects.length; i++) {
581
+ let mappedObj = objects[i];
582
+ if (structDefOptions?.mapValue) {
583
+ mappedObj = structDefOptions.mapValue(objects[i]);
584
+ }
585
+ for (const field of layout) {
586
+ const value = mappedObj[field.name] ?? field.default;
587
+ if (!field.optional && value === undefined) {
588
+ fatalError(`Packing non-optional field '${field.name}' at index ${i} but value is undefined (and no default provided)`);
589
+ }
590
+ if (field.validate) {
591
+ for (const validateFn of field.validate) {
592
+ validateFn(value, field.name, {
593
+ hints: options?.validationHints,
594
+ input: mappedObj
595
+ });
596
+ }
597
+ }
598
+ field.pack(view, i * totalSize + field.offset, value, mappedObj, options);
599
+ }
600
+ }
601
+ return buffer;
602
+ },
603
+ unpackList(buf, count) {
604
+ if (count === 0) {
605
+ return [];
606
+ }
607
+ const expectedSize = totalSize * count;
608
+ if (buf.byteLength < expectedSize) {
609
+ fatalError(`Buffer size (${buf.byteLength}) is smaller than expected size (${expectedSize}) for unpacking ${count} structs.`);
610
+ }
611
+ const view = new DataView(buf);
612
+ const results = [];
613
+ for (let i = 0;i < count; i++) {
614
+ const offset2 = i * totalSize;
615
+ const result = structDefOptions?.default ? { ...structDefOptions.default } : {};
616
+ for (const field of layout) {
617
+ if (!field.unpack) {
618
+ continue;
619
+ }
620
+ try {
621
+ result[field.name] = field.unpack(view, offset2 + field.offset);
622
+ } catch (e) {
623
+ console.error(`Error unpacking field '${field.name}' at index ${i}, offset ${offset2 + field.offset}:`, e);
624
+ throw e;
625
+ }
626
+ }
627
+ if (structDefOptions?.reduceValue) {
628
+ results.push(structDefOptions.reduceValue(result));
629
+ } else {
630
+ results.push(result);
631
+ }
632
+ }
633
+ return results;
634
+ },
635
+ describe() {
636
+ return description;
637
+ }
638
+ };
639
+ }
640
+ export {
641
+ pointerSize,
642
+ packObjectArray,
643
+ objectPtr,
644
+ defineStruct,
645
+ defineEnum,
646
+ allocStruct
647
+ };
648
+
649
+ //# debugId=E25F830A52E9C00D64756E2164756E21
650
+ //# sourceMappingURL=index-tkk6cmr2.js.map