Skip to content

Commit

Permalink
fix(semver): add support for setting '*'
Browse files Browse the repository at this point in the history
  • Loading branch information
JamieMason committed Oct 28, 2022
1 parent ca15bff commit 779772b
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 3 deletions.
12 changes: 12 additions & 0 deletions src/bin-lint-semver-ranges/lint-semver-ranges.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,16 @@ describe('lintSemverRanges', () => {
['✕ f 0.1.0 in resolutions of a should be ~0.1.0'],
]);
});

it('ensures wildcard versions are supported', () => {
const scenario = scenarios.semverRangesDoNotMatchConfigWildcard();
lintSemverRanges(getInput(scenario.disk, scenario.config), scenario.disk);
expect(scenario.log.mock.calls).toEqual([
['✕ b 0.1.0 in devDependencies of a should be *'],
['✕ c 0.1.0 in overrides of a should be *'],
['✕ d 0.1.0 in pnpmOverrides of a should be *'],
['✕ e 0.1.0 in peerDependencies of a should be *'],
['✕ f 0.1.0 in resolutions of a should be *'],
]);
});
});
18 changes: 18 additions & 0 deletions src/bin-lint-semver-ranges/list-semver-group-mismatches.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,24 @@ describe('listSemverGroupMismatches', () => {
]);
});
});
describe('when semver range should be "*"', () => {
it('returns dependencies with invalid semver ranges', () => {
expect(
listSemverGroupMismatches({
range: '*',
instances: [
{ name: 'foo', version: '~0.1.4' },
{ name: 'bar', version: '2.2.6' },
{ name: 'baz', version: '^1.0.0' },
],
} as any),
).toEqual([
{ name: 'bar', version: '2.2.6' },
{ name: 'baz', version: '^1.0.0' },
{ name: 'foo', version: '~0.1.4' },
]);
});
});
describe('when semver range should be ""', () => {
it('returns dependencies with invalid semver ranges', () => {
expect(
Expand Down
2 changes: 2 additions & 0 deletions src/lib/is-semver.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { isString } from 'expect-more';
import type { ValidRange } from '../constants';
import {
RANGE_ANY,
RANGE_EXACT,
RANGE_GT,
RANGE_GTE,
Expand All @@ -13,6 +14,7 @@ import {

export function isValidSemverRange(value: unknown): value is ValidRange {
return (
value === RANGE_ANY ||
value === RANGE_EXACT ||
value === RANGE_GT ||
value === RANGE_GTE ||
Expand Down
1 change: 1 addition & 0 deletions src/lib/set-semver-range.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ describe('setSemverRange', () => {
it('sets its semver range to the given range', () => {
(
[
['*', '*'],
['', '1.2.3'],
['>', '>1.2.3'],
['>=', '>=1.2.3'],
Expand Down
5 changes: 2 additions & 3 deletions src/lib/set-semver-range.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ export function setSemverRange(
semverRange: ValidRange,
version: string,
): string {
if (!isSemver(version) || !isValidSemverRange(semverRange)) {
return version;
}
if (!isSemver(version) || !isValidSemverRange(semverRange)) return version;
if (semverRange === '*') return semverRange;
const nextVersion = isLooseSemver(version)
? version.replace(/\.x/g, '.0')
: version;
Expand Down
41 changes: 41 additions & 0 deletions test/scenarios/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,47 @@ export const scenarios = {
},
);
},
/**
* Only `dependencies` is unchecked
* The semver range `*` should be used
* A uses exact versions for `a`
* A should be fixed to use `*` in all other cases
*/
semverRangesDoNotMatchConfigWildcard() {
return createScenario(
[
{
path: 'packages/a/package.json',
before: mockPackage('a', {
deps: ['a@0.1.0'],
devDeps: ['b@0.1.0'],
overrides: ['c@0.1.0'],
pnpmOverrides: ['d@0.1.0'],
peerDeps: ['e@0.1.0'],
resolutions: ['f@0.1.0'],
}),
after: mockPackage('a', {
deps: ['a@0.1.0'],
devDeps: ['*'],
overrides: ['*'],
pnpmOverrides: ['*'],
peerDeps: ['*'],
resolutions: ['*'],
}),
},
],
{
dev: true,
overrides: true,
pnpmOverrides: true,
peer: true,
prod: false,
resolutions: true,
workspace: true,
semverRange: '*',
},
);
},
/**
* A has a pnpm override of C
* B has a pnpm override of C
Expand Down

0 comments on commit 779772b

Please sign in to comment.