Skip to content

Commit

Permalink
feat: bump node release table (node 10 now returns an error)
Browse files Browse the repository at this point in the history
  • Loading branch information
ext committed Jun 5, 2021
1 parent e2ef897 commit 6c38aad
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 38 deletions.
2 changes: 1 addition & 1 deletion src/package-json.spec.ts
Expand Up @@ -15,7 +15,7 @@ beforeEach(() => {
author: "Fred Flintstone <fred.flintstone@example.net>",
repository: "https://git.example.net/test-case.git",
engines: {
node: ">= 10",
node: ">= 12",
},
};
});
Expand Down
30 changes: 18 additions & 12 deletions src/rules/outdated-engines.spec.ts
Expand Up @@ -14,23 +14,29 @@ beforeEach(() => {

describe("should return error when unsupported version satisfies engines.node", () => {
it.each`
range | description | date
${">= 0.10.x"} | ${"Node 0.10"} | ${"2016-10-31"}
${">= 0.12.x"} | ${"Node 0.12"} | ${"2016-12-31"}
${">= 4.x"} | ${"Node 4"} | ${"2018-04-30"}
${">= 5.x"} | ${"Node 5"} | ${"2016-06-30"}
${">= 6.x"} | ${"Node 6"} | ${"2019-04-30"}
${">= 7.x"} | ${"Node 7"} | ${"2017-06-30"}
${">= 8.x"} | ${"Node 8"} | ${"2019-12-31"}
${">= 9.x"} | ${"Node 9"} | ${"2018-06-30"}
`("$description", ({ range, description, date }) => {
range | description
${">= 0.10.x"} | ${"Node 0.10"}
${">= 0.12.x"} | ${"Node 0.12"}
${">= 4.x"} | ${"Node 4"}
${">= 5.x"} | ${"Node 5"}
${">= 6.x"} | ${"Node 6"}
${">= 7.x"} | ${"Node 7"}
${">= 8.x"} | ${"Node 8"}
${">= 9.x"} | ${"Node 9"}
${">= 10.x"} | ${"Node 10"}
${">= 11.x"} | ${"Node 11"}
`("$description", ({ range, description }) => {
expect.assertions(1);
pkg.engines.node = range;
/* eslint-disable-next-line security/detect-non-literal-regexp */
const message = new RegExp(
String.raw`engines\.node is satisfied by ${description} \(EOL since \d{4}-.*\)`
);
expect(Array.from(outdatedEngines(pkg))).toEqual([
{
ruleId: "outdated-engines",
severity: Severity.ERROR,
message: `engines.node is satisfied by ${description} (EOL since ${date})`,
message: expect.stringMatching(message),
line: 1,
column: 1,
},
Expand Down Expand Up @@ -88,6 +94,6 @@ it("should return error engines is missing", () => {

it("should not return error when engines.node only supports active versions", () => {
expect.assertions(1);
pkg.engines.node = ">= 10";
pkg.engines.node = ">= 12";
expect(Array.from(outdatedEngines(pkg))).toMatchInlineSnapshot(`Array []`);
});
44 changes: 24 additions & 20 deletions src/rules/outdated-engines.ts
Expand Up @@ -11,14 +11,16 @@ interface EOLDescriptor {
}

const EOL: [string, EOLDescriptor][] = [
["0.10.99", { date: "2016-10-31" }],
["0.12.99", { date: "2016-12-31" }],
["4.99.99", { date: "2018-04-30" }],
["5.99.99", { date: "2016-06-30" }],
["6.99.99", { date: "2019-04-30" }],
["7.99.99", { date: "2017-06-30" }],
["8.99.99", { date: "2019-12-31" }],
["9.99.99", { date: "2018-06-30" }],
["0.10.x", { date: "2016-10-31" }],
["0.12.x", { date: "2016-12-31" }],
["4.x.x", { date: "2018-04-30" }],
["5.x.x", { date: "2016-06-30" }],
["6.x.x", { date: "2019-04-30" }],
["7.x.x", { date: "2017-06-30" }],
["8.x.x", { date: "2019-12-31" }],
["9.x.x", { date: "2018-06-30" }],
["10.x.x", { date: "2021-04-30" }],
["11.x.x", { date: "2019-06-01" }],
];

export function* outdatedEngines(pkg: PackageJson): Generator<Message> {
Expand Down Expand Up @@ -46,18 +48,20 @@ export function* outdatedEngines(pkg: PackageJson): Generator<Message> {
}

for (const [version, descriptor] of EOL) {
const parsed = semver.parse(version);
if (semver.satisfies(version, range)) {
yield {
ruleId,
severity,
message: `engines.node is satisfied by Node ${
parsed.major || `0.${parsed.minor}`
} (EOL since ${descriptor.date})`,
line: 1,
column: 1,
};
return;
const expanded = version.replace(/[xX*]/g, "999");
const parsed = semver.parse(expanded);
if (!semver.satisfies(expanded, range)) {
continue;
}
const nodeRelease = parsed.major || `0.${parsed.minor}`;
const message = `engines.node is satisfied by Node ${nodeRelease} (EOL since ${descriptor.date})`;
yield {
ruleId,
severity,
message,
line: 1,
column: 1,
};
return;
}
}
2 changes: 1 addition & 1 deletion tests/fixtures/disallowed-files/package.json
Expand Up @@ -20,6 +20,6 @@
"test": "echo \"Error: no test specified\" && exit 1"
},
"engines": {
"node": ">= 10"
"node": ">= 12"
}
}
2 changes: 1 addition & 1 deletion tests/fixtures/empty-fields/package.json
Expand Up @@ -11,6 +11,6 @@
"main": "",
"files": [],
"engines": {
"node": ">= 10"
"node": ">= 12"
}
}
2 changes: 1 addition & 1 deletion tests/fixtures/missing-binary/package.json
Expand Up @@ -21,6 +21,6 @@
"test": "echo \"Error: no test specified\" && exit 1"
},
"engines": {
"node": ">= 10"
"node": ">= 12"
}
}
2 changes: 1 addition & 1 deletion tests/fixtures/missing-fields/package.json
Expand Up @@ -3,6 +3,6 @@
"version": "1.0.0",
"files": [],
"engines": {
"node": ">= 10"
"node": ">= 12"
}
}
2 changes: 1 addition & 1 deletion tests/fixtures/missing-main/package.json
Expand Up @@ -18,6 +18,6 @@
"test": "echo \"Error: no test specified\" && exit 1"
},
"engines": {
"node": ">= 10"
"node": ">= 12"
}
}

0 comments on commit 6c38aad

Please sign in to comment.