fix: Resolve TypeScript errors
Signed-off-by: Hermes Agent <hermes@nosuchhost>
This commit is contained in:
154
client/node_modules/node-gyp-build/index.js
generated
vendored
Normal file
154
client/node_modules/node-gyp-build/index.js
generated
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
var os = require('os')
|
||||
|
||||
// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'
|
||||
var runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line
|
||||
|
||||
var prebuildsOnly = !!process.env.PREBUILDS_ONLY
|
||||
var abi = process.versions.modules // TODO: support old node where this is undef
|
||||
var runtime = isElectron() ? 'electron' : 'node'
|
||||
var arch = os.arch()
|
||||
var platform = os.platform()
|
||||
var libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc')
|
||||
var armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : process.config.variables.arm_version) || ''
|
||||
var uv = (process.versions.uv || '').split('.')[0]
|
||||
|
||||
module.exports = load
|
||||
|
||||
function load (dir) {
|
||||
return runtimeRequire(load.path(dir))
|
||||
}
|
||||
|
||||
load.path = function (dir) {
|
||||
dir = path.resolve(dir || '.')
|
||||
|
||||
try {
|
||||
var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_')
|
||||
if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD']
|
||||
} catch (err) {}
|
||||
|
||||
if (!prebuildsOnly) {
|
||||
var release = getFirst(path.join(dir, 'build/Release'), matchBuild)
|
||||
if (release) return release
|
||||
|
||||
var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)
|
||||
if (debug) return debug
|
||||
}
|
||||
|
||||
// Find most specific flavor first
|
||||
var prebuilds = path.join(dir, 'prebuilds', platform + '-' + arch)
|
||||
var parsed = readdirSync(prebuilds).map(parseTags)
|
||||
var candidates = parsed.filter(matchTags(runtime, abi))
|
||||
var winner = candidates.sort(compareTags(runtime))[0]
|
||||
if (winner) return path.join(prebuilds, winner.file)
|
||||
|
||||
var target = [
|
||||
'platform=' + platform,
|
||||
'arch=' + arch,
|
||||
'runtime=' + runtime,
|
||||
'abi=' + abi,
|
||||
'uv=' + uv,
|
||||
armv ? 'armv=' + armv : '',
|
||||
'libc=' + libc
|
||||
].filter(Boolean).join(' ')
|
||||
|
||||
throw new Error('No native build was found for ' + target)
|
||||
}
|
||||
|
||||
function readdirSync (dir) {
|
||||
try {
|
||||
return fs.readdirSync(dir)
|
||||
} catch (err) {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
function getFirst (dir, filter) {
|
||||
var files = readdirSync(dir).filter(filter)
|
||||
return files[0] && path.join(dir, files[0])
|
||||
}
|
||||
|
||||
function matchBuild (name) {
|
||||
return /\.node$/.test(name)
|
||||
}
|
||||
|
||||
function parseTags (file) {
|
||||
var arr = file.split('.')
|
||||
var extension = arr.pop()
|
||||
var tags = { file: file, specificity: 0 }
|
||||
|
||||
if (extension !== 'node') return
|
||||
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
var tag = arr[i]
|
||||
|
||||
if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {
|
||||
tags.runtime = tag
|
||||
} else if (tag === 'napi') {
|
||||
tags.napi = true
|
||||
} else if (tag.slice(0, 3) === 'abi') {
|
||||
tags.abi = tag.slice(3)
|
||||
} else if (tag.slice(0, 2) === 'uv') {
|
||||
tags.uv = tag.slice(2)
|
||||
} else if (tag.slice(0, 4) === 'armv') {
|
||||
tags.armv = tag.slice(4)
|
||||
} else if (tag === 'glibc' || tag === 'musl') {
|
||||
tags.libc = tag
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
|
||||
tags.specificity++
|
||||
}
|
||||
|
||||
return tags
|
||||
}
|
||||
|
||||
function matchTags (runtime, abi) {
|
||||
return function (tags) {
|
||||
if (tags == null) return false
|
||||
if (tags.runtime !== runtime && !runtimeAgnostic(tags)) return false
|
||||
if (tags.abi !== abi && !tags.napi) return false
|
||||
if (tags.uv && tags.uv !== uv) return false
|
||||
if (tags.armv && tags.armv !== armv) return false
|
||||
if (tags.libc && tags.libc !== libc) return false
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
function runtimeAgnostic (tags) {
|
||||
return tags.runtime === 'node' && tags.napi
|
||||
}
|
||||
|
||||
function compareTags (runtime) {
|
||||
// Precedence: non-agnostic runtime, abi over napi, then by specificity.
|
||||
return function (a, b) {
|
||||
if (a.runtime !== b.runtime) {
|
||||
return a.runtime === runtime ? -1 : 1
|
||||
} else if (a.abi !== b.abi) {
|
||||
return a.abi ? -1 : 1
|
||||
} else if (a.specificity !== b.specificity) {
|
||||
return a.specificity > b.specificity ? -1 : 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isElectron () {
|
||||
if (process.versions && process.versions.electron) return true
|
||||
if (process.env.ELECTRON_RUN_AS_NODE) return true
|
||||
return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'
|
||||
}
|
||||
|
||||
function isAlpine (platform) {
|
||||
return platform === 'linux' && fs.existsSync('/etc/alpine-release')
|
||||
}
|
||||
|
||||
// Exposed for unit tests
|
||||
// TODO: move to lib
|
||||
load.parseTags = parseTags
|
||||
load.matchTags = matchTags
|
||||
load.compareTags = compareTags
|
||||
Reference in New Issue
Block a user