syncpack 9.8.4 → 10.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 (212) hide show
  1. package/LICENSE +12 -13
  2. package/README.md +17 -19
  3. package/dist/bin-fix-mismatches/fix-mismatches-cli.d.ts +2 -2
  4. package/dist/bin-fix-mismatches/fix-mismatches-cli.js +3 -1
  5. package/dist/bin-fix-mismatches/fix-mismatches.d.ts +2 -2
  6. package/dist/bin-fix-mismatches/fix-mismatches.js +44 -25
  7. package/dist/bin-format/format-cli.d.ts +2 -2
  8. package/dist/bin-format/format-cli.js +2 -1
  9. package/dist/bin-format/format.d.ts +2 -2
  10. package/dist/bin-format/format.js +7 -4
  11. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.d.ts +2 -2
  12. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.js +2 -1
  13. package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +2 -2
  14. package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +29 -25
  15. package/dist/bin-list/list-cli.d.ts +2 -2
  16. package/dist/bin-list/list-cli.js +2 -1
  17. package/dist/bin-list/list.d.ts +2 -2
  18. package/dist/bin-list/list.js +58 -52
  19. package/dist/bin-list-mismatches/list-mismatches-cli.d.ts +2 -2
  20. package/dist/bin-list-mismatches/list-mismatches-cli.js +2 -1
  21. package/dist/bin-list-mismatches/list-mismatches.d.ts +2 -2
  22. package/dist/bin-list-mismatches/list-mismatches.js +72 -105
  23. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.d.ts +2 -2
  24. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.js +2 -1
  25. package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +2 -2
  26. package/dist/bin-set-semver-ranges/set-semver-ranges.js +17 -3
  27. package/dist/config/get-custom-types.d.ts +9 -0
  28. package/dist/config/get-custom-types.js +49 -0
  29. package/dist/config/get-enabled-types.d.ts +3 -0
  30. package/dist/config/get-enabled-types.js +48 -0
  31. package/dist/config/get-filter.d.ts +2 -0
  32. package/dist/config/get-filter.js +13 -0
  33. package/dist/config/get-indent.d.ts +2 -0
  34. package/dist/config/get-indent.js +12 -0
  35. package/dist/config/get-semver-range.d.ts +3 -0
  36. package/dist/config/get-semver-range.js +12 -0
  37. package/dist/config/get-sort-az.d.ts +2 -0
  38. package/dist/config/get-sort-az.js +18 -0
  39. package/dist/config/get-sort-first.d.ts +2 -0
  40. package/dist/config/get-sort-first.js +10 -0
  41. package/dist/config/get-source.d.ts +2 -0
  42. package/dist/config/get-source.js +13 -0
  43. package/dist/config/types.d.ts +106 -0
  44. package/dist/constants.d.ts +1 -0
  45. package/dist/constants.js +1 -0
  46. package/dist/get-context/index.d.ts +8 -16
  47. package/dist/get-context/index.js +8 -31
  48. package/dist/get-package-json-files/get-file-paths.d.ts +13 -0
  49. package/dist/get-package-json-files/get-file-paths.js +30 -0
  50. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +3 -0
  51. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.js +17 -0
  52. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +3 -0
  53. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.js +22 -0
  54. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +3 -0
  55. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.js +18 -0
  56. package/dist/get-package-json-files/get-patterns/index.d.ts +10 -0
  57. package/dist/get-package-json-files/get-patterns/index.js +35 -0
  58. package/dist/{get-context/get-package-json-files → get-package-json-files}/get-patterns/read-json-safe.d.ts +3 -4
  59. package/dist/get-package-json-files/get-patterns/read-json-safe.js +14 -0
  60. package/dist/get-package-json-files/get-patterns/read-yaml-safe.d.ts +3 -0
  61. package/dist/get-package-json-files/get-patterns/read-yaml-safe.js +12 -0
  62. package/dist/get-package-json-files/index.d.ts +6 -0
  63. package/dist/get-package-json-files/index.js +18 -0
  64. package/dist/{get-context/get-package-json-files/package-json-file → get-package-json-files}/instance.d.ts +6 -8
  65. package/dist/get-package-json-files/instance.js +23 -0
  66. package/dist/{get-context/get-package-json-files/package-json-file/index.d.ts → get-package-json-files/package-json-file.d.ts} +7 -9
  67. package/dist/get-package-json-files/package-json-file.js +45 -0
  68. package/dist/get-semver-groups/catch-all.d.ts +4 -0
  69. package/dist/get-semver-groups/catch-all.js +11 -0
  70. package/dist/get-semver-groups/filtered-out.d.ts +13 -0
  71. package/dist/get-semver-groups/filtered-out.js +29 -0
  72. package/dist/get-semver-groups/ignored.d.ts +11 -0
  73. package/dist/get-semver-groups/ignored.js +22 -0
  74. package/dist/get-semver-groups/index.d.ts +32 -0
  75. package/dist/get-semver-groups/index.js +90 -0
  76. package/dist/get-semver-groups/with-range.d.ts +11 -0
  77. package/dist/get-semver-groups/with-range.js +55 -0
  78. package/dist/get-version-groups/banned.d.ts +11 -0
  79. package/dist/get-version-groups/banned.js +24 -0
  80. package/dist/get-version-groups/catch-all.d.ts +4 -0
  81. package/dist/get-version-groups/catch-all.js +11 -0
  82. package/dist/get-version-groups/filtered-out.d.ts +13 -0
  83. package/dist/get-version-groups/filtered-out.js +31 -0
  84. package/dist/get-version-groups/ignored.d.ts +11 -0
  85. package/dist/get-version-groups/ignored.js +24 -0
  86. package/dist/get-version-groups/index.d.ts +57 -0
  87. package/dist/get-version-groups/index.js +119 -0
  88. package/dist/get-version-groups/lib/delete.d.ts +2 -0
  89. package/dist/get-version-groups/lib/delete.js +4 -0
  90. package/dist/get-version-groups/lib/get-highest-version.d.ts +2 -0
  91. package/dist/get-version-groups/lib/get-highest-version.js +13 -0
  92. package/dist/get-version-groups/lib/get-lowest-version.d.ts +2 -0
  93. package/dist/get-version-groups/lib/get-lowest-version.js +13 -0
  94. package/dist/{get-context/get-groups/version-group/instance-group → get-version-groups}/lib/get-range-score.js +3 -2
  95. package/dist/get-version-groups/lib/get-unique-versions.d.ts +2 -0
  96. package/dist/get-version-groups/lib/get-unique-versions.js +8 -0
  97. package/dist/get-version-groups/lib/group-by.d.ts +1 -0
  98. package/dist/get-version-groups/lib/group-by.js +11 -0
  99. package/dist/get-version-groups/lib/sort.d.ts +1 -0
  100. package/dist/get-version-groups/lib/sort.js +44 -0
  101. package/dist/get-version-groups/pinned.d.ts +11 -0
  102. package/dist/get-version-groups/pinned.js +43 -0
  103. package/dist/get-version-groups/snapped-to.d.ts +11 -0
  104. package/dist/get-version-groups/snapped-to.js +52 -0
  105. package/dist/get-version-groups/standard.d.ts +11 -0
  106. package/dist/get-version-groups/standard.js +95 -0
  107. package/dist/index.d.ts +2 -0
  108. package/dist/lib/$R.d.ts +12 -0
  109. package/dist/lib/$R.js +34 -0
  110. package/dist/lib/disk.d.ts +3 -2
  111. package/dist/lib/disk.js +1 -1
  112. package/dist/lib/exit-if-invalid.d.ts +2 -2
  113. package/dist/lib/is-semver.d.ts +5 -3
  114. package/dist/lib/is-semver.js +18 -4
  115. package/dist/lib/log.d.ts +4 -8
  116. package/dist/lib/log.js +4 -30
  117. package/dist/lib/set-semver-range.d.ts +2 -2
  118. package/dist/lib/write-if-changed.d.ts +2 -2
  119. package/dist/lib/write-if-changed.js +6 -25
  120. package/dist/strategy/lib/get-non-empty-string-prop.d.ts +3 -0
  121. package/dist/strategy/lib/get-non-empty-string-prop.js +12 -0
  122. package/dist/strategy/name-and-version-props.d.ts +12 -0
  123. package/dist/strategy/name-and-version-props.js +50 -0
  124. package/dist/strategy/named-version-string.d.ts +11 -0
  125. package/dist/strategy/named-version-string.js +53 -0
  126. package/dist/strategy/unnamed-version-string.d.ts +11 -0
  127. package/dist/strategy/unnamed-version-string.js +48 -0
  128. package/dist/strategy/versions-by-name.d.ts +11 -0
  129. package/dist/strategy/versions-by-name.js +29 -0
  130. package/package.json +23 -20
  131. package/dist/get-context/$R.d.ts +0 -13
  132. package/dist/get-context/$R.js +0 -34
  133. package/dist/get-context/get-config/get-core-types.d.ts +0 -36
  134. package/dist/get-context/get-config/get-core-types.js +0 -38
  135. package/dist/get-context/get-config/get-custom-types.d.ts +0 -4
  136. package/dist/get-context/get-config/get-custom-types.js +0 -16
  137. package/dist/get-context/get-config/get-enabled-types.d.ts +0 -4
  138. package/dist/get-context/get-config/get-enabled-types.js +0 -17
  139. package/dist/get-context/get-config/index.d.ts +0 -9
  140. package/dist/get-context/get-config/index.js +0 -91
  141. package/dist/get-context/get-config/path-strategy/index.d.ts +0 -8
  142. package/dist/get-context/get-config/path-strategy/index.js +0 -18
  143. package/dist/get-context/get-config/path-strategy/lib/get-non-empty-string-prop.d.ts +0 -4
  144. package/dist/get-context/get-config/path-strategy/lib/get-non-empty-string-prop.js +0 -11
  145. package/dist/get-context/get-config/path-strategy/name-and-version-props.d.ts +0 -2
  146. package/dist/get-context/get-config/path-strategy/name-and-version-props.js +0 -40
  147. package/dist/get-context/get-config/path-strategy/name-and-version-string.d.ts +0 -2
  148. package/dist/get-context/get-config/path-strategy/name-and-version-string.js +0 -44
  149. package/dist/get-context/get-config/path-strategy/types.d.ts +0 -15
  150. package/dist/get-context/get-config/path-strategy/version-string.d.ts +0 -2
  151. package/dist/get-context/get-config/path-strategy/version-string.js +0 -44
  152. package/dist/get-context/get-config/path-strategy/versions-by-name.d.ts +0 -2
  153. package/dist/get-context/get-config/path-strategy/versions-by-name.js +0 -23
  154. package/dist/get-context/get-config/schema/base-group.d.ts +0 -7
  155. package/dist/get-context/get-config/schema/base-group.js +0 -10
  156. package/dist/get-context/get-config/schema/index.d.ts +0 -1540
  157. package/dist/get-context/get-config/schema/index.js +0 -81
  158. package/dist/get-context/get-config/schema/lib/non-empty-string.d.ts +0 -2
  159. package/dist/get-context/get-config/schema/lib/non-empty-string.js +0 -5
  160. package/dist/get-context/get-config/schema/paths.d.ts +0 -89
  161. package/dist/get-context/get-config/schema/paths.js +0 -33
  162. package/dist/get-context/get-config/schema/semver-group.d.ts +0 -119
  163. package/dist/get-context/get-config/schema/semver-group.js +0 -43
  164. package/dist/get-context/get-config/schema/semver-range.d.ts +0 -2
  165. package/dist/get-context/get-config/schema/semver-range.js +0 -16
  166. package/dist/get-context/get-config/schema/version-group.d.ts +0 -230
  167. package/dist/get-context/get-config/schema/version-group.js +0 -36
  168. package/dist/get-context/get-groups/base-group.d.ts +0 -22
  169. package/dist/get-context/get-groups/base-group.js +0 -39
  170. package/dist/get-context/get-groups/index.d.ts +0 -12
  171. package/dist/get-context/get-groups/index.js +0 -51
  172. package/dist/get-context/get-groups/semver-group.d.ts +0 -15
  173. package/dist/get-context/get-groups/semver-group.js +0 -46
  174. package/dist/get-context/get-groups/version-group/index.d.ts +0 -15
  175. package/dist/get-context/get-groups/version-group/index.js +0 -36
  176. package/dist/get-context/get-groups/version-group/instance-group/get-highest-version.d.ts +0 -3
  177. package/dist/get-context/get-groups/version-group/instance-group/get-highest-version.js +0 -42
  178. package/dist/get-context/get-groups/version-group/instance-group/get-lowest-version.d.ts +0 -3
  179. package/dist/get-context/get-groups/version-group/instance-group/get-lowest-version.js +0 -44
  180. package/dist/get-context/get-groups/version-group/instance-group/index.d.ts +0 -35
  181. package/dist/get-context/get-groups/version-group/instance-group/index.js +0 -88
  182. package/dist/get-context/get-groups/version-group/instance-group/lib/compare-semver.d.ts +0 -4
  183. package/dist/get-context/get-groups/version-group/instance-group/lib/compare-semver.js +0 -38
  184. package/dist/get-context/get-package-json-files/get-file-paths.d.ts +0 -14
  185. package/dist/get-context/get-package-json-files/get-file-paths.js +0 -40
  186. package/dist/get-context/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +0 -4
  187. package/dist/get-context/get-package-json-files/get-patterns/get-lerna-patterns.js +0 -16
  188. package/dist/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +0 -4
  189. package/dist/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.js +0 -21
  190. package/dist/get-context/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +0 -4
  191. package/dist/get-context/get-package-json-files/get-patterns/get-yarn-patterns.js +0 -17
  192. package/dist/get-context/get-package-json-files/get-patterns/index.d.ts +0 -11
  193. package/dist/get-context/get-package-json-files/get-patterns/index.js +0 -43
  194. package/dist/get-context/get-package-json-files/get-patterns/lib/get-array-of-strings.d.ts +0 -1
  195. package/dist/get-context/get-package-json-files/get-patterns/lib/get-array-of-strings.js +0 -8
  196. package/dist/get-context/get-package-json-files/get-patterns/props.d.ts +0 -6
  197. package/dist/get-context/get-package-json-files/get-patterns/props.js +0 -24
  198. package/dist/get-context/get-package-json-files/get-patterns/read-json-safe.js +0 -17
  199. package/dist/get-context/get-package-json-files/get-patterns/read-yaml-safe.d.ts +0 -4
  200. package/dist/get-context/get-package-json-files/get-patterns/read-yaml-safe.js +0 -11
  201. package/dist/get-context/get-package-json-files/index.d.ts +0 -7
  202. package/dist/get-context/get-package-json-files/index.js +0 -16
  203. package/dist/get-context/get-package-json-files/package-json-file/index.js +0 -63
  204. package/dist/get-context/get-package-json-files/package-json-file/instance.js +0 -46
  205. package/dist/lib/error.d.ts +0 -12
  206. package/dist/lib/error.js +0 -25
  207. package/dist/types.d.ts +0 -90
  208. /package/dist/{get-context/get-config/path-strategy → config}/types.js +0 -0
  209. /package/dist/{get-context/get-groups/version-group/instance-group → get-version-groups}/lib/clean.d.ts +0 -0
  210. /package/dist/{get-context/get-groups/version-group/instance-group → get-version-groups}/lib/clean.js +0 -0
  211. /package/dist/{get-context/get-groups/version-group/instance-group → get-version-groups}/lib/get-range-score.d.ts +0 -0
  212. /package/dist/{types.js → index.js} +0 -0
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSemverGroups = void 0;
7
+ const minimatch_1 = __importDefault(require("minimatch"));
8
+ const is_array_of_strings_1 = require("tightrope/guard/is-array-of-strings");
9
+ const is_non_empty_array_1 = require("tightrope/guard/is-non-empty-array");
10
+ const is_non_empty_string_1 = require("tightrope/guard/is-non-empty-string");
11
+ const is_object_1 = require("tightrope/guard/is-object");
12
+ const get_enabled_types_1 = require("../config/get-enabled-types");
13
+ const get_semver_range_1 = require("../config/get-semver-range");
14
+ const is_semver_1 = require("../lib/is-semver");
15
+ const catch_all_1 = require("./catch-all");
16
+ const filtered_out_1 = require("./filtered-out");
17
+ const ignored_1 = require("./ignored");
18
+ const with_range_1 = require("./with-range");
19
+ function getSemverGroups(ctx) {
20
+ const enabledTypes = (0, get_enabled_types_1.getEnabledTypes)(ctx.config);
21
+ const semverGroups = createSemverGroups(ctx);
22
+ ctx.packageJsonFiles.forEach((file) => {
23
+ file.getInstances(enabledTypes).forEach((instance) => {
24
+ const { name, pkgName } = instance;
25
+ for (const group of semverGroups) {
26
+ const { dependencies, dependencyTypes, packages } = group.config;
27
+ if (group.canAdd(instance) &&
28
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(dependencyTypes) ||
29
+ dependencyTypes.includes(instance.strategy.name)) &&
30
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(packages) ||
31
+ packages.some((pattern) => (0, minimatch_1.default)(instance.pkgName, pattern))) &&
32
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(dependencies) ||
33
+ dependencies.some((pattern) => (0, minimatch_1.default)(instance.name, pattern)))) {
34
+ group.instances.push(instance);
35
+ return;
36
+ }
37
+ }
38
+ throw new Error(`${name} in ${pkgName} did not match any semver groups`);
39
+ });
40
+ });
41
+ return semverGroups.filter((group) => (0, is_non_empty_array_1.isNonEmptyArray)(group.instances));
42
+ }
43
+ exports.getSemverGroups = getSemverGroups;
44
+ function createSemverGroups(ctx) {
45
+ const { cli, rcFile } = ctx.config;
46
+ const semverGroups = [new filtered_out_1.FilteredOutSemverGroup(ctx)];
47
+ if ((0, is_non_empty_array_1.isNonEmptyArray)(rcFile.semverGroups)) {
48
+ const ERR_OBJ = new Error('Invalid semverGroup');
49
+ const ERR_DEPS = new Error('Invalid semverGroup dependencies');
50
+ const ERR_PKGS = new Error('Invalid semverGroup packages');
51
+ rcFile.semverGroups.forEach((config) => {
52
+ if (!(0, is_object_1.isObject)(config))
53
+ throw ERR_OBJ;
54
+ if (!(0, is_array_of_strings_1.isArrayOfStrings)(config.dependencies))
55
+ throw ERR_DEPS;
56
+ if (!(0, is_array_of_strings_1.isArrayOfStrings)(config.packages))
57
+ throw ERR_PKGS;
58
+ const { dependencies, packages } = config;
59
+ const label = (0, is_non_empty_string_1.isNonEmptyString)(config.label) ? config.label : '';
60
+ const dependencyTypes = (0, is_array_of_strings_1.isArrayOfStrings)(config.dependencyTypes)
61
+ ? config.dependencyTypes
62
+ : [];
63
+ if (config.isIgnored === true) {
64
+ semverGroups.push(new ignored_1.IgnoredSemverGroup({
65
+ dependencies,
66
+ dependencyTypes,
67
+ isIgnored: true,
68
+ label,
69
+ packages,
70
+ }));
71
+ }
72
+ else if ((0, is_semver_1.isValidSemverRange)(config.range)) {
73
+ semverGroups.push(new with_range_1.WithRangeSemverGroup({
74
+ dependencies,
75
+ dependencyTypes,
76
+ label,
77
+ packages,
78
+ range: config.range,
79
+ }));
80
+ }
81
+ });
82
+ }
83
+ semverGroups.push(new catch_all_1.CatchAllSemverGroup({
84
+ dependencies: ['**'],
85
+ label: '',
86
+ packages: ['**'],
87
+ range: (0, get_semver_range_1.getSemverRange)({ cli, rcFile }),
88
+ }));
89
+ return semverGroups;
90
+ }
@@ -0,0 +1,11 @@
1
+ import type { SemverGroupReport } from '.';
2
+ import type { SemverGroupConfig } from '../config/types';
3
+ import type { Instance } from '../get-package-json-files/instance';
4
+ export declare class WithRangeSemverGroup {
5
+ _tag: string;
6
+ config: SemverGroupConfig.WithRange;
7
+ instances: Instance[];
8
+ constructor(config: SemverGroupConfig.WithRange);
9
+ canAdd(_: Instance): boolean;
10
+ inspect(): SemverGroupReport[];
11
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WithRangeSemverGroup = void 0;
4
+ const is_semver_1 = require("../lib/is-semver");
5
+ const set_semver_range_1 = require("../lib/set-semver-range");
6
+ class WithRangeSemverGroup {
7
+ constructor(config) {
8
+ this._tag = 'WithRange';
9
+ this.config = config;
10
+ this.instances = [];
11
+ }
12
+ canAdd(_) {
13
+ return true;
14
+ }
15
+ inspect() {
16
+ return this.instances.map((instance) => {
17
+ if (!(0, is_semver_1.isSupported)(instance.version)) {
18
+ return {
19
+ status: 'UNSUPPORTED_VERSION',
20
+ instance,
21
+ isValid: false,
22
+ name: instance.name,
23
+ };
24
+ }
25
+ const isWsInstance = instance.strategy.name === 'workspace';
26
+ const exactVersion = (0, set_semver_range_1.setSemverRange)('', instance.version);
27
+ const expectedVersion = (0, set_semver_range_1.setSemverRange)(this.config.range, instance.version);
28
+ if (isWsInstance && instance.version !== exactVersion) {
29
+ return {
30
+ status: 'WORKSPACE_SEMVER_RANGE_MISMATCH',
31
+ expectedVersion: exactVersion,
32
+ instance,
33
+ isValid: false,
34
+ name: instance.name,
35
+ };
36
+ }
37
+ if (instance.version === expectedVersion) {
38
+ return {
39
+ status: 'VALID',
40
+ instance,
41
+ isValid: true,
42
+ name: instance.name,
43
+ };
44
+ }
45
+ return {
46
+ status: 'SEMVER_RANGE_MISMATCH',
47
+ expectedVersion,
48
+ instance,
49
+ isValid: false,
50
+ name: instance.name,
51
+ };
52
+ });
53
+ }
54
+ }
55
+ exports.WithRangeSemverGroup = WithRangeSemverGroup;
@@ -0,0 +1,11 @@
1
+ import type { VersionGroupReport } from '.';
2
+ import type { VersionGroupConfig } from '../config/types';
3
+ import type { Instance } from '../get-package-json-files/instance';
4
+ export declare class BannedVersionGroup {
5
+ _tag: string;
6
+ config: VersionGroupConfig.Banned;
7
+ instances: Instance[];
8
+ constructor(config: VersionGroupConfig.Banned);
9
+ canAdd(_: Instance): boolean;
10
+ inspect(): VersionGroupReport[];
11
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BannedVersionGroup = void 0;
4
+ const group_by_1 = require("./lib/group-by");
5
+ class BannedVersionGroup {
6
+ constructor(config) {
7
+ this._tag = 'Banned';
8
+ this.config = config;
9
+ this.instances = [];
10
+ }
11
+ canAdd(_) {
12
+ return true;
13
+ }
14
+ inspect() {
15
+ const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
16
+ return Object.entries(instancesByName).map(([name, instances]) => ({
17
+ instances,
18
+ isValid: false,
19
+ name,
20
+ status: 'BANNED',
21
+ }));
22
+ }
23
+ }
24
+ exports.BannedVersionGroup = BannedVersionGroup;
@@ -0,0 +1,4 @@
1
+ import { StandardVersionGroup } from './standard';
2
+ export declare class CatchAllVersionGroup extends StandardVersionGroup {
3
+ _tag: string;
4
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CatchAllVersionGroup = void 0;
4
+ const standard_1 = require("./standard");
5
+ class CatchAllVersionGroup extends standard_1.StandardVersionGroup {
6
+ constructor() {
7
+ super(...arguments);
8
+ this._tag = 'CatchAll';
9
+ }
10
+ }
11
+ exports.CatchAllVersionGroup = CatchAllVersionGroup;
@@ -0,0 +1,13 @@
1
+ import type { VersionGroupReport } from '.';
2
+ import type { GroupConfig } from '../config/types';
3
+ import type { Context } from '../get-context';
4
+ import type { Instance } from '../get-package-json-files/instance';
5
+ export declare class FilteredOutVersionGroup {
6
+ _tag: string;
7
+ config: GroupConfig;
8
+ filter: string;
9
+ instances: Instance[];
10
+ constructor(ctx: Context);
11
+ canAdd(instance: Instance): boolean;
12
+ inspect(): VersionGroupReport[];
13
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilteredOutVersionGroup = void 0;
4
+ const get_filter_1 = require("../config/get-filter");
5
+ const group_by_1 = require("./lib/group-by");
6
+ class FilteredOutVersionGroup {
7
+ constructor(ctx) {
8
+ this._tag = 'FilteredOut';
9
+ this.config = {
10
+ dependencies: ['**'],
11
+ dependencyTypes: [],
12
+ label: 'Filtered out',
13
+ packages: ['**'],
14
+ };
15
+ this.filter = (0, get_filter_1.getFilter)(ctx.config);
16
+ this.instances = [];
17
+ }
18
+ canAdd(instance) {
19
+ return instance.name.search(new RegExp(this.filter)) === -1;
20
+ }
21
+ inspect() {
22
+ const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
23
+ return Object.entries(instancesByName).map(([name, instances]) => ({
24
+ instances,
25
+ isValid: true,
26
+ name,
27
+ status: 'FILTERED_OUT',
28
+ }));
29
+ }
30
+ }
31
+ exports.FilteredOutVersionGroup = FilteredOutVersionGroup;
@@ -0,0 +1,11 @@
1
+ import type { VersionGroupReport } from '.';
2
+ import type { VersionGroupConfig } from '../config/types';
3
+ import type { Instance } from '../get-package-json-files/instance';
4
+ export declare class IgnoredVersionGroup {
5
+ _tag: string;
6
+ config: VersionGroupConfig.Ignored;
7
+ instances: Instance[];
8
+ constructor(config: VersionGroupConfig.Ignored);
9
+ canAdd(_: Instance): boolean;
10
+ inspect(): VersionGroupReport[];
11
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IgnoredVersionGroup = void 0;
4
+ const group_by_1 = require("./lib/group-by");
5
+ class IgnoredVersionGroup {
6
+ constructor(config) {
7
+ this._tag = 'Ignored';
8
+ this.config = config;
9
+ this.instances = [];
10
+ }
11
+ canAdd(_) {
12
+ return true;
13
+ }
14
+ inspect() {
15
+ const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
16
+ return Object.entries(instancesByName).map(([name, instances]) => ({
17
+ instances,
18
+ isValid: true,
19
+ name,
20
+ status: 'IGNORED',
21
+ }));
22
+ }
23
+ }
24
+ exports.IgnoredVersionGroup = IgnoredVersionGroup;
@@ -0,0 +1,57 @@
1
+ import type { Context } from '../get-context';
2
+ import type { Instance } from '../get-package-json-files/instance';
3
+ import { BannedVersionGroup } from './banned';
4
+ import { CatchAllVersionGroup } from './catch-all';
5
+ import { FilteredOutVersionGroup } from './filtered-out';
6
+ import { IgnoredVersionGroup } from './ignored';
7
+ import { PinnedVersionGroup } from './pinned';
8
+ import { SnappedToVersionGroup } from './snapped-to';
9
+ import { StandardVersionGroup } from './standard';
10
+ export type AnyVersionGroup = BannedVersionGroup | CatchAllVersionGroup | FilteredOutVersionGroup | IgnoredVersionGroup | PinnedVersionGroup | SnappedToVersionGroup | StandardVersionGroup;
11
+ export type VersionGroupReport = {
12
+ name: string;
13
+ instances: Instance[];
14
+ } & ({
15
+ status: 'BANNED';
16
+ isValid: false;
17
+ } | {
18
+ status: 'FILTERED_OUT';
19
+ isValid: true;
20
+ } | {
21
+ status: 'HIGHEST_SEMVER_MISMATCH';
22
+ isValid: false;
23
+ expectedVersion: string;
24
+ } | {
25
+ status: 'IGNORED';
26
+ isValid: true;
27
+ } | {
28
+ status: 'LOWEST_SEMVER_MISMATCH';
29
+ isValid: false;
30
+ expectedVersion: string;
31
+ } | {
32
+ status: 'PINNED_MISMATCH';
33
+ isValid: false;
34
+ expectedVersion: string;
35
+ } | {
36
+ status: 'SEMVER_UNSATISFIED';
37
+ isValid: false;
38
+ } | {
39
+ status: 'SNAPPED_TO_MISMATCH';
40
+ isValid: false;
41
+ expectedVersion: string;
42
+ } | {
43
+ status: 'UNSUPPORTED_MISMATCH';
44
+ isValid: false;
45
+ } | {
46
+ status: 'VALID';
47
+ isValid: true;
48
+ } | {
49
+ status: 'WORKSPACE_MISMATCH';
50
+ isValid: false;
51
+ expectedVersion: string;
52
+ workspaceInstance: Instance;
53
+ } | {
54
+ status: 'WORKSPACE_UNSATISFIED';
55
+ isValid: false;
56
+ });
57
+ export declare function getVersionGroups(ctx: Context): AnyVersionGroup[];
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getVersionGroups = void 0;
7
+ const minimatch_1 = __importDefault(require("minimatch"));
8
+ const is_array_of_strings_1 = require("tightrope/guard/is-array-of-strings");
9
+ const is_non_empty_array_1 = require("tightrope/guard/is-non-empty-array");
10
+ const is_non_empty_string_1 = require("tightrope/guard/is-non-empty-string");
11
+ const is_object_1 = require("tightrope/guard/is-object");
12
+ const get_enabled_types_1 = require("../config/get-enabled-types");
13
+ const banned_1 = require("./banned");
14
+ const catch_all_1 = require("./catch-all");
15
+ const filtered_out_1 = require("./filtered-out");
16
+ const ignored_1 = require("./ignored");
17
+ const pinned_1 = require("./pinned");
18
+ const snapped_to_1 = require("./snapped-to");
19
+ const standard_1 = require("./standard");
20
+ function getVersionGroups(ctx) {
21
+ const enabledTypes = (0, get_enabled_types_1.getEnabledTypes)(ctx.config);
22
+ const versionGroups = createVersionGroups(ctx);
23
+ ctx.packageJsonFiles.forEach((file) => {
24
+ file.getInstances(enabledTypes).forEach((instance) => {
25
+ const { name, pkgName } = instance;
26
+ for (const group of versionGroups) {
27
+ const { dependencies, dependencyTypes, packages } = group.config;
28
+ if (group.canAdd(instance) &&
29
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(dependencyTypes) ||
30
+ dependencyTypes.includes(instance.strategy.name)) &&
31
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(packages) ||
32
+ packages.some((pattern) => (0, minimatch_1.default)(instance.pkgName, pattern))) &&
33
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(dependencies) ||
34
+ dependencies.some((pattern) => (0, minimatch_1.default)(instance.name, pattern)))) {
35
+ group.instances.push(instance);
36
+ return;
37
+ }
38
+ }
39
+ throw new Error(`${name} in ${pkgName} did not match any version groups`);
40
+ });
41
+ });
42
+ return versionGroups.filter((group) => (0, is_non_empty_array_1.isNonEmptyArray)(group.instances));
43
+ }
44
+ exports.getVersionGroups = getVersionGroups;
45
+ function createVersionGroups(ctx) {
46
+ const { rcFile } = ctx.config;
47
+ const versionGroups = [new filtered_out_1.FilteredOutVersionGroup(ctx)];
48
+ if ((0, is_non_empty_array_1.isNonEmptyArray)(rcFile.versionGroups)) {
49
+ const ERR_OBJ = new Error('Invalid versionGroup');
50
+ const ERR_DEPS = new Error('Invalid versionGroup dependencies');
51
+ const ERR_PKGS = new Error('Invalid versionGroup packages');
52
+ rcFile.versionGroups.forEach((config) => {
53
+ if (!(0, is_object_1.isObject)(config))
54
+ throw ERR_OBJ;
55
+ if (!(0, is_array_of_strings_1.isArrayOfStrings)(config.dependencies))
56
+ throw ERR_DEPS;
57
+ if (!(0, is_array_of_strings_1.isArrayOfStrings)(config.packages))
58
+ throw ERR_PKGS;
59
+ const { dependencies, packages } = config;
60
+ const label = (0, is_non_empty_string_1.isNonEmptyString)(config.label) ? config.label : '';
61
+ const dependencyTypes = (0, is_array_of_strings_1.isArrayOfStrings)(config.dependencyTypes)
62
+ ? config.dependencyTypes
63
+ : [];
64
+ if (config.isBanned === true) {
65
+ versionGroups.push(new banned_1.BannedVersionGroup({
66
+ dependencies,
67
+ dependencyTypes,
68
+ isBanned: true,
69
+ label,
70
+ packages,
71
+ }));
72
+ }
73
+ else if (config.isIgnored === true) {
74
+ versionGroups.push(new ignored_1.IgnoredVersionGroup({
75
+ dependencies,
76
+ dependencyTypes,
77
+ isIgnored: true,
78
+ label,
79
+ packages,
80
+ }));
81
+ }
82
+ else if ((0, is_non_empty_string_1.isNonEmptyString)(config.pinVersion)) {
83
+ versionGroups.push(new pinned_1.PinnedVersionGroup({
84
+ dependencies,
85
+ dependencyTypes,
86
+ label,
87
+ packages,
88
+ pinVersion: config.pinVersion,
89
+ }));
90
+ }
91
+ else if ((0, is_array_of_strings_1.isArrayOfStrings)(config.snapTo)) {
92
+ versionGroups.push(new snapped_to_1.SnappedToVersionGroup({
93
+ dependencies,
94
+ dependencyTypes,
95
+ label,
96
+ packages,
97
+ snapTo: config.snapTo,
98
+ }));
99
+ }
100
+ else {
101
+ versionGroups.push(new standard_1.StandardVersionGroup({
102
+ dependencies,
103
+ dependencyTypes,
104
+ label,
105
+ packages,
106
+ preferVersion: config.preferVersion === 'lowestSemver'
107
+ ? 'lowestSemver'
108
+ : 'highestSemver',
109
+ }));
110
+ }
111
+ });
112
+ }
113
+ versionGroups.push(new catch_all_1.CatchAllVersionGroup({
114
+ dependencies: ['**'],
115
+ packages: ['**'],
116
+ preferVersion: 'highestSemver',
117
+ }));
118
+ return versionGroups;
119
+ }
@@ -0,0 +1,2 @@
1
+ export declare const DELETE: unique symbol;
2
+ export type Delete = typeof DELETE;
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE = void 0;
4
+ exports.DELETE = Symbol('DELETE');
@@ -0,0 +1,2 @@
1
+ import type { Result } from 'tightrope/result';
2
+ export declare function getHighestVersion(versions: string[]): Result<string>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getHighestVersion = void 0;
4
+ const pipe_1 = require("tightrope/fn/pipe");
5
+ const is_non_empty_string_1 = require("tightrope/guard/is-non-empty-string");
6
+ const filter_1 = require("tightrope/result/filter");
7
+ const from_try_1 = require("tightrope/result/from-try");
8
+ const map_1 = require("tightrope/result/map");
9
+ const sort_1 = require("./sort");
10
+ function getHighestVersion(versions) {
11
+ return (0, pipe_1.pipe)((0, from_try_1.fromTry)(() => [...versions].sort(sort_1.compareSemver)), (0, map_1.map)((sorted) => sorted[sorted.length - 1]), (0, filter_1.filter)(is_non_empty_string_1.isNonEmptyString, 'getHighestVersion(): did not return a version'));
12
+ }
13
+ exports.getHighestVersion = getHighestVersion;
@@ -0,0 +1,2 @@
1
+ import type { Result } from 'tightrope/result';
2
+ export declare function getLowestVersion(versions: string[]): Result<string>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLowestVersion = void 0;
4
+ const pipe_1 = require("tightrope/fn/pipe");
5
+ const is_non_empty_string_1 = require("tightrope/guard/is-non-empty-string");
6
+ const filter_1 = require("tightrope/result/filter");
7
+ const from_try_1 = require("tightrope/result/from-try");
8
+ const map_1 = require("tightrope/result/map");
9
+ const sort_1 = require("./sort");
10
+ function getLowestVersion(versions) {
11
+ return (0, pipe_1.pipe)((0, from_try_1.fromTry)(() => [...versions].sort(sort_1.compareSemver)), (0, map_1.map)(([lowest]) => lowest), (0, filter_1.filter)(is_non_empty_string_1.isNonEmptyString, 'getLowestVersion(): did not return a version'));
12
+ }
13
+ exports.getLowestVersion = getLowestVersion;
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRangeScore = void 0;
4
- const constants_1 = require("../../../../../constants");
4
+ const constants_1 = require("../../constants");
5
5
  const scoresByRange = {
6
- [constants_1.RANGE.ANY]: 8,
6
+ [constants_1.RANGE.ANY]: 9,
7
+ [constants_1.RANGE.WORKSPACE]: 8,
7
8
  [constants_1.RANGE.GT]: 7,
8
9
  [constants_1.RANGE.GTE]: 6,
9
10
  [constants_1.RANGE.MINOR]: 5,
@@ -0,0 +1,2 @@
1
+ import type { Instance } from '../../get-package-json-files/instance';
2
+ export declare function getUniqueVersions(instances: Instance[]): string[];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUniqueVersions = void 0;
4
+ const uniq_1 = require("tightrope/array/uniq");
5
+ function getUniqueVersions(instances) {
6
+ return (0, uniq_1.uniq)(instances.map((i) => i.version));
7
+ }
8
+ exports.getUniqueVersions = getUniqueVersions;
@@ -0,0 +1 @@
1
+ export declare function groupBy<A extends any[]>(key: string, array: A): Record<string, A>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.groupBy = void 0;
4
+ function groupBy(key, array) {
5
+ return array.reduce((objectsByKeyValue, obj) => {
6
+ const value = obj[key];
7
+ objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);
8
+ return objectsByKeyValue;
9
+ }, {});
10
+ }
11
+ exports.groupBy = groupBy;
@@ -0,0 +1 @@
1
+ export declare function compareSemver(a: string, b: string): -1 | 0 | 1;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compareSemver = void 0;
7
+ const gt_1 = __importDefault(require("semver/functions/gt"));
8
+ const lt_1 = __importDefault(require("semver/functions/lt"));
9
+ const is_semver_1 = require("../../lib/is-semver");
10
+ const clean_1 = require("./clean");
11
+ const get_range_score_1 = require("./get-range-score");
12
+ const EQ = 0;
13
+ const LT = -1;
14
+ const GT = 1;
15
+ function compareSemver(a, b) {
16
+ if (!(0, is_semver_1.isSupported)(a))
17
+ throw new Error(`"${a}" is not supported`);
18
+ if (!(0, is_semver_1.isSupported)(b))
19
+ throw new Error(`"${b}" is not supported`);
20
+ if (a.startsWith('workspace:'))
21
+ return LT;
22
+ if (b.startsWith('workspace:'))
23
+ return GT;
24
+ if (a === b)
25
+ return EQ;
26
+ if (a === '*')
27
+ return GT;
28
+ if (b === '*')
29
+ return LT;
30
+ const cleanA = (0, clean_1.clean)(a);
31
+ const cleanB = (0, clean_1.clean)(b);
32
+ if ((0, gt_1.default)(cleanA, cleanB))
33
+ return GT;
34
+ if ((0, lt_1.default)(cleanA, cleanB))
35
+ return LT;
36
+ const scoreA = (0, get_range_score_1.getRangeScore)(a);
37
+ const scoreB = (0, get_range_score_1.getRangeScore)(b);
38
+ if (scoreA < scoreB)
39
+ return LT;
40
+ if (scoreA > scoreB)
41
+ return GT;
42
+ return EQ;
43
+ }
44
+ exports.compareSemver = compareSemver;
@@ -0,0 +1,11 @@
1
+ import type { VersionGroupReport } from '.';
2
+ import type { VersionGroupConfig } from '../config/types';
3
+ import type { Instance } from '../get-package-json-files/instance';
4
+ export declare class PinnedVersionGroup {
5
+ _tag: string;
6
+ config: VersionGroupConfig.Pinned;
7
+ instances: Instance[];
8
+ constructor(config: VersionGroupConfig.Pinned);
9
+ canAdd(_: Instance): boolean;
10
+ inspect(): VersionGroupReport[];
11
+ }