Skip to content

Commit 5e1b670

Browse files
committed
Applied suggestions on PR ehmicky#1 and made '_' the default for '.' when no version file
1 parent 6627c6a commit 5e1b670

File tree

3 files changed

+34
-20
lines changed

3 files changed

+34
-20
lines changed

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
Normalize and validate Node.js versions
99

10+
Can guess the current project's version using its `.nvmrc` if you use supported
11+
[aliases](#supported-aliases)
12+
1013
# Example
1114

1215
<!-- Remove 'eslint-skip' once estree supports top-level await -->
@@ -22,7 +25,7 @@ await normalizeNodeVersion('8.5.2') // Error: Invalid Node version
2225
await normalizeNodeVersion('<7') // '6.17.1'
2326
await normalizeNodeVersion('*') // Latest Node version, e.g. '12.8.0'
2427
await normalizeNodeVersion('_') // Node version used by current process
25-
await normalizeNodeVersion('.') // Node version of project specified in either .node-version, .nvmrc or .naverc
28+
await normalizeNodeVersion('.') // Node version from a '.nvmrc', '.node-version' or '.naverc' file in the current directory or any parent directory
2629
await normalizeNodeVersion('not_a_version') // Error: Invalid Node version
2730

2831
// All available options
@@ -74,6 +77,16 @@ _Default_: `process.cwd()`
7477
Folder to consider to start look for a node version file when using the `.`
7578
alias (`.node-version`, `.nvmrc` or `.naverc`)
7679

80+
### Supported aliases
81+
82+
`normalizeNodeVersion` support some node version aliases you can use as
83+
`versionRange`:
84+
85+
- `_` : Node version used by current process
86+
- `.` : Node version from a `.nvmrc`, `.node-version` or `.naverc` file in the
87+
current directory or any parent directory If no version file is found, it will
88+
resolve to current process version.
89+
7790
# See also
7891

7992
- [`nve`](https://github.com/ehmicky/nve): Run a specific Node.js version (CLI)

src/aliases.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { promises as fs } from 'fs'
2-
import { version } from 'process'
2+
import { version as processVersion } from 'process'
33

44
import findUp from 'find-up'
55

@@ -8,24 +8,25 @@ export const NODE_VERSION_FILES = ['.node-version', '.nvmrc', '.naverc']
88

99
export const CURRENT_NODE_ALIAS = '_'
1010

11+
export const resolveNodeVersionAlias = async ({ cwd } = {}) => {
12+
const nodeVersionFile = await findUp(NODE_VERSION_FILES, { cwd })
13+
if (nodeVersionFile === undefined) return
14+
15+
const nodeVersionFileContent = await fs.readFile(nodeVersionFile, 'utf-8')
16+
return nodeVersionFileContent.trim()
17+
}
18+
1119
export const resolveVersionRangeAlias = async function (
1220
versionRange,
1321
{ cwd } = {},
1422
) {
15-
if (versionRange === CURRENT_NODE_ALIAS) return version
16-
17-
if (versionRange !== NODE_VERSION_ALIAS) return versionRange
23+
if (versionRange === CURRENT_NODE_ALIAS) return processVersion
1824

19-
const nodeVersionFile = await findUp(NODE_VERSION_FILES, { cwd })
25+
if (versionRange === NODE_VERSION_ALIAS) {
26+
const resolvedVersion = await resolveNodeVersionAlias({ cwd })
2027

21-
if (nodeVersionFile === undefined) {
22-
throw new Error(
23-
`node config file not found [was looking for ${NODE_VERSION_FILES.join(
24-
', ',
25-
)}]`,
26-
)
28+
return resolvedVersion || processVersion
2729
}
2830

29-
const nodeVersionFileContent = await fs.readFile(nodeVersionFile, 'utf-8')
30-
return nodeVersionFileContent.trim()
31+
return versionRange
3132
}

test/aliases.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { join } from 'path'
21
import { version } from 'process'
32

43
import test from 'ava'
@@ -7,7 +6,7 @@ import { resolveVersionRangeAlias } from '../src/aliases.js'
76

87
const resolveInFolder = (versionRange, folder) =>
98
resolveVersionRangeAlias(versionRange, {
10-
cwd: join(__dirname, 'fixtures', folder),
9+
cwd: `${__dirname}/fixtures/${folder}`,
1110
})
1211

1312
test('Resolve - with node-version pseudo version', async (t) => {
@@ -30,10 +29,11 @@ test('Resolve - in mixed project pseudo version, .node-version having precedence
3029
t.is(versionRange, 'v12.12', 'not resolved to .node-version')
3130
})
3231

33-
test('Throw error if resolving - and none of the node version files are found', async (t) => {
34-
await t.throwsAsync(
35-
resolveVersionRangeAlias('.', { cwd: join(__dirname, '..', 'src') }),
36-
)
32+
test('Resolve - default to process.version if no version file found', async (t) => {
33+
const versionRange = await resolveVersionRangeAlias('.', {
34+
cwd: `${__dirname}/../src`,
35+
})
36+
t.is(versionRange, version, 'not resolved to .node-version')
3737
})
3838

3939
test('Resolve current node pseudo version', async (t) => {

0 commit comments

Comments
 (0)