syncpack 12.3.0 → 12.3.2

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 (206) hide show
  1. package/dist/bin-fix-mismatches/fix-mismatches.d.ts +9 -9
  2. package/dist/bin-fix-mismatches/fix-mismatches.js +43 -54
  3. package/dist/bin-fix-mismatches/index.js +26 -31
  4. package/dist/bin-format/format.d.ts +6 -6
  5. package/dist/bin-format/format.js +27 -32
  6. package/dist/bin-format/index.js +20 -25
  7. package/dist/bin-lint/index.js +15 -20
  8. package/dist/bin-lint/lint.d.ts +4 -4
  9. package/dist/bin-lint/lint.js +28 -35
  10. package/dist/bin-lint-semver-ranges/index.js +24 -29
  11. package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +8 -8
  12. package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +34 -44
  13. package/dist/bin-list/index.js +24 -29
  14. package/dist/bin-list/list.d.ts +7 -7
  15. package/dist/bin-list/list.js +55 -64
  16. package/dist/bin-list-mismatches/index.js +24 -29
  17. package/dist/bin-list-mismatches/list-mismatches.d.ts +10 -10
  18. package/dist/bin-list-mismatches/list-mismatches.js +62 -70
  19. package/dist/bin-prompt/index.js +26 -31
  20. package/dist/bin-prompt/prompt.d.ts +4 -4
  21. package/dist/bin-prompt/prompt.js +41 -48
  22. package/dist/bin-set-semver-ranges/index.js +26 -31
  23. package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +4 -4
  24. package/dist/bin-set-semver-ranges/set-semver-ranges.js +26 -30
  25. package/dist/bin-update/effects.d.ts +18 -18
  26. package/dist/bin-update/effects.js +77 -106
  27. package/dist/bin-update/index.js +23 -28
  28. package/dist/bin-update/update.d.ts +5 -5
  29. package/dist/bin-update/update.js +33 -40
  30. package/dist/bin.js +8 -5
  31. package/dist/config/get-custom-types.d.ts +9 -9
  32. package/dist/config/get-custom-types.js +22 -27
  33. package/dist/config/get-enabled-types.d.ts +8 -8
  34. package/dist/config/get-enabled-types.js +42 -48
  35. package/dist/config/get-filter.d.ts +1 -1
  36. package/dist/config/get-filter.js +6 -10
  37. package/dist/config/get-indent.d.ts +1 -1
  38. package/dist/config/get-indent.js +6 -10
  39. package/dist/config/get-sort-az.d.ts +1 -1
  40. package/dist/config/get-sort-az.js +6 -10
  41. package/dist/config/get-sort-exports.d.ts +1 -1
  42. package/dist/config/get-sort-exports.js +6 -10
  43. package/dist/config/get-sort-first.d.ts +1 -1
  44. package/dist/config/get-sort-first.js +6 -10
  45. package/dist/config/get-source.d.ts +1 -1
  46. package/dist/config/get-source.js +4 -8
  47. package/dist/config/tag.d.ts +1 -1
  48. package/dist/config/tag.js +2 -5
  49. package/dist/config/types.d.ts +2 -5
  50. package/dist/config/types.js +1 -2
  51. package/dist/constants.js +7 -10
  52. package/dist/error-handlers/default-error-handlers.d.ts +10 -10
  53. package/dist/error-handlers/default-error-handlers.js +55 -61
  54. package/dist/get-context/index.d.ts +5 -5
  55. package/dist/get-context/index.js +13 -17
  56. package/dist/get-context/lib/key-by.js +1 -5
  57. package/dist/get-instances/index.d.ts +7 -7
  58. package/dist/get-instances/index.js +19 -23
  59. package/dist/get-instances/instance.d.ts +7 -7
  60. package/dist/get-instances/instance.js +4 -8
  61. package/dist/get-package-json-files/get-file-paths.d.ts +7 -7
  62. package/dist/get-package-json-files/get-file-paths.js +10 -15
  63. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +2 -2
  64. package/dist/get-package-json-files/get-patterns/get-lerna-patterns.js +8 -12
  65. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +2 -2
  66. package/dist/get-package-json-files/get-patterns/get-pnpm-patterns.js +8 -12
  67. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +2 -2
  68. package/dist/get-package-json-files/get-patterns/get-yarn-patterns.js +14 -18
  69. package/dist/get-package-json-files/get-patterns/index.d.ts +3 -3
  70. package/dist/get-package-json-files/get-patterns/index.js +11 -15
  71. package/dist/get-package-json-files/index.d.ts +8 -8
  72. package/dist/get-package-json-files/index.js +6 -10
  73. package/dist/get-package-json-files/package-json-file.d.ts +6 -6
  74. package/dist/get-package-json-files/package-json-file.js +8 -12
  75. package/dist/guards/can-add-to-group.d.ts +4 -4
  76. package/dist/guards/can-add-to-group.js +10 -14
  77. package/dist/guards/is-semver.js +3 -7
  78. package/dist/guards/is-valid-semver-range.d.ts +1 -1
  79. package/dist/guards/is-valid-semver-range.js +12 -16
  80. package/dist/index.d.ts +1 -1
  81. package/dist/index.js +1 -2
  82. package/dist/io/ask-for-choice.d.ts +5 -5
  83. package/dist/io/ask-for-choice.js +5 -9
  84. package/dist/io/ask-for-input.d.ts +5 -5
  85. package/dist/io/ask-for-input.js +5 -9
  86. package/dist/io/exit-if-invalid.d.ts +3 -3
  87. package/dist/io/exit-if-invalid.js +5 -9
  88. package/dist/io/glob-sync.d.ts +5 -5
  89. package/dist/io/glob-sync.js +4 -9
  90. package/dist/io/index.d.ts +8 -8
  91. package/dist/io/index.js +12 -38
  92. package/dist/io/read-config-file.d.ts +7 -0
  93. package/dist/io/read-config-file.js +22 -0
  94. package/dist/io/read-file-sync.d.ts +5 -5
  95. package/dist/io/read-file-sync.js +4 -9
  96. package/dist/io/read-json-file-sync.d.ts +8 -8
  97. package/dist/io/read-json-file-sync.js +10 -16
  98. package/dist/io/read-yaml-file-sync.d.ts +5 -5
  99. package/dist/io/read-yaml-file-sync.js +4 -8
  100. package/dist/io/to-json.d.ts +2 -2
  101. package/dist/io/to-json.js +8 -12
  102. package/dist/io/write-file-sync.d.ts +5 -5
  103. package/dist/io/write-file-sync.js +5 -10
  104. package/dist/io/write-if-changed.d.ts +4 -4
  105. package/dist/io/write-if-changed.js +9 -16
  106. package/dist/lib/format-repository-url.js +1 -5
  107. package/dist/lib/get-group-header.d.ts +2 -2
  108. package/dist/lib/get-group-header.js +4 -12
  109. package/dist/lib/get.d.ts +10 -10
  110. package/dist/lib/get.js +15 -19
  111. package/dist/lib/pad-start.js +1 -5
  112. package/dist/lib/ring-buffer.js +1 -5
  113. package/dist/lib/set-semver-range.d.ts +1 -1
  114. package/dist/lib/set-semver-range.js +8 -12
  115. package/dist/lib/show-help-on-error.js +3 -10
  116. package/dist/lib/sort-by-name.js +1 -5
  117. package/dist/lib/with-logger.d.ts +1 -1
  118. package/dist/lib/with-logger.js +17 -24
  119. package/dist/option.d.ts +1 -1
  120. package/dist/option.js +8 -14
  121. package/dist/report.d.ts +2 -2
  122. package/dist/report.js +2 -5
  123. package/dist/semver-group/create-semver-groups.d.ts +3 -3
  124. package/dist/semver-group/create-semver-groups.js +28 -32
  125. package/dist/semver-group/disabled.d.ts +11 -11
  126. package/dist/semver-group/disabled.js +6 -10
  127. package/dist/semver-group/filtered-out.d.ts +12 -12
  128. package/dist/semver-group/filtered-out.js +8 -12
  129. package/dist/semver-group/ignored.d.ts +11 -11
  130. package/dist/semver-group/ignored.js +6 -10
  131. package/dist/semver-group/index.d.ts +6 -7
  132. package/dist/semver-group/index.js +4 -7
  133. package/dist/semver-group/with-range.d.ts +11 -11
  134. package/dist/semver-group/with-range.js +13 -17
  135. package/dist/specifier/alias.d.ts +5 -5
  136. package/dist/specifier/alias.js +9 -13
  137. package/dist/specifier/base.d.ts +7 -7
  138. package/dist/specifier/base.js +9 -13
  139. package/dist/specifier/delete.d.ts +5 -5
  140. package/dist/specifier/delete.js +5 -9
  141. package/dist/specifier/exact.d.ts +6 -6
  142. package/dist/specifier/exact.js +7 -11
  143. package/dist/specifier/file.d.ts +1 -1
  144. package/dist/specifier/file.js +2 -6
  145. package/dist/specifier/hosted-git.d.ts +5 -5
  146. package/dist/specifier/hosted-git.js +9 -13
  147. package/dist/specifier/index.d.ts +13 -13
  148. package/dist/specifier/index.js +28 -31
  149. package/dist/specifier/latest.d.ts +6 -6
  150. package/dist/specifier/latest.js +7 -11
  151. package/dist/specifier/lib/non-semver-error.d.ts +5 -5
  152. package/dist/specifier/lib/non-semver-error.js +3 -7
  153. package/dist/specifier/lib/parse-specifier.d.ts +1 -1
  154. package/dist/specifier/lib/parse-specifier.js +4 -11
  155. package/dist/specifier/lib/specific-registry-result.js +1 -2
  156. package/dist/specifier/range.d.ts +6 -6
  157. package/dist/specifier/range.js +7 -11
  158. package/dist/specifier/tag.d.ts +2 -2
  159. package/dist/specifier/tag.js +2 -6
  160. package/dist/specifier/unsupported.d.ts +1 -1
  161. package/dist/specifier/unsupported.js +2 -6
  162. package/dist/specifier/url.d.ts +1 -1
  163. package/dist/specifier/url.js +2 -6
  164. package/dist/specifier/workspace-protocol.d.ts +7 -7
  165. package/dist/specifier/workspace-protocol.js +9 -13
  166. package/dist/strategy/lib/get-non-empty-string-prop.d.ts +2 -2
  167. package/dist/strategy/lib/get-non-empty-string-prop.js +6 -10
  168. package/dist/strategy/name-and-version-props.d.ts +4 -4
  169. package/dist/strategy/name-and-version-props.js +19 -23
  170. package/dist/strategy/named-version-string.d.ts +4 -4
  171. package/dist/strategy/named-version-string.js +20 -24
  172. package/dist/strategy/unnamed-version-string.d.ts +4 -4
  173. package/dist/strategy/unnamed-version-string.js +17 -21
  174. package/dist/strategy/versions-by-name.d.ts +4 -4
  175. package/dist/strategy/versions-by-name.js +11 -15
  176. package/dist/version-group/banned.d.ts +7 -7
  177. package/dist/version-group/banned.js +8 -12
  178. package/dist/version-group/create-version-groups.d.ts +3 -3
  179. package/dist/version-group/create-version-groups.js +34 -38
  180. package/dist/version-group/filtered-out.d.ts +8 -8
  181. package/dist/version-group/filtered-out.js +8 -12
  182. package/dist/version-group/ignored.d.ts +7 -7
  183. package/dist/version-group/ignored.js +6 -10
  184. package/dist/version-group/index.d.ts +9 -10
  185. package/dist/version-group/index.js +4 -7
  186. package/dist/version-group/lib/clean.js +4 -11
  187. package/dist/version-group/lib/delete.js +1 -4
  188. package/dist/version-group/lib/get-highest-version.d.ts +2 -2
  189. package/dist/version-group/lib/get-highest-version.js +3 -7
  190. package/dist/version-group/lib/get-lowest-version.d.ts +2 -2
  191. package/dist/version-group/lib/get-lowest-version.js +3 -7
  192. package/dist/version-group/lib/get-preferred-version.d.ts +4 -4
  193. package/dist/version-group/lib/get-preferred-version.js +17 -24
  194. package/dist/version-group/lib/get-range-score.js +13 -17
  195. package/dist/version-group/lib/group-by.js +1 -5
  196. package/dist/version-group/pinned.d.ts +7 -7
  197. package/dist/version-group/pinned.js +8 -12
  198. package/dist/version-group/same-range.d.ts +8 -8
  199. package/dist/version-group/same-range.js +23 -30
  200. package/dist/version-group/snapped-to.d.ts +7 -7
  201. package/dist/version-group/snapped-to.js +20 -24
  202. package/dist/version-group/standard.d.ts +7 -7
  203. package/dist/version-group/standard.js +29 -33
  204. package/package.json +30 -37
  205. package/dist/io/read-config-file-sync.d.ts +0 -7
  206. package/dist/io/read-config-file-sync.js +0 -26
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SnappedToVersionGroup = void 0;
4
- const effect_1 = require("effect");
5
- const report_1 = require("../report");
6
- const specifier_1 = require("../specifier");
7
- const group_by_1 = require("./lib/group-by");
8
- class SnappedToVersionGroup extends effect_1.Data.TaggedClass('SnappedTo') {
1
+ import { Data, Effect, pipe } from 'effect';
2
+ import { Report } from '../report.js';
3
+ import { Specifier } from '../specifier/index.js';
4
+ import { groupBy } from './lib/group-by.js';
5
+ export class SnappedToVersionGroup extends Data.TaggedClass('SnappedTo') {
9
6
  groupType = 'versionGroup';
10
7
  constructor(config) {
11
8
  super({
@@ -17,57 +14,56 @@ class SnappedToVersionGroup extends effect_1.Data.TaggedClass('SnappedTo') {
17
14
  return true;
18
15
  }
19
16
  inspectAll() {
20
- return effect_1.Effect.all(Object.entries((0, group_by_1.groupBy)('name', this.instances)).flatMap(([name, instances]) => (0, effect_1.pipe)(findSnappedToInstance(name, this.config.snapTo, instances), effect_1.Effect.matchEffect({
21
- onFailure: () => effect_1.Effect.succeed(instances.map((instance) =>
17
+ return Effect.all(Object.entries(groupBy('name', this.instances)).flatMap(([name, instances]) => pipe(findSnappedToInstance(name, this.config.snapTo, instances), Effect.matchEffect({
18
+ onFailure: () => Effect.succeed(instances.map((instance) =>
22
19
  // ✘ none of the snapTo packages contain this dependency
23
20
  // ✘ is a user configuration error we can't auto-fix
24
- new report_1.Report.MissingSnappedToMismatch(instance))),
25
- onSuccess: (expected) => (0, effect_1.pipe)(instances, effect_1.Effect.forEach((instance) => (0, effect_1.pipe)(effect_1.Effect.Do, effect_1.Effect.bind('specifier', () => effect_1.Effect.succeed(specifier_1.Specifier.create(instance, instance.rawSpecifier.raw))), effect_1.Effect.bind('expected', () => effect_1.Effect.succeed(specifier_1.Specifier.create(instance, expected.rawSpecifier.raw))), effect_1.Effect.flatMap(({ expected, specifier }) => (0, effect_1.pipe)(expected.getSemver(), effect_1.Effect.matchEffect({
26
- onFailure: () => (0, effect_1.pipe)(specifier.replaceWith(expected), specifier.instance.semverGroup.getFixed, effect_1.Effect.match({
21
+ new Report.MissingSnappedToMismatch(instance))),
22
+ onSuccess: (expected) => pipe(instances, Effect.forEach((instance) => pipe(Effect.Do, Effect.bind('specifier', () => Effect.succeed(Specifier.create(instance, instance.rawSpecifier.raw))), Effect.bind('expected', () => Effect.succeed(Specifier.create(instance, expected.rawSpecifier.raw))), Effect.flatMap(({ expected, specifier }) => pipe(expected.getSemver(), Effect.matchEffect({
23
+ onFailure: () => pipe(specifier.replaceWith(expected), specifier.instance.semverGroup.getFixed, Effect.match({
27
24
  onFailure: () =>
28
25
  // ✘ expected version is not semver
29
26
  // ✘ semver group expects semver
30
27
  // ✘ is a mismatch we can't auto-fix
31
- new report_1.Report.UnsupportedMismatch(specifier.instance),
28
+ new Report.UnsupportedMismatch(specifier.instance),
32
29
  onSuccess: (valid) => specifier.instance.rawSpecifier.raw === valid.raw
33
30
  ? // ! expected version is not semver
34
31
  // ✓ semver group is disabled/ignored
35
32
  // ✓ current version matches expected
36
- new report_1.Report.Valid(specifier)
33
+ new Report.Valid(specifier)
37
34
  : // ! expected version is not semver
38
35
  // ✓ semver group is disabled/ignored
39
36
  // ✘ current version mismatches expected
40
37
  // ✓ is a mismatch we can auto-fix by replacing with the non-semver version
41
- new report_1.Report.SnappedToMismatch(valid, expected.instance),
38
+ new Report.SnappedToMismatch(valid, expected.instance),
42
39
  })),
43
- onSuccess: () => (0, effect_1.pipe)(specifier.replaceWith(expected), specifier.instance.semverGroup.getFixed, effect_1.Effect.match({
40
+ onSuccess: () => pipe(specifier.replaceWith(expected), specifier.instance.semverGroup.getFixed, Effect.match({
44
41
  onFailure: /* istanbul ignore next */ () =>
45
42
  // ✓ expected version is semver
46
43
  // ✘ expected version is not fixable by its semver group
47
44
  // ✘ is a mismatch we can't auto-fix
48
45
  // ✘ this should be impossible - we already proved the local version is exact semver
49
- new report_1.Report.UnsupportedMismatch(specifier.instance),
46
+ new Report.UnsupportedMismatch(specifier.instance),
50
47
  onSuccess: (valid) => specifier.instance.rawSpecifier.raw === valid.raw
51
48
  ? // ✓ expected version is semver
52
49
  // ✓ expected version matches its semver group
53
50
  // ✓ current version matches expected
54
- new report_1.Report.Valid(specifier)
51
+ new Report.Valid(specifier)
55
52
  : // ✓ expected version is semver
56
53
  // ✓ expected version matches its semver group
57
54
  // ✘ current version mismatches expected
58
55
  // ✓ is a mismatch we can auto-fix
59
- new report_1.Report.SnappedToMismatch(valid, expected.instance),
56
+ new Report.SnappedToMismatch(valid, expected.instance),
60
57
  })),
61
58
  })))))),
62
- }), effect_1.Effect.map((reports) => ({ name, reports })))));
59
+ }), Effect.map((reports) => ({ name, reports })))));
63
60
  }
64
61
  }
65
- exports.SnappedToVersionGroup = SnappedToVersionGroup;
66
62
  function findSnappedToInstance(name, snapTo, instances) {
67
63
  for (const instance of instances) {
68
64
  if (snapTo.includes(instance.pkgName) && instance.rawSpecifier.raw) {
69
- return (0, effect_1.pipe)(effect_1.Effect.succeed(instance), effect_1.Effect.tap(() => effect_1.Effect.logDebug(`found snapped to version ${String(instance.rawSpecifier.raw)} for ${name} in <${instance.packageJsonFile.jsonFile.shortPath}>`)));
65
+ return pipe(Effect.succeed(instance), Effect.tap(() => Effect.logDebug(`found snapped to version ${String(instance.rawSpecifier.raw)} for ${name} in <${instance.packageJsonFile.jsonFile.shortPath}>`)));
70
66
  }
71
67
  }
72
- return (0, effect_1.pipe)(effect_1.Effect.fail('getSnappedTo found nothing'), effect_1.Effect.tapError(() => effect_1.Effect.logError(`failed to get snapped to version for ${name} using ${JSON.stringify(snapTo)}`)));
68
+ return pipe(Effect.fail('getSnappedTo found nothing'), Effect.tapError(() => Effect.logError(`failed to get snapped to version for ${name} using ${JSON.stringify(snapTo)}`)));
73
69
  }
@@ -1,10 +1,10 @@
1
- import { Data, Effect } from 'effect';
2
- import type { VersionGroupConfig } from '../config/types';
3
- import type { Instance } from '../get-instances/instance';
4
- import { Report } from '../report';
5
- declare const StandardVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<Omit<A, keyof import("effect/Equal").Equal>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof import("effect/Equal").Equal ? never : P]: A[P]; }) => Data.Data<Readonly<A> & {
1
+ import { Effect } from 'effect';
2
+ import type { VersionGroupConfig } from '../config/types.js';
3
+ import type { Instance } from '../get-instances/instance.js';
4
+ import { Report } from '../report.js';
5
+ declare const StandardVersionGroup_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
6
6
  readonly _tag: "Standard";
7
- }>;
7
+ };
8
8
  export declare class StandardVersionGroup extends StandardVersionGroup_base<{
9
9
  config: VersionGroupConfig.Standard;
10
10
  instances: Instance[];
@@ -13,6 +13,6 @@ export declare class StandardVersionGroup extends StandardVersionGroup_base<{
13
13
  groupType: string;
14
14
  constructor(isCatchAll: boolean, config: VersionGroupConfig.Standard);
15
15
  canAdd(_: Instance): boolean;
16
- inspectAll(): Effect.Effect<never, never, Report.Version.Group[]>;
16
+ inspectAll(): Effect.Effect<Report.Version.Group[]>;
17
17
  }
18
18
  export {};
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StandardVersionGroup = void 0;
4
- const effect_1 = require("effect");
5
- const uniq_1 = require("tightrope/array/uniq");
6
- const report_1 = require("../report");
7
- const specifier_1 = require("../specifier");
8
- const get_preferred_version_1 = require("./lib/get-preferred-version");
9
- const group_by_1 = require("./lib/group-by");
10
- class StandardVersionGroup extends effect_1.Data.TaggedClass('Standard') {
1
+ import { Data, Effect, pipe } from 'effect';
2
+ import { uniq } from 'tightrope/array/uniq.js';
3
+ import { Report } from '../report.js';
4
+ import { Specifier } from '../specifier/index.js';
5
+ import { getPreferredVersion } from './lib/get-preferred-version.js';
6
+ import { groupBy } from './lib/group-by.js';
7
+ export class StandardVersionGroup extends Data.TaggedClass('Standard') {
11
8
  groupType = 'versionGroup';
12
9
  constructor(isCatchAll, config) {
13
10
  super({
@@ -20,93 +17,92 @@ class StandardVersionGroup extends effect_1.Data.TaggedClass('Standard') {
20
17
  return true;
21
18
  }
22
19
  inspectAll() {
23
- return effect_1.Effect.all(Object.entries((0, group_by_1.groupBy)('name', this.instances)).flatMap(([name, instances]) => {
20
+ return Effect.all(Object.entries(groupBy('name', this.instances)).flatMap(([name, instances]) => {
24
21
  const localInstance = getLocalInstance(instances);
25
22
  if (localInstance) {
26
23
  const localVersion = localInstance?.rawSpecifier.raw;
27
- return (0, effect_1.pipe)(effect_1.Effect.succeed(specifier_1.Specifier.create(localInstance, localVersion)), effect_1.Effect.flatMap((local) => effect_1.Effect.all(local._tag !== 'Exact' && instances.length > 1
24
+ return pipe(Effect.succeed(Specifier.create(localInstance, localVersion)), Effect.flatMap((local) => Effect.all(local._tag !== 'Exact' && instances.length > 1
28
25
  ? instances.map((instance) =>
29
26
  // ! dependency is a package developed in this repo
30
27
  // ✘ local package has an invalid .version property
31
28
  // ✘ is a mismatch we can't auto-fix
32
- effect_1.Effect.succeed(new report_1.Report.MissingLocalVersion(instance, localInstance)))
29
+ Effect.succeed(new Report.MissingLocalVersion(instance, localInstance)))
33
30
  : instances.flatMap((instance) =>
34
31
  // instances.flatMap((instance) =>
35
- (0, effect_1.pipe)(effect_1.Effect.succeed(specifier_1.Specifier.create(instance, instance.rawSpecifier.raw)), effect_1.Effect.flatMap((specifier) => specifier.instance === localInstance
32
+ pipe(Effect.succeed(Specifier.create(instance, instance.rawSpecifier.raw)), Effect.flatMap((specifier) => specifier.instance === localInstance
36
33
  ? // ✓ this is the local package which the others should match
37
34
  // ! its version must always remain as exact semver
38
35
  // ! other instances need to be adjusted for their semver groups
39
- effect_1.Effect.succeed(new report_1.Report.Valid(specifier))
40
- : (0, effect_1.pipe)(specifier.replaceWith(local), specifier.instance.semverGroup.getFixed, effect_1.Effect.match({
36
+ Effect.succeed(new Report.Valid(specifier))
37
+ : pipe(specifier.replaceWith(local), specifier.instance.semverGroup.getFixed, Effect.match({
41
38
  onFailure: /* istanbul ignore next */ () =>
42
39
  // ! is not the local package instance
43
40
  // ✘ local version is not fixable by this semver group
44
41
  // ✘ is a mismatch we can't auto-fix
45
42
  // ✘ this should be impossible - we already proved the local version is exact semver
46
- new report_1.Report.UnsupportedMismatch(specifier.instance),
43
+ new Report.UnsupportedMismatch(specifier.instance),
47
44
  onSuccess: (valid) => specifier.instance.rawSpecifier.raw === valid.raw
48
45
  ? // ! is not the local package instance
49
46
  // ✓ local version matches this semver group
50
47
  // ✓ current version matches local
51
- new report_1.Report.Valid(specifier)
48
+ new Report.Valid(specifier)
52
49
  : localVersion === 'PACKAGE_JSON_HAS_NO_VERSION'
53
50
  ? // ! is not the local package instance
54
51
  // ✘ local package has a version defined
55
52
  // ✓ local version matches this semver group
56
53
  // ✘ current version mismatches local
57
- new report_1.Report.MissingLocalVersion(specifier.instance, localInstance)
54
+ new Report.MissingLocalVersion(specifier.instance, localInstance)
58
55
  : // ! is not the local package instance
59
56
  // ✓ local package has a version defined
60
57
  // ✓ local version matches this semver group
61
58
  // ✘ current version mismatches local
62
- new report_1.Report.LocalPackageMismatch(valid, localInstance),
63
- }))))))), effect_1.Effect.map((reports) => ({ name, reports })));
59
+ new Report.LocalPackageMismatch(valid, localInstance),
60
+ }))))))), Effect.map((reports) => ({ name, reports })));
64
61
  }
65
62
  const PreferredMismatch = this.config.preferVersion === 'lowestSemver'
66
- ? report_1.Report.LowestSemverMismatch
67
- : report_1.Report.HighestSemverMismatch;
68
- return (0, effect_1.pipe)(effect_1.Effect.succeed(instances.map((instance) => specifier_1.Specifier.create(instance, instance.rawSpecifier.raw))), effect_1.Effect.flatMap((specifiers) => (0, effect_1.pipe)((0, get_preferred_version_1.getPreferredVersion)(this.config.preferVersion, specifiers), effect_1.Effect.matchEffect({
69
- onFailure: () => effect_1.Effect.succeed((0, uniq_1.uniq)(specifiers.map((specifier) => specifier.instance.rawSpecifier.raw))
63
+ ? Report.LowestSemverMismatch
64
+ : Report.HighestSemverMismatch;
65
+ return pipe(Effect.succeed(instances.map((instance) => Specifier.create(instance, instance.rawSpecifier.raw))), Effect.flatMap((specifiers) => pipe(getPreferredVersion(this.config.preferVersion, specifiers), Effect.matchEffect({
66
+ onFailure: () => Effect.succeed(uniq(specifiers.map((specifier) => specifier.instance.rawSpecifier.raw))
70
67
  .length === 1
71
68
  ? specifiers.map((specifier) =>
72
69
  // ✘ not every version is semver
73
70
  // ✓ every version is identical
74
71
  // ✓ is a match
75
- new report_1.Report.Valid(specifier))
72
+ new Report.Valid(specifier))
76
73
  : instances.map((instance) =>
77
74
  // ✘ not every version is semver
78
75
  // ✘ some versions are not identical
79
76
  // ✘ is a mismatch we can't auto-fix
80
- new report_1.Report.UnsupportedMismatch(instance))),
81
- onSuccess: (expectedVersion) => (0, effect_1.pipe)(specifiers, effect_1.Effect.forEach((current) => (0, effect_1.pipe)(current.replaceWith(expectedVersion), current.instance.semverGroup.getFixed, effect_1.Effect.match({
77
+ new Report.UnsupportedMismatch(instance))),
78
+ onSuccess: (expectedVersion) => pipe(specifiers, Effect.forEach((current) => pipe(current.replaceWith(expectedVersion), current.instance.semverGroup.getFixed, Effect.match({
82
79
  onFailure: /* istanbul ignore next */ () =>
83
80
  // ✓ every version is semver
84
81
  // ✘ expected version is not fixable by its semver group
85
82
  // ✘ is a mismatch we can't auto-fix
86
83
  // ✘ this should be impossible - any valid semver is fixable by a semver group
87
- new report_1.Report.UnsupportedMismatch(current.instance),
84
+ new Report.UnsupportedMismatch(current.instance),
88
85
  onSuccess: (expectedRange) => current.instance.rawSpecifier.raw === expectedRange.raw
89
86
  ? // ✓ every version is semver
90
87
  // ✓ current version matches expected semver
91
88
  // ✓ current version matches expected version
92
- new report_1.Report.Valid(current)
89
+ new Report.Valid(current)
93
90
  : current.instance.rawSpecifier.raw === expectedVersion.raw
94
91
  ? // ✓ every version is semver
95
92
  // ✓ current version matches expected version
96
93
  // ✘ current version does not match expected semver
97
94
  // ✓ is a mismatch we can auto-fix
98
- new report_1.Report.SemverRangeMismatch(expectedRange)
95
+ new Report.SemverRangeMismatch(expectedRange)
99
96
  : // ✓ every version is semver
100
97
  // ✘ current version does not match expected version
101
98
  // ✘ expected version does not match expected semver
102
99
  // ✓ is a mismatch we can auto-fix
103
100
  new PreferredMismatch(expectedRange),
104
101
  })))),
105
- }))), effect_1.Effect.map((reports) => ({ name, reports })));
102
+ }))), Effect.map((reports) => ({ name, reports })));
106
103
  }));
107
104
  }
108
105
  }
109
- exports.StandardVersionGroup = StandardVersionGroup;
110
106
  /**
111
107
  * If this dependency is developed in this monorepo, get the instance which
112
108
  * represents the canonical .version property of its package.json file.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "syncpack",
3
3
  "description": "Consistent dependency versions in large JavaScript Monorepos",
4
- "version": "12.3.0",
4
+ "version": "12.3.2",
5
5
  "author": "Jamie Mason <jamie@foldleft.io> (https://github.com/JamieMason)",
6
6
  "bin": {
7
7
  "syncpack": "dist/bin.js",
@@ -33,51 +33,53 @@
33
33
  "Tom Fletcher (https://github.com/tom-fletcher)"
34
34
  ],
35
35
  "dependencies": {
36
- "@effect/schema": "0.56.1",
37
- "chalk": "4.1.2",
38
- "commander": "11.1.0",
36
+ "@effect/schema": "0.66.5",
37
+ "chalk": "5.3.0",
38
+ "chalk-template": "1.1.0",
39
+ "commander": "12.0.0",
39
40
  "cosmiconfig": "9.0.0",
40
- "effect": "2.0.0-next.62",
41
+ "effect": "3.0.3",
41
42
  "enquirer": "2.4.1",
42
- "fast-check": "3.15.0",
43
- "globby": "11.1.0",
44
- "minimatch": "9.0.3",
45
- "npm-package-arg": "11.0.1",
46
- "ora": "5.4.1",
43
+ "fast-check": "3.17.2",
44
+ "globby": "14.0.1",
45
+ "minimatch": "9.0.4",
46
+ "npm-package-arg": "11.0.2",
47
+ "ora": "8.0.1",
47
48
  "prompts": "2.4.2",
48
49
  "read-yaml-file": "2.1.0",
49
- "semver": "7.5.4",
50
- "tightrope": "0.1.0",
50
+ "semver": "7.6.0",
51
+ "tightrope": "0.2.0",
51
52
  "ts-toolbelt": "9.6.0"
52
53
  },
53
54
  "devDependencies": {
54
55
  "@release-it/conventional-changelog": "8.0.1",
55
- "@tsconfig/node18": "18.2.2",
56
- "@types/node": "20.10.6",
56
+ "@tsconfig/node18": "18.2.4",
57
+ "@types/node": "20.12.7",
57
58
  "@types/npm-package-arg": "6.1.4",
58
59
  "@types/prompts": "2.4.9",
59
- "@types/semver": "7.5.6",
60
- "@typescript-eslint/eslint-plugin": "6.16.0",
61
- "@typescript-eslint/parser": "6.16.0",
62
- "@vitest/coverage-v8": "1.1.0",
60
+ "@types/semver": "7.5.8",
61
+ "@typescript-eslint/eslint-plugin": "6.19.0",
62
+ "@typescript-eslint/parser": "6.19.0",
63
+ "@vitest/coverage-v8": "1.5.0",
63
64
  "auto-changelog": "2.4.0",
64
65
  "eslint": "8.56.0",
65
66
  "eslint-plugin-import": "2.29.1",
66
- "memfs": "4.6.0",
67
- "prettier": "3.1.1",
68
- "prettier-plugin-astro": "0.12.3",
67
+ "memfs": "4.8.2",
68
+ "prettier": "3.2.5",
69
+ "prettier-plugin-astro": "0.13.0",
69
70
  "quill-delta": "5.1.0",
70
- "release-it": "17.0.1",
71
+ "release-it": "17.2.0",
71
72
  "rxjs": "7.8.1",
72
73
  "ts-node": "10.9.2",
73
74
  "tslib": "2.6.2",
74
- "typescript": "5.3.3",
75
- "typescript-json-schema": "0.62.0",
76
- "vitest": "1.1.0"
75
+ "typescript": "5.4.5",
76
+ "typescript-json-schema": "0.63.0",
77
+ "vitest": "1.5.0"
77
78
  },
78
79
  "engines": {
79
80
  "node": ">=16"
80
81
  },
82
+ "exports": "./dist/index.js",
81
83
  "files": [
82
84
  "dist"
83
85
  ],
@@ -103,20 +105,10 @@
103
105
  "yarn"
104
106
  ],
105
107
  "license": "MIT",
106
- "main": "dist/index.js",
107
- "pnpm": {
108
- "overrides": {
109
- "chalk": "4.1.2",
110
- "effect": "2.0.0-next.62",
111
- "string-width": "<5.0.0",
112
- "strip-ansi": "<7.0.0",
113
- "wrap-ansi": "<8.0.0"
114
- }
115
- },
116
108
  "repository": "JamieMason/syncpack",
117
109
  "scripts": {
118
110
  "build": "pnpm run clean && pnpm run build:source && pnpm run build:json-schema",
119
- "build:json-schema": "typescript-json-schema --esModuleInterop --noExtraProps src/index.ts RcFile --out dist/schema.json",
111
+ "build:json-schema": "typescript-json-schema --esModuleInterop --noExtraProps --ignoreErrors src/index.ts RcFile --out dist/schema.json",
120
112
  "build:source": "tsc --project tsconfig.build.json",
121
113
  "clean": "rm -rf ./dist",
122
114
  "format": "pnpm run format:lint && pnpm run format:source",
@@ -128,5 +120,6 @@
128
120
  "prepack": "pnpm run build",
129
121
  "release": "release-it",
130
122
  "test": "vitest run --config vitest.config.ts"
131
- }
123
+ },
124
+ "type": "module"
132
125
  }
@@ -1,7 +0,0 @@
1
- import { Effect } from 'effect';
2
- import type { O } from 'ts-toolbelt';
3
- import type { Io } from '.';
4
- import type { RcConfig } from '../config/types';
5
- type UnverifiedRcConfig = O.Partial<RcConfig, 'deep'>;
6
- export declare function readConfigFileSync(io: Io, configPath?: string): Effect.Effect<never, never, UnverifiedRcConfig>;
7
- export {};
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.readConfigFileSync = void 0;
4
- const effect_1 = require("effect");
5
- const path_1 = require("path");
6
- const is_non_empty_object_1 = require("tightrope/guard/is-non-empty-object");
7
- const read_json_file_sync_1 = require("./read-json-file-sync");
8
- const getOptionOfNonEmptyObject = effect_1.Option.liftPredicate((is_non_empty_object_1.isNonEmptyObject));
9
- function readConfigFileSync(io, configPath) {
10
- return (0, effect_1.pipe)(effect_1.Effect.try(() => io.cosmiconfig.cosmiconfig('syncpack')), effect_1.Effect.flatMap((client) => effect_1.Effect.tryPromise(() => (configPath ? client.load(configPath) : client.search()))), effect_1.Effect.flatMap((result) => result !== null ? getValueFromCosmiconfig(result) : findConfigInPackageJson(io)), effect_1.Effect.tap((config) => effect_1.Effect.logDebug(`config file found: ${JSON.stringify(config)}`)), effect_1.Effect.tapError(() => effect_1.Effect.logDebug('no config file found, will use defaults')), effect_1.Effect.catchAll(() => effect_1.Effect.succeed({})));
11
- }
12
- exports.readConfigFileSync = readConfigFileSync;
13
- /**
14
- * Look for a .config.syncpack property in the root package.json.
15
- * @see https://github.com/JamieMason/syncpack/issues/86
16
- */
17
- function findConfigInPackageJson(io) {
18
- return (0, effect_1.pipe)(effect_1.Effect.Do, effect_1.Effect.bind('rcPath', () => effect_1.Effect.succeed((0, path_1.join)(io.process.cwd(), 'package.json'))), effect_1.Effect.bind('packageJson', ({ rcPath }) => (0, read_json_file_sync_1.readJsonFileSync)(io, rcPath)), effect_1.Effect.bind('config', ({ packageJson }) => effect_1.Effect.try(() => packageJson.contents?.config?.syncpack)), effect_1.Effect.flatMap(({ config }) => getOptionOfNonEmptyObject(config)), effect_1.Effect.tapBoth({
19
- onSuccess: () => effect_1.Effect.logDebug('config found in <package.json>.config.syncpack'),
20
- onFailure: () => effect_1.Effect.logDebug('config not found in <package.json>.config.syncpack'),
21
- }));
22
- }
23
- /** Extract the value from a successful search by cosmiconfig */
24
- function getValueFromCosmiconfig(result) {
25
- return (0, effect_1.pipe)(effect_1.Effect.succeed(result), effect_1.Effect.tap((result) => effect_1.Effect.logDebug(`cosmiconfig found ${result.filepath}`)), effect_1.Effect.flatMap((result) => getOptionOfNonEmptyObject(result.config)));
26
- }