Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

// ...
```
Expand Down
2 changes: 1 addition & 1 deletion index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ declare function pleaseUpgradeNode(
opts?: Partial<Options>
): void;

export = pleaseUpgradeNode;
export default pleaseUpgradeNode;
44 changes: 22 additions & 22 deletions index.js
Original file line number Diff line number Diff line change
@@ -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;
}
8 changes: 0 additions & 8 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 1 addition & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"verify",
"upgrade"
],
"type": "module",
"author": "typicode",
"license": "MIT",
"bugs": {
Expand All @@ -26,8 +27,5 @@
"homepage": "https://github.com/typicode/please-upgrade-node#readme",
"devDependencies": {
"tape": "^5.6.3"
},
"dependencies": {
"semver-compare": "^1.0.0"
}
}
35 changes: 18 additions & 17 deletions test.js
Original file line number Diff line number Diff line change
@@ -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)
}
Expand All @@ -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: {
Expand All @@ -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: {
Expand All @@ -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: {
Expand All @@ -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: {
Expand All @@ -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: {
Expand All @@ -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: {
Expand All @@ -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',
Expand All @@ -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',
Expand All @@ -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',
Expand All @@ -156,7 +157,7 @@ test('should display custom message', function(t) {
}
},
{
message: function(requiredVersion) {
message: (requiredVersion) => {
return 'Required version is ' + requiredVersion
}
}
Expand Down