diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 100% rename from .eslintrc.js rename to .eslintrc.cjs diff --git a/README.md b/README.md index 42f7567..6fc4acc 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,9 @@ Add `please-upgrade-node` at the top of your CLI ```js #!/usr/bin/env node -const pkg = require('./package.json') -require('please-upgrade-node')(pkg) // <- Must run BEFORE requiring any other modules +import pkg from './package.json' with { type: 'json' } +import pleaseUpgrade from 'please-upgrade-node' +pleaseUpgrade(pkg) // <- Must run BEFORE requiring any other modules // ... ``` diff --git a/index.d.ts b/index.d.ts index b5d6b51..057957c 100644 --- a/index.d.ts +++ b/index.d.ts @@ -8,4 +8,4 @@ declare function pleaseUpgradeNode( opts?: Partial ): void; -export = pleaseUpgradeNode; +export default pleaseUpgradeNode; diff --git a/index.js b/index.js index 9023106..4a892c6 100644 --- a/index.js +++ b/index.js @@ -1,25 +1,25 @@ -var semverCompare = require('semver-compare') +import process from 'node:process' -module.exports = function pleaseUpgradeNode(pkg, opts) { - var opts = opts || {} - var requiredVersion = pkg.engines.node.replace('>=', '') - var currentVersion = process.version.replace('v', '') - if (semverCompare(currentVersion, requiredVersion) === -1) { - if (opts.message) { - console.error(opts.message(requiredVersion)) - } else { - console.error( - pkg.name + - ' requires at least version ' + - requiredVersion + - ' of Node, please upgrade' - ) - } - - if (opts.hasOwnProperty('exitCode')) { - process.exit(opts.exitCode) - } else { - process.exit(1) - } +export default function pleaseUpgradeNode(pkg = {}, opts = {}) { + const requiredVersion = pkg.engines.node.replace('>=', '') + const currentVersion = process.version.replace('v', '') + if (compare(currentVersion, requiredVersion) === -1) { + console.error(opts.message && typeof opts.message === 'function' ? opts.message(requiredVersion) : `${pkg.name} requires at least version ${requiredVersion} of Node, please upgrade`) + process.exit(opts.hasOwnProperty('exitCode') ? opts.exitCode : 1) } } + +// from semver-compare +function compare(a, b) { + const pa = a.split('.'); + const pb = b.split('.'); + for (let i = 0; i < 3; i++) { + const na = Number(pa[i]); + const nb = Number(pb[i]); + if (na > nb) return 1; + if (nb > na) return -1; + if (!isNaN(na) && isNaN(nb)) return 1; + if (isNaN(na) && !isNaN(nb)) return -1; + } + return 0; +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 763008c..4d8d590 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,6 @@ "name": "please-upgrade-node", "version": "3.2.0", "license": "MIT", - "dependencies": { - "semver-compare": "^1.0.0" - }, "devDependencies": { "tape": "^5.6.3" } @@ -893,11 +890,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", diff --git a/package.json b/package.json index cc00817..0081185 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "verify", "upgrade" ], + "type": "module", "author": "typicode", "license": "MIT", "bugs": { @@ -26,8 +27,5 @@ "homepage": "https://github.com/typicode/please-upgrade-node#readme", "devDependencies": { "tape": "^5.6.3" - }, - "dependencies": { - "semver-compare": "^1.0.0" } } diff --git a/test.js b/test.js index 8e718e2..f8e7a0b 100644 --- a/test.js +++ b/test.js @@ -1,18 +1,19 @@ -var tape = require('tape') -var pleaseUpgrade = require('./') +import process from 'node:process' +import tape from 'tape' +import pleaseUpgrade from './index.js' // Change process.version value Object.defineProperty(process, 'version', { value: 'v10.0.0' }) // Mock process.exit and console.error -var exitCode = null -process.exit = function(code) { +let exitCode = null +process.exit = (code) => { exitCode = code } -var errorMessage = null -consoleError = console.error -console.error = function(msg) { +let errorMessage = null +const consoleError = console.error +console.error = (msg) => { errorMessage = msg consoleError(msg) } @@ -26,7 +27,7 @@ function test(name, cb) { } // Actual tests -test('>=1.2.0 should not exit', function(t) { +test('>=1.2.0 should not exit', (t) => { pleaseUpgrade({ name: 'Lorem Ipsum', engines: { @@ -38,7 +39,7 @@ test('>=1.2.0 should not exit', function(t) { t.end() }) -test('>=4 should not exit', function(t) { +test('>=4 should not exit', (t) => { pleaseUpgrade({ name: 'Lorem Ipsum', engines: { @@ -50,7 +51,7 @@ test('>=4 should not exit', function(t) { t.end() }) -test('>=4.0.0 should not exit', function(t) { +test('>=4.0.0 should not exit', (t) => { pleaseUpgrade({ name: 'Lorem Ipsum', engines: { @@ -62,7 +63,7 @@ test('>=4.0.0 should not exit', function(t) { t.end() }) -test('>=10.0.1 (patch) should exit', function(t) { +test('>=10.0.1 (patch) should exit', (t) => { pleaseUpgrade({ name: 'Lorem Ipsum', engines: { @@ -77,7 +78,7 @@ test('>=10.0.1 (patch) should exit', function(t) { t.end() }) -test('>=12 should exit', function(t) { +test('>=12 should exit', (t) => { pleaseUpgrade({ name: 'Lorem Ipsum', engines: { @@ -92,7 +93,7 @@ test('>=12 should exit', function(t) { t.end() }) -test('>=12.0.0 should exit', function(t) { +test('>=12.0.0 should exit', (t) => { pleaseUpgrade({ name: 'Lorem Ipsum', engines: { @@ -107,7 +108,7 @@ test('>=12.0.0 should exit', function(t) { t.end() }) -test('should exit with custom code 0', function(t) { +test('should exit with custom code 0', (t) => { pleaseUpgrade( { name: 'Lorem Ipsum', @@ -127,7 +128,7 @@ test('should exit with custom code 0', function(t) { t.end() }) -test('should exit with custom code 2', function(t) { +test('should exit with custom code 2', (t) => { pleaseUpgrade( { name: 'Lorem Ipsum', @@ -147,7 +148,7 @@ test('should exit with custom code 2', function(t) { t.end() }) -test('should display custom message', function(t) { +test('should display custom message', (t) => { pleaseUpgrade( { name: 'Lorem Ipsum', @@ -156,7 +157,7 @@ test('should display custom message', function(t) { } }, { - message: function(requiredVersion) { + message: (requiredVersion) => { return 'Required version is ' + requiredVersion } }