Skip to content

Commit

Permalink
Add runtime check for outdated Node.js version
Browse files Browse the repository at this point in the history
  • Loading branch information
lovell committed Jan 10, 2024
1 parent b96389d commit 45e8071
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
11 changes: 11 additions & 0 deletions lib/libvips.js
Expand Up @@ -7,6 +7,7 @@ const { spawnSync } = require('node:child_process');
const { createHash } = require('node:crypto');
const semverCoerce = require('semver/functions/coerce');
const semverGreaterThanOrEqualTo = require('semver/functions/gte');
const semverSatisfies = require('semver/functions/satisfies');
const detectLibc = require('detect-libc');

const { engines, optionalDependencies } = require('../package.json');
Expand Down Expand Up @@ -83,6 +84,15 @@ const buildSharpLibvipsLibDir = () => {
return '';
};

const isUnsupportedNodeRuntime = () => {
/* istanbul ignore next */
if (process.release?.name === 'node' && process.versions) {
if (!semverSatisfies(process.versions.node, engines.node)) {
return { found: process.versions.node, expected: engines.node };
}
}
};

/* istanbul ignore next */
const isEmscripten = () => {
const { CC } = process.env;
Expand Down Expand Up @@ -174,6 +184,7 @@ module.exports = {
buildSharpLibvipsIncludeDir,
buildSharpLibvipsCPlusPlusDir,
buildSharpLibvipsLibDir,
isUnsupportedNodeRuntime,
runtimePlatformArch,
log,
yarnLocator,
Expand Down
11 changes: 9 additions & 2 deletions lib/sharp.js
Expand Up @@ -7,7 +7,7 @@

const { familySync, versionSync } = require('detect-libc');

const { runtimePlatformArch, prebuiltPlatforms, minimumLibvipsVersion } = require('./libvips');
const { runtimePlatformArch, isUnsupportedNodeRuntime, prebuiltPlatforms, minimumLibvipsVersion } = require('./libvips');
const runtimePlatform = runtimePlatformArch();

const paths = [
Expand Down Expand Up @@ -44,7 +44,14 @@ if (sharp) {
const messages = errors.map(err => err.message).join(' ');
help.push('Possible solutions:');
// Common error messages
if (prebuiltPlatforms.includes(runtimePlatform)) {
if (isUnsupportedNodeRuntime()) {
const { found, expected } = isUnsupportedNodeRuntime();
help.push(
'- Please upgrade Node.js:',
` Found ${found}`,
` Requires ${expected}`
);
} else if (prebuiltPlatforms.includes(runtimePlatform)) {
const [os, cpu] = runtimePlatform.split('-');
const libc = os.endsWith('musl') ? ' --libc=musl' : '';
help.push(
Expand Down
3 changes: 3 additions & 0 deletions test/unit/libvips.js
Expand Up @@ -123,6 +123,9 @@ describe('libvips binaries', function () {
const [, arch] = libvips.runtimePlatformArch().split('-');
assert.strict(['arm', 'arm64', 'ia32', 'x64'].includes(arch));
});
it('isUnsupportedNodeRuntime', () => {
assert.strictEqual(libvips.isUnsupportedNodeRuntime(), undefined);
});
});

describe('logger', function () {
Expand Down

0 comments on commit 45e8071

Please sign in to comment.