bunite-core 0.17.1 → 0.17.3
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/package.json +1 -1
- package/src/host/core/App.ts +28 -18
- package/src/host/core/BrowserView.ts +333 -116
- package/src/host/core/BrowserWindow.ts +44 -22
- package/src/host/core/Socket.ts +26 -9
- package/src/host/core/SurfaceBrowserIPC.ts +15 -5
- package/src/host/core/SurfaceManager.ts +345 -158
- package/src/host/core/SurfaceRegistry.ts +1 -1
- package/src/host/core/inputDispatch.ts +71 -42
- package/src/host/core/singleInstanceLock.ts +10 -2
- package/src/host/core/windowCap.ts +42 -23
- package/src/host/encryptedPipe.ts +20 -3
- package/src/host/events/appEvents.ts +1 -1
- package/src/host/events/eventEmitter.ts +6 -6
- package/src/host/events/webviewEvents.ts +11 -4
- package/src/host/events/windowEvents.ts +1 -2
- package/src/host/index.ts +9 -17
- package/src/host/log.ts +6 -4
- package/src/host/native.ts +271 -163
- package/src/host/paths.ts +18 -15
- package/src/host/platform.ts +2 -4
- package/src/host/preloadBundle.ts +1 -1
- package/src/host/serveWeb.ts +45 -30
- package/src/preload/runtime.built.js +1 -1
- package/src/preload/runtime.ts +66 -25
- package/src/rpc/encrypt.ts +23 -4
- package/src/rpc/error.ts +2 -7
- package/src/rpc/framework.ts +105 -35
- package/src/rpc/index.ts +130 -140
- package/src/rpc/peer.ts +442 -164
- package/src/rpc/renderer.ts +29 -11
- package/src/rpc/schema.ts +86 -61
- package/src/rpc/stream.ts +12 -3
- package/src/rpc/transport.ts +76 -12
- package/src/rpc/wire.ts +23 -10
- package/src/webview/native.ts +150 -73
- package/src/webview/polyfill.ts +184 -48
package/src/host/native.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { CString, dlopen, FFIType, JSCallback,
|
|
1
|
+
import { CString, dlopen, FFIType, JSCallback, type Pointer, ptr } from "bun:ffi";
|
|
2
2
|
import { existsSync } from "node:fs";
|
|
3
3
|
import { delimiter, join } from "node:path";
|
|
4
4
|
import { buniteEventEmitter } from "./events/eventEmitter";
|
|
5
|
-
import { resolveNativeArtifacts, type ResolvedNativeArtifacts, type WindowsEngine } from "./paths";
|
|
6
|
-
import { resolvePackageRoot } from "./paths";
|
|
7
5
|
import { log } from "./log";
|
|
6
|
+
import {
|
|
7
|
+
type ResolvedNativeArtifacts,
|
|
8
|
+
resolveNativeArtifacts,
|
|
9
|
+
resolvePackageRoot,
|
|
10
|
+
type WindowsEngine,
|
|
11
|
+
} from "./paths";
|
|
8
12
|
|
|
9
13
|
export type NativeBootstrapOptions = {
|
|
10
14
|
hideConsole?: boolean;
|
|
@@ -36,7 +40,7 @@ type NativeSymbols = {
|
|
|
36
40
|
cefDir: CStringPointer,
|
|
37
41
|
hideConsole: boolean,
|
|
38
42
|
popupBlocking: boolean,
|
|
39
|
-
engineConfigJson: CStringPointer
|
|
43
|
+
engineConfigJson: CStringPointer,
|
|
40
44
|
) => boolean;
|
|
41
45
|
bunite_run_loop: () => void;
|
|
42
46
|
bunite_pump_once: () => void;
|
|
@@ -53,7 +57,7 @@ type NativeSymbols = {
|
|
|
53
57
|
transparent: boolean,
|
|
54
58
|
hidden: boolean,
|
|
55
59
|
minimized: boolean,
|
|
56
|
-
maximized: boolean
|
|
60
|
+
maximized: boolean,
|
|
57
61
|
) => boolean;
|
|
58
62
|
bunite_window_destroy: (windowId: number) => void;
|
|
59
63
|
bunite_window_reset_close_pending: (windowId: number) => void;
|
|
@@ -71,7 +75,7 @@ type NativeSymbols = {
|
|
|
71
75
|
x: number,
|
|
72
76
|
y: number,
|
|
73
77
|
width: number,
|
|
74
|
-
height: number
|
|
78
|
+
height: number,
|
|
75
79
|
) => void;
|
|
76
80
|
bunite_window_begin_move_drag: (windowId: number) => void;
|
|
77
81
|
bunite_view_create: (
|
|
@@ -88,7 +92,7 @@ type NativeSymbols = {
|
|
|
88
92
|
height: number,
|
|
89
93
|
autoResize: boolean,
|
|
90
94
|
sandbox: boolean,
|
|
91
|
-
preloadOriginsJson: CStringPointer
|
|
95
|
+
preloadOriginsJson: CStringPointer,
|
|
92
96
|
) => boolean;
|
|
93
97
|
bunite_register_appres_route: (path: CStringPointer) => void;
|
|
94
98
|
bunite_unregister_appres_route: (path: CStringPointer) => void;
|
|
@@ -97,54 +101,106 @@ type NativeSymbols = {
|
|
|
97
101
|
bunite_view_set_input_passthrough: (viewId: number, passthrough: boolean) => void;
|
|
98
102
|
bunite_view_set_mask_region: (viewId: number, rects: Pointer, count: number) => void;
|
|
99
103
|
bunite_view_bring_to_front: (viewId: number) => void;
|
|
100
|
-
bunite_view_set_bounds: (
|
|
101
|
-
|
|
104
|
+
bunite_view_set_bounds: (
|
|
105
|
+
viewId: number,
|
|
106
|
+
x: number,
|
|
107
|
+
y: number,
|
|
108
|
+
width: number,
|
|
109
|
+
height: number,
|
|
110
|
+
) => void;
|
|
111
|
+
bunite_view_set_bounds_async: (
|
|
112
|
+
viewId: number,
|
|
113
|
+
x: number,
|
|
114
|
+
y: number,
|
|
115
|
+
width: number,
|
|
116
|
+
height: number,
|
|
117
|
+
) => void;
|
|
102
118
|
bunite_view_go_back: (viewId: number) => void;
|
|
103
119
|
bunite_view_reload: (viewId: number) => void;
|
|
104
120
|
bunite_view_execute_javascript: (viewId: number, script: CStringPointer) => void;
|
|
105
121
|
bunite_view_evaluate: (viewId: number, requestId: number, script: CStringPointer) => void;
|
|
106
122
|
bunite_view_click: (
|
|
107
|
-
viewId: number,
|
|
108
|
-
|
|
123
|
+
viewId: number,
|
|
124
|
+
x: number,
|
|
125
|
+
y: number,
|
|
126
|
+
button: number,
|
|
127
|
+
clickCount: number,
|
|
128
|
+
modifiers: number,
|
|
109
129
|
) => void;
|
|
110
130
|
bunite_view_type: (viewId: number, text: CStringPointer) => void;
|
|
111
131
|
bunite_view_press: (
|
|
112
|
-
viewId: number,
|
|
113
|
-
|
|
114
|
-
|
|
132
|
+
viewId: number,
|
|
133
|
+
windowsVkCode: number,
|
|
134
|
+
macKeyCode: number,
|
|
135
|
+
key: CStringPointer,
|
|
136
|
+
code: CStringPointer,
|
|
137
|
+
character: CStringPointer,
|
|
138
|
+
modifiers: number,
|
|
139
|
+
action: number,
|
|
140
|
+
extended: boolean,
|
|
141
|
+
location: number,
|
|
115
142
|
) => void;
|
|
116
143
|
bunite_view_scroll: (
|
|
117
|
-
viewId: number,
|
|
118
|
-
|
|
144
|
+
viewId: number,
|
|
145
|
+
dx: number,
|
|
146
|
+
dy: number,
|
|
147
|
+
x: number,
|
|
148
|
+
y: number,
|
|
149
|
+
modifiers: number,
|
|
119
150
|
) => void;
|
|
120
151
|
bunite_view_mouse: (
|
|
121
|
-
viewId: number,
|
|
122
|
-
|
|
152
|
+
viewId: number,
|
|
153
|
+
action: number,
|
|
154
|
+
x: number,
|
|
155
|
+
y: number,
|
|
156
|
+
button: number,
|
|
157
|
+
modifiers: number,
|
|
123
158
|
) => void;
|
|
124
159
|
bunite_view_respond_dialog: (
|
|
125
|
-
viewId: number,
|
|
160
|
+
viewId: number,
|
|
161
|
+
requestId: number,
|
|
162
|
+
accept: boolean,
|
|
163
|
+
text: CStringPointer,
|
|
126
164
|
) => void;
|
|
127
165
|
bunite_view_screenshot: (
|
|
128
|
-
viewId: number,
|
|
166
|
+
viewId: number,
|
|
167
|
+
requestId: number,
|
|
168
|
+
format: CStringPointer,
|
|
169
|
+
quality: number,
|
|
129
170
|
) => void;
|
|
130
171
|
bunite_view_accessibility_snapshot: (
|
|
131
|
-
viewId: number,
|
|
172
|
+
viewId: number,
|
|
173
|
+
requestId: number,
|
|
174
|
+
interestingOnly: number,
|
|
132
175
|
) => void;
|
|
133
176
|
bunite_view_list_frames: (viewId: number, requestId: number) => void;
|
|
134
177
|
bunite_view_evaluate_in_frame: (
|
|
135
|
-
viewId: number,
|
|
178
|
+
viewId: number,
|
|
179
|
+
requestId: number,
|
|
180
|
+
script: CStringPointer,
|
|
181
|
+
frameId: CStringPointer,
|
|
136
182
|
) => void;
|
|
137
183
|
bunite_view_resolve_and_click: (
|
|
138
|
-
viewId: number,
|
|
139
|
-
|
|
140
|
-
|
|
184
|
+
viewId: number,
|
|
185
|
+
requestId: number,
|
|
186
|
+
selector: CStringPointer,
|
|
187
|
+
frameId: CStringPointer,
|
|
188
|
+
button: number,
|
|
189
|
+
clickCount: number,
|
|
190
|
+
modifiers: number,
|
|
141
191
|
) => void;
|
|
142
192
|
bunite_view_set_download_policy: (
|
|
143
|
-
viewId: number,
|
|
193
|
+
viewId: number,
|
|
194
|
+
policy: number,
|
|
195
|
+
downloadDir: CStringPointer,
|
|
144
196
|
) => void;
|
|
145
197
|
bunite_view_popup_accept: (
|
|
146
|
-
newViewId: number,
|
|
147
|
-
|
|
198
|
+
newViewId: number,
|
|
199
|
+
hostWindowId: number,
|
|
200
|
+
x: number,
|
|
201
|
+
y: number,
|
|
202
|
+
w: number,
|
|
203
|
+
h: number,
|
|
148
204
|
) => void;
|
|
149
205
|
bunite_view_popup_dismiss: (newViewId: number) => void;
|
|
150
206
|
bunite_view_capabilities: (viewId: number) => number;
|
|
@@ -166,39 +222,39 @@ type LoadedNativeLibrary = {
|
|
|
166
222
|
const nativeSymbolDefinitions = {
|
|
167
223
|
bunite_abi_version: {
|
|
168
224
|
args: [],
|
|
169
|
-
returns: FFIType.i32
|
|
225
|
+
returns: FFIType.i32,
|
|
170
226
|
},
|
|
171
227
|
bunite_engine_name: {
|
|
172
228
|
args: [],
|
|
173
|
-
returns: FFIType.cstring
|
|
229
|
+
returns: FFIType.cstring,
|
|
174
230
|
},
|
|
175
231
|
bunite_engine_version: {
|
|
176
232
|
args: [],
|
|
177
|
-
returns: FFIType.cstring
|
|
233
|
+
returns: FFIType.cstring,
|
|
178
234
|
},
|
|
179
235
|
bunite_set_log_level: {
|
|
180
236
|
args: [FFIType.i32],
|
|
181
|
-
returns: FFIType.void
|
|
237
|
+
returns: FFIType.void,
|
|
182
238
|
},
|
|
183
239
|
bunite_init: {
|
|
184
240
|
args: [FFIType.cstring, FFIType.bool, FFIType.bool, FFIType.cstring],
|
|
185
|
-
returns: FFIType.bool
|
|
241
|
+
returns: FFIType.bool,
|
|
186
242
|
},
|
|
187
243
|
bunite_run_loop: {
|
|
188
244
|
args: [],
|
|
189
|
-
returns: FFIType.void
|
|
245
|
+
returns: FFIType.void,
|
|
190
246
|
},
|
|
191
247
|
bunite_pump_once: {
|
|
192
248
|
args: [],
|
|
193
|
-
returns: FFIType.void
|
|
249
|
+
returns: FFIType.void,
|
|
194
250
|
},
|
|
195
251
|
bunite_quit: {
|
|
196
252
|
args: [],
|
|
197
|
-
returns: FFIType.void
|
|
253
|
+
returns: FFIType.void,
|
|
198
254
|
},
|
|
199
255
|
bunite_free_cstring: {
|
|
200
256
|
args: [FFIType.ptr],
|
|
201
|
-
returns: FFIType.void
|
|
257
|
+
returns: FFIType.void,
|
|
202
258
|
},
|
|
203
259
|
bunite_window_create: {
|
|
204
260
|
args: [
|
|
@@ -212,61 +268,61 @@ const nativeSymbolDefinitions = {
|
|
|
212
268
|
FFIType.bool,
|
|
213
269
|
FFIType.bool,
|
|
214
270
|
FFIType.bool,
|
|
215
|
-
FFIType.bool
|
|
271
|
+
FFIType.bool,
|
|
216
272
|
],
|
|
217
|
-
returns: FFIType.bool
|
|
273
|
+
returns: FFIType.bool,
|
|
218
274
|
},
|
|
219
275
|
bunite_window_destroy: {
|
|
220
276
|
args: [FFIType.u32],
|
|
221
|
-
returns: FFIType.void
|
|
277
|
+
returns: FFIType.void,
|
|
222
278
|
},
|
|
223
279
|
bunite_window_reset_close_pending: {
|
|
224
280
|
args: [FFIType.u32],
|
|
225
|
-
returns: FFIType.void
|
|
281
|
+
returns: FFIType.void,
|
|
226
282
|
},
|
|
227
283
|
bunite_window_show: {
|
|
228
284
|
args: [FFIType.u32],
|
|
229
|
-
returns: FFIType.void
|
|
285
|
+
returns: FFIType.void,
|
|
230
286
|
},
|
|
231
287
|
bunite_window_close: {
|
|
232
288
|
args: [FFIType.u32],
|
|
233
|
-
returns: FFIType.void
|
|
289
|
+
returns: FFIType.void,
|
|
234
290
|
},
|
|
235
291
|
bunite_window_set_title: {
|
|
236
292
|
args: [FFIType.u32, FFIType.cstring],
|
|
237
|
-
returns: FFIType.void
|
|
293
|
+
returns: FFIType.void,
|
|
238
294
|
},
|
|
239
295
|
bunite_window_minimize: {
|
|
240
296
|
args: [FFIType.u32],
|
|
241
|
-
returns: FFIType.void
|
|
297
|
+
returns: FFIType.void,
|
|
242
298
|
},
|
|
243
299
|
bunite_window_unminimize: {
|
|
244
300
|
args: [FFIType.u32],
|
|
245
|
-
returns: FFIType.void
|
|
301
|
+
returns: FFIType.void,
|
|
246
302
|
},
|
|
247
303
|
bunite_window_is_minimized: {
|
|
248
304
|
args: [FFIType.u32],
|
|
249
|
-
returns: FFIType.bool
|
|
305
|
+
returns: FFIType.bool,
|
|
250
306
|
},
|
|
251
307
|
bunite_window_maximize: {
|
|
252
308
|
args: [FFIType.u32],
|
|
253
|
-
returns: FFIType.void
|
|
309
|
+
returns: FFIType.void,
|
|
254
310
|
},
|
|
255
311
|
bunite_window_unmaximize: {
|
|
256
312
|
args: [FFIType.u32],
|
|
257
|
-
returns: FFIType.void
|
|
313
|
+
returns: FFIType.void,
|
|
258
314
|
},
|
|
259
315
|
bunite_window_is_maximized: {
|
|
260
316
|
args: [FFIType.u32],
|
|
261
|
-
returns: FFIType.bool
|
|
317
|
+
returns: FFIType.bool,
|
|
262
318
|
},
|
|
263
319
|
bunite_window_set_frame: {
|
|
264
320
|
args: [FFIType.u32, FFIType.f64, FFIType.f64, FFIType.f64, FFIType.f64],
|
|
265
|
-
returns: FFIType.void
|
|
321
|
+
returns: FFIType.void,
|
|
266
322
|
},
|
|
267
323
|
bunite_window_begin_move_drag: {
|
|
268
324
|
args: [FFIType.u32],
|
|
269
|
-
returns: FFIType.void
|
|
325
|
+
returns: FFIType.void,
|
|
270
326
|
},
|
|
271
327
|
bunite_view_create: {
|
|
272
328
|
args: [
|
|
@@ -283,158 +339,177 @@ const nativeSymbolDefinitions = {
|
|
|
283
339
|
FFIType.f64,
|
|
284
340
|
FFIType.bool,
|
|
285
341
|
FFIType.bool,
|
|
286
|
-
FFIType.cstring
|
|
342
|
+
FFIType.cstring,
|
|
287
343
|
],
|
|
288
|
-
returns: FFIType.bool
|
|
344
|
+
returns: FFIType.bool,
|
|
289
345
|
},
|
|
290
346
|
bunite_register_appres_route: {
|
|
291
347
|
args: [FFIType.cstring],
|
|
292
|
-
returns: FFIType.void
|
|
348
|
+
returns: FFIType.void,
|
|
293
349
|
},
|
|
294
350
|
bunite_unregister_appres_route: {
|
|
295
351
|
args: [FFIType.cstring],
|
|
296
|
-
returns: FFIType.void
|
|
352
|
+
returns: FFIType.void,
|
|
297
353
|
},
|
|
298
354
|
bunite_complete_route_request: {
|
|
299
355
|
args: [FFIType.u32, FFIType.cstring],
|
|
300
|
-
returns: FFIType.void
|
|
356
|
+
returns: FFIType.void,
|
|
301
357
|
},
|
|
302
358
|
bunite_view_set_visible: {
|
|
303
359
|
args: [FFIType.u32, FFIType.bool],
|
|
304
|
-
returns: FFIType.void
|
|
360
|
+
returns: FFIType.void,
|
|
305
361
|
},
|
|
306
362
|
bunite_view_set_input_passthrough: {
|
|
307
363
|
args: [FFIType.u32, FFIType.bool],
|
|
308
|
-
returns: FFIType.void
|
|
364
|
+
returns: FFIType.void,
|
|
309
365
|
},
|
|
310
366
|
bunite_view_set_mask_region: {
|
|
311
367
|
args: [FFIType.u32, FFIType.pointer, FFIType.u32],
|
|
312
|
-
returns: FFIType.void
|
|
368
|
+
returns: FFIType.void,
|
|
313
369
|
},
|
|
314
370
|
bunite_view_bring_to_front: {
|
|
315
371
|
args: [FFIType.u32],
|
|
316
|
-
returns: FFIType.void
|
|
372
|
+
returns: FFIType.void,
|
|
317
373
|
},
|
|
318
374
|
bunite_view_set_bounds: {
|
|
319
375
|
args: [FFIType.u32, FFIType.f64, FFIType.f64, FFIType.f64, FFIType.f64],
|
|
320
|
-
returns: FFIType.void
|
|
376
|
+
returns: FFIType.void,
|
|
321
377
|
},
|
|
322
378
|
bunite_view_set_bounds_async: {
|
|
323
379
|
args: [FFIType.u32, FFIType.f64, FFIType.f64, FFIType.f64, FFIType.f64],
|
|
324
|
-
returns: FFIType.void
|
|
380
|
+
returns: FFIType.void,
|
|
325
381
|
},
|
|
326
382
|
bunite_view_go_back: {
|
|
327
383
|
args: [FFIType.u32],
|
|
328
|
-
returns: FFIType.void
|
|
384
|
+
returns: FFIType.void,
|
|
329
385
|
},
|
|
330
386
|
bunite_view_reload: {
|
|
331
387
|
args: [FFIType.u32],
|
|
332
|
-
returns: FFIType.void
|
|
388
|
+
returns: FFIType.void,
|
|
333
389
|
},
|
|
334
390
|
bunite_view_execute_javascript: {
|
|
335
391
|
args: [FFIType.u32, FFIType.cstring],
|
|
336
|
-
returns: FFIType.void
|
|
392
|
+
returns: FFIType.void,
|
|
337
393
|
},
|
|
338
394
|
bunite_view_evaluate: {
|
|
339
395
|
args: [FFIType.u32, FFIType.u32, FFIType.cstring],
|
|
340
|
-
returns: FFIType.void
|
|
396
|
+
returns: FFIType.void,
|
|
341
397
|
},
|
|
342
398
|
bunite_view_click: {
|
|
343
399
|
args: [FFIType.u32, FFIType.f64, FFIType.f64, FFIType.i32, FFIType.i32, FFIType.u32],
|
|
344
|
-
returns: FFIType.void
|
|
400
|
+
returns: FFIType.void,
|
|
345
401
|
},
|
|
346
402
|
bunite_view_type: {
|
|
347
403
|
args: [FFIType.u32, FFIType.cstring],
|
|
348
|
-
returns: FFIType.void
|
|
404
|
+
returns: FFIType.void,
|
|
349
405
|
},
|
|
350
406
|
bunite_view_press: {
|
|
351
|
-
args: [
|
|
352
|
-
|
|
407
|
+
args: [
|
|
408
|
+
FFIType.u32,
|
|
409
|
+
FFIType.i32,
|
|
410
|
+
FFIType.i32,
|
|
411
|
+
FFIType.cstring,
|
|
412
|
+
FFIType.cstring,
|
|
413
|
+
FFIType.cstring,
|
|
414
|
+
FFIType.u32,
|
|
415
|
+
FFIType.i32,
|
|
416
|
+
FFIType.bool,
|
|
417
|
+
FFIType.i32,
|
|
418
|
+
],
|
|
419
|
+
returns: FFIType.void,
|
|
353
420
|
},
|
|
354
421
|
bunite_view_scroll: {
|
|
355
422
|
args: [FFIType.u32, FFIType.f64, FFIType.f64, FFIType.f64, FFIType.f64, FFIType.u32],
|
|
356
|
-
returns: FFIType.void
|
|
423
|
+
returns: FFIType.void,
|
|
357
424
|
},
|
|
358
425
|
bunite_view_mouse: {
|
|
359
426
|
args: [FFIType.u32, FFIType.i32, FFIType.f64, FFIType.f64, FFIType.i32, FFIType.u32],
|
|
360
|
-
returns: FFIType.void
|
|
427
|
+
returns: FFIType.void,
|
|
361
428
|
},
|
|
362
429
|
bunite_view_respond_dialog: {
|
|
363
430
|
args: [FFIType.u32, FFIType.u32, FFIType.bool, FFIType.cstring],
|
|
364
|
-
returns: FFIType.void
|
|
431
|
+
returns: FFIType.void,
|
|
365
432
|
},
|
|
366
433
|
bunite_view_screenshot: {
|
|
367
434
|
args: [FFIType.u32, FFIType.u32, FFIType.cstring, FFIType.i32],
|
|
368
|
-
returns: FFIType.void
|
|
435
|
+
returns: FFIType.void,
|
|
369
436
|
},
|
|
370
437
|
bunite_view_accessibility_snapshot: {
|
|
371
438
|
args: [FFIType.u32, FFIType.u32, FFIType.i32],
|
|
372
|
-
returns: FFIType.void
|
|
439
|
+
returns: FFIType.void,
|
|
373
440
|
},
|
|
374
441
|
bunite_view_list_frames: {
|
|
375
442
|
args: [FFIType.u32, FFIType.u32],
|
|
376
|
-
returns: FFIType.void
|
|
443
|
+
returns: FFIType.void,
|
|
377
444
|
},
|
|
378
445
|
bunite_view_evaluate_in_frame: {
|
|
379
446
|
args: [FFIType.u32, FFIType.u32, FFIType.cstring, FFIType.cstring],
|
|
380
|
-
returns: FFIType.void
|
|
447
|
+
returns: FFIType.void,
|
|
381
448
|
},
|
|
382
449
|
bunite_view_resolve_and_click: {
|
|
383
|
-
args: [
|
|
384
|
-
|
|
450
|
+
args: [
|
|
451
|
+
FFIType.u32,
|
|
452
|
+
FFIType.u32,
|
|
453
|
+
FFIType.cstring,
|
|
454
|
+
FFIType.cstring,
|
|
455
|
+
FFIType.i32,
|
|
456
|
+
FFIType.i32,
|
|
457
|
+
FFIType.u32,
|
|
458
|
+
],
|
|
459
|
+
returns: FFIType.void,
|
|
385
460
|
},
|
|
386
461
|
bunite_view_set_download_policy: {
|
|
387
462
|
args: [FFIType.u32, FFIType.i32, FFIType.cstring],
|
|
388
|
-
returns: FFIType.void
|
|
463
|
+
returns: FFIType.void,
|
|
389
464
|
},
|
|
390
465
|
bunite_view_popup_accept: {
|
|
391
466
|
args: [FFIType.u32, FFIType.u32, FFIType.f64, FFIType.f64, FFIType.f64, FFIType.f64],
|
|
392
|
-
returns: FFIType.void
|
|
467
|
+
returns: FFIType.void,
|
|
393
468
|
},
|
|
394
469
|
bunite_view_popup_dismiss: {
|
|
395
470
|
args: [FFIType.u32],
|
|
396
|
-
returns: FFIType.void
|
|
471
|
+
returns: FFIType.void,
|
|
397
472
|
},
|
|
398
473
|
bunite_view_capabilities: {
|
|
399
474
|
args: [FFIType.u32],
|
|
400
|
-
returns: FFIType.u32
|
|
475
|
+
returns: FFIType.u32,
|
|
401
476
|
},
|
|
402
477
|
bunite_view_load_url: {
|
|
403
478
|
args: [FFIType.u32, FFIType.cstring],
|
|
404
|
-
returns: FFIType.void
|
|
479
|
+
returns: FFIType.void,
|
|
405
480
|
},
|
|
406
481
|
bunite_view_load_html: {
|
|
407
482
|
args: [FFIType.u32, FFIType.cstring],
|
|
408
|
-
returns: FFIType.void
|
|
483
|
+
returns: FFIType.void,
|
|
409
484
|
},
|
|
410
485
|
bunite_view_remove: {
|
|
411
486
|
args: [FFIType.u32],
|
|
412
|
-
returns: FFIType.void
|
|
487
|
+
returns: FFIType.void,
|
|
413
488
|
},
|
|
414
489
|
bunite_view_open_devtools: {
|
|
415
490
|
args: [FFIType.u32],
|
|
416
|
-
returns: FFIType.void
|
|
491
|
+
returns: FFIType.void,
|
|
417
492
|
},
|
|
418
493
|
bunite_view_close_devtools: {
|
|
419
494
|
args: [FFIType.u32],
|
|
420
|
-
returns: FFIType.void
|
|
495
|
+
returns: FFIType.void,
|
|
421
496
|
},
|
|
422
497
|
bunite_view_toggle_devtools: {
|
|
423
498
|
args: [FFIType.u32],
|
|
424
|
-
returns: FFIType.void
|
|
499
|
+
returns: FFIType.void,
|
|
425
500
|
},
|
|
426
501
|
bunite_complete_permission_request: {
|
|
427
502
|
args: [FFIType.u32, FFIType.u32],
|
|
428
|
-
returns: FFIType.void
|
|
503
|
+
returns: FFIType.void,
|
|
429
504
|
},
|
|
430
505
|
bunite_set_webview_event_handler: {
|
|
431
506
|
args: [FFIType.function],
|
|
432
|
-
returns: FFIType.void
|
|
507
|
+
returns: FFIType.void,
|
|
433
508
|
},
|
|
434
509
|
bunite_set_window_event_handler: {
|
|
435
510
|
args: [FFIType.function],
|
|
436
|
-
returns: FFIType.void
|
|
437
|
-
}
|
|
511
|
+
returns: FFIType.void,
|
|
512
|
+
},
|
|
438
513
|
} as const;
|
|
439
514
|
|
|
440
515
|
let state: NativeRuntimeState | null = null;
|
|
@@ -451,12 +526,14 @@ export function setRouteRequestHandler(handler: (requestId: number, path: string
|
|
|
451
526
|
export type NativeEvaluateResult = {
|
|
452
527
|
requestId: number;
|
|
453
528
|
ok: boolean;
|
|
454
|
-
value?: string;
|
|
529
|
+
value?: string; // raw JSON string when ok
|
|
455
530
|
code?: string;
|
|
456
531
|
message?: string;
|
|
457
532
|
};
|
|
458
533
|
let evaluateResultHandler: ((viewId: number, result: NativeEvaluateResult) => void) | null = null;
|
|
459
|
-
export function setEvaluateResultHandler(
|
|
534
|
+
export function setEvaluateResultHandler(
|
|
535
|
+
handler: (viewId: number, result: NativeEvaluateResult) => void,
|
|
536
|
+
) {
|
|
460
537
|
evaluateResultHandler = handler;
|
|
461
538
|
}
|
|
462
539
|
|
|
@@ -469,20 +546,27 @@ export type NativeScreenshotResult = {
|
|
|
469
546
|
code?: string;
|
|
470
547
|
message?: string;
|
|
471
548
|
};
|
|
472
|
-
let screenshotResultHandler: ((viewId: number, result: NativeScreenshotResult) => void) | null =
|
|
473
|
-
|
|
549
|
+
let screenshotResultHandler: ((viewId: number, result: NativeScreenshotResult) => void) | null =
|
|
550
|
+
null;
|
|
551
|
+
export function setScreenshotResultHandler(
|
|
552
|
+
handler: (viewId: number, result: NativeScreenshotResult) => void,
|
|
553
|
+
) {
|
|
474
554
|
screenshotResultHandler = handler;
|
|
475
555
|
}
|
|
476
556
|
|
|
477
557
|
export type NativeAccessibilityResult = {
|
|
478
558
|
requestId: number;
|
|
479
559
|
ok: boolean;
|
|
480
|
-
tree?: unknown;
|
|
560
|
+
tree?: unknown; // CDP Accessibility.AXNode tree as JSON value
|
|
481
561
|
code?: string;
|
|
482
562
|
message?: string;
|
|
483
563
|
};
|
|
484
|
-
let accessibilityResultHandler:
|
|
485
|
-
|
|
564
|
+
let accessibilityResultHandler:
|
|
565
|
+
| ((viewId: number, result: NativeAccessibilityResult) => void)
|
|
566
|
+
| null = null;
|
|
567
|
+
export function setAccessibilityResultHandler(
|
|
568
|
+
handler: (viewId: number, result: NativeAccessibilityResult) => void,
|
|
569
|
+
) {
|
|
486
570
|
accessibilityResultHandler = handler;
|
|
487
571
|
}
|
|
488
572
|
|
|
@@ -494,8 +578,11 @@ export type NativeListFramesResult = {
|
|
|
494
578
|
code?: string;
|
|
495
579
|
message?: string;
|
|
496
580
|
};
|
|
497
|
-
let listFramesResultHandler: ((viewId: number, result: NativeListFramesResult) => void) | null =
|
|
498
|
-
|
|
581
|
+
let listFramesResultHandler: ((viewId: number, result: NativeListFramesResult) => void) | null =
|
|
582
|
+
null;
|
|
583
|
+
export function setListFramesResultHandler(
|
|
584
|
+
handler: (viewId: number, result: NativeListFramesResult) => void,
|
|
585
|
+
) {
|
|
499
586
|
listFramesResultHandler = handler;
|
|
500
587
|
}
|
|
501
588
|
|
|
@@ -507,8 +594,12 @@ export type NativeResolveAndClickResult = {
|
|
|
507
594
|
code?: string;
|
|
508
595
|
message?: string;
|
|
509
596
|
};
|
|
510
|
-
let resolveAndClickResultHandler:
|
|
511
|
-
|
|
597
|
+
let resolveAndClickResultHandler:
|
|
598
|
+
| ((viewId: number, result: NativeResolveAndClickResult) => void)
|
|
599
|
+
| null = null;
|
|
600
|
+
export function setResolveAndClickResultHandler(
|
|
601
|
+
handler: (viewId: number, result: NativeResolveAndClickResult) => void,
|
|
602
|
+
) {
|
|
512
603
|
resolveAndClickResultHandler = handler;
|
|
513
604
|
}
|
|
514
605
|
|
|
@@ -525,7 +616,9 @@ export type NativeDownloadEvent = {
|
|
|
525
616
|
reason?: string;
|
|
526
617
|
};
|
|
527
618
|
let downloadEventHandler: ((viewId: number, event: NativeDownloadEvent) => void) | null = null;
|
|
528
|
-
export function setDownloadEventHandler(
|
|
619
|
+
export function setDownloadEventHandler(
|
|
620
|
+
handler: (viewId: number, event: NativeDownloadEvent) => void,
|
|
621
|
+
) {
|
|
529
622
|
downloadEventHandler = handler;
|
|
530
623
|
}
|
|
531
624
|
|
|
@@ -558,12 +651,14 @@ export function toCString(value: string): CStringPointer {
|
|
|
558
651
|
function applyEnvironment(artifacts: ResolvedNativeArtifacts) {
|
|
559
652
|
// CEF needs engine dir on PATH (libcef.dll) and ICU_DATA pointing at resources.
|
|
560
653
|
// WebView2 needs the directory containing WebView2Loader.dll on PATH.
|
|
561
|
-
const engineBinaryDir =
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
654
|
+
const engineBinaryDir =
|
|
655
|
+
artifacts.cefDir && existsSync(join(artifacts.cefDir, "Release", "libcef.dll"))
|
|
656
|
+
? join(artifacts.cefDir, "Release")
|
|
657
|
+
: artifacts.cefDir;
|
|
658
|
+
const engineResourceDir =
|
|
659
|
+
artifacts.cefDir && existsSync(join(artifacts.cefDir, "Resources", "resources.pak"))
|
|
660
|
+
? join(artifacts.cefDir, "Resources")
|
|
661
|
+
: artifacts.cefDir;
|
|
567
662
|
|
|
568
663
|
if (engineResourceDir && !process.env.ICU_DATA) {
|
|
569
664
|
process.env.ICU_DATA = engineResourceDir;
|
|
@@ -592,7 +687,7 @@ function tryLoadNativeLibrary(artifacts: ResolvedNativeArtifacts) {
|
|
|
592
687
|
try {
|
|
593
688
|
const library = dlopen(artifacts.nativeLibPath, nativeSymbolDefinitions as any);
|
|
594
689
|
return {
|
|
595
|
-
symbols: library.symbols as unknown as NativeSymbols
|
|
690
|
+
symbols: library.symbols as unknown as NativeSymbols,
|
|
596
691
|
} satisfies LoadedNativeLibrary;
|
|
597
692
|
} catch (error) {
|
|
598
693
|
log.warn("Failed to load native library via FFI.", error);
|
|
@@ -626,35 +721,35 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
626
721
|
case "will-navigate":
|
|
627
722
|
buniteEventEmitter.emitEvent(
|
|
628
723
|
buniteEventEmitter.events.webview.willNavigate({ detail: payload }),
|
|
629
|
-
viewId
|
|
724
|
+
viewId,
|
|
630
725
|
);
|
|
631
726
|
break;
|
|
632
727
|
case "did-navigate":
|
|
633
728
|
buniteEventEmitter.emitEvent(
|
|
634
729
|
buniteEventEmitter.events.webview.didNavigate({ detail: payload }),
|
|
635
|
-
viewId
|
|
730
|
+
viewId,
|
|
636
731
|
);
|
|
637
732
|
break;
|
|
638
733
|
case "dom-ready":
|
|
639
734
|
buniteEventEmitter.emitEvent(
|
|
640
735
|
buniteEventEmitter.events.webview.domReady({ detail: payload }),
|
|
641
|
-
viewId
|
|
736
|
+
viewId,
|
|
642
737
|
);
|
|
643
738
|
break;
|
|
644
739
|
case "new-window-open":
|
|
645
740
|
buniteEventEmitter.emitEvent(
|
|
646
741
|
buniteEventEmitter.events.webview.newWindowOpen({
|
|
647
|
-
detail: maybeParsePayload(payload) as string | { url: string }
|
|
742
|
+
detail: maybeParsePayload(payload) as string | { url: string },
|
|
648
743
|
}),
|
|
649
|
-
viewId
|
|
744
|
+
viewId,
|
|
650
745
|
);
|
|
651
746
|
break;
|
|
652
747
|
case "permission-requested":
|
|
653
748
|
buniteEventEmitter.emitEvent(
|
|
654
749
|
buniteEventEmitter.events.webview.permissionRequested(
|
|
655
|
-
maybeParsePayload(payload) as { requestId: number; kind: number; url?: string }
|
|
750
|
+
maybeParsePayload(payload) as { requestId: number; kind: number; url?: string },
|
|
656
751
|
),
|
|
657
|
-
viewId
|
|
752
|
+
viewId,
|
|
658
753
|
);
|
|
659
754
|
break;
|
|
660
755
|
case "route-request": {
|
|
@@ -672,8 +767,11 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
672
767
|
}
|
|
673
768
|
case "evaluate-result": {
|
|
674
769
|
const parsed = maybeParsePayload(payload) as {
|
|
675
|
-
requestId: number;
|
|
676
|
-
|
|
770
|
+
requestId: number;
|
|
771
|
+
ok: boolean;
|
|
772
|
+
value?: string;
|
|
773
|
+
code?: string;
|
|
774
|
+
message?: string;
|
|
677
775
|
};
|
|
678
776
|
evaluateResultHandler?.(viewId, parsed);
|
|
679
777
|
break;
|
|
@@ -703,7 +801,7 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
703
801
|
downloadEventHandler?.(viewId, parsed);
|
|
704
802
|
buniteEventEmitter.emitEvent(
|
|
705
803
|
buniteEventEmitter.events.webview.downloadEvent(parsed),
|
|
706
|
-
viewId
|
|
804
|
+
viewId,
|
|
707
805
|
);
|
|
708
806
|
break;
|
|
709
807
|
}
|
|
@@ -715,7 +813,7 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
715
813
|
};
|
|
716
814
|
buniteEventEmitter.emitEvent(
|
|
717
815
|
buniteEventEmitter.events.webview.popupRequested(parsed),
|
|
718
|
-
viewId
|
|
816
|
+
viewId,
|
|
719
817
|
);
|
|
720
818
|
break;
|
|
721
819
|
}
|
|
@@ -723,29 +821,30 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
723
821
|
const parsed = maybeParsePayload(payload) as { title: string };
|
|
724
822
|
buniteEventEmitter.emitEvent(
|
|
725
823
|
buniteEventEmitter.events.webview.titleChanged({ detail: parsed.title }),
|
|
726
|
-
viewId
|
|
824
|
+
viewId,
|
|
727
825
|
);
|
|
728
826
|
break;
|
|
729
827
|
}
|
|
730
828
|
case "load-start":
|
|
731
829
|
buniteEventEmitter.emitEvent(
|
|
732
830
|
buniteEventEmitter.events.webview.loadStart({ detail: payload }),
|
|
733
|
-
viewId
|
|
831
|
+
viewId,
|
|
734
832
|
);
|
|
735
833
|
break;
|
|
736
834
|
case "load-finish":
|
|
737
835
|
buniteEventEmitter.emitEvent(
|
|
738
836
|
buniteEventEmitter.events.webview.loadFinish({ detail: payload }),
|
|
739
|
-
viewId
|
|
837
|
+
viewId,
|
|
740
838
|
);
|
|
741
839
|
break;
|
|
742
840
|
case "load-fail": {
|
|
743
841
|
const parsed = maybeParsePayload(payload) as { url?: string; reason?: string };
|
|
744
842
|
buniteEventEmitter.emitEvent(
|
|
745
843
|
buniteEventEmitter.events.webview.loadFail({
|
|
746
|
-
url: parsed.url ?? "",
|
|
844
|
+
url: parsed.url ?? "",
|
|
845
|
+
reason: parsed.reason,
|
|
747
846
|
}),
|
|
748
|
-
viewId
|
|
847
|
+
viewId,
|
|
749
848
|
);
|
|
750
849
|
break;
|
|
751
850
|
}
|
|
@@ -756,10 +855,7 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
756
855
|
message: string;
|
|
757
856
|
defaultPrompt?: string;
|
|
758
857
|
};
|
|
759
|
-
buniteEventEmitter.emitEvent(
|
|
760
|
-
buniteEventEmitter.events.webview.dialog(parsed),
|
|
761
|
-
viewId
|
|
762
|
-
);
|
|
858
|
+
buniteEventEmitter.emitEvent(buniteEventEmitter.events.webview.dialog(parsed), viewId);
|
|
763
859
|
break;
|
|
764
860
|
}
|
|
765
861
|
case "console-message": {
|
|
@@ -770,7 +866,7 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
770
866
|
};
|
|
771
867
|
buniteEventEmitter.emitEvent(
|
|
772
868
|
buniteEventEmitter.events.webview.consoleMessage(parsed),
|
|
773
|
-
viewId
|
|
869
|
+
viewId,
|
|
774
870
|
);
|
|
775
871
|
break;
|
|
776
872
|
}
|
|
@@ -779,8 +875,8 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
779
875
|
{
|
|
780
876
|
args: [FFIType.u32, FFIType.cstring, FFIType.cstring],
|
|
781
877
|
returns: FFIType.void,
|
|
782
|
-
threadsafe: true
|
|
783
|
-
}
|
|
878
|
+
threadsafe: true,
|
|
879
|
+
},
|
|
784
880
|
);
|
|
785
881
|
}
|
|
786
882
|
|
|
@@ -795,9 +891,7 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
795
891
|
|
|
796
892
|
switch (eventName) {
|
|
797
893
|
case "all-windows-closed":
|
|
798
|
-
buniteEventEmitter.emitEvent(
|
|
799
|
-
buniteEventEmitter.events.app.allWindowsClosed()
|
|
800
|
-
);
|
|
894
|
+
buniteEventEmitter.emitEvent(buniteEventEmitter.events.app.allWindowsClosed());
|
|
801
895
|
break;
|
|
802
896
|
case "close-requested": {
|
|
803
897
|
const crEvent = buniteEventEmitter.events.window.closeRequested({ id: windowId });
|
|
@@ -814,24 +908,29 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
814
908
|
case "close":
|
|
815
909
|
buniteEventEmitter.emitEvent(
|
|
816
910
|
buniteEventEmitter.events.window.close({ id: windowId }),
|
|
817
|
-
windowId
|
|
911
|
+
windowId,
|
|
818
912
|
);
|
|
819
913
|
break;
|
|
820
914
|
case "focus":
|
|
821
915
|
buniteEventEmitter.emitEvent(
|
|
822
916
|
buniteEventEmitter.events.window.focus({ id: windowId }),
|
|
823
|
-
windowId
|
|
917
|
+
windowId,
|
|
824
918
|
);
|
|
825
919
|
break;
|
|
826
920
|
case "blur":
|
|
827
921
|
buniteEventEmitter.emitEvent(
|
|
828
922
|
buniteEventEmitter.events.window.blur({ id: windowId }),
|
|
829
|
-
windowId
|
|
923
|
+
windowId,
|
|
830
924
|
);
|
|
831
925
|
break;
|
|
832
926
|
case "move":
|
|
833
927
|
if (parsedPayload && typeof parsedPayload === "object") {
|
|
834
|
-
const {
|
|
928
|
+
const {
|
|
929
|
+
x = 0,
|
|
930
|
+
y = 0,
|
|
931
|
+
maximized = false,
|
|
932
|
+
minimized = false,
|
|
933
|
+
} = parsedPayload as {
|
|
835
934
|
x?: number;
|
|
836
935
|
y?: number;
|
|
837
936
|
maximized?: boolean;
|
|
@@ -839,13 +938,20 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
839
938
|
};
|
|
840
939
|
buniteEventEmitter.emitEvent(
|
|
841
940
|
buniteEventEmitter.events.window.move({ id: windowId, x, y, maximized, minimized }),
|
|
842
|
-
windowId
|
|
941
|
+
windowId,
|
|
843
942
|
);
|
|
844
943
|
}
|
|
845
944
|
break;
|
|
846
945
|
case "resize":
|
|
847
946
|
if (parsedPayload && typeof parsedPayload === "object") {
|
|
848
|
-
const {
|
|
947
|
+
const {
|
|
948
|
+
x = 0,
|
|
949
|
+
y = 0,
|
|
950
|
+
width = 0,
|
|
951
|
+
height = 0,
|
|
952
|
+
maximized = false,
|
|
953
|
+
minimized = false,
|
|
954
|
+
} = parsedPayload as {
|
|
849
955
|
x?: number;
|
|
850
956
|
y?: number;
|
|
851
957
|
width?: number;
|
|
@@ -861,9 +967,9 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
861
967
|
width,
|
|
862
968
|
height,
|
|
863
969
|
maximized,
|
|
864
|
-
minimized
|
|
970
|
+
minimized,
|
|
865
971
|
}),
|
|
866
|
-
windowId
|
|
972
|
+
windowId,
|
|
867
973
|
);
|
|
868
974
|
}
|
|
869
975
|
break;
|
|
@@ -872,8 +978,8 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
872
978
|
{
|
|
873
979
|
args: [FFIType.u32, FFIType.cstring, FFIType.cstring],
|
|
874
980
|
returns: FFIType.void,
|
|
875
|
-
threadsafe: true
|
|
876
|
-
}
|
|
981
|
+
threadsafe: true,
|
|
982
|
+
},
|
|
877
983
|
);
|
|
878
984
|
}
|
|
879
985
|
|
|
@@ -882,7 +988,7 @@ function registerNativeCallbacks(library: LoadedNativeLibrary) {
|
|
|
882
988
|
}
|
|
883
989
|
|
|
884
990
|
export async function initNativeRuntime(
|
|
885
|
-
options: NativeBootstrapOptions = {}
|
|
991
|
+
options: NativeBootstrapOptions = {},
|
|
886
992
|
): Promise<NativeRuntimeState> {
|
|
887
993
|
if (state) {
|
|
888
994
|
return state;
|
|
@@ -890,7 +996,7 @@ export async function initNativeRuntime(
|
|
|
890
996
|
|
|
891
997
|
const artifacts = resolveNativeArtifacts(options.engine);
|
|
892
998
|
const hasNativeArtifacts = Boolean(
|
|
893
|
-
artifacts.nativeLibPath && existsSync(artifacts.nativeLibPath)
|
|
999
|
+
artifacts.nativeLibPath && existsSync(artifacts.nativeLibPath),
|
|
894
1000
|
);
|
|
895
1001
|
|
|
896
1002
|
applyEnvironment(artifacts);
|
|
@@ -902,19 +1008,21 @@ export async function initNativeRuntime(
|
|
|
902
1008
|
resolvePackageRoot("bunite-cef-win-x64") != null
|
|
903
1009
|
) {
|
|
904
1010
|
log.warn(
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
1011
|
+
'[bunite] Detected bunite-cef-win-x64. Windows default engine is now "webview2" — ' +
|
|
1012
|
+
"this app is currently running on WebView2. " +
|
|
1013
|
+
'To stay on CEF: pass engine: "cef" to AppRuntime. ' +
|
|
1014
|
+
"To accept the new default: drop bunite-cef-win-x64 from dependencies.",
|
|
909
1015
|
);
|
|
910
1016
|
}
|
|
911
1017
|
|
|
912
1018
|
if (!hasNativeArtifacts) {
|
|
913
|
-
const engineSuffix =
|
|
1019
|
+
const engineSuffix =
|
|
1020
|
+
artifacts.engine === "cef" ? " (engine=cef requires bunite-cef-win-x64)" : "";
|
|
914
1021
|
throw new Error(
|
|
915
1022
|
"bunite: native runtime not found. Install the platform package " +
|
|
916
|
-
|
|
917
|
-
|
|
1023
|
+
`(bunite-native-${process.platform === "win32" ? "win" : process.platform === "darwin" ? "mac" : "linux"}-<arch>)` +
|
|
1024
|
+
engineSuffix +
|
|
1025
|
+
".",
|
|
918
1026
|
);
|
|
919
1027
|
}
|
|
920
1028
|
|
|
@@ -928,7 +1036,7 @@ export async function initNativeRuntime(
|
|
|
928
1036
|
if (nativeAbi !== EXPECTED_ABI) {
|
|
929
1037
|
throw new Error(
|
|
930
1038
|
`bunite native ABI mismatch: JS expects ${EXPECTED_ABI}, native reports ${nativeAbi}. ` +
|
|
931
|
-
|
|
1039
|
+
`Rebuild native binaries with 'bun run build:native:win'.`,
|
|
932
1040
|
);
|
|
933
1041
|
}
|
|
934
1042
|
registerNativeCallbacks(nativeLibrary);
|
|
@@ -937,19 +1045,19 @@ export async function initNativeRuntime(
|
|
|
937
1045
|
toCString(artifacts.cefDir ?? ""),
|
|
938
1046
|
options.hideConsole ?? false,
|
|
939
1047
|
options.popupBlocking ?? false,
|
|
940
|
-
toCString(engineConfigJson)
|
|
1048
|
+
toCString(engineConfigJson),
|
|
941
1049
|
);
|
|
942
1050
|
if (!initOk) {
|
|
943
1051
|
throw new Error(
|
|
944
1052
|
"bunite: native runtime failed to initialize " +
|
|
945
|
-
|
|
946
|
-
|
|
1053
|
+
`(engine dir: ${artifacts.cefDir || "<unset>"}). ` +
|
|
1054
|
+
"Verify CEF binaries are available, or set BUNITE_CEF_DIR.",
|
|
947
1055
|
);
|
|
948
1056
|
}
|
|
949
1057
|
|
|
950
1058
|
state = {
|
|
951
1059
|
initialized: true,
|
|
952
|
-
artifacts
|
|
1060
|
+
artifacts,
|
|
953
1061
|
};
|
|
954
1062
|
return state;
|
|
955
1063
|
}
|