Skip to content

Commit

Permalink
Add an option to select a different mirror
Browse files Browse the repository at this point in the history
  • Loading branch information
dcodeIO authored and wesleytodd committed Aug 28, 2020
1 parent ed601e6 commit 1593047
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
20 changes: 11 additions & 9 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ const _cache = new Map()
module.exports = async function (alias = 'lts_active', opts = {}) {
const now = opts.now || new Date()
const cache = opts.cache || _cache
const mirror = opts.mirror || 'https://nodejs.org/dist/'

const a = Array.isArray(alias) ? alias : [alias]
const versions = await getLatestVersionsByCodename(now, cache)
const versions = await getLatestVersionsByCodename(now, cache, mirror)

// Reduce to an object
const m = a.reduce((m, a) => {
Expand Down Expand Up @@ -50,15 +51,15 @@ function getSchedule (cache) {
}).json()
}

function getVersions (cache) {
return got('https://nodejs.org/dist/index.json', {
function getVersions (cache, mirror) {
return got(mirror.replace(/\/$/, '') + '/index.json', {
cache
}).json()
}

async function getLatestVersionsByCodename (now, cache) {
async function getLatestVersionsByCodename (now, cache, mirror) {
const schedule = await getSchedule(cache)
const versions = await getVersions(cache)
const versions = await getVersions(cache, mirror)

// Composite aliases point to the HEAD for each release line
const maintained = {}
Expand All @@ -67,10 +68,10 @@ async function getLatestVersionsByCodename (now, cache) {
const lts = {}

const aliases = versions.reduce((obj, ver) => {
const { major, minor, patch } = splitVersion(ver.version)
const { major, minor, patch, tag } = splitVersion(ver.version)
const versionName = major !== '0' ? `v${major}` : `v${major}.${minor}`
const codename = ver.lts ? ver.lts.toLowerCase() : versionName
const version = `${major}.${minor}.${patch}`
const version = tag !== '' ? `${major}.${minor}.${patch}-${tag}` : `${major}.${minor}.${patch}`
const s = schedule[versionName]

// Version Object
Expand All @@ -79,6 +80,7 @@ async function getLatestVersionsByCodename (now, cache) {
major,
minor,
patch,
tag,
codename,
versionName,
start: s && s.start && new Date(s.start),
Expand Down Expand Up @@ -150,6 +152,6 @@ async function getLatestVersionsByCodename (now, cache) {
}

function splitVersion (ver) {
const [, major, minor, patch] = /^v([0-9]*)\.([0-9]*)\.([0-9]*)/.exec(ver).map((n) => parseInt(n, 10))
return { major, minor, patch }
const [, major, minor, patch, tag] = /^v([0-9]*)\.([0-9]*)\.([0-9]*)(?:-([0-9A-Za-z-_]+))?/.exec(ver).map((n, i) => i < 4 ? parseInt(n, 10) : n || '')
return { major, minor, patch, tag }
}
13 changes: 12 additions & 1 deletion test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ suite('nv', () => {
assert.strictEqual(versions[0].versionName, 'v10')
assert.strictEqual(versions[0].start.toISOString(), '2018-04-24T00:00:00.000Z')
assert.strictEqual(versions[0].lts.toISOString(), '2018-10-30T00:00:00.000Z')
assert.strictEqual(versions[0].maintenance.toISOString(), '2020-04-01T00:00:00.000Z')
assert.strictEqual(versions[0].maintenance.toISOString(), '2020-05-19T00:00:00.000Z')
assert.strictEqual(versions[0].end.toISOString(), '2021-04-30T00:00:00.000Z')
})

Expand Down Expand Up @@ -121,4 +121,15 @@ suite('nv', () => {
assert.strictEqual(versions[0].major, 10)
assert.strictEqual(versions[1].major, 12)
})

test('mirror: v8-canary', async () => {
const mirror = 'https://nodejs.org/download/v8-canary/'
const versions = await nv('v13', { now, mirror })
assert.strictEqual(versions.length, 1)
assert.strictEqual(versions[0].major, 13)
assert.strictEqual(versions[0].minor, 0)
assert.strictEqual(versions[0].patch, 0)
assert.strictEqual(versions[0].tag, 'v8-canary20191022e5d3472f57')
assert.strictEqual(versions[0].versionName, 'v13')
})
})

0 comments on commit 1593047

Please sign in to comment.