From 00dddf418eaa92f141568608ec1289804b1e0d62 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Tue, 3 Aug 2021 11:46:03 +0900 Subject: [PATCH] Add check for engines --- .circleci/config.yml | 5 ++++- package.json | 3 ++- tools/valid-dependencies-engines.js | 28 ++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tools/valid-dependencies-engines.js diff --git a/.circleci/config.yml b/.circleci/config.yml index bd179b30b..08717f844 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -82,5 +82,8 @@ jobs: paths: - node_modules - run: - name: Test + name: Lint command: npm run lint + - run: + name: Check + command: npm run valid diff --git a/package.json b/package.json index c8c4ae1cf..a1b11f5f8 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "update": "node ./tools/update.js", "docs:watch": "vuepress dev docs", "predocs:build": "npm run update", - "docs:build": "vuepress build docs" + "docs:build": "vuepress build docs", + "valid": "node tools/valid-dependencies-engines" }, "files": [ "lib" diff --git a/tools/valid-dependencies-engines.js b/tools/valid-dependencies-engines.js new file mode 100644 index 000000000..2686a7b9b --- /dev/null +++ b/tools/valid-dependencies-engines.js @@ -0,0 +1,28 @@ +/** + * @author Yosuke Ota + * See LICENSE file in root directory for full license. + */ +'use strict' + +const cp = require('child_process') +const semver = require('semver') +const pkg = require('../package.json') +const nodeVer = pkg.engines.node +const deps = { ...pkg.dependencies, ...pkg.peerDependencies } + +for (const [name, ver] of Object.entries(deps)) { + // eslint-disable-next-line no-console + // console.log(`call npm view "${name}@${ver}" --json`) + const json = cp.execSync(`npm view "${name}@${ver}" --json`, { + maxBuffer: 1024 * 1024 * 100 + }) + const meta = JSON.parse(json) + const v = meta.engines && meta.engines.node + if (v && !semver.subset(nodeVer, v)) { + // eslint-disable-next-line no-console + console.error( + `"${name}@${ver}" is not compatible with "node@${nodeVer}".\nAllowed is:${v}` + ) + process.exit(1) + } +}