syncpack 7.1.0 → 7.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -8
- package/dist/bin-fix-mismatches/fix-mismatches.js +13 -0
- package/dist/bin-fix-mismatches/get-expected-version/index.d.ts +1 -1
- package/dist/bin-fix-mismatches/get-expected-version/index.js +12 -8
- package/dist/bin-lint-semver-ranges/index.js +1 -1
- package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +2 -1
- package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +2 -2
- package/dist/bin-list/index.js +1 -1
- package/dist/bin-list/list-version-groups.d.ts +1 -0
- package/dist/bin-list/list-version-groups.js +9 -5
- package/dist/bin-list/list.d.ts +2 -1
- package/dist/bin-list/list.js +7 -6
- package/dist/bin-list-mismatches/index.js +1 -1
- package/dist/bin-list-mismatches/list-mismatches.d.ts +2 -1
- package/dist/bin-list-mismatches/list-mismatches.js +8 -7
- package/dist/constants.d.ts +4 -0
- package/dist/lib/disk.d.ts +3 -0
- package/dist/lib/disk.js +5 -0
- package/dist/lib/get-input/get-config.d.ts +1 -1
- package/dist/lib/get-input/get-config.js +0 -1
- package/dist/lib/get-input/index.d.ts +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -325,12 +325,7 @@ configuration file (if present), you can use the `--config` option.
|
|
|
325
325
|
"resolutions",
|
|
326
326
|
"scripts"
|
|
327
327
|
],
|
|
328
|
-
"sortFirst": [
|
|
329
|
-
"name",
|
|
330
|
-
"description",
|
|
331
|
-
"version",
|
|
332
|
-
"author"
|
|
333
|
-
],
|
|
328
|
+
"sortFirst": ["name", "description", "version", "author"],
|
|
334
329
|
"source": [],
|
|
335
330
|
"versionGroups": []
|
|
336
331
|
}
|
|
@@ -409,7 +404,7 @@ rest of the repo might need to remain on stable versions.
|
|
|
409
404
|
|
|
410
405
|
You don't want mismatches within your alpha packages, you don't want mismatches
|
|
411
406
|
within the other packages, but you _do_ want those groups to use different
|
|
412
|
-
versions
|
|
407
|
+
versions _to each other_ and not have `syncpack` make them all the same.
|
|
413
408
|
|
|
414
409
|
In the following example, 2 of our packages are using different versions of
|
|
415
410
|
`react` and `react-dom` to the rest of the project.
|
|
@@ -450,7 +445,40 @@ to apply to an entire package:
|
|
|
450
445
|
- A specific dependency in some specific packages only.
|
|
451
446
|
- Any dependency who name matches a pattern such as `@aws-sdk/**`.
|
|
452
447
|
|
|
453
|
-
See [`semverGroups`](#semverGroups) for
|
|
448
|
+
See [`semverGroups`](#semverGroups) for more examples, they work the same way.
|
|
449
|
+
|
|
450
|
+
#### `versionGroup.isBanned`
|
|
451
|
+
|
|
452
|
+
Remove dependencies which you've decided should never be allowed.
|
|
453
|
+
|
|
454
|
+
```json
|
|
455
|
+
{
|
|
456
|
+
"versionGroups": [
|
|
457
|
+
{
|
|
458
|
+
"isBanned": true,
|
|
459
|
+
"dependencies": ["never-gonna"],
|
|
460
|
+
"packages": ["**"]
|
|
461
|
+
}
|
|
462
|
+
]
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
#### `versionGroup.pinVersion`
|
|
467
|
+
|
|
468
|
+
Pin the version of all dependencies in this group to match this specific version
|
|
469
|
+
you've defined.
|
|
470
|
+
|
|
471
|
+
```json
|
|
472
|
+
{
|
|
473
|
+
"versionGroups": [
|
|
474
|
+
{
|
|
475
|
+
"pinVersion": "3.55.0",
|
|
476
|
+
"dependencies": ["@aws-sdk/**"],
|
|
477
|
+
"packages": ["**"]
|
|
478
|
+
}
|
|
479
|
+
]
|
|
480
|
+
}
|
|
481
|
+
```
|
|
454
482
|
|
|
455
483
|
### `semverGroups`
|
|
456
484
|
|
|
@@ -9,6 +9,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
9
9
|
exports.__esModule = true;
|
|
10
10
|
exports.fixMismatches = void 0;
|
|
11
11
|
var chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
var expect_more_1 = require("expect-more");
|
|
12
13
|
var list_version_groups_1 = require("../bin-list/list-version-groups");
|
|
13
14
|
var write_if_changed_1 = require("../lib/write-if-changed");
|
|
14
15
|
var get_expected_version_1 = require("./get-expected-version");
|
|
@@ -39,6 +40,7 @@ function fixMismatches(input, disk) {
|
|
|
39
40
|
});
|
|
40
41
|
});
|
|
41
42
|
input.wrappers.forEach(function (wrapper) {
|
|
43
|
+
removeEmptyIndexes(wrapper);
|
|
42
44
|
(0, write_if_changed_1.writeIfChanged)(disk, {
|
|
43
45
|
contents: wrapper.contents,
|
|
44
46
|
filePath: wrapper.filePath,
|
|
@@ -46,6 +48,17 @@ function fixMismatches(input, disk) {
|
|
|
46
48
|
json: wrapper.json
|
|
47
49
|
});
|
|
48
50
|
});
|
|
51
|
+
/**
|
|
52
|
+
* Remove eg `{"dependencies": {}, "devDependencies": {}}`
|
|
53
|
+
*/
|
|
54
|
+
function removeEmptyIndexes(wrapper) {
|
|
55
|
+
input.dependencyTypes.forEach(function (dependencyType) {
|
|
56
|
+
var deps = wrapper.contents[dependencyType];
|
|
57
|
+
if (deps && Object.values(deps).every(expect_more_1.isUndefined)) {
|
|
58
|
+
delete wrapper.contents[dependencyType];
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
49
62
|
}
|
|
50
63
|
exports.fixMismatches = fixMismatches;
|
|
51
64
|
var templateObject_1;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ProgramInput } from '../../lib/get-input';
|
|
2
2
|
import type { IndexedVersionGroup } from '../../lib/get-input/get-instances';
|
|
3
|
-
export declare function getExpectedVersion(name: string, versionGroup: Pick<IndexedVersionGroup, 'instances' | 'pinVersion'>, input: Pick<ProgramInput, 'workspace' | 'wrappers'>): string;
|
|
3
|
+
export declare function getExpectedVersion(name: string, versionGroup: Pick<IndexedVersionGroup, 'isBanned' | 'instances' | 'pinVersion'>, input: Pick<ProgramInput, 'workspace' | 'wrappers'>): string | undefined;
|
|
@@ -5,13 +5,17 @@ var get_highest_version_1 = require("./get-highest-version");
|
|
|
5
5
|
var get_pinned_version_1 = require("./get-pinned-version");
|
|
6
6
|
var get_workspace_version_1 = require("./get-workspace-version");
|
|
7
7
|
function getExpectedVersion(name, versionGroup, input) {
|
|
8
|
-
return
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
return versionGroup.isBanned === true
|
|
9
|
+
? // remove this dependency
|
|
10
|
+
undefined
|
|
11
|
+
: (0, get_pinned_version_1.getPinnedVersion)(versionGroup) ||
|
|
12
|
+
(input.workspace === true &&
|
|
13
|
+
(0, get_workspace_version_1.getWorkspaceVersion)(name, input.wrappers)) ||
|
|
14
|
+
(0, get_highest_version_1.getHighestVersion)(versionGroup.instances
|
|
15
|
+
.filter(function (instance) { return instance.name === name; })
|
|
16
|
+
.map(function (_a) {
|
|
17
|
+
var version = _a.version;
|
|
18
|
+
return version;
|
|
19
|
+
}));
|
|
16
20
|
}
|
|
17
21
|
exports.getExpectedVersion = getExpectedVersion;
|
|
@@ -66,5 +66,5 @@ commander_1.program.on('--help', function () {
|
|
|
66
66
|
semverRange: commander_1.program.opts().semverRange,
|
|
67
67
|
source: commander_1.program.opts().source,
|
|
68
68
|
workspace: commander_1.program.opts().workspace
|
|
69
|
-
}));
|
|
69
|
+
}), disk_1.disk);
|
|
70
70
|
var templateObject_1, templateObject_2;
|
|
@@ -11,7 +11,7 @@ exports.lintSemverRanges = void 0;
|
|
|
11
11
|
var chalk_1 = __importDefault(require("chalk"));
|
|
12
12
|
var set_semver_range_1 = require("../lib/set-semver-range");
|
|
13
13
|
var list_semver_group_mismatches_1 = require("./list-semver-group-mismatches");
|
|
14
|
-
function lintSemverRanges(input) {
|
|
14
|
+
function lintSemverRanges(input, disk) {
|
|
15
15
|
var isInvalid = false;
|
|
16
16
|
/**
|
|
17
17
|
* Reverse the list so the default/ungrouped semver group is rendered first
|
|
@@ -33,7 +33,7 @@ function lintSemverRanges(input) {
|
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
35
|
if (isInvalid) {
|
|
36
|
-
process.exit(1);
|
|
36
|
+
disk.process.exit(1);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
exports.lintSemverRanges = lintSemverRanges;
|
package/dist/bin-list/index.js
CHANGED
|
@@ -21,7 +21,8 @@ var expect_more_1 = require("expect-more");
|
|
|
21
21
|
var group_by_1 = require("../lib/group-by");
|
|
22
22
|
var sort_by_name_1 = require("../lib/sort-by-name");
|
|
23
23
|
function listVersionGroups(versionGroup) {
|
|
24
|
-
var
|
|
24
|
+
var instances = versionGroup.instances;
|
|
25
|
+
var instancesByName = (0, group_by_1.groupBy)('name', instances.sort(sort_by_name_1.sortByName));
|
|
25
26
|
return Object.entries(instancesByName).map(function (_a) {
|
|
26
27
|
var _b = __read(_a, 2), name = _b[0], instances = _b[1];
|
|
27
28
|
var pinnedVersion = versionGroup.pinVersion;
|
|
@@ -31,13 +32,16 @@ function listVersionGroups(versionGroup) {
|
|
|
31
32
|
return version;
|
|
32
33
|
});
|
|
33
34
|
var uniques = Array.from(new Set(versions));
|
|
34
|
-
var
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
var isBanned = versionGroup.isBanned === true;
|
|
36
|
+
var hasMismatches = isBanned ||
|
|
37
|
+
versions.some(function (version, i) {
|
|
38
|
+
return (hasPinnedVersion && version !== pinnedVersion) ||
|
|
39
|
+
(i > 0 && version !== versions[i - 1]);
|
|
40
|
+
});
|
|
38
41
|
return {
|
|
39
42
|
hasMismatches: hasMismatches,
|
|
40
43
|
instances: instances,
|
|
44
|
+
isBanned: isBanned,
|
|
41
45
|
name: name,
|
|
42
46
|
uniques: uniques
|
|
43
47
|
};
|
package/dist/bin-list/list.d.ts
CHANGED
package/dist/bin-list/list.js
CHANGED
|
@@ -10,7 +10,7 @@ exports.__esModule = true;
|
|
|
10
10
|
exports.list = void 0;
|
|
11
11
|
var chalk_1 = __importDefault(require("chalk"));
|
|
12
12
|
var list_version_groups_1 = require("./list-version-groups");
|
|
13
|
-
function list(input) {
|
|
13
|
+
function list(input, disk) {
|
|
14
14
|
var isInvalid = false;
|
|
15
15
|
/**
|
|
16
16
|
* Reverse the list so the default/ungrouped version group is rendered first
|
|
@@ -24,10 +24,11 @@ function list(input) {
|
|
|
24
24
|
console.log((0, chalk_1["default"])(templateObject_1 || (templateObject_1 = __makeTemplateObject(["{dim = Version Group ", " ", "}"], ["{dim = Version Group ", " ", "}"])), i, '='.repeat(63)));
|
|
25
25
|
}
|
|
26
26
|
groups.forEach(function (_a) {
|
|
27
|
-
var hasMismatches = _a.hasMismatches, name = _a.name, uniques = _a.uniques;
|
|
27
|
+
var hasMismatches = _a.hasMismatches, isBanned = _a.isBanned, name = _a.name, uniques = _a.uniques;
|
|
28
28
|
var versionList = uniques.sort().join(', ');
|
|
29
|
-
console.log(
|
|
30
|
-
? (0, chalk_1["default"])(templateObject_2 || (templateObject_2 = __makeTemplateObject(["{red \u2715 ", "} {dim.red
|
|
29
|
+
console.log(isBanned
|
|
30
|
+
? (0, chalk_1["default"])(templateObject_2 || (templateObject_2 = __makeTemplateObject(["{red \u2715 ", "} {dim.red remove this dependency}"], ["{red \u2715 ", "} {dim.red remove this dependency}"])), name) : hasMismatches
|
|
31
|
+
? (0, chalk_1["default"])(templateObject_3 || (templateObject_3 = __makeTemplateObject(["{red \u2715 ", "} {dim.red ", "}"], ["{red \u2715 ", "} {dim.red ", "}"])), name, versionList) : (0, chalk_1["default"])(templateObject_4 || (templateObject_4 = __makeTemplateObject(["{dim -} {white ", "} {dim ", "}"], ["{dim -} {white ", "} {dim ", "}"])), name, versionList));
|
|
31
32
|
});
|
|
32
33
|
if (groups.some(function (_a) {
|
|
33
34
|
var hasMismatches = _a.hasMismatches;
|
|
@@ -37,8 +38,8 @@ function list(input) {
|
|
|
37
38
|
}
|
|
38
39
|
});
|
|
39
40
|
if (isInvalid) {
|
|
40
|
-
process.exit(1);
|
|
41
|
+
disk.process.exit(1);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
exports.list = list;
|
|
44
|
-
var templateObject_1, templateObject_2, templateObject_3;
|
|
45
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
@@ -13,7 +13,7 @@ var path_1 = require("path");
|
|
|
13
13
|
var get_expected_version_1 = require("../bin-fix-mismatches/get-expected-version");
|
|
14
14
|
var list_version_groups_1 = require("../bin-list/list-version-groups");
|
|
15
15
|
var constants_1 = require("../constants");
|
|
16
|
-
function listMismatches(input) {
|
|
16
|
+
function listMismatches(input, disk) {
|
|
17
17
|
var isInvalid = false;
|
|
18
18
|
/**
|
|
19
19
|
* Reverse the list so the default/ungrouped version group is rendered first
|
|
@@ -33,24 +33,25 @@ function listMismatches(input) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
groups.forEach(function (_a) {
|
|
36
|
-
var instances = _a.instances, name = _a.name;
|
|
36
|
+
var instances = _a.instances, isBanned = _a.isBanned, name = _a.name;
|
|
37
37
|
var expectedVersion = (0, get_expected_version_1.getExpectedVersion)(name, versionGroup, input);
|
|
38
|
-
console.log(
|
|
38
|
+
console.log(isBanned
|
|
39
|
+
? (0, chalk_1["default"])(templateObject_2 || (templateObject_2 = __makeTemplateObject(["{red \u2715 ", "} {dim.red remove this dependency}"], ["{red \u2715 ", "} {dim.red remove this dependency}"])), name) : (0, chalk_1["default"])(templateObject_3 || (templateObject_3 = __makeTemplateObject(["{dim -} ", " {green.dim ", "}"], ["{dim -} ", " {green.dim ", "}"])), name, expectedVersion));
|
|
39
40
|
instances.forEach(function (_a) {
|
|
40
41
|
var dependencyType = _a.dependencyType, version = _a.version, wrapper = _a.wrapper;
|
|
41
42
|
if (dependencyType === 'workspace') {
|
|
42
43
|
var shortPath = (0, path_1.relative)(constants_1.CWD, wrapper.filePath);
|
|
43
|
-
console.log((0, chalk_1["default"])(
|
|
44
|
+
console.log((0, chalk_1["default"])(templateObject_4 || (templateObject_4 = __makeTemplateObject(["{red ", " {dim at ", "}}"], ["{red ", " {dim at ", "}}"])), version, shortPath));
|
|
44
45
|
}
|
|
45
46
|
else {
|
|
46
|
-
console.log((0, chalk_1["default"])(
|
|
47
|
+
console.log((0, chalk_1["default"])(templateObject_5 || (templateObject_5 = __makeTemplateObject(["{red ", " {dim in ", " of ", "}}"], ["{red ", " {dim in ", " of ", "}}"])), version, dependencyType, wrapper.contents.name));
|
|
47
48
|
}
|
|
48
49
|
});
|
|
49
50
|
});
|
|
50
51
|
});
|
|
51
52
|
if (isInvalid) {
|
|
52
|
-
process.exit(1);
|
|
53
|
+
disk.process.exit(1);
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
exports.listMismatches = listMismatches;
|
|
56
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
57
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
package/dist/constants.d.ts
CHANGED
|
@@ -30,6 +30,10 @@ export interface VersionGroup {
|
|
|
30
30
|
* the names of the dependencies (eg. "lodash") which belong to this group
|
|
31
31
|
*/
|
|
32
32
|
dependencies: string[];
|
|
33
|
+
/**
|
|
34
|
+
* optionally force all dependencies in this group to be removed
|
|
35
|
+
*/
|
|
36
|
+
isBanned?: true;
|
|
33
37
|
/**
|
|
34
38
|
* optionally force all dependencies in this group to have this version
|
|
35
39
|
*/
|
package/dist/lib/disk.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { SyncpackConfig } from '../constants';
|
|
2
2
|
export declare type Disk = typeof disk;
|
|
3
3
|
export declare const disk: {
|
|
4
|
+
readonly process: {
|
|
5
|
+
readonly exit: (code: number) => void;
|
|
6
|
+
};
|
|
4
7
|
readonly globSync: (pattern: string) => string[];
|
|
5
8
|
readonly readConfigFileSync: (configPath?: string | undefined) => Partial<SyncpackConfig>;
|
|
6
9
|
readonly readFileSync: (filePath: string) => string;
|
package/dist/lib/disk.js
CHANGED
|
@@ -10,6 +10,11 @@ var constants_1 = require("../constants");
|
|
|
10
10
|
var log_1 = require("./log");
|
|
11
11
|
var client = (0, cosmiconfig_1.cosmiconfigSync)('syncpack');
|
|
12
12
|
exports.disk = {
|
|
13
|
+
process: {
|
|
14
|
+
exit: function (code) {
|
|
15
|
+
process.exit(code);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
13
18
|
globSync: function (pattern) {
|
|
14
19
|
return (0, glob_1.sync)(pattern, {
|
|
15
20
|
ignore: '**/node_modules/**',
|
|
@@ -40,7 +40,6 @@ var getConfig = function (disk, program) {
|
|
|
40
40
|
var dependencyTypes = dev || workspace || overrides || peer || prod || resolutions
|
|
41
41
|
? constants_1.DEPENDENCY_TYPES.filter(function (type) {
|
|
42
42
|
return (type === 'devDependencies' && dev) ||
|
|
43
|
-
(type === 'workspace' && workspace) ||
|
|
44
43
|
(type === 'overrides' && overrides) ||
|
|
45
44
|
(type === 'peerDependencies' && peer) ||
|
|
46
45
|
(type === 'dependencies' && prod) ||
|
|
@@ -16,5 +16,5 @@ export declare type ProgramInput = SyncpackConfig & {
|
|
|
16
16
|
* @param program Options received from CLI arguments
|
|
17
17
|
*/
|
|
18
18
|
export declare function getInput(disk: Disk, program: Partial<SyncpackConfig & {
|
|
19
|
-
configPath: string;
|
|
19
|
+
configPath: string | undefined;
|
|
20
20
|
}>): ProgramInput;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "syncpack",
|
|
3
3
|
"description": "Manage multiple package.json files, such as in Lerna Monorepos and Yarn/Pnpm Workspaces",
|
|
4
|
-
"version": "7.1
|
|
4
|
+
"version": "7.2.1",
|
|
5
5
|
"author": "Jamie Mason <jamie@foldleft.io> (https://github.com/JamieMason)",
|
|
6
6
|
"bin": {
|
|
7
7
|
"syncpack": "dist/bin.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"commander": "9.2.0",
|
|
29
29
|
"cosmiconfig": "7.0.1",
|
|
30
30
|
"expect-more": "1.2.0",
|
|
31
|
-
"fp-ts": "2.12.
|
|
31
|
+
"fp-ts": "2.12.1",
|
|
32
32
|
"fs-extra": "10.1.0",
|
|
33
33
|
"glob": "8.0.1",
|
|
34
34
|
"minimatch": "5.0.1",
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
"@types/fs-extra": "9.0.13",
|
|
40
40
|
"@types/glob": "7.2.0",
|
|
41
41
|
"@types/jest": "27.4.1",
|
|
42
|
-
"@types/node": "17.0.
|
|
42
|
+
"@types/node": "17.0.31",
|
|
43
43
|
"@types/semver": "7.3.9",
|
|
44
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
45
|
-
"@typescript-eslint/parser": "5.
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "5.21.0",
|
|
45
|
+
"@typescript-eslint/parser": "5.21.0",
|
|
46
46
|
"eslint": "8.14.0",
|
|
47
47
|
"eslint-plugin-import": "2.26.0",
|
|
48
48
|
"expect-more-jest": "5.4.0",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"prettier": "2.6.2",
|
|
51
51
|
"rimraf": "3.0.2",
|
|
52
52
|
"ts-jest": "27.1.4",
|
|
53
|
-
"typescript": "4.6.
|
|
53
|
+
"typescript": "4.6.4"
|
|
54
54
|
},
|
|
55
55
|
"engines": {
|
|
56
56
|
"node": ">=10"
|