Skip to content

Commit 5dbcfd4

Browse files
committed
feat(bin): override package locations using repeatable --source options
BREAKING CHANGE: Previously the location of package.json files could be overridden like so: ``` syncpack list './package.json' './packages/*/package.json' ``` This is now done using a repeatable `--source` option: ``` syncpack list --source './package.json' --source './packages/*/package.json' ``` This change is to make way for new commands which will also require an overridable `--target` option.
1 parent a40a3da commit 5dbcfd4

File tree

7 files changed

+47
-65
lines changed

7 files changed

+47
-65
lines changed

src/bin-fix-mismatches.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
#!/usr/bin/env node
22

33
import chalk from 'chalk';
4-
import * as program from 'commander';
5-
import * as _ from 'lodash';
4+
import program = require('commander');
5+
import _ = require('lodash');
66
import { relative } from 'path';
7-
import { FIX_MISMATCHES } from './constants';
7+
import { OPTION_SOURCES } from './constants';
88
import { setVersionsToNewestMismatch } from './manifests';
99

10-
let packages: string[] = [];
10+
const collect = (value: string, values: string[] = []) => values.concat(value);
1111

12-
program
13-
.action((...args) => {
14-
packages = args.filter((arg) => arg && typeof arg === 'string');
15-
})
16-
.parse(process.argv);
12+
program.option(OPTION_SOURCES.spec, OPTION_SOURCES.description, collect).parse(process.argv);
1713

18-
const patterns: string[] = packages.length ? packages : FIX_MISMATCHES.defaultPatterns;
14+
const sources: string[] = program.source && program.source.length ? program.source : OPTION_SOURCES.default;
1915

