@gpuix/native 0.1.0
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/gpuix-native.darwin-arm64.node +0 -0
- package/gpuix-native.darwin-x64.node +0 -0
- package/gpuix-native.linux-arm64-gnu.node +0 -0
- package/gpuix-native.linux-x64-gnu.node +0 -0
- package/gpuix-native.win32-arm64-msvc.node +0 -0
- package/gpuix-native.win32-x64-msvc.node +0 -0
- package/index.d.ts +320 -0
- package/index.js +580 -0
- package/package.json +50 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/* auto-generated by NAPI-RS */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/** The main GPUI renderer exposed to Node.js. */
|
|
4
|
+
export declare class GpuixRenderer {
|
|
5
|
+
constructor(eventCallback?: (((err: Error | null, arg: EventPayload) => any)) | undefined | null)
|
|
6
|
+
/** Initialize the GPUI application with a non-blocking NodePlatform. */
|
|
7
|
+
init(options?: WindowOptions | undefined | null): void
|
|
8
|
+
createElement(id: number, elementType: string): void
|
|
9
|
+
/**
|
|
10
|
+
* Destroy an element and all descendants. Returns array of destroyed IDs
|
|
11
|
+
* so JS can clean up event handlers for the entire subtree.
|
|
12
|
+
*/
|
|
13
|
+
destroyElement(id: number): Array<number>
|
|
14
|
+
appendChild(parentId: number, childId: number): void
|
|
15
|
+
removeChild(parentId: number, childId: number): void
|
|
16
|
+
insertBefore(parentId: number, childId: number, beforeId: number): void
|
|
17
|
+
setStyle(id: number, styleJson: string): void
|
|
18
|
+
setText(id: number, content: string): void
|
|
19
|
+
setEventListener(id: number, eventType: string, hasHandler: boolean): void
|
|
20
|
+
/** Set the root element (called from appendChildToContainer). */
|
|
21
|
+
setRoot(id: number): void
|
|
22
|
+
/**
|
|
23
|
+
* Set a custom prop on an element (for non-div/text elements like input, editor, diff).
|
|
24
|
+
* Key is the prop name, value is JSON-encoded.
|
|
25
|
+
*/
|
|
26
|
+
setCustomProp(id: number, key: string, valueJson: string): void
|
|
27
|
+
/** Get a custom prop value from an element. Returns JSON string or null. */
|
|
28
|
+
getCustomProp(id: number, key: string): string | null
|
|
29
|
+
/** Signal that a batch of mutations is complete. Triggers re-render. */
|
|
30
|
+
commitMutations(): void
|
|
31
|
+
/**
|
|
32
|
+
* Apply a batch of mutations in a single FFI call.
|
|
33
|
+
*
|
|
34
|
+
* Accepts a JSON array of mutation tuples. Each tuple is an array where
|
|
35
|
+
* the first element is the operation name (string) and remaining elements
|
|
36
|
+
* are the arguments:
|
|
37
|
+
*
|
|
38
|
+
* ["createElement", id, "type"]
|
|
39
|
+
* ["destroyElement", id]
|
|
40
|
+
* ["appendChild", parentId, childId]
|
|
41
|
+
* ["removeChild", parentId, childId]
|
|
42
|
+
* ["insertBefore", parentId, childId, beforeId]
|
|
43
|
+
* ["setStyle", id, "{styleJson}"]
|
|
44
|
+
* ["setText", id, "content"]
|
|
45
|
+
* ["setEventListener", id, "eventType", true|false]
|
|
46
|
+
* ["setRoot", id]
|
|
47
|
+
* ["setCustomProp", id, "key", "{valueJson}"]
|
|
48
|
+
*
|
|
49
|
+
* Returns accumulated destroyed IDs from all destroyElement ops.
|
|
50
|
+
* Acquires the tree mutex ONCE for the entire batch.
|
|
51
|
+
*/
|
|
52
|
+
applyBatch(json: string): Array<number>
|
|
53
|
+
tick(): void
|
|
54
|
+
isInitialized(): boolean
|
|
55
|
+
getWindowSize(): WindowSize
|
|
56
|
+
setWindowTitle(title: string): void
|
|
57
|
+
focusElement(elementId: number): void
|
|
58
|
+
blur(): void
|
|
59
|
+
/**
|
|
60
|
+
* Set the scroll offset of a scrollable element.
|
|
61
|
+
* x and y are negative pixel values (scroll down = more negative y).
|
|
62
|
+
*/
|
|
63
|
+
scrollTo(elementId: number, x: number, y: number): void
|
|
64
|
+
/** Scroll a child into view by its index in the children list. */
|
|
65
|
+
scrollToItem(elementId: number, index: number): void
|
|
66
|
+
/**
|
|
67
|
+
* Get the current scroll offset of a scrollable element.
|
|
68
|
+
* Returns [x, y] or null if the element has no scroll handle.
|
|
69
|
+
*/
|
|
70
|
+
getScrollOffset(elementId: number): Array<number> | null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* GPU-backed GPUI test renderer. Uses VisualTestAppContext (real Metal
|
|
75
|
+
* rendering on macOS) with TestDispatcher for deterministic scheduling.
|
|
76
|
+
* Same GpuixView and rendering pipeline as production.
|
|
77
|
+
*
|
|
78
|
+
* Usage from JS:
|
|
79
|
+
* const r = new TestGpuixRenderer()
|
|
80
|
+
* r.createElement(1, "div")
|
|
81
|
+
* r.setRoot(1)
|
|
82
|
+
* r.commitMutations()
|
|
83
|
+
* r.flush() // triggers GpuixView::render() via Metal
|
|
84
|
+
* r.simulateClick(50, 50) // dispatches through GPUI hit testing
|
|
85
|
+
* const events = r.drainEvents()
|
|
86
|
+
* r.captureScreenshot("/tmp/test.png") // saves rendered UI as PNG
|
|
87
|
+
*/
|
|
88
|
+
export declare class TestGpuixRenderer {
|
|
89
|
+
constructor()
|
|
90
|
+
createElement(id: number, elementType: string): void
|
|
91
|
+
/**
|
|
92
|
+
* Destroy an element and all descendants. Returns destroyed IDs
|
|
93
|
+
* so JS can clean up event handlers.
|
|
94
|
+
*/
|
|
95
|
+
destroyElement(id: number): Array<number>
|
|
96
|
+
appendChild(parentId: number, childId: number): void
|
|
97
|
+
removeChild(parentId: number, childId: number): void
|
|
98
|
+
insertBefore(parentId: number, childId: number, beforeId: number): void
|
|
99
|
+
setStyle(id: number, styleJson: string): void
|
|
100
|
+
setText(id: number, content: string): void
|
|
101
|
+
setEventListener(id: number, eventType: string, hasHandler: boolean): void
|
|
102
|
+
/** Set the root element (called from appendChildToContainer). */
|
|
103
|
+
setRoot(id: number): void
|
|
104
|
+
/** Set a custom prop on an element (for non-div/text elements like input, editor, diff). */
|
|
105
|
+
setCustomProp(id: number, key: string, valueJson: string): void
|
|
106
|
+
/** Get a custom prop value from an element. */
|
|
107
|
+
getCustomProp(id: number, key: string): string | null
|
|
108
|
+
/**
|
|
109
|
+
* Signal that a batch of mutations is complete.
|
|
110
|
+
* In tests, this is a no-op — flush() handles the actual re-render.
|
|
111
|
+
*/
|
|
112
|
+
commitMutations(): void
|
|
113
|
+
/**
|
|
114
|
+
* Apply a batch of mutations in a single FFI call.
|
|
115
|
+
* Same format as GpuixRenderer::apply_batch (string op names).
|
|
116
|
+
* Returns accumulated destroyed IDs from all destroyElement ops.
|
|
117
|
+
*/
|
|
118
|
+
applyBatch(json: string): Array<number>
|
|
119
|
+
/**
|
|
120
|
+
* Notify the view entity and run GPUI until parked.
|
|
121
|
+
* This triggers GpuixView::render() → build_element() → GPUI layout.
|
|
122
|
+
* Must be called after mutations and before simulating events (GPUI's
|
|
123
|
+
* hit testing requires elements to be laid out).
|
|
124
|
+
*/
|
|
125
|
+
flush(): void
|
|
126
|
+
/**
|
|
127
|
+
* Simulate a click at the given window coordinates.
|
|
128
|
+
* Dispatches MouseDown + MouseUp through GPUI's input pipeline,
|
|
129
|
+
* which triggers the same event handlers as production.
|
|
130
|
+
* IMPORTANT: Call flush() before this — hit testing requires laid-out elements.
|
|
131
|
+
*/
|
|
132
|
+
simulateClick(x: number, y: number): void
|
|
133
|
+
/**
|
|
134
|
+
* Simulate key strokes through GPUI's input pipeline.
|
|
135
|
+
* Format: space-separated keys, e.g. "a", "enter", "cmd-shift-p".
|
|
136
|
+
* The focused element receives keyDown/keyUp events.
|
|
137
|
+
*/
|
|
138
|
+
simulateKeystrokes(keystrokes: string): void
|
|
139
|
+
/**
|
|
140
|
+
* Simulate a single key down event through GPUI's input pipeline.
|
|
141
|
+
* Format: modifier-key string, e.g. "a", "enter", "cmd-s".
|
|
142
|
+
* Unlike simulate_keystrokes, this dispatches ONLY a KeyDownEvent —
|
|
143
|
+
* no automatic KeyUpEvent follows. Use with simulate_key_up for
|
|
144
|
+
* fine-grained key event testing.
|
|
145
|
+
*/
|
|
146
|
+
simulateKeyDown(keystroke: string, isHeld?: boolean | undefined | null): void
|
|
147
|
+
/**
|
|
148
|
+
* Simulate a single key up event through GPUI's input pipeline.
|
|
149
|
+
* Format: modifier-key string, e.g. "a", "enter", "cmd-s".
|
|
150
|
+
* Pairs with simulate_key_down for fine-grained key event testing.
|
|
151
|
+
*/
|
|
152
|
+
simulateKeyUp(keystroke: string): void
|
|
153
|
+
/**
|
|
154
|
+
* Simulate a mouse move to the given coordinates.
|
|
155
|
+
* pressed_button: optional mouse button held during move (0=left, 1=middle, 2=right).
|
|
156
|
+
* Used to simulate drag events.
|
|
157
|
+
*/
|
|
158
|
+
simulateMouseMove(x: number, y: number, pressedButton?: number | undefined | null): void
|
|
159
|
+
/**
|
|
160
|
+
* Focus an element by its numeric ID.
|
|
161
|
+
* The element must have a FocusHandle (created by sync_focus_handles when
|
|
162
|
+
* the element has keyDown, keyUp, focus, or blur listeners).
|
|
163
|
+
* Call flush() before this so the element tree and focus handles exist.
|
|
164
|
+
*/
|
|
165
|
+
focusElement(id: number): void
|
|
166
|
+
/**
|
|
167
|
+
* Simulate a mouse down event at the given window coordinates.
|
|
168
|
+
* Button: 0=left, 1=middle, 2=right. Defaults to left (0).
|
|
169
|
+
*/
|
|
170
|
+
simulateMouseDown(x: number, y: number, button?: number | undefined | null): void
|
|
171
|
+
/**
|
|
172
|
+
* Simulate a mouse up event at the given window coordinates.
|
|
173
|
+
* Button: 0=left, 1=middle, 2=right. Defaults to left (0).
|
|
174
|
+
*/
|
|
175
|
+
simulateMouseUp(x: number, y: number, button?: number | undefined | null): void
|
|
176
|
+
/**
|
|
177
|
+
* Simulate a scroll wheel event at the given position.
|
|
178
|
+
* delta_x and delta_y are in pixels (negative = scroll up/left).
|
|
179
|
+
*/
|
|
180
|
+
simulateScrollWheel(x: number, y: number, deltaX: number, deltaY: number): void
|
|
181
|
+
/**
|
|
182
|
+
* Set the scroll offset of a scrollable element.
|
|
183
|
+
* x and y are negative pixel values (scroll down = more negative y).
|
|
184
|
+
* Call flush() after to apply the offset and re-render.
|
|
185
|
+
*/
|
|
186
|
+
scrollTo(elementId: number, x: number, y: number): void
|
|
187
|
+
/**
|
|
188
|
+
* Scroll a child into view by its index in the children list.
|
|
189
|
+
* Call flush() after to apply and re-render.
|
|
190
|
+
*/
|
|
191
|
+
scrollToItem(elementId: number, index: number): void
|
|
192
|
+
/**
|
|
193
|
+
* Get the current scroll offset of a scrollable element.
|
|
194
|
+
* Returns [x, y] or null if the element has no scroll handle.
|
|
195
|
+
*/
|
|
196
|
+
getScrollOffset(elementId: number): Array<number> | null
|
|
197
|
+
/**
|
|
198
|
+
* Capture a screenshot of the current rendered state and save as PNG.
|
|
199
|
+
* macOS only — requires Metal GPU rendering via VisualTestAppContext.
|
|
200
|
+
*/
|
|
201
|
+
captureScreenshot(path: string): void
|
|
202
|
+
/**
|
|
203
|
+
* Return and clear all collected events since the last drain.
|
|
204
|
+
* Events are collected synchronously — no event loop queuing.
|
|
205
|
+
*/
|
|
206
|
+
drainEvents(): Array<EventPayload>
|
|
207
|
+
/** Get all text content in the tree (depth-first order). */
|
|
208
|
+
getAllText(): Array<string>
|
|
209
|
+
/** Find element IDs matching the given type (e.g. "div", "text"). */
|
|
210
|
+
findByType(elementType: string): Array<number>
|
|
211
|
+
/** Check if an element has a specific event listener. */
|
|
212
|
+
hasEventListener(id: number, eventType: string): boolean
|
|
213
|
+
/** Get the text content of an element. */
|
|
214
|
+
getText(id: number): string | null
|
|
215
|
+
/** Get the full tree as JSON for snapshot testing. */
|
|
216
|
+
getTreeJson(): string
|
|
217
|
+
/** Get the root element ID, or null if no root is set. */
|
|
218
|
+
getRootId(): number | null
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export interface EventModifiers {
|
|
222
|
+
shift: boolean
|
|
223
|
+
ctrl: boolean
|
|
224
|
+
alt: boolean
|
|
225
|
+
cmd: boolean
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/** Event payload sent back to JS when a user interacts with an element. */
|
|
229
|
+
export interface EventPayload {
|
|
230
|
+
/** Numeric element ID (matches the ID assigned in JS via createElement). */
|
|
231
|
+
elementId: number
|
|
232
|
+
/**
|
|
233
|
+
* Event type string — matches the key used in EVENT_PROPS on the JS side.
|
|
234
|
+
* e.g. "click", "mouseDown", "mouseEnter", "keyDown", "scroll", etc.
|
|
235
|
+
*/
|
|
236
|
+
eventType: string
|
|
237
|
+
/** Mouse X position in window coordinates (pixels). */
|
|
238
|
+
x?: number
|
|
239
|
+
/** Mouse Y position in window coordinates (pixels). */
|
|
240
|
+
y?: number
|
|
241
|
+
/**
|
|
242
|
+
* Which mouse button: 0=left, 1=middle, 2=right.
|
|
243
|
+
* Populated for: mouseDown, mouseUp, click, mouseDownOutside, contextMenu.
|
|
244
|
+
*/
|
|
245
|
+
button?: number
|
|
246
|
+
/**
|
|
247
|
+
* Number of consecutive clicks (1=single, 2=double, 3=triple).
|
|
248
|
+
* Populated for: mouseDown, mouseUp, click.
|
|
249
|
+
*/
|
|
250
|
+
clickCount?: number
|
|
251
|
+
/**
|
|
252
|
+
* Whether this is a right-click (convenience for click events).
|
|
253
|
+
* true when button==2 or ClickEvent::is_right_click().
|
|
254
|
+
*/
|
|
255
|
+
isRightClick?: boolean
|
|
256
|
+
/**
|
|
257
|
+
* Which mouse button is currently held during a mouseMove.
|
|
258
|
+
* Same encoding as `button`: 0=left, 1=middle, 2=right.
|
|
259
|
+
* Populated for: mouseMove.
|
|
260
|
+
*/
|
|
261
|
+
pressedButton?: number
|
|
262
|
+
/**
|
|
263
|
+
* Key name, e.g. "a", "enter", "escape", "down", "left", "f1".
|
|
264
|
+
* Populated for: keyDown, keyUp.
|
|
265
|
+
*/
|
|
266
|
+
key?: string
|
|
267
|
+
/**
|
|
268
|
+
* The character produced by the key press (e.g. "ß" for option-s).
|
|
269
|
+
* May differ from `key` when modifiers are active.
|
|
270
|
+
* Populated for: keyDown, keyUp.
|
|
271
|
+
*/
|
|
272
|
+
keyChar?: string
|
|
273
|
+
/**
|
|
274
|
+
* Whether this is a key-repeat event (key held down).
|
|
275
|
+
* Populated for: keyDown.
|
|
276
|
+
*/
|
|
277
|
+
isHeld?: boolean
|
|
278
|
+
/**
|
|
279
|
+
* Scroll delta on the X axis (pixels or lines, see `precise`).
|
|
280
|
+
* Populated for: scroll.
|
|
281
|
+
*/
|
|
282
|
+
deltaX?: number
|
|
283
|
+
/**
|
|
284
|
+
* Scroll delta on the Y axis (pixels or lines, see `precise`).
|
|
285
|
+
* Populated for: scroll.
|
|
286
|
+
*/
|
|
287
|
+
deltaY?: number
|
|
288
|
+
/**
|
|
289
|
+
* true = pixel-precise (trackpad), false = line-based (mouse wheel).
|
|
290
|
+
* Populated for: scroll.
|
|
291
|
+
*/
|
|
292
|
+
precise?: boolean
|
|
293
|
+
/**
|
|
294
|
+
* Touch phase for scroll: "started", "moved", "ended".
|
|
295
|
+
* Populated for: scroll (trackpad gestures).
|
|
296
|
+
*/
|
|
297
|
+
touchPhase?: string
|
|
298
|
+
/**
|
|
299
|
+
* true = mouse entered element, false = mouse left element.
|
|
300
|
+
* Populated for: mouseEnter, mouseLeave.
|
|
301
|
+
*/
|
|
302
|
+
hovered?: boolean
|
|
303
|
+
modifiers?: EventModifiers
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
export interface WindowOptions {
|
|
307
|
+
title?: string
|
|
308
|
+
width?: number
|
|
309
|
+
height?: number
|
|
310
|
+
minWidth?: number
|
|
311
|
+
minHeight?: number
|
|
312
|
+
resizable?: boolean
|
|
313
|
+
fullscreen?: boolean
|
|
314
|
+
transparent?: boolean
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export interface WindowSize {
|
|
318
|
+
width: number
|
|
319
|
+
height: number
|
|
320
|
+
}
|
package/index.js
ADDED
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
// prettier-ignore
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
const { readFileSync } = require('node:fs')
|
|
7
|
+
let nativeBinding = null
|
|
8
|
+
const loadErrors = []
|
|
9
|
+
|
|
10
|
+
const isMusl = () => {
|
|
11
|
+
let musl = false
|
|
12
|
+
if (process.platform === 'linux') {
|
|
13
|
+
musl = isMuslFromFilesystem()
|
|
14
|
+
if (musl === null) {
|
|
15
|
+
musl = isMuslFromReport()
|
|
16
|
+
}
|
|
17
|
+
if (musl === null) {
|
|
18
|
+
musl = isMuslFromChildProcess()
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return musl
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
|
|
25
|
+
|
|
26
|
+
const isMuslFromFilesystem = () => {
|
|
27
|
+
try {
|
|
28
|
+
return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
|
|
29
|
+
} catch {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const isMuslFromReport = () => {
|
|
35
|
+
let report = null
|
|
36
|
+
if (typeof process.report?.getReport === 'function') {
|
|
37
|
+
process.report.excludeNetwork = true
|
|
38
|
+
report = process.report.getReport()
|
|
39
|
+
}
|
|
40
|
+
if (!report) {
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
if (report.header && report.header.glibcVersionRuntime) {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(report.sharedObjects)) {
|
|
47
|
+
if (report.sharedObjects.some(isFileMusl)) {
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const isMuslFromChildProcess = () => {
|
|
55
|
+
try {
|
|
56
|
+
return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
|
|
57
|
+
} catch (e) {
|
|
58
|
+
// If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
|
|
59
|
+
return false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function requireNative() {
|
|
64
|
+
if (process.env.NAPI_RS_NATIVE_LIBRARY_PATH) {
|
|
65
|
+
try {
|
|
66
|
+
return require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
loadErrors.push(err)
|
|
69
|
+
}
|
|
70
|
+
} else if (process.platform === 'android') {
|
|
71
|
+
if (process.arch === 'arm64') {
|
|
72
|
+
try {
|
|
73
|
+
return require('./gpuix-native.android-arm64.node')
|
|
74
|
+
} catch (e) {
|
|
75
|
+
loadErrors.push(e)
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const binding = require('@gpuix/native-android-arm64')
|
|
79
|
+
const bindingPackageVersion = require('@gpuix/native-android-arm64/package.json').version
|
|
80
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
81
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
82
|
+
}
|
|
83
|
+
return binding
|
|
84
|
+
} catch (e) {
|
|
85
|
+
loadErrors.push(e)
|
|
86
|
+
}
|
|
87
|
+
} else if (process.arch === 'arm') {
|
|
88
|
+
try {
|
|
89
|
+
return require('./gpuix-native.android-arm-eabi.node')
|
|
90
|
+
} catch (e) {
|
|
91
|
+
loadErrors.push(e)
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const binding = require('@gpuix/native-android-arm-eabi')
|
|
95
|
+
const bindingPackageVersion = require('@gpuix/native-android-arm-eabi/package.json').version
|
|
96
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
97
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
98
|
+
}
|
|
99
|
+
return binding
|
|
100
|
+
} catch (e) {
|
|
101
|
+
loadErrors.push(e)
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
|
|
105
|
+
}
|
|
106
|
+
} else if (process.platform === 'win32') {
|
|
107
|
+
if (process.arch === 'x64') {
|
|
108
|
+
if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') {
|
|
109
|
+
try {
|
|
110
|
+
return require('./gpuix-native.win32-x64-gnu.node')
|
|
111
|
+
} catch (e) {
|
|
112
|
+
loadErrors.push(e)
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
const binding = require('@gpuix/native-win32-x64-gnu')
|
|
116
|
+
const bindingPackageVersion = require('@gpuix/native-win32-x64-gnu/package.json').version
|
|
117
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
118
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
119
|
+
}
|
|
120
|
+
return binding
|
|
121
|
+
} catch (e) {
|
|
122
|
+
loadErrors.push(e)
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
try {
|
|
126
|
+
return require('./gpuix-native.win32-x64-msvc.node')
|
|
127
|
+
} catch (e) {
|
|
128
|
+
loadErrors.push(e)
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const binding = require('@gpuix/native-win32-x64-msvc')
|
|
132
|
+
const bindingPackageVersion = require('@gpuix/native-win32-x64-msvc/package.json').version
|
|
133
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
134
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
135
|
+
}
|
|
136
|
+
return binding
|
|
137
|
+
} catch (e) {
|
|
138
|
+
loadErrors.push(e)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
} else if (process.arch === 'ia32') {
|
|
142
|
+
try {
|
|
143
|
+
return require('./gpuix-native.win32-ia32-msvc.node')
|
|
144
|
+
} catch (e) {
|
|
145
|
+
loadErrors.push(e)
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const binding = require('@gpuix/native-win32-ia32-msvc')
|
|
149
|
+
const bindingPackageVersion = require('@gpuix/native-win32-ia32-msvc/package.json').version
|
|
150
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
151
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
152
|
+
}
|
|
153
|
+
return binding
|
|
154
|
+
} catch (e) {
|
|
155
|
+
loadErrors.push(e)
|
|
156
|
+
}
|
|
157
|
+
} else if (process.arch === 'arm64') {
|
|
158
|
+
try {
|
|
159
|
+
return require('./gpuix-native.win32-arm64-msvc.node')
|
|
160
|
+
} catch (e) {
|
|
161
|
+
loadErrors.push(e)
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const binding = require('@gpuix/native-win32-arm64-msvc')
|
|
165
|
+
const bindingPackageVersion = require('@gpuix/native-win32-arm64-msvc/package.json').version
|
|
166
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
167
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
168
|
+
}
|
|
169
|
+
return binding
|
|
170
|
+
} catch (e) {
|
|
171
|
+
loadErrors.push(e)
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
|
|
175
|
+
}
|
|
176
|
+
} else if (process.platform === 'darwin') {
|
|
177
|
+
try {
|
|
178
|
+
return require('./gpuix-native.darwin-universal.node')
|
|
179
|
+
} catch (e) {
|
|
180
|
+
loadErrors.push(e)
|
|
181
|
+
}
|
|
182
|
+
try {
|
|
183
|
+
const binding = require('@gpuix/native-darwin-universal')
|
|
184
|
+
const bindingPackageVersion = require('@gpuix/native-darwin-universal/package.json').version
|
|
185
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
186
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
187
|
+
}
|
|
188
|
+
return binding
|
|
189
|
+
} catch (e) {
|
|
190
|
+
loadErrors.push(e)
|
|
191
|
+
}
|
|
192
|
+
if (process.arch === 'x64') {
|
|
193
|
+
try {
|
|
194
|
+
return require('./gpuix-native.darwin-x64.node')
|
|
195
|
+
} catch (e) {
|
|
196
|
+
loadErrors.push(e)
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const binding = require('@gpuix/native-darwin-x64')
|
|
200
|
+
const bindingPackageVersion = require('@gpuix/native-darwin-x64/package.json').version
|
|
201
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
202
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
203
|
+
}
|
|
204
|
+
return binding
|
|
205
|
+
} catch (e) {
|
|
206
|
+
loadErrors.push(e)
|
|
207
|
+
}
|
|
208
|
+
} else if (process.arch === 'arm64') {
|
|
209
|
+
try {
|
|
210
|
+
return require('./gpuix-native.darwin-arm64.node')
|
|
211
|
+
} catch (e) {
|
|
212
|
+
loadErrors.push(e)
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
const binding = require('@gpuix/native-darwin-arm64')
|
|
216
|
+
const bindingPackageVersion = require('@gpuix/native-darwin-arm64/package.json').version
|
|
217
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
218
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
219
|
+
}
|
|
220
|
+
return binding
|
|
221
|
+
} catch (e) {
|
|
222
|
+
loadErrors.push(e)
|
|
223
|
+
}
|
|
224
|
+
} else {
|
|
225
|
+
loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
|
|
226
|
+
}
|
|
227
|
+
} else if (process.platform === 'freebsd') {
|
|
228
|
+
if (process.arch === 'x64') {
|
|
229
|
+
try {
|
|
230
|
+
return require('./gpuix-native.freebsd-x64.node')
|
|
231
|
+
} catch (e) {
|
|
232
|
+
loadErrors.push(e)
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const binding = require('@gpuix/native-freebsd-x64')
|
|
236
|
+
const bindingPackageVersion = require('@gpuix/native-freebsd-x64/package.json').version
|
|
237
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
238
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
239
|
+
}
|
|
240
|
+
return binding
|
|
241
|
+
} catch (e) {
|
|
242
|
+
loadErrors.push(e)
|
|
243
|
+
}
|
|
244
|
+
} else if (process.arch === 'arm64') {
|
|
245
|
+
try {
|
|
246
|
+
return require('./gpuix-native.freebsd-arm64.node')
|
|
247
|
+
} catch (e) {
|
|
248
|
+
loadErrors.push(e)
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const binding = require('@gpuix/native-freebsd-arm64')
|
|
252
|
+
const bindingPackageVersion = require('@gpuix/native-freebsd-arm64/package.json').version
|
|
253
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
254
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
255
|
+
}
|
|
256
|
+
return binding
|
|
257
|
+
} catch (e) {
|
|
258
|
+
loadErrors.push(e)
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
|
|
262
|
+
}
|
|
263
|
+
} else if (process.platform === 'linux') {
|
|
264
|
+
if (process.arch === 'x64') {
|
|
265
|
+
if (isMusl()) {
|
|
266
|
+
try {
|
|
267
|
+
return require('./gpuix-native.linux-x64-musl.node')
|
|
268
|
+
} catch (e) {
|
|
269
|
+
loadErrors.push(e)
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const binding = require('@gpuix/native-linux-x64-musl')
|
|
273
|
+
const bindingPackageVersion = require('@gpuix/native-linux-x64-musl/package.json').version
|
|
274
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
275
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
276
|
+
}
|
|
277
|
+
return binding
|
|
278
|
+
} catch (e) {
|
|
279
|
+
loadErrors.push(e)
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
try {
|
|
283
|
+
return require('./gpuix-native.linux-x64-gnu.node')
|
|
284
|
+
} catch (e) {
|
|
285
|
+
loadErrors.push(e)
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
const binding = require('@gpuix/native-linux-x64-gnu')
|
|
289
|
+
const bindingPackageVersion = require('@gpuix/native-linux-x64-gnu/package.json').version
|
|
290
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
291
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
292
|
+
}
|
|
293
|
+
return binding
|
|
294
|
+
} catch (e) {
|
|
295
|
+
loadErrors.push(e)
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
} else if (process.arch === 'arm64') {
|
|
299
|
+
if (isMusl()) {
|
|
300
|
+
try {
|
|
301
|
+
return require('./gpuix-native.linux-arm64-musl.node')
|
|
302
|
+
} catch (e) {
|
|
303
|
+
loadErrors.push(e)
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
const binding = require('@gpuix/native-linux-arm64-musl')
|
|
307
|
+
const bindingPackageVersion = require('@gpuix/native-linux-arm64-musl/package.json').version
|
|
308
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
309
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
310
|
+
}
|
|
311
|
+
return binding
|
|
312
|
+
} catch (e) {
|
|
313
|
+
loadErrors.push(e)
|
|
314
|
+
}
|
|
315
|
+
} else {
|
|
316
|
+
try {
|
|
317
|
+
return require('./gpuix-native.linux-arm64-gnu.node')
|
|
318
|
+
} catch (e) {
|
|
319
|
+
loadErrors.push(e)
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
const binding = require('@gpuix/native-linux-arm64-gnu')
|
|
323
|
+
const bindingPackageVersion = require('@gpuix/native-linux-arm64-gnu/package.json').version
|
|
324
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
325
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
326
|
+
}
|
|
327
|
+
return binding
|
|
328
|
+
} catch (e) {
|
|
329
|
+
loadErrors.push(e)
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
} else if (process.arch === 'arm') {
|
|
333
|
+
if (isMusl()) {
|
|
334
|
+
try {
|
|
335
|
+
return require('./gpuix-native.linux-arm-musleabihf.node')
|
|
336
|
+
} catch (e) {
|
|
337
|
+
loadErrors.push(e)
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
const binding = require('@gpuix/native-linux-arm-musleabihf')
|
|
341
|
+
const bindingPackageVersion = require('@gpuix/native-linux-arm-musleabihf/package.json').version
|
|
342
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
343
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
344
|
+
}
|
|
345
|
+
return binding
|
|
346
|
+
} catch (e) {
|
|
347
|
+
loadErrors.push(e)
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
try {
|
|
351
|
+
return require('./gpuix-native.linux-arm-gnueabihf.node')
|
|
352
|
+
} catch (e) {
|
|
353
|
+
loadErrors.push(e)
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
const binding = require('@gpuix/native-linux-arm-gnueabihf')
|
|
357
|
+
const bindingPackageVersion = require('@gpuix/native-linux-arm-gnueabihf/package.json').version
|
|
358
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
359
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
360
|
+
}
|
|
361
|
+
return binding
|
|
362
|
+
} catch (e) {
|
|
363
|
+
loadErrors.push(e)
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
} else if (process.arch === 'loong64') {
|
|
367
|
+
if (isMusl()) {
|
|
368
|
+
try {
|
|
369
|
+
return require('./gpuix-native.linux-loong64-musl.node')
|
|
370
|
+
} catch (e) {
|
|
371
|
+
loadErrors.push(e)
|
|
372
|
+
}
|
|
373
|
+
try {
|
|
374
|
+
const binding = require('@gpuix/native-linux-loong64-musl')
|
|
375
|
+
const bindingPackageVersion = require('@gpuix/native-linux-loong64-musl/package.json').version
|
|
376
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
377
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
378
|
+
}
|
|
379
|
+
return binding
|
|
380
|
+
} catch (e) {
|
|
381
|
+
loadErrors.push(e)
|
|
382
|
+
}
|
|
383
|
+
} else {
|
|
384
|
+
try {
|
|
385
|
+
return require('./gpuix-native.linux-loong64-gnu.node')
|
|
386
|
+
} catch (e) {
|
|
387
|
+
loadErrors.push(e)
|
|
388
|
+
}
|
|
389
|
+
try {
|
|
390
|
+
const binding = require('@gpuix/native-linux-loong64-gnu')
|
|
391
|
+
const bindingPackageVersion = require('@gpuix/native-linux-loong64-gnu/package.json').version
|
|
392
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
393
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
394
|
+
}
|
|
395
|
+
return binding
|
|
396
|
+
} catch (e) {
|
|
397
|
+
loadErrors.push(e)
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
} else if (process.arch === 'riscv64') {
|
|
401
|
+
if (isMusl()) {
|
|
402
|
+
try {
|
|
403
|
+
return require('./gpuix-native.linux-riscv64-musl.node')
|
|
404
|
+
} catch (e) {
|
|
405
|
+
loadErrors.push(e)
|
|
406
|
+
}
|
|
407
|
+
try {
|
|
408
|
+
const binding = require('@gpuix/native-linux-riscv64-musl')
|
|
409
|
+
const bindingPackageVersion = require('@gpuix/native-linux-riscv64-musl/package.json').version
|
|
410
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
411
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
412
|
+
}
|
|
413
|
+
return binding
|
|
414
|
+
} catch (e) {
|
|
415
|
+
loadErrors.push(e)
|
|
416
|
+
}
|
|
417
|
+
} else {
|
|
418
|
+
try {
|
|
419
|
+
return require('./gpuix-native.linux-riscv64-gnu.node')
|
|
420
|
+
} catch (e) {
|
|
421
|
+
loadErrors.push(e)
|
|
422
|
+
}
|
|
423
|
+
try {
|
|
424
|
+
const binding = require('@gpuix/native-linux-riscv64-gnu')
|
|
425
|
+
const bindingPackageVersion = require('@gpuix/native-linux-riscv64-gnu/package.json').version
|
|
426
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
427
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
428
|
+
}
|
|
429
|
+
return binding
|
|
430
|
+
} catch (e) {
|
|
431
|
+
loadErrors.push(e)
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
} else if (process.arch === 'ppc64') {
|
|
435
|
+
try {
|
|
436
|
+
return require('./gpuix-native.linux-ppc64-gnu.node')
|
|
437
|
+
} catch (e) {
|
|
438
|
+
loadErrors.push(e)
|
|
439
|
+
}
|
|
440
|
+
try {
|
|
441
|
+
const binding = require('@gpuix/native-linux-ppc64-gnu')
|
|
442
|
+
const bindingPackageVersion = require('@gpuix/native-linux-ppc64-gnu/package.json').version
|
|
443
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
444
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
445
|
+
}
|
|
446
|
+
return binding
|
|
447
|
+
} catch (e) {
|
|
448
|
+
loadErrors.push(e)
|
|
449
|
+
}
|
|
450
|
+
} else if (process.arch === 's390x') {
|
|
451
|
+
try {
|
|
452
|
+
return require('./gpuix-native.linux-s390x-gnu.node')
|
|
453
|
+
} catch (e) {
|
|
454
|
+
loadErrors.push(e)
|
|
455
|
+
}
|
|
456
|
+
try {
|
|
457
|
+
const binding = require('@gpuix/native-linux-s390x-gnu')
|
|
458
|
+
const bindingPackageVersion = require('@gpuix/native-linux-s390x-gnu/package.json').version
|
|
459
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
460
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
461
|
+
}
|
|
462
|
+
return binding
|
|
463
|
+
} catch (e) {
|
|
464
|
+
loadErrors.push(e)
|
|
465
|
+
}
|
|
466
|
+
} else {
|
|
467
|
+
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
|
|
468
|
+
}
|
|
469
|
+
} else if (process.platform === 'openharmony') {
|
|
470
|
+
if (process.arch === 'arm64') {
|
|
471
|
+
try {
|
|
472
|
+
return require('./gpuix-native.openharmony-arm64.node')
|
|
473
|
+
} catch (e) {
|
|
474
|
+
loadErrors.push(e)
|
|
475
|
+
}
|
|
476
|
+
try {
|
|
477
|
+
const binding = require('@gpuix/native-openharmony-arm64')
|
|
478
|
+
const bindingPackageVersion = require('@gpuix/native-openharmony-arm64/package.json').version
|
|
479
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
480
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
481
|
+
}
|
|
482
|
+
return binding
|
|
483
|
+
} catch (e) {
|
|
484
|
+
loadErrors.push(e)
|
|
485
|
+
}
|
|
486
|
+
} else if (process.arch === 'x64') {
|
|
487
|
+
try {
|
|
488
|
+
return require('./gpuix-native.openharmony-x64.node')
|
|
489
|
+
} catch (e) {
|
|
490
|
+
loadErrors.push(e)
|
|
491
|
+
}
|
|
492
|
+
try {
|
|
493
|
+
const binding = require('@gpuix/native-openharmony-x64')
|
|
494
|
+
const bindingPackageVersion = require('@gpuix/native-openharmony-x64/package.json').version
|
|
495
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
496
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
497
|
+
}
|
|
498
|
+
return binding
|
|
499
|
+
} catch (e) {
|
|
500
|
+
loadErrors.push(e)
|
|
501
|
+
}
|
|
502
|
+
} else if (process.arch === 'arm') {
|
|
503
|
+
try {
|
|
504
|
+
return require('./gpuix-native.openharmony-arm.node')
|
|
505
|
+
} catch (e) {
|
|
506
|
+
loadErrors.push(e)
|
|
507
|
+
}
|
|
508
|
+
try {
|
|
509
|
+
const binding = require('@gpuix/native-openharmony-arm')
|
|
510
|
+
const bindingPackageVersion = require('@gpuix/native-openharmony-arm/package.json').version
|
|
511
|
+
if (bindingPackageVersion !== '0.1.0' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
512
|
+
throw new Error(`Native binding package version mismatch, expected 0.1.0 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
513
|
+
}
|
|
514
|
+
return binding
|
|
515
|
+
} catch (e) {
|
|
516
|
+
loadErrors.push(e)
|
|
517
|
+
}
|
|
518
|
+
} else {
|
|
519
|
+
loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
|
|
520
|
+
}
|
|
521
|
+
} else {
|
|
522
|
+
loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
nativeBinding = requireNative()
|
|
527
|
+
|
|
528
|
+
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
529
|
+
let wasiBinding = null
|
|
530
|
+
let wasiBindingError = null
|
|
531
|
+
try {
|
|
532
|
+
wasiBinding = require('./gpuix-native.wasi.cjs')
|
|
533
|
+
nativeBinding = wasiBinding
|
|
534
|
+
} catch (err) {
|
|
535
|
+
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
536
|
+
wasiBindingError = err
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
540
|
+
try {
|
|
541
|
+
wasiBinding = require('@gpuix/native-wasm32-wasi')
|
|
542
|
+
nativeBinding = wasiBinding
|
|
543
|
+
} catch (err) {
|
|
544
|
+
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
545
|
+
if (!wasiBindingError) {
|
|
546
|
+
wasiBindingError = err
|
|
547
|
+
} else {
|
|
548
|
+
wasiBindingError.cause = err
|
|
549
|
+
}
|
|
550
|
+
loadErrors.push(err)
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
|
|
555
|
+
const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
|
|
556
|
+
error.cause = wasiBindingError
|
|
557
|
+
throw error
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
if (!nativeBinding) {
|
|
562
|
+
if (loadErrors.length > 0) {
|
|
563
|
+
throw new Error(
|
|
564
|
+
`Cannot find native binding. ` +
|
|
565
|
+
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
|
|
566
|
+
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
|
|
567
|
+
{
|
|
568
|
+
cause: loadErrors.reduce((err, cur) => {
|
|
569
|
+
cur.cause = err
|
|
570
|
+
return cur
|
|
571
|
+
}),
|
|
572
|
+
},
|
|
573
|
+
)
|
|
574
|
+
}
|
|
575
|
+
throw new Error(`Failed to load native binding`)
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
module.exports = nativeBinding
|
|
579
|
+
module.exports.GpuixRenderer = nativeBinding.GpuixRenderer
|
|
580
|
+
module.exports.TestGpuixRenderer = nativeBinding.TestGpuixRenderer
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gpuix/native",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"types": "index.d.ts",
|
|
6
|
+
"napi": {
|
|
7
|
+
"binaryName": "gpuix-native",
|
|
8
|
+
"targets": [
|
|
9
|
+
"aarch64-apple-darwin",
|
|
10
|
+
"x86_64-apple-darwin",
|
|
11
|
+
"x86_64-unknown-linux-gnu",
|
|
12
|
+
"aarch64-unknown-linux-gnu",
|
|
13
|
+
"x86_64-pc-windows-msvc",
|
|
14
|
+
"aarch64-pc-windows-msvc"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/remorses/gpuix"
|
|
20
|
+
},
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"registry": "https://registry.npmjs.org/",
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"artifacts": "napi artifacts",
|
|
27
|
+
"build": "napi build --platform --release --features test-support",
|
|
28
|
+
"build:release": "napi build --platform --release",
|
|
29
|
+
"build:debug": "napi build --platform --features test-support",
|
|
30
|
+
"prepublishOnly": "napi pre-publish -t npm",
|
|
31
|
+
"universal": "napi universal",
|
|
32
|
+
"version": "napi version"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@napi-rs/cli": "^3.1.3"
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"index.js",
|
|
39
|
+
"index.d.ts",
|
|
40
|
+
"*.node"
|
|
41
|
+
],
|
|
42
|
+
"optionalDependencies": {
|
|
43
|
+
"@gpuix/native-darwin-arm64": "0.1.0",
|
|
44
|
+
"@gpuix/native-darwin-x64": "0.1.0",
|
|
45
|
+
"@gpuix/native-linux-x64-gnu": "0.1.0",
|
|
46
|
+
"@gpuix/native-linux-arm64-gnu": "0.1.0",
|
|
47
|
+
"@gpuix/native-win32-x64-msvc": "0.1.0",
|
|
48
|
+
"@gpuix/native-win32-arm64-msvc": "0.1.0"
|
|
49
|
+
}
|
|
50
|
+
}
|