Skip to content

Commit e7cdac1

Browse files
authored
chore: upgrade to NAPI-RS 3.0 stable (#126)
1 parent 5c49414 commit e7cdac1

File tree

6 files changed

+486
-506
lines changed

6 files changed

+486
-506
lines changed

Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ version = "0.1.0"
1010
crate-type = ["cdylib"]
1111

1212
[dependencies]
13-
napi = "3.0.0-alpha"
14-
napi-derive = "3.0.0-alpha"
13+
napi = "3.0.0"
14+
napi-derive = "3.0.0"
1515

1616
[build-dependencies]
1717
napi-build = "2"
1818

1919
[profile.release]
2020
lto = true
2121
codegen-units = 1
22+
strip = "symbols"

index.js

Lines changed: 123 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ const isMuslFromFilesystem = () => {
3535
}
3636

3737
const isMuslFromReport = () => {
38-
const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null
38+
let report = null
39+
if (typeof process.report?.getReport === 'function') {
40+
process.report.excludeNetwork = true
41+
report = process.report.getReport()
42+
}
3943
if (!report) {
4044
return null
4145
}
@@ -64,7 +68,7 @@ function requireNative() {
6468
try {
6569
nativeBinding = require(process.env.NAPI_RS_NATIVE_LIBRARY_PATH);
6670
} catch (err) {
67-
loadErrors.push(err);
71+
loadErrors.push(err)
6872
}
6973
} else if (process.platform === 'android') {
7074
if (process.arch === 'arm64') {
@@ -78,7 +82,6 @@ function requireNative() {
7882
} catch (e) {
7983
loadErrors.push(e)
8084
}
81-
8285
} else if (process.arch === 'arm') {
8386
try {
8487
return require('./package-template.android-arm-eabi.node')
@@ -90,7 +93,6 @@ function requireNative() {
9093
} catch (e) {
9194
loadErrors.push(e)
9295
}
93-
9496
} else {
9597
loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
9698
}
@@ -106,7 +108,6 @@ function requireNative() {
106108
} catch (e) {
107109
loadErrors.push(e)
108110
}
109-
110111
} else if (process.arch === 'ia32') {
111112
try {
112113
return require('./package-template.win32-ia32-msvc.node')
@@ -118,7 +119,6 @@ function requireNative() {
118119
} catch (e) {
119120
loadErrors.push(e)
120121
}
121-
122122
} else if (process.arch === 'arm64') {
123123
try {
124124
return require('./package-template.win32-arm64-msvc.node')
@@ -130,22 +130,20 @@ function requireNative() {
130130
} catch (e) {
131131
loadErrors.push(e)
132132
}
133-
134133
} else {
135134
loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
136135
}
137136
} else if (process.platform === 'darwin') {
138137
try {
139-
return require('./package-template.darwin-universal.node')
140-
} catch (e) {
141-
loadErrors.push(e)
142-
}
143-
try {
144-
return require('@napi-rs/package-template-pnpm-darwin-universal')
145-
} catch (e) {
146-
loadErrors.push(e)
147-
}
148-
138+
return require('./package-template.darwin-universal.node')
139+
} catch (e) {
140+
loadErrors.push(e)
141+
}
142+
try {
143+
return require('@napi-rs/package-template-pnpm-darwin-universal')
144+
} catch (e) {
145+
loadErrors.push(e)
146+
}
149147
if (process.arch === 'x64') {
150148
try {
151149
return require('./package-template.darwin-x64.node')
@@ -157,7 +155,6 @@ function requireNative() {
157155
} catch (e) {
158156
loadErrors.push(e)
159157
}
160-
161158
} else if (process.arch === 'arm64') {
162159
try {
163160
return require('./package-template.darwin-arm64.node')
@@ -169,7 +166,6 @@ function requireNative() {
169166
} catch (e) {
170167
loadErrors.push(e)
171168
}
172-
173169
} else {
174170
loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
175171
}
@@ -185,7 +181,6 @@ function requireNative() {
185181
} catch (e) {
186182
loadErrors.push(e)
187183
}
188-
189184
} else if (process.arch === 'arm64') {
190185
try {
191186
return require('./package-template.freebsd-arm64.node')
@@ -197,141 +192,167 @@ function requireNative() {
197192
} catch (e) {
198193
loadErrors.push(e)
199194
}
200-
201195
} else {
202196
loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
203197
}
204198
} else if (process.platform === 'linux') {
205199
if (process.arch === 'x64') {
206200
if (isMusl()) {
207201
try {
208-
return require('./package-template.linux-x64-musl.node')
209-
} catch (e) {
210-
loadErrors.push(e)
211-
}
212-
try {
213-
return require('@napi-rs/package-template-pnpm-linux-x64-musl')
214-
} catch (e) {
215-
loadErrors.push(e)
216-
}
217-
202+
return require('./package-template.linux-x64-musl.node')
203+
} catch (e) {
204+
loadErrors.push(e)
205+
}
206+
try {
207+
return require('@napi-rs/package-template-pnpm-linux-x64-musl')
208+
} catch (e) {
209+
loadErrors.push(e)
210+
}
218211
} else {
219212
try {
220-
return require('./package-template.linux-x64-gnu.node')
221-
} catch (e) {
222-
loadErrors.push(e)
223-
}
224-
try {
225-
return require('@napi-rs/package-template-pnpm-linux-x64-gnu')
226-
} catch (e) {
227-
loadErrors.push(e)
228-
}
229-
213+
return require('./package-template.linux-x64-gnu.node')
214+
} catch (e) {
215+
loadErrors.push(e)
216+
}
217+
try {
218+
return require('@napi-rs/package-template-pnpm-linux-x64-gnu')
219+
} catch (e) {
220+
loadErrors.push(e)
221+
}
230222
}
231223
} else if (process.arch === 'arm64') {
232224
if (isMusl()) {
233225
try {
234-
return require('./package-template.linux-arm64-musl.node')
235-
} catch (e) {
236-
loadErrors.push(e)
237-
}
238-
try {
239-
return require('@napi-rs/package-template-pnpm-linux-arm64-musl')
240-
} catch (e) {
241-
loadErrors.push(e)
242-
}
243-
226+
return require('./package-template.linux-arm64-musl.node')
227+
} catch (e) {
228+
loadErrors.push(e)
229+
}
230+
try {
231+
return require('@napi-rs/package-template-pnpm-linux-arm64-musl')
232+
} catch (e) {
233+
loadErrors.push(e)
234+
}
244235
} else {
245236
try {
246-
return require('./package-template.linux-arm64-gnu.node')
247-
} catch (e) {
248-
loadErrors.push(e)
249-
}
250-
try {
251-
return require('@napi-rs/package-template-pnpm-linux-arm64-gnu')
252-
} catch (e) {
253-
loadErrors.push(e)
254-
}
255-
237+
return require('./package-template.linux-arm64-gnu.node')
238+
} catch (e) {
239+
loadErrors.push(e)
240+
}
241+
try {
242+
return require('@napi-rs/package-template-pnpm-linux-arm64-gnu')
243+
} catch (e) {
244+
loadErrors.push(e)
245+
}
256246
}
257247
} else if (process.arch === 'arm') {
258248
if (isMusl()) {
259249
try {
260-
return require('./package-template.linux-arm-musleabihf.node')
261-
} catch (e) {
262-
loadErrors.push(e)
263-
}
264-
try {
265-
return require('@napi-rs/package-template-pnpm-linux-arm-musleabihf')
266-
} catch (e) {
267-
loadErrors.push(e)
250+
return require('./package-template.linux-arm-musleabihf.node')
251+
} catch (e) {
252+
loadErrors.push(e)
253+
}
254+
try {
255+
return require('@napi-rs/package-template-pnpm-linux-arm-musleabihf')
256+
} catch (e) {
257+
loadErrors.push(e)
258+
}
259+
} else {
260+
try {
261+
return require('./package-template.linux-arm-gnueabihf.node')
262+
} catch (e) {
263+
loadErrors.push(e)
264+
}
265+
try {
266+
return require('@napi-rs/package-template-pnpm-linux-arm-gnueabihf')
267+
} catch (e) {
268+
loadErrors.push(e)
269+
}
268270
}
269-
271+
} else if (process.arch === 'riscv64') {
272+
if (isMusl()) {
273+
try {
274+
return require('./package-template.linux-riscv64-musl.node')
275+
} catch (e) {
276+
loadErrors.push(e)
277+
}
278+
try {
279+
return require('@napi-rs/package-template-pnpm-linux-riscv64-musl')
280+
} catch (e) {
281+
loadErrors.push(e)
282+
}
270283
} else {
271284
try {
272-
return require('./package-template.linux-arm-gnueabihf.node')
285+
return require('./package-template.linux-riscv64-gnu.node')
286+
} catch (e) {
287+
loadErrors.push(e)
288+
}
289+
try {
290+
return require('@napi-rs/package-template-pnpm-linux-riscv64-gnu')
291+
} catch (e) {
292+
loadErrors.push(e)
293+
}
294+
}
295+
} else if (process.arch === 'ppc64') {
296+
try {
297+
return require('./package-template.linux-ppc64-gnu.node')
273298
} catch (e) {
274299
loadErrors.push(e)
275300
}
276301
try {
277-
return require('@napi-rs/package-template-pnpm-linux-arm-gnueabihf')
302+
return require('@napi-rs/package-template-pnpm-linux-ppc64-gnu')
278303
} catch (e) {
279304
loadErrors.push(e)
280305
}
281-
282-
}
283-
} else if (process.arch === 'riscv64') {
284-
if (isMusl()) {
285-
try {
286-
return require('./package-template.linux-riscv64-musl.node')
306+
} else if (process.arch === 's390x') {
307+
try {
308+
return require('./package-template.linux-s390x-gnu.node')
287309
} catch (e) {
288310
loadErrors.push(e)
289311
}
290312
try {
291-
return require('@napi-rs/package-template-pnpm-linux-riscv64-musl')
313+
return require('@napi-rs/package-template-pnpm-linux-s390x-gnu')
292314
} catch (e) {
293315
loadErrors.push(e)
294316
}
295-
296-
} else {
297-
try {
298-
return require('./package-template.linux-riscv64-gnu.node')
317+
} else {
318+
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
319+
}
320+
} else if (process.platform === 'openharmony') {
321+
if (process.arch === 'arm64') {
322+
try {
323+
return require('./package-template.linux-arm64-ohos.node')
299324
} catch (e) {
300325
loadErrors.push(e)
301326
}
302327
try {
303-
return require('@napi-rs/package-template-pnpm-linux-riscv64-gnu')
328+
return require('@napi-rs/package-template-pnpm-linux-arm64-ohos')
304329
} catch (e) {
305330
loadErrors.push(e)
306331
}
307-
308-
}
309-
} else if (process.arch === 'ppc64') {
332+
} else if (process.arch === 'x64') {
310333
try {
311-
return require('./package-template.linux-ppc64-gnu.node')
334+
return require('./package-template.linux-x64-ohos.node')
312335
} catch (e) {
313336
loadErrors.push(e)
314337
}
315338
try {
316-
return require('@napi-rs/package-template-pnpm-linux-ppc64-gnu')
339+
return require('@napi-rs/package-template-pnpm-linux-x64-ohos')
317340
} catch (e) {
318341
loadErrors.push(e)
319342
}
320-
321-
} else if (process.arch === 's390x') {
343+
} else if (process.arch === 'arm') {
322344
try {
323-
return require('./package-template.linux-s390x-gnu.node')
345+
return require('./package-template.linux-arm-ohos.node')
324346
} catch (e) {
325347
loadErrors.push(e)
326348
}
327349
try {
328-
return require('@napi-rs/package-template-pnpm-linux-s390x-gnu')
350+
return require('@napi-rs/package-template-pnpm-linux-arm-ohos')
329351
} catch (e) {
330352
loadErrors.push(e)
331353
}
332-
333354
} else {
334-
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
355+
loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
335356
}
336357
} else {
337358
loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
@@ -361,13 +382,15 @@ if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
361382

362383
if (!nativeBinding) {
363384
if (loadErrors.length > 0) {
364-
// TODO Link to documentation with potential fixes
365-
// - The package owner could build/publish bindings for this arch
366-
// - The user may need to bundle the correct files
367-
// - The user may need to re-install node_modules to get new packages
368-
throw new Error('Failed to load native binding', { cause: loadErrors })
385+
throw new Error(
386+
`Cannot find native binding. ` +
387+
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
388+
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
389+
{ cause: loadErrors }
390+
)
369391
}
370392
throw new Error(`Failed to load native binding`)
371393
}
372394

395+
module.exports = nativeBinding
373396
module.exports.plus100 = nativeBinding.plus100

0 commit comments

Comments
 (0)