syncpack 8.5.14 → 9.0.0

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.
Files changed (150) hide show
  1. package/README.md +194 -108
  2. package/dist/bin-fix-mismatches/fix-mismatches-cli.d.ts +2 -2
  3. package/dist/bin-fix-mismatches/fix-mismatches-cli.js +1 -1
  4. package/dist/bin-fix-mismatches/fix-mismatches.d.ts +2 -2
  5. package/dist/bin-fix-mismatches/fix-mismatches.js +35 -8
  6. package/dist/bin-fix-mismatches/index.js +9 -18
  7. package/dist/bin-format/format-cli.d.ts +2 -2
  8. package/dist/bin-format/format-cli.js +1 -1
  9. package/dist/bin-format/format.d.ts +2 -2
  10. package/dist/bin-format/index.js +2 -0
  11. package/dist/bin-lint-semver-ranges/index.js +10 -19
  12. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.d.ts +2 -2
  13. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.js +1 -1
  14. package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +2 -2
  15. package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +13 -14
  16. package/dist/bin-list/index.js +9 -18
  17. package/dist/bin-list/list-cli.d.ts +2 -2
  18. package/dist/bin-list/list-cli.js +1 -1
  19. package/dist/bin-list/list.d.ts +2 -2
  20. package/dist/bin-list/list.js +2 -2
  21. package/dist/bin-list-mismatches/index.js +9 -18
  22. package/dist/bin-list-mismatches/list-mismatches-cli.d.ts +2 -2
  23. package/dist/bin-list-mismatches/list-mismatches-cli.js +1 -1
  24. package/dist/bin-list-mismatches/list-mismatches.d.ts +2 -2
  25. package/dist/bin-list-mismatches/list-mismatches.js +6 -6
  26. package/dist/bin-set-semver-ranges/index.js +10 -19
  27. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.d.ts +2 -2
  28. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.js +1 -1
  29. package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +2 -2
  30. package/dist/constants.d.ts +11 -7
  31. package/dist/constants.js +11 -22
  32. package/dist/get-context/$R.d.ts +13 -0
  33. package/dist/get-context/$R.js +56 -0
  34. package/dist/{lib/get-context → get-context}/get-all-instances.d.ts +0 -0
  35. package/dist/{lib/get-context → get-context}/get-all-instances.js +1 -1
  36. package/dist/get-context/get-config/get-core-types.d.ts +36 -0
  37. package/dist/get-context/get-config/get-core-types.js +68 -0
  38. package/dist/get-context/get-config/get-custom-types.d.ts +4 -0
  39. package/dist/get-context/get-config/get-custom-types.js +28 -0
  40. package/dist/get-context/get-config/get-enabled-types.d.ts +4 -0
  41. package/dist/get-context/get-config/get-enabled-types.js +19 -0
  42. package/dist/get-context/get-config/index.d.ts +7 -0
  43. package/dist/get-context/get-config/index.js +115 -0
  44. package/dist/get-context/get-config/path-strategy/index.d.ts +8 -0
  45. package/dist/get-context/get-config/path-strategy/index.js +18 -0
  46. package/dist/get-context/get-config/path-strategy/lib/get-non-empty-string-prop.d.ts +4 -0
  47. package/dist/get-context/get-config/path-strategy/lib/get-non-empty-string-prop.js +11 -0
  48. package/dist/get-context/get-config/path-strategy/name-and-version-props.d.ts +2 -0
  49. package/dist/get-context/get-config/path-strategy/name-and-version-props.js +66 -0
  50. package/dist/get-context/get-config/path-strategy/name-and-version-string.d.ts +2 -0
  51. package/dist/get-context/get-config/path-strategy/name-and-version-string.js +60 -0
  52. package/dist/get-context/get-config/path-strategy/types.d.ts +15 -0
  53. package/dist/{lib/get-context/get-config/config.js → get-context/get-config/path-strategy/types.js} +0 -0
  54. package/dist/get-context/get-config/path-strategy/version-string.d.ts +2 -0
  55. package/dist/get-context/get-config/path-strategy/version-string.js +60 -0
  56. package/dist/get-context/get-config/path-strategy/versions-by-name.d.ts +2 -0
  57. package/dist/get-context/get-config/path-strategy/versions-by-name.js +39 -0
  58. package/dist/get-context/get-config/schema/base-group.d.ts +6 -0
  59. package/dist/get-context/get-config/schema/base-group.js +9 -0
  60. package/dist/get-context/get-config/schema/index.d.ts +1276 -0
  61. package/dist/get-context/get-config/schema/index.js +104 -0
  62. package/dist/get-context/get-config/schema/paths.d.ts +89 -0
  63. package/dist/get-context/get-config/schema/paths.js +33 -0
  64. package/dist/get-context/get-config/schema/semver-group.d.ts +101 -0
  65. package/dist/get-context/get-config/schema/semver-group.js +50 -0
  66. package/dist/get-context/get-config/schema/semver-range.d.ts +2 -0
  67. package/dist/get-context/get-config/schema/semver-range.js +16 -0
  68. package/dist/get-context/get-config/schema/version-group.d.ts +151 -0
  69. package/dist/get-context/get-config/schema/version-group.js +31 -0
  70. package/dist/get-context/get-groups/get-semver-groups.d.ts +4 -0
  71. package/dist/{lib/get-context → get-context}/get-groups/get-semver-groups.js +2 -1
  72. package/dist/get-context/get-groups/get-version-groups.d.ts +4 -0
  73. package/dist/{lib/get-context → get-context}/get-groups/get-version-groups.js +2 -1
  74. package/dist/{lib/get-context → get-context}/get-groups/semver-group/index.d.ts +10 -11
  75. package/dist/get-context/get-groups/semver-group/index.js +56 -0
  76. package/dist/{lib/get-context → get-context}/get-groups/version-group/index.d.ts +5 -6
  77. package/dist/{lib/get-context → get-context}/get-groups/version-group/index.js +0 -0
  78. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/get-highest-version.d.ts +0 -0
  79. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/get-highest-version.js +2 -2
  80. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/index.d.ts +3 -1
  81. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/index.js +10 -9
  82. package/dist/get-context/get-package-json-files/get-file-paths.d.ts +14 -0
  83. package/dist/get-context/get-package-json-files/get-file-paths.js +40 -0
  84. package/dist/get-context/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +4 -0
  85. package/dist/get-context/get-package-json-files/get-patterns/get-lerna-patterns.js +19 -0
  86. package/dist/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +4 -0
  87. package/dist/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.js +23 -0
  88. package/dist/get-context/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +4 -0
  89. package/dist/get-context/get-package-json-files/get-patterns/get-yarn-patterns.js +20 -0
  90. package/dist/get-context/get-package-json-files/get-patterns/index.d.ts +11 -0
  91. package/dist/get-context/get-package-json-files/get-patterns/index.js +70 -0
  92. package/dist/get-context/get-package-json-files/get-patterns/lib/get-array-of-strings.d.ts +1 -0
  93. package/dist/get-context/get-package-json-files/get-patterns/lib/get-array-of-strings.js +10 -0
  94. package/dist/get-context/get-package-json-files/get-patterns/props.d.ts +6 -0
  95. package/dist/get-context/get-package-json-files/get-patterns/props.js +48 -0
  96. package/dist/{lib/get-context → get-context}/get-package-json-files/get-patterns/read-json-safe.d.ts +4 -3
  97. package/dist/get-context/get-package-json-files/get-patterns/read-json-safe.js +20 -0
  98. package/dist/get-context/get-package-json-files/get-patterns/read-yaml-safe.d.ts +4 -0
  99. package/dist/get-context/get-package-json-files/get-patterns/read-yaml-safe.js +11 -0
  100. package/dist/get-context/get-package-json-files/index.d.ts +5 -0
  101. package/dist/get-context/get-package-json-files/index.js +16 -0
  102. package/dist/{lib/get-context → get-context}/get-package-json-files/package-json-file/index.d.ts +7 -6
  103. package/dist/{lib/get-context → get-context}/get-package-json-files/package-json-file/index.js +28 -38
  104. package/dist/{lib/get-context → get-context}/get-package-json-files/package-json-file/instance.d.ts +6 -6
  105. package/dist/get-context/get-package-json-files/package-json-file/instance.js +62 -0
  106. package/dist/{lib/get-context → get-context}/index.d.ts +4 -5
  107. package/dist/{lib/get-context → get-context}/index.js +1 -1
  108. package/dist/lib/disk.d.ts +11 -11
  109. package/dist/lib/error.d.ts +12 -0
  110. package/dist/lib/error.js +43 -0
  111. package/dist/lib/exit-if-invalid.d.ts +2 -2
  112. package/dist/lib/is-semver.d.ts +2 -2
  113. package/dist/lib/set-semver-range.d.ts +2 -2
  114. package/dist/lib/show-help-on-error.d.ts +2 -0
  115. package/dist/lib/show-help-on-error.js +16 -0
  116. package/dist/lib/write-if-changed.d.ts +2 -2
  117. package/dist/option.d.ts +4 -10
  118. package/dist/option.js +6 -16
  119. package/dist/types.d.ts +88 -0
  120. package/dist/{lib/get-context/get-config/internal-config.js → types.js} +0 -0
  121. package/package.json +4 -3
  122. package/dist/lib/get-context/get-config/config.d.ts +0 -151
  123. package/dist/lib/get-context/get-config/index.d.ts +0 -8
  124. package/dist/lib/get-context/get-config/index.js +0 -160
  125. package/dist/lib/get-context/get-config/internal-config.d.ts +0 -24
  126. package/dist/lib/get-context/get-groups/get-semver-groups.d.ts +0 -4
  127. package/dist/lib/get-context/get-groups/get-version-groups.d.ts +0 -4
  128. package/dist/lib/get-context/get-groups/semver-group/index.js +0 -33
  129. package/dist/lib/get-context/get-package-json-files/get-file-paths.d.ts +0 -12
  130. package/dist/lib/get-context/get-package-json-files/get-file-paths.js +0 -55
  131. package/dist/lib/get-context/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +0 -3
  132. package/dist/lib/get-context/get-package-json-files/get-patterns/get-lerna-patterns.js +0 -40
  133. package/dist/lib/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +0 -3
  134. package/dist/lib/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.js +0 -45
  135. package/dist/lib/get-context/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +0 -3
  136. package/dist/lib/get-context/get-package-json-files/get-patterns/get-yarn-patterns.js +0 -46
  137. package/dist/lib/get-context/get-package-json-files/get-patterns/index.d.ts +0 -10
  138. package/dist/lib/get-context/get-package-json-files/get-patterns/index.js +0 -79
  139. package/dist/lib/get-context/get-package-json-files/get-patterns/props.d.ts +0 -7
  140. package/dist/lib/get-context/get-package-json-files/get-patterns/props.js +0 -43
  141. package/dist/lib/get-context/get-package-json-files/get-patterns/read-json-safe.js +0 -41
  142. package/dist/lib/get-context/get-package-json-files/get-patterns/read-yaml-safe.d.ts +0 -3
  143. package/dist/lib/get-context/get-package-json-files/get-patterns/read-yaml-safe.js +0 -34
  144. package/dist/lib/get-context/get-package-json-files/index.d.ts +0 -5
  145. package/dist/lib/get-context/get-package-json-files/index.js +0 -40
  146. package/dist/lib/get-context/get-package-json-files/package-json-file/instance.js +0 -46
  147. package/dist/lib/get-context/get-package-json-files/tap.d.ts +0 -15
  148. package/dist/lib/get-context/get-package-json-files/tap.js +0 -56
  149. package/dist/lib/get-context/get-package-json-files/try-catch.d.ts +0 -5
  150. package/dist/lib/get-context/get-package-json-files/try-catch.js +0 -13
