@opentui/core 0.0.0-20251205-41c885f6 → 0.0.0-20251209-015faccd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/3d.js +31289 -53
- package/3d.js.map +136 -3
- package/Renderable.d.ts +2 -1
- package/{index-x5bb5xvn.js → index-4s3xr47p.js} +2554 -173
- package/index-4s3xr47p.js.map +59 -0
- package/index.d.ts +1 -1
- package/index.js +1019 -110
- package/index.js.map +24 -15
- package/lib/bunfs.d.ts +7 -0
- package/lib/keymapping.d.ts +4 -1
- package/lib/yoga.options.d.ts +1 -1
- package/package.json +9 -9
- package/parser.worker.js +17 -3
- package/parser.worker.js.map +6 -5
- package/renderables/Diff.d.ts +4 -0
- package/renderables/Input.d.ts +10 -0
- package/renderables/Select.d.ts +10 -0
- package/renderables/TabSelect.d.ts +10 -0
- package/renderables/Textarea.d.ts +5 -1
- package/renderer.d.ts +31 -1
- package/testing/mock-keys.d.ts +12 -0
- package/testing/test-recorder.d.ts +44 -0
- package/testing.d.ts +1 -0
- package/testing.js +71 -3
- package/testing.js.map +7 -6
- package/zig.d.ts +2 -2
- package/index-x5bb5xvn.js.map +0 -53
|
@@ -1,4 +1,1670 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
+
for (let key of __getOwnPropNames(mod))
|
|
11
|
+
if (!__hasOwnProp.call(to, key))
|
|
12
|
+
__defProp(to, key, {
|
|
13
|
+
get: () => mod[key],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
19
|
+
var __export = (target, all) => {
|
|
20
|
+
for (var name in all)
|
|
21
|
+
__defProp(target, name, {
|
|
22
|
+
get: all[name],
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
set: (newValue) => all[name] = () => newValue
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
var __require = import.meta.require;
|
|
29
|
+
|
|
30
|
+
// ../../node_modules/yoga-layout/dist/src/index.js
|
|
31
|
+
var exports_src = {};
|
|
32
|
+
__export(exports_src, {
|
|
33
|
+
default: () => src_default,
|
|
34
|
+
Wrap: () => Wrap,
|
|
35
|
+
Unit: () => Unit,
|
|
36
|
+
PositionType: () => PositionType,
|
|
37
|
+
Overflow: () => Overflow,
|
|
38
|
+
NodeType: () => NodeType,
|
|
39
|
+
MeasureMode: () => MeasureMode,
|
|
40
|
+
LogLevel: () => LogLevel,
|
|
41
|
+
Justify: () => Justify,
|
|
42
|
+
Gutter: () => Gutter,
|
|
43
|
+
FlexDirection: () => FlexDirection,
|
|
44
|
+
ExperimentalFeature: () => ExperimentalFeature,
|
|
45
|
+
Errata: () => Errata,
|
|
46
|
+
Edge: () => Edge,
|
|
47
|
+
Display: () => Display,
|
|
48
|
+
Direction: () => Direction,
|
|
49
|
+
Dimension: () => Dimension,
|
|
50
|
+
BoxSizing: () => BoxSizing,
|
|
51
|
+
Align: () => Align
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// ../../node_modules/yoga-layout/dist/binaries/yoga-wasm-base64-esm.js
|
|
55
|
+
var loadYoga = (() => {
|
|
56
|
+
var _scriptDir = import.meta.url;
|
|
57
|
+
return function(loadYoga2) {
|
|
58
|
+
loadYoga2 = loadYoga2 || {};
|
|
59
|
+
var h;
|
|
60
|
+
h || (h = typeof loadYoga2 !== "undefined" ? loadYoga2 : {});
|
|
61
|
+
var aa, ca;
|
|
62
|
+
h.ready = new Promise(function(a, b) {
|
|
63
|
+
aa = a;
|
|
64
|
+
ca = b;
|
|
65
|
+
});
|
|
66
|
+
var da = Object.assign({}, h), q = "";
|
|
67
|
+
typeof document != "undefined" && document.currentScript && (q = document.currentScript.src);
|
|
68
|
+
_scriptDir && (q = _scriptDir);
|
|
69
|
+
q.indexOf("blob:") !== 0 ? q = q.substr(0, q.replace(/[?#].*/, "").lastIndexOf("/") + 1) : q = "";
|
|
70
|
+
var ea = h.print || console.log.bind(console), v = h.printErr || console.warn.bind(console);
|
|
71
|
+
Object.assign(h, da);
|
|
72
|
+
da = null;
|
|
73
|
+
var w;
|
|
74
|
+
h.wasmBinary && (w = h.wasmBinary);
|
|
75
|
+
var noExitRuntime = h.noExitRuntime || true;
|
|
76
|
+
typeof WebAssembly != "object" && x("no native wasm support detected");
|
|
77
|
+
var fa, ha = false;
|
|
78
|
+
function z(a, b, c) {
|
|
79
|
+
c = b + c;
|
|
80
|
+
for (var d = "";!(b >= c); ) {
|
|
81
|
+
var e = a[b++];
|
|
82
|
+
if (!e)
|
|
83
|
+
break;
|
|
84
|
+
if (e & 128) {
|
|
85
|
+
var f = a[b++] & 63;
|
|
86
|
+
if ((e & 224) == 192)
|
|
87
|
+
d += String.fromCharCode((e & 31) << 6 | f);
|
|
88
|
+
else {
|
|
89
|
+
var g = a[b++] & 63;
|
|
90
|
+
e = (e & 240) == 224 ? (e & 15) << 12 | f << 6 | g : (e & 7) << 18 | f << 12 | g << 6 | a[b++] & 63;
|
|
91
|
+
65536 > e ? d += String.fromCharCode(e) : (e -= 65536, d += String.fromCharCode(55296 | e >> 10, 56320 | e & 1023));
|
|
92
|
+
}
|
|
93
|
+
} else
|
|
94
|
+
d += String.fromCharCode(e);
|
|
95
|
+
}
|
|
96
|
+
return d;
|
|
97
|
+
}
|
|
98
|
+
var ia, ja, A, C, ka, D, E, la, ma;
|
|
99
|
+
function na() {
|
|
100
|
+
var a = fa.buffer;
|
|
101
|
+
ia = a;
|
|
102
|
+
h.HEAP8 = ja = new Int8Array(a);
|
|
103
|
+
h.HEAP16 = C = new Int16Array(a);
|
|
104
|
+
h.HEAP32 = D = new Int32Array(a);
|
|
105
|
+
h.HEAPU8 = A = new Uint8Array(a);
|
|
106
|
+
h.HEAPU16 = ka = new Uint16Array(a);
|
|
107
|
+
h.HEAPU32 = E = new Uint32Array(a);
|
|
108
|
+
h.HEAPF32 = la = new Float32Array(a);
|
|
109
|
+
h.HEAPF64 = ma = new Float64Array(a);
|
|
110
|
+
}
|
|
111
|
+
var oa, pa = [], qa = [], ra = [];
|
|
112
|
+
function sa() {
|
|
113
|
+
var a = h.preRun.shift();
|
|
114
|
+
pa.unshift(a);
|
|
115
|
+
}
|
|
116
|
+
var F = 0, ta = null, G = null;
|
|
117
|
+
function x(a) {
|
|
118
|
+
if (h.onAbort)
|
|
119
|
+
h.onAbort(a);
|
|
120
|
+
a = "Aborted(" + a + ")";
|
|
121
|
+
v(a);
|
|
122
|
+
ha = true;
|
|
123
|
+
a = new WebAssembly.RuntimeError(a + ". Build with -sASSERTIONS for more info.");
|
|
124
|
+
ca(a);
|
|
125
|
+
throw a;
|
|
126
|
+
}
|
|
127
|
+
function ua(a) {
|
|
128
|
+
return a.startsWith("data:application/octet-stream;base64,");
|
|
129
|
+
}
|
|
130
|
+
var H;
|
|
131
|
+
H = "data:application/octet-stream;base64,AGFzbQEAAAABugM3YAF/AGACf38AYAF/AX9gA39/fwBgAn98AGACf38Bf2ADf39/AX9gBH9/f30BfWADf398AGAAAGAEf39/fwBgAX8BfGACf38BfGAFf39/f38Bf2AAAX9gA39/fwF9YAZ/f31/fX8AYAV/f39/fwBgAn9/AX1gBX9/f319AX1gAX8BfWADf35/AX5gB39/f39/f38AYAZ/f39/f38AYAR/f39/AX9gBn9/f319fQF9YAR/f31/AGADf399AX1gBn98f39/fwF/YAR/fHx/AGACf30AYAh/f39/f39/fwBgDX9/f39/f39/f39/f38AYAp/f39/f39/f39/AGAFf39/f38BfGAEfHx/fwF9YA1/fX1/f399fX9/f39/AX9gB39/f319f38AYAJ+fwF/YAN/fX0BfWABfAF8YAN/fHwAYAR/f319AGAHf39/fX19fQF9YA1/fX99f31/fX19fX1/AX9gC39/f39/f399fX19AX9gCH9/f39/f319AGAEf39+fgBgB39/f39/f38Bf2ACfH8BfGAFf398fH8AYAN/f38BfGAEf39/fABgA39/fQBgBn9/fX99fwF/ArUBHgFhAWEAHwFhAWIAAwFhAWMACQFhAWQAFgFhAWUAEQFhAWYAIAFhAWcAAAFhAWgAIQFhAWkAAwFhAWoAAAFhAWsAFwFhAWwACgFhAW0ABQFhAW4AAwFhAW8AAQFhAXAAFwFhAXEABgFhAXIAAAFhAXMAIgFhAXQACgFhAXUADQFhAXYAFgFhAXcAAgFhAXgAAwFhAXkAGAFhAXoAAgFhAUEAAQFhAUIAEQFhAUMAAQFhAUQAAAOiAqACAgMSBwcACRkDAAoRBgYKEwAPDxMBBiMTCgcHGgMUASQFJRQHAwMKCgMmAQYYDxobFAAKBw8KBwMDAgkCAAAFGwACBwIHBgIDAQMIDAABKAkHBQURACkZASoAAAIrLAIALQcHBy4HLwkFCgMCMA0xAgMJAgACAQYKAQIBBQEACQIFAQEABQAODQ0GFQIBHBUGAgkCEAAAAAUyDzMMBQYINAUCAwUODg41AgMCAgIDBgICNgIBDAwMAQsLCwsLCx0CAAIAAAABABABBQICAQMCEgMMCwEBAQEBAQsLAQICAwICAgICAgIDAgIICAEICAgEBAQEBAQEBAQABAQABAQEBAAE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GiABQQA2AvADIAFCADcC6AMgAigC7AMiAyACKALoAyIERwRAIAMgBGsiBEEASA0FIAEgBBAeIgM2AuwDIAEgAzYC6AMgASADIARqNgLwAyACKALoAyIEIAIoAuwDIghHBEADQCADIAQoAgA2AgAgA0EEaiEDIARBBGoiBCAIRw0ACwsgASADNgLsAwsgASACKQL0AzcC9AMgASACKAKEBDYChAQgASACKQL8AzcC/AMgAUEANgLkAwsgBSABNgIAIAEgADYC5AMLIAZBAWohBiAFQQRqIgUgB0cNAAsLDwsQAgALUAACQAJAAkACQAJAIAIOBAQAAQIDCyAAIAEgAUEwahBDDwsgACABIAFBMGogAxBEDwsgACABIAFBMGoQQg8LECQACyAAIAEgAUEwaiADEEULcAIBfwF9IwBBEGsiBCQAIARBCGogACABQQJ0QdwlaigCACACEDZDAADAfyEFAkACQAJAIAQtAAxBAWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwt5AgF/AX0jAEEQayIDJAAgA0EIaiAAIAFBAnRB7CVqKAIAIAIQU0MAAMB/IQQCQAJAAkAgAy0ADEEBaw4CAAECCyADKgIIIQQMAQsgAyoCCEMAAAAAlEMK1yM8lCEECyADQRBqJAAgBEMAAAAAl0MAAAAAIAQgBFsbC1QAAkACQAJAAkACQCACDgQEAAECAwsgACABIAFBwgBqEEMPCyAAIAEgAUHCAGogAxBEDwsgACABIAFBwgBqEEIPCxAkAAsgACABIAFBwgBqIAMQRQsvACAAIAJFQQF0IgIgASADEGAgACACIAEQS5IgACACIAEgAxB/IAAgAiABEFKSkgvOAQIDfwJ9IwBBEGsiAyQAQQEhBCADQQhqIABB/ABqIgUgACABQQF0akH2AGoiAS8BABAfAkACQCADKgIIIgcgAioCACIGXARAIAcgB1sEQCACLQAEIQIMAgsgBiAGXCEECyACLQAEIQIgBEUNACADLQAMIAJB/wFxRg0BCyAFIAEgBiACEDkDQCAALQAAIgFBBHENASAAIAFBBHI6AAAgACgCECIBBEAgACABEQAACyAAQYCAgP4HNgKcASAAKALkAyIADQALCyADQRBqJAALzgECA38CfSMAQRBrIgMk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AWsOAgABAgsgBCoCCCEFDAELIAQqAgggA5RDCtcjPJQhBQsgBEEQaiQAIAVDAAAAACAFIAVbGwscACAAIAFBCCACpyACQiCIpyADpyADQiCIpxAVCwUAEFgACzkAIABFBEBBAA8LAn8gAUGAf3FBgL8DRiABQf8ATXJFBEBB/DtBGTYCAEF/DAELIAAgAToAAEEBCwvEAgACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABQQlrDhIACgsMCgsCAwQFDAsMDAoLBwgJCyACIAIoAgAiAUEEajYCACAAIAEoAgA2AgAPCwALIAIgAigCACIBQQRqNgIAIAAgATIBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATMBADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATAAADcDAA8LIAIgAigCACIBQQRqNgIAIAAgATEAADcDAA8LAAsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAQALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC84BAgN/An0jAEEQayIDJABBASEEIANBCGogAEH8AGoiBSAAIAFBAXRqQegAaiIBLwEAEB8CQAJAIAMqAggiByACKgIAIgZcBEAgByAHWwRAIAItAAQhAgwCCyAGIAZcIQQLIAItAAQhAiAERQ0AIAMtAAwgAkH/AXFGDQELIAUgASAGIAIQOQNAIAAtAAAiAUEEcQ0BIAAgAUEEcjoAACAAKAIQIgEEQCAAIAERAAALIABBgICA/gc2ApwBIAAoAuQDIgANAAsLIANBEGokAAtdAQR/IAAoAgAhAgNAIAIsAAAiAxBXBEBBfyEEIAAgAkEBaiICNgIAIAFBzJmz5gBNBH9BfyADQTBrIgMgAUEKbCIEaiADIARB/////wdzShsFIAQLIQEMAQsLIAELrhQCEn8BfiMAQdAAayIIJAAgCCABNgJMIAhBN2ohFyAIQThqIRQCQAJAAkACQANAIAEhDSAHIA5B/////wdzSg0BIAcgDmohDgJAAkACQCANIgctAAAiCQRAA0ACQAJAIAlB/wFxIgFFBEAgByEBDAELIAFBJUcNASAH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IQEgAEIANwIEIAAgATYCACABIAA2AgQgAkEQaiQAIAALGwEBfyAABEAgACgCACIBBEAgARAjCyAAECMLC0kBAn9BBBAeIQFBIBAeIgBBADYCHCAAQoCAgICAgIDAPzcCFCAAQgA3AgwgAEEAOgAIIABBAzYCBCAAQQA2AgAgASAANgIAIAELIAAgAkEFR0EAIAIbRQRAQbgwIAMgBBBJDwsgAyAEEHALIgEBfiABIAKtIAOtQiCGhCAEIAARFQAiBUIgiKckASAFpwuoAQEFfyAAKAJUIgMoAgAhBSADKAIEIgQgACgCFCAAKAIcIgdrIgYgBCAGSRsiBgRAIAUgByAGECsaIAMgAygCACAGaiIFNgIAIAMgAygCBCAGayIENgIECyAEIAIgAiAESxsiBARAIAUgASAEECsaIAMgAygCACAEaiIFNgIAIAMgAygCBCAEazYCBAsgBUEAOgAAIAAgACgCLCIBNgIcIAAgATYCFCACCwQAQgALBABBAAuKBQIGfgJ/IAEgASgCAEEHakF4cSIBQRBqNgIAIAAhCSABKQMAIQMgASkDCCEGIwBBIGsiCCQAAkAgBkL///////////8AgyIEQoCAgICAgMCAPH0gBEKAgICAgIDA/8MAfVQEQCAGQgSGIANCPIiEIQQgA0L//////////w+DIgNCgYCAgICAgIAIWgRAIARCgYCAgICAgIDAAHwhAgwCCyAEQoCAgICAgICAQH0hAiADQoCAgICAgICACFINASACIARCAYN8IQIMAQsgA1AgBEKAgICAgIDA//8AVCAEQoCAgICAgMD//wBRG0UEQCAGQgSGIANCPIiEQv////////8Dg0KAgICAgICA/P8AhCECDAELQoCAgICAgID4/wAhAiAEQv///////7//wwBWDQBCACECIARCMIinIgBBkfcASQ0AIAMhAiAGQv///////z+DQoCAgICAgMAAhCIFIQcCQCAAQYH3AGsiAUHAAHEEQCACIAFBQGqthiEHQgAhAgwBCyABRQ0AIAcgAa0iBIYgAkHAACABa62IhCEHIAIgBIYhAgsgCCACNwMQIAggBzcDGAJAQYH4ACAAayIAQcAAcQRAIAUgAEFAaq2IIQNCACEFDAELIABFDQAgBUHAACAAa62GIAMgAK0iAoiEIQMgBSACiCEFCyAIIAM3AwAgCCAF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ASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRCwALYQECfyMAQRBrIgIkACABIAAoAgQiA0EBdWohASAAKAIAIQAgAiABIANBAXEEfyABKAIAIABqKAIABSAACxEBAEEQEB4iACACKQMINwMIIAAgAikDADcDACACQRBqJAAgAAtjAQJ/IwBBEGsiAyQAIAEgACgCBCIEQQF1aiEBIAAoAgAhACADIAEgAiAEQQFxBH8gASgCACAAaigCAAUgAAsRAwBBEBAeIgAgAykDCDcDCCAAIAMpAwA3AwAgA0EQaiQAIAALNwEBfyABIAAoAgQiA0EBdWohASAAKAIAIQAgASACIANBAXEEfyABKAIAIABqKAIABSAACxEEAAs5AQF/IAEgACgCBCIEQQF1aiEBIAAoAgAhACABIAIgAyAEQQFxBH8gASgCACAAaigCAAUgAAsRCAALCQAgASAAEQIACwUAQcM7Cw8AIAEgACgCAGogAjYCAAsNACABIAAoAgBqKAIACxgBAX9BEBAeIgBCADcDCCAAQQA2AgAgAAsYAQF/QRAQHiIAQgA3AwAgAEIANwMIIAALDABBMBAeQQBBMBAqCzcBAX8gASAAKAIEIgNBAXVqIQEgACgCACEAIAEgAiADQQFxBH8gASgCACAAaigCAAUgAAsRHgALBQBBvjsLIQAgACABKAIAIAEgASwAC0EASBtBuzsgAigCABAQNgIACyoBAX9BDBAeIgFBADoABCABIAAoAgA2AgggAEEANgIAIAFB2Cc2AgAgAQsFAEG7OwsFAEG4OwshACAAIAEoAgAgASABLAALQQBIG0GkOyACKAIAEBA2AgAL2AEBBH8jAEEgayIDJAAgASgCACIEQfD///8HSQRAAkACQCAEQQtPBEAgBEEPckEBaiIFEB4hBiADIAVBgICAgHhyNgIQIAMgBjYCCCADIAQ2AgwgBCAGaiEFDAELIAMgBDoAEyADQQhqIgYgBGohBSAERQ0BCyAGIAFBBGogBBArGgsgBUEAOgAAIAMgAjYCACADQRhqIANBCGogAyAAEQMAIAMoAhgQHSADKAIYIgAQBiADKAIAEAYgAywAE0EASARAIAMoAggQIwsgA0EgaiQAIAAPCxACAAsqAQF/QQwQHiIBQQA6AAQgASAAKAIANgIIIABBADYCACABQeAmNgIA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AkEIaiAIIAYQHyACIAcgAC8AABAfQQEhAyACKgIIIgogAioCACILXAR/IAogClsNAyALIAtcBSADC0UNAiACLQAMIAItAARHDQILIABBAmohAEEBIQMgBCEGQQEhBCAGRQ0ACyABLwB6IgBBB3FFBEAgBS0AekEHcUUNAgsgCCAAECAiCiAHIAUvAHoQICILWw0BIAogClsNACALIAtcDQELIAFBFGogBUEUakHoABArGiABQfwAaiAFQfwAahCgAQNAIAEtAAAiAEEEcQ0BIAEgAEEEcjoAACABKAIQIgAEQCABIAARAAALIAFBgICA/gc2ApwBIAEoAuQDIgENAAsLIAJBEGokAAvGAwEEfyMAQaAEayICJAAgACgCBCEBIABBADYCBCABBEAgASABKAIAKAIEEQAACyAAKAIIIQEgAEEANgIIIAEEQCABIAEoAgAoAgQRAAALAkAgACgCACIAKALoAyAAKALsA0YEQCAAKALkAw0BIAAgAkEYaiAAKAL0AxBcIgEpAgA3AgAgACABKAIQNgIQIAAgASkCCDcCCCAAQRRqIAFBFGpB6AAQKxogACABKQKMATcCjAEgACABKQKEATcChAEgACABKQJ8NwJ8IAEoApQBIQQgAUEANgKUASAAKAKUASEDIAAgBDYClAEgAwRAIAMQWwsgAEGYAWogAUGYAWpB0AIQKxogACgC6AMiAwRAIAAgAzYC7AMgAxAjCyAAIAEoAugDNgLoAyAAIAEoAuwDNgLsAyAAIAEoAvADNgLwAyABQQA2AvADIAFCADcC6AMgACABKQL8AzcC/AMgACABKQL0AzcC9AMgACABKAKEBDYChAQgASgClAEhACABQQA2ApQBIAAEQCAAEFsLIAJBoARqJAAPCyACQfAcNgIQIABBBUHYJSACQRBqECwQJAALIAJB5hE2AgAgAEEFQdglIAIQLBAkAAsLAEEMEB4gABCiAQsLAEEMEB5BABCiAQsNACAAKAIALQAIQQFxCwoAIAAoAgAoAhQLGQAgAUH/AXEEQBACAAsgACgCACgCEEEBcQsYACAAKAIAIgAgAC0ACEH+AXEgAXI6AAgLJgAgASAAKAIAIgAoAhRHBEAgACABNgIUIAAgACgCDEEBajYCDAsLkgEBAn8jAEEQayICJAAgACgCACEAIAFDAAAAAGAEQCABIAAqAhhcBEAgACABOAIYIAAgACgCDEEBajYCDAsgAkEQaiQADwsgAkGIFDYCACMAQRBrIgMkACADIAI2AgwCQCAARQRAQbgwQdglIAIQSRoMAQsgAEEAQQVB2CUgAiAAKAIEEQ0AGgsgA0EQaiQAECQACz8AIAFB/wFxRQRAIAIgACgCACIAKAIQIgFBAXFHBEAgACABQX5xIAJyNgIQIAAgACgCDEEBajYCDAsPCxACAAsL4CYjAEGACAuBHk9ubHkgbGVhZiBub2RlcyB3aXRoIGN1c3RvbSBtZWFzdXJlIGZ1bmN0aW9ucyBzaG91bGQgbWFudWFsbHkgbWFyayB0aGVtc2VsdmVzIGFzIGRpcnR5AGlzRGlydHkAbWFya0RpcnR5AGRlc3Ryb3kAc2V0RGlzcGxheQBnZXREaXNwbGF5AHNldEZsZXgALSsgICAwWDB4AC0wWCswWCAwWC0weCsweCAweABzZXRGbGV4R3JvdwBnZXRGbGV4R3JvdwBzZXRPdmVyZmxvdwBnZXRPdmVyZmxvdwBoYXNOZXdMYXlvdXQAY2FsY3VsYXRlTGF5b3V0AGdldENvbXB1dGVkTGF5b3V0AHVuc2lnbmVkIHNob3J0AGdldENoaWxkQ291bnQAdW5zaWduZWQgaW50AHNldEp1c3RpZnlDb250ZW50AGdldEp1c3RpZnlDb250ZW50AGF2YWlsYWJsZUhlaWdodCBpcyBpbmRlZmluaXRlIHNvIGhlaWdodFNpemluZ01vZGUgbXVzdCBiZSBTaXppbmdNb2RlOjpNYXhDb250ZW50AGF2YWlsYWJsZVdpZHRoIGlzIGluZGVmaW5pdGUgc28gd2lkdGhTaXppbmdNb2RlIG11c3QgYmUgU2l6aW5nTW9kZTo6TWF4Q29udGVudABzZXRBbGlnbkNvbnRlbnQAZ2V0QWxpZ25Db250ZW50AGdldFBhcmVudABpbXBsZW1lbnQAc2V0TWF4SGVpZ2h0UGVyY2VudABzZXRIZWlnaHRQZXJjZW50AHNldE1pbkhlaWdodFBlcmNlbnQAc2V0RmxleEJhc2lzUGVyY2VudABzZXRHYXBQZXJjZW50AHNldFBvc2l0aW9uUGVyY2VudABzZXRNYXJnaW5QZXJjZW50AHNldE1heFdpZHRoUGVyY2VudABzZXRXaWR0aFBlcmNlbnQAc2V0TWluV2lkdGhQZXJjZW50AHNldFBhZGRpbmdQZXJjZW50AGhhbmRsZS50eXBlKCkgPT0gU3R5bGVWYWx1ZUhhbmRsZTo6VHlwZTo6UG9pbnQgfHwgaGFuZGxlLnR5cGUoKSA9PSBTdHlsZVZhbHVlSGFuZGxlOjpUeXBlOjpQZXJjZW50AGNyZWF0ZURlZmF1bHQAdW5pdAByaWdodABoZWlnaHQAc2V0TWF4SGVpZ2h0AGdldE1heEhlaWdodABzZXRIZWlnaHQAZ2V0SGVpZ2h0AHNldE1pbkhlaWdodABnZXRNaW5IZWlnaHQAZ2V0Q29tcHV0ZWRIZWlnaHQAZ2V0Q29tcHV0ZWRSaWdodABsZWZ0AGdldENvbXB1dGVkTGVmdAByZXNldABfX2Rlc3RydWN0AGZsb2F0AHVpbnQ2NF90AHVzZVdlYkRlZmF1bHRzAHNldFVzZVdlYkRlZmF1bHRzAHNldEFsaWduSXRlbXMAZ2V0QWxpZ25JdGVtcwBzZXRGbGV4QmFzaXMAZ2V0RmxleEJhc2lzAENhbm5vdCBnZXQgbGF5b3V0IHByb3BlcnRpZXMgb2YgbXVsdGktZWRnZSBzaG9ydGhhbmRzAHNldFBvaW50U2NhbGVGYWN0b3IATWVhc3VyZUNhbGxiYWNrV3JhcHBlcgBEaXJ0aWVkQ2FsbGJhY2tXcmFwcGVyAENhbm5vdCByZXNldCBhIG5vZGUgc3RpbGwgYXR0YWNoZWQgdG8gYSBvd25lcgBzZXRCb3JkZXIAZ2V0Qm9yZGVyAGdldENvbXB1dGVkQm9yZGVyAGdldE51bWJlcgBoYW5kbGUudHlwZSgpID09IFN0eWxlVmFsdWVIYW5kbGU6OlR5cGU6Ok51bWJlcgB1bnNpZ25lZCBjaGFyAHRvcABnZXRDb21wdXRlZFRvcABzZXRGbGV4V3JhcABnZXRGbGV4V3JhcABzZXRHYXAAZ2V0R2FwACVwAHNldEhlaWdodEF1dG8Ac2V0RmxleEJhc2lzQXV0bwBzZXRQb3NpdGlvbkF1dG8Ac2V0TWFyZ2luQXV0bwBzZXRXaWR0aEF1dG8AU2NhbGUgZmFjdG9yIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHplcm8Ac2V0QXNwZWN0UmF0aW8AZ2V0QXNwZWN0UmF0aW8Ac2V0UG9zaXRpb24AZ2V0UG9zaXRpb24Abm90aWZ5T25EZXN0cnVjdGlvbgBzZXRGbGV4RGlyZWN0aW9uAGdldEZsZXhEaXJlY3Rpb24Ac2V0RGlyZWN0aW9uAGdldERpcmVjdGlvbgBzZXRNYXJnaW4AZ2V0TWFyZ2luAGdldENvbXB1dGVkTWFyZ2luAG1hcmtMYXlvdXRTZWVuAG5hbgBib3R0b20AZ2V0Q29tcHV0ZWRCb3R0b20AYm9vbABlbXNjcmlwdGVuOjp2YWwAc2V0RmxleFNocmluawBnZXRGbGV4U2hyaW5rAHNldEFsd2F5c0Zvcm1zQ29udGFpbmluZ0Jsb2NrAE1lYXN1cmVDYWxsYmFjawBEaXJ0aWVkQ2FsbGJhY2sAZ2V0TGVuZ3RoAHdpZHRoAHNldE1heFdpZHRoAGdldE1heFdpZHRoAHNldFdpZHRoAGdldFdpZHRoAHNldE1pbldpZHRoAGdldE1pbldpZHRoAGdldENvbXB1dGVkV2lkdGgAcHVzaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1NtYWxsVmFsdWVCdWZmZXIuaAAvaG9tZS9ydW5uZXIvd29yay95b2dhL3lvZ2EvamF2YXNjcmlwdC8uLi95b2dhL3N0eWxlL1N0eWxlVmFsdWVQb29sLmgAdW5zaWduZWQgbG9uZwBzZXRCb3hTaXppbmcAZ2V0Qm94U2l6aW5nAHN0ZDo6d3N0cmluZwBzdGQ6OnN0cmluZwBzdGQ6OnUxNnN0cmluZwBzdGQ6OnUzMnN0cmluZwBzZXRQYWRkaW5nAGdldFBhZGRpbmcAZ2V0Q29tcHV0ZWRQYWRkaW5nAFRyaWVkIHRvIGNvbnN0cnVjdCBZR05vZGUgd2l0aCBudWxsIGNvbmZpZwBBdHRlbXB0aW5nIHRvIGNvbnN0cnVjdCBOb2RlIHdpdGggbnVsbCBjb25maWcAY3JlYXRlV2l0aENvbmZpZwBpbmYAc2V0QWxpZ25TZWxmAGdldEFsaWduU2VsZgBTaXplAHZhbHVlAFZhbHVlAGNyZWF0ZQBtZWFzdXJlAHNldFBvc2l0aW9uVHlwZQBnZXRQb3NpdGlvblR5cGUAaXNSZWZlcmVuY2VCYXNlbGluZQBzZXRJc1JlZmVyZW5jZUJhc2VsaW5lAGNvcHlTdHlsZQBkb3VibGUATm9kZQBleHRlbmQAaW5zZXJ0Q2hpbGQAZ2V0Q2hpbGQAcmVtb3ZlQ2hpbGQAdm9pZABzZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZABpc0V4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkAGRpcnRpZWQAQ2Fubm90IHJlc2V0IGEgbm9kZSB3aGljaCBzdGlsbCBoYXMgY2hpbGRyZW4gYXR0YWNoZWQAdW5zZXRNZWFzdXJlRnVuYwB1bnNldERpcnRpZWRGdW5jAHNldEVycmF0YQBnZXRFcnJhdGEATWVhc3VyZSBmdW5jdGlvbiByZXR1cm5lZCBhbiBpbnZhbGlkIGRpbWVuc2lvbiB0byBZb2dhOiBbd2lkdGg9JWYsIGhlaWdodD0lZl0ARXhwZWN0IGN1c3RvbSBiYXNlbGluZSBmdW5jdGlvbiB0byBub3QgcmV0dXJuIE5hTgBOQU4ASU5GAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8Y2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgY2hhcj4Ac3RkOjpiYXNpY19zdHJpbmc8dW5zaWduZWQgY2hhcj4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8c2lnbmVk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";
|
|
132
|
+
if (!ua(H)) {
|
|
133
|
+
var va = H;
|
|
134
|
+
H = h.locateFile ? h.locateFile(va, q) : q + va;
|
|
135
|
+
}
|
|
136
|
+
function wa() {
|
|
137
|
+
var a = H;
|
|
138
|
+
try {
|
|
139
|
+
if (a == H && w)
|
|
140
|
+
return new Uint8Array(w);
|
|
141
|
+
if (ua(a))
|
|
142
|
+
try {
|
|
143
|
+
var b = xa(a.slice(37)), c = new Uint8Array(b.length);
|
|
144
|
+
for (a = 0;a < b.length; ++a)
|
|
145
|
+
c[a] = b.charCodeAt(a);
|
|
146
|
+
var d = c;
|
|
147
|
+
} catch (f) {
|
|
148
|
+
throw Error("Converting base64 string to bytes failed.");
|
|
149
|
+
}
|
|
150
|
+
else
|
|
151
|
+
d = undefined;
|
|
152
|
+
var e = d;
|
|
153
|
+
if (e)
|
|
154
|
+
return e;
|
|
155
|
+
throw "both async and sync fetching of the wasm failed";
|
|
156
|
+
} catch (f) {
|
|
157
|
+
x(f);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function ya() {
|
|
161
|
+
return w || typeof fetch != "function" ? Promise.resolve().then(function() {
|
|
162
|
+
return wa();
|
|
163
|
+
}) : fetch(H, { credentials: "same-origin" }).then(function(a) {
|
|
164
|
+
if (!a.ok)
|
|
165
|
+
throw "failed to load wasm binary file at '" + H + "'";
|
|
166
|
+
return a.arrayBuffer();
|
|
167
|
+
}).catch(function() {
|
|
168
|
+
return wa();
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function za(a) {
|
|
172
|
+
for (;0 < a.length; )
|
|
173
|
+
a.shift()(h);
|
|
174
|
+
}
|
|
175
|
+
function Aa(a) {
|
|
176
|
+
if (a === undefined)
|
|
177
|
+
return "_unknown";
|
|
178
|
+
a = a.replace(/[^a-zA-Z0-9_]/g, "$");
|
|
179
|
+
var b = a.charCodeAt(0);
|
|
180
|
+
return 48 <= b && 57 >= b ? "_" + a : a;
|
|
181
|
+
}
|
|
182
|
+
function Ba(a, b) {
|
|
183
|
+
a = Aa(a);
|
|
184
|
+
return function() {
|
|
185
|
+
return b.apply(this, arguments);
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
var J = [{}, { value: undefined }, { value: null }, { value: true }, { value: false }], Ca = [];
|
|
189
|
+
function Da(a) {
|
|
190
|
+
var b = Error, c = Ba(a, function(d) {
|
|
191
|
+
this.name = a;
|
|
192
|
+
this.message = d;
|
|
193
|
+
d = Error(d).stack;
|
|
194
|
+
d !== undefined && (this.stack = this.toString() + `
|
|
195
|
+
` + d.replace(/^Error(:[^\n]*)?\n/, ""));
|
|
196
|
+
});
|
|
197
|
+
c.prototype = Object.create(b.prototype);
|
|
198
|
+
c.prototype.constructor = c;
|
|
199
|
+
c.prototype.toString = function() {
|
|
200
|
+
return this.message === undefined ? this.name : this.name + ": " + this.message;
|
|
201
|
+
};
|
|
202
|
+
return c;
|
|
203
|
+
}
|
|
204
|
+
var K = undefined;
|
|
205
|
+
function L(a) {
|
|
206
|
+
throw new K(a);
|
|
207
|
+
}
|
|
208
|
+
var M = (a) => {
|
|
209
|
+
a || L("Cannot use deleted val. handle = " + a);
|
|
210
|
+
return J[a].value;
|
|
211
|
+
}, Ea = (a) => {
|
|
212
|
+
switch (a) {
|
|
213
|
+
case undefined:
|
|
214
|
+
return 1;
|
|
215
|
+
case null:
|
|
216
|
+
return 2;
|
|
217
|
+
case true:
|
|
218
|
+
return 3;
|
|
219
|
+
case false:
|
|
220
|
+
return 4;
|
|
221
|
+
default:
|
|
222
|
+
var b = Ca.length ? Ca.pop() : J.length;
|
|
223
|
+
J[b] = { ga: 1, value: a };
|
|
224
|
+
return b;
|
|
225
|
+
}
|
|
226
|
+
}, Fa = undefined, Ga = undefined;
|
|
227
|
+
function N(a) {
|
|
228
|
+
for (var b = "";A[a]; )
|
|
229
|
+
b += Ga[A[a++]];
|
|
230
|
+
return b;
|
|
231
|
+
}
|
|
232
|
+
var O = [];
|
|
233
|
+
function Ha() {
|
|
234
|
+
for (;O.length; ) {
|
|
235
|
+
var a = O.pop();
|
|
236
|
+
a.M.$ = false;
|
|
237
|
+
a["delete"]();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
var P = undefined, Q = {};
|
|
241
|
+
function Ia(a, b) {
|
|
242
|
+
for (b === undefined && L("ptr should not be undefined");a.R; )
|
|
243
|
+
b = a.ba(b), a = a.R;
|
|
244
|
+
return b;
|
|
245
|
+
}
|
|
246
|
+
var R = {};
|
|
247
|
+
function Ja(a) {
|
|
248
|
+
a = Ka(a);
|
|
249
|
+
var b = N(a);
|
|
250
|
+
S(a);
|
|
251
|
+
return b;
|
|
252
|
+
}
|
|
253
|
+
function La(a, b) {
|
|
254
|
+
var c = R[a];
|
|
255
|
+
c === undefined && L(b + " has unknown type " + Ja(a));
|
|
256
|
+
return c;
|
|
257
|
+
}
|
|
258
|
+
function Ma() {}
|
|
259
|
+
var Na = false;
|
|
260
|
+
function Oa(a) {
|
|
261
|
+
--a.count.value;
|
|
262
|
+
a.count.value === 0 && (a.T ? a.U.W(a.T) : a.P.N.W(a.O));
|
|
263
|
+
}
|
|
264
|
+
function Pa(a, b, c) {
|
|
265
|
+
if (b === c)
|
|
266
|
+
return a;
|
|
267
|
+
if (c.R === undefined)
|
|
268
|
+
return null;
|
|
269
|
+
a = Pa(a, b, c.R);
|
|
270
|
+
return a === null ? null : c.na(a);
|
|
271
|
+
}
|
|
272
|
+
var Qa = {};
|
|
273
|
+
function Ra(a, b) {
|
|
274
|
+
b = Ia(a, b);
|
|
275
|
+
return Q[b];
|
|
276
|
+
}
|
|
277
|
+
var Sa = undefined;
|
|
278
|
+
function Ta(a) {
|
|
279
|
+
throw new Sa(a);
|
|
280
|
+
}
|
|
281
|
+
function Ua(a, b) {
|
|
282
|
+
b.P && b.O || Ta("makeClassHandle requires ptr and ptrType");
|
|
283
|
+
!!b.U !== !!b.T && Ta("Both smartPtrType and smartPtr must be specified");
|
|
284
|
+
b.count = { value: 1 };
|
|
285
|
+
return T(Object.create(a, { M: { value: b } }));
|
|
286
|
+
}
|
|
287
|
+
function T(a) {
|
|
288
|
+
if (typeof FinalizationRegistry === "undefined")
|
|
289
|
+
return T = (b) => b, a;
|
|
290
|
+
Na = new FinalizationRegistry((b) => {
|
|
291
|
+
Oa(b.M);
|
|
292
|
+
});
|
|
293
|
+
T = (b) => {
|
|
294
|
+
var c = b.M;
|
|
295
|
+
c.T && Na.register(b, { M: c }, b);
|
|
296
|
+
return b;
|
|
297
|
+
};
|
|
298
|
+
Ma = (b) => {
|
|
299
|
+
Na.unregister(b);
|
|
300
|
+
};
|
|
301
|
+
return T(a);
|
|
302
|
+
}
|
|
303
|
+
var Va = {};
|
|
304
|
+
function Wa(a) {
|
|
305
|
+
for (;a.length; ) {
|
|
306
|
+
var b = a.pop();
|
|
307
|
+
a.pop()(b);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
function Xa(a) {
|
|
311
|
+
return this.fromWireType(D[a >> 2]);
|
|
312
|
+
}
|
|
313
|
+
var U = {}, Ya = {};
|
|
314
|
+
function V(a, b, c) {
|
|
315
|
+
function d(k) {
|
|
316
|
+
k = c(k);
|
|
317
|
+
k.length !== a.length && Ta("Mismatched type converter count");
|
|
318
|
+
for (var m = 0;m < a.length; ++m)
|
|
319
|
+
W(a[m], k[m]);
|
|
320
|
+
}
|
|
321
|
+
a.forEach(function(k) {
|
|
322
|
+
Ya[k] = b;
|
|
323
|
+
});
|
|
324
|
+
var e = Array(b.length), f = [], g = 0;
|
|
325
|
+
b.forEach((k, m) => {
|
|
326
|
+
R.hasOwnProperty(k) ? e[m] = R[k] : (f.push(k), U.hasOwnProperty(k) || (U[k] = []), U[k].push(() => {
|
|
327
|
+
e[m] = R[k];
|
|
328
|
+
++g;
|
|
329
|
+
g === f.length && d(e);
|
|
330
|
+
}));
|
|
331
|
+
});
|
|
332
|
+
f.length === 0 && d(e);
|
|
333
|
+
}
|
|
334
|
+
function Za(a) {
|
|
335
|
+
switch (a) {
|
|
336
|
+
case 1:
|
|
337
|
+
return 0;
|
|
338
|
+
case 2:
|
|
339
|
+
return 1;
|
|
340
|
+
case 4:
|
|
341
|
+
return 2;
|
|
342
|
+
case 8:
|
|
343
|
+
return 3;
|
|
344
|
+
default:
|
|
345
|
+
throw new TypeError("Unknown type size: " + a);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function W(a, b, c = {}) {
|
|
349
|
+
if (!("argPackAdvance" in b))
|
|
350
|
+
throw new TypeError("registerType registeredInstance requires argPackAdvance");
|
|
351
|
+
var d = b.name;
|
|
352
|
+
a || L('type "' + d + '" must have a positive integer typeid pointer');
|
|
353
|
+
if (R.hasOwnProperty(a)) {
|
|
354
|
+
if (c.ua)
|
|
355
|
+
return;
|
|
356
|
+
L("Cannot register type '" + d + "' twice");
|
|
357
|
+
}
|
|
358
|
+
R[a] = b;
|
|
359
|
+
delete Ya[a];
|
|
360
|
+
U.hasOwnProperty(a) && (b = U[a], delete U[a], b.forEach((e) => e()));
|
|
361
|
+
}
|
|
362
|
+
function $a(a) {
|
|
363
|
+
L(a.M.P.N.name + " instance already deleted");
|
|
364
|
+
}
|
|
365
|
+
function X() {}
|
|
366
|
+
function ab(a, b, c) {
|
|
367
|
+
if (a[b].S === undefined) {
|
|
368
|
+
var d = a[b];
|
|
369
|
+
a[b] = function() {
|
|
370
|
+
a[b].S.hasOwnProperty(arguments.length) || L("Function '" + c + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + a[b].S + ")!");
|
|
371
|
+
return a[b].S[arguments.length].apply(this, arguments);
|
|
372
|
+
};
|
|
373
|
+
a[b].S = [];
|
|
374
|
+
a[b].S[d.Z] = d;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
function bb(a, b) {
|
|
378
|
+
h.hasOwnProperty(a) ? (L("Cannot register public name '" + a + "' twice"), ab(h, a, a), h.hasOwnProperty(undefined) && L("Cannot register multiple overloads of a function with the same number of arguments (undefined)!"), h[a].S[undefined] = b) : h[a] = b;
|
|
379
|
+
}
|
|
380
|
+
function cb(a, b, c, d, e, f, g, k) {
|
|
381
|
+
this.name = a;
|
|
382
|
+
this.constructor = b;
|
|
383
|
+
this.X = c;
|
|
384
|
+
this.W = d;
|
|
385
|
+
this.R = e;
|
|
386
|
+
this.pa = f;
|
|
387
|
+
this.ba = g;
|
|
388
|
+
this.na = k;
|
|
389
|
+
this.ja = [];
|
|
390
|
+
}
|
|
391
|
+
function db(a, b, c) {
|
|
392
|
+
for (;b !== c; )
|
|
393
|
+
b.ba || L("Expected null or instance of " + c.name + ", got an instance of " + b.name), a = b.ba(a), b = b.R;
|
|
394
|
+
return a;
|
|
395
|
+
}
|
|
396
|
+
function eb(a, b) {
|
|
397
|
+
if (b === null)
|
|
398
|
+
return this.ea && L("null is not a valid " + this.name), 0;
|
|
399
|
+
b.M || L('Cannot pass "' + fb(b) + '" as a ' + this.name);
|
|
400
|
+
b.M.O || L("Cannot pass deleted object as a pointer of type " + this.name);
|
|
401
|
+
return db(b.M.O, b.M.P.N, this.N);
|
|
402
|
+
}
|
|
403
|
+
function gb(a, b) {
|
|
404
|
+
if (b === null) {
|
|
405
|
+
this.ea && L("null is not a valid " + this.name);
|
|
406
|
+
if (this.da) {
|
|
407
|
+
var c = this.fa();
|
|
408
|
+
a !== null && a.push(this.W, c);
|
|
409
|
+
return c;
|
|
410
|
+
}
|
|
411
|
+
return 0;
|
|
412
|
+
}
|
|
413
|
+
b.M || L('Cannot pass "' + fb(b) + '" as a ' + this.name);
|
|
414
|
+
b.M.O || L("Cannot pass deleted object as a pointer of type " + this.name);
|
|
415
|
+
!this.ca && b.M.P.ca && L("Cannot convert argument of type " + (b.M.U ? b.M.U.name : b.M.P.name) + " to parameter type " + this.name);
|
|
416
|
+
c = db(b.M.O, b.M.P.N, this.N);
|
|
417
|
+
if (this.da)
|
|
418
|
+
switch (b.M.T === undefined && L("Passing raw pointer to smart pointer is illegal"), this.Ba) {
|
|
419
|
+
case 0:
|
|
420
|
+
b.M.U === this ? c = b.M.T : L("Cannot convert argument of type " + (b.M.U ? b.M.U.name : b.M.P.name) + " to parameter type " + this.name);
|
|
421
|
+
break;
|
|
422
|
+
case 1:
|
|
423
|
+
c = b.M.T;
|
|
424
|
+
break;
|
|
425
|
+
case 2:
|
|
426
|
+
if (b.M.U === this)
|
|
427
|
+
c = b.M.T;
|
|
428
|
+
else {
|
|
429
|
+
var d = b.clone();
|
|
430
|
+
c = this.xa(c, Ea(function() {
|
|
431
|
+
d["delete"]();
|
|
432
|
+
}));
|
|
433
|
+
a !== null && a.push(this.W, c);
|
|
434
|
+
}
|
|
435
|
+
break;
|
|
436
|
+
default:
|
|
437
|
+
L("Unsupporting sharing policy");
|
|
438
|
+
}
|
|
439
|
+
return c;
|
|
440
|
+
}
|
|
441
|
+
function hb(a, b) {
|
|
442
|
+
if (b === null)
|
|
443
|
+
return this.ea && L("null is not a valid " + this.name), 0;
|
|
444
|
+
b.M || L('Cannot pass "' + fb(b) + '" as a ' + this.name);
|
|
445
|
+
b.M.O || L("Cannot pass deleted object as a pointer of type " + this.name);
|
|
446
|
+
b.M.P.ca && L("Cannot convert argument of type " + b.M.P.name + " to parameter type " + this.name);
|
|
447
|
+
return db(b.M.O, b.M.P.N, this.N);
|
|
448
|
+
}
|
|
449
|
+
function Y(a, b, c, d) {
|
|
450
|
+
this.name = a;
|
|
451
|
+
this.N = b;
|
|
452
|
+
this.ea = c;
|
|
453
|
+
this.ca = d;
|
|
454
|
+
this.da = false;
|
|
455
|
+
this.W = this.xa = this.fa = this.ka = this.Ba = this.wa = undefined;
|
|
456
|
+
b.R !== undefined ? this.toWireType = gb : (this.toWireType = d ? eb : hb, this.V = null);
|
|
457
|
+
}
|
|
458
|
+
function ib(a, b) {
|
|
459
|
+
h.hasOwnProperty(a) || Ta("Replacing nonexistant public symbol");
|
|
460
|
+
h[a] = b;
|
|
461
|
+
h[a].Z = undefined;
|
|
462
|
+
}
|
|
463
|
+
function jb(a, b) {
|
|
464
|
+
var c = [];
|
|
465
|
+
return function() {
|
|
466
|
+
c.length = 0;
|
|
467
|
+
Object.assign(c, arguments);
|
|
468
|
+
if (a.includes("j")) {
|
|
469
|
+
var d = h["dynCall_" + a];
|
|
470
|
+
d = c && c.length ? d.apply(null, [b].concat(c)) : d.call(null, b);
|
|
471
|
+
} else
|
|
472
|
+
d = oa.get(b).apply(null, c);
|
|
473
|
+
return d;
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
function Z(a, b) {
|
|
477
|
+
a = N(a);
|
|
478
|
+
var c = a.includes("j") ? jb(a, b) : oa.get(b);
|
|
479
|
+
typeof c != "function" && L("unknown function pointer with signature " + a + ": " + b);
|
|
480
|
+
return c;
|
|
481
|
+
}
|
|
482
|
+
var mb = undefined;
|
|
483
|
+
function nb(a, b) {
|
|
484
|
+
function c(f) {
|
|
485
|
+
e[f] || R[f] || (Ya[f] ? Ya[f].forEach(c) : (d.push(f), e[f] = true));
|
|
486
|
+
}
|
|
487
|
+
var d = [], e = {};
|
|
488
|
+
b.forEach(c);
|
|
489
|
+
throw new mb(a + ": " + d.map(Ja).join([", "]));
|
|
490
|
+
}
|
|
491
|
+
function ob(a, b, c, d, e) {
|
|
492
|
+
var f = b.length;
|
|
493
|
+
2 > f && L("argTypes array size mismatch! Must at least get return value and 'this' types!");
|
|
494
|
+
var g = b[1] !== null && c !== null, k = false;
|
|
495
|
+
for (c = 1;c < b.length; ++c)
|
|
496
|
+
if (b[c] !== null && b[c].V === undefined) {
|
|
497
|
+
k = true;
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
var m = b[0].name !== "void", l = f - 2, n = Array(l), p = [], r = [];
|
|
501
|
+
return function() {
|
|
502
|
+
arguments.length !== l && L("function " + a + " called with " + arguments.length + " arguments, expected " + l + " args!");
|
|
503
|
+
r.length = 0;
|
|
504
|
+
p.length = g ? 2 : 1;
|
|
505
|
+
p[0] = e;
|
|
506
|
+
if (g) {
|
|
507
|
+
var u = b[1].toWireType(r, this);
|
|
508
|
+
p[1] = u;
|
|
509
|
+
}
|
|
510
|
+
for (var t = 0;t < l; ++t)
|
|
511
|
+
n[t] = b[t + 2].toWireType(r, arguments[t]), p.push(n[t]);
|
|
512
|
+
t = d.apply(null, p);
|
|
513
|
+
if (k)
|
|
514
|
+
Wa(r);
|
|
515
|
+
else
|
|
516
|
+
for (var y = g ? 1 : 2;y < b.length; y++) {
|
|
517
|
+
var B = y === 1 ? u : n[y - 2];
|
|
518
|
+
b[y].V !== null && b[y].V(B);
|
|
519
|
+
}
|
|
520
|
+
u = m ? b[0].fromWireType(t) : undefined;
|
|
521
|
+
return u;
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
function pb(a, b) {
|
|
525
|
+
for (var c = [], d = 0;d < a; d++)
|
|
526
|
+
c.push(E[b + 4 * d >> 2]);
|
|
527
|
+
return c;
|
|
528
|
+
}
|
|
529
|
+
function qb(a) {
|
|
530
|
+
4 < a && --J[a].ga === 0 && (J[a] = undefined, Ca.push(a));
|
|
531
|
+
}
|
|
532
|
+
function fb(a) {
|
|
533
|
+
if (a === null)
|
|
534
|
+
return "null";
|
|
535
|
+
var b = typeof a;
|
|
536
|
+
return b === "object" || b === "array" || b === "function" ? a.toString() : "" + a;
|
|
537
|
+
}
|
|
538
|
+
function rb(a, b) {
|
|
539
|
+
switch (b) {
|
|
540
|
+
case 2:
|
|
541
|
+
return function(c) {
|
|
542
|
+
return this.fromWireType(la[c >> 2]);
|
|
543
|
+
};
|
|
544
|
+
case 3:
|
|
545
|
+
return function(c) {
|
|
546
|
+
return this.fromWireType(ma[c >> 3]);
|
|
547
|
+
};
|
|
548
|
+
default:
|
|
549
|
+
throw new TypeError("Unknown float type: " + a);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
function sb(a, b, c) {
|
|
553
|
+
switch (b) {
|
|
554
|
+
case 0:
|
|
555
|
+
return c ? function(d) {
|
|
556
|
+
return ja[d];
|
|
557
|
+
} : function(d) {
|
|
558
|
+
return A[d];
|
|
559
|
+
};
|
|
560
|
+
case 1:
|
|
561
|
+
return c ? function(d) {
|
|
562
|
+
return C[d >> 1];
|
|
563
|
+
} : function(d) {
|
|
564
|
+
return ka[d >> 1];
|
|
565
|
+
};
|
|
566
|
+
case 2:
|
|
567
|
+
return c ? function(d) {
|
|
568
|
+
return D[d >> 2];
|
|
569
|
+
} : function(d) {
|
|
570
|
+
return E[d >> 2];
|
|
571
|
+
};
|
|
572
|
+
default:
|
|
573
|
+
throw new TypeError("Unknown integer type: " + a);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
function tb(a, b) {
|
|
577
|
+
for (var c = "", d = 0;!(d >= b / 2); ++d) {
|
|
578
|
+
var e = C[a + 2 * d >> 1];
|
|
579
|
+
if (e == 0)
|
|
580
|
+
break;
|
|
581
|
+
c += String.fromCharCode(e);
|
|
582
|
+
}
|
|
583
|
+
return c;
|
|
584
|
+
}
|
|
585
|
+
function ub(a, b, c) {
|
|
586
|
+
c === undefined && (c = 2147483647);
|
|
587
|
+
if (2 > c)
|
|
588
|
+
return 0;
|
|
589
|
+
c -= 2;
|
|
590
|
+
var d = b;
|
|
591
|
+
c = c < 2 * a.length ? c / 2 : a.length;
|
|
592
|
+
for (var e = 0;e < c; ++e)
|
|
593
|
+
C[b >> 1] = a.charCodeAt(e), b += 2;
|
|
594
|
+
C[b >> 1] = 0;
|
|
595
|
+
return b - d;
|
|
596
|
+
}
|
|
597
|
+
function vb(a) {
|
|
598
|
+
return 2 * a.length;
|
|
599
|
+
}
|
|
600
|
+
function wb(a, b) {
|
|
601
|
+
for (var c = 0, d = "";!(c >= b / 4); ) {
|
|
602
|
+
var e = D[a + 4 * c >> 2];
|
|
603
|
+
if (e == 0)
|
|
604
|
+
break;
|
|
605
|
+
++c;
|
|
606
|
+
65536 <= e ? (e -= 65536, d += String.fromCharCode(55296 | e >> 10, 56320 | e & 1023)) : d += String.fromCharCode(e);
|
|
607
|
+
}
|
|
608
|
+
return d;
|
|
609
|
+
}
|
|
610
|
+
function xb(a, b, c) {
|
|
611
|
+
c === undefined && (c = 2147483647);
|
|
612
|
+
if (4 > c)
|
|
613
|
+
return 0;
|
|
614
|
+
var d = b;
|
|
615
|
+
c = d + c - 4;
|
|
616
|
+
for (var e = 0;e < a.length; ++e) {
|
|
617
|
+
var f = a.charCodeAt(e);
|
|
618
|
+
if (55296 <= f && 57343 >= f) {
|
|
619
|
+
var g = a.charCodeAt(++e);
|
|
620
|
+
f = 65536 + ((f & 1023) << 10) | g & 1023;
|
|
621
|
+
}
|
|
622
|
+
D[b >> 2] = f;
|
|
623
|
+
b += 4;
|
|
624
|
+
if (b + 4 > c)
|
|
625
|
+
break;
|
|
626
|
+
}
|
|
627
|
+
D[b >> 2] = 0;
|
|
628
|
+
return b - d;
|
|
629
|
+
}
|
|
630
|
+
function yb(a) {
|
|
631
|
+
for (var b = 0, c = 0;c < a.length; ++c) {
|
|
632
|
+
var d = a.charCodeAt(c);
|
|
633
|
+
55296 <= d && 57343 >= d && ++c;
|
|
634
|
+
b += 4;
|
|
635
|
+
}
|
|
636
|
+
return b;
|
|
637
|
+
}
|
|
638
|
+
var zb = {};
|
|
639
|
+
function Ab(a) {
|
|
640
|
+
var b = zb[a];
|
|
641
|
+
return b === undefined ? N(a) : b;
|
|
642
|
+
}
|
|
643
|
+
var Bb = [];
|
|
644
|
+
function Cb(a) {
|
|
645
|
+
var b = Bb.length;
|
|
646
|
+
Bb.push(a);
|
|
647
|
+
return b;
|
|
648
|
+
}
|
|
649
|
+
function Db(a, b) {
|
|
650
|
+
for (var c = Array(a), d = 0;d < a; ++d)
|
|
651
|
+
c[d] = La(E[b + 4 * d >> 2], "parameter " + d);
|
|
652
|
+
return c;
|
|
653
|
+
}
|
|
654
|
+
var Eb = [], Fb = [null, [], []];
|
|
655
|
+
K = h.BindingError = Da("BindingError");
|
|
656
|
+
h.count_emval_handles = function() {
|
|
657
|
+
for (var a = 0, b = 5;b < J.length; ++b)
|
|
658
|
+
J[b] !== undefined && ++a;
|
|
659
|
+
return a;
|
|
660
|
+
};
|
|
661
|
+
h.get_first_emval = function() {
|
|
662
|
+
for (var a = 5;a < J.length; ++a)
|
|
663
|
+
if (J[a] !== undefined)
|
|
664
|
+
return J[a];
|
|
665
|
+
return null;
|
|
666
|
+
};
|
|
667
|
+
Fa = h.PureVirtualError = Da("PureVirtualError");
|
|
668
|
+
for (var Gb = Array(256), Hb = 0;256 > Hb; ++Hb)
|
|
669
|
+
Gb[Hb] = String.fromCharCode(Hb);
|
|
670
|
+
Ga = Gb;
|
|
671
|
+
h.getInheritedInstanceCount = function() {
|
|
672
|
+
return Object.keys(Q).length;
|
|
673
|
+
};
|
|
674
|
+
h.getLiveInheritedInstances = function() {
|
|
675
|
+
var a = [], b;
|
|
676
|
+
for (b in Q)
|
|
677
|
+
Q.hasOwnProperty(b) && a.push(Q[b]);
|
|
678
|
+
return a;
|
|
679
|
+
};
|
|
680
|
+
h.flushPendingDeletes = Ha;
|
|
681
|
+
h.setDelayFunction = function(a) {
|
|
682
|
+
P = a;
|
|
683
|
+
O.length && P && P(Ha);
|
|
684
|
+
};
|
|
685
|
+
Sa = h.InternalError = Da("InternalError");
|
|
686
|
+
X.prototype.isAliasOf = function(a) {
|
|
687
|
+
if (!(this instanceof X && a instanceof X))
|
|
688
|
+
return false;
|
|
689
|
+
var b = this.M.P.N, c = this.M.O, d = a.M.P.N;
|
|
690
|
+
for (a = a.M.O;b.R; )
|
|
691
|
+
c = b.ba(c), b = b.R;
|
|
692
|
+
for (;d.R; )
|
|
693
|
+
a = d.ba(a), d = d.R;
|
|
694
|
+
return b === d && c === a;
|
|
695
|
+
};
|
|
696
|
+
X.prototype.clone = function() {
|
|
697
|
+
this.M.O || $a(this);
|
|
698
|
+
if (this.M.aa)
|
|
699
|
+
return this.M.count.value += 1, this;
|
|
700
|
+
var a = T, b = Object, c = b.create, d = Object.getPrototypeOf(this), e = this.M;
|
|
701
|
+
a = a(c.call(b, d, { M: { value: { count: e.count, $: e.$, aa: e.aa, O: e.O, P: e.P, T: e.T, U: e.U } } }));
|
|
702
|
+
a.M.count.value += 1;
|
|
703
|
+
a.M.$ = false;
|
|
704
|
+
return a;
|
|
705
|
+
};
|
|
706
|
+
X.prototype["delete"] = function() {
|
|
707
|
+
this.M.O || $a(this);
|
|
708
|
+
this.M.$ && !this.M.aa && L("Object already scheduled for deletion");
|
|
709
|
+
Ma(this);
|
|
710
|
+
Oa(this.M);
|
|
711
|
+
this.M.aa || (this.M.T = undefined, this.M.O = undefined);
|
|
712
|
+
};
|
|
713
|
+
X.prototype.isDeleted = function() {
|
|
714
|
+
return !this.M.O;
|
|
715
|
+
};
|
|
716
|
+
X.prototype.deleteLater = function() {
|
|
717
|
+
this.M.O || $a(this);
|
|
718
|
+
this.M.$ && !this.M.aa && L("Object already scheduled for deletion");
|
|
719
|
+
O.push(this);
|
|
720
|
+
O.length === 1 && P && P(Ha);
|
|
721
|
+
this.M.$ = true;
|
|
722
|
+
return this;
|
|
723
|
+
};
|
|
724
|
+
Y.prototype.qa = function(a) {
|
|
725
|
+
this.ka && (a = this.ka(a));
|
|
726
|
+
return a;
|
|
727
|
+
};
|
|
728
|
+
Y.prototype.ha = function(a) {
|
|
729
|
+
this.W && this.W(a);
|
|
730
|
+
};
|
|
731
|
+
Y.prototype.argPackAdvance = 8;
|
|
732
|
+
Y.prototype.readValueFromPointer = Xa;
|
|
733
|
+
Y.prototype.deleteObject = function(a) {
|
|
734
|
+
if (a !== null)
|
|
735
|
+
a["delete"]();
|
|
736
|
+
};
|
|
737
|
+
Y.prototype.fromWireType = function(a) {
|
|
738
|
+
function b() {
|
|
739
|
+
return this.da ? Ua(this.N.X, { P: this.wa, O: c, U: this, T: a }) : Ua(this.N.X, { P: this, O: a });
|
|
740
|
+
}
|
|
741
|
+
var c = this.qa(a);
|
|
742
|
+
if (!c)
|
|
743
|
+
return this.ha(a), null;
|
|
744
|
+
var d = Ra(this.N, c);
|
|
745
|
+
if (d !== undefined) {
|
|
746
|
+
if (d.M.count.value === 0)
|
|
747
|
+
return d.M.O = c, d.M.T = a, d.clone();
|
|
748
|
+
d = d.clone();
|
|
749
|
+
this.ha(a);
|
|
750
|
+
return d;
|
|
751
|
+
}
|
|
752
|
+
d = this.N.pa(c);
|
|
753
|
+
d = Qa[d];
|
|
754
|
+
if (!d)
|
|
755
|
+
return b.call(this);
|
|
756
|
+
d = this.ca ? d.la : d.pointerType;
|
|
757
|
+
var e = Pa(c, this.N, d.N);
|
|
758
|
+
return e === null ? b.call(this) : this.da ? Ua(d.N.X, { P: d, O: e, U: this, T: a }) : Ua(d.N.X, { P: d, O: e });
|
|
759
|
+
};
|
|
760
|
+
mb = h.UnboundTypeError = Da("UnboundTypeError");
|
|
761
|
+
var xa = typeof atob == "function" ? atob : function(a) {
|
|
762
|
+
var b = "", c = 0;
|
|
763
|
+
a = a.replace(/[^A-Za-z0-9\+\/=]/g, "");
|
|
764
|
+
do {
|
|
765
|
+
var d = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));
|
|
766
|
+
var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));
|
|
767
|
+
var f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));
|
|
768
|
+
var g = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a.charAt(c++));
|
|
769
|
+
d = d << 2 | e >> 4;
|
|
770
|
+
e = (e & 15) << 4 | f >> 2;
|
|
771
|
+
var k = (f & 3) << 6 | g;
|
|
772
|
+
b += String.fromCharCode(d);
|
|
773
|
+
f !== 64 && (b += String.fromCharCode(e));
|
|
774
|
+
g !== 64 && (b += String.fromCharCode(k));
|
|
775
|
+
} while (c < a.length);
|
|
776
|
+
return b;
|
|
777
|
+
}, Jb = {
|
|
778
|
+
l: function(a, b, c, d) {
|
|
779
|
+
x("Assertion failed: " + (a ? z(A, a) : "") + ", at: " + [b ? b ? z(A, b) : "" : "unknown filename", c, d ? d ? z(A, d) : "" : "unknown function"]);
|
|
780
|
+
},
|
|
781
|
+
q: function(a, b, c) {
|
|
782
|
+
a = N(a);
|
|
783
|
+
b = La(b, "wrapper");
|
|
784
|
+
c = M(c);
|
|
785
|
+
var d = [].slice, e = b.N, f = e.X, g = e.R.X, k = e.R.constructor;
|
|
786
|
+
a = Ba(a, function() {
|
|
787
|
+
e.R.ja.forEach(function(l) {
|
|
788
|
+
if (this[l] === g[l])
|
|
789
|
+
throw new Fa("Pure virtual function " + l + " must be implemented in JavaScript");
|
|
790
|
+
}.bind(this));
|
|
791
|
+
Object.defineProperty(this, "__parent", { value: f });
|
|
792
|
+
this.__construct.apply(this, d.call(arguments));
|
|
793
|
+
});
|
|
794
|
+
f.__construct = function() {
|
|
795
|
+
this === f && L("Pass correct 'this' to __construct");
|
|
796
|
+
var l = k.implement.apply(undefined, [this].concat(d.call(arguments)));
|
|
797
|
+
Ma(l);
|
|
798
|
+
var n = l.M;
|
|
799
|
+
l.notifyOnDestruction();
|
|
800
|
+
n.aa = true;
|
|
801
|
+
Object.defineProperties(this, { M: { value: n } });
|
|
802
|
+
T(this);
|
|
803
|
+
l = n.O;
|
|
804
|
+
l = Ia(e, l);
|
|
805
|
+
Q.hasOwnProperty(l) ? L("Tried to register registered instance: " + l) : Q[l] = this;
|
|
806
|
+
};
|
|
807
|
+
f.__destruct = function() {
|
|
808
|
+
this === f && L("Pass correct 'this' to __destruct");
|
|
809
|
+
Ma(this);
|
|
810
|
+
var l = this.M.O;
|
|
811
|
+
l = Ia(e, l);
|
|
812
|
+
Q.hasOwnProperty(l) ? delete Q[l] : L("Tried to unregister unregistered instance: " + l);
|
|
813
|
+
};
|
|
814
|
+
a.prototype = Object.create(f);
|
|
815
|
+
for (var m in c)
|
|
816
|
+
a.prototype[m] = c[m];
|
|
817
|
+
return Ea(a);
|
|
818
|
+
},
|
|
819
|
+
j: function(a) {
|
|
820
|
+
var b = Va[a];
|
|
821
|
+
delete Va[a];
|
|
822
|
+
var { fa: c, W: d, ia: e } = b, f = e.map((g) => g.ta).concat(e.map((g) => g.za));
|
|
823
|
+
V([a], f, (g) => {
|
|
824
|
+
var k = {};
|
|
825
|
+
e.forEach((m, l) => {
|
|
826
|
+
var n = g[l], p = m.ra, r = m.sa, u = g[l + e.length], t = m.ya, y = m.Aa;
|
|
827
|
+
k[m.oa] = { read: (B) => n.fromWireType(p(r, B)), write: (B, ba) => {
|
|
828
|
+
var I = [];
|
|
829
|
+
t(y, B, u.toWireType(I, ba));
|
|
830
|
+
Wa(I);
|
|
831
|
+
} };
|
|
832
|
+
});
|
|
833
|
+
return [{ name: b.name, fromWireType: function(m) {
|
|
834
|
+
var l = {}, n;
|
|
835
|
+
for (n in k)
|
|
836
|
+
l[n] = k[n].read(m);
|
|
837
|
+
d(m);
|
|
838
|
+
return l;
|
|
839
|
+
}, toWireType: function(m, l) {
|
|
840
|
+
for (var n in k)
|
|
841
|
+
if (!(n in l))
|
|
842
|
+
throw new TypeError('Missing field: "' + n + '"');
|
|
843
|
+
var p = c();
|
|
844
|
+
for (n in k)
|
|
845
|
+
k[n].write(p, l[n]);
|
|
846
|
+
m !== null && m.push(d, p);
|
|
847
|
+
return p;
|
|
848
|
+
}, argPackAdvance: 8, readValueFromPointer: Xa, V: d }];
|
|
849
|
+
});
|
|
850
|
+
},
|
|
851
|
+
v: function() {},
|
|
852
|
+
B: function(a, b, c, d, e) {
|
|
853
|
+
var f = Za(c);
|
|
854
|
+
b = N(b);
|
|
855
|
+
W(a, {
|
|
856
|
+
name: b,
|
|
857
|
+
fromWireType: function(g) {
|
|
858
|
+
return !!g;
|
|
859
|
+
},
|
|
860
|
+
toWireType: function(g, k) {
|
|
861
|
+
return k ? d : e;
|
|
862
|
+
},
|
|
863
|
+
argPackAdvance: 8,
|
|
864
|
+
readValueFromPointer: function(g) {
|
|
865
|
+
if (c === 1)
|
|
866
|
+
var k = ja;
|
|
867
|
+
else if (c === 2)
|
|
868
|
+
k = C;
|
|
869
|
+
else if (c === 4)
|
|
870
|
+
k = D;
|
|
871
|
+
else
|
|
872
|
+
throw new TypeError("Unknown boolean type size: " + b);
|
|
873
|
+
return this.fromWireType(k[g >> f]);
|
|
874
|
+
},
|
|
875
|
+
V: null
|
|
876
|
+
});
|
|
877
|
+
},
|
|
878
|
+
f: function(a, b, c, d, e, f, g, k, m, l, n, p, r) {
|
|
879
|
+
n = N(n);
|
|
880
|
+
f = Z(e, f);
|
|
881
|
+
k && (k = Z(g, k));
|
|
882
|
+
l && (l = Z(m, l));
|
|
883
|
+
r = Z(p, r);
|
|
884
|
+
var u = Aa(n);
|
|
885
|
+
bb(u, function() {
|
|
886
|
+
nb("Cannot construct " + n + " due to unbound types", [d]);
|
|
887
|
+
});
|
|
888
|
+
V([a, b, c], d ? [d] : [], function(t) {
|
|
889
|
+
t = t[0];
|
|
890
|
+
if (d) {
|
|
891
|
+
var y = t.N;
|
|
892
|
+
var B = y.X;
|
|
893
|
+
} else
|
|
894
|
+
B = X.prototype;
|
|
895
|
+
t = Ba(u, function() {
|
|
896
|
+
if (Object.getPrototypeOf(this) !== ba)
|
|
897
|
+
throw new K("Use 'new' to construct " + n);
|
|
898
|
+
if (I.Y === undefined)
|
|
899
|
+
throw new K(n + " has no accessible constructor");
|
|
900
|
+
var kb = I.Y[arguments.length];
|
|
901
|
+
if (kb === undefined)
|
|
902
|
+
throw new K("Tried to invoke ctor of " + n + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(I.Y).toString() + ") parameters instead!");
|
|
903
|
+
return kb.apply(this, arguments);
|
|
904
|
+
});
|
|
905
|
+
var ba = Object.create(B, { constructor: { value: t } });
|
|
906
|
+
t.prototype = ba;
|
|
907
|
+
var I = new cb(n, t, ba, r, y, f, k, l);
|
|
908
|
+
y = new Y(n, I, true, false);
|
|
909
|
+
B = new Y(n + "*", I, false, false);
|
|
910
|
+
var lb = new Y(n + " const*", I, false, true);
|
|
911
|
+
Qa[a] = {
|
|
912
|
+
pointerType: B,
|
|
913
|
+
la: lb
|
|
914
|
+
};
|
|
915
|
+
ib(u, t);
|
|
916
|
+
return [y, B, lb];
|
|
917
|
+
});
|
|
918
|
+
},
|
|
919
|
+
d: function(a, b, c, d, e, f, g) {
|
|
920
|
+
var k = pb(c, d);
|
|
921
|
+
b = N(b);
|
|
922
|
+
f = Z(e, f);
|
|
923
|
+
V([], [a], function(m) {
|
|
924
|
+
function l() {
|
|
925
|
+
nb("Cannot call " + n + " due to unbound types", k);
|
|
926
|
+
}
|
|
927
|
+
m = m[0];
|
|
928
|
+
var n = m.name + "." + b;
|
|
929
|
+
b.startsWith("@@") && (b = Symbol[b.substring(2)]);
|
|
930
|
+
var p = m.N.constructor;
|
|
931
|
+
p[b] === undefined ? (l.Z = c - 1, p[b] = l) : (ab(p, b, n), p[b].S[c - 1] = l);
|
|
932
|
+
V([], k, function(r) {
|
|
933
|
+
r = ob(n, [r[0], null].concat(r.slice(1)), null, f, g);
|
|
934
|
+
p[b].S === undefined ? (r.Z = c - 1, p[b] = r) : p[b].S[c - 1] = r;
|
|
935
|
+
return [];
|
|
936
|
+
});
|
|
937
|
+
return [];
|
|
938
|
+
});
|
|
939
|
+
},
|
|
940
|
+
p: function(a, b, c, d, e, f) {
|
|
941
|
+
0 < b || x();
|
|
942
|
+
var g = pb(b, c);
|
|
943
|
+
e = Z(d, e);
|
|
944
|
+
V([], [a], function(k) {
|
|
945
|
+
k = k[0];
|
|
946
|
+
var m = "constructor " + k.name;
|
|
947
|
+
k.N.Y === undefined && (k.N.Y = []);
|
|
948
|
+
if (k.N.Y[b - 1] !== undefined)
|
|
949
|
+
throw new K("Cannot register multiple constructors with identical number of parameters (" + (b - 1) + ") for class '" + k.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!");
|
|
950
|
+
k.N.Y[b - 1] = () => {
|
|
951
|
+
nb("Cannot construct " + k.name + " due to unbound types", g);
|
|
952
|
+
};
|
|
953
|
+
V([], g, function(l) {
|
|
954
|
+
l.splice(1, 0, null);
|
|
955
|
+
k.N.Y[b - 1] = ob(m, l, null, e, f);
|
|
956
|
+
return [];
|
|
957
|
+
});
|
|
958
|
+
return [];
|
|
959
|
+
});
|
|
960
|
+
},
|
|
961
|
+
a: function(a, b, c, d, e, f, g, k) {
|
|
962
|
+
var m = pb(c, d);
|
|
963
|
+
b = N(b);
|
|
964
|
+
f = Z(e, f);
|
|
965
|
+
V([], [a], function(l) {
|
|
966
|
+
function n() {
|
|
967
|
+
nb("Cannot call " + p + " due to unbound types", m);
|
|
968
|
+
}
|
|
969
|
+
l = l[0];
|
|
970
|
+
var p = l.name + "." + b;
|
|
971
|
+
b.startsWith("@@") && (b = Symbol[b.substring(2)]);
|
|
972
|
+
k && l.N.ja.push(b);
|
|
973
|
+
var r = l.N.X, u = r[b];
|
|
974
|
+
u === undefined || u.S === undefined && u.className !== l.name && u.Z === c - 2 ? (n.Z = c - 2, n.className = l.name, r[b] = n) : (ab(r, b, p), r[b].S[c - 2] = n);
|
|
975
|
+
V([], m, function(t) {
|
|
976
|
+
t = ob(p, t, l, f, g);
|
|
977
|
+
r[b].S === undefined ? (t.Z = c - 2, r[b] = t) : r[b].S[c - 2] = t;
|
|
978
|
+
return [];
|
|
979
|
+
});
|
|
980
|
+
return [];
|
|
981
|
+
});
|
|
982
|
+
},
|
|
983
|
+
A: function(a, b) {
|
|
984
|
+
b = N(b);
|
|
985
|
+
W(a, { name: b, fromWireType: function(c) {
|
|
986
|
+
var d = M(c);
|
|
987
|
+
qb(c);
|
|
988
|
+
return d;
|
|
989
|
+
}, toWireType: function(c, d) {
|
|
990
|
+
return Ea(d);
|
|
991
|
+
}, argPackAdvance: 8, readValueFromPointer: Xa, V: null });
|
|
992
|
+
},
|
|
993
|
+
n: function(a, b, c) {
|
|
994
|
+
c = Za(c);
|
|
995
|
+
b = N(b);
|
|
996
|
+
W(a, { name: b, fromWireType: function(d) {
|
|
997
|
+
return d;
|
|
998
|
+
}, toWireType: function(d, e) {
|
|
999
|
+
return e;
|
|
1000
|
+
}, argPackAdvance: 8, readValueFromPointer: rb(b, c), V: null });
|
|
1001
|
+
},
|
|
1002
|
+
e: function(a, b, c, d, e) {
|
|
1003
|
+
b = N(b);
|
|
1004
|
+
e === -1 && (e = 4294967295);
|
|
1005
|
+
e = Za(c);
|
|
1006
|
+
var f = (k) => k;
|
|
1007
|
+
if (d === 0) {
|
|
1008
|
+
var g = 32 - 8 * c;
|
|
1009
|
+
f = (k) => k << g >>> g;
|
|
1010
|
+
}
|
|
1011
|
+
c = b.includes("unsigned") ? function(k, m) {
|
|
1012
|
+
return m >>> 0;
|
|
1013
|
+
} : function(k, m) {
|
|
1014
|
+
return m;
|
|
1015
|
+
};
|
|
1016
|
+
W(a, { name: b, fromWireType: f, toWireType: c, argPackAdvance: 8, readValueFromPointer: sb(b, e, d !== 0), V: null });
|
|
1017
|
+
},
|
|
1018
|
+
b: function(a, b, c) {
|
|
1019
|
+
function d(f) {
|
|
1020
|
+
f >>= 2;
|
|
1021
|
+
var g = E;
|
|
1022
|
+
return new e(ia, g[f + 1], g[f]);
|
|
1023
|
+
}
|
|
1024
|
+
var e = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array][b];
|
|
1025
|
+
c = N(c);
|
|
1026
|
+
W(a, { name: c, fromWireType: d, argPackAdvance: 8, readValueFromPointer: d }, { ua: true });
|
|
1027
|
+
},
|
|
1028
|
+
o: function(a, b) {
|
|
1029
|
+
b = N(b);
|
|
1030
|
+
var c = b === "std::string";
|
|
1031
|
+
W(a, { name: b, fromWireType: function(d) {
|
|
1032
|
+
var e = E[d >> 2], f = d + 4;
|
|
1033
|
+
if (c)
|
|
1034
|
+
for (var g = f, k = 0;k <= e; ++k) {
|
|
1035
|
+
var m = f + k;
|
|
1036
|
+
if (k == e || A[m] == 0) {
|
|
1037
|
+
g = g ? z(A, g, m - g) : "";
|
|
1038
|
+
if (l === undefined)
|
|
1039
|
+
var l = g;
|
|
1040
|
+
else
|
|
1041
|
+
l += String.fromCharCode(0), l += g;
|
|
1042
|
+
g = m + 1;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
else {
|
|
1046
|
+
l = Array(e);
|
|
1047
|
+
for (k = 0;k < e; ++k)
|
|
1048
|
+
l[k] = String.fromCharCode(A[f + k]);
|
|
1049
|
+
l = l.join("");
|
|
1050
|
+
}
|
|
1051
|
+
S(d);
|
|
1052
|
+
return l;
|
|
1053
|
+
}, toWireType: function(d, e) {
|
|
1054
|
+
e instanceof ArrayBuffer && (e = new Uint8Array(e));
|
|
1055
|
+
var f, g = typeof e == "string";
|
|
1056
|
+
g || e instanceof Uint8Array || e instanceof Uint8ClampedArray || e instanceof Int8Array || L("Cannot pass non-string to std::string");
|
|
1057
|
+
if (c && g) {
|
|
1058
|
+
var k = 0;
|
|
1059
|
+
for (f = 0;f < e.length; ++f) {
|
|
1060
|
+
var m = e.charCodeAt(f);
|
|
1061
|
+
127 >= m ? k++ : 2047 >= m ? k += 2 : 55296 <= m && 57343 >= m ? (k += 4, ++f) : k += 3;
|
|
1062
|
+
}
|
|
1063
|
+
f = k;
|
|
1064
|
+
} else
|
|
1065
|
+
f = e.length;
|
|
1066
|
+
k = Ib(4 + f + 1);
|
|
1067
|
+
m = k + 4;
|
|
1068
|
+
E[k >> 2] = f;
|
|
1069
|
+
if (c && g) {
|
|
1070
|
+
if (g = m, m = f + 1, f = A, 0 < m) {
|
|
1071
|
+
m = g + m - 1;
|
|
1072
|
+
for (var l = 0;l < e.length; ++l) {
|
|
1073
|
+
var n = e.charCodeAt(l);
|
|
1074
|
+
if (55296 <= n && 57343 >= n) {
|
|
1075
|
+
var p = e.charCodeAt(++l);
|
|
1076
|
+
n = 65536 + ((n & 1023) << 10) | p & 1023;
|
|
1077
|
+
}
|
|
1078
|
+
if (127 >= n) {
|
|
1079
|
+
if (g >= m)
|
|
1080
|
+
break;
|
|
1081
|
+
f[g++] = n;
|
|
1082
|
+
} else {
|
|
1083
|
+
if (2047 >= n) {
|
|
1084
|
+
if (g + 1 >= m)
|
|
1085
|
+
break;
|
|
1086
|
+
f[g++] = 192 | n >> 6;
|
|
1087
|
+
} else {
|
|
1088
|
+
if (65535 >= n) {
|
|
1089
|
+
if (g + 2 >= m)
|
|
1090
|
+
break;
|
|
1091
|
+
f[g++] = 224 | n >> 12;
|
|
1092
|
+
} else {
|
|
1093
|
+
if (g + 3 >= m)
|
|
1094
|
+
break;
|
|
1095
|
+
f[g++] = 240 | n >> 18;
|
|
1096
|
+
f[g++] = 128 | n >> 12 & 63;
|
|
1097
|
+
}
|
|
1098
|
+
f[g++] = 128 | n >> 6 & 63;
|
|
1099
|
+
}
|
|
1100
|
+
f[g++] = 128 | n & 63;
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
f[g] = 0;
|
|
1104
|
+
}
|
|
1105
|
+
} else if (g)
|
|
1106
|
+
for (g = 0;g < f; ++g)
|
|
1107
|
+
l = e.charCodeAt(g), 255 < l && (S(m), L("String has UTF-16 code units that do not fit in 8 bits")), A[m + g] = l;
|
|
1108
|
+
else
|
|
1109
|
+
for (g = 0;g < f; ++g)
|
|
1110
|
+
A[m + g] = e[g];
|
|
1111
|
+
d !== null && d.push(S, k);
|
|
1112
|
+
return k;
|
|
1113
|
+
}, argPackAdvance: 8, readValueFromPointer: Xa, V: function(d) {
|
|
1114
|
+
S(d);
|
|
1115
|
+
} });
|
|
1116
|
+
},
|
|
1117
|
+
i: function(a, b, c) {
|
|
1118
|
+
c = N(c);
|
|
1119
|
+
if (b === 2) {
|
|
1120
|
+
var d = tb;
|
|
1121
|
+
var e = ub;
|
|
1122
|
+
var f = vb;
|
|
1123
|
+
var g = () => ka;
|
|
1124
|
+
var k = 1;
|
|
1125
|
+
} else
|
|
1126
|
+
b === 4 && (d = wb, e = xb, f = yb, g = () => E, k = 2);
|
|
1127
|
+
W(a, { name: c, fromWireType: function(m) {
|
|
1128
|
+
for (var l = E[m >> 2], n = g(), p, r = m + 4, u = 0;u <= l; ++u) {
|
|
1129
|
+
var t = m + 4 + u * b;
|
|
1130
|
+
if (u == l || n[t >> k] == 0)
|
|
1131
|
+
r = d(r, t - r), p === undefined ? p = r : (p += String.fromCharCode(0), p += r), r = t + b;
|
|
1132
|
+
}
|
|
1133
|
+
S(m);
|
|
1134
|
+
return p;
|
|
1135
|
+
}, toWireType: function(m, l) {
|
|
1136
|
+
typeof l != "string" && L("Cannot pass non-string to C++ string type " + c);
|
|
1137
|
+
var n = f(l), p = Ib(4 + n + b);
|
|
1138
|
+
E[p >> 2] = n >> k;
|
|
1139
|
+
e(l, p + 4, n + b);
|
|
1140
|
+
m !== null && m.push(S, p);
|
|
1141
|
+
return p;
|
|
1142
|
+
}, argPackAdvance: 8, readValueFromPointer: Xa, V: function(m) {
|
|
1143
|
+
S(m);
|
|
1144
|
+
} });
|
|
1145
|
+
},
|
|
1146
|
+
k: function(a, b, c, d, e, f) {
|
|
1147
|
+
Va[a] = { name: N(b), fa: Z(c, d), W: Z(e, f), ia: [] };
|
|
1148
|
+
},
|
|
1149
|
+
h: function(a, b, c, d, e, f, g, k, m, l) {
|
|
1150
|
+
Va[a].ia.push({ oa: N(b), ta: c, ra: Z(d, e), sa: f, za: g, ya: Z(k, m), Aa: l });
|
|
1151
|
+
},
|
|
1152
|
+
C: function(a, b) {
|
|
1153
|
+
b = N(b);
|
|
1154
|
+
W(a, {
|
|
1155
|
+
va: true,
|
|
1156
|
+
name: b,
|
|
1157
|
+
argPackAdvance: 0,
|
|
1158
|
+
fromWireType: function() {},
|
|
1159
|
+
toWireType: function() {}
|
|
1160
|
+
});
|
|
1161
|
+
},
|
|
1162
|
+
s: function(a, b, c, d, e) {
|
|
1163
|
+
a = Bb[a];
|
|
1164
|
+
b = M(b);
|
|
1165
|
+
c = Ab(c);
|
|
1166
|
+
var f = [];
|
|
1167
|
+
E[d >> 2] = Ea(f);
|
|
1168
|
+
return a(b, c, f, e);
|
|
1169
|
+
},
|
|
1170
|
+
t: function(a, b, c, d) {
|
|
1171
|
+
a = Bb[a];
|
|
1172
|
+
b = M(b);
|
|
1173
|
+
c = Ab(c);
|
|
1174
|
+
a(b, c, null, d);
|
|
1175
|
+
},
|
|
1176
|
+
g: qb,
|
|
1177
|
+
m: function(a, b) {
|
|
1178
|
+
var c = Db(a, b), d = c[0];
|
|
1179
|
+
b = d.name + "_$" + c.slice(1).map(function(g) {
|
|
1180
|
+
return g.name;
|
|
1181
|
+
}).join("_") + "$";
|
|
1182
|
+
var e = Eb[b];
|
|
1183
|
+
if (e !== undefined)
|
|
1184
|
+
return e;
|
|
1185
|
+
var f = Array(a - 1);
|
|
1186
|
+
e = Cb((g, k, m, l) => {
|
|
1187
|
+
for (var n = 0, p = 0;p < a - 1; ++p)
|
|
1188
|
+
f[p] = c[p + 1].readValueFromPointer(l + n), n += c[p + 1].argPackAdvance;
|
|
1189
|
+
g = g[k].apply(g, f);
|
|
1190
|
+
for (p = 0;p < a - 1; ++p)
|
|
1191
|
+
c[p + 1].ma && c[p + 1].ma(f[p]);
|
|
1192
|
+
if (!d.va)
|
|
1193
|
+
return d.toWireType(m, g);
|
|
1194
|
+
});
|
|
1195
|
+
return Eb[b] = e;
|
|
1196
|
+
},
|
|
1197
|
+
D: function(a) {
|
|
1198
|
+
4 < a && (J[a].ga += 1);
|
|
1199
|
+
},
|
|
1200
|
+
r: function(a) {
|
|
1201
|
+
var b = M(a);
|
|
1202
|
+
Wa(b);
|
|
1203
|
+
qb(a);
|
|
1204
|
+
},
|
|
1205
|
+
c: function() {
|
|
1206
|
+
x("");
|
|
1207
|
+
},
|
|
1208
|
+
x: function(a, b, c) {
|
|
1209
|
+
A.copyWithin(a, b, b + c);
|
|
1210
|
+
},
|
|
1211
|
+
w: function(a) {
|
|
1212
|
+
var b = A.length;
|
|
1213
|
+
a >>>= 0;
|
|
1214
|
+
if (2147483648 < a)
|
|
1215
|
+
return false;
|
|
1216
|
+
for (var c = 1;4 >= c; c *= 2) {
|
|
1217
|
+
var d = b * (1 + 0.2 / c);
|
|
1218
|
+
d = Math.min(d, a + 100663296);
|
|
1219
|
+
var e = Math;
|
|
1220
|
+
d = Math.max(a, d);
|
|
1221
|
+
e = e.min.call(e, 2147483648, d + (65536 - d % 65536) % 65536);
|
|
1222
|
+
a: {
|
|
1223
|
+
try {
|
|
1224
|
+
fa.grow(e - ia.byteLength + 65535 >>> 16);
|
|
1225
|
+
na();
|
|
1226
|
+
var f = 1;
|
|
1227
|
+
break a;
|
|
1228
|
+
} catch (g) {}
|
|
1229
|
+
f = undefined;
|
|
1230
|
+
}
|
|
1231
|
+
if (f)
|
|
1232
|
+
return true;
|
|
1233
|
+
}
|
|
1234
|
+
return false;
|
|
1235
|
+
},
|
|
1236
|
+
z: function() {
|
|
1237
|
+
return 52;
|
|
1238
|
+
},
|
|
1239
|
+
u: function() {
|
|
1240
|
+
return 70;
|
|
1241
|
+
},
|
|
1242
|
+
y: function(a, b, c, d) {
|
|
1243
|
+
for (var e = 0, f = 0;f < c; f++) {
|
|
1244
|
+
var g = E[b >> 2], k = E[b + 4 >> 2];
|
|
1245
|
+
b += 8;
|
|
1246
|
+
for (var m = 0;m < k; m++) {
|
|
1247
|
+
var l = A[g + m], n = Fb[a];
|
|
1248
|
+
l === 0 || l === 10 ? ((a === 1 ? ea : v)(z(n, 0)), n.length = 0) : n.push(l);
|
|
1249
|
+
}
|
|
1250
|
+
e += k;
|
|
1251
|
+
}
|
|
1252
|
+
E[d >> 2] = e;
|
|
1253
|
+
return 0;
|
|
1254
|
+
}
|
|
1255
|
+
};
|
|
1256
|
+
(function() {
|
|
1257
|
+
function a(e) {
|
|
1258
|
+
h.asm = e.exports;
|
|
1259
|
+
fa = h.asm.E;
|
|
1260
|
+
na();
|
|
1261
|
+
oa = h.asm.J;
|
|
1262
|
+
qa.unshift(h.asm.F);
|
|
1263
|
+
F--;
|
|
1264
|
+
h.monitorRunDependencies && h.monitorRunDependencies(F);
|
|
1265
|
+
F == 0 && (ta !== null && (clearInterval(ta), ta = null), G && (e = G, G = null, e()));
|
|
1266
|
+
}
|
|
1267
|
+
function b(e) {
|
|
1268
|
+
a(e.instance);
|
|
1269
|
+
}
|
|
1270
|
+
function c(e) {
|
|
1271
|
+
return ya().then(function(f) {
|
|
1272
|
+
return WebAssembly.instantiate(f, d);
|
|
1273
|
+
}).then(function(f) {
|
|
1274
|
+
return f;
|
|
1275
|
+
}).then(e, function(f) {
|
|
1276
|
+
v("failed to asynchronously prepare wasm: " + f);
|
|
1277
|
+
x(f);
|
|
1278
|
+
});
|
|
1279
|
+
}
|
|
1280
|
+
var d = { a: Jb };
|
|
1281
|
+
F++;
|
|
1282
|
+
h.monitorRunDependencies && h.monitorRunDependencies(F);
|
|
1283
|
+
if (h.instantiateWasm)
|
|
1284
|
+
try {
|
|
1285
|
+
return h.instantiateWasm(d, a);
|
|
1286
|
+
} catch (e) {
|
|
1287
|
+
v("Module.instantiateWasm callback failed with error: " + e), ca(e);
|
|
1288
|
+
}
|
|
1289
|
+
(function() {
|
|
1290
|
+
return w || typeof WebAssembly.instantiateStreaming != "function" || ua(H) || typeof fetch != "function" ? c(b) : fetch(H, { credentials: "same-origin" }).then(function(e) {
|
|
1291
|
+
return WebAssembly.instantiateStreaming(e, d).then(b, function(f) {
|
|
1292
|
+
v("wasm streaming compile failed: " + f);
|
|
1293
|
+
v("falling back to ArrayBuffer instantiation");
|
|
1294
|
+
return c(b);
|
|
1295
|
+
});
|
|
1296
|
+
});
|
|
1297
|
+
})().catch(ca);
|
|
1298
|
+
return {};
|
|
1299
|
+
})();
|
|
1300
|
+
h.___wasm_call_ctors = function() {
|
|
1301
|
+
return (h.___wasm_call_ctors = h.asm.F).apply(null, arguments);
|
|
1302
|
+
};
|
|
1303
|
+
var Ka = h.___getTypeName = function() {
|
|
1304
|
+
return (Ka = h.___getTypeName = h.asm.G).apply(null, arguments);
|
|
1305
|
+
};
|
|
1306
|
+
h.__embind_initialize_bindings = function() {
|
|
1307
|
+
return (h.__embind_initialize_bindings = h.asm.H).apply(null, arguments);
|
|
1308
|
+
};
|
|
1309
|
+
var Ib = h._malloc = function() {
|
|
1310
|
+
return (Ib = h._malloc = h.asm.I).apply(null, arguments);
|
|
1311
|
+
}, S = h._free = function() {
|
|
1312
|
+
return (S = h._free = h.asm.K).apply(null, arguments);
|
|
1313
|
+
};
|
|
1314
|
+
h.dynCall_jiji = function() {
|
|
1315
|
+
return (h.dynCall_jiji = h.asm.L).apply(null, arguments);
|
|
1316
|
+
};
|
|
1317
|
+
var Kb;
|
|
1318
|
+
G = function Lb() {
|
|
1319
|
+
Kb || Mb();
|
|
1320
|
+
Kb || (G = Lb);
|
|
1321
|
+
};
|
|
1322
|
+
function Mb() {
|
|
1323
|
+
function a() {
|
|
1324
|
+
if (!Kb && (Kb = true, h.calledRun = true, !ha)) {
|
|
1325
|
+
za(qa);
|
|
1326
|
+
aa(h);
|
|
1327
|
+
if (h.onRuntimeInitialized)
|
|
1328
|
+
h.onRuntimeInitialized();
|
|
1329
|
+
if (h.postRun)
|
|
1330
|
+
for (typeof h.postRun == "function" && (h.postRun = [h.postRun]);h.postRun.length; ) {
|
|
1331
|
+
var b = h.postRun.shift();
|
|
1332
|
+
ra.unshift(b);
|
|
1333
|
+
}
|
|
1334
|
+
za(ra);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
if (!(0 < F)) {
|
|
1338
|
+
if (h.preRun)
|
|
1339
|
+
for (typeof h.preRun == "function" && (h.preRun = [h.preRun]);h.preRun.length; )
|
|
1340
|
+
sa();
|
|
1341
|
+
za(pa);
|
|
1342
|
+
0 < F || (h.setStatus ? (h.setStatus("Running..."), setTimeout(function() {
|
|
1343
|
+
setTimeout(function() {
|
|
1344
|
+
h.setStatus("");
|
|
1345
|
+
}, 1);
|
|
1346
|
+
a();
|
|
1347
|
+
}, 1)) : a());
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
if (h.preInit)
|
|
1351
|
+
for (typeof h.preInit == "function" && (h.preInit = [h.preInit]);0 < h.preInit.length; )
|
|
1352
|
+
h.preInit.pop()();
|
|
1353
|
+
Mb();
|
|
1354
|
+
return loadYoga2.ready;
|
|
1355
|
+
};
|
|
1356
|
+
})();
|
|
1357
|
+
var yoga_wasm_base64_esm_default = loadYoga;
|
|
1358
|
+
|
|
1359
|
+
// ../../node_modules/yoga-layout/dist/src/generated/YGEnums.js
|
|
1360
|
+
var Align = /* @__PURE__ */ function(Align2) {
|
|
1361
|
+
Align2[Align2["Auto"] = 0] = "Auto";
|
|
1362
|
+
Align2[Align2["FlexStart"] = 1] = "FlexStart";
|
|
1363
|
+
Align2[Align2["Center"] = 2] = "Center";
|
|
1364
|
+
Align2[Align2["FlexEnd"] = 3] = "FlexEnd";
|
|
1365
|
+
Align2[Align2["Stretch"] = 4] = "Stretch";
|
|
1366
|
+
Align2[Align2["Baseline"] = 5] = "Baseline";
|
|
1367
|
+
Align2[Align2["SpaceBetween"] = 6] = "SpaceBetween";
|
|
1368
|
+
Align2[Align2["SpaceAround"] = 7] = "SpaceAround";
|
|
1369
|
+
Align2[Align2["SpaceEvenly"] = 8] = "SpaceEvenly";
|
|
1370
|
+
return Align2;
|
|
1371
|
+
}({});
|
|
1372
|
+
var BoxSizing = /* @__PURE__ */ function(BoxSizing2) {
|
|
1373
|
+
BoxSizing2[BoxSizing2["BorderBox"] = 0] = "BorderBox";
|
|
1374
|
+
BoxSizing2[BoxSizing2["ContentBox"] = 1] = "ContentBox";
|
|
1375
|
+
return BoxSizing2;
|
|
1376
|
+
}({});
|
|
1377
|
+
var Dimension = /* @__PURE__ */ function(Dimension2) {
|
|
1378
|
+
Dimension2[Dimension2["Width"] = 0] = "Width";
|
|
1379
|
+
Dimension2[Dimension2["Height"] = 1] = "Height";
|
|
1380
|
+
return Dimension2;
|
|
1381
|
+
}({});
|
|
1382
|
+
var Direction = /* @__PURE__ */ function(Direction2) {
|
|
1383
|
+
Direction2[Direction2["Inherit"] = 0] = "Inherit";
|
|
1384
|
+
Direction2[Direction2["LTR"] = 1] = "LTR";
|
|
1385
|
+
Direction2[Direction2["RTL"] = 2] = "RTL";
|
|
1386
|
+
return Direction2;
|
|
1387
|
+
}({});
|
|
1388
|
+
var Display = /* @__PURE__ */ function(Display2) {
|
|
1389
|
+
Display2[Display2["Flex"] = 0] = "Flex";
|
|
1390
|
+
Display2[Display2["None"] = 1] = "None";
|
|
1391
|
+
Display2[Display2["Contents"] = 2] = "Contents";
|
|
1392
|
+
return Display2;
|
|
1393
|
+
}({});
|
|
1394
|
+
var Edge = /* @__PURE__ */ function(Edge2) {
|
|
1395
|
+
Edge2[Edge2["Left"] = 0] = "Left";
|
|
1396
|
+
Edge2[Edge2["Top"] = 1] = "Top";
|
|
1397
|
+
Edge2[Edge2["Right"] = 2] = "Right";
|
|
1398
|
+
Edge2[Edge2["Bottom"] = 3] = "Bottom";
|
|
1399
|
+
Edge2[Edge2["Start"] = 4] = "Start";
|
|
1400
|
+
Edge2[Edge2["End"] = 5] = "End";
|
|
1401
|
+
Edge2[Edge2["Horizontal"] = 6] = "Horizontal";
|
|
1402
|
+
Edge2[Edge2["Vertical"] = 7] = "Vertical";
|
|
1403
|
+
Edge2[Edge2["All"] = 8] = "All";
|
|
1404
|
+
return Edge2;
|
|
1405
|
+
}({});
|
|
1406
|
+
var Errata = /* @__PURE__ */ function(Errata2) {
|
|
1407
|
+
Errata2[Errata2["None"] = 0] = "None";
|
|
1408
|
+
Errata2[Errata2["StretchFlexBasis"] = 1] = "StretchFlexBasis";
|
|
1409
|
+
Errata2[Errata2["AbsolutePositionWithoutInsetsExcludesPadding"] = 2] = "AbsolutePositionWithoutInsetsExcludesPadding";
|
|
1410
|
+
Errata2[Errata2["AbsolutePercentAgainstInnerSize"] = 4] = "AbsolutePercentAgainstInnerSize";
|
|
1411
|
+
Errata2[Errata2["All"] = 2147483647] = "All";
|
|
1412
|
+
Errata2[Errata2["Classic"] = 2147483646] = "Classic";
|
|
1413
|
+
return Errata2;
|
|
1414
|
+
}({});
|
|
1415
|
+
var ExperimentalFeature = /* @__PURE__ */ function(ExperimentalFeature2) {
|
|
1416
|
+
ExperimentalFeature2[ExperimentalFeature2["WebFlexBasis"] = 0] = "WebFlexBasis";
|
|
1417
|
+
return ExperimentalFeature2;
|
|
1418
|
+
}({});
|
|
1419
|
+
var FlexDirection = /* @__PURE__ */ function(FlexDirection2) {
|
|
1420
|
+
FlexDirection2[FlexDirection2["Column"] = 0] = "Column";
|
|
1421
|
+
FlexDirection2[FlexDirection2["ColumnReverse"] = 1] = "ColumnReverse";
|
|
1422
|
+
FlexDirection2[FlexDirection2["Row"] = 2] = "Row";
|
|
1423
|
+
FlexDirection2[FlexDirection2["RowReverse"] = 3] = "RowReverse";
|
|
1424
|
+
return FlexDirection2;
|
|
1425
|
+
}({});
|
|
1426
|
+
var Gutter = /* @__PURE__ */ function(Gutter2) {
|
|
1427
|
+
Gutter2[Gutter2["Column"] = 0] = "Column";
|
|
1428
|
+
Gutter2[Gutter2["Row"] = 1] = "Row";
|
|
1429
|
+
Gutter2[Gutter2["All"] = 2] = "All";
|
|
1430
|
+
return Gutter2;
|
|
1431
|
+
}({});
|
|
1432
|
+
var Justify = /* @__PURE__ */ function(Justify2) {
|
|
1433
|
+
Justify2[Justify2["FlexStart"] = 0] = "FlexStart";
|
|
1434
|
+
Justify2[Justify2["Center"] = 1] = "Center";
|
|
1435
|
+
Justify2[Justify2["FlexEnd"] = 2] = "FlexEnd";
|
|
1436
|
+
Justify2[Justify2["SpaceBetween"] = 3] = "SpaceBetween";
|
|
1437
|
+
Justify2[Justify2["SpaceAround"] = 4] = "SpaceAround";
|
|
1438
|
+
Justify2[Justify2["SpaceEvenly"] = 5] = "SpaceEvenly";
|
|
1439
|
+
return Justify2;
|
|
1440
|
+
}({});
|
|
1441
|
+
var LogLevel = /* @__PURE__ */ function(LogLevel2) {
|
|
1442
|
+
LogLevel2[LogLevel2["Error"] = 0] = "Error";
|
|
1443
|
+
LogLevel2[LogLevel2["Warn"] = 1] = "Warn";
|
|
1444
|
+
LogLevel2[LogLevel2["Info"] = 2] = "Info";
|
|
1445
|
+
LogLevel2[LogLevel2["Debug"] = 3] = "Debug";
|
|
1446
|
+
LogLevel2[LogLevel2["Verbose"] = 4] = "Verbose";
|
|
1447
|
+
LogLevel2[LogLevel2["Fatal"] = 5] = "Fatal";
|
|
1448
|
+
return LogLevel2;
|
|
1449
|
+
}({});
|
|
1450
|
+
var MeasureMode = /* @__PURE__ */ function(MeasureMode2) {
|
|
1451
|
+
MeasureMode2[MeasureMode2["Undefined"] = 0] = "Undefined";
|
|
1452
|
+
MeasureMode2[MeasureMode2["Exactly"] = 1] = "Exactly";
|
|
1453
|
+
MeasureMode2[MeasureMode2["AtMost"] = 2] = "AtMost";
|
|
1454
|
+
return MeasureMode2;
|
|
1455
|
+
}({});
|
|
1456
|
+
var NodeType = /* @__PURE__ */ function(NodeType2) {
|
|
1457
|
+
NodeType2[NodeType2["Default"] = 0] = "Default";
|
|
1458
|
+
NodeType2[NodeType2["Text"] = 1] = "Text";
|
|
1459
|
+
return NodeType2;
|
|
1460
|
+
}({});
|
|
1461
|
+
var Overflow = /* @__PURE__ */ function(Overflow2) {
|
|
1462
|
+
Overflow2[Overflow2["Visible"] = 0] = "Visible";
|
|
1463
|
+
Overflow2[Overflow2["Hidden"] = 1] = "Hidden";
|
|
1464
|
+
Overflow2[Overflow2["Scroll"] = 2] = "Scroll";
|
|
1465
|
+
return Overflow2;
|
|
1466
|
+
}({});
|
|
1467
|
+
var PositionType = /* @__PURE__ */ function(PositionType2) {
|
|
1468
|
+
PositionType2[PositionType2["Static"] = 0] = "Static";
|
|
1469
|
+
PositionType2[PositionType2["Relative"] = 1] = "Relative";
|
|
1470
|
+
PositionType2[PositionType2["Absolute"] = 2] = "Absolute";
|
|
1471
|
+
return PositionType2;
|
|
1472
|
+
}({});
|
|
1473
|
+
var Unit = /* @__PURE__ */ function(Unit2) {
|
|
1474
|
+
Unit2[Unit2["Undefined"] = 0] = "Undefined";
|
|
1475
|
+
Unit2[Unit2["Point"] = 1] = "Point";
|
|
1476
|
+
Unit2[Unit2["Percent"] = 2] = "Percent";
|
|
1477
|
+
Unit2[Unit2["Auto"] = 3] = "Auto";
|
|
1478
|
+
return Unit2;
|
|
1479
|
+
}({});
|
|
1480
|
+
var Wrap = /* @__PURE__ */ function(Wrap2) {
|
|
1481
|
+
Wrap2[Wrap2["NoWrap"] = 0] = "NoWrap";
|
|
1482
|
+
Wrap2[Wrap2["Wrap"] = 1] = "Wrap";
|
|
1483
|
+
Wrap2[Wrap2["WrapReverse"] = 2] = "WrapReverse";
|
|
1484
|
+
return Wrap2;
|
|
1485
|
+
}({});
|
|
1486
|
+
var constants = {
|
|
1487
|
+
ALIGN_AUTO: Align.Auto,
|
|
1488
|
+
ALIGN_FLEX_START: Align.FlexStart,
|
|
1489
|
+
ALIGN_CENTER: Align.Center,
|
|
1490
|
+
ALIGN_FLEX_END: Align.FlexEnd,
|
|
1491
|
+
ALIGN_STRETCH: Align.Stretch,
|
|
1492
|
+
ALIGN_BASELINE: Align.Baseline,
|
|
1493
|
+
ALIGN_SPACE_BETWEEN: Align.SpaceBetween,
|
|
1494
|
+
ALIGN_SPACE_AROUND: Align.SpaceAround,
|
|
1495
|
+
ALIGN_SPACE_EVENLY: Align.SpaceEvenly,
|
|
1496
|
+
BOX_SIZING_BORDER_BOX: BoxSizing.BorderBox,
|
|
1497
|
+
BOX_SIZING_CONTENT_BOX: BoxSizing.ContentBox,
|
|
1498
|
+
DIMENSION_WIDTH: Dimension.Width,
|
|
1499
|
+
DIMENSION_HEIGHT: Dimension.Height,
|
|
1500
|
+
DIRECTION_INHERIT: Direction.Inherit,
|
|
1501
|
+
DIRECTION_LTR: Direction.LTR,
|
|
1502
|
+
DIRECTION_RTL: Direction.RTL,
|
|
1503
|
+
DISPLAY_FLEX: Display.Flex,
|
|
1504
|
+
DISPLAY_NONE: Display.None,
|
|
1505
|
+
DISPLAY_CONTENTS: Display.Contents,
|
|
1506
|
+
EDGE_LEFT: Edge.Left,
|
|
1507
|
+
EDGE_TOP: Edge.Top,
|
|
1508
|
+
EDGE_RIGHT: Edge.Right,
|
|
1509
|
+
EDGE_BOTTOM: Edge.Bottom,
|
|
1510
|
+
EDGE_START: Edge.Start,
|
|
1511
|
+
EDGE_END: Edge.End,
|
|
1512
|
+
EDGE_HORIZONTAL: Edge.Horizontal,
|
|
1513
|
+
EDGE_VERTICAL: Edge.Vertical,
|
|
1514
|
+
EDGE_ALL: Edge.All,
|
|
1515
|
+
ERRATA_NONE: Errata.None,
|
|
1516
|
+
ERRATA_STRETCH_FLEX_BASIS: Errata.StretchFlexBasis,
|
|
1517
|
+
ERRATA_ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING: Errata.AbsolutePositionWithoutInsetsExcludesPadding,
|
|
1518
|
+
ERRATA_ABSOLUTE_PERCENT_AGAINST_INNER_SIZE: Errata.AbsolutePercentAgainstInnerSize,
|
|
1519
|
+
ERRATA_ALL: Errata.All,
|
|
1520
|
+
ERRATA_CLASSIC: Errata.Classic,
|
|
1521
|
+
EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS: ExperimentalFeature.WebFlexBasis,
|
|
1522
|
+
FLEX_DIRECTION_COLUMN: FlexDirection.Column,
|
|
1523
|
+
FLEX_DIRECTION_COLUMN_REVERSE: FlexDirection.ColumnReverse,
|
|
1524
|
+
FLEX_DIRECTION_ROW: FlexDirection.Row,
|
|
1525
|
+
FLEX_DIRECTION_ROW_REVERSE: FlexDirection.RowReverse,
|
|
1526
|
+
GUTTER_COLUMN: Gutter.Column,
|
|
1527
|
+
GUTTER_ROW: Gutter.Row,
|
|
1528
|
+
GUTTER_ALL: Gutter.All,
|
|
1529
|
+
JUSTIFY_FLEX_START: Justify.FlexStart,
|
|
1530
|
+
JUSTIFY_CENTER: Justify.Center,
|
|
1531
|
+
JUSTIFY_FLEX_END: Justify.FlexEnd,
|
|
1532
|
+
JUSTIFY_SPACE_BETWEEN: Justify.SpaceBetween,
|
|
1533
|
+
JUSTIFY_SPACE_AROUND: Justify.SpaceAround,
|
|
1534
|
+
JUSTIFY_SPACE_EVENLY: Justify.SpaceEvenly,
|
|
1535
|
+
LOG_LEVEL_ERROR: LogLevel.Error,
|
|
1536
|
+
LOG_LEVEL_WARN: LogLevel.Warn,
|
|
1537
|
+
LOG_LEVEL_INFO: LogLevel.Info,
|
|
1538
|
+
LOG_LEVEL_DEBUG: LogLevel.Debug,
|
|
1539
|
+
LOG_LEVEL_VERBOSE: LogLevel.Verbose,
|
|
1540
|
+
LOG_LEVEL_FATAL: LogLevel.Fatal,
|
|
1541
|
+
MEASURE_MODE_UNDEFINED: MeasureMode.Undefined,
|
|
1542
|
+
MEASURE_MODE_EXACTLY: MeasureMode.Exactly,
|
|
1543
|
+
MEASURE_MODE_AT_MOST: MeasureMode.AtMost,
|
|
1544
|
+
NODE_TYPE_DEFAULT: NodeType.Default,
|
|
1545
|
+
NODE_TYPE_TEXT: NodeType.Text,
|
|
1546
|
+
OVERFLOW_VISIBLE: Overflow.Visible,
|
|
1547
|
+
OVERFLOW_HIDDEN: Overflow.Hidden,
|
|
1548
|
+
OVERFLOW_SCROLL: Overflow.Scroll,
|
|
1549
|
+
POSITION_TYPE_STATIC: PositionType.Static,
|
|
1550
|
+
POSITION_TYPE_RELATIVE: PositionType.Relative,
|
|
1551
|
+
POSITION_TYPE_ABSOLUTE: PositionType.Absolute,
|
|
1552
|
+
UNIT_UNDEFINED: Unit.Undefined,
|
|
1553
|
+
UNIT_POINT: Unit.Point,
|
|
1554
|
+
UNIT_PERCENT: Unit.Percent,
|
|
1555
|
+
UNIT_AUTO: Unit.Auto,
|
|
1556
|
+
WRAP_NO_WRAP: Wrap.NoWrap,
|
|
1557
|
+
WRAP_WRAP: Wrap.Wrap,
|
|
1558
|
+
WRAP_WRAP_REVERSE: Wrap.WrapReverse
|
|
1559
|
+
};
|
|
1560
|
+
var YGEnums_default = constants;
|
|
1561
|
+
|
|
1562
|
+
// ../../node_modules/yoga-layout/dist/src/wrapAssembly.js
|
|
1563
|
+
function wrapAssembly(lib) {
|
|
1564
|
+
function patch(prototype, name, fn) {
|
|
1565
|
+
const original = prototype[name];
|
|
1566
|
+
prototype[name] = function() {
|
|
1567
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0;_key < _len; _key++) {
|
|
1568
|
+
args[_key] = arguments[_key];
|
|
1569
|
+
}
|
|
1570
|
+
return fn.call(this, original, ...args);
|
|
1571
|
+
};
|
|
1572
|
+
}
|
|
1573
|
+
for (const fnName of ["setPosition", "setMargin", "setFlexBasis", "setWidth", "setHeight", "setMinWidth", "setMinHeight", "setMaxWidth", "setMaxHeight", "setPadding", "setGap"]) {
|
|
1574
|
+
const methods = {
|
|
1575
|
+
[Unit.Point]: lib.Node.prototype[fnName],
|
|
1576
|
+
[Unit.Percent]: lib.Node.prototype[`${fnName}Percent`],
|
|
1577
|
+
[Unit.Auto]: lib.Node.prototype[`${fnName}Auto`]
|
|
1578
|
+
};
|
|
1579
|
+
patch(lib.Node.prototype, fnName, function(original) {
|
|
1580
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1;_key2 < _len2; _key2++) {
|
|
1581
|
+
args[_key2 - 1] = arguments[_key2];
|
|
1582
|
+
}
|
|
1583
|
+
const value = args.pop();
|
|
1584
|
+
let unit, asNumber;
|
|
1585
|
+
if (value === "auto") {
|
|
1586
|
+
unit = Unit.Auto;
|
|
1587
|
+
asNumber = undefined;
|
|
1588
|
+
} else if (typeof value === "object") {
|
|
1589
|
+
unit = value.unit;
|
|
1590
|
+
asNumber = value.valueOf();
|
|
1591
|
+
} else {
|
|
1592
|
+
unit = typeof value === "string" && value.endsWith("%") ? Unit.Percent : Unit.Point;
|
|
1593
|
+
asNumber = parseFloat(value);
|
|
1594
|
+
if (value !== undefined && !Number.isNaN(value) && Number.isNaN(asNumber)) {
|
|
1595
|
+
throw new Error(`Invalid value ${value} for ${fnName}`);
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
if (!methods[unit])
|
|
1599
|
+
throw new Error(`Failed to execute "${fnName}": Unsupported unit '${value}'`);
|
|
1600
|
+
if (asNumber !== undefined) {
|
|
1601
|
+
return methods[unit].call(this, ...args, asNumber);
|
|
1602
|
+
} else {
|
|
1603
|
+
return methods[unit].call(this, ...args);
|
|
1604
|
+
}
|
|
1605
|
+
});
|
|
1606
|
+
}
|
|
1607
|
+
function wrapMeasureFunction(measureFunction) {
|
|
1608
|
+
return lib.MeasureCallback.implement({
|
|
1609
|
+
measure: function() {
|
|
1610
|
+
const {
|
|
1611
|
+
width,
|
|
1612
|
+
height
|
|
1613
|
+
} = measureFunction(...arguments);
|
|
1614
|
+
return {
|
|
1615
|
+
width: width ?? NaN,
|
|
1616
|
+
height: height ?? NaN
|
|
1617
|
+
};
|
|
1618
|
+
}
|
|
1619
|
+
});
|
|
1620
|
+
}
|
|
1621
|
+
patch(lib.Node.prototype, "setMeasureFunc", function(original, measureFunc) {
|
|
1622
|
+
if (measureFunc) {
|
|
1623
|
+
return original.call(this, wrapMeasureFunction(measureFunc));
|
|
1624
|
+
} else {
|
|
1625
|
+
return this.unsetMeasureFunc();
|
|
1626
|
+
}
|
|
1627
|
+
});
|
|
1628
|
+
function wrapDirtiedFunc(dirtiedFunction) {
|
|
1629
|
+
return lib.DirtiedCallback.implement({
|
|
1630
|
+
dirtied: dirtiedFunction
|
|
1631
|
+
});
|
|
1632
|
+
}
|
|
1633
|
+
patch(lib.Node.prototype, "setDirtiedFunc", function(original, dirtiedFunc) {
|
|
1634
|
+
original.call(this, wrapDirtiedFunc(dirtiedFunc));
|
|
1635
|
+
});
|
|
1636
|
+
patch(lib.Config.prototype, "free", function() {
|
|
1637
|
+
lib.Config.destroy(this);
|
|
1638
|
+
});
|
|
1639
|
+
patch(lib.Node, "create", (_, config) => {
|
|
1640
|
+
return config ? lib.Node.createWithConfig(config) : lib.Node.createDefault();
|
|
1641
|
+
});
|
|
1642
|
+
patch(lib.Node.prototype, "free", function() {
|
|
1643
|
+
lib.Node.destroy(this);
|
|
1644
|
+
});
|
|
1645
|
+
patch(lib.Node.prototype, "freeRecursive", function() {
|
|
1646
|
+
for (let t = 0, T = this.getChildCount();t < T; ++t) {
|
|
1647
|
+
this.getChild(0).freeRecursive();
|
|
1648
|
+
}
|
|
1649
|
+
this.free();
|
|
1650
|
+
});
|
|
1651
|
+
patch(lib.Node.prototype, "calculateLayout", function(original) {
|
|
1652
|
+
let width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NaN;
|
|
1653
|
+
let height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : NaN;
|
|
1654
|
+
let direction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Direction.LTR;
|
|
1655
|
+
return original.call(this, width, height, direction);
|
|
1656
|
+
});
|
|
1657
|
+
return {
|
|
1658
|
+
Config: lib.Config,
|
|
1659
|
+
Node: lib.Node,
|
|
1660
|
+
...YGEnums_default
|
|
1661
|
+
};
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
// ../../node_modules/yoga-layout/dist/src/index.js
|
|
1665
|
+
var Yoga = wrapAssembly(await yoga_wasm_base64_esm_default());
|
|
1666
|
+
var src_default = Yoga;
|
|
1667
|
+
|
|
2
1668
|
// src/lib/border.ts
|
|
3
1669
|
var BorderChars = {
|
|
4
1670
|
single: {
|
|
@@ -576,9 +2242,11 @@ var parseKeypress = (s = "", options = {}) => {
|
|
|
576
2242
|
const modifier = parseInt(modifyOtherKeysMatch[1], 10) - 1;
|
|
577
2243
|
const charCode = parseInt(modifyOtherKeysMatch[2], 10);
|
|
578
2244
|
key.ctrl = !!(modifier & 4);
|
|
579
|
-
key.meta = !!(modifier &
|
|
2245
|
+
key.meta = !!(modifier & 2);
|
|
580
2246
|
key.shift = !!(modifier & 1);
|
|
581
2247
|
key.option = !!(modifier & 2);
|
|
2248
|
+
key.super = !!(modifier & 8);
|
|
2249
|
+
key.hyper = !!(modifier & 16);
|
|
582
2250
|
if (charCode === 13) {
|
|
583
2251
|
key.name = "return";
|
|
584
2252
|
} else if (charCode === 27) {
|
|
@@ -655,9 +2323,11 @@ var parseKeypress = (s = "", options = {}) => {
|
|
|
655
2323
|
const code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join("");
|
|
656
2324
|
const modifier = parseInt(parts[3] || parts[5] || "1", 10) - 1;
|
|
657
2325
|
key.ctrl = !!(modifier & 4);
|
|
658
|
-
key.meta = !!(modifier &
|
|
2326
|
+
key.meta = !!(modifier & 2);
|
|
659
2327
|
key.shift = !!(modifier & 1);
|
|
660
2328
|
key.option = !!(modifier & 2);
|
|
2329
|
+
key.super = !!(modifier & 8);
|
|
2330
|
+
key.hyper = !!(modifier & 16);
|
|
661
2331
|
key.code = code;
|
|
662
2332
|
const keyNameResult = keyName[code];
|
|
663
2333
|
if (keyNameResult) {
|
|
@@ -4427,23 +6097,6 @@ class StdinBuffer extends EventEmitter2 {
|
|
|
4427
6097
|
}
|
|
4428
6098
|
|
|
4429
6099
|
// src/lib/yoga.options.ts
|
|
4430
|
-
import {
|
|
4431
|
-
BoxSizing,
|
|
4432
|
-
Align,
|
|
4433
|
-
Dimension,
|
|
4434
|
-
Direction,
|
|
4435
|
-
Display,
|
|
4436
|
-
Edge,
|
|
4437
|
-
FlexDirection,
|
|
4438
|
-
Gutter,
|
|
4439
|
-
Justify,
|
|
4440
|
-
LogLevel,
|
|
4441
|
-
MeasureMode,
|
|
4442
|
-
Overflow,
|
|
4443
|
-
PositionType,
|
|
4444
|
-
Unit,
|
|
4445
|
-
Wrap
|
|
4446
|
-
} from "bun-yoga";
|
|
4447
6100
|
function parseAlign(value) {
|
|
4448
6101
|
if (value == null) {
|
|
4449
6102
|
return Align.Auto;
|
|
@@ -5552,9 +7205,22 @@ function getParsers() {
|
|
|
5552
7205
|
}
|
|
5553
7206
|
|
|
5554
7207
|
// src/lib/tree-sitter/client.ts
|
|
5555
|
-
import { resolve as resolve2, isAbsolute } from "path";
|
|
7208
|
+
import { resolve as resolve2, isAbsolute, parse } from "path";
|
|
5556
7209
|
import { existsSync } from "fs";
|
|
5557
|
-
|
|
7210
|
+
|
|
7211
|
+
// src/lib/bunfs.ts
|
|
7212
|
+
import { basename, join } from "path";
|
|
7213
|
+
function isBunfsPath(path) {
|
|
7214
|
+
return path.includes("$bunfs") || /^B:[\\/]~BUN/i.test(path);
|
|
7215
|
+
}
|
|
7216
|
+
function getBunfsRootPath() {
|
|
7217
|
+
return process.platform === "win32" ? "B:\\~BUN\\root" : "/$bunfs/root";
|
|
7218
|
+
}
|
|
7219
|
+
function normalizeBunfsPath(fileName) {
|
|
7220
|
+
return join(getBunfsRootPath(), basename(fileName));
|
|
7221
|
+
}
|
|
7222
|
+
|
|
7223
|
+
// src/lib/tree-sitter/client.ts
|
|
5558
7224
|
registerEnvVar({
|
|
5559
7225
|
name: "OTUI_TREE_SITTER_WORKER_PATH",
|
|
5560
7226
|
description: "Path to the TreeSitter worker",
|
|
@@ -5676,8 +7342,8 @@ class TreeSitterClient extends EventEmitter3 {
|
|
|
5676
7342
|
if (isUrl(path)) {
|
|
5677
7343
|
return path;
|
|
5678
7344
|
}
|
|
5679
|
-
if (
|
|
5680
|
-
return
|
|
7345
|
+
if (isBunfsPath(path)) {
|
|
7346
|
+
return normalizeBunfsPath(parse(path).base);
|
|
5681
7347
|
}
|
|
5682
7348
|
if (!isAbsolute(path)) {
|
|
5683
7349
|
return resolve2(path);
|
|
@@ -7507,7 +9173,7 @@ function createTerminalPalette(stdin, stdout, writeFn, isLegacyTmux) {
|
|
|
7507
9173
|
return new TerminalPalette(stdin, stdout, writeFn, isLegacyTmux);
|
|
7508
9174
|
}
|
|
7509
9175
|
// src/zig.ts
|
|
7510
|
-
import { dlopen, toArrayBuffer as
|
|
9176
|
+
import { dlopen, toArrayBuffer as toArrayBuffer4, JSCallback, ptr as ptr3 } from "bun:ffi";
|
|
7511
9177
|
import { existsSync as existsSync2 } from "fs";
|
|
7512
9178
|
import { EventEmitter as EventEmitter5 } from "events";
|
|
7513
9179
|
|
|
@@ -7729,11 +9395,618 @@ class OptimizedBuffer {
|
|
|
7729
9395
|
}
|
|
7730
9396
|
}
|
|
7731
9397
|
|
|
7732
|
-
//
|
|
7733
|
-
import { defineStruct, defineEnum } from "bun-ffi-structs";
|
|
9398
|
+
// ../../node_modules/bun-ffi-structs/index.js
|
|
7734
9399
|
import { ptr, toArrayBuffer as toArrayBuffer2 } from "bun:ffi";
|
|
7735
|
-
|
|
7736
|
-
|
|
9400
|
+
function fatalError(...args) {
|
|
9401
|
+
const message = args.join(" ");
|
|
9402
|
+
console.error("FATAL ERROR:", message);
|
|
9403
|
+
throw new Error(message);
|
|
9404
|
+
}
|
|
9405
|
+
var pointerSize = process.arch === "x64" || process.arch === "arm64" ? 8 : 4;
|
|
9406
|
+
var typeSizes = {
|
|
9407
|
+
u8: 1,
|
|
9408
|
+
bool_u8: 1,
|
|
9409
|
+
bool_u32: 4,
|
|
9410
|
+
u16: 2,
|
|
9411
|
+
i16: 2,
|
|
9412
|
+
u32: 4,
|
|
9413
|
+
u64: 8,
|
|
9414
|
+
f32: 4,
|
|
9415
|
+
f64: 8,
|
|
9416
|
+
pointer: pointerSize,
|
|
9417
|
+
i32: 4
|
|
9418
|
+
};
|
|
9419
|
+
var primitiveKeys = Object.keys(typeSizes);
|
|
9420
|
+
function isPrimitiveType(type) {
|
|
9421
|
+
return typeof type === "string" && primitiveKeys.includes(type);
|
|
9422
|
+
}
|
|
9423
|
+
var typeAlignments = { ...typeSizes };
|
|
9424
|
+
var typeGetters = {
|
|
9425
|
+
u8: (view, offset) => view.getUint8(offset),
|
|
9426
|
+
bool_u8: (view, offset) => Boolean(view.getUint8(offset)),
|
|
9427
|
+
bool_u32: (view, offset) => Boolean(view.getUint32(offset, true)),
|
|
9428
|
+
u16: (view, offset) => view.getUint16(offset, true),
|
|
9429
|
+
i16: (view, offset) => view.getInt16(offset, true),
|
|
9430
|
+
u32: (view, offset) => view.getUint32(offset, true),
|
|
9431
|
+
u64: (view, offset) => view.getBigUint64(offset, true),
|
|
9432
|
+
f32: (view, offset) => view.getFloat32(offset, true),
|
|
9433
|
+
f64: (view, offset) => view.getFloat64(offset, true),
|
|
9434
|
+
i32: (view, offset) => view.getInt32(offset, true),
|
|
9435
|
+
pointer: (view, offset) => pointerSize === 8 ? view.getBigUint64(offset, true) : BigInt(view.getUint32(offset, true))
|
|
9436
|
+
};
|
|
9437
|
+
function isObjectPointerDef(type) {
|
|
9438
|
+
return typeof type === "object" && type !== null && type.__type === "objectPointer";
|
|
9439
|
+
}
|
|
9440
|
+
function alignOffset(offset, align) {
|
|
9441
|
+
return offset + (align - 1) & ~(align - 1);
|
|
9442
|
+
}
|
|
9443
|
+
function enumTypeError(value) {
|
|
9444
|
+
throw new TypeError(`Invalid enum value: ${value}`);
|
|
9445
|
+
}
|
|
9446
|
+
function defineEnum(mapping, base = "u32") {
|
|
9447
|
+
const reverse2 = Object.fromEntries(Object.entries(mapping).map(([k, v]) => [v, k]));
|
|
9448
|
+
return {
|
|
9449
|
+
__type: "enum",
|
|
9450
|
+
type: base,
|
|
9451
|
+
to(value) {
|
|
9452
|
+
return typeof value === "number" ? value : mapping[value] ?? enumTypeError(String(value));
|
|
9453
|
+
},
|
|
9454
|
+
from(value) {
|
|
9455
|
+
return reverse2[value] ?? enumTypeError(String(value));
|
|
9456
|
+
},
|
|
9457
|
+
enum: mapping
|
|
9458
|
+
};
|
|
9459
|
+
}
|
|
9460
|
+
function isEnum(type) {
|
|
9461
|
+
return typeof type === "object" && type.__type === "enum";
|
|
9462
|
+
}
|
|
9463
|
+
function isStruct(type) {
|
|
9464
|
+
return typeof type === "object" && type.__type === "struct";
|
|
9465
|
+
}
|
|
9466
|
+
function primitivePackers(type) {
|
|
9467
|
+
let pack;
|
|
9468
|
+
let unpack;
|
|
9469
|
+
switch (type) {
|
|
9470
|
+
case "u8":
|
|
9471
|
+
pack = (view, off, val) => view.setUint8(off, val);
|
|
9472
|
+
unpack = (view, off) => view.getUint8(off);
|
|
9473
|
+
break;
|
|
9474
|
+
case "bool_u8":
|
|
9475
|
+
pack = (view, off, val) => view.setUint8(off, val ? 1 : 0);
|
|
9476
|
+
unpack = (view, off) => Boolean(view.getUint8(off));
|
|
9477
|
+
break;
|
|
9478
|
+
case "bool_u32":
|
|
9479
|
+
pack = (view, off, val) => view.setUint32(off, val ? 1 : 0, true);
|
|
9480
|
+
unpack = (view, off) => Boolean(view.getUint32(off, true));
|
|
9481
|
+
break;
|
|
9482
|
+
case "u16":
|
|
9483
|
+
pack = (view, off, val) => view.setUint16(off, val, true);
|
|
9484
|
+
unpack = (view, off) => view.getUint16(off, true);
|
|
9485
|
+
break;
|
|
9486
|
+
case "i16":
|
|
9487
|
+
pack = (view, off, val) => view.setInt16(off, val, true);
|
|
9488
|
+
unpack = (view, off) => view.getInt16(off, true);
|
|
9489
|
+
break;
|
|
9490
|
+
case "u32":
|
|
9491
|
+
pack = (view, off, val) => view.setUint32(off, val, true);
|
|
9492
|
+
unpack = (view, off) => view.getUint32(off, true);
|
|
9493
|
+
break;
|
|
9494
|
+
case "i32":
|
|
9495
|
+
pack = (view, off, val) => view.setInt32(off, val, true);
|
|
9496
|
+
unpack = (view, off) => view.getInt32(off, true);
|
|
9497
|
+
break;
|
|
9498
|
+
case "u64":
|
|
9499
|
+
pack = (view, off, val) => view.setBigUint64(off, BigInt(val), true);
|
|
9500
|
+
unpack = (view, off) => view.getBigUint64(off, true);
|
|
9501
|
+
break;
|
|
9502
|
+
case "f32":
|
|
9503
|
+
pack = (view, off, val) => view.setFloat32(off, val, true);
|
|
9504
|
+
unpack = (view, off) => view.getFloat32(off, true);
|
|
9505
|
+
break;
|
|
9506
|
+
case "f64":
|
|
9507
|
+
pack = (view, off, val) => view.setFloat64(off, val, true);
|
|
9508
|
+
unpack = (view, off) => view.getFloat64(off, true);
|
|
9509
|
+
break;
|
|
9510
|
+
case "pointer":
|
|
9511
|
+
pack = (view, off, val) => {
|
|
9512
|
+
pointerSize === 8 ? view.setBigUint64(off, val ? BigInt(val) : 0n, true) : view.setUint32(off, val ? Number(val) : 0, true);
|
|
9513
|
+
};
|
|
9514
|
+
unpack = (view, off) => {
|
|
9515
|
+
const bint = pointerSize === 8 ? view.getBigUint64(off, true) : BigInt(view.getUint32(off, true));
|
|
9516
|
+
return Number(bint);
|
|
9517
|
+
};
|
|
9518
|
+
break;
|
|
9519
|
+
default:
|
|
9520
|
+
fatalError(`Unsupported primitive type: ${type}`);
|
|
9521
|
+
}
|
|
9522
|
+
return { pack, unpack };
|
|
9523
|
+
}
|
|
9524
|
+
var { pack: pointerPacker, unpack: pointerUnpacker } = primitivePackers("pointer");
|
|
9525
|
+
function packObjectArray(val) {
|
|
9526
|
+
const buffer = new ArrayBuffer(val.length * pointerSize);
|
|
9527
|
+
const bufferView = new DataView(buffer);
|
|
9528
|
+
for (let i = 0;i < val.length; i++) {
|
|
9529
|
+
const instance = val[i];
|
|
9530
|
+
const ptrValue = instance?.ptr ?? null;
|
|
9531
|
+
pointerPacker(bufferView, i * pointerSize, ptrValue);
|
|
9532
|
+
}
|
|
9533
|
+
return bufferView;
|
|
9534
|
+
}
|
|
9535
|
+
var encoder = new TextEncoder;
|
|
9536
|
+
var decoder = new TextDecoder;
|
|
9537
|
+
function defineStruct(fields, structDefOptions) {
|
|
9538
|
+
let offset = 0;
|
|
9539
|
+
let maxAlign = 1;
|
|
9540
|
+
const layout = [];
|
|
9541
|
+
const lengthOfFields = {};
|
|
9542
|
+
const lengthOfRequested = [];
|
|
9543
|
+
const arrayFieldsMetadata = {};
|
|
9544
|
+
for (const [name, typeOrStruct, options = {}] of fields) {
|
|
9545
|
+
if (options.condition && !options.condition()) {
|
|
9546
|
+
continue;
|
|
9547
|
+
}
|
|
9548
|
+
let size = 0, align = 0;
|
|
9549
|
+
let pack;
|
|
9550
|
+
let unpack;
|
|
9551
|
+
let needsLengthOf = false;
|
|
9552
|
+
let lengthOfDef = null;
|
|
9553
|
+
if (isPrimitiveType(typeOrStruct)) {
|
|
9554
|
+
size = typeSizes[typeOrStruct];
|
|
9555
|
+
align = typeAlignments[typeOrStruct];
|
|
9556
|
+
({ pack, unpack } = primitivePackers(typeOrStruct));
|
|
9557
|
+
} else if (typeof typeOrStruct === "string" && typeOrStruct === "cstring") {
|
|
9558
|
+
size = pointerSize;
|
|
9559
|
+
align = pointerSize;
|
|
9560
|
+
pack = (view, off, val) => {
|
|
9561
|
+
const bufPtr = val ? ptr(encoder.encode(val + "\x00")) : null;
|
|
9562
|
+
pointerPacker(view, off, bufPtr);
|
|
9563
|
+
};
|
|
9564
|
+
unpack = (view, off) => {
|
|
9565
|
+
const ptrVal = pointerUnpacker(view, off);
|
|
9566
|
+
return ptrVal;
|
|
9567
|
+
};
|
|
9568
|
+
} else if (typeof typeOrStruct === "string" && typeOrStruct === "char*") {
|
|
9569
|
+
size = pointerSize;
|
|
9570
|
+
align = pointerSize;
|
|
9571
|
+
pack = (view, off, val) => {
|
|
9572
|
+
const bufPtr = val ? ptr(encoder.encode(val)) : null;
|
|
9573
|
+
pointerPacker(view, off, bufPtr);
|
|
9574
|
+
};
|
|
9575
|
+
unpack = (view, off) => {
|
|
9576
|
+
const ptrVal = pointerUnpacker(view, off);
|
|
9577
|
+
return ptrVal;
|
|
9578
|
+
};
|
|
9579
|
+
needsLengthOf = true;
|
|
9580
|
+
} else if (isEnum(typeOrStruct)) {
|
|
9581
|
+
const base = typeOrStruct.type;
|
|
9582
|
+
size = typeSizes[base];
|
|
9583
|
+
align = typeAlignments[base];
|
|
9584
|
+
const { pack: packEnum } = primitivePackers(base);
|
|
9585
|
+
pack = (view, off, val) => {
|
|
9586
|
+
const num = typeOrStruct.to(val);
|
|
9587
|
+
packEnum(view, off, num);
|
|
9588
|
+
};
|
|
9589
|
+
unpack = (view, off) => {
|
|
9590
|
+
const raw = typeGetters[base](view, off);
|
|
9591
|
+
return typeOrStruct.from(raw);
|
|
9592
|
+
};
|
|
9593
|
+
} else if (isStruct(typeOrStruct)) {
|
|
9594
|
+
if (options.asPointer === true) {
|
|
9595
|
+
size = pointerSize;
|
|
9596
|
+
align = pointerSize;
|
|
9597
|
+
pack = (view, off, val, obj, options2) => {
|
|
9598
|
+
if (!val) {
|
|
9599
|
+
pointerPacker(view, off, null);
|
|
9600
|
+
return;
|
|
9601
|
+
}
|
|
9602
|
+
const nestedBuf = typeOrStruct.pack(val, options2);
|
|
9603
|
+
pointerPacker(view, off, ptr(nestedBuf));
|
|
9604
|
+
};
|
|
9605
|
+
unpack = (view, off) => {
|
|
9606
|
+
throw new Error("Not implemented yet");
|
|
9607
|
+
};
|
|
9608
|
+
} else {
|
|
9609
|
+
size = typeOrStruct.size;
|
|
9610
|
+
align = typeOrStruct.align;
|
|
9611
|
+
pack = (view, off, val, obj, options2) => {
|
|
9612
|
+
const nestedBuf = typeOrStruct.pack(val, options2);
|
|
9613
|
+
const nestedView = new Uint8Array(nestedBuf);
|
|
9614
|
+
const dView = new Uint8Array(view.buffer);
|
|
9615
|
+
dView.set(nestedView, off);
|
|
9616
|
+
};
|
|
9617
|
+
unpack = (view, off) => {
|
|
9618
|
+
const slice = view.buffer.slice(off, off + size);
|
|
9619
|
+
return typeOrStruct.unpack(slice);
|
|
9620
|
+
};
|
|
9621
|
+
}
|
|
9622
|
+
} else if (isObjectPointerDef(typeOrStruct)) {
|
|
9623
|
+
size = pointerSize;
|
|
9624
|
+
align = pointerSize;
|
|
9625
|
+
pack = (view, off, value) => {
|
|
9626
|
+
const ptrValue = value?.ptr ?? null;
|
|
9627
|
+
if (ptrValue === undefined) {
|
|
9628
|
+
console.warn(`Field '${name}' expected object with '.ptr' property, but got undefined pointer value from:`, value);
|
|
9629
|
+
pointerPacker(view, off, null);
|
|
9630
|
+
} else {
|
|
9631
|
+
pointerPacker(view, off, ptrValue);
|
|
9632
|
+
}
|
|
9633
|
+
};
|
|
9634
|
+
unpack = (view, off) => {
|
|
9635
|
+
return pointerUnpacker(view, off);
|
|
9636
|
+
};
|
|
9637
|
+
} else if (Array.isArray(typeOrStruct) && typeOrStruct.length === 1 && typeOrStruct[0] !== undefined) {
|
|
9638
|
+
const [def] = typeOrStruct;
|
|
9639
|
+
size = pointerSize;
|
|
9640
|
+
align = pointerSize;
|
|
9641
|
+
let arrayElementSize;
|
|
9642
|
+
if (isEnum(def)) {
|
|
9643
|
+
arrayElementSize = typeSizes[def.type];
|
|
9644
|
+
pack = (view, off, val, obj) => {
|
|
9645
|
+
if (!val || val.length === 0) {
|
|
9646
|
+
pointerPacker(view, off, null);
|
|
9647
|
+
return;
|
|
9648
|
+
}
|
|
9649
|
+
const buffer = new ArrayBuffer(val.length * arrayElementSize);
|
|
9650
|
+
const bufferView = new DataView(buffer);
|
|
9651
|
+
for (let i = 0;i < val.length; i++) {
|
|
9652
|
+
const num = def.to(val[i]);
|
|
9653
|
+
bufferView.setUint32(i * arrayElementSize, num, true);
|
|
9654
|
+
}
|
|
9655
|
+
pointerPacker(view, off, ptr(buffer));
|
|
9656
|
+
};
|
|
9657
|
+
unpack = null;
|
|
9658
|
+
needsLengthOf = true;
|
|
9659
|
+
lengthOfDef = def;
|
|
9660
|
+
} else if (isStruct(def)) {
|
|
9661
|
+
arrayElementSize = def.size;
|
|
9662
|
+
pack = (view, off, val, obj, options2) => {
|
|
9663
|
+
if (!val || val.length === 0) {
|
|
9664
|
+
pointerPacker(view, off, null);
|
|
9665
|
+
return;
|
|
9666
|
+
}
|
|
9667
|
+
const buffer = new ArrayBuffer(val.length * arrayElementSize);
|
|
9668
|
+
const bufferView = new DataView(buffer);
|
|
9669
|
+
for (let i = 0;i < val.length; i++) {
|
|
9670
|
+
def.packInto(val[i], bufferView, i * arrayElementSize, options2);
|
|
9671
|
+
}
|
|
9672
|
+
pointerPacker(view, off, ptr(buffer));
|
|
9673
|
+
};
|
|
9674
|
+
unpack = (view, off) => {
|
|
9675
|
+
throw new Error("Not implemented yet");
|
|
9676
|
+
};
|
|
9677
|
+
} else if (isPrimitiveType(def)) {
|
|
9678
|
+
arrayElementSize = typeSizes[def];
|
|
9679
|
+
const { pack: primitivePack } = primitivePackers(def);
|
|
9680
|
+
pack = (view, off, val) => {
|
|
9681
|
+
if (!val || val.length === 0) {
|
|
9682
|
+
pointerPacker(view, off, null);
|
|
9683
|
+
return;
|
|
9684
|
+
}
|
|
9685
|
+
const buffer = new ArrayBuffer(val.length * arrayElementSize);
|
|
9686
|
+
const bufferView = new DataView(buffer);
|
|
9687
|
+
for (let i = 0;i < val.length; i++) {
|
|
9688
|
+
primitivePack(bufferView, i * arrayElementSize, val[i]);
|
|
9689
|
+
}
|
|
9690
|
+
pointerPacker(view, off, ptr(buffer));
|
|
9691
|
+
};
|
|
9692
|
+
unpack = null;
|
|
9693
|
+
needsLengthOf = true;
|
|
9694
|
+
lengthOfDef = def;
|
|
9695
|
+
} else if (isObjectPointerDef(def)) {
|
|
9696
|
+
arrayElementSize = pointerSize;
|
|
9697
|
+
pack = (view, off, val) => {
|
|
9698
|
+
if (!val || val.length === 0) {
|
|
9699
|
+
pointerPacker(view, off, null);
|
|
9700
|
+
return;
|
|
9701
|
+
}
|
|
9702
|
+
const packedView = packObjectArray(val);
|
|
9703
|
+
pointerPacker(view, off, ptr(packedView.buffer));
|
|
9704
|
+
};
|
|
9705
|
+
unpack = () => {
|
|
9706
|
+
throw new Error("not implemented yet");
|
|
9707
|
+
};
|
|
9708
|
+
} else {
|
|
9709
|
+
throw new Error(`Unsupported array element type for ${name}: ${JSON.stringify(def)}`);
|
|
9710
|
+
}
|
|
9711
|
+
const lengthOfField = Object.values(lengthOfFields).find((f) => f.lengthOf === name);
|
|
9712
|
+
if (lengthOfField && isPrimitiveType(lengthOfField.type)) {
|
|
9713
|
+
const { pack: lengthPack } = primitivePackers(lengthOfField.type);
|
|
9714
|
+
arrayFieldsMetadata[name] = {
|
|
9715
|
+
elementSize: arrayElementSize,
|
|
9716
|
+
arrayOffset: offset,
|
|
9717
|
+
lengthOffset: lengthOfField.offset,
|
|
9718
|
+
lengthPack
|
|
9719
|
+
};
|
|
9720
|
+
}
|
|
9721
|
+
} else {
|
|
9722
|
+
throw new Error(`Unsupported field type for ${name}: ${JSON.stringify(typeOrStruct)}`);
|
|
9723
|
+
}
|
|
9724
|
+
offset = alignOffset(offset, align);
|
|
9725
|
+
if (options.unpackTransform) {
|
|
9726
|
+
const originalUnpack = unpack;
|
|
9727
|
+
unpack = (view, off) => options.unpackTransform(originalUnpack(view, off));
|
|
9728
|
+
}
|
|
9729
|
+
if (options.packTransform) {
|
|
9730
|
+
const originalPack = pack;
|
|
9731
|
+
pack = (view, off, val, obj, packOptions) => originalPack(view, off, options.packTransform(val), obj, packOptions);
|
|
9732
|
+
}
|
|
9733
|
+
if (options.optional) {
|
|
9734
|
+
const originalPack = pack;
|
|
9735
|
+
if (isStruct(typeOrStruct) && !options.asPointer) {
|
|
9736
|
+
pack = (view, off, val, obj, packOptions) => {
|
|
9737
|
+
if (val || options.mapOptionalInline) {
|
|
9738
|
+
originalPack(view, off, val, obj, packOptions);
|
|
9739
|
+
}
|
|
9740
|
+
};
|
|
9741
|
+
} else {
|
|
9742
|
+
pack = (view, off, val, obj, packOptions) => originalPack(view, off, val ?? 0, obj, packOptions);
|
|
9743
|
+
}
|
|
9744
|
+
}
|
|
9745
|
+
if (options.lengthOf) {
|
|
9746
|
+
const originalPack = pack;
|
|
9747
|
+
pack = (view, off, val, obj, packOptions) => {
|
|
9748
|
+
const targetValue = obj[options.lengthOf];
|
|
9749
|
+
let length = 0;
|
|
9750
|
+
if (targetValue) {
|
|
9751
|
+
if (typeof targetValue === "string") {
|
|
9752
|
+
length = Buffer.byteLength(targetValue);
|
|
9753
|
+
} else {
|
|
9754
|
+
length = targetValue.length;
|
|
9755
|
+
}
|
|
9756
|
+
}
|
|
9757
|
+
return originalPack(view, off, length, obj, packOptions);
|
|
9758
|
+
};
|
|
9759
|
+
}
|
|
9760
|
+
let validateFunctions;
|
|
9761
|
+
if (options.validate) {
|
|
9762
|
+
validateFunctions = Array.isArray(options.validate) ? options.validate : [options.validate];
|
|
9763
|
+
}
|
|
9764
|
+
const layoutField = {
|
|
9765
|
+
name,
|
|
9766
|
+
offset,
|
|
9767
|
+
size,
|
|
9768
|
+
align,
|
|
9769
|
+
validate: validateFunctions,
|
|
9770
|
+
optional: !!options.optional || !!options.lengthOf || options.default !== undefined,
|
|
9771
|
+
default: options.default,
|
|
9772
|
+
pack,
|
|
9773
|
+
unpack,
|
|
9774
|
+
type: typeOrStruct,
|
|
9775
|
+
lengthOf: options.lengthOf
|
|
9776
|
+
};
|
|
9777
|
+
layout.push(layoutField);
|
|
9778
|
+
if (options.lengthOf) {
|
|
9779
|
+
lengthOfFields[options.lengthOf] = layoutField;
|
|
9780
|
+
}
|
|
9781
|
+
if (needsLengthOf) {
|
|
9782
|
+
const def = typeof typeOrStruct === "string" && typeOrStruct === "char*" ? "char*" : lengthOfDef;
|
|
9783
|
+
if (!def)
|
|
9784
|
+
fatalError(`Internal error: needsLengthOf=true but def is null for ${name}`);
|
|
9785
|
+
lengthOfRequested.push({ requester: layoutField, def });
|
|
9786
|
+
}
|
|
9787
|
+
offset += size;
|
|
9788
|
+
maxAlign = Math.max(maxAlign, align);
|
|
9789
|
+
}
|
|
9790
|
+
for (const { requester, def } of lengthOfRequested) {
|
|
9791
|
+
const lengthOfField = lengthOfFields[requester.name];
|
|
9792
|
+
if (!lengthOfField) {
|
|
9793
|
+
if (def === "char*") {
|
|
9794
|
+
continue;
|
|
9795
|
+
}
|
|
9796
|
+
throw new Error(`lengthOf field not found for array field ${requester.name}`);
|
|
9797
|
+
}
|
|
9798
|
+
if (def === "char*") {
|
|
9799
|
+
requester.unpack = (view, off) => {
|
|
9800
|
+
const ptrAddress = pointerUnpacker(view, off);
|
|
9801
|
+
const length = lengthOfField.unpack(view, lengthOfField.offset);
|
|
9802
|
+
if (ptrAddress === 0) {
|
|
9803
|
+
return null;
|
|
9804
|
+
}
|
|
9805
|
+
const byteLength = typeof length === "bigint" ? Number(length) : length;
|
|
9806
|
+
if (byteLength === 0) {
|
|
9807
|
+
return "";
|
|
9808
|
+
}
|
|
9809
|
+
const buffer = toArrayBuffer2(ptrAddress, 0, byteLength);
|
|
9810
|
+
return decoder.decode(buffer);
|
|
9811
|
+
};
|
|
9812
|
+
} else if (isPrimitiveType(def)) {
|
|
9813
|
+
const elemSize = typeSizes[def];
|
|
9814
|
+
const { unpack: primitiveUnpack } = primitivePackers(def);
|
|
9815
|
+
requester.unpack = (view, off) => {
|
|
9816
|
+
const result = [];
|
|
9817
|
+
const length = lengthOfField.unpack(view, lengthOfField.offset);
|
|
9818
|
+
const ptrAddress = pointerUnpacker(view, off);
|
|
9819
|
+
if (ptrAddress === 0n && length > 0) {
|
|
9820
|
+
throw new Error(`Array field ${requester.name} has null pointer but length ${length}.`);
|
|
9821
|
+
}
|
|
9822
|
+
if (ptrAddress === 0n || length === 0) {
|
|
9823
|
+
return [];
|
|
9824
|
+
}
|
|
9825
|
+
const buffer = toArrayBuffer2(ptrAddress, 0, length * elemSize);
|
|
9826
|
+
const bufferView = new DataView(buffer);
|
|
9827
|
+
for (let i = 0;i < length; i++) {
|
|
9828
|
+
result.push(primitiveUnpack(bufferView, i * elemSize));
|
|
9829
|
+
}
|
|
9830
|
+
return result;
|
|
9831
|
+
};
|
|
9832
|
+
} else {
|
|
9833
|
+
const elemSize = def.type === "u32" ? 4 : 8;
|
|
9834
|
+
requester.unpack = (view, off) => {
|
|
9835
|
+
const result = [];
|
|
9836
|
+
const length = lengthOfField.unpack(view, lengthOfField.offset);
|
|
9837
|
+
const ptrAddress = pointerUnpacker(view, off);
|
|
9838
|
+
if (ptrAddress === 0n && length > 0) {
|
|
9839
|
+
throw new Error(`Array field ${requester.name} has null pointer but length ${length}.`);
|
|
9840
|
+
}
|
|
9841
|
+
if (ptrAddress === 0n || length === 0) {
|
|
9842
|
+
return [];
|
|
9843
|
+
}
|
|
9844
|
+
const buffer = toArrayBuffer2(ptrAddress, 0, length * elemSize);
|
|
9845
|
+
const bufferView = new DataView(buffer);
|
|
9846
|
+
for (let i = 0;i < length; i++) {
|
|
9847
|
+
result.push(def.from(bufferView.getUint32(i * elemSize, true)));
|
|
9848
|
+
}
|
|
9849
|
+
return result;
|
|
9850
|
+
};
|
|
9851
|
+
}
|
|
9852
|
+
}
|
|
9853
|
+
const totalSize = alignOffset(offset, maxAlign);
|
|
9854
|
+
const description = layout.map((f) => ({
|
|
9855
|
+
name: f.name,
|
|
9856
|
+
offset: f.offset,
|
|
9857
|
+
size: f.size,
|
|
9858
|
+
align: f.align,
|
|
9859
|
+
optional: f.optional,
|
|
9860
|
+
type: f.type,
|
|
9861
|
+
lengthOf: f.lengthOf
|
|
9862
|
+
}));
|
|
9863
|
+
const layoutByName = new Map(description.map((f) => [f.name, f]));
|
|
9864
|
+
const arrayFields = new Map(Object.entries(arrayFieldsMetadata));
|
|
9865
|
+
return {
|
|
9866
|
+
__type: "struct",
|
|
9867
|
+
size: totalSize,
|
|
9868
|
+
align: maxAlign,
|
|
9869
|
+
hasMapValue: !!structDefOptions?.mapValue,
|
|
9870
|
+
layoutByName,
|
|
9871
|
+
arrayFields,
|
|
9872
|
+
pack(obj, options) {
|
|
9873
|
+
const buf = new ArrayBuffer(totalSize);
|
|
9874
|
+
const view = new DataView(buf);
|
|
9875
|
+
let mappedObj = obj;
|
|
9876
|
+
if (structDefOptions?.mapValue) {
|
|
9877
|
+
mappedObj = structDefOptions.mapValue(obj);
|
|
9878
|
+
}
|
|
9879
|
+
for (const field of layout) {
|
|
9880
|
+
const value = mappedObj[field.name] ?? field.default;
|
|
9881
|
+
if (!field.optional && value === undefined) {
|
|
9882
|
+
fatalError(`Packing non-optional field '${field.name}' but value is undefined (and no default provided)`);
|
|
9883
|
+
}
|
|
9884
|
+
if (field.validate) {
|
|
9885
|
+
for (const validateFn of field.validate) {
|
|
9886
|
+
validateFn(value, field.name, {
|
|
9887
|
+
hints: options?.validationHints,
|
|
9888
|
+
input: mappedObj
|
|
9889
|
+
});
|
|
9890
|
+
}
|
|
9891
|
+
}
|
|
9892
|
+
field.pack(view, field.offset, value, mappedObj, options);
|
|
9893
|
+
}
|
|
9894
|
+
return view.buffer;
|
|
9895
|
+
},
|
|
9896
|
+
packInto(obj, view, offset2, options) {
|
|
9897
|
+
let mappedObj = obj;
|
|
9898
|
+
if (structDefOptions?.mapValue) {
|
|
9899
|
+
mappedObj = structDefOptions.mapValue(obj);
|
|
9900
|
+
}
|
|
9901
|
+
for (const field of layout) {
|
|
9902
|
+
const value = mappedObj[field.name] ?? field.default;
|
|
9903
|
+
if (!field.optional && value === undefined) {
|
|
9904
|
+
console.warn(`packInto missing value for non-optional field '${field.name}' at offset ${offset2 + field.offset}. Writing default or zero.`);
|
|
9905
|
+
}
|
|
9906
|
+
if (field.validate) {
|
|
9907
|
+
for (const validateFn of field.validate) {
|
|
9908
|
+
validateFn(value, field.name, {
|
|
9909
|
+
hints: options?.validationHints,
|
|
9910
|
+
input: mappedObj
|
|
9911
|
+
});
|
|
9912
|
+
}
|
|
9913
|
+
}
|
|
9914
|
+
field.pack(view, offset2 + field.offset, value, mappedObj, options);
|
|
9915
|
+
}
|
|
9916
|
+
},
|
|
9917
|
+
unpack(buf) {
|
|
9918
|
+
if (buf.byteLength < totalSize) {
|
|
9919
|
+
fatalError(`Buffer size (${buf.byteLength}) is smaller than struct size (${totalSize}) for unpacking.`);
|
|
9920
|
+
}
|
|
9921
|
+
const view = new DataView(buf);
|
|
9922
|
+
const result = structDefOptions?.default ? { ...structDefOptions.default } : {};
|
|
9923
|
+
for (const field of layout) {
|
|
9924
|
+
if (!field.unpack) {
|
|
9925
|
+
continue;
|
|
9926
|
+
}
|
|
9927
|
+
try {
|
|
9928
|
+
result[field.name] = field.unpack(view, field.offset);
|
|
9929
|
+
} catch (e) {
|
|
9930
|
+
console.error(`Error unpacking field '${field.name}' at offset ${field.offset}:`, e);
|
|
9931
|
+
throw e;
|
|
9932
|
+
}
|
|
9933
|
+
}
|
|
9934
|
+
if (structDefOptions?.reduceValue) {
|
|
9935
|
+
return structDefOptions.reduceValue(result);
|
|
9936
|
+
}
|
|
9937
|
+
return result;
|
|
9938
|
+
},
|
|
9939
|
+
packList(objects, options) {
|
|
9940
|
+
if (objects.length === 0) {
|
|
9941
|
+
return new ArrayBuffer(0);
|
|
9942
|
+
}
|
|
9943
|
+
const buffer = new ArrayBuffer(totalSize * objects.length);
|
|
9944
|
+
const view = new DataView(buffer);
|
|
9945
|
+
for (let i = 0;i < objects.length; i++) {
|
|
9946
|
+
let mappedObj = objects[i];
|
|
9947
|
+
if (structDefOptions?.mapValue) {
|
|
9948
|
+
mappedObj = structDefOptions.mapValue(objects[i]);
|
|
9949
|
+
}
|
|
9950
|
+
for (const field of layout) {
|
|
9951
|
+
const value = mappedObj[field.name] ?? field.default;
|
|
9952
|
+
if (!field.optional && value === undefined) {
|
|
9953
|
+
fatalError(`Packing non-optional field '${field.name}' at index ${i} but value is undefined (and no default provided)`);
|
|
9954
|
+
}
|
|
9955
|
+
if (field.validate) {
|
|
9956
|
+
for (const validateFn of field.validate) {
|
|
9957
|
+
validateFn(value, field.name, {
|
|
9958
|
+
hints: options?.validationHints,
|
|
9959
|
+
input: mappedObj
|
|
9960
|
+
});
|
|
9961
|
+
}
|
|
9962
|
+
}
|
|
9963
|
+
field.pack(view, i * totalSize + field.offset, value, mappedObj, options);
|
|
9964
|
+
}
|
|
9965
|
+
}
|
|
9966
|
+
return buffer;
|
|
9967
|
+
},
|
|
9968
|
+
unpackList(buf, count) {
|
|
9969
|
+
if (count === 0) {
|
|
9970
|
+
return [];
|
|
9971
|
+
}
|
|
9972
|
+
const expectedSize = totalSize * count;
|
|
9973
|
+
if (buf.byteLength < expectedSize) {
|
|
9974
|
+
fatalError(`Buffer size (${buf.byteLength}) is smaller than expected size (${expectedSize}) for unpacking ${count} structs.`);
|
|
9975
|
+
}
|
|
9976
|
+
const view = new DataView(buf);
|
|
9977
|
+
const results = [];
|
|
9978
|
+
for (let i = 0;i < count; i++) {
|
|
9979
|
+
const offset2 = i * totalSize;
|
|
9980
|
+
const result = structDefOptions?.default ? { ...structDefOptions.default } : {};
|
|
9981
|
+
for (const field of layout) {
|
|
9982
|
+
if (!field.unpack) {
|
|
9983
|
+
continue;
|
|
9984
|
+
}
|
|
9985
|
+
try {
|
|
9986
|
+
result[field.name] = field.unpack(view, offset2 + field.offset);
|
|
9987
|
+
} catch (e) {
|
|
9988
|
+
console.error(`Error unpacking field '${field.name}' at index ${i}, offset ${offset2 + field.offset}:`, e);
|
|
9989
|
+
throw e;
|
|
9990
|
+
}
|
|
9991
|
+
}
|
|
9992
|
+
if (structDefOptions?.reduceValue) {
|
|
9993
|
+
results.push(structDefOptions.reduceValue(result));
|
|
9994
|
+
} else {
|
|
9995
|
+
results.push(result);
|
|
9996
|
+
}
|
|
9997
|
+
}
|
|
9998
|
+
return results;
|
|
9999
|
+
},
|
|
10000
|
+
describe() {
|
|
10001
|
+
return description;
|
|
10002
|
+
}
|
|
10003
|
+
};
|
|
10004
|
+
}
|
|
10005
|
+
|
|
10006
|
+
// src/zig-structs.ts
|
|
10007
|
+
import { ptr as ptr2, toArrayBuffer as toArrayBuffer3 } from "bun:ffi";
|
|
10008
|
+
var rgbaPackTransform = (rgba) => rgba ? ptr2(rgba.buffer) : null;
|
|
10009
|
+
var rgbaUnpackTransform = (ptr3) => ptr3 ? RGBA.fromArray(new Float32Array(toArrayBuffer3(ptr3))) : undefined;
|
|
7737
10010
|
var StyledChunkStruct = defineStruct([
|
|
7738
10011
|
["text", "char*"],
|
|
7739
10012
|
["text_len", "u64", { lengthOf: "text" }],
|
|
@@ -7820,7 +10093,7 @@ var MeasureResultStruct = defineStruct([
|
|
|
7820
10093
|
// src/zig.ts
|
|
7821
10094
|
var module = await import(`@opentui/core-${process.platform}-${process.arch}/index.ts`);
|
|
7822
10095
|
var targetLibPath = module.default;
|
|
7823
|
-
if (
|
|
10096
|
+
if (isBunfsPath(targetLibPath)) {
|
|
7824
10097
|
targetLibPath = targetLibPath.replace("../", "");
|
|
7825
10098
|
}
|
|
7826
10099
|
if (!existsSync2(targetLibPath)) {
|
|
@@ -8073,13 +10346,13 @@ function getOpenTUILib(libPath) {
|
|
|
8073
10346
|
args: ["ptr"],
|
|
8074
10347
|
returns: "void"
|
|
8075
10348
|
},
|
|
8076
|
-
|
|
8077
|
-
args: ["ptr", "
|
|
10349
|
+
setKittyKeyboardFlags: {
|
|
10350
|
+
args: ["ptr", "u8"],
|
|
8078
10351
|
returns: "void"
|
|
8079
10352
|
},
|
|
8080
|
-
|
|
10353
|
+
getKittyKeyboardFlags: {
|
|
8081
10354
|
args: ["ptr"],
|
|
8082
|
-
returns: "
|
|
10355
|
+
returns: "u8"
|
|
8083
10356
|
},
|
|
8084
10357
|
setupTerminal: {
|
|
8085
10358
|
args: ["ptr", "bool"],
|
|
@@ -8786,7 +11059,7 @@ class FFIRenderLib {
|
|
|
8786
11059
|
if (msgLen === 0 || !msgPtr) {
|
|
8787
11060
|
return;
|
|
8788
11061
|
}
|
|
8789
|
-
const msgBuffer =
|
|
11062
|
+
const msgBuffer = toArrayBuffer4(msgPtr, 0, msgLen);
|
|
8790
11063
|
const msgBytes = new Uint8Array(msgBuffer);
|
|
8791
11064
|
const message = this.decoder.decode(msgBytes);
|
|
8792
11065
|
switch (level) {
|
|
@@ -8832,12 +11105,12 @@ class FFIRenderLib {
|
|
|
8832
11105
|
if (nameLen === 0 || !namePtr) {
|
|
8833
11106
|
return;
|
|
8834
11107
|
}
|
|
8835
|
-
const nameBuffer =
|
|
11108
|
+
const nameBuffer = toArrayBuffer4(namePtr, 0, nameLen);
|
|
8836
11109
|
const nameBytes = new Uint8Array(nameBuffer);
|
|
8837
11110
|
const eventName = this.decoder.decode(nameBytes);
|
|
8838
11111
|
let eventData;
|
|
8839
11112
|
if (dataLen > 0 && dataPtr) {
|
|
8840
|
-
eventData =
|
|
11113
|
+
eventData = toArrayBuffer4(dataPtr, 0, dataLen).slice();
|
|
8841
11114
|
} else {
|
|
8842
11115
|
eventData = new ArrayBuffer(0);
|
|
8843
11116
|
}
|
|
@@ -8903,32 +11176,32 @@ class FFIRenderLib {
|
|
|
8903
11176
|
return new OptimizedBuffer(this, bufferPtr, width, height, { id: "current buffer", widthMethod: "unicode" });
|
|
8904
11177
|
}
|
|
8905
11178
|
bufferGetCharPtr(buffer) {
|
|
8906
|
-
const
|
|
8907
|
-
if (!
|
|
11179
|
+
const ptr4 = this.opentui.symbols.bufferGetCharPtr(buffer);
|
|
11180
|
+
if (!ptr4) {
|
|
8908
11181
|
throw new Error("Failed to get char pointer");
|
|
8909
11182
|
}
|
|
8910
|
-
return
|
|
11183
|
+
return ptr4;
|
|
8911
11184
|
}
|
|
8912
11185
|
bufferGetFgPtr(buffer) {
|
|
8913
|
-
const
|
|
8914
|
-
if (!
|
|
11186
|
+
const ptr4 = this.opentui.symbols.bufferGetFgPtr(buffer);
|
|
11187
|
+
if (!ptr4) {
|
|
8915
11188
|
throw new Error("Failed to get fg pointer");
|
|
8916
11189
|
}
|
|
8917
|
-
return
|
|
11190
|
+
return ptr4;
|
|
8918
11191
|
}
|
|
8919
11192
|
bufferGetBgPtr(buffer) {
|
|
8920
|
-
const
|
|
8921
|
-
if (!
|
|
11193
|
+
const ptr4 = this.opentui.symbols.bufferGetBgPtr(buffer);
|
|
11194
|
+
if (!ptr4) {
|
|
8922
11195
|
throw new Error("Failed to get bg pointer");
|
|
8923
11196
|
}
|
|
8924
|
-
return
|
|
11197
|
+
return ptr4;
|
|
8925
11198
|
}
|
|
8926
11199
|
bufferGetAttributesPtr(buffer) {
|
|
8927
|
-
const
|
|
8928
|
-
if (!
|
|
11200
|
+
const ptr4 = this.opentui.symbols.bufferGetAttributesPtr(buffer);
|
|
11201
|
+
if (!ptr4) {
|
|
8929
11202
|
throw new Error("Failed to get attributes pointer");
|
|
8930
11203
|
}
|
|
8931
|
-
return
|
|
11204
|
+
return ptr4;
|
|
8932
11205
|
}
|
|
8933
11206
|
bufferGetRespectAlpha(buffer) {
|
|
8934
11207
|
return this.opentui.symbols.bufferGetRespectAlpha(buffer);
|
|
@@ -9076,11 +11349,11 @@ class FFIRenderLib {
|
|
|
9076
11349
|
disableKittyKeyboard(renderer) {
|
|
9077
11350
|
this.opentui.symbols.disableKittyKeyboard(renderer);
|
|
9078
11351
|
}
|
|
9079
|
-
|
|
9080
|
-
this.opentui.symbols.
|
|
11352
|
+
setKittyKeyboardFlags(renderer, flags) {
|
|
11353
|
+
this.opentui.symbols.setKittyKeyboardFlags(renderer, flags);
|
|
9081
11354
|
}
|
|
9082
|
-
|
|
9083
|
-
return this.opentui.symbols.
|
|
11355
|
+
getKittyKeyboardFlags(renderer) {
|
|
11356
|
+
return this.opentui.symbols.getKittyKeyboardFlags(renderer);
|
|
9084
11357
|
}
|
|
9085
11358
|
setupTerminal(renderer, useAlternateScreen) {
|
|
9086
11359
|
this.opentui.symbols.setupTerminal(renderer, useAlternateScreen);
|
|
@@ -9171,7 +11444,7 @@ class FFIRenderLib {
|
|
|
9171
11444
|
return;
|
|
9172
11445
|
}
|
|
9173
11446
|
const chunksBuffer = StyledChunkStruct.packList(nonEmptyChunks);
|
|
9174
|
-
this.opentui.symbols.textBufferSetStyledText(buffer,
|
|
11447
|
+
this.opentui.symbols.textBufferSetStyledText(buffer, ptr3(chunksBuffer), nonEmptyChunks.length);
|
|
9175
11448
|
}
|
|
9176
11449
|
textBufferGetLineCount(buffer) {
|
|
9177
11450
|
return this.opentui.symbols.textBufferGetLineCount(buffer);
|
|
@@ -9182,7 +11455,7 @@ class FFIRenderLib {
|
|
|
9182
11455
|
}
|
|
9183
11456
|
getPlainTextBytes(buffer, maxLength) {
|
|
9184
11457
|
const outBuffer = new Uint8Array(maxLength);
|
|
9185
|
-
const actualLen = this.textBufferGetPlainText(buffer,
|
|
11458
|
+
const actualLen = this.textBufferGetPlainText(buffer, ptr3(outBuffer), maxLength);
|
|
9186
11459
|
if (actualLen === 0) {
|
|
9187
11460
|
return null;
|
|
9188
11461
|
}
|
|
@@ -9190,7 +11463,7 @@ class FFIRenderLib {
|
|
|
9190
11463
|
}
|
|
9191
11464
|
textBufferGetTextRange(buffer, startOffset, endOffset, maxLength) {
|
|
9192
11465
|
const outBuffer = new Uint8Array(maxLength);
|
|
9193
|
-
const actualLen = this.opentui.symbols.textBufferGetTextRange(buffer, startOffset, endOffset,
|
|
11466
|
+
const actualLen = this.opentui.symbols.textBufferGetTextRange(buffer, startOffset, endOffset, ptr3(outBuffer), maxLength);
|
|
9194
11467
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9195
11468
|
if (len === 0) {
|
|
9196
11469
|
return null;
|
|
@@ -9199,7 +11472,7 @@ class FFIRenderLib {
|
|
|
9199
11472
|
}
|
|
9200
11473
|
textBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, maxLength) {
|
|
9201
11474
|
const outBuffer = new Uint8Array(maxLength);
|
|
9202
|
-
const actualLen = this.opentui.symbols.textBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol,
|
|
11475
|
+
const actualLen = this.opentui.symbols.textBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, ptr3(outBuffer), maxLength);
|
|
9203
11476
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9204
11477
|
if (len === 0) {
|
|
9205
11478
|
return null;
|
|
@@ -9259,7 +11532,7 @@ class FFIRenderLib {
|
|
|
9259
11532
|
}
|
|
9260
11533
|
textBufferViewGetLineInfo(view) {
|
|
9261
11534
|
const outBuffer = new ArrayBuffer(LineInfoStruct.size);
|
|
9262
|
-
this.textBufferViewGetLineInfoDirect(view,
|
|
11535
|
+
this.textBufferViewGetLineInfoDirect(view, ptr3(outBuffer));
|
|
9263
11536
|
const struct = LineInfoStruct.unpack(outBuffer);
|
|
9264
11537
|
return {
|
|
9265
11538
|
maxLineWidth: struct.maxWidth,
|
|
@@ -9271,7 +11544,7 @@ class FFIRenderLib {
|
|
|
9271
11544
|
}
|
|
9272
11545
|
textBufferViewGetLogicalLineInfo(view) {
|
|
9273
11546
|
const outBuffer = new ArrayBuffer(LineInfoStruct.size);
|
|
9274
|
-
this.textBufferViewGetLogicalLineInfoDirect(view,
|
|
11547
|
+
this.textBufferViewGetLogicalLineInfoDirect(view, ptr3(outBuffer));
|
|
9275
11548
|
const struct = LineInfoStruct.unpack(outBuffer);
|
|
9276
11549
|
return {
|
|
9277
11550
|
maxLineWidth: struct.maxWidth,
|
|
@@ -9300,7 +11573,7 @@ class FFIRenderLib {
|
|
|
9300
11573
|
}
|
|
9301
11574
|
textBufferViewGetSelectedTextBytes(view, maxLength) {
|
|
9302
11575
|
const outBuffer = new Uint8Array(maxLength);
|
|
9303
|
-
const actualLen = this.textBufferViewGetSelectedText(view,
|
|
11576
|
+
const actualLen = this.textBufferViewGetSelectedText(view, ptr3(outBuffer), maxLength);
|
|
9304
11577
|
if (actualLen === 0) {
|
|
9305
11578
|
return null;
|
|
9306
11579
|
}
|
|
@@ -9308,7 +11581,7 @@ class FFIRenderLib {
|
|
|
9308
11581
|
}
|
|
9309
11582
|
textBufferViewGetPlainTextBytes(view, maxLength) {
|
|
9310
11583
|
const outBuffer = new Uint8Array(maxLength);
|
|
9311
|
-
const actualLen = this.textBufferViewGetPlainText(view,
|
|
11584
|
+
const actualLen = this.textBufferViewGetPlainText(view, ptr3(outBuffer), maxLength);
|
|
9312
11585
|
if (actualLen === 0) {
|
|
9313
11586
|
return null;
|
|
9314
11587
|
}
|
|
@@ -9322,7 +11595,7 @@ class FFIRenderLib {
|
|
|
9322
11595
|
}
|
|
9323
11596
|
textBufferViewMeasureForDimensions(view, width, height) {
|
|
9324
11597
|
const resultBuffer = new ArrayBuffer(MeasureResultStruct.size);
|
|
9325
|
-
const resultPtr =
|
|
11598
|
+
const resultPtr = ptr3(new Uint8Array(resultBuffer));
|
|
9326
11599
|
const success = this.opentui.symbols.textBufferViewMeasureForDimensions(view, width, height, resultPtr);
|
|
9327
11600
|
if (!success) {
|
|
9328
11601
|
return null;
|
|
@@ -9332,11 +11605,11 @@ class FFIRenderLib {
|
|
|
9332
11605
|
}
|
|
9333
11606
|
textBufferAddHighlightByCharRange(buffer, highlight) {
|
|
9334
11607
|
const packedHighlight = HighlightStruct.pack(highlight);
|
|
9335
|
-
this.opentui.symbols.textBufferAddHighlightByCharRange(buffer,
|
|
11608
|
+
this.opentui.symbols.textBufferAddHighlightByCharRange(buffer, ptr3(packedHighlight));
|
|
9336
11609
|
}
|
|
9337
11610
|
textBufferAddHighlight(buffer, lineIdx, highlight) {
|
|
9338
11611
|
const packedHighlight = HighlightStruct.pack(highlight);
|
|
9339
|
-
this.opentui.symbols.textBufferAddHighlight(buffer, lineIdx,
|
|
11612
|
+
this.opentui.symbols.textBufferAddHighlight(buffer, lineIdx, ptr3(packedHighlight));
|
|
9340
11613
|
}
|
|
9341
11614
|
textBufferRemoveHighlightsByRef(buffer, hlRef) {
|
|
9342
11615
|
this.opentui.symbols.textBufferRemoveHighlightsByRef(buffer, hlRef);
|
|
@@ -9352,12 +11625,12 @@ class FFIRenderLib {
|
|
|
9352
11625
|
}
|
|
9353
11626
|
textBufferGetLineHighlights(buffer, lineIdx) {
|
|
9354
11627
|
const outCountBuf = new BigUint64Array(1);
|
|
9355
|
-
const nativePtr = this.opentui.symbols.textBufferGetLineHighlightsPtr(buffer, lineIdx,
|
|
11628
|
+
const nativePtr = this.opentui.symbols.textBufferGetLineHighlightsPtr(buffer, lineIdx, ptr3(outCountBuf));
|
|
9356
11629
|
if (!nativePtr)
|
|
9357
11630
|
return [];
|
|
9358
11631
|
const count = Number(outCountBuf[0]);
|
|
9359
11632
|
const byteLen = count * HighlightStruct.size;
|
|
9360
|
-
const raw =
|
|
11633
|
+
const raw = toArrayBuffer4(nativePtr, 0, byteLen);
|
|
9361
11634
|
const results = HighlightStruct.unpackList(raw, count);
|
|
9362
11635
|
this.opentui.symbols.textBufferFreeLineHighlights(nativePtr, count);
|
|
9363
11636
|
return results;
|
|
@@ -9393,7 +11666,7 @@ class FFIRenderLib {
|
|
|
9393
11666
|
const y = new Uint32Array(1);
|
|
9394
11667
|
const width = new Uint32Array(1);
|
|
9395
11668
|
const height = new Uint32Array(1);
|
|
9396
|
-
this.opentui.symbols.editorViewGetViewport(view,
|
|
11669
|
+
this.opentui.symbols.editorViewGetViewport(view, ptr3(x), ptr3(y), ptr3(width), ptr3(height));
|
|
9397
11670
|
return {
|
|
9398
11671
|
offsetX: x[0],
|
|
9399
11672
|
offsetY: y[0],
|
|
@@ -9423,7 +11696,7 @@ class FFIRenderLib {
|
|
|
9423
11696
|
}
|
|
9424
11697
|
editorViewGetLineInfo(view) {
|
|
9425
11698
|
const outBuffer = new ArrayBuffer(LineInfoStruct.size);
|
|
9426
|
-
this.opentui.symbols.editorViewGetLineInfoDirect(view,
|
|
11699
|
+
this.opentui.symbols.editorViewGetLineInfoDirect(view, ptr3(outBuffer));
|
|
9427
11700
|
const struct = LineInfoStruct.unpack(outBuffer);
|
|
9428
11701
|
return {
|
|
9429
11702
|
maxLineWidth: struct.maxWidth,
|
|
@@ -9435,7 +11708,7 @@ class FFIRenderLib {
|
|
|
9435
11708
|
}
|
|
9436
11709
|
editorViewGetLogicalLineInfo(view) {
|
|
9437
11710
|
const outBuffer = new ArrayBuffer(LineInfoStruct.size);
|
|
9438
|
-
this.opentui.symbols.editorViewGetLogicalLineInfoDirect(view,
|
|
11711
|
+
this.opentui.symbols.editorViewGetLogicalLineInfoDirect(view, ptr3(outBuffer));
|
|
9439
11712
|
const struct = LineInfoStruct.unpack(outBuffer);
|
|
9440
11713
|
return {
|
|
9441
11714
|
maxLineWidth: struct.maxWidth,
|
|
@@ -9464,7 +11737,7 @@ class FFIRenderLib {
|
|
|
9464
11737
|
}
|
|
9465
11738
|
editBufferGetText(buffer, maxLength) {
|
|
9466
11739
|
const outBuffer = new Uint8Array(maxLength);
|
|
9467
|
-
const actualLen = this.opentui.symbols.editBufferGetText(buffer,
|
|
11740
|
+
const actualLen = this.opentui.symbols.editBufferGetText(buffer, ptr3(outBuffer), maxLength);
|
|
9468
11741
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9469
11742
|
if (len === 0)
|
|
9470
11743
|
return null;
|
|
@@ -9519,7 +11792,7 @@ class FFIRenderLib {
|
|
|
9519
11792
|
}
|
|
9520
11793
|
editBufferGetCursorPosition(buffer) {
|
|
9521
11794
|
const cursorBuffer = new ArrayBuffer(LogicalCursorStruct.size);
|
|
9522
|
-
this.opentui.symbols.editBufferGetCursorPosition(buffer,
|
|
11795
|
+
this.opentui.symbols.editBufferGetCursorPosition(buffer, ptr3(cursorBuffer));
|
|
9523
11796
|
return LogicalCursorStruct.unpack(cursorBuffer);
|
|
9524
11797
|
}
|
|
9525
11798
|
editBufferGetId(buffer) {
|
|
@@ -9537,7 +11810,7 @@ class FFIRenderLib {
|
|
|
9537
11810
|
}
|
|
9538
11811
|
editBufferUndo(buffer, maxLength) {
|
|
9539
11812
|
const outBuffer = new Uint8Array(maxLength);
|
|
9540
|
-
const actualLen = this.opentui.symbols.editBufferUndo(buffer,
|
|
11813
|
+
const actualLen = this.opentui.symbols.editBufferUndo(buffer, ptr3(outBuffer), maxLength);
|
|
9541
11814
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9542
11815
|
if (len === 0)
|
|
9543
11816
|
return null;
|
|
@@ -9545,7 +11818,7 @@ class FFIRenderLib {
|
|
|
9545
11818
|
}
|
|
9546
11819
|
editBufferRedo(buffer, maxLength) {
|
|
9547
11820
|
const outBuffer = new Uint8Array(maxLength);
|
|
9548
|
-
const actualLen = this.opentui.symbols.editBufferRedo(buffer,
|
|
11821
|
+
const actualLen = this.opentui.symbols.editBufferRedo(buffer, ptr3(outBuffer), maxLength);
|
|
9549
11822
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9550
11823
|
if (len === 0)
|
|
9551
11824
|
return null;
|
|
@@ -9565,22 +11838,22 @@ class FFIRenderLib {
|
|
|
9565
11838
|
}
|
|
9566
11839
|
editBufferGetNextWordBoundary(buffer) {
|
|
9567
11840
|
const cursorBuffer = new ArrayBuffer(LogicalCursorStruct.size);
|
|
9568
|
-
this.opentui.symbols.editBufferGetNextWordBoundary(buffer,
|
|
11841
|
+
this.opentui.symbols.editBufferGetNextWordBoundary(buffer, ptr3(cursorBuffer));
|
|
9569
11842
|
return LogicalCursorStruct.unpack(cursorBuffer);
|
|
9570
11843
|
}
|
|
9571
11844
|
editBufferGetPrevWordBoundary(buffer) {
|
|
9572
11845
|
const cursorBuffer = new ArrayBuffer(LogicalCursorStruct.size);
|
|
9573
|
-
this.opentui.symbols.editBufferGetPrevWordBoundary(buffer,
|
|
11846
|
+
this.opentui.symbols.editBufferGetPrevWordBoundary(buffer, ptr3(cursorBuffer));
|
|
9574
11847
|
return LogicalCursorStruct.unpack(cursorBuffer);
|
|
9575
11848
|
}
|
|
9576
11849
|
editBufferGetEOL(buffer) {
|
|
9577
11850
|
const cursorBuffer = new ArrayBuffer(LogicalCursorStruct.size);
|
|
9578
|
-
this.opentui.symbols.editBufferGetEOL(buffer,
|
|
11851
|
+
this.opentui.symbols.editBufferGetEOL(buffer, ptr3(cursorBuffer));
|
|
9579
11852
|
return LogicalCursorStruct.unpack(cursorBuffer);
|
|
9580
11853
|
}
|
|
9581
11854
|
editBufferOffsetToPosition(buffer, offset) {
|
|
9582
11855
|
const cursorBuffer = new ArrayBuffer(LogicalCursorStruct.size);
|
|
9583
|
-
const success = this.opentui.symbols.editBufferOffsetToPosition(buffer, offset,
|
|
11856
|
+
const success = this.opentui.symbols.editBufferOffsetToPosition(buffer, offset, ptr3(cursorBuffer));
|
|
9584
11857
|
if (!success)
|
|
9585
11858
|
return null;
|
|
9586
11859
|
return LogicalCursorStruct.unpack(cursorBuffer);
|
|
@@ -9593,7 +11866,7 @@ class FFIRenderLib {
|
|
|
9593
11866
|
}
|
|
9594
11867
|
editBufferGetTextRange(buffer, startOffset, endOffset, maxLength) {
|
|
9595
11868
|
const outBuffer = new Uint8Array(maxLength);
|
|
9596
|
-
const actualLen = this.opentui.symbols.editBufferGetTextRange(buffer, startOffset, endOffset,
|
|
11869
|
+
const actualLen = this.opentui.symbols.editBufferGetTextRange(buffer, startOffset, endOffset, ptr3(outBuffer), maxLength);
|
|
9597
11870
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9598
11871
|
if (len === 0)
|
|
9599
11872
|
return null;
|
|
@@ -9601,7 +11874,7 @@ class FFIRenderLib {
|
|
|
9601
11874
|
}
|
|
9602
11875
|
editBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, maxLength) {
|
|
9603
11876
|
const outBuffer = new Uint8Array(maxLength);
|
|
9604
|
-
const actualLen = this.opentui.symbols.editBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol,
|
|
11877
|
+
const actualLen = this.opentui.symbols.editBufferGetTextRangeByCoords(buffer, startRow, startCol, endRow, endCol, ptr3(outBuffer), maxLength);
|
|
9605
11878
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9606
11879
|
if (len === 0)
|
|
9607
11880
|
return null;
|
|
@@ -9634,7 +11907,7 @@ class FFIRenderLib {
|
|
|
9634
11907
|
}
|
|
9635
11908
|
editorViewGetSelectedTextBytes(view, maxLength) {
|
|
9636
11909
|
const outBuffer = new Uint8Array(maxLength);
|
|
9637
|
-
const actualLen = this.opentui.symbols.editorViewGetSelectedTextBytes(view,
|
|
11910
|
+
const actualLen = this.opentui.symbols.editorViewGetSelectedTextBytes(view, ptr3(outBuffer), maxLength);
|
|
9638
11911
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9639
11912
|
if (len === 0)
|
|
9640
11913
|
return null;
|
|
@@ -9643,12 +11916,12 @@ class FFIRenderLib {
|
|
|
9643
11916
|
editorViewGetCursor(view) {
|
|
9644
11917
|
const row = new Uint32Array(1);
|
|
9645
11918
|
const col = new Uint32Array(1);
|
|
9646
|
-
this.opentui.symbols.editorViewGetCursor(view,
|
|
11919
|
+
this.opentui.symbols.editorViewGetCursor(view, ptr3(row), ptr3(col));
|
|
9647
11920
|
return { row: row[0], col: col[0] };
|
|
9648
11921
|
}
|
|
9649
11922
|
editorViewGetText(view, maxLength) {
|
|
9650
11923
|
const outBuffer = new Uint8Array(maxLength);
|
|
9651
|
-
const actualLen = this.opentui.symbols.editorViewGetText(view,
|
|
11924
|
+
const actualLen = this.opentui.symbols.editorViewGetText(view, ptr3(outBuffer), maxLength);
|
|
9652
11925
|
const len = typeof actualLen === "bigint" ? Number(actualLen) : actualLen;
|
|
9653
11926
|
if (len === 0)
|
|
9654
11927
|
return null;
|
|
@@ -9656,7 +11929,7 @@ class FFIRenderLib {
|
|
|
9656
11929
|
}
|
|
9657
11930
|
editorViewGetVisualCursor(view) {
|
|
9658
11931
|
const cursorBuffer = new ArrayBuffer(VisualCursorStruct.size);
|
|
9659
|
-
this.opentui.symbols.editorViewGetVisualCursor(view,
|
|
11932
|
+
this.opentui.symbols.editorViewGetVisualCursor(view, ptr3(cursorBuffer));
|
|
9660
11933
|
return VisualCursorStruct.unpack(cursorBuffer);
|
|
9661
11934
|
}
|
|
9662
11935
|
editorViewMoveUpVisual(view) {
|
|
@@ -9673,17 +11946,17 @@ class FFIRenderLib {
|
|
|
9673
11946
|
}
|
|
9674
11947
|
editorViewGetNextWordBoundary(view) {
|
|
9675
11948
|
const cursorBuffer = new ArrayBuffer(VisualCursorStruct.size);
|
|
9676
|
-
this.opentui.symbols.editorViewGetNextWordBoundary(view,
|
|
11949
|
+
this.opentui.symbols.editorViewGetNextWordBoundary(view, ptr3(cursorBuffer));
|
|
9677
11950
|
return VisualCursorStruct.unpack(cursorBuffer);
|
|
9678
11951
|
}
|
|
9679
11952
|
editorViewGetPrevWordBoundary(view) {
|
|
9680
11953
|
const cursorBuffer = new ArrayBuffer(VisualCursorStruct.size);
|
|
9681
|
-
this.opentui.symbols.editorViewGetPrevWordBoundary(view,
|
|
11954
|
+
this.opentui.symbols.editorViewGetPrevWordBoundary(view, ptr3(cursorBuffer));
|
|
9682
11955
|
return VisualCursorStruct.unpack(cursorBuffer);
|
|
9683
11956
|
}
|
|
9684
11957
|
editorViewGetEOL(view) {
|
|
9685
11958
|
const cursorBuffer = new ArrayBuffer(VisualCursorStruct.size);
|
|
9686
|
-
this.opentui.symbols.editorViewGetEOL(view,
|
|
11959
|
+
this.opentui.symbols.editorViewGetEOL(view, ptr3(cursorBuffer));
|
|
9687
11960
|
return VisualCursorStruct.unpack(cursorBuffer);
|
|
9688
11961
|
}
|
|
9689
11962
|
bufferPushScissorRect(buffer, x, y, width, height) {
|
|
@@ -9697,7 +11970,7 @@ class FFIRenderLib {
|
|
|
9697
11970
|
}
|
|
9698
11971
|
getTerminalCapabilities(renderer) {
|
|
9699
11972
|
const capsBuffer = new ArrayBuffer(TerminalCapabilitiesStruct.size);
|
|
9700
|
-
this.opentui.symbols.getTerminalCapabilities(renderer,
|
|
11973
|
+
this.opentui.symbols.getTerminalCapabilities(renderer, ptr3(capsBuffer));
|
|
9701
11974
|
const caps = TerminalCapabilitiesStruct.unpack(capsBuffer);
|
|
9702
11975
|
return {
|
|
9703
11976
|
kitty_keyboard: caps.kitty_keyboard,
|
|
@@ -9729,7 +12002,7 @@ class FFIRenderLib {
|
|
|
9729
12002
|
const widthMethodCode = widthMethod === "wcwidth" ? 0 : 1;
|
|
9730
12003
|
const outPtrBuffer = new ArrayBuffer(8);
|
|
9731
12004
|
const outLenBuffer = new ArrayBuffer(8);
|
|
9732
|
-
const success = this.opentui.symbols.encodeUnicode(textBytes, textBytes.length,
|
|
12005
|
+
const success = this.opentui.symbols.encodeUnicode(textBytes, textBytes.length, ptr3(outPtrBuffer), ptr3(outLenBuffer), widthMethodCode);
|
|
9733
12006
|
if (!success) {
|
|
9734
12007
|
return null;
|
|
9735
12008
|
}
|
|
@@ -9741,7 +12014,7 @@ class FFIRenderLib {
|
|
|
9741
12014
|
return { ptr: resultPtr, data: [] };
|
|
9742
12015
|
}
|
|
9743
12016
|
const byteLen = resultLen * EncodedCharStruct.size;
|
|
9744
|
-
const raw =
|
|
12017
|
+
const raw = toArrayBuffer4(resultPtr, 0, byteLen);
|
|
9745
12018
|
const data = EncodedCharStruct.unpackList(raw, resultLen);
|
|
9746
12019
|
return { ptr: resultPtr, data };
|
|
9747
12020
|
}
|
|
@@ -9783,7 +12056,7 @@ class FFIRenderLib {
|
|
|
9783
12056
|
return;
|
|
9784
12057
|
}
|
|
9785
12058
|
const chunksBuffer = StyledChunkStruct.packList(nonEmptyChunks);
|
|
9786
|
-
this.opentui.symbols.editorViewSetPlaceholderStyledText(view,
|
|
12059
|
+
this.opentui.symbols.editorViewSetPlaceholderStyledText(view, ptr3(chunksBuffer), nonEmptyChunks.length);
|
|
9787
12060
|
}
|
|
9788
12061
|
editorViewSetTabIndicator(view, indicator) {
|
|
9789
12062
|
this.opentui.symbols.editorViewSetTabIndicator(view, indicator);
|
|
@@ -9838,9 +12111,9 @@ class TextBuffer {
|
|
|
9838
12111
|
_textBytes;
|
|
9839
12112
|
_memId;
|
|
9840
12113
|
_appendedChunks = [];
|
|
9841
|
-
constructor(lib,
|
|
12114
|
+
constructor(lib, ptr4) {
|
|
9842
12115
|
this.lib = lib;
|
|
9843
|
-
this.bufferPtr =
|
|
12116
|
+
this.bufferPtr = ptr4;
|
|
9844
12117
|
}
|
|
9845
12118
|
static create(widthMethod) {
|
|
9846
12119
|
const lib = resolveRenderLib();
|
|
@@ -10023,7 +12296,6 @@ class TextBuffer {
|
|
|
10023
12296
|
|
|
10024
12297
|
// src/Renderable.ts
|
|
10025
12298
|
import { EventEmitter as EventEmitter6 } from "events";
|
|
10026
|
-
import Yoga, { Direction as Direction2, Display as Display2, Edge as Edge2, FlexDirection as FlexDirection2 } from "bun-yoga";
|
|
10027
12299
|
|
|
10028
12300
|
// src/lib/renderable.validations.ts
|
|
10029
12301
|
function validateOptions(id, options) {
|
|
@@ -10153,7 +12425,7 @@ class BaseRenderable extends EventEmitter6 {
|
|
|
10153
12425
|
this._visible = value;
|
|
10154
12426
|
}
|
|
10155
12427
|
}
|
|
10156
|
-
var yogaConfig =
|
|
12428
|
+
var yogaConfig = src_default.Config.create();
|
|
10157
12429
|
yogaConfig.setUseWebDefaults(false);
|
|
10158
12430
|
yogaConfig.setPointScaleFactor(1);
|
|
10159
12431
|
|
|
@@ -10196,6 +12468,7 @@ class Renderable extends BaseRenderable {
|
|
|
10196
12468
|
parent = null;
|
|
10197
12469
|
childrenPrimarySortDirty = true;
|
|
10198
12470
|
childrenSortedByPrimaryAxis = [];
|
|
12471
|
+
_shouldUpdateBefore = new Set;
|
|
10199
12472
|
onLifecyclePass = null;
|
|
10200
12473
|
renderBefore;
|
|
10201
12474
|
renderAfter;
|
|
@@ -10219,8 +12492,8 @@ class Renderable extends BaseRenderable {
|
|
|
10219
12492
|
this.buffered = options.buffered ?? false;
|
|
10220
12493
|
this._live = options.live ?? false;
|
|
10221
12494
|
this._liveCount = this._live && this._visible ? 1 : 0;
|
|
10222
|
-
this.yogaNode =
|
|
10223
|
-
this.yogaNode.setDisplay(this._visible ?
|
|
12495
|
+
this.yogaNode = src_default.Node.create(yogaConfig);
|
|
12496
|
+
this.yogaNode.setDisplay(this._visible ? Display.Flex : Display.None);
|
|
10224
12497
|
this.setupYogaProperties(options);
|
|
10225
12498
|
this.applyEventOptions(options);
|
|
10226
12499
|
if (this.buffered) {
|
|
@@ -10255,7 +12528,7 @@ class Renderable extends BaseRenderable {
|
|
|
10255
12528
|
return;
|
|
10256
12529
|
const wasVisible = this._visible;
|
|
10257
12530
|
this._visible = value;
|
|
10258
|
-
this.yogaNode.setDisplay(value ?
|
|
12531
|
+
this.yogaNode.setDisplay(value ? Display.Flex : Display.None);
|
|
10259
12532
|
if (this._live) {
|
|
10260
12533
|
if (!wasVisible && value) {
|
|
10261
12534
|
this.propagateLiveCount(1);
|
|
@@ -10574,40 +12847,40 @@ class Renderable extends BaseRenderable {
|
|
|
10574
12847
|
setupMarginAndPadding(options) {
|
|
10575
12848
|
const node = this.yogaNode;
|
|
10576
12849
|
if (isMarginType(options.margin)) {
|
|
10577
|
-
node.setMargin(
|
|
10578
|
-
node.setMargin(
|
|
10579
|
-
node.setMargin(
|
|
10580
|
-
node.setMargin(
|
|
12850
|
+
node.setMargin(Edge.Top, options.margin);
|
|
12851
|
+
node.setMargin(Edge.Right, options.margin);
|
|
12852
|
+
node.setMargin(Edge.Bottom, options.margin);
|
|
12853
|
+
node.setMargin(Edge.Left, options.margin);
|
|
10581
12854
|
}
|
|
10582
12855
|
if (isMarginType(options.marginTop)) {
|
|
10583
|
-
node.setMargin(
|
|
12856
|
+
node.setMargin(Edge.Top, options.marginTop);
|
|
10584
12857
|
}
|
|
10585
12858
|
if (isMarginType(options.marginRight)) {
|
|
10586
|
-
node.setMargin(
|
|
12859
|
+
node.setMargin(Edge.Right, options.marginRight);
|
|
10587
12860
|
}
|
|
10588
12861
|
if (isMarginType(options.marginBottom)) {
|
|
10589
|
-
node.setMargin(
|
|
12862
|
+
node.setMargin(Edge.Bottom, options.marginBottom);
|
|
10590
12863
|
}
|
|
10591
12864
|
if (isMarginType(options.marginLeft)) {
|
|
10592
|
-
node.setMargin(
|
|
12865
|
+
node.setMargin(Edge.Left, options.marginLeft);
|
|
10593
12866
|
}
|
|
10594
12867
|
if (isPaddingType(options.padding)) {
|
|
10595
|
-
node.setPadding(
|
|
10596
|
-
node.setPadding(
|
|
10597
|
-
node.setPadding(
|
|
10598
|
-
node.setPadding(
|
|
12868
|
+
node.setPadding(Edge.Top, options.padding);
|
|
12869
|
+
node.setPadding(Edge.Right, options.padding);
|
|
12870
|
+
node.setPadding(Edge.Bottom, options.padding);
|
|
12871
|
+
node.setPadding(Edge.Left, options.padding);
|
|
10599
12872
|
}
|
|
10600
12873
|
if (isPaddingType(options.paddingTop)) {
|
|
10601
|
-
node.setPadding(
|
|
12874
|
+
node.setPadding(Edge.Top, options.paddingTop);
|
|
10602
12875
|
}
|
|
10603
12876
|
if (isPaddingType(options.paddingRight)) {
|
|
10604
|
-
node.setPadding(
|
|
12877
|
+
node.setPadding(Edge.Right, options.paddingRight);
|
|
10605
12878
|
}
|
|
10606
12879
|
if (isPaddingType(options.paddingBottom)) {
|
|
10607
|
-
node.setPadding(
|
|
12880
|
+
node.setPadding(Edge.Bottom, options.paddingBottom);
|
|
10608
12881
|
}
|
|
10609
12882
|
if (isPaddingType(options.paddingLeft)) {
|
|
10610
|
-
node.setPadding(
|
|
12883
|
+
node.setPadding(Edge.Left, options.paddingLeft);
|
|
10611
12884
|
}
|
|
10612
12885
|
}
|
|
10613
12886
|
set position(positionType) {
|
|
@@ -10636,30 +12909,30 @@ class Renderable extends BaseRenderable {
|
|
|
10636
12909
|
const { top, right, bottom, left } = position;
|
|
10637
12910
|
if (isPositionType(top)) {
|
|
10638
12911
|
if (top === "auto") {
|
|
10639
|
-
node.setPositionAuto(
|
|
12912
|
+
node.setPositionAuto(Edge.Top);
|
|
10640
12913
|
} else {
|
|
10641
|
-
node.setPosition(
|
|
12914
|
+
node.setPosition(Edge.Top, top);
|
|
10642
12915
|
}
|
|
10643
12916
|
}
|
|
10644
12917
|
if (isPositionType(right)) {
|
|
10645
12918
|
if (right === "auto") {
|
|
10646
|
-
node.setPositionAuto(
|
|
12919
|
+
node.setPositionAuto(Edge.Right);
|
|
10647
12920
|
} else {
|
|
10648
|
-
node.setPosition(
|
|
12921
|
+
node.setPosition(Edge.Right, right);
|
|
10649
12922
|
}
|
|
10650
12923
|
}
|
|
10651
12924
|
if (isPositionType(bottom)) {
|
|
10652
12925
|
if (bottom === "auto") {
|
|
10653
|
-
node.setPositionAuto(
|
|
12926
|
+
node.setPositionAuto(Edge.Bottom);
|
|
10654
12927
|
} else {
|
|
10655
|
-
node.setPosition(
|
|
12928
|
+
node.setPosition(Edge.Bottom, bottom);
|
|
10656
12929
|
}
|
|
10657
12930
|
}
|
|
10658
12931
|
if (isPositionType(left)) {
|
|
10659
12932
|
if (left === "auto") {
|
|
10660
|
-
node.setPositionAuto(
|
|
12933
|
+
node.setPositionAuto(Edge.Left);
|
|
10661
12934
|
} else {
|
|
10662
|
-
node.setPosition(
|
|
12935
|
+
node.setPosition(Edge.Left, left);
|
|
10663
12936
|
}
|
|
10664
12937
|
}
|
|
10665
12938
|
this.requestRender();
|
|
@@ -10731,68 +13004,68 @@ class Renderable extends BaseRenderable {
|
|
|
10731
13004
|
set margin(margin) {
|
|
10732
13005
|
if (isMarginType(margin)) {
|
|
10733
13006
|
const node = this.yogaNode;
|
|
10734
|
-
node.setMargin(
|
|
10735
|
-
node.setMargin(
|
|
10736
|
-
node.setMargin(
|
|
10737
|
-
node.setMargin(
|
|
13007
|
+
node.setMargin(Edge.Top, margin);
|
|
13008
|
+
node.setMargin(Edge.Right, margin);
|
|
13009
|
+
node.setMargin(Edge.Bottom, margin);
|
|
13010
|
+
node.setMargin(Edge.Left, margin);
|
|
10738
13011
|
this.requestRender();
|
|
10739
13012
|
}
|
|
10740
13013
|
}
|
|
10741
13014
|
set marginTop(margin) {
|
|
10742
13015
|
if (isMarginType(margin)) {
|
|
10743
|
-
this.yogaNode.setMargin(
|
|
13016
|
+
this.yogaNode.setMargin(Edge.Top, margin);
|
|
10744
13017
|
this.requestRender();
|
|
10745
13018
|
}
|
|
10746
13019
|
}
|
|
10747
13020
|
set marginRight(margin) {
|
|
10748
13021
|
if (isMarginType(margin)) {
|
|
10749
|
-
this.yogaNode.setMargin(
|
|
13022
|
+
this.yogaNode.setMargin(Edge.Right, margin);
|
|
10750
13023
|
this.requestRender();
|
|
10751
13024
|
}
|
|
10752
13025
|
}
|
|
10753
13026
|
set marginBottom(margin) {
|
|
10754
13027
|
if (isMarginType(margin)) {
|
|
10755
|
-
this.yogaNode.setMargin(
|
|
13028
|
+
this.yogaNode.setMargin(Edge.Bottom, margin);
|
|
10756
13029
|
this.requestRender();
|
|
10757
13030
|
}
|
|
10758
13031
|
}
|
|
10759
13032
|
set marginLeft(margin) {
|
|
10760
13033
|
if (isMarginType(margin)) {
|
|
10761
|
-
this.yogaNode.setMargin(
|
|
13034
|
+
this.yogaNode.setMargin(Edge.Left, margin);
|
|
10762
13035
|
this.requestRender();
|
|
10763
13036
|
}
|
|
10764
13037
|
}
|
|
10765
13038
|
set padding(padding) {
|
|
10766
13039
|
if (isPaddingType(padding)) {
|
|
10767
13040
|
const node = this.yogaNode;
|
|
10768
|
-
node.setPadding(
|
|
10769
|
-
node.setPadding(
|
|
10770
|
-
node.setPadding(
|
|
10771
|
-
node.setPadding(
|
|
13041
|
+
node.setPadding(Edge.Top, padding);
|
|
13042
|
+
node.setPadding(Edge.Right, padding);
|
|
13043
|
+
node.setPadding(Edge.Bottom, padding);
|
|
13044
|
+
node.setPadding(Edge.Left, padding);
|
|
10772
13045
|
this.requestRender();
|
|
10773
13046
|
}
|
|
10774
13047
|
}
|
|
10775
13048
|
set paddingTop(padding) {
|
|
10776
13049
|
if (isPaddingType(padding)) {
|
|
10777
|
-
this.yogaNode.setPadding(
|
|
13050
|
+
this.yogaNode.setPadding(Edge.Top, padding);
|
|
10778
13051
|
this.requestRender();
|
|
10779
13052
|
}
|
|
10780
13053
|
}
|
|
10781
13054
|
set paddingRight(padding) {
|
|
10782
13055
|
if (isPaddingType(padding)) {
|
|
10783
|
-
this.yogaNode.setPadding(
|
|
13056
|
+
this.yogaNode.setPadding(Edge.Right, padding);
|
|
10784
13057
|
this.requestRender();
|
|
10785
13058
|
}
|
|
10786
13059
|
}
|
|
10787
13060
|
set paddingBottom(padding) {
|
|
10788
13061
|
if (isPaddingType(padding)) {
|
|
10789
|
-
this.yogaNode.setPadding(
|
|
13062
|
+
this.yogaNode.setPadding(Edge.Bottom, padding);
|
|
10790
13063
|
this.requestRender();
|
|
10791
13064
|
}
|
|
10792
13065
|
}
|
|
10793
13066
|
set paddingLeft(padding) {
|
|
10794
13067
|
if (isPaddingType(padding)) {
|
|
10795
|
-
this.yogaNode.setPadding(
|
|
13068
|
+
this.yogaNode.setPadding(Edge.Left, padding);
|
|
10796
13069
|
this.requestRender();
|
|
10797
13070
|
}
|
|
10798
13071
|
}
|
|
@@ -10899,6 +13172,7 @@ class Renderable extends BaseRenderable {
|
|
|
10899
13172
|
this._childrenInLayoutOrder.push(renderable);
|
|
10900
13173
|
this.yogaNode.insertChild(childLayoutNode, insertedIndex);
|
|
10901
13174
|
this.childrenPrimarySortDirty = true;
|
|
13175
|
+
this._shouldUpdateBefore.add(renderable);
|
|
10902
13176
|
this.requestRender();
|
|
10903
13177
|
return insertedIndex;
|
|
10904
13178
|
}
|
|
@@ -10951,6 +13225,7 @@ class Renderable extends BaseRenderable {
|
|
|
10951
13225
|
const insertedIndex = Math.max(0, Math.min(anchorIndex, this._childrenInLayoutOrder.length));
|
|
10952
13226
|
this._childrenInLayoutOrder.splice(insertedIndex, 0, renderable);
|
|
10953
13227
|
this.yogaNode.insertChild(renderable.getLayoutNode(), insertedIndex);
|
|
13228
|
+
this._shouldUpdateBefore.add(renderable);
|
|
10954
13229
|
this.requestRender();
|
|
10955
13230
|
return insertedIndex;
|
|
10956
13231
|
}
|
|
@@ -11000,6 +13275,14 @@ class Renderable extends BaseRenderable {
|
|
|
11000
13275
|
if (this._isDestroyed)
|
|
11001
13276
|
return;
|
|
11002
13277
|
this.updateFromLayout();
|
|
13278
|
+
if (this._shouldUpdateBefore.size > 0) {
|
|
13279
|
+
for (const child of this._shouldUpdateBefore) {
|
|
13280
|
+
if (!child.isDestroyed) {
|
|
13281
|
+
child.updateFromLayout();
|
|
13282
|
+
}
|
|
13283
|
+
}
|
|
13284
|
+
this._shouldUpdateBefore.clear();
|
|
13285
|
+
}
|
|
11003
13286
|
if (this._isDestroyed)
|
|
11004
13287
|
return;
|
|
11005
13288
|
renderList.push({ action: "render", renderable: this });
|
|
@@ -11208,10 +13491,10 @@ class RootRenderable extends Renderable {
|
|
|
11208
13491
|
if (this.yogaNode) {
|
|
11209
13492
|
this.yogaNode.free();
|
|
11210
13493
|
}
|
|
11211
|
-
this.yogaNode =
|
|
13494
|
+
this.yogaNode = src_default.Node.create(yogaConfig);
|
|
11212
13495
|
this.yogaNode.setWidth(ctx.width);
|
|
11213
13496
|
this.yogaNode.setHeight(ctx.height);
|
|
11214
|
-
this.yogaNode.setFlexDirection(
|
|
13497
|
+
this.yogaNode.setFlexDirection(FlexDirection.Column);
|
|
11215
13498
|
this.calculateLayout();
|
|
11216
13499
|
}
|
|
11217
13500
|
render(buffer, deltaTime) {
|
|
@@ -11252,7 +13535,7 @@ class RootRenderable extends Renderable {
|
|
|
11252
13535
|
}
|
|
11253
13536
|
}
|
|
11254
13537
|
calculateLayout() {
|
|
11255
|
-
this.yogaNode.calculateLayout(this.width, this.height,
|
|
13538
|
+
this.yogaNode.calculateLayout(this.width, this.height, Direction.LTR);
|
|
11256
13539
|
this.emit("layout-changed" /* LAYOUT_CHANGED */);
|
|
11257
13540
|
}
|
|
11258
13541
|
resize(width, height) {
|
|
@@ -12266,6 +14549,24 @@ registerEnvVar({
|
|
|
12266
14549
|
type: "boolean",
|
|
12267
14550
|
default: true
|
|
12268
14551
|
});
|
|
14552
|
+
registerEnvVar({
|
|
14553
|
+
name: "OTUI_DEBUG",
|
|
14554
|
+
description: "Enable debug mode to capture all raw input for debugging purposes.",
|
|
14555
|
+
type: "boolean",
|
|
14556
|
+
default: false
|
|
14557
|
+
});
|
|
14558
|
+
var KITTY_FLAG_ALTERNATE_KEYS = 1;
|
|
14559
|
+
var KITTY_FLAG_EVENT_TYPES = 2;
|
|
14560
|
+
function buildKittyKeyboardFlags(config) {
|
|
14561
|
+
if (!config) {
|
|
14562
|
+
return 0;
|
|
14563
|
+
}
|
|
14564
|
+
let flags = KITTY_FLAG_ALTERNATE_KEYS;
|
|
14565
|
+
if (config.events) {
|
|
14566
|
+
flags |= KITTY_FLAG_EVENT_TYPES;
|
|
14567
|
+
}
|
|
14568
|
+
return flags;
|
|
14569
|
+
}
|
|
12269
14570
|
|
|
12270
14571
|
class MouseEvent {
|
|
12271
14572
|
type;
|
|
@@ -12311,13 +14612,6 @@ var MouseButton;
|
|
|
12311
14612
|
MouseButton2[MouseButton2["WHEEL_UP"] = 4] = "WHEEL_UP";
|
|
12312
14613
|
MouseButton2[MouseButton2["WHEEL_DOWN"] = 5] = "WHEEL_DOWN";
|
|
12313
14614
|
})(MouseButton ||= {});
|
|
12314
|
-
singleton("ProcessExitSignals", () => {
|
|
12315
|
-
["SIGINT", "SIGTERM", "SIGQUIT", "SIGABRT"].forEach((signal) => {
|
|
12316
|
-
process.on(signal, () => {
|
|
12317
|
-
process.exit();
|
|
12318
|
-
});
|
|
12319
|
-
});
|
|
12320
|
-
});
|
|
12321
14615
|
var rendererTracker = singleton("RendererTracker", () => {
|
|
12322
14616
|
const renderers = new Set;
|
|
12323
14617
|
return {
|
|
@@ -12357,8 +14651,9 @@ async function createCliRenderer(config = {}) {
|
|
|
12357
14651
|
config.useThread = false;
|
|
12358
14652
|
}
|
|
12359
14653
|
ziglib.setUseThread(rendererPtr, config.useThread);
|
|
12360
|
-
const
|
|
12361
|
-
|
|
14654
|
+
const kittyConfig = config.useKittyKeyboard ?? {};
|
|
14655
|
+
const kittyFlags = buildKittyKeyboardFlags(kittyConfig);
|
|
14656
|
+
ziglib.setKittyKeyboardFlags(rendererPtr, kittyFlags);
|
|
12362
14657
|
const renderer = new CliRenderer(ziglib, rendererPtr, stdin, stdout, width, height, config);
|
|
12363
14658
|
await renderer.setupTerminal();
|
|
12364
14659
|
return renderer;
|
|
@@ -12385,11 +14680,14 @@ class CliRenderer extends EventEmitter9 {
|
|
|
12385
14680
|
stdin;
|
|
12386
14681
|
stdout;
|
|
12387
14682
|
exitOnCtrlC;
|
|
14683
|
+
exitSignals;
|
|
14684
|
+
_exitListenersAdded = false;
|
|
12388
14685
|
_isDestroyed = false;
|
|
12389
14686
|
nextRenderBuffer;
|
|
12390
14687
|
currentRenderBuffer;
|
|
12391
14688
|
_isRunning = false;
|
|
12392
14689
|
targetFps = 30;
|
|
14690
|
+
maxFps = 60;
|
|
12393
14691
|
automaticMemorySnapshot = false;
|
|
12394
14692
|
memorySnapshotInterval;
|
|
12395
14693
|
memorySnapshotTimer = null;
|
|
@@ -12415,7 +14713,8 @@ class CliRenderer extends EventEmitter9 {
|
|
|
12415
14713
|
frameCount = 0;
|
|
12416
14714
|
lastFpsTime = 0;
|
|
12417
14715
|
currentFps = 0;
|
|
12418
|
-
targetFrameTime =
|
|
14716
|
+
targetFrameTime = 1000 / this.targetFps;
|
|
14717
|
+
minTargetFrameTime = 1000 / this.maxFps;
|
|
12419
14718
|
immediateRerenderRequested = false;
|
|
12420
14719
|
updateScheduled = false;
|
|
12421
14720
|
liveRequestCounter = 0;
|
|
@@ -12477,6 +14776,9 @@ class CliRenderer extends EventEmitter9 {
|
|
|
12477
14776
|
_onDestroy;
|
|
12478
14777
|
inputHandlers = [];
|
|
12479
14778
|
prependedInputHandlers = [];
|
|
14779
|
+
idleResolvers = [];
|
|
14780
|
+
_debugInputs = [];
|
|
14781
|
+
_debugModeEnabled = env.OTUI_DEBUG;
|
|
12480
14782
|
handleError = ((error) => {
|
|
12481
14783
|
console.error(error);
|
|
12482
14784
|
if (this._openConsoleOnError) {
|
|
@@ -12539,8 +14841,12 @@ Captured output:
|
|
|
12539
14841
|
}
|
|
12540
14842
|
this.rendererPtr = rendererPtr;
|
|
12541
14843
|
this.exitOnCtrlC = config.exitOnCtrlC === undefined ? true : config.exitOnCtrlC;
|
|
14844
|
+
this.exitSignals = config.exitSignals || ["SIGINT", "SIGTERM", "SIGQUIT", "SIGABRT"];
|
|
12542
14845
|
this.resizeDebounceDelay = config.debounceDelay || 100;
|
|
12543
14846
|
this.targetFps = config.targetFps || 30;
|
|
14847
|
+
this.maxFps = config.maxFps || 60;
|
|
14848
|
+
this.targetFrameTime = 1000 / this.targetFps;
|
|
14849
|
+
this.minTargetFrameTime = 1000 / this.maxFps;
|
|
12544
14850
|
this.memorySnapshotInterval = config.memorySnapshotInterval ?? 0;
|
|
12545
14851
|
this.gatherStats = config.gatherStats || false;
|
|
12546
14852
|
this.maxStatSamples = config.maxStatSamples || 300;
|
|
@@ -12562,8 +14868,10 @@ Captured output:
|
|
|
12562
14868
|
process.on("warning", this.warningHandler);
|
|
12563
14869
|
process.on("uncaughtException", this.handleError);
|
|
12564
14870
|
process.on("unhandledRejection", this.handleError);
|
|
12565
|
-
process.on("
|
|
12566
|
-
|
|
14871
|
+
process.on("beforeExit", this.exitHandler);
|
|
14872
|
+
const kittyConfig = config.useKittyKeyboard ?? {};
|
|
14873
|
+
const useKittyForParsing = kittyConfig !== null;
|
|
14874
|
+
this._keyHandler = new InternalKeyHandler(useKittyForParsing);
|
|
12567
14875
|
this._keyHandler.on("keypress", (event) => {
|
|
12568
14876
|
if (this.exitOnCtrlC && event.name === "c" && event.ctrl) {
|
|
12569
14877
|
process.nextTick(() => {
|
|
@@ -12572,6 +14880,7 @@ Captured output:
|
|
|
12572
14880
|
return;
|
|
12573
14881
|
}
|
|
12574
14882
|
});
|
|
14883
|
+
this.addExitListeners();
|
|
12575
14884
|
this._stdinBuffer = new StdinBuffer({ timeout: 5 });
|
|
12576
14885
|
this._console = new TerminalConsole(this, config.consoleOptions);
|
|
12577
14886
|
this.useConsole = config.useConsole ?? true;
|
|
@@ -12600,6 +14909,22 @@ Captured output:
|
|
|
12600
14909
|
}
|
|
12601
14910
|
this.setupInput();
|
|
12602
14911
|
}
|
|
14912
|
+
addExitListeners() {
|
|
14913
|
+
if (this._exitListenersAdded || this.exitSignals.length === 0)
|
|
14914
|
+
return;
|
|
14915
|
+
this.exitSignals.forEach((signal) => {
|
|
14916
|
+
process.addListener(signal, this.exitHandler);
|
|
14917
|
+
});
|
|
14918
|
+
this._exitListenersAdded = true;
|
|
14919
|
+
}
|
|
14920
|
+
removeExitListeners() {
|
|
14921
|
+
if (!this._exitListenersAdded || this.exitSignals.length === 0)
|
|
14922
|
+
return;
|
|
14923
|
+
this.exitSignals.forEach((signal) => {
|
|
14924
|
+
process.removeListener(signal, this.exitHandler);
|
|
14925
|
+
});
|
|
14926
|
+
this._exitListenersAdded = false;
|
|
14927
|
+
}
|
|
12603
14928
|
get isDestroyed() {
|
|
12604
14929
|
return this._isDestroyed;
|
|
12605
14930
|
}
|
|
@@ -12636,14 +14961,33 @@ Captured output:
|
|
|
12636
14961
|
return this.realStdoutWrite.call(this.stdout, chunk, encoding, callback);
|
|
12637
14962
|
}
|
|
12638
14963
|
requestRender() {
|
|
12639
|
-
if (
|
|
14964
|
+
if (this._controlState === "explicit_suspended" /* EXPLICIT_SUSPENDED */) {
|
|
14965
|
+
return;
|
|
14966
|
+
}
|
|
14967
|
+
if (this._isRunning) {
|
|
14968
|
+
return;
|
|
14969
|
+
}
|
|
14970
|
+
if (this.rendering) {
|
|
14971
|
+
this.immediateRerenderRequested = true;
|
|
14972
|
+
return;
|
|
14973
|
+
}
|
|
14974
|
+
if (!this.updateScheduled && !this.renderTimeout) {
|
|
12640
14975
|
this.updateScheduled = true;
|
|
12641
|
-
|
|
12642
|
-
|
|
12643
|
-
|
|
12644
|
-
|
|
14976
|
+
const now = Date.now();
|
|
14977
|
+
const elapsed = now - this.lastTime;
|
|
14978
|
+
const delay = Math.max(this.minTargetFrameTime - elapsed, 0);
|
|
14979
|
+
if (delay === 0) {
|
|
14980
|
+
process.nextTick(() => this.activateFrame());
|
|
14981
|
+
return;
|
|
14982
|
+
}
|
|
14983
|
+
setTimeout(() => this.activateFrame(), delay);
|
|
12645
14984
|
}
|
|
12646
14985
|
}
|
|
14986
|
+
async activateFrame() {
|
|
14987
|
+
await this.loop();
|
|
14988
|
+
this.updateScheduled = false;
|
|
14989
|
+
this.resolveIdleIfNeeded();
|
|
14990
|
+
}
|
|
12647
14991
|
get useConsole() {
|
|
12648
14992
|
return this._useConsole;
|
|
12649
14993
|
}
|
|
@@ -12658,6 +15002,26 @@ Captured output:
|
|
|
12658
15002
|
get isRunning() {
|
|
12659
15003
|
return this._isRunning;
|
|
12660
15004
|
}
|
|
15005
|
+
isIdleNow() {
|
|
15006
|
+
return !this._isRunning && !this.rendering && !this.renderTimeout && !this.updateScheduled && !this.immediateRerenderRequested;
|
|
15007
|
+
}
|
|
15008
|
+
resolveIdleIfNeeded() {
|
|
15009
|
+
if (!this.isIdleNow())
|
|
15010
|
+
return;
|
|
15011
|
+
const resolvers = this.idleResolvers.splice(0);
|
|
15012
|
+
for (const resolve4 of resolvers) {
|
|
15013
|
+
resolve4();
|
|
15014
|
+
}
|
|
15015
|
+
}
|
|
15016
|
+
idle() {
|
|
15017
|
+
if (this._isDestroyed)
|
|
15018
|
+
return Promise.resolve();
|
|
15019
|
+
if (this.isIdleNow())
|
|
15020
|
+
return Promise.resolve();
|
|
15021
|
+
return new Promise((resolve4) => {
|
|
15022
|
+
this.idleResolvers.push(resolve4);
|
|
15023
|
+
});
|
|
15024
|
+
}
|
|
12661
15025
|
get resolution() {
|
|
12662
15026
|
return this._resolution;
|
|
12663
15027
|
}
|
|
@@ -12704,11 +15068,15 @@ Captured output:
|
|
|
12704
15068
|
get capabilities() {
|
|
12705
15069
|
return this._capabilities;
|
|
12706
15070
|
}
|
|
15071
|
+
getDebugInputs() {
|
|
15072
|
+
return [...this._debugInputs];
|
|
15073
|
+
}
|
|
12707
15074
|
get useKittyKeyboard() {
|
|
12708
|
-
return this.lib.
|
|
15075
|
+
return this.lib.getKittyKeyboardFlags(this.rendererPtr) > 0;
|
|
12709
15076
|
}
|
|
12710
15077
|
set useKittyKeyboard(use) {
|
|
12711
|
-
|
|
15078
|
+
const flags = use ? KITTY_FLAG_ALTERNATE_KEYS : 0;
|
|
15079
|
+
this.lib.setKittyKeyboardFlags(this.rendererPtr, flags);
|
|
12712
15080
|
}
|
|
12713
15081
|
set experimental_splitHeight(splitHeight) {
|
|
12714
15082
|
if (splitHeight < 0)
|
|
@@ -12880,6 +15248,12 @@ Captured output:
|
|
|
12880
15248
|
this.stdin.setEncoding("utf8");
|
|
12881
15249
|
this.stdin.on("data", this.stdinListener);
|
|
12882
15250
|
this._stdinBuffer.on("data", (sequence) => {
|
|
15251
|
+
if (this._debugModeEnabled) {
|
|
15252
|
+
this._debugInputs.push({
|
|
15253
|
+
timestamp: new Date().toISOString(),
|
|
15254
|
+
sequence
|
|
15255
|
+
});
|
|
15256
|
+
}
|
|
12883
15257
|
for (const handler of this.inputHandlers) {
|
|
12884
15258
|
if (handler(sequence)) {
|
|
12885
15259
|
return;
|
|
@@ -13213,6 +15587,7 @@ Captured output:
|
|
|
13213
15587
|
this.internalPause();
|
|
13214
15588
|
this._suspendedMouseEnabled = this._useMouse;
|
|
13215
15589
|
this.disableMouse();
|
|
15590
|
+
this.removeExitListeners();
|
|
13216
15591
|
this._stdinBuffer.clear();
|
|
13217
15592
|
this.stdin.removeListener("data", this.stdinListener);
|
|
13218
15593
|
this.lib.suspendRenderer(this.rendererPtr);
|
|
@@ -13226,6 +15601,7 @@ Captured output:
|
|
|
13226
15601
|
this.stdin.setRawMode(true);
|
|
13227
15602
|
}
|
|
13228
15603
|
this.stdin.resume();
|
|
15604
|
+
this.addExitListeners();
|
|
13229
15605
|
setImmediate(() => {
|
|
13230
15606
|
while (this.stdin.read() !== null) {}
|
|
13231
15607
|
this.stdin.on("data", this.stdinListener);
|
|
@@ -13260,6 +15636,9 @@ Captured output:
|
|
|
13260
15636
|
clearTimeout(this.renderTimeout);
|
|
13261
15637
|
this.renderTimeout = null;
|
|
13262
15638
|
}
|
|
15639
|
+
if (!this.rendering) {
|
|
15640
|
+
this.resolveIdleIfNeeded();
|
|
15641
|
+
}
|
|
13263
15642
|
}
|
|
13264
15643
|
}
|
|
13265
15644
|
destroy() {
|
|
@@ -13312,6 +15691,7 @@ Captured output:
|
|
|
13312
15691
|
console.error("Error in onDestroy callback:", e instanceof Error ? e.stack : String(e));
|
|
13313
15692
|
}
|
|
13314
15693
|
}
|
|
15694
|
+
this.resolveIdleIfNeeded();
|
|
13315
15695
|
}
|
|
13316
15696
|
startRenderLoop() {
|
|
13317
15697
|
if (!this._isRunning)
|
|
@@ -13320,12 +15700,12 @@ Captured output:
|
|
|
13320
15700
|
this.frameCount = 0;
|
|
13321
15701
|
this.lastFpsTime = this.lastTime;
|
|
13322
15702
|
this.currentFps = 0;
|
|
13323
|
-
this.targetFrameTime = 1000 / this.targetFps;
|
|
13324
15703
|
this.loop();
|
|
13325
15704
|
}
|
|
13326
15705
|
async loop() {
|
|
13327
15706
|
if (this.rendering || this._isDestroyed)
|
|
13328
15707
|
return;
|
|
15708
|
+
this.renderTimeout = null;
|
|
13329
15709
|
this.rendering = true;
|
|
13330
15710
|
if (this.renderTimeout) {
|
|
13331
15711
|
clearTimeout(this.renderTimeout);
|
|
@@ -13360,10 +15740,6 @@ Captured output:
|
|
|
13360
15740
|
} catch (error) {
|
|
13361
15741
|
console.error("Error in frame callback:", error);
|
|
13362
15742
|
}
|
|
13363
|
-
if (this._isDestroyed) {
|
|
13364
|
-
this.rendering = false;
|
|
13365
|
-
return;
|
|
13366
|
-
}
|
|
13367
15743
|
}
|
|
13368
15744
|
const end = performance.now();
|
|
13369
15745
|
this.renderStats.frameCallbackTime = end - start;
|
|
@@ -13379,16 +15755,21 @@ Captured output:
|
|
|
13379
15755
|
if (this.gatherStats) {
|
|
13380
15756
|
this.collectStatSample(overallFrameTime);
|
|
13381
15757
|
}
|
|
13382
|
-
if (this._isRunning) {
|
|
13383
|
-
const
|
|
13384
|
-
|
|
15758
|
+
if (this._isRunning || this.immediateRerenderRequested) {
|
|
15759
|
+
const targetFrameTime = this.immediateRerenderRequested ? this.minTargetFrameTime : this.targetFrameTime;
|
|
15760
|
+
const delay = Math.max(1, targetFrameTime - Math.floor(overallFrameTime));
|
|
15761
|
+
this.immediateRerenderRequested = false;
|
|
15762
|
+
this.renderTimeout = setTimeout(() => {
|
|
15763
|
+
this.renderTimeout = null;
|
|
15764
|
+
this.loop();
|
|
15765
|
+
}, delay);
|
|
15766
|
+
} else {
|
|
15767
|
+
clearTimeout(this.renderTimeout);
|
|
15768
|
+
this.renderTimeout = null;
|
|
13385
15769
|
}
|
|
13386
15770
|
}
|
|
13387
15771
|
this.rendering = false;
|
|
13388
|
-
|
|
13389
|
-
this.immediateRerenderRequested = false;
|
|
13390
|
-
this.loop();
|
|
13391
|
-
}
|
|
15772
|
+
this.resolveIdleIfNeeded();
|
|
13392
15773
|
}
|
|
13393
15774
|
intermediateRender() {
|
|
13394
15775
|
this.immediateRerenderRequested = true;
|
|
@@ -13578,7 +15959,7 @@ Captured output:
|
|
|
13578
15959
|
}
|
|
13579
15960
|
}
|
|
13580
15961
|
|
|
13581
|
-
export { BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, t, hastToStyledText, LinearScrollAccel, MacOSScrollAccel, StdinBuffer, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, envRegistry, registerEnvVar, clearEnvCache, generateEnvMarkdown, generateEnvColored, env, treeSitterToTextChunks, treeSitterToStyledText, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extToFiletype, pathToFiletype, main, getTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, isValidPercentage, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, ANSI, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, RendererControlState, CliRenderer };
|
|
15962
|
+
export { __toESM, __commonJS, __export, __require, Edge, Gutter, MeasureMode, exports_src, BorderChars, getBorderFromSides, getBorderSides, borderCharsToArray, BorderCharArrays, nonAlphanumericKeys, parseKeypress, KeyEvent, PasteEvent, KeyHandler, InternalKeyHandler, RGBA, hexToRgb, rgbToHex, hsvToRgb, parseColor, fonts, measureText, getCharacterPositions, coordinateToCharacterIndex, renderFontToFrameBuffer, TextAttributes, DebugOverlayCorner, createTextAttributes, visualizeRenderableTree, isStyledText, StyledText, stringToStyledText, black, red, green, yellow, blue, magenta, cyan, white, brightBlack, brightRed, brightGreen, brightYellow, brightBlue, brightMagenta, brightCyan, brightWhite, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bold, italic, underline, strikethrough, dim, reverse, blink, fg, bg, t, hastToStyledText, LinearScrollAccel, MacOSScrollAccel, StdinBuffer, parseAlign, parseBoxSizing, parseDimension, parseDirection, parseDisplay, parseEdge, parseFlexDirection, parseGutter, parseJustify, parseLogLevel, parseMeasureMode, parseOverflow, parsePositionType, parseUnit, parseWrap, MouseParser, Selection, convertGlobalToLocalSelection, ASCIIFontSelectionHelper, envRegistry, registerEnvVar, clearEnvCache, generateEnvMarkdown, generateEnvColored, env, treeSitterToTextChunks, treeSitterToStyledText, addDefaultParsers, TreeSitterClient, DataPathsManager, getDataPaths, extToFiletype, pathToFiletype, main, getTreeSitterClient, ExtmarksController, createExtmarksController, TerminalPalette, createTerminalPalette, TextBuffer, LogLevel2 as LogLevel, setRenderLibPath, resolveRenderLib, OptimizedBuffer, h, isVNode, maybeMakeRenderable, wrapWithDelegates, instantiate, delegate, isValidPercentage, LayoutEvents, RenderableEvents, isRenderable, BaseRenderable, Renderable, RootRenderable, ANSI, capture, ConsolePosition, TerminalConsole, getObjectsInViewport, buildKittyKeyboardFlags, MouseEvent, MouseButton, createCliRenderer, CliRenderEvents, RendererControlState, CliRenderer };
|
|
13582
15963
|
|
|
13583
|
-
//# debugId=
|
|
13584
|
-
//# sourceMappingURL=index-
|
|
15964
|
+
//# debugId=7AA8D2BCA864891464756E2164756E21
|
|
15965
|
+
//# sourceMappingURL=index-4s3xr47p.js.map
|