From d3b80142321673e2c2ec32744ee25d71f6c744fa Mon Sep 17 00:00:00 2001 From: Harjun751 Date: Thu, 16 Apr 2026 17:01:26 +0800 Subject: [PATCH 1/3] Add preflight checks to CLI MarkBind requires some checks to improve UX. Let's * Add a new file preFlightChecks to contain all of these checks * Add a preAction hook to run the checks before invoking any command --- package-lock.json | 9 +++++++-- packages/cli/index.ts | 4 ++++ packages/cli/package.json | 2 ++ packages/cli/src/util/preFlightChecks.ts | 22 ++++++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 packages/cli/src/util/preFlightChecks.ts diff --git a/package-lock.json b/package-lock.json index b997167212..b0278890af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5334,6 +5334,8 @@ }, "node_modules/@types/semver": { "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", "dev": true, "license": "MIT" }, @@ -18618,8 +18620,9 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "dev": true, + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -22045,6 +22048,7 @@ "fs-extra": "^9.0.1", "live-server": "1.2.1", "lodash": "^4.17.15", + "semver": "^7.7.4", "url-parse": "^1.5.10", "winston": "^3.19.0", "winston-daily-rotate-file": "^5.0.0" @@ -22058,6 +22062,7 @@ "@babel/preset-typescript": "^7.28.5", "@types/jest": "^29.4.6", "@types/lodash": "^4.17.15", + "@types/semver": "^7.7.1", "@types/url-parse": "^1.4.8", "babel-jest": "^29.7.0", "diff": "^8.0.3", diff --git a/packages/cli/index.ts b/packages/cli/index.ts index 4a594a3325..9e9b7f70ee 100755 --- a/packages/cli/index.ts +++ b/packages/cli/index.ts @@ -8,6 +8,7 @@ import { build } from './src/cmd/build.js'; import { deploy } from './src/cmd/deploy.js'; import { init } from './src/cmd/init.js'; import { serve } from './src/cmd/serve.js'; +import { preFlightChecks } from './src/util/preFlightChecks.js'; import packageJson from './package.json' with { type: 'json' }; const CLI_VERSION = packageJson.version; @@ -23,6 +24,9 @@ function printHeader() { return ''; } +program + .hook('preAction', () => preFlightChecks()); + program .addHelpText('beforeAll', printHeader()) .showHelpAfterError('(run "markbind --help" to list commands)') diff --git a/packages/cli/package.json b/packages/cli/package.json index 398fdc1d89..6b2f73b993 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -45,6 +45,7 @@ "fs-extra": "^9.0.1", "live-server": "1.2.1", "lodash": "^4.17.15", + "semver": "^7.7.4", "url-parse": "^1.5.10", "winston": "^3.19.0", "winston-daily-rotate-file": "^5.0.0" @@ -53,6 +54,7 @@ "@babel/core": "^7.29.0", "@babel/preset-env": "^7.29.0", "@babel/preset-typescript": "^7.28.5", + "@types/semver": "^7.7.1", "@types/jest": "^29.4.6", "@types/lodash": "^4.17.15", "@types/url-parse": "^1.4.8", diff --git a/packages/cli/src/util/preFlightChecks.ts b/packages/cli/src/util/preFlightChecks.ts new file mode 100644 index 0000000000..c56b5f6176 --- /dev/null +++ b/packages/cli/src/util/preFlightChecks.ts @@ -0,0 +1,22 @@ +import * as semver from 'semver'; +import * as logger from './logger.js'; +import packageJson from '../../package.json' with { type: 'json' }; + +const CLI_VERSION = packageJson.version; + +function checkNode() { + const nodeVersion = process.version; + const version = nodeVersion.slice(1); + + if (semver.lt(version, '22.12.0')) { + logger.error( + `Markbind ${CLI_VERSION} requires Node >=22.12.0. ` + + 'Please update Node or use an older version of MarkBind!' + ); + process.exit(1); + } +} + +export function preFlightChecks() { + checkNode(); +} From 661cf618efd154aedeecae53ef954d5a0832bb21 Mon Sep 17 00:00:00 2001 From: Harjun751 Date: Thu, 16 Apr 2026 17:28:18 +0800 Subject: [PATCH 2/3] Add edge case check in preFlightChecks --- packages/cli/src/util/preFlightChecks.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/cli/src/util/preFlightChecks.ts b/packages/cli/src/util/preFlightChecks.ts index c56b5f6176..797287725e 100644 --- a/packages/cli/src/util/preFlightChecks.ts +++ b/packages/cli/src/util/preFlightChecks.ts @@ -3,15 +3,20 @@ import * as logger from './logger.js'; import packageJson from '../../package.json' with { type: 'json' }; const CLI_VERSION = packageJson.version; +const REQUIRED_NODE_VERSION = '22.12.0'; function checkNode() { const nodeVersion = process.version; - const version = nodeVersion.slice(1); + const version = semver.coerce(nodeVersion); - if (semver.lt(version, '22.12.0')) { + if (version === null) { + logger.warn('Unknown version of node detected.'); + return; + } + if (semver.lt(version, REQUIRED_NODE_VERSION)) { logger.error( - `Markbind ${CLI_VERSION} requires Node >=22.12.0. ` - + 'Please update Node or use an older version of MarkBind!' + `Markbind ${CLI_VERSION} requires node >=${REQUIRED_NODE_VERSION}. ` + + 'Please update node or use an older version of Markbind!', ); process.exit(1); } From 19d2be689e4c0551d5ce62fc0397e350e5ac0c84 Mon Sep 17 00:00:00 2001 From: Harjun751 Date: Thu, 16 Apr 2026 17:34:39 +0800 Subject: [PATCH 3/3] Add jsDoc comment on preFlightChecks --- packages/cli/src/util/preFlightChecks.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/cli/src/util/preFlightChecks.ts b/packages/cli/src/util/preFlightChecks.ts index 797287725e..5df97f4e69 100644 --- a/packages/cli/src/util/preFlightChecks.ts +++ b/packages/cli/src/util/preFlightChecks.ts @@ -22,6 +22,10 @@ function checkNode() { } } +/** + * Performs pre-usage checks to ensure the application will run as expected. + * This method may exit the process if checks fail. + */ export function preFlightChecks() { checkNode(); }