@smarlhens/npm-check-engines 0.14.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/nce.js +8 -0
- package/package.json +43 -90
- package/LICENSE.md +0 -55
- package/README.md +0 -231
- package/dist/bin/nce.cjs +0 -2
- package/dist/bin/nce.js +0 -2
- package/dist/chunk-Bmb41Sf3.cjs +0 -1
- package/dist/lib/nce.cjs +0 -5
- package/dist/lib/nce.d.cts +0 -72
- package/dist/lib/nce.d.ts +0 -72
- package/dist/lib/nce.js +0 -5
- package/dist/lib/yargs.cjs +0 -1
- package/dist/lib/yargs.js +0 -1
package/bin/nce.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Thin shim: forwards argv to the Rust CLI compiled as a NAPI addon.
|
|
3
|
+
// Output (stdout/stderr) is written by Rust directly to the host process.
|
|
4
|
+
|
|
5
|
+
const { runCli } = require('..');
|
|
6
|
+
|
|
7
|
+
const code = runCli(['nce', ...process.argv.slice(2)]);
|
|
8
|
+
process.exit(code);
|
package/package.json
CHANGED
|
@@ -1,107 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smarlhens/npm-check-engines",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Node.
|
|
5
|
-
"keywords": [
|
|
6
|
-
"engines",
|
|
7
|
-
"node",
|
|
8
|
-
"npm",
|
|
9
|
-
"typescript"
|
|
10
|
-
],
|
|
11
|
-
"homepage": "https://github.com/smarlhens/npm-check-engines#readme",
|
|
12
|
-
"bugs": {
|
|
13
|
-
"url": "https://github.com/smarlhens/npm-check-engines/issues"
|
|
14
|
-
},
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Check and update Node.js engine constraints in package.json",
|
|
15
5
|
"license": "BlueOak-1.0.0",
|
|
16
|
-
"author":
|
|
17
|
-
"name": "Samuel MARLHENS",
|
|
18
|
-
"email": "samuel.marlhens@proton.me",
|
|
19
|
-
"url": "https://github.com/smarlhens"
|
|
20
|
-
},
|
|
6
|
+
"author": "Samuel MARLHENS <samuel.marlhens@proton.me>",
|
|
21
7
|
"repository": {
|
|
22
8
|
"type": "git",
|
|
23
|
-
"url": "git+https://github.com/smarlhens/
|
|
9
|
+
"url": "git+https://github.com/smarlhens/riri-node-tools.git"
|
|
24
10
|
},
|
|
25
11
|
"bin": {
|
|
26
|
-
"nce": "
|
|
27
|
-
"npm-check-engines": "
|
|
28
|
-
},
|
|
29
|
-
"directories": {
|
|
30
|
-
"lib": "lib"
|
|
12
|
+
"nce": "bin/nce.js",
|
|
13
|
+
"npm-check-engines": "bin/nce.js"
|
|
31
14
|
},
|
|
32
15
|
"files": [
|
|
33
|
-
"
|
|
34
|
-
"
|
|
16
|
+
"bin",
|
|
17
|
+
"index.d.ts",
|
|
18
|
+
"index.js"
|
|
35
19
|
],
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
".": {
|
|
42
|
-
"types": {
|
|
43
|
-
"require": "./dist/lib/nce.d.cts",
|
|
44
|
-
"import": "./dist/lib/nce.d.ts"
|
|
45
|
-
},
|
|
46
|
-
"require": "./dist/lib/nce.cjs",
|
|
47
|
-
"import": "./dist/lib/nce.js"
|
|
48
|
-
}
|
|
20
|
+
"main": "index.js",
|
|
21
|
+
"types": "index.d.ts",
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public",
|
|
24
|
+
"registry": "https://registry.npmjs.org/"
|
|
49
25
|
},
|
|
50
26
|
"scripts": {
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"lint-staged": "lint-staged",
|
|
57
|
-
"pre-commit": "npm run lint-staged",
|
|
58
|
-
"prepare": "husky",
|
|
59
|
-
"pretest": "npm run build",
|
|
60
|
-
"test": "vitest run",
|
|
61
|
-
"test:ci": "npm run test:coverage",
|
|
62
|
-
"test:coverage": "npm run test -- --coverage",
|
|
63
|
-
"test:snapshot": "npm run test -- -u",
|
|
64
|
-
"test:watch": "vitest watch",
|
|
65
|
-
"typecheck": "tsgo --noEmit"
|
|
66
|
-
},
|
|
67
|
-
"dependencies": {
|
|
68
|
-
"ajv": "8.18.0",
|
|
69
|
-
"cli-table": "0.3.11",
|
|
70
|
-
"empathic": "2.0.0",
|
|
71
|
-
"es-toolkit": "1.45.1",
|
|
72
|
-
"listr2": "9.0.5",
|
|
73
|
-
"obug": "2.1.1",
|
|
74
|
-
"picocolors": "1.1.1",
|
|
75
|
-
"semver": "7.7.4",
|
|
76
|
-
"sort-package-json": "3.6.1",
|
|
77
|
-
"update-notifier": "7.3.1",
|
|
78
|
-
"yargs": "18.0.0"
|
|
27
|
+
"artifacts": "napi artifacts",
|
|
28
|
+
"build": "napi build --platform --release",
|
|
29
|
+
"build:debug": "napi build --platform",
|
|
30
|
+
"prepublishOnly": "napi prepublish -t npm",
|
|
31
|
+
"version": "napi version"
|
|
79
32
|
},
|
|
80
33
|
"devDependencies": {
|
|
81
|
-
"@
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
"oxfmt": "0.43.0",
|
|
95
|
-
"publint": "0.3.18",
|
|
96
|
-
"tinyexec": "1.0.4",
|
|
97
|
-
"ts-node": "10.9.2",
|
|
98
|
-
"tsdown": "0.21.7",
|
|
99
|
-
"tslib": "2.8.1",
|
|
100
|
-
"typescript": "5.9.3",
|
|
101
|
-
"vitest": "4.1.2"
|
|
34
|
+
"@napi-rs/cli": "3.6.2"
|
|
35
|
+
},
|
|
36
|
+
"napi": {
|
|
37
|
+
"binaryName": "npm-check-engines",
|
|
38
|
+
"targets": [
|
|
39
|
+
"x86_64-unknown-linux-gnu",
|
|
40
|
+
"x86_64-unknown-linux-musl",
|
|
41
|
+
"aarch64-unknown-linux-gnu",
|
|
42
|
+
"aarch64-unknown-linux-musl",
|
|
43
|
+
"x86_64-apple-darwin",
|
|
44
|
+
"aarch64-apple-darwin",
|
|
45
|
+
"x86_64-pc-windows-msvc"
|
|
46
|
+
]
|
|
102
47
|
},
|
|
103
48
|
"engines": {
|
|
104
|
-
"node": "^20.
|
|
105
|
-
|
|
49
|
+
"node": "^20.17.0 || ^22.13.0 || >=23.5.0"
|
|
50
|
+
},
|
|
51
|
+
"optionalDependencies": {
|
|
52
|
+
"@smarlhens/npm-check-engines-linux-x64-gnu": "1.0.0",
|
|
53
|
+
"@smarlhens/npm-check-engines-linux-x64-musl": "1.0.0",
|
|
54
|
+
"@smarlhens/npm-check-engines-linux-arm64-gnu": "1.0.0",
|
|
55
|
+
"@smarlhens/npm-check-engines-linux-arm64-musl": "1.0.0",
|
|
56
|
+
"@smarlhens/npm-check-engines-darwin-x64": "1.0.0",
|
|
57
|
+
"@smarlhens/npm-check-engines-darwin-arm64": "1.0.0",
|
|
58
|
+
"@smarlhens/npm-check-engines-win32-x64-msvc": "1.0.0"
|
|
106
59
|
}
|
|
107
|
-
}
|
|
60
|
+
}
|
package/LICENSE.md
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# Blue Oak Model License
|
|
2
|
-
|
|
3
|
-
Version 1.0.0
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
This license gives everyone as much permission to work with
|
|
8
|
-
this software as possible, while protecting contributors
|
|
9
|
-
from liability.
|
|
10
|
-
|
|
11
|
-
## Acceptance
|
|
12
|
-
|
|
13
|
-
In order to receive this license, you must agree to its
|
|
14
|
-
rules. The rules of this license are both obligations
|
|
15
|
-
under that agreement and conditions to your license.
|
|
16
|
-
You must not do anything with this software that triggers
|
|
17
|
-
a rule that you cannot or will not follow.
|
|
18
|
-
|
|
19
|
-
## Copyright
|
|
20
|
-
|
|
21
|
-
Each contributor licenses you to do everything with this
|
|
22
|
-
software that would otherwise infringe that contributor's
|
|
23
|
-
copyright in it.
|
|
24
|
-
|
|
25
|
-
## Notices
|
|
26
|
-
|
|
27
|
-
You must ensure that everyone who gets a copy of
|
|
28
|
-
any part of this software from you, with or without
|
|
29
|
-
changes, also gets the text of this license or a link to
|
|
30
|
-
<https://blueoakcouncil.org/license/1.0.0>.
|
|
31
|
-
|
|
32
|
-
## Excuse
|
|
33
|
-
|
|
34
|
-
If anyone notifies you in writing that you have not
|
|
35
|
-
complied with [Notices](#notices), you can keep your
|
|
36
|
-
license by taking all practical steps to comply within 30
|
|
37
|
-
days after the notice. If you do not do so, your license
|
|
38
|
-
ends immediately.
|
|
39
|
-
|
|
40
|
-
## Patent
|
|
41
|
-
|
|
42
|
-
Each contributor licenses you to do everything with this
|
|
43
|
-
software that would otherwise infringe any patent claims
|
|
44
|
-
they can license or become able to license.
|
|
45
|
-
|
|
46
|
-
## Reliability
|
|
47
|
-
|
|
48
|
-
No contributor can revoke this license.
|
|
49
|
-
|
|
50
|
-
## No Liability
|
|
51
|
-
|
|
52
|
-
**_As far as the law allows, this software comes as is,
|
|
53
|
-
without any warranty or condition, and no contributor
|
|
54
|
-
will be liable to anyone for any damages related to this
|
|
55
|
-
software or this license, under any kind of legal claim._**
|
package/README.md
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
# NPM check engines
|
|
2
|
-
|
|
3
|
-
[](https://github.com/smarlhens/npm-check-engines/actions/workflows/codeql.yml)
|
|
4
|
-
[](https://github.com/smarlhens/npm-check-engines/actions/workflows/ci.yml)
|
|
5
|
-

|
|
6
|
-
[](https://github.com/smarlhens/npm-check-engines)
|
|
7
|
-
[](https://github.com/prettier/prettier)
|
|
8
|
-
[](https://conventionalcommits.org)
|
|
9
|
-
|
|
10
|
-
**npm-check-engines upgrades your package.json node engines constraint to the most restrictive used by your dependencies.**
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Table of Contents
|
|
15
|
-
|
|
16
|
-
- [Prerequisites](#prerequisites)
|
|
17
|
-
- [Installation](#installation)
|
|
18
|
-
- [Usage](#usage)
|
|
19
|
-
- [CLI](#cli)
|
|
20
|
-
- [Node](#node)
|
|
21
|
-
- [CLI Options](#cli-options)
|
|
22
|
-
- [Debug](#debug)
|
|
23
|
-
- [Thanks](#thanks)
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Prerequisites
|
|
28
|
-
|
|
29
|
-
- [Node.JS](https://nodejs.org/en/download/) **version ^20.19.0 || ^22.12.0 || >=24.0.0**
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Installation
|
|
34
|
-
|
|
35
|
-
Install globally:
|
|
36
|
-
|
|
37
|
-
```sh
|
|
38
|
-
npm install -g @smarlhens/npm-check-engines
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Or run with [npx](https://docs.npmjs.com/cli/v8/commands/npx):
|
|
42
|
-
|
|
43
|
-
```sh
|
|
44
|
-
npx @smarlhens/npm-check-engines
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## Usage
|
|
50
|
-
|
|
51
|
-
### CLI
|
|
52
|
-
|
|
53
|
-
Show the most restrictive constraint (**opinionated**) of the node engine for the project in the current directory based on the npm `package-lock.json` file:
|
|
54
|
-
|
|
55
|
-
```sh
|
|
56
|
-
$ nce
|
|
57
|
-
✔ Computed engines range constraints:
|
|
58
|
-
|
|
59
|
-
node * → ^14.17.0 || ^16.10.0 || >=17.0.0
|
|
60
|
-
|
|
61
|
-
Run nce -u to upgrade package.json.
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Upgrade a project's `package.json` file:
|
|
65
|
-
|
|
66
|
-
```sh
|
|
67
|
-
$ nce -u
|
|
68
|
-
✔ Computed engines range constraints:
|
|
69
|
-
|
|
70
|
-
node * → ^14.17.0 || ^16.10.0 || >=17.0.0
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### Node
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
import { checkEnginesFromString, validatePackageJson, validatePackageLock } from '@smarlhens/npm-check-engines';
|
|
77
|
-
|
|
78
|
-
let packageJsonString = ''; // load content of package.json as stringified JSON
|
|
79
|
-
let packageLockString = ''; // load content of package-lock.json as stringified JSON
|
|
80
|
-
|
|
81
|
-
validatePackageJson({ packageJsonString }); // can throw Errors if unexpected format
|
|
82
|
-
validatePackageLock({ packageLockString }); // can throw Errors if unexpected format
|
|
83
|
-
|
|
84
|
-
// packageJson is the content of your package.json with updated engines
|
|
85
|
-
// packageLock is the content of your package-lock.json with updated engines of the root project in packages
|
|
86
|
-
// enginesRangeToSet contains changes if you want to display them
|
|
87
|
-
const { enginesRangeToSet, packageJson, packageLock } = checkEnginesFromString({
|
|
88
|
-
packageJsonString,
|
|
89
|
-
packageLockString,
|
|
90
|
-
});
|
|
91
|
-
console.log(packageJson);
|
|
92
|
-
console.log(packageLock);
|
|
93
|
-
console.log(
|
|
94
|
-
enginesRangeToSet
|
|
95
|
-
.map(({ engine, range, rangeToSet }) => `${engine} range "${range}" replaced by "${rangeToSet}"`)
|
|
96
|
-
.join('\n'),
|
|
97
|
-
);
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## CLI Options
|
|
103
|
-
|
|
104
|
-
```text
|
|
105
|
-
Usage: nce [options]
|
|
106
|
-
|
|
107
|
-
Options:
|
|
108
|
-
-q, --quiet Enable quiet mode. [boolean] [default: false]
|
|
109
|
-
-d, --debug Enable debug mode. Can be used with environment variable DEBUG=nce.
|
|
110
|
-
[boolean] [default: false]
|
|
111
|
-
-v, --verbose A little more detailed than the default output. [boolean] [default: false]
|
|
112
|
-
-e, --engines Select engines to check. Default will check all engines defined. [array]
|
|
113
|
-
-u, --update Update engines in package.json and package-lock.json. [boolean] [default: false]
|
|
114
|
-
--enableEngineStrict Enable engine strict. [boolean] [default: false]
|
|
115
|
-
--help Show help [boolean]
|
|
116
|
-
--version Show version number [boolean]
|
|
117
|
-
|
|
118
|
-
Examples:
|
|
119
|
-
nce Check package-lock.json file in current working directory.
|
|
120
|
-
|
|
121
|
-
© 2023 Samuel MARLHENS
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Debug
|
|
127
|
-
|
|
128
|
-
```sh
|
|
129
|
-
$ DEBUG=* nce -d
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
<details>
|
|
133
|
-
|
|
134
|
-
<summary>output with debug</summary>
|
|
135
|
-
|
|
136
|
-
```text
|
|
137
|
-
[STARTED] Checking npm package engines range constraints in package-lock.json...
|
|
138
|
-
[STARTED] Reading package-lock.json...
|
|
139
|
-
[SUCCESS] Reading package-lock.json...
|
|
140
|
-
[STARTED] Reading package.json...
|
|
141
|
-
[SUCCESS] Reading package.json...
|
|
142
|
-
[STARTED] Validating package-lock.json...
|
|
143
|
-
[SUCCESS] Validating package-lock.json...
|
|
144
|
-
[STARTED] Validating package.json...
|
|
145
|
-
[SUCCESS] Validating package.json...
|
|
146
|
-
[STARTED] Compute engines range constraints...
|
|
147
|
-
nce:node Package has no constraints for current engine +0ms
|
|
148
|
-
nce:node Final computed engine range constraint: * +1ms
|
|
149
|
-
nce:node Package has no engines +0ms
|
|
150
|
-
nce:node Compare: * and >=6.9.0 +1ms
|
|
151
|
-
nce:node Range >=6.9.0 is a subset of * +1ms
|
|
152
|
-
nce:node New most restrictive range: >=6.9.0 +0ms
|
|
153
|
-
nce:node Compare: >=6.9.0 and >=12.22.0 +0ms
|
|
154
|
-
nce:node Range >=12.22.0 is a subset of >=6.9.0 +0ms
|
|
155
|
-
nce:node New most restrictive range: >=12.22.0 +0ms
|
|
156
|
-
nce:node Ignored range: * +0ms
|
|
157
|
-
nce:node Compare: >=12.22.0 and >=7.0.0 +1ms
|
|
158
|
-
nce:node Range >=12.22.0 is a subset of >=7.0.0 +0ms
|
|
159
|
-
nce:node Package node_modules/noengines has no engines +0ms
|
|
160
|
-
nce:node Compare: >=12.22.0 and >=12.13.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +1ms
|
|
161
|
-
nce:node Applying minimal version 12.22.0 to both ranges. +0ms
|
|
162
|
-
nce:node Compare: >=12.22.0 and >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +1ms
|
|
163
|
-
nce:node Range >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 is a subset of >=12.22.0 +0ms
|
|
164
|
-
nce:node New most restrictive range: >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +0ms
|
|
165
|
-
nce:node Compare: >=12.22.0 <13.0.0-0||>=14.15.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 and >=16.0.0||>=14.17.0 <15.0.0-0 +1ms
|
|
166
|
-
nce:node Applying minimal version 14.17.0 to both ranges. +0ms
|
|
167
|
-
nce:node Compare: >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 and >=14.17.0 <15.0.0-0||>=16.0.0 +0ms
|
|
168
|
-
nce:node Range >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 is a subset of >=14.17.0 <15.0.0-0||>=16.0.0 +0ms
|
|
169
|
-
nce:node New most restrictive range: >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +1ms
|
|
170
|
-
nce:node Final computed engine range constraint: >=14.17.0 <15.0.0-0||>=16.10.0 <17.0.0-0||>=17.0.0 +0ms
|
|
171
|
-
nce:npm Package has no constraints for current engine +0ms
|
|
172
|
-
nce:npm Final computed engine range constraint: * +0ms
|
|
173
|
-
nce:npm Package has no engines +0ms
|
|
174
|
-
nce:npm Package node_modules/foo has no constraints for current engine +0ms
|
|
175
|
-
nce:npm Compare: * and >=6.0.0 +1ms
|
|
176
|
-
nce:npm Range >=6.0.0 is a subset of * +0ms
|
|
177
|
-
nce:npm New most restrictive range: >=6.0.0 +0ms
|
|
178
|
-
nce:npm Package node_modules/all has no constraints for current engine +0ms
|
|
179
|
-
nce:npm Package node_modules/arr has no constraints for current engine +0ms
|
|
180
|
-
nce:npm Package node_modules/noengines has no engines +0ms
|
|
181
|
-
nce:npm Package node_modules/complex1 has no constraints for current engine +0ms
|
|
182
|
-
nce:npm Package node_modules/complex2 has no constraints for current engine +0ms
|
|
183
|
-
nce:npm Final computed engine range constraint: >=6.0.0 +0ms
|
|
184
|
-
nce:yarn Package has no constraints for current engine +0ms
|
|
185
|
-
nce:yarn Final computed engine range constraint: * +0ms
|
|
186
|
-
nce:yarn Package has no engines +0ms
|
|
187
|
-
nce:yarn Package node_modules/foo has no constraints for current engine +1ms
|
|
188
|
-
nce:yarn Compare: * and >=1.22.4 <2.0.0-0 +0ms
|
|
189
|
-
nce:yarn Range >=1.22.4 <2.0.0-0 is a subset of * +0ms
|
|
190
|
-
nce:yarn New most restrictive range: >=1.22.4 <2.0.0-0 +0ms
|
|
191
|
-
nce:yarn Package node_modules/all has no constraints for current engine +0ms
|
|
192
|
-
nce:yarn Package node_modules/arr has no constraints for current engine +0ms
|
|
193
|
-
nce:yarn Package node_modules/noengines has no engines +0ms
|
|
194
|
-
nce:yarn Package node_modules/complex1 has no constraints for current engine +0ms
|
|
195
|
-
nce:yarn Package node_modules/complex2 has no constraints for current engine +0ms
|
|
196
|
-
nce:yarn Final computed engine range constraint: >=1.22.4 <2.0.0-0 +0ms
|
|
197
|
-
[SUCCESS] Compute engines range constraints...
|
|
198
|
-
[STARTED] Output computed engines range constraints...
|
|
199
|
-
nce:node Simplified computed engine range constraint: ^14.17.0 || ^16.10.0 || >=17.0.0 +0ms
|
|
200
|
-
nce:npm Simplified computed engine range constraint: >=6.0.0 +0ms
|
|
201
|
-
nce:yarn Simplified computed engine range constraint: ^1.22.4 +0ms
|
|
202
|
-
[TITLE] Computed engines range constraints:
|
|
203
|
-
[TITLE]
|
|
204
|
-
[TITLE] node * → ^14.17.0 || ^16.10.0 || >=17.0.0
|
|
205
|
-
[TITLE] npm * → >=6.0.0
|
|
206
|
-
[TITLE] yarn * → ^1.22.4
|
|
207
|
-
[TITLE]
|
|
208
|
-
[TITLE] Run nce -d -u to upgrade package.json.
|
|
209
|
-
[SUCCESS] Output computed engines range constraints...
|
|
210
|
-
[STARTED] Enabling engine-strict using .npmrc...
|
|
211
|
-
[SKIPPED] Enabling engine-strict is disabled by default.
|
|
212
|
-
[STARTED] Updating package.json...
|
|
213
|
-
[SKIPPED] Update is disabled by default.
|
|
214
|
-
[SUCCESS] Computed engines range constraints:
|
|
215
|
-
[SUCCESS]
|
|
216
|
-
[SUCCESS] node * → ^14.17.0 || ^16.10.0 || >=17.0.0
|
|
217
|
-
[SUCCESS] npm * → >=6.0.0
|
|
218
|
-
[SUCCESS] yarn * → ^1.22.4
|
|
219
|
-
[SUCCESS]
|
|
220
|
-
[SUCCESS] Run nce -d -u to upgrade package.json.
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
</details>
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## Thanks
|
|
228
|
-
|
|
229
|
-
This project is heavily inspired by the following awesome project: [npm-check-updates](https://github.com/raineorshine/npm-check-updates).
|
|
230
|
-
|
|
231
|
-
---
|
package/dist/bin/nce.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const e=require(`../chunk-Bmb41Sf3.cjs`),t=require(`../lib/nce.cjs`),n=require(`../lib/yargs.cjs`);let r=require(`empathic/find`);r=e.t(r);let i=require(`node:fs/promises`);i=e.t(i);let a=require(`node:path`),o=require(`node:url`),s=require(`update-notifier`);s=e.t(s),(async()=>{let e=r.file(`package.json`,{cwd:(0,a.dirname)((0,o.fileURLToPath)(require(`url`).pathToFileURL(__filename).href))}),c=JSON.parse(await i.default.readFile(e,`utf8`)),l=(0,s.default)({pkg:c,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});l.update&&l.update.latest!==c.version&&l.notify({defer:!1,isGlobal:!0}),await t.checkEnginesFromCLI(await n.cli)})();
|
package/dist/bin/nce.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{checkEnginesFromCLI as e}from"../lib/nce.js";import{cli as t}from"../lib/yargs.js";import*as n from"empathic/find";import r from"node:fs/promises";import{dirname as i}from"node:path";import{fileURLToPath as a}from"node:url";import o from"update-notifier";(async()=>{let s=n.file(`package.json`,{cwd:i(a(import.meta.url))}),c=JSON.parse(await r.readFile(s,`utf8`)),l=o({pkg:c,updateCheckInterval:1e3*60,shouldNotifyInNpmScript:!0});l.update&&l.update.latest!==c.version&&l.notify({defer:!1,isGlobal:!0}),await e(await t)})();export{};
|
package/dist/chunk-Bmb41Sf3.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
|
package/dist/lib/nce.cjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`);let t=require(`node:fs/promises`);t=e.t(t);let n=require(`node:path`),r=require(`ajv`);r=e.t(r);let i=require(`cli-table`);i=e.t(i);let a=require(`es-toolkit`),o=require(`listr2`),s=require(`obug`),c=require(`picocolors`);c=e.t(c);let l=require(`semver`);l=e.t(l);let u=require(`sort-package-json`);u=e.t(u);const d=[`node`,`npm`,`yarn`],f=(0,s.createDebug)(`nce`),p=()=>(0,s.disable)(),m=e=>(0,s.enable)(e),h=({debug:e,quiet:t,verbose:n},r=process.env)=>{if(t)return{renderer:`silent`};if(n)return{renderer:`verbose`};let i=r.TERM===`dumb`;return e||i?{renderer:`simple`}:r.NODE_ENV===`test`?{renderer:`test`}:{renderer:`default`,rendererOptions:{dateFormat:!1}}},g=async e=>{let t=e,r={workingDir:(0,n.normalize)(process.cwd()),update:t.update||!1,verbose:t.verbose||!1,quiet:t.quiet||!1,debug:t.debug||!1,engines:t.engines?.filter(e=>d.includes(e))||[],enableEngineStrict:t.enableEngineStrict||!1,packageLockPath:(0,n.join)(process.cwd(),`package-lock.json`),packageJsonPath:(0,n.join)(process.cwd(),`package.json`)},i={...h({quiet:r.quiet,debug:r.debug,verbose:r.verbose})},a=p();return r.debug&&m(a),P({options:r,context:i}).run()},_=new r.default,v={type:`object`,properties:{engines:{anyOf:[{type:`object`,additionalProperties:{type:`string`},oneOf:[{required:[`node`]},{required:[`npm`]},{required:[`yarn`]}]},{type:`array`,items:{type:`string`}},{type:`object`,not:{required:[`engines`]}}]}}},y={type:`object`,properties:{lockfileVersion:{type:`number`,enum:[1,2,3]},dependencies:{type:`object`,patternProperties:{"^.*$":v}},packages:{type:`object`,patternProperties:{"^.*$":v}}},required:[`lockfileVersion`],oneOf:[{properties:{lockfileVersion:{const:1}},required:[`dependencies`],not:{required:[`packages`]}},{properties:{lockfileVersion:{const:2}},required:[`dependencies`]},{properties:{lockfileVersion:{const:3}},required:[`packages`],not:{required:[`dependencies`]}}]},b={loose:!1},x=e=>[...e.map(e=>[...e])].sort((e,t)=>l.compare(e[0].semver,t[0].semver)),S=e=>new l.Range(e.map(e=>e.map(e=>e.value).join(` `)).join(`||`),b),C=(e,t)=>[...e.map(e=>[...e])].filter(e=>e[0].semver.major>=t.major).map(e=>(e[0].semver.major===t.major&&l.gte(t,e[0].semver,b)&&(e[0]=new l.Comparator(`${e[0].operator}${t.raw}`)),e)),w=(e,t,n,r)=>{if(r(`${c.default.white(`Compare:`)} ${c.default.blue(e.raw)} ${c.default.white(`and`)} ${c.default.blue(t.raw)}`),l.subset(e,t))return r(`${c.default.white(`Range`)} ${c.default.green(e.raw)} ${c.default.white(`is a subset of`)} ${c.default.blue(t.raw)}`),n.push(t.raw),e;if(l.subset(t,e))return r(`${c.default.white(`Range`)} ${c.default.green(t.raw)} ${c.default.white(`is a subset of`)} ${c.default.blue(e.raw)}`),n.push(e.raw),t;if(!e.intersects(t,b))return r(`${c.default.red(`No intersection`)} ${c.default.white(`between`)} ${c.default.blue(e.raw)} ${c.default.white(`and`)} ${c.default.blue(t.raw)}, ${c.default.white(`returning`)} ${c.default.green(e.raw)}`),e;if(!t.intersects(e,b))return r(`${c.default.red(`No intersection`)} ${c.default.white(`between`)} ${c.default.blue(t.raw)} ${c.default.white(`and`)} ${c.default.blue(e.raw)}, ${c.default.white(`returning`)} ${c.default.green(t.raw)}`),t;let i=l.minVersion(e,b)||new l.SemVer(`*`),a=l.minVersion(t,b)||new l.SemVer(`*`),o=x(e.set),s=x(t.set);for(;i.major!==a.major;)i.major>a.major?s=s.slice(1):o=o.slice(1),i=l.minVersion(S(o),b)||new l.SemVer(`*`),a=l.minVersion(S(s),b)||new l.SemVer(`*`);if(!l.eq(i,a,b)){let e=l.compare(i,a)===-1?a:i;r(`${c.default.white(`Applying minimal version`)} ${c.default.yellow(e.version)} ${c.default.white(`to both ranges.`)}`);let t=S(C(o,e)),u=S(C(s,e));return t.test(e.raw)?u.test(e.raw)?t.intersects(u,b)?w(t,u,n,r):u.intersects(t,b)?w(u,t,n,r):(r(`${c.default.white(`Unable to find intersection range`)}: ${c.default.blue(t.raw)} and ${c.default.blue(u.raw)}, returning ${c.default.green(t.raw)}`),t):(r(`${c.default.white(`Following range is not valid`)}: ${c.default.red(u.raw)}, returning ${c.default.green(t.raw)}`),t):(r(`${c.default.white(`Following range is not valid`)}: ${c.default.red(t.raw)}, returning ${c.default.green(u.raw)}`),u)}let u=o.shift(),d=s.shift(),f=u||d;if(!f)throw Error(`Not yet implemented :/`);let p=[f],m=w(S(o),S(s),n,r);return p.push(...x(m.set)),S(p)},T=e=>{if(!e||e.raw===`*`)return`*`;let t=[];return x(e.set).forEach(e=>{let[n,r]=e;e.length===2&&n.operator===`>=`&&r.operator===`<`&&n.semver.major+1===r.semver.major?t.push(`^${n.semver.version}`):e.length===1&&n.operator===`>=`?t.push(n.value):t.push(`${n.value} ${r?.value||``}`.trim())}),t.join(` || `)},E=(e,t)=>{if(typeof e==`object`&&t in e)return e[t];if(Array.isArray(e)&&e.some(e=>e.includes(t)))return e.find(e=>e.includes(t))?.replace(t,``)},D=({packages:e,constraintKey:t,debug:n})=>{let r=new l.Range(`*`),i=[],a=n.extend(t);for(let[n,o]of Object.entries(e)){let{engines:e}=o;if(!e){a(`${c.default.white(`Package`)} ${c.default.gray(n)} ${c.default.white(`has no engines`)}`);continue}let s=E(e,t);if(!s){a(`${c.default.white(`Package`)} ${c.default.gray(n)} ${c.default.white(`has no constraints for current engine`)}`);continue}let u=l.validRange(s);if(!u){a(`${c.default.red(s)} ${c.default.white(`is not a valid semver range`)}`);continue}if(i.indexOf(u)!==-1){a(`${c.default.white(`Ignored range:`)} ${c.default.gray(u)}`);continue}let d=new l.Range(u,b);if(!r){r=d,a(`${c.default.white(`New most restrictive range:`)} ${c.default.green(r.raw)}`);continue}let f=w(r,d,i,a);r.raw!==f.raw&&(r=f,a(`${c.default.white(`New most restrictive range:`)} ${c.default.green(r.raw)}`))}return a(r?`${c.default.white(`Final computed engine range constraint:`)} ${c.default.blue(r.raw)}`:`${c.default.white(`No computed engine range constraint`)}`),r},O=e=>new i.default({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:[`left`,`left`,`left`,`left`],chars:{top:``,"top-mid":``,"top-left":``,"top-right":``,bottom:``,"bottom-mid":``,"bottom-left":``,"bottom-right":``,left:``,"left-mid":``,mid:``,"mid-mid":``,right:``,"right-mid":``,middle:``}}),k=e=>{let t=[`nce`];return e.engines&&t.push(...e.engines.map(e=>[`-e`,e]).flat()),e.quiet&&t.push(`-q`),e.debug&&t.push(`-d`),e.verbose&&t.push(`-v`),t.push(`-u`),t.join(` `)},A=e=>{let t=JSON.parse(e.packageLockString),n=JSON.parse(e.packageJsonString),r=e.engines,i=[],o=e=>d.indexOf(e)!==-1,s=[...d];r&&r.length>0&&(s=r.filter(o));let c;t.lockfileVersion===1?c=t.dependencies:t.lockfileVersion===2?c=t.packages?t.packages:t.dependencies:t.lockfileVersion===3&&(c=t.packages);for(let e of s){let r=D({packages:{"":{engines:n.engines||{}}},constraintKey:e,debug:f}),o=T(D({packages:(0,a.merge)((0,a.merge)({},{"":{engines:n.engines||{}}}),c),constraintKey:e,debug:f})),s=T(r);o!==s&&(i.push({engine:e,range:s,rangeToSet:o}),n.engines=(0,a.merge)((0,a.merge)({},n.engines??{}),{[e]:o}),(t.lockfileVersion===2||t.lockfileVersion===3)&&t.packages&&(t.packages[``].engines=(0,a.merge)((0,a.merge)({},t.packages[``].engines??{}),{[e]:o})))}return{packageJson:n,packageLock:t,enginesRangeToSet:i}},j=e=>{let t=_.compile(y),n=t(JSON.parse(e.packageLockString));if(!n)throw Error(`Invalid package-lock.json: ${_.errorsText(t.errors)}`);return n},M=e=>{let t=_.compile(v),n=t(JSON.parse(e.packageJsonString));if(!n)throw Error(`Invalid package.json: ${_.errorsText(t.errors)}`);return n},N=({options:e,parent:n})=>[{title:`Reading package-lock.json...`,task:async n=>{n.packageLockString=await t.default.readFile(e.packageLockPath,`utf8`)}},{title:`Reading package.json...`,task:async n=>{n.packageJsonString=await t.default.readFile(e.packageJsonPath,`utf8`)}},{title:`Validating package-lock.json...`,task:e=>{j(e)}},{title:`Validating package.json...`,task:e=>{M(e)}},{title:`Compute engines range constraints...`,task:t=>{Object.assign(t,A((0,a.merge)((0,a.merge)({},t),{engines:e.engines})))}},{title:`Output computed engines range constraints...`,task:t=>{let r=t.enginesRangeToSet,i=[2,2,2,2],a=[];for(let{engine:e,range:t,rangeToSet:n}of r)f.extend(e)(`${c.default.white(`Simplified computed engine range constraint:`)} ${c.default.blue(n)}`),i=[Math.max(i[0],e.length+2),Math.max(i[1],t.length+2),3,Math.max(i[3],n.length+2)],a.push([e,t,`→`,n]);if(r.length===0)n.title=`All computed engines range constraints are up-to-date ${c.default.green(`:)`)}`;else{let t=O(i);t.push(...a);let r=`Computed engines range constraints:\n\n${t.toString()}`;e.update||(r+=`\n\nRun ${c.default.cyan(k(e))} to upgrade package.json.`),n.title=r}}},{title:`Updating package.json...`,skip:()=>e.update?!e.update:`Update is disabled by default.`,task:n=>(f(`${c.default.white(`Write JSON to`)} ${c.default.blue(`package.json`)}`),Promise.all([t.default.writeFile(e.packageJsonPath,JSON.stringify((0,u.default)(n.packageJson),null,2)+`
|
|
2
|
-
`),t.default.writeFile(e.packageLockPath,JSON.stringify(n.packageLock,null,2)+`
|
|
3
|
-
`)]))},{title:`Enabling engine-strict using .npmrc...`,skip:()=>e.enableEngineStrict?!e.enableEngineStrict:`Enabling engine-strict is disabled by default.`,task:async()=>{let e=`.npmrc`;try{await t.default.access(e,t.default.constants.F_OK|t.default.constants.R_OK),(await t.default.readFile(e,`utf8`)).includes(`engine-strict=true`)?f(`.npmrc file already contains engine-strict=true`):(await t.default.appendFile(e,`engine-strict=true
|
|
4
|
-
`),f(`.npmrc file has been updated to set engine-strict=true`))}catch{await t.default.writeFile(e,`engine-strict=true
|
|
5
|
-
`),f(`.npmrc file has been created and set engine-strict=true`)}}}],P=({options:e,context:t})=>new o.Listr([{title:`Checking npm package engines range constraints in package-lock.json...`,task:(t,n)=>n.newListr(t=>N({parent:t,options:e}))}],t);exports.applyMinVersionToRangeSet=C,exports.checkEnginesFromCLI=g,exports.checkEnginesFromString=A,exports.humanizeRange=T,exports.rangeOptions=b,exports.restrictiveRange=w,exports.setToRange=S,exports.sortRangeSet=x,exports.validatePackageJson=M,exports.validatePackageLock=j;
|
package/dist/lib/nce.d.cts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import * as semver from "semver";
|
|
2
|
-
|
|
3
|
-
//#region lib/yargs.d.ts
|
|
4
|
-
type CLIArgs = {
|
|
5
|
-
[p: string]: unknown;
|
|
6
|
-
update?: boolean;
|
|
7
|
-
quiet?: boolean;
|
|
8
|
-
verbose?: boolean;
|
|
9
|
-
debug?: boolean;
|
|
10
|
-
enableEngineStrict?: boolean;
|
|
11
|
-
engines?: string[];
|
|
12
|
-
_?: Array<string | number>;
|
|
13
|
-
$0?: string;
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
//#region lib/nce.d.ts
|
|
17
|
-
declare const EngineConstraintKeys: readonly ['node', 'npm', 'yarn'];
|
|
18
|
-
type EngineConstraintKeysType = typeof EngineConstraintKeys;
|
|
19
|
-
type EngineConstraintKey = EngineConstraintKeysType[number];
|
|
20
|
-
type LockPackageEnginesObject = Partial<Record<EngineConstraintKey, string>>;
|
|
21
|
-
type LockPackageEnginesArray = string[];
|
|
22
|
-
type LockPackageEngines = LockPackageEnginesObject | LockPackageEnginesArray;
|
|
23
|
-
type OptionalEngines = {
|
|
24
|
-
engines?: LockPackageEngines;
|
|
25
|
-
};
|
|
26
|
-
type PackageDependencies = {
|
|
27
|
-
[dependencyName: string]: OptionalEngines;
|
|
28
|
-
};
|
|
29
|
-
type PackageLockDependencies = {
|
|
30
|
-
dependencies: PackageDependencies;
|
|
31
|
-
};
|
|
32
|
-
type PackageLockPackages = {
|
|
33
|
-
packages: PackageDependencies;
|
|
34
|
-
};
|
|
35
|
-
type PackageLockVersion1 = {
|
|
36
|
-
lockfileVersion: 1;
|
|
37
|
-
} & PackageLockDependencies;
|
|
38
|
-
type PackageLockVersion2 = {
|
|
39
|
-
lockfileVersion: 2;
|
|
40
|
-
} & Partial<PackageLockPackages> & PackageLockDependencies;
|
|
41
|
-
type PackageLockVersion3 = {
|
|
42
|
-
lockfileVersion: 3;
|
|
43
|
-
} & PackageLockPackages;
|
|
44
|
-
type PackageLock = PackageLockVersion1 | PackageLockVersion2 | PackageLockVersion3;
|
|
45
|
-
type EngineRangeToSet = {
|
|
46
|
-
engine: EngineConstraintKey;
|
|
47
|
-
range: string;
|
|
48
|
-
rangeToSet: string;
|
|
49
|
-
};
|
|
50
|
-
type CheckEnginesInput = {
|
|
51
|
-
engines?: EngineConstraintKey[] | undefined;
|
|
52
|
-
packageLockString: string;
|
|
53
|
-
packageJsonString: string;
|
|
54
|
-
};
|
|
55
|
-
type CheckEnginesOutput = {
|
|
56
|
-
packageJson: OptionalEngines;
|
|
57
|
-
packageLock: PackageLock;
|
|
58
|
-
enginesRangeToSet: EngineRangeToSet[];
|
|
59
|
-
};
|
|
60
|
-
type CheckEnginesContext = CheckEnginesInput & Partial<CheckEnginesOutput>;
|
|
61
|
-
declare const checkEnginesFromCLI: (args: CLIArgs) => Promise<CheckEnginesContext>;
|
|
62
|
-
declare const rangeOptions: semver.Options;
|
|
63
|
-
declare const sortRangeSet: (set: ReadonlyArray<ReadonlyArray<semver.Comparator>>) => semver.Comparator[][];
|
|
64
|
-
declare const setToRange: (set: semver.Comparator[][]) => semver.Range;
|
|
65
|
-
declare const applyMinVersionToRangeSet: (set: ReadonlyArray<ReadonlyArray<semver.Comparator>>, minVersion: semver.SemVer) => semver.Comparator[][];
|
|
66
|
-
declare const restrictiveRange: (r1: semver.Range, r2: semver.Range, ignoredRanges: string[], debug: (str: string) => void) => semver.Range;
|
|
67
|
-
declare const humanizeRange: (range?: semver.Range) => string;
|
|
68
|
-
declare const checkEnginesFromString: (ctx: CheckEnginesInput) => CheckEnginesOutput;
|
|
69
|
-
declare const validatePackageLock: (ctx: Pick<CheckEnginesInput, 'packageLockString'>) => boolean;
|
|
70
|
-
declare const validatePackageJson: (ctx: Pick<CheckEnginesInput, 'packageJsonString'>) => boolean;
|
|
71
|
-
//#endregion
|
|
72
|
-
export { CheckEnginesContext, CheckEnginesInput, CheckEnginesOutput, applyMinVersionToRangeSet, checkEnginesFromCLI, checkEnginesFromString, humanizeRange, rangeOptions, restrictiveRange, setToRange, sortRangeSet, validatePackageJson, validatePackageLock };
|
package/dist/lib/nce.d.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import * as semver from "semver";
|
|
2
|
-
|
|
3
|
-
//#region lib/yargs.d.ts
|
|
4
|
-
type CLIArgs = {
|
|
5
|
-
[p: string]: unknown;
|
|
6
|
-
update?: boolean;
|
|
7
|
-
quiet?: boolean;
|
|
8
|
-
verbose?: boolean;
|
|
9
|
-
debug?: boolean;
|
|
10
|
-
enableEngineStrict?: boolean;
|
|
11
|
-
engines?: string[];
|
|
12
|
-
_?: Array<string | number>;
|
|
13
|
-
$0?: string;
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
|
-
//#region lib/nce.d.ts
|
|
17
|
-
declare const EngineConstraintKeys: readonly ['node', 'npm', 'yarn'];
|
|
18
|
-
type EngineConstraintKeysType = typeof EngineConstraintKeys;
|
|
19
|
-
type EngineConstraintKey = EngineConstraintKeysType[number];
|
|
20
|
-
type LockPackageEnginesObject = Partial<Record<EngineConstraintKey, string>>;
|
|
21
|
-
type LockPackageEnginesArray = string[];
|
|
22
|
-
type LockPackageEngines = LockPackageEnginesObject | LockPackageEnginesArray;
|
|
23
|
-
type OptionalEngines = {
|
|
24
|
-
engines?: LockPackageEngines;
|
|
25
|
-
};
|
|
26
|
-
type PackageDependencies = {
|
|
27
|
-
[dependencyName: string]: OptionalEngines;
|
|
28
|
-
};
|
|
29
|
-
type PackageLockDependencies = {
|
|
30
|
-
dependencies: PackageDependencies;
|
|
31
|
-
};
|
|
32
|
-
type PackageLockPackages = {
|
|
33
|
-
packages: PackageDependencies;
|
|
34
|
-
};
|
|
35
|
-
type PackageLockVersion1 = {
|
|
36
|
-
lockfileVersion: 1;
|
|
37
|
-
} & PackageLockDependencies;
|
|
38
|
-
type PackageLockVersion2 = {
|
|
39
|
-
lockfileVersion: 2;
|
|
40
|
-
} & Partial<PackageLockPackages> & PackageLockDependencies;
|
|
41
|
-
type PackageLockVersion3 = {
|
|
42
|
-
lockfileVersion: 3;
|
|
43
|
-
} & PackageLockPackages;
|
|
44
|
-
type PackageLock = PackageLockVersion1 | PackageLockVersion2 | PackageLockVersion3;
|
|
45
|
-
type EngineRangeToSet = {
|
|
46
|
-
engine: EngineConstraintKey;
|
|
47
|
-
range: string;
|
|
48
|
-
rangeToSet: string;
|
|
49
|
-
};
|
|
50
|
-
type CheckEnginesInput = {
|
|
51
|
-
engines?: EngineConstraintKey[] | undefined;
|
|
52
|
-
packageLockString: string;
|
|
53
|
-
packageJsonString: string;
|
|
54
|
-
};
|
|
55
|
-
type CheckEnginesOutput = {
|
|
56
|
-
packageJson: OptionalEngines;
|
|
57
|
-
packageLock: PackageLock;
|
|
58
|
-
enginesRangeToSet: EngineRangeToSet[];
|
|
59
|
-
};
|
|
60
|
-
type CheckEnginesContext = CheckEnginesInput & Partial<CheckEnginesOutput>;
|
|
61
|
-
declare const checkEnginesFromCLI: (args: CLIArgs) => Promise<CheckEnginesContext>;
|
|
62
|
-
declare const rangeOptions: semver.Options;
|
|
63
|
-
declare const sortRangeSet: (set: ReadonlyArray<ReadonlyArray<semver.Comparator>>) => semver.Comparator[][];
|
|
64
|
-
declare const setToRange: (set: semver.Comparator[][]) => semver.Range;
|
|
65
|
-
declare const applyMinVersionToRangeSet: (set: ReadonlyArray<ReadonlyArray<semver.Comparator>>, minVersion: semver.SemVer) => semver.Comparator[][];
|
|
66
|
-
declare const restrictiveRange: (r1: semver.Range, r2: semver.Range, ignoredRanges: string[], debug: (str: string) => void) => semver.Range;
|
|
67
|
-
declare const humanizeRange: (range?: semver.Range) => string;
|
|
68
|
-
declare const checkEnginesFromString: (ctx: CheckEnginesInput) => CheckEnginesOutput;
|
|
69
|
-
declare const validatePackageLock: (ctx: Pick<CheckEnginesInput, 'packageLockString'>) => boolean;
|
|
70
|
-
declare const validatePackageJson: (ctx: Pick<CheckEnginesInput, 'packageJsonString'>) => boolean;
|
|
71
|
-
//#endregion
|
|
72
|
-
export { CheckEnginesContext, CheckEnginesInput, CheckEnginesOutput, applyMinVersionToRangeSet, checkEnginesFromCLI, checkEnginesFromString, humanizeRange, rangeOptions, restrictiveRange, setToRange, sortRangeSet, validatePackageJson, validatePackageLock };
|
package/dist/lib/nce.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import e from"node:fs/promises";import{join as t,normalize as n}from"node:path";import r from"ajv";import i from"cli-table";import{merge as a}from"es-toolkit";import{Listr as o}from"listr2";import{createDebug as s,disable as c,enable as l}from"obug";import u from"picocolors";import*as d from"semver";import f from"sort-package-json";const p=[`node`,`npm`,`yarn`],m=s(`nce`),h=()=>c(),g=e=>l(e),_=({debug:e,quiet:t,verbose:n},r=process.env)=>{if(t)return{renderer:`silent`};if(n)return{renderer:`verbose`};let i=r.TERM===`dumb`;return e||i?{renderer:`simple`}:r.NODE_ENV===`test`?{renderer:`test`}:{renderer:`default`,rendererOptions:{dateFormat:!1}}},v=async e=>{let r=e,i={workingDir:n(process.cwd()),update:r.update||!1,verbose:r.verbose||!1,quiet:r.quiet||!1,debug:r.debug||!1,engines:r.engines?.filter(e=>p.includes(e))||[],enableEngineStrict:r.enableEngineStrict||!1,packageLockPath:t(process.cwd(),`package-lock.json`),packageJsonPath:t(process.cwd(),`package.json`)},a={..._({quiet:i.quiet,debug:i.debug,verbose:i.verbose})},o=h();return i.debug&&g(o),I({options:i,context:a}).run()},y=new r,b={type:`object`,properties:{engines:{anyOf:[{type:`object`,additionalProperties:{type:`string`},oneOf:[{required:[`node`]},{required:[`npm`]},{required:[`yarn`]}]},{type:`array`,items:{type:`string`}},{type:`object`,not:{required:[`engines`]}}]}}},x={type:`object`,properties:{lockfileVersion:{type:`number`,enum:[1,2,3]},dependencies:{type:`object`,patternProperties:{"^.*$":b}},packages:{type:`object`,patternProperties:{"^.*$":b}}},required:[`lockfileVersion`],oneOf:[{properties:{lockfileVersion:{const:1}},required:[`dependencies`],not:{required:[`packages`]}},{properties:{lockfileVersion:{const:2}},required:[`dependencies`]},{properties:{lockfileVersion:{const:3}},required:[`packages`],not:{required:[`dependencies`]}}]},S={loose:!1},C=e=>[...e.map(e=>[...e])].sort((e,t)=>d.compare(e[0].semver,t[0].semver)),w=e=>new d.Range(e.map(e=>e.map(e=>e.value).join(` `)).join(`||`),S),T=(e,t)=>[...e.map(e=>[...e])].filter(e=>e[0].semver.major>=t.major).map(e=>(e[0].semver.major===t.major&&d.gte(t,e[0].semver,S)&&(e[0]=new d.Comparator(`${e[0].operator}${t.raw}`)),e)),E=(e,t,n,r)=>{if(r(`${u.white(`Compare:`)} ${u.blue(e.raw)} ${u.white(`and`)} ${u.blue(t.raw)}`),d.subset(e,t))return r(`${u.white(`Range`)} ${u.green(e.raw)} ${u.white(`is a subset of`)} ${u.blue(t.raw)}`),n.push(t.raw),e;if(d.subset(t,e))return r(`${u.white(`Range`)} ${u.green(t.raw)} ${u.white(`is a subset of`)} ${u.blue(e.raw)}`),n.push(e.raw),t;if(!e.intersects(t,S))return r(`${u.red(`No intersection`)} ${u.white(`between`)} ${u.blue(e.raw)} ${u.white(`and`)} ${u.blue(t.raw)}, ${u.white(`returning`)} ${u.green(e.raw)}`),e;if(!t.intersects(e,S))return r(`${u.red(`No intersection`)} ${u.white(`between`)} ${u.blue(t.raw)} ${u.white(`and`)} ${u.blue(e.raw)}, ${u.white(`returning`)} ${u.green(t.raw)}`),t;let i=d.minVersion(e,S)||new d.SemVer(`*`),a=d.minVersion(t,S)||new d.SemVer(`*`),o=C(e.set),s=C(t.set);for(;i.major!==a.major;)i.major>a.major?s=s.slice(1):o=o.slice(1),i=d.minVersion(w(o),S)||new d.SemVer(`*`),a=d.minVersion(w(s),S)||new d.SemVer(`*`);if(!d.eq(i,a,S)){let e=d.compare(i,a)===-1?a:i;r(`${u.white(`Applying minimal version`)} ${u.yellow(e.version)} ${u.white(`to both ranges.`)}`);let t=w(T(o,e)),c=w(T(s,e));return t.test(e.raw)?c.test(e.raw)?t.intersects(c,S)?E(t,c,n,r):c.intersects(t,S)?E(c,t,n,r):(r(`${u.white(`Unable to find intersection range`)}: ${u.blue(t.raw)} and ${u.blue(c.raw)}, returning ${u.green(t.raw)}`),t):(r(`${u.white(`Following range is not valid`)}: ${u.red(c.raw)}, returning ${u.green(t.raw)}`),t):(r(`${u.white(`Following range is not valid`)}: ${u.red(t.raw)}, returning ${u.green(c.raw)}`),c)}let c=o.shift(),l=s.shift(),f=c||l;if(!f)throw Error(`Not yet implemented :/`);let p=[f],m=E(w(o),w(s),n,r);return p.push(...C(m.set)),w(p)},D=e=>{if(!e||e.raw===`*`)return`*`;let t=[];return C(e.set).forEach(e=>{let[n,r]=e;e.length===2&&n.operator===`>=`&&r.operator===`<`&&n.semver.major+1===r.semver.major?t.push(`^${n.semver.version}`):e.length===1&&n.operator===`>=`?t.push(n.value):t.push(`${n.value} ${r?.value||``}`.trim())}),t.join(` || `)},O=(e,t)=>{if(typeof e==`object`&&t in e)return e[t];if(Array.isArray(e)&&e.some(e=>e.includes(t)))return e.find(e=>e.includes(t))?.replace(t,``)},k=({packages:e,constraintKey:t,debug:n})=>{let r=new d.Range(`*`),i=[],a=n.extend(t);for(let[n,o]of Object.entries(e)){let{engines:e}=o;if(!e){a(`${u.white(`Package`)} ${u.gray(n)} ${u.white(`has no engines`)}`);continue}let s=O(e,t);if(!s){a(`${u.white(`Package`)} ${u.gray(n)} ${u.white(`has no constraints for current engine`)}`);continue}let c=d.validRange(s);if(!c){a(`${u.red(s)} ${u.white(`is not a valid semver range`)}`);continue}if(i.indexOf(c)!==-1){a(`${u.white(`Ignored range:`)} ${u.gray(c)}`);continue}let l=new d.Range(c,S);if(!r){r=l,a(`${u.white(`New most restrictive range:`)} ${u.green(r.raw)}`);continue}let f=E(r,l,i,a);r.raw!==f.raw&&(r=f,a(`${u.white(`New most restrictive range:`)} ${u.green(r.raw)}`))}return a(r?`${u.white(`Final computed engine range constraint:`)} ${u.blue(r.raw)}`:`${u.white(`No computed engine range constraint`)}`),r},A=e=>new i({style:{head:[],border:[],compact:!1,"padding-left":1,"padding-right":1},colWidths:e,colAligns:[`left`,`left`,`left`,`left`],chars:{top:``,"top-mid":``,"top-left":``,"top-right":``,bottom:``,"bottom-mid":``,"bottom-left":``,"bottom-right":``,left:``,"left-mid":``,mid:``,"mid-mid":``,right:``,"right-mid":``,middle:``}}),j=e=>{let t=[`nce`];return e.engines&&t.push(...e.engines.map(e=>[`-e`,e]).flat()),e.quiet&&t.push(`-q`),e.debug&&t.push(`-d`),e.verbose&&t.push(`-v`),t.push(`-u`),t.join(` `)},M=e=>{let t=JSON.parse(e.packageLockString),n=JSON.parse(e.packageJsonString),r=e.engines,i=[],o=e=>p.indexOf(e)!==-1,s=[...p];r&&r.length>0&&(s=r.filter(o));let c;t.lockfileVersion===1?c=t.dependencies:t.lockfileVersion===2?c=t.packages?t.packages:t.dependencies:t.lockfileVersion===3&&(c=t.packages);for(let e of s){let r=k({packages:{"":{engines:n.engines||{}}},constraintKey:e,debug:m}),o=D(k({packages:a(a({},{"":{engines:n.engines||{}}}),c),constraintKey:e,debug:m})),s=D(r);o!==s&&(i.push({engine:e,range:s,rangeToSet:o}),n.engines=a(a({},n.engines??{}),{[e]:o}),(t.lockfileVersion===2||t.lockfileVersion===3)&&t.packages&&(t.packages[``].engines=a(a({},t.packages[``].engines??{}),{[e]:o})))}return{packageJson:n,packageLock:t,enginesRangeToSet:i}},N=e=>{let t=y.compile(x),n=t(JSON.parse(e.packageLockString));if(!n)throw Error(`Invalid package-lock.json: ${y.errorsText(t.errors)}`);return n},P=e=>{let t=y.compile(b),n=t(JSON.parse(e.packageJsonString));if(!n)throw Error(`Invalid package.json: ${y.errorsText(t.errors)}`);return n},F=({options:t,parent:n})=>[{title:`Reading package-lock.json...`,task:async n=>{n.packageLockString=await e.readFile(t.packageLockPath,`utf8`)}},{title:`Reading package.json...`,task:async n=>{n.packageJsonString=await e.readFile(t.packageJsonPath,`utf8`)}},{title:`Validating package-lock.json...`,task:e=>{N(e)}},{title:`Validating package.json...`,task:e=>{P(e)}},{title:`Compute engines range constraints...`,task:e=>{Object.assign(e,M(a(a({},e),{engines:t.engines})))}},{title:`Output computed engines range constraints...`,task:e=>{let r=e.enginesRangeToSet,i=[2,2,2,2],a=[];for(let{engine:e,range:t,rangeToSet:n}of r)m.extend(e)(`${u.white(`Simplified computed engine range constraint:`)} ${u.blue(n)}`),i=[Math.max(i[0],e.length+2),Math.max(i[1],t.length+2),3,Math.max(i[3],n.length+2)],a.push([e,t,`→`,n]);if(r.length===0)n.title=`All computed engines range constraints are up-to-date ${u.green(`:)`)}`;else{let e=A(i);e.push(...a);let r=`Computed engines range constraints:\n\n${e.toString()}`;t.update||(r+=`\n\nRun ${u.cyan(j(t))} to upgrade package.json.`),n.title=r}}},{title:`Updating package.json...`,skip:()=>t.update?!t.update:`Update is disabled by default.`,task:n=>(m(`${u.white(`Write JSON to`)} ${u.blue(`package.json`)}`),Promise.all([e.writeFile(t.packageJsonPath,JSON.stringify(f(n.packageJson),null,2)+`
|
|
2
|
-
`),e.writeFile(t.packageLockPath,JSON.stringify(n.packageLock,null,2)+`
|
|
3
|
-
`)]))},{title:`Enabling engine-strict using .npmrc...`,skip:()=>t.enableEngineStrict?!t.enableEngineStrict:`Enabling engine-strict is disabled by default.`,task:async()=>{let t=`.npmrc`;try{await e.access(t,e.constants.F_OK|e.constants.R_OK),(await e.readFile(t,`utf8`)).includes(`engine-strict=true`)?m(`.npmrc file already contains engine-strict=true`):(await e.appendFile(t,`engine-strict=true
|
|
4
|
-
`),m(`.npmrc file has been updated to set engine-strict=true`))}catch{await e.writeFile(t,`engine-strict=true
|
|
5
|
-
`),m(`.npmrc file has been created and set engine-strict=true`)}}}],I=({options:e,context:t})=>new o([{title:`Checking npm package engines range constraints in package-lock.json...`,task:(t,n)=>n.newListr(t=>F({parent:t,options:e}))}],t);export{T as applyMinVersionToRangeSet,v as checkEnginesFromCLI,M as checkEnginesFromString,D as humanizeRange,S as rangeOptions,E as restrictiveRange,w as setToRange,C as sortRangeSet,P as validatePackageJson,N as validatePackageLock};
|
package/dist/lib/yargs.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`);let t=require(`yargs`);t=e.t(t);let n=require(`yargs/helpers`);const r=(0,t.default)((0,n.hideBin)(process.argv)),i=r.scriptName(`nce`).usage(`Usage: $0 [options]`).example(`$0`,`Check package-lock.json file in current working directory.`).strict().options({quiet:{boolean:!0,alias:`q`,default:!1,description:`Enable quiet mode.`},debug:{boolean:!0,alias:`d`,default:!1,description:`Enable debug mode. Can be used with environment variable DEBUG=nce.`},verbose:{boolean:!0,alias:`v`,default:!1,description:`A little more detailed than the default output.`},engines:{array:!0,alias:`e`,description:`Select engines to check. Default will check all engines defined.`},update:{boolean:!0,alias:`u`,default:!1,description:`Update engines in package.json and package-lock.json.`},enableEngineStrict:{boolean:!0,default:!1,description:`Enable engine strict.`}}).help(`help`).version().wrap(r.terminalWidth()).epilog(`© 2023 Samuel MARLHENS`).argv;exports.cli=i;
|
package/dist/lib/yargs.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import e from"yargs";import{hideBin as t}from"yargs/helpers";const n=e(t(process.argv)),r=n.scriptName(`nce`).usage(`Usage: $0 [options]`).example(`$0`,`Check package-lock.json file in current working directory.`).strict().options({quiet:{boolean:!0,alias:`q`,default:!1,description:`Enable quiet mode.`},debug:{boolean:!0,alias:`d`,default:!1,description:`Enable debug mode. Can be used with environment variable DEBUG=nce.`},verbose:{boolean:!0,alias:`v`,default:!1,description:`A little more detailed than the default output.`},engines:{array:!0,alias:`e`,description:`Select engines to check. Default will check all engines defined.`},update:{boolean:!0,alias:`u`,default:!1,description:`Update engines in package.json and package-lock.json.`},enableEngineStrict:{boolean:!0,default:!1,description:`Enable engine strict.`}}).help(`help`).version().wrap(n.terminalWidth()).epilog(`© 2023 Samuel MARLHENS`).argv;export{r as cli};
|