syncpack 10.2.0 → 10.6.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.
Files changed (180) hide show
  1. package/dist/bin-fix-mismatches/effects.d.ts +2 -0
  2. package/dist/bin-fix-mismatches/effects.js +112 -0
  3. package/dist/bin-fix-mismatches/fix-mismatches.d.ts +4 -2
  4. package/dist/bin-fix-mismatches/fix-mismatches.js +38 -50
  5. package/dist/bin-fix-mismatches/index.js +28 -4
  6. package/dist/bin-format/format-cli.d.ts +4 -3
  7. package/dist/bin-format/format-cli.js +35 -4
  8. package/dist/bin-format/format.d.ts +3 -2
  9. package/dist/bin-format/format.js +25 -1
  10. package/dist/bin-format/index.js +27 -3
  11. package/dist/bin-lint/index.js +28 -4
  12. package/dist/bin-lint/lint.d.ts +4 -0
  13. package/dist/bin-lint/lint.js +44 -0
  14. package/dist/bin-lint-semver-ranges/effects.d.ts +2 -0
  15. package/dist/bin-lint-semver-ranges/effects.js +70 -0
  16. package/dist/bin-lint-semver-ranges/index.js +28 -4
  17. package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +4 -2
  18. package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +14 -39
  19. package/dist/bin-list/effects.d.ts +2 -0
  20. package/dist/bin-list/effects.js +112 -0
  21. package/dist/bin-list/index.js +28 -4
  22. package/dist/bin-list/list.d.ts +4 -2
  23. package/dist/bin-list/list.js +14 -72
  24. package/dist/bin-list-mismatches/effects.d.ts +2 -0
  25. package/dist/bin-list-mismatches/effects.js +136 -0
  26. package/dist/bin-list-mismatches/index.js +28 -4
  27. package/dist/bin-list-mismatches/list-mismatches.d.ts +4 -2
  28. package/dist/bin-list-mismatches/list-mismatches.js +14 -82
  29. package/dist/bin-prompt/effects.d.ts +2 -0
  30. package/dist/bin-prompt/effects.js +110 -0
  31. package/dist/bin-prompt/index.d.ts +2 -0
  32. package/dist/bin-prompt/index.js +80 -0
  33. package/dist/bin-prompt/prompt.d.ts +4 -0
  34. package/dist/bin-prompt/prompt.js +42 -0
  35. package/dist/bin-set-semver-ranges/effects.d.ts +2 -0
  36. package/dist/bin-set-semver-ranges/effects.js +61 -0
  37. package/dist/bin-set-semver-ranges/index.js +28 -4
  38. package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +4 -2
  39. package/dist/bin-set-semver-ranges/set-semver-ranges.js +39 -22
  40. package/dist/bin.js +3 -0
  41. package/dist/config/get-custom-types.d.ts +2 -2
  42. package/dist/config/get-enabled-types.d.ts +12 -2
  43. package/dist/config/get-enabled-types.js +38 -4
  44. package/dist/config/get-filter.d.ts +2 -2
  45. package/dist/config/get-indent.d.ts +2 -2
  46. package/dist/config/get-semver-range.d.ts +2 -2
  47. package/dist/config/get-semver-range.js +4 -4
  48. package/dist/config/get-sort-az.d.ts +2 -2
  49. package/dist/config/get-sort-az.js +1 -0
  50. package/dist/config/get-sort-first.d.ts +2 -2
  51. package/dist/config/get-source.d.ts +2 -2
  52. package/dist/config/get-source.js +1 -2
  53. package/dist/config/types.d.ts +15 -7
  54. package/dist/config/types.js +26 -0
  55. package/dist/constants.d.ts +1 -1
  56. package/dist/constants.js +1 -1
  57. package/dist/create-program/effects.d.ts +42 -0
  58. package/dist/create-program/effects.js +2 -0
  59. package/dist/create-program/semver-ranges.d.ts +7 -0
  60. package/dist/create-program/semver-ranges.js +43 -0
  61. package/dist/create-program/versions.d.ts +7 -0
  62. package/dist/create-program/versions.js +48 -0
  63. package/dist/env/create-env.d.ts +21 -0
  64. package/dist/env/create-env.js +60 -0
  65. package/dist/env/default-env.d.ts +18 -0
  66. package/dist/env/default-env.js +95 -0
  67. package/dist/env/exit-if-invalid.d.ts +4 -0
  68. package/dist/env/exit-if-invalid.js +34 -0
  69. package/dist/env/tags.d.ts +58 -0
  70. package/dist/env/tags.js +50 -0
  71. package/dist/env/write-if-changed.d.ts +11 -0
  72. package/dist/env/write-if-changed.js +73 -0
  73. package/dist/error-handlers/create-error-handlers.d.ts +19 -0
  74. package/dist/error-handlers/create-error-handlers.js +57 -0
  75. package/dist/error-handlers/default-error-handlers.d.ts +2 -0
  76. package/dist/error-handlers/default-error-handlers.js +57 -0
  77. package/dist/get-context/index.d.ts +11 -8
  78. package/dist/get-context/index.js +31 -9
  79. package/dist/get-package-json-files/get-file-paths.d.ts +17 -8
  80. package/dist/get-package-json-files/get-file-paths.js +40 -20
  81. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +4 -3
  82. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.js +31 -8
  83. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +4 -3
  84. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.js +36 -14
  85. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +4 -3
  86. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.js +37 -9
  87. package/dist/get-package-json-files/get-patterns/index.d.ts +4 -4
  88. package/dist/get-package-json-files/get-patterns/index.js +37 -18
  89. package/dist/get-package-json-files/get-patterns/read-json-safe.d.ts +15 -3
  90. package/dist/get-package-json-files/get-patterns/read-json-safe.js +36 -10
  91. package/dist/get-package-json-files/index.d.ts +7 -4
  92. package/dist/get-package-json-files/index.js +27 -9
  93. package/dist/get-package-json-files/instance.js +2 -2
  94. package/dist/get-package-json-files/package-json-file.d.ts +6 -10
  95. package/dist/get-package-json-files/package-json-file.js +5 -21
  96. package/dist/get-semver-groups/filtered-out.d.ts +12 -6
  97. package/dist/get-semver-groups/filtered-out.js +40 -14
  98. package/dist/get-semver-groups/ignored.d.ts +10 -4
  99. package/dist/get-semver-groups/ignored.js +34 -8
  100. package/dist/get-semver-groups/index.d.ts +80 -28
  101. package/dist/get-semver-groups/index.js +93 -44
  102. package/dist/get-semver-groups/with-range.d.ts +12 -5
  103. package/dist/get-semver-groups/with-range.js +49 -25
  104. package/dist/get-version-groups/banned.d.ts +10 -4
  105. package/dist/get-version-groups/banned.js +34 -8
  106. package/dist/get-version-groups/filtered-out.d.ts +12 -6
  107. package/dist/get-version-groups/filtered-out.js +40 -14
  108. package/dist/get-version-groups/ignored.d.ts +10 -4
  109. package/dist/get-version-groups/ignored.js +34 -8
  110. package/dist/get-version-groups/index.d.ts +132 -50
  111. package/dist/get-version-groups/index.js +130 -51
  112. package/dist/get-version-groups/lib/get-highest-version.js +2 -2
  113. package/dist/get-version-groups/lib/get-lowest-version.js +2 -2
  114. package/dist/get-version-groups/lib/get-range-score.js +1 -3
  115. package/dist/get-version-groups/lib/sort.js +3 -3
  116. package/dist/get-version-groups/pinned.d.ts +10 -4
  117. package/dist/get-version-groups/pinned.js +39 -16
  118. package/dist/get-version-groups/same-range.d.ts +17 -0
  119. package/dist/get-version-groups/same-range.js +70 -0
  120. package/dist/get-version-groups/snapped-to.d.ts +10 -4
  121. package/dist/get-version-groups/snapped-to.js +41 -16
  122. package/dist/get-version-groups/standard.d.ts +12 -5
  123. package/dist/get-version-groups/standard.js +63 -39
  124. package/dist/guards/can-add-to-group.d.ts +4 -0
  125. package/dist/guards/can-add-to-group.js +15 -0
  126. package/dist/guards/is-loose-semver.d.ts +1 -0
  127. package/dist/guards/is-loose-semver.js +9 -0
  128. package/dist/guards/is-semver.d.ts +1 -0
  129. package/dist/guards/is-semver.js +16 -0
  130. package/dist/guards/is-supported.d.ts +1 -0
  131. package/dist/guards/is-supported.js +17 -0
  132. package/dist/guards/is-valid-semver-range.d.ts +2 -0
  133. package/dist/guards/is-valid-semver-range.js +17 -0
  134. package/dist/lib/$R.js +2 -2
  135. package/dist/lib/log-group-header.d.ts +6 -0
  136. package/dist/lib/log-group-header.js +34 -0
  137. package/dist/lib/log-verbose.d.ts +1 -0
  138. package/dist/lib/log-verbose.js +24 -0
  139. package/dist/lib/set-semver-range.js +5 -5
  140. package/dist/lib/split-name-and-version.d.ts +5 -0
  141. package/dist/lib/split-name-and-version.js +12 -0
  142. package/dist/option.js +1 -4
  143. package/dist/strategy/lib/get-non-empty-string-prop.js +2 -2
  144. package/dist/strategy/name-and-version-props.js +5 -5
  145. package/dist/strategy/named-version-string.js +5 -5
  146. package/dist/strategy/unnamed-version-string.js +4 -4
  147. package/dist/strategy/versions-by-name.js +3 -3
  148. package/package.json +28 -17
  149. package/dist/bin-fix-mismatches/fix-mismatches-cli.d.ts +0 -3
  150. package/dist/bin-fix-mismatches/fix-mismatches-cli.js +0 -12
  151. package/dist/bin-lint/lint-cli.d.ts +0 -3
  152. package/dist/bin-lint/lint-cli.js +0 -12
  153. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.d.ts +0 -3
  154. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.js +0 -11
  155. package/dist/bin-list/list-cli.d.ts +0 -3
  156. package/dist/bin-list/list-cli.js +0 -11
  157. package/dist/bin-list-mismatches/list-mismatches-cli.d.ts +0 -3
  158. package/dist/bin-list-mismatches/list-mismatches-cli.js +0 -11
  159. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.d.ts +0 -3
  160. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.js +0 -11
  161. package/dist/get-package-json-files/get-patterns/read-yaml-safe.d.ts +0 -3
  162. package/dist/get-package-json-files/get-patterns/read-yaml-safe.js +0 -12
  163. package/dist/get-semver-groups/catch-all.d.ts +0 -4
  164. package/dist/get-semver-groups/catch-all.js +0 -11
  165. package/dist/get-version-groups/catch-all.d.ts +0 -4
  166. package/dist/get-version-groups/catch-all.js +0 -11
  167. package/dist/lib/disk.d.ts +0 -14
  168. package/dist/lib/disk.js +0 -68
  169. package/dist/lib/exit-if-invalid.d.ts +0 -2
  170. package/dist/lib/exit-if-invalid.js +0 -10
  171. package/dist/lib/is-semver.d.ts +0 -6
  172. package/dist/lib/is-semver.js +0 -49
  173. package/dist/lib/log.d.ts +0 -5
  174. package/dist/lib/log.js +0 -51
  175. package/dist/lib/newlines.d.ts +0 -6
  176. package/dist/lib/newlines.js +0 -24
  177. package/dist/lib/print-strings.d.ts +0 -1
  178. package/dist/lib/print-strings.js +0 -7
  179. package/dist/lib/write-if-changed.d.ts +0 -2
  180. package/dist/lib/write-if-changed.js +0 -21
