Skip to content

Commit fbc7ee6

Browse files
committed
feat: add isSupported, isMaintenance, isSecurity, and modules
1 parent ee7a4b9 commit fbc7ee6

File tree

4 files changed

+52
-11
lines changed

4 files changed

+52
-11
lines changed

index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ interface VersionInfo {
1919
end?: Date;
2020
releaseDate: Date;
2121
isLts: boolean;
22+
isSupported: boolean;
23+
isMaintenance: boolean;
24+
isSecurity: boolean;
25+
modules: string;
2226
files: string[];
2327
dependencies: {
2428
npm: string,

index.js

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ module.exports = async function (alias = 'lts_active', opts = {}) {
1010
const latestOfMajorOnly = opts.latestOfMajorOnly || false
1111

1212
const a = Array.isArray(alias) ? alias : [alias]
13-
const versions = await getLatestVersionsByCodename(now, cache, mirror)
13+
const versions = await getLatestVersionsByCodename({
14+
now,
15+
cache,
16+
mirror
17+
})
1418

1519
// Reduce to an object
1620
let m = a.reduce((m, a) => {
@@ -70,7 +74,7 @@ function getVersions (cache, mirror) {
7074
}).json()
7175
}
7276

73-
async function getLatestVersionsByCodename (now, cache, mirror) {
77+
async function getLatestVersionsByCodename ({ now, cache, mirror }) {
7478
const schedule = await getSchedule(cache)
7579
const versions = await getVersions(cache, mirror)
7680

@@ -102,6 +106,10 @@ async function getLatestVersionsByCodename (now, cache, mirror) {
102106
end: s && s.end && new Date(s.end),
103107
releaseDate: new Date(ver.date),
104108
isLts: false,
109+
isSupported: false,
110+
isMaintenance: false,
111+
isSecurity: ver.security,
112+
modules: ver.modules,
105113
files: ver.files || [],
106114
dependencies: {
107115
npm: ver.npm,
@@ -112,30 +120,38 @@ async function getLatestVersionsByCodename (now, cache, mirror) {
112120
}
113121
}
114122

115-
// All versions get added to all
116-
obj.all.push(v)
123+
// Is in any supported period
124+
if (now > v.start && now < v.end) {
125+
v.isSupported = true
117126

118-
// Add specific version references
119-
obj[v.version] = obj[`v${v.version}`] = v
127+
// Is in maintenence period
128+
if (now > v.maintenance) {
129+
v.isMaintenance = true
130+
}
131+
132+
// Latest lts
133+
if (now > v.lts) {
134+
v.isLts = true
135+
}
136+
}
120137

121138
// The new version is higher than the last stored version for this release line
122139
if (!obj[versionName] || semver.gt(ver.version, obj[versionName].version)) {
123140
// Version and codename alias
124141
obj[versionName] = obj[codename] = v
125142

126-
if (now > v.start && now < v.end) {
143+
if (v.isSupported) {
127144
supported[versionName] = v
128145

129-
if (now < v.maintenance) {
146+
if (!v.isMaintenance) {
130147
active[versionName] = v
131148
}
132149

133150
// Latest lts
134-
if (now > v.lts) {
151+
if (v.isLts) {
135152
lts[versionName] = v
136-
v.isLts = true
137153

138-
if (now < v.maintenance) {
154+
if (!v.isMaintenance) {
139155
ltsActive[versionName] = v
140156
}
141157

@@ -151,6 +167,12 @@ async function getLatestVersionsByCodename (now, cache, mirror) {
151167
}
152168
}
153169

170+
// All versions get added to all
171+
obj.all.push(v)
172+
173+
// Add specific version references
174+
obj[v.version] = obj[`v${v.version}`] = v
175+
154176
return obj
155177
}, {
156178
all: []

index.test-d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ import assert from 'node:assert'
1616
assert(versions[0].end)
1717
assert(versions[0].releaseDate)
1818
assert(versions[0].isLts)
19+
assert(versions[0].isSupported)
20+
assert(versions[0].isMaintenance)
21+
assert(versions[0].isSecurity)
22+
assert(versions[0].modules)
1923
assert(versions[0].files)
2024
assert(versions[0].dependencies)
2125
assert(versions[0].dependencies.npm)

test/index.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ suite('nv', () => {
2222
assert.strictEqual(versions[0].maintenance.toISOString(), '2020-05-19T00:00:00.000Z')
2323
assert.strictEqual(versions[0].end.toISOString(), '2021-04-30T00:00:00.000Z')
2424
assert.strictEqual(versions[0].isLts, true)
25+
assert.strictEqual(versions[0].isSupported, true)
26+
assert.strictEqual(versions[0].isMaintenance, false)
27+
assert.strictEqual(versions[0].modules, '64')
2528
assert.deepStrictEqual(versions[0].files, [
2629
'aix-ppc64',
2730
'headers',
@@ -172,6 +175,14 @@ suite('nv', () => {
172175
assert.strictEqual(versions[0].major, 18)
173176
})
174177

178+
test('latestOfMajorOnly with an alias', async () => {
179+
const versions = await nv('supported', { now, latestOfMajorOnly: true })
180+
assert.strictEqual(versions.length, 3)
181+
assert.strictEqual(versions[0].major, 8)
182+
assert.strictEqual(versions[1].major, 10)
183+
assert.strictEqual(versions[2].major, 12)
184+
})
185+
175186
test('isLts: false', async () => {
176187
const versions = await nv('0.8.0', { now })
177188
assert.strictEqual(versions[0].major, 0)

0 commit comments

Comments
 (0)