UNPKG

1.46 kBJavaScriptView Raw
1var fs = require('fs')
2var path = require('path')
3var os = require('os')
4
5var abi = process.versions.modules // TODO: support old node where this is undef
6var runtime = isElectron() ? 'electron' : 'node'
7var arch = os.arch()
8var platform = os.platform()
9
10module.exports = load
11
12function load (dir) {
13 return require(load.path(dir))
14}
15
16load.path = function (dir) {
17 dir = path.resolve(dir || '.')
18
19 var release = getFirst(path.join(dir, 'build/Release'), matchBuild)
20 if (release) return release
21
22 var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)
23 if (debug) return debug
24
25 var prebuild = getFirst(path.join(dir, 'prebuilds/' + platform + '-' + arch), matchPrebuild)
26 if (prebuild) return prebuild
27
28 throw new Error('No native build was found for runtime=' + runtime + ' abi=' + abi + ' platform=' + platform + ' arch=' + arch)
29}
30
31function getFirst (dir, filter) {
32 try {
33 var files = fs.readdirSync(dir).filter(filter)
34 return files[0] && path.join(dir, files[0])
35 } catch (err) {
36 return null
37 }
38}
39
40function matchPrebuild (name) {
41 var parts = name.split('-')
42 return parts[0] === runtime && parts[1] === abi + '.node'
43}
44
45function matchBuild (name) {
46 return /\.node$/.test(name)
47}
48
49function isElectron () {
50 if (process.versions && process.versions.electron) return true
51 if (process.env.ELECTRON_RUN_AS_NODE) return true
52 return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'
53}