@@ -1,40 +1,63 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.PinnedVersionGroup = void 0;
27
+ const Data = __importStar(require("@effect/data/Data"));
28
+ const Effect = __importStar(require("@effect/io/Effect"));
29
+ const _1 = require(".");
4
30
  const group_by_1 = require("./lib/group-by");
5
- class PinnedVersionGroup {
31
+ class PinnedVersionGroup extends Data.TaggedClass('Pinned') {
6
32
  constructor(config) {
7
- this._tag = 'Pinned';
8
- this.config = config;
9
- this.instances = [];
33
+ super({
34
+ config,
35
+ instances: [],
36
+ });
10
37
  }
11
38
  canAdd(_) {
12
39
  return true;
13
40
  }
14
41
  inspect() {
15
- const report = [];
16
42
  const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
17
43
  const expectedVersion = this.config.pinVersion;
18
- Object.entries(instancesByName).forEach(([name, instances]) => {
44
+ return Object.entries(instancesByName).map(([name, instances]) => {
19
45
  if (hasMismatch(expectedVersion, instances)) {
20
- report.push({
21
- expectedVersion,
46
+ return Effect.fail(new _1.VersionGroupReport.PinnedMismatch({
47
+ name,
22
48
  instances,
23
49
  isValid: false,
24
- name,
25
- status: 'PINNED_MISMATCH',
26
- });
50
+ expectedVersion,
51
+ }));
27
52
  }
28
53
  else {
29
- report.push({
54
+ return Effect.succeed(new _1.VersionGroupReport.Valid({
55
+ name,
30
56
  instances,
31
57
  isValid: true,
32
- name,
33
- status: 'VALID',
34
- });
58
+ }));
35
59
  }
36
60
  });
37
- return report;
38
61
  }
39
62
  }
40
63
  exports.PinnedVersionGroup = PinnedVersionGroup;
@@ -0,0 +1,17 @@
1
+ import * as Data from '@effect/data/Data';
2
+ import * as Effect from '@effect/io/Effect';
3
+ import { VersionGroupReport } from '.';
4
+ import type { VersionGroupConfig } from '../config/types';
5
+ import type { Instance } from '../get-package-json-files/instance';
6
+ declare const SameRangeVersionGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
+ _tag: "SameRange";
8
+ }>;
9
+ export declare class SameRangeVersionGroup extends SameRangeVersionGroup_base<{
10
+ config: VersionGroupConfig.SameRange;
11
+ instances: Instance[];
12
+ }> {
13
+ constructor(config: VersionGroupConfig.SameRange);
14
+ canAdd(_: Instance): boolean;
15
+ inspect(): Effect.Effect<never, VersionGroupReport.SameRangeMismatch, VersionGroupReport.Valid>[];
16
+ }
17
+ export {};
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.SameRangeVersionGroup = void 0;
30
+ const Data = __importStar(require("@effect/data/Data"));
31
+ const Effect = __importStar(require("@effect/io/Effect"));
32
+ const intersects_1 = __importDefault(require("semver/ranges/intersects"));
33
+ const _1 = require(".");
34
+ const group_by_1 = require("./lib/group-by");
35
+ class SameRangeVersionGroup extends Data.TaggedClass('SameRange') {
36
+ constructor(config) {
37
+ super({
38
+ config,
39
+ instances: [],
40
+ });
41
+ }
42
+ canAdd(_) {
43
+ return true;
44
+ }
45
+ inspect() {
46
+ const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
47
+ return Object.entries(instancesByName).map(([name, instances]) => {
48
+ if (hasMismatch(instances)) {
49
+ return Effect.fail(new _1.VersionGroupReport.SameRangeMismatch({
50
+ name,
51
+ instances,
52
+ isValid: false,
53
+ }));
54
+ }
55
+ else {
56
+ return Effect.succeed(new _1.VersionGroupReport.Valid({
57
+ name,
58
+ instances,
59
+ isValid: true,
60
+ }));
61
+ }
62
+ });
63
+ }
64
+ }
65
+ exports.SameRangeVersionGroup = SameRangeVersionGroup;
66
+ /** Every range must fall within every other range */
67
+ function hasMismatch(instances) {
68
+ const loose = true;
69
+ return instances.some((a) => instances.some((b) => !(0, intersects_1.default)(a.version, b.version, loose)));
70
+ }
@@ -1,11 +1,17 @@
1
- import type { VersionGroupReport } from '.';
1
+ import * as Data from '@effect/data/Data';
2
+ import * as Effect from '@effect/io/Effect';
3
+ import { VersionGroupReport } from '.';
2
4
  import type { VersionGroupConfig } from '../config/types';
3
5
  import type { Instance } from '../get-package-json-files/instance';
4
- export declare class SnappedToVersionGroup {
5
- _tag: string;
6
+ declare const SnappedToVersionGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
+ _tag: "SnappedTo";
8
+ }>;
9
+ export declare class SnappedToVersionGroup extends SnappedToVersionGroup_base<{
6
10
  config: VersionGroupConfig.SnappedTo;
7
11
  instances: Instance[];
12
+ }> {
8
13
  constructor(config: VersionGroupConfig.SnappedTo);
9
14
  canAdd(_: Instance): boolean;
10
- inspect(): VersionGroupReport[];
15
+ inspect(): Effect.Effect<never, VersionGroupReport.SnappedToMismatch, VersionGroupReport.Valid>[];
11
16
  }
17
+ export {};
@@ -1,41 +1,65 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.SnappedToVersionGroup = void 0;
27
+ const Data = __importStar(require("@effect/data/Data"));
28
+ const Effect = __importStar(require("@effect/io/Effect"));
29
+ const _1 = require(".");
4
30
  const group_by_1 = require("./lib/group-by");
5
- class SnappedToVersionGroup {
31
+ class SnappedToVersionGroup extends Data.TaggedClass('SnappedTo') {
6
32
  constructor(config) {
7
- this._tag = 'SnappedTo';
8
- this.config = config;
9
- this.instances = [];
33
+ super({
34
+ config,
35
+ instances: [],
36
+ });
10
37
  }
11
38
  canAdd(_) {
12
39
  return true;
13
40
  }
14
41
  inspect() {
15
- const report = [];
16
42
  const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
17
- Object.entries(instancesByName).forEach(([name, instances]) => {
43
+ return Object.entries(instancesByName).map(([name, instances]) => {
18
44
  const snapTo = this.config.snapTo;
19
45
  const expectedVersion = getExpectedVersion(snapTo, instances);
20
46
  if (hasMismatch(expectedVersion, instances)) {
21
- report.push({
22
- expectedVersion,
47
+ return Effect.fail(new _1.VersionGroupReport.SnappedToMismatch({
48
+ name,
23
49
  instances,
24
50
  isValid: false,
25
- name,
26
- status: 'SNAPPED_TO_MISMATCH',
27
- });
51
+ expectedVersion,
52
+ snapTo,
53
+ }));
28
54
  }
29
55
  else {
30
- report.push({
56
+ return Effect.succeed(new _1.VersionGroupReport.Valid({
57
+ name,
31
58
  instances,
32
59
  isValid: true,
33
- name,
34
- status: 'VALID',
35
- });
60
+ }));
36
61
  }
37
62
  });
38
- return report;
39
63
  }
40
64
  }
41
65
  exports.SnappedToVersionGroup = SnappedToVersionGroup;
@@ -45,6 +69,7 @@ function getExpectedVersion(snapTo, instances) {
45
69
  .find((i) => i.version)?.version;
46
70
  if (expectedVersion)
47
71
  return expectedVersion;
72
+ // @FIXME: create tagged error for this
48
73
  throw new Error('versionGroup.snapTo does not match any package versions');
49
74
  }
50
75
  function hasMismatch(expectedVersion, instances) {
@@ -1,11 +1,18 @@
1
- import type { VersionGroupReport } from '.';
1
+ import * as Data from '@effect/data/Data';
2
+ import * as Effect from '@effect/io/Effect';
3
+ import { VersionGroupReport } from '.';
2
4
  import type { VersionGroupConfig } from '../config/types';
3
5
  import type { Instance } from '../get-package-json-files/instance';
4
- export declare class StandardVersionGroup {
5
- _tag: string;
6
+ declare const StandardVersionGroup_base: new <A extends Record<string, any>>(args: Data.IsEqualTo<Omit<A, keyof import("@effect/data/Equal").Equal>, {}> extends true ? void : Omit<A, keyof import("@effect/data/Equal").Equal>) => Data.Data<A & {
7
+ _tag: "Standard";
8
+ }>;
9
+ export declare class StandardVersionGroup extends StandardVersionGroup_base<{
6
10
  config: VersionGroupConfig.Standard;
7
11
  instances: Instance[];
8
- constructor(config: VersionGroupConfig.Standard);
12
+ isCatchAll: boolean;
13
+ }> {
14
+ constructor(isCatchAll: boolean, config: VersionGroupConfig.Standard);
9
15
  canAdd(_: Instance): boolean;
10
- inspect(): VersionGroupReport[];
16
+ inspect(): Effect.Effect<never, VersionGroupReport.WorkspaceMismatch | VersionGroupReport.UnsupportedMismatch | VersionGroupReport.HighestSemverMismatch | VersionGroupReport.LowestSemverMismatch, VersionGroupReport.Valid>[];
11
17
  }
18
+ export {};
@@ -1,32 +1,58 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.StandardVersionGroup = void 0;
27
+ const Data = __importStar(require("@effect/data/Data"));
28
+ const Effect = __importStar(require("@effect/io/Effect"));
4
29
  const unwrap_1 = require("tightrope/result/unwrap");
5
- const is_semver_1 = require("../lib/is-semver");
30
+ const _1 = require(".");
31
+ const is_supported_1 = require("../guards/is-supported");
6
32
  const get_highest_version_1 = require("./lib/get-highest-version");
7
33
  const get_lowest_version_1 = require("./lib/get-lowest-version");
8
34
  const get_unique_versions_1 = require("./lib/get-unique-versions");
9
35
  const group_by_1 = require("./lib/group-by");
10
- class StandardVersionGroup {
11
- constructor(config) {
12
- this._tag = 'Standard';
13
- this.config = config;
14
- this.instances = [];
36
+ class StandardVersionGroup extends Data.TaggedClass('Standard') {
37
+ constructor(isCatchAll, config) {
38
+ super({
39
+ config,
40
+ instances: [],
41
+ isCatchAll,
42
+ });
15
43
  }
16
44
  canAdd(_) {
17
45
  return true;
18
46
  }
19
47
  inspect() {
20
- const report = [];
21
48
  const instancesByName = (0, group_by_1.groupBy)('name', this.instances);
22
- Object.entries(instancesByName).forEach(([name, instances]) => {
49
+ return Object.entries(instancesByName).map(([name, instances]) => {
23
50
  if (!hasMismatch(instances)) {
24
- return report.push({
25
- status: 'VALID',
51
+ return Effect.succeed(new _1.VersionGroupReport.Valid({
52
+ name,
26
53
  instances,
27
54
  isValid: true,
28
- name,
29
- });
55
+ }));
30
56
  }
31
57
  const wsInstance = getWorkspaceInstance(instances);
32
58
  const wsFile = wsInstance?.packageJsonFile;
@@ -35,57 +61,55 @@ class StandardVersionGroup {
35
61
  if (isWorkspacePackage) {
36
62
  const nonWsInstances = getNonWorkspaceInstances(instances);
37
63
  if (!hasMismatch(nonWsInstances)) {
38
- return report.push({
39
- status: 'VALID',
64
+ return Effect.succeed(new _1.VersionGroupReport.Valid({
65
+ name,
40
66
  instances,
41
67
  isValid: true,
42
- name,
43
- });
68
+ }));
44
69
  }
45
- return report.push({
46
- status: 'WORKSPACE_MISMATCH',
47
- expectedVersion: wsVersion,
70
+ return Effect.fail(new _1.VersionGroupReport.WorkspaceMismatch({
71
+ name,
48
72
  instances,
49
73
  isValid: false,
50
- name,
74
+ expectedVersion: wsVersion,
51
75
  workspaceInstance: wsInstance,
52
- });
76
+ }));
53
77
  }
54
78
  if (hasUnsupported(instances)) {
55
- return report.push({
56
- status: 'UNSUPPORTED_MISMATCH',
79
+ return Effect.fail(new _1.VersionGroupReport.UnsupportedMismatch({
80
+ name,
57
81
  instances,
58
82
  isValid: false,
59
- name,
60
- });
83
+ }));
61
84
  }
62
85
  const preferVersion = this.config.preferVersion;
63
86
  const expectedVersion = getExpectedVersion(preferVersion, instances);
64
- return report.push({
65
- status: preferVersion === 'highestSemver'
66
- ? 'HIGHEST_SEMVER_MISMATCH'
67
- : 'LOWEST_SEMVER_MISMATCH',
68
- expectedVersion,
69
- instances,
70
- isValid: false,
71
- name,
72
- });
87
+ return Effect.fail(preferVersion === 'highestSemver'
88
+ ? new _1.VersionGroupReport.HighestSemverMismatch({
89
+ name,
90
+ instances,
91
+ isValid: false,
92
+ expectedVersion,
93
+ })
94
+ : new _1.VersionGroupReport.LowestSemverMismatch({
95
+ name,
96
+ instances,
97
+ isValid: false,
98
+ expectedVersion,
99
+ }));
73
100
  });
74
- return report;
75
101
  }
76
102
  }
77
103
  exports.StandardVersionGroup = StandardVersionGroup;
78
104
  function getExpectedVersion(preferVersion, instances) {
79
105
  const versions = (0, get_unique_versions_1.getUniqueVersions)(instances);
80
- return (0, unwrap_1.unwrap)(preferVersion === 'highestSemver'
81
- ? (0, get_highest_version_1.getHighestVersion)(versions)
82
- : (0, get_lowest_version_1.getLowestVersion)(versions));
106
+ return (0, unwrap_1.unwrap)(preferVersion === 'highestSemver' ? (0, get_highest_version_1.getHighestVersion)(versions) : (0, get_lowest_version_1.getLowestVersion)(versions));
83
107
  }
84
108
  function hasMismatch(instances) {
85
109
  return (0, get_unique_versions_1.getUniqueVersions)(instances).length > 1;
86
110
  }
87
111
  function hasUnsupported(instances) {
88
- return instances.some((instance) => !(0, is_semver_1.isSupported)(instance.version));
112
+ return instances.some((instance) => !(0, is_supported_1.isSupported)(instance.version));
89
113
  }
90
114
  function getWorkspaceInstance(instances) {
91
115
  return instances.find((instance) => instance.strategy.name === 'workspace');
@@ -0,0 +1,4 @@
1
+ import type { Instance } from '../get-package-json-files/instance';
2
+ import type { AnySemverGroup } from '../get-semver-groups';
3
+ import type { AnyVersionGroup } from '../get-version-groups';
4
+ export declare function canAddToGroup(group: AnySemverGroup | AnyVersionGroup, instance: Instance): boolean;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canAddToGroup = void 0;
4
+ const minimatch_1 = require("minimatch");
5
+ const is_non_empty_array_1 = require("tightrope/guard/is-non-empty-array");
6
+ function canAddToGroup(group, instance) {
7
+ const { dependencies, dependencyTypes, packages } = group.config;
8
+ return (group.canAdd(instance) &&
9
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(dependencyTypes) || dependencyTypes.includes(instance.strategy.name)) &&
10
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(packages) ||
11
+ packages.some((pattern) => (0, minimatch_1.minimatch)(instance.pkgName, pattern))) &&
12
+ (!(0, is_non_empty_array_1.isNonEmptyArray)(dependencies) ||
13
+ dependencies.some((pattern) => (0, minimatch_1.minimatch)(instance.name, pattern))));
14
+ }
15
+ exports.canAddToGroup = canAddToGroup;
@@ -0,0 +1 @@
1
+ export declare function isLooseSemver(version: unknown): boolean;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isLooseSemver = void 0;
4
+ const is_string_1 = require("tightrope/guard/is-string");
5
+ const is_semver_1 = require("./is-semver");
6
+ function isLooseSemver(version) {
7
+ return (0, is_string_1.isString)(version) && (0, is_semver_1.isSemver)(version) && version.search(/\.x(\.|$)/) !== -1;
8
+ }
9
+ exports.isLooseSemver = isLooseSemver;
@@ -0,0 +1 @@
1
+ export declare function isSemver(version: unknown): boolean;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSemver = void 0;
4
+ const is_string_1 = require("tightrope/guard/is-string");
5
+ function isSemver(version) {
6
+ const range = '(~|\\^|>=|>|<=|<)?';
7
+ const ints = '[0-9]+';
8
+ const intsOrX = '([0-9]+|x)';
9
+ const dot = '\\.';
10
+ const major = new RegExp(`^${range}${ints}$`);
11
+ const minor = new RegExp(`^${range}${ints}${dot}${intsOrX}$`);
12
+ const patch = new RegExp(`^${range}${ints}${dot}${intsOrX}${dot}${intsOrX}$`);
13
+ return ((0, is_string_1.isString)(version) &&
14
+ (version.search(major) !== -1 || version.search(minor) !== -1 || version.search(patch) !== -1));
15
+ }
16
+ exports.isSemver = isSemver;
@@ -0,0 +1 @@
1
+ export declare function isSupported(version: unknown): version is string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSupported = void 0;
4
+ const is_string_1 = require("tightrope/guard/is-string");
5
+ const is_semver_1 = require("./is-semver");
6
+ function isSupported(version) {
7
+ return version === '*' || (0, is_semver_1.isSemver)(version) || isWorkspaceProtocol(version);
8
+ }
9
+ exports.isSupported = isSupported;
10
+ function isWorkspaceProtocol(version) {
11
+ if (!(0, is_string_1.isString)(version))
12
+ return false;
13
+ if (!version.startsWith('workspace:'))
14
+ return false;
15
+ const value = version.replace(/^workspace:/, '');
16
+ return value === '*' || (0, is_semver_1.isSemver)(value);
17
+ }
@@ -0,0 +1,2 @@
1
+ import type { SemverRange } from '../config/types';
2
+ export declare function isValidSemverRange(value: unknown): value is SemverRange;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidSemverRange = void 0;
4
+ const constants_1 = require("../constants");
5
+ function isValidSemverRange(value) {
6
+ return (value === constants_1.RANGE.ANY ||
7
+ value === constants_1.RANGE.EXACT ||
8
+ value === constants_1.RANGE.GT ||
9
+ value === constants_1.RANGE.GTE ||
10
+ value === constants_1.RANGE.LOOSE ||
11
+ value === constants_1.RANGE.LT ||
12
+ value === constants_1.RANGE.LTE ||
13
+ value === constants_1.RANGE.MINOR ||
14
+ value === constants_1.RANGE.PATCH ||
15
+ value === constants_1.RANGE.WORKSPACE);
16
+ }
17
+ exports.isValidSemverRange = isValidSemverRange;
package/dist/lib/$R.js CHANGED
@@ -4,7 +4,7 @@ exports.$R = void 0;
4
4
  const result_1 = require("tightrope/result");
5
5
  const is_err_1 = require("tightrope/result/is-err");
6
6
  const unwrap_1 = require("tightrope/result/unwrap");
7
- const log_1 = require("./log");
7
+ const log_verbose_1 = require("./log-verbose");
8
8
  exports.$R = {
9
9
  /**
10
10
  * Return a single `Ok<output[]>` containing an array of the output of every
@@ -28,7 +28,7 @@ exports.$R = {
28
28
  /** Log verbose only when Result is an Err */
29
29
  tapErrVerbose(result) {
30
30
  if ((0, is_err_1.isErr)(result))
31
- (0, log_1.verbose)(result.value);
31
+ (0, log_verbose_1.logVerbose)(result.value);
32
32
  return result;
33
33
  },
34
34
  };
@@ -0,0 +1,6 @@
1
+ import type { AnySemverGroup } from '../get-semver-groups';
2
+ import type { AnyVersionGroup } from '../get-version-groups';
3
+ export declare const logGroupHeader: {
4
+ semverGroup(group: AnySemverGroup, i: number): void;
5
+ versionGroup(group: AnyVersionGroup, i: number): void;
6
+ };
@@ -0,0 +1,34 @@
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.logGroupHeader = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ exports.logGroupHeader = {
9
+ semverGroup(group, i) {
10
+ log(group, 'Semver', i);
11
+ },
12
+ versionGroup(group, i) {
13
+ log(group, 'Version', i);
14
+ },
15
+ };
16
+ function log(group, type, i) {
17
+ const customLabel = group.config.label;
18
+ const labelWhenDefault = group.isCatchAll === true ? `Default ${type} Group` : '';
19
+ const anonymousLabel = `${type} Group ${i + 1}`;
20
+ const label = (customLabel || labelWhenDefault || anonymousLabel).trim();
21
+ const hasNewLines = label.search(/[\r\n]/) !== -1;
22
+ const header = hasNewLines ? formatMultiLine(label) : formatSingleLine(label);
23
+ console.log(chalk_1.default.blue(header));
24
+ }
25
+ function formatSingleLine(label) {
26
+ const leftSide = `= ${label} `;
27
+ const dividerWidth = 80 - leftSide.length;
28
+ const rightSide = dividerWidth > 0 ? '='.repeat(dividerWidth) : '';
29
+ return `${leftSide}${rightSide}`;
30
+ }
31
+ function formatMultiLine(label) {
32
+ const reindented = label.replace(/^\s+/gm, ' ');
33
+ return `= ${reindented}`;
34
+ }
@@ -0,0 +1 @@
1
+ export declare function logVerbose(...values: unknown[]): void;
@@ -0,0 +1,24 @@
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.logVerbose = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const is_string_1 = require("tightrope/guard/is-string");
9
+ const util_1 = require("util");
10
+ const constants_1 = require("../constants");
11
+ function logVerbose(...values) {
12
+ /* istanbul ignore if */
13
+ if (process.env.SYNCPACK_VERBOSE) {
14
+ console.info(chalk_1.default.yellow(constants_1.ICON.debug), ...values.map((value) => (0, is_string_1.isString)(value)
15
+ ? chalk_1.default.yellow(value)
16
+ : (0, util_1.inspect)(value, {
17
+ colors: true,
18
+ compact: true,
19
+ depth: 20,
20
+ showHidden: false,
21
+ })));
22
+ }
23
+ }
24
+ exports.logVerbose = logVerbose;