Skip to content

Commit d3997a3

Browse files
committed
refactor(migrator): simplify parseNvmrcVersion function and improve alias handling
1 parent fc533d4 commit d3997a3

2 files changed

Lines changed: 20 additions & 20 deletions

File tree

packages/cli/src/migration/__tests__/migrator.spec.ts

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -133,37 +133,36 @@ describe('rewritePackageJson', () => {
133133

134134
describe('parseNvmrcVersion', () => {
135135
it('strips v prefix', () => {
136-
expect(parseNvmrcVersion('v20.5.0\n')).toBe('20.5.0');
137136
expect(parseNvmrcVersion('v20.5.0')).toBe('20.5.0');
138137
});
139138

140139
it('passes through version without prefix', () => {
141-
expect(parseNvmrcVersion('20.5.0\n')).toBe('20.5.0');
142-
expect(parseNvmrcVersion('20\n')).toBe('20');
140+
expect(parseNvmrcVersion('20.5.0')).toBe('20.5.0');
141+
expect(parseNvmrcVersion('20')).toBe('20');
143142
});
144143

145144
it('passes through lts aliases', () => {
146-
expect(parseNvmrcVersion('lts/*\n')).toBe('lts/*');
147-
expect(parseNvmrcVersion('lts/iron\n')).toBe('lts/iron');
148-
expect(parseNvmrcVersion('lts/-1\n')).toBe('lts/-1');
145+
expect(parseNvmrcVersion('lts/*')).toBe('lts/*');
146+
expect(parseNvmrcVersion('lts/iron')).toBe('lts/iron');
147+
expect(parseNvmrcVersion('lts/-1')).toBe('lts/-1');
149148
});
150149

151150
it('converts node/stable aliases to lts/*', () => {
152-
expect(parseNvmrcVersion('node\n')).toBe('lts/*');
153-
expect(parseNvmrcVersion('stable\n')).toBe('lts/*');
151+
expect(parseNvmrcVersion('node')).toBe('lts/*');
152+
expect(parseNvmrcVersion('stable')).toBe('lts/*');
154153
});
155154

156155
it('returns null for untranslatable aliases', () => {
157-
expect(parseNvmrcVersion('iojs\n')).toBeNull();
158-
expect(parseNvmrcVersion('system\n')).toBeNull();
159-
expect(parseNvmrcVersion('default\n')).toBeNull();
156+
expect(parseNvmrcVersion('iojs')).toBeNull();
157+
expect(parseNvmrcVersion('system')).toBeNull();
158+
expect(parseNvmrcVersion('default')).toBeNull();
160159
expect(parseNvmrcVersion('')).toBeNull();
161160
});
162161

163162
it('returns null for invalid version strings', () => {
164-
expect(parseNvmrcVersion('v\n')).toBeNull();
165-
expect(parseNvmrcVersion('laetst\n')).toBeNull();
166-
expect(parseNvmrcVersion('20.5.0.1\n')).toBeNull();
163+
expect(parseNvmrcVersion('v')).toBeNull();
164+
expect(parseNvmrcVersion('laetst')).toBeNull();
165+
expect(parseNvmrcVersion('20.5.0.1')).toBeNull();
167166
});
168167
});
169168

packages/cli/src/migration/migrator.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2002,11 +2002,12 @@ export function detectNodeVersionManagerFile(
20022002
}
20032003

20042004
/**
2005-
* Parse a version string from a .nvmrc file.
2006-
* Returns null for unsupported aliases like "node", "stable", "system".
2005+
* Parse a version alias from a .nvmrc file into a .node-version compatible string.
2006+
* Accepts the first line of .nvmrc (pre-trimmed).
2007+
* Returns null for unsupported aliases like "system", "default", "iojs".
20072008
*/
2008-
export function parseNvmrcVersion(content: string): string | null {
2009-
const version = content.split('\n')[0]?.trim();
2009+
export function parseNvmrcVersion(alias: string): string | null {
2010+
const version = alias.trim();
20102011

20112012
if (!version) {
20122013
return null;
@@ -2049,8 +2050,8 @@ export function migrateNodeVersionManagerFile(
20492050
const sourcePath = path.join(projectPath, '.nvmrc');
20502051
const nodeVersionPath = path.join(projectPath, '.node-version');
20512052
const content = fs.readFileSync(sourcePath, 'utf8');
2052-
const originalAlias = content.split('\n')[0]?.trim();
2053-
const version = parseNvmrcVersion(content);
2053+
const originalAlias = content.split('\n')[0]?.trim() ?? '';
2054+
const version = parseNvmrcVersion(originalAlias);
20542055

20552056
if (!version) {
20562057
warnMigration(

0 commit comments

Comments
 (0)