UNPKG

9.08 kBJavaScriptView Raw
1// prettier-ignore
2/* eslint-disable */
3/* auto-generated by NAPI-RS */
4
5const { readFileSync } = require('fs')
6
7let nativeBinding = null
8const loadErrors = []
9
10const 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
24const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
25
26const isMuslFromFilesystem = () => {
27 try {
28 return readFileSync('/usr/bin/ldd', 'utf-8').includes('musl')
29 } catch {
30 return null
31 }
32}
33
34const isMuslFromReport = () => {
35 const report = typeof process.report.getReport === 'function' ? process.report.getReport() : null
36 if (!report) {
37 return null
38 }
39 if (report.header && report.header.glibcVersionRuntime) {
40 return false
41 }
42 if (Array.isArray(report.sharedObjects)) {
43 if (report.sharedObjects.some(isFileMusl)) {
44 return true
45 }
46 }
47 return false
48}
49
50const isMuslFromChildProcess = () => {
51 try {
52 return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
53 } catch (e) {
54 // If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
55 return false
56 }
57}
58
59function requireNative() {
60 if (process.platform === 'android') {
61 if (process.arch === 'arm64') {
62 try {
63 return require('./tar.android-arm64.node')
64 } catch (e) {
65 loadErrors.push(e)
66 }
67 try {
68 return require('@napi-rs/tar-android-arm64')
69 } catch (e) {
70 loadErrors.push(e)
71 }
72
73 } else if (process.arch === 'arm') {
74 try {
75 return require('./tar.android-arm-eabi.node')
76 } catch (e) {
77 loadErrors.push(e)
78 }
79 try {
80 return require('@napi-rs/tar-android-arm-eabi')
81 } catch (e) {
82 loadErrors.push(e)
83 }
84
85 } else {
86 loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
87 }
88 } else if (process.platform === 'win32') {
89 if (process.arch === 'x64') {
90 try {
91 return require('./tar.win32-x64-msvc.node')
92 } catch (e) {
93 loadErrors.push(e)
94 }
95 try {
96 return require('@napi-rs/tar-win32-x64-msvc')
97 } catch (e) {
98 loadErrors.push(e)
99 }
100
101 } else if (process.arch === 'ia32') {
102 try {
103 return require('./tar.win32-ia32-msvc.node')
104 } catch (e) {
105 loadErrors.push(e)
106 }
107 try {
108 return require('@napi-rs/tar-win32-ia32-msvc')
109 } catch (e) {
110 loadErrors.push(e)
111 }
112
113 } else if (process.arch === 'arm64') {
114 try {
115 return require('./tar.win32-arm64-msvc.node')
116 } catch (e) {
117 loadErrors.push(e)
118 }
119 try {
120 return require('@napi-rs/tar-win32-arm64-msvc')
121 } catch (e) {
122 loadErrors.push(e)
123 }
124
125 } else {
126 loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
127 }
128 } else if (process.platform === 'darwin') {
129 try {
130 return require('./tar.darwin-universal.node')
131 } catch (e) {
132 loadErrors.push(e)
133 }
134 try {
135 return require('@napi-rs/tar-darwin-universal')
136 } catch (e) {
137 loadErrors.push(e)
138 }
139
140 if (process.arch === 'x64') {
141 try {
142 return require('./tar.darwin-x64.node')
143 } catch (e) {
144 loadErrors.push(e)
145 }
146 try {
147 return require('@napi-rs/tar-darwin-x64')
148 } catch (e) {
149 loadErrors.push(e)
150 }
151
152 } else if (process.arch === 'arm64') {
153 try {
154 return require('./tar.darwin-arm64.node')
155 } catch (e) {
156 loadErrors.push(e)
157 }
158 try {
159 return require('@napi-rs/tar-darwin-arm64')
160 } catch (e) {
161 loadErrors.push(e)
162 }
163
164 } else {
165 loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
166 }
167 } else if (process.platform === 'freebsd') {
168 if (process.arch === 'x64') {
169 try {
170 return require('./tar.freebsd-x64.node')
171 } catch (e) {
172 loadErrors.push(e)
173 }
174 try {
175 return require('@napi-rs/tar-freebsd-x64')
176 } catch (e) {
177 loadErrors.push(e)
178 }
179
180 } else if (process.arch === 'arm64') {
181 try {
182 return require('./tar.freebsd-arm64.node')
183 } catch (e) {
184 loadErrors.push(e)
185 }
186 try {
187 return require('@napi-rs/tar-freebsd-arm64')
188 } catch (e) {
189 loadErrors.push(e)
190 }
191
192 } else {
193 loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
194 }
195 } else if (process.platform === 'linux') {
196 if (process.arch === 'x64') {
197 if (isMusl()) {
198 try {
199 return require('./tar.linux-x64-musl.node')
200 } catch (e) {
201 loadErrors.push(e)
202 }
203 try {
204 return require('@napi-rs/tar-linux-x64-musl')
205 } catch (e) {
206 loadErrors.push(e)
207 }
208
209 } else {
210 try {
211 return require('./tar.linux-x64-gnu.node')
212 } catch (e) {
213 loadErrors.push(e)
214 }
215 try {
216 return require('@napi-rs/tar-linux-x64-gnu')
217 } catch (e) {
218 loadErrors.push(e)
219 }
220
221 }
222 } else if (process.arch === 'arm64') {
223 if (isMusl()) {
224 try {
225 return require('./tar.linux-arm64-musl.node')
226 } catch (e) {
227 loadErrors.push(e)
228 }
229 try {
230 return require('@napi-rs/tar-linux-arm64-musl')
231 } catch (e) {
232 loadErrors.push(e)
233 }
234
235 } else {
236 try {
237 return require('./tar.linux-arm64-gnu.node')
238 } catch (e) {
239 loadErrors.push(e)
240 }
241 try {
242 return require('@napi-rs/tar-linux-arm64-gnu')
243 } catch (e) {
244 loadErrors.push(e)
245 }
246
247 }
248 } else if (process.arch === 'arm') {
249 if (isMusl()) {
250 try {
251 return require('./tar.linux-arm-musleabihf.node')
252 } catch (e) {
253 loadErrors.push(e)
254 }
255 try {
256 return require('@napi-rs/tar-linux-arm-musleabihf')
257 } catch (e) {
258 loadErrors.push(e)
259 }
260
261 } else {
262 try {
263 return require('./tar.linux-arm-gnueabihf.node')
264 } catch (e) {
265 loadErrors.push(e)
266 }
267 try {
268 return require('@napi-rs/tar-linux-arm-gnueabihf')
269 } catch (e) {
270 loadErrors.push(e)
271 }
272
273 }
274 } else if (process.arch === 'riscv64') {
275 if (isMusl()) {
276 try {
277 return require('./tar.linux-riscv64-musl.node')
278 } catch (e) {
279 loadErrors.push(e)
280 }
281 try {
282 return require('@napi-rs/tar-linux-riscv64-musl')
283 } catch (e) {
284 loadErrors.push(e)
285 }
286
287 } else {
288 try {
289 return require('./tar.linux-riscv64-gnu.node')
290 } catch (e) {
291 loadErrors.push(e)
292 }
293 try {
294 return require('@napi-rs/tar-linux-riscv64-gnu')
295 } catch (e) {
296 loadErrors.push(e)
297 }
298
299 }
300 } else if (process.arch === 'ppc64') {
301 try {
302 return require('./tar.linux-ppc64-gnu.node')
303 } catch (e) {
304 loadErrors.push(e)
305 }
306 try {
307 return require('@napi-rs/tar-linux-ppc64-gnu')
308 } catch (e) {
309 loadErrors.push(e)
310 }
311
312 } else if (process.arch === 's390x') {
313 try {
314 return require('./tar.linux-s390x-gnu.node')
315 } catch (e) {
316 loadErrors.push(e)
317 }
318 try {
319 return require('@napi-rs/tar-linux-s390x-gnu')
320 } catch (e) {
321 loadErrors.push(e)
322 }
323
324 } else {
325 loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
326 }
327 } else {
328 loadErrors.push(new Error(`Unsupported OS: ${process.platform}, architecture: ${process.arch}`))
329 }
330}
331
332nativeBinding = requireNative()
333
334if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
335 try {
336 nativeBinding = require('./tar.wasi.cjs')
337 } catch (err) {
338 if (process.env.NAPI_RS_FORCE_WASI) {
339 console.error(err)
340 }
341 }
342 if (!nativeBinding) {
343 try {
344 nativeBinding = require('@napi-rs/tar-wasm32-wasi')
345 } catch (err) {
346 if (process.env.NAPI_RS_FORCE_WASI) {
347 console.error(err)
348 }
349 }
350 }
351}
352
353if (!nativeBinding) {
354 if (loadErrors.length > 0) {
355 // TODO Link to documentation with potential fixes
356 // - The package owner could build/publish bindings for this arch
357 // - The user may need to bundle the correct files
358 // - The user may need to re-install node_modules to get new packages
359 throw new Error('Failed to load native binding', { cause: loadErrors })
360 }
361 throw new Error(`Failed to load native binding`)
362}
363
364module.exports.Archive = nativeBinding.Archive
365module.exports.Entries = nativeBinding.Entries
366module.exports.Entry = nativeBinding.Entry
367module.exports.Header = nativeBinding.Header
368module.exports.ReadonlyHeader = nativeBinding.ReadonlyHeader
369module.exports.EntryType = nativeBinding.EntryType