20-
setVersionsToNewestMismatch(...patterns).then((descriptors) => {
16+
setVersionsToNewestMismatch(...sources).then((descriptors) => {
2117
_.each(descriptors, (descriptor) => {
2218
console.log(chalk.blue(`./${relative('.', descriptor.path)}`));
2319
});

src/bin-format.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
#!/usr/bin/env node
22

33
import chalk from 'chalk';
4-
import * as program from 'commander';
5-
import * as _ from 'lodash';
4+
import program = require('commander');
5+
import _ = require('lodash');
66
import { relative } from 'path';
7-
import { FORMAT } from './constants';
7+
import { OPTION_SOURCES } from './constants';
88
import { format } from './manifests';
99

10-
let packages: string[] = [];
10+
const collect = (value: string, values: string[] = []) => values.concat(value);
1111

12-
program
13-
.action((...args) => {
14-
packages = args.filter((arg) => arg && typeof arg === 'string');
15-
})
16-
.parse(process.argv);
12+
program.option(OPTION_SOURCES.spec, OPTION_SOURCES.description, collect).parse(process.argv);
1713

18-
const patterns: string[] = packages.length ? packages : FORMAT.defaultPatterns;
14+
const sources: string[] = program.source && program.source.length ? program.source : OPTION_SOURCES.default;
1915

20-
format(...patterns).then((descriptors) => {
16+
format(...sources).then((descriptors) => {
2117
_.each(descriptors, (descriptor) => {
2218
console.log(chalk.blue(`./${relative('.', descriptor.path)}`));
2319
});

src/bin-list-mismatches.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
#!/usr/bin/env node
22

33
import chalk from 'chalk';
4-
import * as program from 'commander';
5-
import * as _ from 'lodash';
6-
import { LIST_MISMATCHES } from './constants';
4+
import program = require('commander');
5+
import _ = require('lodash');
6+
import { OPTION_SOURCES } from './constants';
77
import { getMismatchedVersions } from './manifests';
88

9-
let packages: string[] = [];
9+
const collect = (value: string, values: string[] = []) => values.concat(value);
1010

11-
program
12-
.action((...args) => {
13-
packages = args.filter((arg) => arg && typeof arg === 'string');
14-
})
15-
.parse(process.argv);
11+
program.option(OPTION_SOURCES.spec, OPTION_SOURCES.description, collect).parse(process.argv);
1612

17-
const patterns: string[] = packages.length ? packages : LIST_MISMATCHES.defaultPatterns;
13+
const sources: string[] = program.source && program.source.length ? program.source : OPTION_SOURCES.default;
1814

19-
getMismatchedVersions(...patterns).then((versionByName) => {
15+
getMismatchedVersions(...sources).then((versionByName) => {
2016
_.each(versionByName, (versions, name) => {
2117
console.log(chalk.yellow(name), chalk.dim(versions.join(', ')));
2218
});

src/bin-list.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
#!/usr/bin/env node
22

33
import chalk from 'chalk';
4-
import * as program from 'commander';
5-
import * as _ from 'lodash';
6-
import { LIST } from './constants';
4+
import program = require('commander');
5+
import _ = require('lodash');
6+
import { OPTION_SOURCES } from './constants';
77
import { getVersions } from './manifests';
88

9-
let packages: string[] = [];
9+
const collect = (value: string, values: string[] = []) => values.concat(value);
1010

11-
program
12-
.action((...args) => {
13-
packages = args.filter((arg) => arg && typeof arg === 'string');
14-
})
15-
.parse(process.argv);
11+
program.option(OPTION_SOURCES.spec, OPTION_SOURCES.description, collect).parse(process.argv);
1612

17-
const patterns: string[] = packages.length ? packages : LIST.defaultPatterns;
13+
const sources: string[] = program.source && program.source.length ? program.source : OPTION_SOURCES.default;
1814

19-
getVersions(...patterns).then((versionByName) => {
15+
getVersions(...sources).then((versionByName) => {
2016
_.each(versionByName, (versions, name) => {
2117
if (versions.length > 1) {
2218
console.log(chalk.yellow(name), chalk.dim(versions.join(', ')));

src/bin-set-semver-ranges.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
#!/usr/bin/env node
22

33
import chalk from 'chalk';
4-
import * as program from 'commander';
5-
import * as _ from 'lodash';
4+
import program = require('commander');
5+
import _ = require('lodash');
66
import { relative } from 'path';
7-
import { OPTION_SEMVER_RANGE, SET_SEMVER_RANGES } from './constants';
7+
import { OPTION_SEMVER_RANGE, OPTION_SOURCES } from './constants';
88
import { setVersionRange } from './manifests';
99

10-
let packages: string[] = [];
10+
const collect = (value: string, values: string[] = []) => values.concat(value);
1111

1212
program
1313
.option(OPTION_SEMVER_RANGE.spec, OPTION_SEMVER_RANGE.description)
14-
.action((...args) => {
15-
packages = args.filter((arg) => arg && typeof arg === 'string');
16-
})
14+
.option(OPTION_SOURCES.spec, OPTION_SOURCES.description, collect)
1715
.parse(process.argv);
1816

1917
const semverRange: string = program.semverRange || OPTION_SEMVER_RANGE.default;
20-
const patterns: string[] = packages.length ? packages : SET_SEMVER_RANGES.defaultPatterns;
18+
const sources: string[] = program.source && program.source.length ? program.source : OPTION_SOURCES.default;
2119

22-
setVersionRange(semverRange, ...patterns).then((descriptors) => {
20+
setVersionRange(semverRange, ...sources).then((descriptors) => {
2321
_.each(descriptors, (descriptor) => {
2422
console.log(chalk.blue(`./${relative('.', descriptor.path)}`));
2523
});

src/bin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env node
22

3-
import * as program from 'commander';
3+
import program = require('commander');
44
import { FIX_MISMATCHES, FORMAT, LIST, LIST_MISMATCHES, SET_SEMVER_RANGES, VERSION } from './constants';
55

66
program

src/constants.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,36 +31,30 @@ export const SEMVER_ORDER = [
3131
const DEFAULT_SEMVER_RANGE = RANGE_EXACT;
3232
const MONOREPO_PATTERN = './package.json';
3333
const PACKAGES_PATTERN = './packages/*/package.json';
34-
const PACKAGES_PATTERNS = [PACKAGES_PATTERN];
3534
const ALL_PATTERNS = [MONOREPO_PATTERN, PACKAGES_PATTERN];
3635

3736
export const FIX_MISMATCHES = {
38-
command: 'fix-mismatches [packages...]',
39-
defaultPatterns: PACKAGES_PATTERNS,
37+
command: 'fix-mismatches',
4038
description: 'set dependencies used with different versions to the same version'
4139
};
4240

4341
export const FORMAT = {
44-
command: 'format [packages...]',
45-
defaultPatterns: ALL_PATTERNS,
42+
command: 'format',
4643
description: 'sort and shorten properties according to a convention'
4744
};
4845

4946
export const LIST = {
50-
command: 'list [packages...]',
51-
defaultPatterns: ALL_PATTERNS,
47+
command: 'list',
5248
description: 'list every dependency used in your packages'
5349
};
5450

5551
export const LIST_MISMATCHES = {
56-
command: 'list-mismatches [packages...]',
57-
defaultPatterns: PACKAGES_PATTERNS,
52+
command: 'list-mismatches',
5853
description: 'list every dependency used with different versions in your packages'
5954
};
6055

6156
export const SET_SEMVER_RANGES = {
62-
command: 'set-semver-ranges [packages...]',
63-
defaultPatterns: ALL_PATTERNS,
57+
command: 'set-semver-ranges',
6458
description: 'set semver ranges to the given format'
6559
};
6660

@@ -71,3 +65,9 @@ export const OPTION_SEMVER_RANGE = {
7165
`${RANGE_GTE}, ${RANGE_GT}, or ${RANGE_ANY}. defaults to "${DEFAULT_SEMVER_RANGE}"`,
7266
spec: '-r, --semver-range <range>'
7367
};
68+
69+
export const OPTION_SOURCES = {
70+
default: ALL_PATTERNS,
71+
description: 'glob pattern for package.json files to read from',
72+
spec: '-s, --source [pattern]'
73+
};

0 commit comments

Comments
 (0)