virtual-machine 0.1.15 → 0.2.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/native/index.d.ts CHANGED
@@ -59,4 +59,3 @@ export declare class WebTransportClient {
59
59
  /** Shut down the connection and cleanup. */
60
60
  shutdown(): void
61
61
  }
62
-
package/native/index.js CHANGED
@@ -2,21 +2,7 @@
2
2
  /* eslint-disable */
3
3
  /* prettier-ignore */
4
4
 
5
- /**
6
- * Native bindings loader for riscv-vm
7
- *
8
- * This module detects the current platform and loads the appropriate
9
- * pre-built native binary. All binaries are bundled in this package.
10
- *
11
- * Supported platforms:
12
- * - darwin-x64 (macOS Intel)
13
- * - darwin-arm64 (macOS Apple Silicon)
14
- * - linux-x64-gnu (Linux x64 glibc)
15
- * - linux-x64-musl (Linux x64 musl/Alpine)
16
- * - linux-arm64-gnu (Linux ARM64 glibc)
17
- * - linux-arm64-musl (Linux ARM64 musl/Alpine)
18
- * - win32-x64-msvc (Windows x64)
19
- */
5
+ /* auto-generated by NAPI-RS */
20
6
 
21
7
  const { existsSync, readFileSync } = require('fs')
22
8
  const { join } = require('path')
@@ -24,12 +10,11 @@ const { join } = require('path')
24
10
  const { platform, arch } = process
25
11
 
26
12
  let nativeBinding = null
13
+ let localFileExisted = false
27
14
  let loadError = null
28
15
 
29
- /**
30
- * Detect if running on musl libc (Alpine Linux, etc.)
31
- */
32
16
  function isMusl() {
17
+ // For Node 10
33
18
  if (!process.report || typeof process.report.getReport !== 'function') {
34
19
  try {
35
20
  const lddPath = require('child_process').execSync('which ldd').toString().trim()
@@ -43,82 +28,288 @@ function isMusl() {
43
28
  }
44
29
  }
45
30
 
46
- /**
47
- * Load a native binding from the native directory
48
- */
49
- function loadNativeBinding(filename) {
50
- const filepath = join(__dirname, filename)
51
- if (!existsSync(filepath)) {
52
- throw new Error(
53
- `Native binding not found: ${filename}\n` +
54
- `Expected at: ${filepath}\n` +
55
- `Platform: ${platform}, Architecture: ${arch}\n\n` +
56
- `This platform may not be supported, or the package was not installed correctly.\n` +
57
- `Try reinstalling the package: npm install virtual-machine`
58
- )
59
- }
60
- return require(filepath)
61
- }
62
-
63
- /**
64
- * Determine the correct native binding filename for the current platform
65
- */
66
- function getNativeBindingFilename() {
67
- switch (platform) {
68
- case 'darwin':
69
- switch (arch) {
70
- case 'x64':
71
- return 'riscv-vm-native.darwin-x64.node'
72
- case 'arm64':
73
- return 'riscv-vm-native.darwin-arm64.node'
74
- default:
75
- throw new Error(`Unsupported architecture on macOS: ${arch}`)
76
- }
77
-
78
- case 'linux':
79
- const musl = isMusl()
80
- switch (arch) {
81
- case 'x64':
82
- return musl
83
- ? 'riscv-vm-native.linux-x64-musl.node'
84
- : 'riscv-vm-native.linux-x64-gnu.node'
85
- case 'arm64':
86
- return musl
87
- ? 'riscv-vm-native.linux-arm64-musl.node'
88
- : 'riscv-vm-native.linux-arm64-gnu.node'
89
- default:
90
- throw new Error(`Unsupported architecture on Linux: ${arch}`)
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'riscv-vm-native.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./riscv-vm-native.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('virtual-machine-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'riscv-vm-native.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./riscv-vm-native.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('virtual-machine-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'riscv-vm-native.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./riscv-vm-native.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('virtual-machine-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'riscv-vm-native.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./riscv-vm-native.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('virtual-machine-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'riscv-vm-native.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./riscv-vm-native.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('virtual-machine-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'riscv-vm-native.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./riscv-vm-native.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('virtual-machine-darwin-universal')
91
117
  }
92
-
93
- case 'win32':
94
- switch (arch) {
95
- case 'x64':
96
- return 'riscv-vm-native.win32-x64-msvc.node'
97
- default:
98
- throw new Error(`Unsupported architecture on Windows: ${arch}`)
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'riscv-vm-native.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./riscv-vm-native.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('virtual-machine-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'riscv-vm-native.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./riscv-vm-native.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('virtual-machine-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'riscv-vm-native.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./riscv-vm-native.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('virtual-machine-freebsd-x64')
99
161
  }
100
-
101
- default:
102
- throw new Error(`Unsupported platform: ${platform}`)
103
- }
104
- }
105
-
106
- // Load the native binding
107
- try {
108
- const filename = getNativeBindingFilename()
109
- nativeBinding = loadNativeBinding(filename)
110
- } catch (e) {
111
- loadError = e
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'riscv-vm-native.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./riscv-vm-native.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('virtual-machine-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'riscv-vm-native.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./riscv-vm-native.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('virtual-machine-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'riscv-vm-native.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./riscv-vm-native.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('virtual-machine-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'riscv-vm-native.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./riscv-vm-native.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('virtual-machine-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'riscv-vm-native.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./riscv-vm-native.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('virtual-machine-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'riscv-vm-native.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./riscv-vm-native.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('virtual-machine-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'riscv-vm-native.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./riscv-vm-native.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('virtual-machine-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'riscv-vm-native.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./riscv-vm-native.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('virtual-machine-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'riscv-vm-native.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./riscv-vm-native.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('virtual-machine-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
112
304
  }
113
305
 
114
306
  if (!nativeBinding) {
115
307
  if (loadError) {
116
308
  throw loadError
117
309
  }
118
- throw new Error('Failed to load native binding')
310
+ throw new Error(`Failed to load native binding`)
119
311
  }
120
312
 
121
- // Export the native binding APIs
122
313
  const { ConnectionStatus, WebTransportClient } = nativeBinding
123
314
 
124
315
  module.exports.ConnectionStatus = ConnectionStatus
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virtual-machine",
3
- "version": "0.1.15",
3
+ "version": "0.2.0",
4
4
  "description": "RISCV Virtual Machine with WASM and Node.js native support",
5
5
  "bin": "build/cli.js",
6
6
  "publishConfig": {