@@ -17,19 +17,20 @@ var __read = (this && this.__read) || function (o, n) {
17
17
  };
18
18
  exports.__esModule = true;
19
19
  exports.PackageJsonFile = void 0;
20
- var expect_more_1 = require("expect-more");
20
+ var ts_belt_1 = require("@mobily/ts-belt");
21
21
  var path_1 = require("path");
22
- var constants_1 = require("../../../../constants");
23
- var log_1 = require("../../../log");
24
- var newlines_1 = require("../../../newlines");
22
+ var constants_1 = require("../../../constants");
23
+ var log_1 = require("../../../lib/log");
24
+ var newlines_1 = require("../../../lib/newlines");
25
+ var path_strategy_1 = require("../../get-config/path-strategy");
25
26
  var instance_1 = require("./instance");
26
27
  var PackageJsonFile = /** @class */ (function () {
27
- function PackageJsonFile(jsonFile, program, disk) {
28
+ function PackageJsonFile(jsonFile, config, disk) {
28
29
  this.contents = jsonFile.contents;
29
30
  this.disk = disk;
30
31
  this.filePath = jsonFile.filePath;
31
32
  this.json = jsonFile.json;
32
- this.program = program;
33
+ this.config = config;
33
34
  this.shortPath = (0, path_1.relative)(constants_1.CWD, jsonFile.filePath);
34
35
  }
35
36
  PackageJsonFile.prototype.hasChanged = function () {
@@ -40,54 +41,43 @@ var PackageJsonFile = /** @class */ (function () {
40
41
  };
41
42
  PackageJsonFile.prototype.getSource = function () {
42
43
  var contents = this.contents;
43
- var indent = this.program.indent;
44
+ var indent = this.config.indent;
44
45
  var EOL = newlines_1.newlines.detect(this.json);
45
46
  var source = "".concat(JSON.stringify(contents, null, indent)).concat(EOL);
46
47
  return newlines_1.newlines.fix(source, EOL);
47
48
  };
48
49
  PackageJsonFile.prototype.getInstances = function () {
49
50
  var _this = this;
50
- return this.program.dependencyTypes
51
- .flatMap(function (dependencyType) {
52
- return _this.getDependencyEntries(dependencyType, _this.contents).map(function (_a) {
51
+ return this.config.enabledTypes
52
+ .flatMap(function (pathDef) {
53
+ return _this.getPathEntries(pathDef, _this).map(function (_a) {
53
54
  var _b = __read(_a, 2), name = _b[0], version = _b[1];
54
- return new instance_1.Instance(dependencyType, name, _this, version);
55
+ return new instance_1.Instance(pathDef, name, _this, version);
55
56
  });
56
57
  })
57
58
  .filter(function (instance) {
58
- var dependencyType = instance.dependencyType, name = instance.name, version = instance.version;
59
- if (!(0, expect_more_1.isNonEmptyString)(name)) {
60
- (0, log_1.verbose)('skip instance, no name', instance);
61
- return false;
62
- }
63
- if (name.search(new RegExp(_this.program.filter)) === -1) {
59
+ var pathDef = instance.pathDef, name = instance.name, version = instance.version;
60
+ if (name.search(new RegExp(_this.config.filter)) === -1) {
64
61
  (0, log_1.verbose)('skip instance, name does not match filter', instance);
65
62
  return false;
66
63
  }
67
- if (!(0, expect_more_1.isNonEmptyString)(version)) {
68
- (0, log_1.verbose)('skip instance, no version', instance);
69
- return false;
70
- }
71
- (0, log_1.verbose)("add ".concat(name, "@").concat(version, " to ").concat(dependencyType, " ").concat(_this.filePath));
64
+ (0, log_1.verbose)("add ".concat(name, "@").concat(version, " to ").concat(pathDef.name, ":").concat(pathDef.strategy, " ").concat(_this.shortPath));
72
65
  return true;
73
66
  });
74
67
  };
75
- PackageJsonFile.prototype.getDependencyEntries = function (dependencyType, contents) {
76
- var _a;
77
- switch (dependencyType) {
78
- case 'dependencies':
79
- case 'devDependencies':
80
- case 'overrides':
81
- case 'peerDependencies':
82
- case 'resolutions': {
83
- return Object.entries((contents === null || contents === void 0 ? void 0 : contents[dependencyType]) || {});
84
- }
85
- case 'workspace': {
86
- return [[contents.name || '', contents.version || '']];
87
- }
88
- case 'pnpmOverrides': {
89
- return Object.entries(((_a = contents === null || contents === void 0 ? void 0 : contents.pnpm) === null || _a === void 0 ? void 0 : _a.overrides) || {});
90
- }
68
+ PackageJsonFile.prototype.getPathEntries = function (pathDef, file) {
69
+ var strategyName = pathDef.strategy;
70
+ switch (strategyName) {
71
+ case 'name@version':
72
+ return (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].read(file, pathDef), ts_belt_1.R.getWithDefault([]));
73
+ case 'name~version':
74
+ return (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].read(file, pathDef), ts_belt_1.R.getWithDefault([]));
75
+ case 'version':
76
+ return (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].read(file, pathDef), ts_belt_1.R.getWithDefault([]));
77
+ case 'versionsByName':
78
+ return (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].read(file, pathDef), ts_belt_1.R.getWithDefault([]));
79
+ default:
80
+ return (0, path_strategy_1.exhaustiveCheck)(strategyName);
91
81
  }
92
82
  };
93
83
  return PackageJsonFile;
@@ -1,21 +1,21 @@
1
1
  import type { PackageJsonFile } from '.';
2
- import type { DependencyType, ValidRange } from '../../get-config/config';
2
+ import type { Syncpack } from '../../../types';
3
3
  import type { SemverGroup } from '../../get-groups/semver-group';
4
4
  import type { VersionGroup } from '../../get-groups/version-group';
5
5
  export declare class Instance {
6
- /** where this dependency is installed */
7
- dependencyType: DependencyType;
8
6
  /** the name of this dependency */
9
7
  name: string;
10
8
  /** The package this dependency is installed in this specific time */
11
9
  packageJsonFile: PackageJsonFile;
10
+ /** where this dependency is installed */
11
+ pathDef: Syncpack.PathDefinition;
12
12
  /** The .name property of the package.json file of this instance */
13
13
  pkgName: string;
14
14
  /** the version of this dependency */
15
15
  version: string;
16
- constructor(dependencyType: DependencyType, name: string, packageJsonFile: PackageJsonFile, version: string);
17
- hasRange(range: ValidRange): boolean;
18
- setRange(range: ValidRange): void;
16
+ constructor(pathDef: Syncpack.PathDefinition, name: string, packageJsonFile: PackageJsonFile, version: string);
17
+ hasRange(range: Syncpack.Config.SemverRange.Value): boolean;
18
+ setRange(range: Syncpack.Config.SemverRange.Value): void;
19
19
  /**
20
20
  * In the case of banned dependencies, their version is set to `undefined`,
21
21
  * which causes them to be removed by `JSON.stringify`.
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.Instance = void 0;
7
+ var ts_belt_1 = require("@mobily/ts-belt");
8
+ var expect_more_1 = require("expect-more");
9
+ var minimatch_1 = __importDefault(require("minimatch"));
10
+ var _R_1 = require("../../$R");
11
+ var set_semver_range_1 = require("../../../lib/set-semver-range");
12
+ var path_strategy_1 = require("../../get-config/path-strategy");
13
+ var Instance = /** @class */ (function () {
14
+ function Instance(pathDef, name, packageJsonFile, version) {
15
+ this.pathDef = pathDef;
16
+ this.name = name;
17
+ this.packageJsonFile = packageJsonFile;
18
+ this.pkgName = packageJsonFile.contents.name || 'PACKAGE_JSON_HAS_NO_NAME';
19
+ this.version = version;
20
+ }
21
+ Instance.prototype.hasRange = function (range) {
22
+ return (this.pathDef.name !== 'workspace' &&
23
+ this.version === (0, set_semver_range_1.setSemverRange)(range, this.version));
24
+ };
25
+ Instance.prototype.setRange = function (range) {
26
+ this.setVersion((0, set_semver_range_1.setSemverRange)(range, this.version));
27
+ };
28
+ /**
29
+ * In the case of banned dependencies, their version is set to `undefined`,
30
+ * which causes them to be removed by `JSON.stringify`.
31
+ */
32
+ Instance.prototype.setVersion = function (version) {
33
+ var strategyName = this.pathDef.strategy;
34
+ var entry = [this.name, version];
35
+ var file = this.packageJsonFile;
36
+ switch (strategyName) {
37
+ case 'name@version':
38
+ (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].write(file, this.pathDef, entry), _R_1.$R.tapErrVerbose);
39
+ break;
40
+ case 'name~version':
41
+ (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].write(file, this.pathDef, entry), _R_1.$R.tapErrVerbose);
42
+ break;
43
+ case 'version':
44
+ (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].write(file, this.pathDef, entry), _R_1.$R.tapErrVerbose);
45
+ break;
46
+ case 'versionsByName':
47
+ (0, ts_belt_1.pipe)(path_strategy_1.strategyByName[strategyName].write(file, this.pathDef, entry), _R_1.$R.tapErrVerbose);
48
+ break;
49
+ default:
50
+ return (0, path_strategy_1.exhaustiveCheck)(strategyName);
51
+ }
52
+ };
53
+ Instance.prototype.matchesGroup = function (group) {
54
+ var _this = this;
55
+ return (group.packages.some(function (pattern) { return (0, minimatch_1["default"])(_this.pkgName, pattern); }) &&
56
+ group.dependencies.some(function (pattern) { return (0, minimatch_1["default"])(_this.name, pattern); }) &&
57
+ (!(0, expect_more_1.isNonEmptyArray)(group.dependencyTypes) ||
58
+ group.dependencyTypes.includes(this.pathDef.name)));
59
+ };
60
+ return Instance;
61
+ }());
62
+ exports.Instance = Instance;
@@ -1,10 +1,9 @@
1
- import type { Disk } from '../disk';
2
- import type { Config } from './get-config/config';
3
- import type { InternalConfig } from './get-config/internal-config';
1
+ import type { Disk } from '../lib/disk';
2
+ import type { Syncpack } from '../types';
4
3
  import type { SemverGroup } from './get-groups/semver-group';
5
4
  import type { VersionGroup } from './get-groups/version-group';
6
5
  import type { PackageJsonFile } from './get-package-json-files/package-json-file';
7
- export type Context = Omit<InternalConfig, 'semverGroups' | 'versionGroups'> & {
6
+ export type Context = Omit<Syncpack.Config.Private, 'semverGroups' | 'versionGroups'> & {
8
7
  disk: Disk;
9
8
  isInvalid: boolean;
10
9
  packageJsonFiles: PackageJsonFile[];
@@ -19,4 +18,4 @@ export type Context = Omit<InternalConfig, 'semverGroups' | 'versionGroups'> & {
19
18
  * that the majority of syncpack and its tests don't have to deal with the file
20
19
  * system and can focus solely on transformation logic.
21
20
  */
22
- export declare function getContext(program: Partial<Config.All>, disk?: Disk): Context;
21
+ export declare function getContext(program: Partial<Syncpack.Config.Cli>, disk?: Disk): Context;
@@ -12,7 +12,7 @@ var __assign = (this && this.__assign) || function () {
12
12
  };
13
13
  exports.__esModule = true;
14
14
  exports.getContext = void 0;
15
- var disk_1 = require("../disk");
15
+ var disk_1 = require("../lib/disk");
16
16
  var get_all_instances_1 = require("./get-all-instances");
17
17
  var get_config_1 = require("./get-config");
18
18
  var get_semver_groups_1 = require("./get-groups/get-semver-groups");
@@ -1,13 +1,13 @@
1
- import type { Config } from './get-context/get-config/config';
2
- export type Disk = typeof disk;
3
- export declare const disk: {
4
- readonly process: {
5
- readonly exit: (code: number) => void;
1
+ import type { Syncpack } from '../types';
2
+ export type Disk = {
3
+ process: {
4
+ exit: (code: number) => void;
6
5
  };
7
- readonly globSync: (pattern: string) => string[];
8
- readonly readConfigFileSync: (configPath?: string) => Partial<Config.RcFile>;
9
- readonly readFileSync: (filePath: string) => string;
10
- readonly readYamlFileSync: <T = unknown>(filePath: string) => T;
11
- readonly removeSync: (filePath: string) => void;
12
- readonly writeFileSync: (filePath: string, contents: string) => void;
6
+ globSync: (pattern: string) => string[];
7
+ readConfigFileSync: (configPath?: string) => Partial<Syncpack.Config.SyncpackRc>;
8
+ readFileSync: (filePath: string) => string;
9
+ readYamlFileSync: <T = unknown>(filePath: string) => T;
10
+ removeSync: (filePath: string) => void;
11
+ writeFileSync: (filePath: string, contents: string) => void;
13
12
  };
13
+ export declare const disk: Disk;
@@ -0,0 +1,12 @@
1
+ export declare class BaseError extends Error {
2
+ name: 'SyncpackError';
3
+ cause?: BaseError | Error | null;
4
+ constructor(message: string, options?: {
5
+ cause?: unknown;
6
+ props?: {
7
+ args: any[];
8
+ };
9
+ });
10
+ static normalize(value: unknown): BaseError | Error | null;
11
+ static map(message: string): (cause: unknown) => BaseError;
12
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ exports.__esModule = true;
18
+ exports.BaseError = void 0;
19
+ var BaseError = /** @class */ (function (_super) {
20
+ __extends(BaseError, _super);
21
+ function BaseError(message, options) {
22
+ var _this = _super.call(this, message) || this;
23
+ _this.name = 'SyncpackError';
24
+ _this.cause = BaseError.normalize(options === null || options === void 0 ? void 0 : options.cause);
25
+ return _this;
26
+ }
27
+ BaseError.normalize = function (value) {
28
+ if (value instanceof BaseError)
29
+ return value;
30
+ if (value instanceof Error)
31
+ return value;
32
+ if (typeof value === 'string')
33
+ return new Error(value);
34
+ return null;
35
+ };
36
+ BaseError.map = function (message) {
37
+ return function (cause) {
38
+ return new BaseError(message, { cause: cause });
39
+ };
40
+ };
41
+ return BaseError;
42
+ }(Error));
43
+ exports.BaseError = BaseError;
@@ -1,2 +1,2 @@
1
- import type { Context } from './get-context';
2
- export declare function exitIfInvalid(ctx: Context): Context;
1
+ import type { Syncpack } from '../types';
2
+ export declare function exitIfInvalid(ctx: Syncpack.Ctx): Syncpack.Ctx;
@@ -1,4 +1,4 @@
1
- import type { ValidRange } from './get-context/get-config/config';
2
- export declare function isValidSemverRange(value: unknown): value is ValidRange;
1
+ import type { Syncpack } from '../types';
2
+ export declare function isValidSemverRange(value: unknown): value is Syncpack.Config.SemverRange.Value;
3
3
  export declare function isSemver(version: unknown): boolean;
4
4
  export declare function isLooseSemver(version: unknown): boolean;
@@ -1,2 +1,2 @@
1
- import type { ValidRange } from './get-context/get-config/config';
2
- export declare function setSemverRange(semverRange: ValidRange, version: string): string;
1
+ import type { Syncpack } from '../types';
2
+ export declare function setSemverRange(semverRange: Syncpack.Config.SemverRange.Value, version: string): string;
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function showHelpOnError(program: Command): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
+ return cooked;
5
+ };
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ exports.__esModule = true;
10
+ exports.showHelpOnError = void 0;
11
+ var chalk_1 = __importDefault(require("chalk"));
12
+ function showHelpOnError(program) {
13
+ program.showHelpAfterError((0, chalk_1["default"])(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n1. The following options were replaced in syncpack@9.0.0:\n{red\n -p, --prod include dependencies\n -d, --dev include devDependencies\n -P, --peer include peerDependencies\n -R, --resolutions include resolutions (yarn)\n -o, --overrides include overrides (npm)\n -O, --pnpmOverrides include overrides (pnpm)\n -w, --workspace include locally developed package versions\n}\n Instead use the new {green --types} option like so:\n\n {green --types dev,prod,peer}\n\n2. In .syncpackrc, the following options were replaced:\n{red\n \"dev\": true,\n \"overrides\": true,\n \"peer\": true,\n \"pnpmOverrides\": true,\n \"prod\": true,\n \"resolutions\": true,\n \"workspace\": true,\n}\n Instead use the new {green dependencyTypes} array like so:\n {green\n \"dependencyTypes\": [\"dev\", \"prod\", \"peer\"]\n}"], ["\n1. The following options were replaced in syncpack@9.0.0:\n{red\n -p, --prod include dependencies\n -d, --dev include devDependencies\n -P, --peer include peerDependencies\n -R, --resolutions include resolutions (yarn)\n -o, --overrides include overrides (npm)\n -O, --pnpmOverrides include overrides (pnpm)\n -w, --workspace include locally developed package versions\n}\n Instead use the new {green --types} option like so:\n\n {green --types dev,prod,peer}\n\n2. In .syncpackrc, the following options were replaced:\n{red\n \"dev\": true,\n \"overrides\": true,\n \"peer\": true,\n \"pnpmOverrides\": true,\n \"prod\": true,\n \"resolutions\": true,\n \"workspace\": true,\n}\n Instead use the new {green dependencyTypes} array like so:\n {green\n \"dependencyTypes\": [\"dev\", \"prod\", \"peer\"]\n}"]))));
14
+ }
15
+ exports.showHelpOnError = showHelpOnError;
16
+ var templateObject_1;
@@ -1,2 +1,2 @@
1
- import type { Context } from './get-context';
2
- export declare function writeIfChanged(ctx: Context): Context;
1
+ import type { Syncpack } from '../types';
2
+ export declare function writeIfChanged(ctx: Syncpack.Ctx): Syncpack.Ctx;
package/dist/option.d.ts CHANGED
@@ -1,16 +1,10 @@
1
1
  export declare const option: {
2
2
  readonly config: readonly ["-c, --config <path>", "path to a syncpack config file"];
3
- readonly dev: readonly ["-d, --dev", string];
4
3
  readonly filter: readonly ["-f, --filter [pattern]", string];
5
- readonly indent: readonly ["-i, --indent [value]", `override indentation. defaults to "${string}"`];
6
- readonly overrides: readonly ["-o, --overrides", string];
7
- readonly peer: readonly ["-P, --peer", string];
8
- readonly pnpmOverrides: readonly ["-O, --pnpmOverrides", string];
9
- readonly prod: readonly ["-p, --prod", string];
10
- readonly resolutions: readonly ["-R, --resolutions", string];
11
- readonly semverRange: readonly ["-r, --semver-range <range>", "see supported ranges below. defaults to \"\"" | "see supported ranges below. defaults to \"*\"" | "see supported ranges below. defaults to \">\"" | "see supported ranges below. defaults to \">=\"" | "see supported ranges below. defaults to \".x\"" | "see supported ranges below. defaults to \"<\"" | "see supported ranges below. defaults to \"<=\"" | "see supported ranges below. defaults to \"^\"" | "see supported ranges below. defaults to \"~\""];
12
- readonly source: readonly ["-s, --source [pattern]", "glob pattern for package.json files to read from", typeof collect, string[]];
13
- readonly workspace: readonly ["-w, --workspace", "include locally developed package versions"];
4
+ readonly indent: readonly ["-i, --indent [value]", "override indentation. defaults to \" \""];
5
+ readonly semverRange: readonly ["-r, --semver-range <range>", "see supported ranges below. defaults to \"\""];
6
+ readonly source: readonly ["-s, --source [pattern]", "glob pattern for package.json files to read from", typeof collect];
7
+ readonly types: readonly ["-t, --types <names>", string];
14
8
  };
15
9
  declare function collect(value: string, previous: string[]): string[];
16
10
  export {};
package/dist/option.js CHANGED
@@ -12,26 +12,14 @@ var chalk_1 = __importDefault(require("chalk"));
12
12
  var constants_1 = require("./constants");
13
13
  exports.option = {
14
14
  config: ['-c, --config <path>', 'path to a syncpack config file'],
15
- dev: ['-d, --dev', (0, chalk_1["default"])(templateObject_1 || (templateObject_1 = __makeTemplateObject(["include {yellow devDependencies}"], ["include {yellow devDependencies}"])))],
16
15
  filter: [
17
16
  '-f, --filter [pattern]',
18
- (0, chalk_1["default"])(templateObject_2 || (templateObject_2 = __makeTemplateObject(["only include dependencies whose {yellow name} matches this regex"], ["only include dependencies whose {yellow name} matches this regex"]))),
17
+ (0, chalk_1["default"])(templateObject_1 || (templateObject_1 = __makeTemplateObject(["only include dependencies whose {yellow name} matches this regex"], ["only include dependencies whose {yellow name} matches this regex"]))),
19
18
  ],
20
19
  indent: [
21
20
  '-i, --indent [value]',
22
21
  "override indentation. defaults to \"".concat(constants_1.DEFAULT_CONFIG.indent, "\""),
23
22
  ],
24
- overrides: ['-o, --overrides', (0, chalk_1["default"])(templateObject_3 || (templateObject_3 = __makeTemplateObject(["include {yellow overrides} (npm)"], ["include {yellow overrides} (npm)"])))],
25
- peer: ['-P, --peer', (0, chalk_1["default"])(templateObject_4 || (templateObject_4 = __makeTemplateObject(["include {yellow peerDependencies}"], ["include {yellow peerDependencies}"])))],
26
- pnpmOverrides: [
27
- '-O, --pnpmOverrides',
28
- (0, chalk_1["default"])(templateObject_5 || (templateObject_5 = __makeTemplateObject(["include {yellow overrides} (pnpm)"], ["include {yellow overrides} (pnpm)"]))),
29
- ],
30
- prod: ['-p, --prod', (0, chalk_1["default"])(templateObject_6 || (templateObject_6 = __makeTemplateObject(["include {yellow dependencies}"], ["include {yellow dependencies}"])))],
31
- resolutions: [
32
- '-R, --resolutions',
33
- (0, chalk_1["default"])(templateObject_7 || (templateObject_7 = __makeTemplateObject(["include {yellow resolutions} (yarn)"], ["include {yellow resolutions} (yarn)"]))),
34
- ],
35
23
  semverRange: [
36
24
  '-r, --semver-range <range>',
37
25
  "see supported ranges below. defaults to \"".concat(constants_1.DEFAULT_CONFIG.semverRange, "\""),
@@ -40,11 +28,13 @@ exports.option = {
40
28
  '-s, --source [pattern]',
41
29
  'glob pattern for package.json files to read from',
42
30
  collect,
43
- [],
44
31
  ],
45
- workspace: ['-w, --workspace', 'include locally developed package versions']
32
+ types: [
33
+ '-t, --types <names>',
34
+ (0, chalk_1["default"])(templateObject_2 || (templateObject_2 = __makeTemplateObject(["only include dependencies matching these types (eg. {yellow types=dev,prod,myCustomType})"], ["only include dependencies matching these types (eg. {yellow types=dev,prod,myCustomType})"]))),
35
+ ]
46
36
  };
47
37
  function collect(value, previous) {
48
38
  return previous.concat([value]);
49
39
  }
50
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;
40
+ var templateObject_1, templateObject_2;
@@ -0,0 +1,88 @@
1
+ import type { z } from 'zod';
2
+ import type { Context as TContext } from './get-context';
3
+ import type { CoreTypeName } from './get-context/get-config/get-core-types';
4
+ import type { Cli as cli, Private as privateSchema, Public as publicSchema, SyncpackRc as syncpackRc } from './get-context/get-config/schema';
5
+ import type * as paths from './get-context/get-config/schema/paths';
6
+ import type * as semverGroup from './get-context/get-config/schema/semver-group';
7
+ import type * as semverRange from './get-context/get-config/schema/semver-range';
8
+ import type * as versionGroup from './get-context/get-config/schema/version-group';
9
+ import type { SemverGroup as TSemverGroup } from './get-context/get-groups/semver-group';
10
+ import type { VersionGroup as TVersionGroup } from './get-context/get-groups/version-group';
11
+ import type { PackageJsonFile as TPackageJsonFile } from './get-context/get-package-json-files/package-json-file';
12
+ import type { Instance as TInstance } from './get-context/get-package-json-files/package-json-file/instance';
13
+ export declare namespace Syncpack {
14
+ type Ctx = TContext;
15
+ type Instance = TInstance;
16
+ type PackageJsonFile = TPackageJsonFile;
17
+ type PathDefinition = z.infer<typeof paths.pathDefinition>;
18
+ type TypeName = CoreTypeName | string;
19
+ type SemverGroup = TSemverGroup;
20
+ type VersionGroup = TVersionGroup;
21
+ namespace Config {
22
+ /** All config which can be set via the command line */
23
+ type Cli = z.infer<typeof cli>;
24
+ /** @private */
25
+ type Private = z.infer<typeof privateSchema>;
26
+ /** All config which can be set via the command line and/or .syncpackrc */
27
+ type Public = z.infer<typeof publicSchema>;
28
+ /** All valid contents of a .syncpackrc */
29
+ type SyncpackRc = z.infer<typeof syncpackRc>;
30
+ namespace Paths {
31
+ type T = typeof paths;
32
+ /** Direct syncpack where and how to find and fix versions elsewhere */
33
+ export type ConfigByName = z.infer<T['pathConfigByName']>;
34
+ export {};
35
+ }
36
+ namespace SemverRange {
37
+ /**
38
+ * Aliases for semver range formats supported by syncpack
39
+ *
40
+ * Defaults to `""` to ensure that exact dependency versions are used
41
+ * instead of loose ranges, but this can be overridden in your config file
42
+ * or via the `--semver-range` command line option.
43
+ *
44
+ * | Supported Range | Example |
45
+ * | --------------- | --------: |
46
+ * | `"<"` | `<1.4.2` |
47
+ * | `"<="` | `<=1.4.2` |
48
+ * | `""` | `1.4.2` |
49
+ * | `"~"` | `~1.4.2` |
50
+ * | `"^"` | `^1.4.2` |
51
+ * | `">="` | `>=1.4.2` |
52
+ * | `">"` | `>1.4.2` |
53
+ * | `"*"` | `*` |
54
+ *
55
+ * @default ""
56
+ */
57
+ type Value = z.infer<typeof semverRange.value>;
58
+ }
59
+ namespace SemverGroup {
60
+ type T = typeof semverGroup;
61
+ /** Let dependencies in this group do whatever they like */
62
+ export type Ignored = z.infer<T['ignored']>;
63
+ /** Ensure the version range of dependencies in this group is always this */
64
+ export type WithRange = z.infer<T['withRange']>;
65
+ /** @private */
66
+ export type Default = z.infer<T['base']>;
67
+ /** Every valid type of SemverGroup */
68
+ export type Any = z.infer<T['any']>;
69
+ export {};
70
+ }
71
+ namespace VersionGroup {
72
+ type T = typeof versionGroup;
73
+ /** Partion these dependencies and make sure they match internally */
74
+ export type Standard = z.infer<T['standard']>;
75
+ /** Prevent dependencies in this group from being added to the project */
76
+ export type Banned = z.infer<T['banned']>;
77
+ /** Let dependencies in this group do whatever they like */
78
+ export type Ignored = z.infer<T['ignored']>;
79
+ /** Override the version of dependencies in this group to always be this */
80
+ export type Pinned = z.infer<T['pinned']>;
81
+ /** @private */
82
+ export type Default = z.infer<T['base']>;
83
+ /** Every valid type of VersionGroup */
84
+ export type Any = z.infer<T['any']>;
85
+ export {};
86
+ }
87
+ }
88
+ }
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": "8.5.14",
4
+ "version": "9.0.0",
5
5
  "author": "Jamie Mason <jamie@foldleft.io> (https://github.com/JamieMason)",
6
6
  "bin": {
7
7
  "syncpack": "dist/bin.js",
@@ -26,16 +26,17 @@
26
26
  "Tom Fletcher (https://github.com/tom-fletcher)"
27
27
  ],
28
28
  "dependencies": {
29
+ "@mobily/ts-belt": "3.13.1",
29
30
  "chalk": "4.1.2",
30
31
  "commander": "10.0.0",
31
32
  "cosmiconfig": "8.0.0",
32
33
  "expect-more": "1.3.0",
33
- "fp-ts": "2.13.1",
34
34
  "fs-extra": "11.1.0",
35
35
  "glob": "8.1.0",
36
36
  "minimatch": "6.1.6",
37
37
  "read-yaml-file": "2.1.0",
38
- "semver": "7.3.8"
38
+ "semver": "7.3.8",
39
+ "zod": "3.20.6"
39
40
  },
40
41
  "devDependencies": {
41
42
  "@types/fs-extra": "11.0.1",