From 57be47b88bf4aea751bdbae93f90064eab5d960a Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Thu, 31 Mar 2022 19:49:08 -0600 Subject: [PATCH 1/6] Add support for finding prebuilds in platform-specific packages --- index.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 9dfb471..2e09600 100644 --- a/index.js +++ b/index.js @@ -23,12 +23,11 @@ function load (dir) { load.path = function (dir) { dir = path.resolve(dir || '.') - + var packageName = runtimeRequire(path.join(dir, 'package.json')).name try { - var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_') - if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD'] + var varName = packageName.toUpperCase().replace(/-/g, '_') + '_PREBUILD' + if (process.env[varName]) dir = process.env[varName] } catch (err) {} - if (!prebuildsOnly) { var release = getFirst(path.join(dir, 'build/Release'), matchBuild) if (release) return release @@ -43,6 +42,15 @@ load.path = function (dir) { var nearby = resolve(path.dirname(process.execPath)) if (nearby) return nearby + var platformPackage = packageName + '-' + platform + '-' + arch + try { + var prebuildPackage = path.dirname(require('module').createRequire(path.join(dir, 'package.json')).resolve(platformPackage)) + return resolveFile(prebuildPackage) + } catch(error) { + console.error(error) + } + + var target = [ 'platform=' + platform, 'arch=' + arch, @@ -56,16 +64,17 @@ load.path = function (dir) { typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line ].filter(Boolean).join(' ') - throw new Error('No native build was found for ' + target + '\n loaded from: ' + dir + '\n') + throw new Error('No native build was found for ' + target + '\n loaded from: ' + dir + ' and package: ' + platformPackage + '\n') function resolve (dir) { // Find matching "prebuilds/-" directory var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple) var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0] if (!tuple) return - + return resolveFile(path.join(dir, 'prebuilds', tuple.name)) + } + function resolveFile (prebuilds) { // Find most specific flavor first - var prebuilds = path.join(dir, 'prebuilds', tuple.name) var parsed = readdirSync(prebuilds).map(parseTags) var candidates = parsed.filter(matchTags(runtime, abi)) var winner = candidates.sort(compareTags(runtime))[0] From c9952cb77e89d2cd8b6c2d4d056a06d41834b305 Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Fri, 1 Apr 2022 08:05:09 -0600 Subject: [PATCH 2/6] Move package load back to try/catch --- index.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 2e09600..ae6301a 100644 --- a/index.js +++ b/index.js @@ -23,8 +23,9 @@ function load (dir) { load.path = function (dir) { dir = path.resolve(dir || '.') - var packageName = runtimeRequire(path.join(dir, 'package.json')).name + var packageName try { + packageName = runtimeRequire(path.join(dir, 'package.json')).name var varName = packageName.toUpperCase().replace(/-/g, '_') + '_PREBUILD' if (process.env[varName]) dir = process.env[varName] } catch (err) {} @@ -46,10 +47,7 @@ load.path = function (dir) { try { var prebuildPackage = path.dirname(require('module').createRequire(path.join(dir, 'package.json')).resolve(platformPackage)) return resolveFile(prebuildPackage) - } catch(error) { - console.error(error) - } - + } catch(error) {} var target = [ 'platform=' + platform, From 5fe8551ac942a7f160fe2b78061caf1ec330c5f1 Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Sat, 7 May 2022 19:06:42 -0600 Subject: [PATCH 3/6] Add scoped package name if package is unscoped, prebuild/prebuildify#63 --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index ae6301a..7ea4936 100644 --- a/index.js +++ b/index.js @@ -43,7 +43,8 @@ load.path = function (dir) { var nearby = resolve(path.dirname(process.execPath)) if (nearby) return nearby - var platformPackage = packageName + '-' + platform + '-' + arch + // append platform, and prefix with scoped name matching package name if unscoped + var platformPackage = (packageName[0] === '@' ? '' : '@' + packageName + '/') + packageName + '-' + platform + '-' + arch try { var prebuildPackage = path.dirname(require('module').createRequire(path.join(dir, 'package.json')).resolve(platformPackage)) return resolveFile(prebuildPackage) From 024f18a5e060de2e1a263f6f08bd3b38de7cc79f Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Mon, 9 May 2022 15:23:49 -0600 Subject: [PATCH 4/6] Update index.js Fix catch spacing Co-authored-by: Vincent Weevers --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 7ea4936..754c883 100644 --- a/index.js +++ b/index.js @@ -48,7 +48,7 @@ load.path = function (dir) { try { var prebuildPackage = path.dirname(require('module').createRequire(path.join(dir, 'package.json')).resolve(platformPackage)) return resolveFile(prebuildPackage) - } catch(error) {} + } catch (error) {} var target = [ 'platform=' + platform, From 0aa5124695ef252de6f862734412449e2bfe4d1f Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Mon, 9 May 2022 15:49:09 -0600 Subject: [PATCH 5/6] Don't mention platform packages in error on loading binary --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 754c883..c154047 100644 --- a/index.js +++ b/index.js @@ -63,7 +63,7 @@ load.path = function (dir) { typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line ].filter(Boolean).join(' ') - throw new Error('No native build was found for ' + target + '\n loaded from: ' + dir + ' and package: ' + platformPackage + '\n') + throw new Error('No native build was found for ' + target + '\n loaded from: ' + dir + '\n') function resolve (dir) { // Find matching "prebuilds/-" directory From 2f896e420fd22ab53225fc3f2d3cfa24f657d618 Mon Sep 17 00:00:00 2001 From: Kris Zyp Date: Mon, 9 May 2022 16:27:21 -0600 Subject: [PATCH 6/6] Only check for platform packages if packageName is defined --- index.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index c154047..07496cf 100644 --- a/index.js +++ b/index.js @@ -43,12 +43,14 @@ load.path = function (dir) { var nearby = resolve(path.dirname(process.execPath)) if (nearby) return nearby - // append platform, and prefix with scoped name matching package name if unscoped - var platformPackage = (packageName[0] === '@' ? '' : '@' + packageName + '/') + packageName + '-' + platform + '-' + arch - try { - var prebuildPackage = path.dirname(require('module').createRequire(path.join(dir, 'package.json')).resolve(platformPackage)) - return resolveFile(prebuildPackage) - } catch (error) {} + if (packageName !== undefined) { + // append platform, and prefix with scoped name matching package name if unscoped + var platformPackage = (packageName[0] === '@' ? '' : '@' + packageName + '/') + packageName + '-' + platform + '-' + arch + try { + var prebuildPackage = path.dirname(require('module').createRequire(path.join(dir, 'package.json')).resolve(platformPackage)) + return resolveFile(prebuildPackage) + } catch (error) {} + } var target = [ 'platform=' + platform,