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,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnnamedVersionStringStrategy = void 0;
4
+ const get_1 = require("tightrope/fn/get");
5
+ const pipe_1 = require("tightrope/fn/pipe");
6
+ const from_try_1 = require("tightrope/result/from-try");
7
+ const map_1 = require("tightrope/result/map");
8
+ const tap_1 = require("tightrope/result/tap");
9
+ const delete_1 = require("../get-version-groups/lib/delete");
10
+ const get_non_empty_string_prop_1 = require("./lib/get-non-empty-string-prop");
11
+ class UnnamedVersionStringStrategy {
12
+ constructor(name, path) {
13
+ this._tag = 'version';
14
+ this.name = name;
15
+ this.path = path;
16
+ }
17
+ read(file) {
18
+ const path = this.path;
19
+ return (0, pipe_1.pipe)(
20
+ // get version prop
21
+ (0, get_non_empty_string_prop_1.getNonEmptyStringProp)(path, file),
22
+ // if it is a non empty string, we can read it
23
+ (0, map_1.map)((version) => {
24
+ const name = path.split('.').slice(-1).join('');
25
+ return [[name, version]];
26
+ }));
27
+ }
28
+ write(file, [, version]) {
29
+ const path = this.path;
30
+ const { contents } = file;
31
+ const isNestedPath = path.includes('.');
32
+ const nextValue = version === delete_1.DELETE ? undefined : version;
33
+ if (isNestedPath) {
34
+ const fullPath = path.split('.');
35
+ const pathToParent = fullPath.slice(0, fullPath.length - 1).join('.');
36
+ const key = fullPath.slice(-1).join('');
37
+ return (0, pipe_1.pipe)((0, get_1.get)(contents, ...pathToParent.split('.')), (0, tap_1.tap)((parent) => {
38
+ parent[key] = nextValue;
39
+ }), (0, map_1.map)(() => file));
40
+ }
41
+ else {
42
+ return (0, pipe_1.pipe)((0, from_try_1.fromTry)(() => {
43
+ contents[path] = nextValue;
44
+ }), (0, map_1.map)(() => file));
45
+ }
46
+ }
47
+ }
48
+ exports.UnnamedVersionStringStrategy = UnnamedVersionStringStrategy;
@@ -0,0 +1,11 @@
1
+ import type { Result } from 'tightrope/result';
2
+ import type { PackageJsonFile } from '../get-package-json-files/package-json-file';
3
+ import type { Delete } from '../get-version-groups/lib/delete';
4
+ export declare class VersionsByNameStrategy {
5
+ _tag: string;
6
+ name: string;
7
+ path: string;
8
+ constructor(name: string, path: string);
9
+ read(file: PackageJsonFile): Result<[string, string][]>;
10
+ write(file: PackageJsonFile, [name, version]: [string, string | Delete]): Result<PackageJsonFile>;
11
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionsByNameStrategy = void 0;
4
+ const get_1 = require("tightrope/fn/get");
5
+ const pipe_1 = require("tightrope/fn/pipe");
6
+ const is_non_empty_object_1 = require("tightrope/guard/is-non-empty-object");
7
+ const filter_1 = require("tightrope/result/filter");
8
+ const map_1 = require("tightrope/result/map");
9
+ const tap_1 = require("tightrope/result/tap");
10
+ const delete_1 = require("../get-version-groups/lib/delete");
11
+ class VersionsByNameStrategy {
12
+ constructor(name, path) {
13
+ this._tag = 'versionsByName';
14
+ this.name = name;
15
+ this.path = path;
16
+ }
17
+ read(file) {
18
+ const path = this.path;
19
+ return (0, pipe_1.pipe)((0, get_1.get)(file.contents, ...path.split('.')), (0, filter_1.filter)((is_non_empty_object_1.isNonEmptyObject), ''), (0, map_1.map)((Object.entries)));
20
+ }
21
+ write(file, [name, version]) {
22
+ const path = this.path;
23
+ const nextValue = version === delete_1.DELETE ? undefined : version;
24
+ return (0, pipe_1.pipe)((0, get_1.get)(file.contents, ...path.split('.')), (0, tap_1.tap)((parent) => {
25
+ parent[name] = nextValue;
26
+ }), (0, map_1.map)(() => file));
27
+ }
28
+ }
29
+ exports.VersionsByNameStrategy = VersionsByNameStrategy;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "syncpack",
3
- "description": "Manage multiple package.json files, such as in Lerna Monorepos and Yarn/Pnpm Workspaces",
4
- "version": "9.8.4",
3
+ "description": "Consistent dependency versions in large JavaScript Monorepos",
4
+ "version": "10.0.0",
5
5
  "author": "Jamie Mason <jamie@foldleft.io> (https://github.com/JamieMason)",
6
6
  "bin": {
7
7
  "syncpack": "dist/bin.js",
@@ -18,45 +18,46 @@
18
18
  "Aparajita Fishman (https://github.com/aparajita)",
19
19
  "Artur Wierzbicki (https://github.com/ArturWierzbicki)",
20
20
  "Daniel Silva (https://github.com/dsilvasc)",
21
+ "Jamie Haywood (https://github.com/jamiehaywood)",
21
22
  "Jamie Mason (https://github.com/JamieMason)",
22
23
  "Jody Heavener (https://github.com/jodyheavener)",
23
24
  "Luis Vieira (https://github.com/luisvieiragmr)",
24
25
  "Marais Rossouw (https://github.com/maraisr)",
25
26
  "Matt Sprague (https://github.com/uforic)",
27
+ "Siraj (https://github.com/Syhner)",
26
28
  "Tom Fletcher (https://github.com/tom-fletcher)"
27
29
  ],
28
30
  "dependencies": {
29
- "@mobily/ts-belt": "3.13.1",
30
31
  "chalk": "4.1.2",
31
- "commander": "10.0.0",
32
- "cosmiconfig": "8.0.0",
33
- "expect-more": "1.3.0",
34
- "fs-extra": "11.1.0",
32
+ "commander": "10.0.1",
33
+ "cosmiconfig": "8.1.3",
34
+ "fs-extra": "11.1.1",
35
35
  "glob": "8.1.0",
36
36
  "minimatch": "6.2.0",
37
37
  "read-yaml-file": "2.1.0",
38
- "semver": "7.3.8",
39
- "zod": "3.20.6"
38
+ "semver": "7.5.0",
39
+ "tightrope": "0.1.0",
40
+ "ts-toolbelt": "9.6.0"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@tsconfig/node14": "1.0.3",
43
44
  "@types/fs-extra": "11.0.1",
44
- "@types/glob": "8.0.1",
45
- "@types/jest": "29.4.0",
45
+ "@types/glob": "8.1.0",
46
+ "@types/jest": "29.5.1",
46
47
  "@types/node": "14.18.36",
47
48
  "@types/semver": "7.3.13",
48
- "@typescript-eslint/eslint-plugin": "5.52.0",
49
- "@typescript-eslint/parser": "5.52.0",
50
- "eslint": "8.34.0",
49
+ "@typescript-eslint/eslint-plugin": "5.59.0",
50
+ "@typescript-eslint/parser": "5.59.0",
51
+ "eslint": "8.39.0",
51
52
  "eslint-plugin-import": "2.27.5",
52
53
  "eslint-plugin-jest": "27.2.1",
53
54
  "expect-more-jest": "5.5.0",
54
- "jest": "29.4.3",
55
- "prettier": "2.8.4",
56
- "rimraf": "4.1.2",
57
- "ts-jest": "29.0.5",
55
+ "jest": "29.5.0",
56
+ "prettier": "2.8.8",
57
+ "rimraf": "4.4.1",
58
+ "ts-jest": "29.1.0",
58
59
  "ts-node": "10.9.1",
59
- "typescript": "4.9.5"
60
+ "typescript": "5.0.4"
60
61
  },
61
62
  "engines": {
62
63
  "node": ">=14"
@@ -86,6 +87,7 @@
86
87
  "yarn"
87
88
  ],
88
89
  "license": "MIT",
90
+ "main": "dist/index.js",
89
91
  "repository": "JamieMason/syncpack",
90
92
  "resolutions": {
91
93
  "chalk": "4.1.2"
@@ -98,5 +100,6 @@
98
100
  "lint": "eslint --ext .ts .",
99
101
  "prepack": "yarn build",
100
102
  "test": "jest src test"
101
- }
103
+ },
104
+ "types": "dist/index.d.ts"
102
105
  }
@@ -1,13 +0,0 @@
1
- import { R } from '@mobily/ts-belt';
2
- import { BaseError } from '../lib/error';
3
- /** Additional helpers for https://mobily.github.io/ts-belt/api/result */
4
- export declare const $R: {
5
- /**
6
- * Return a single `R.Ok<output[]>` containing an array of the output of every
7
- * `R.Result` returned by `getResult(input)` which succeeded, or a single
8
- * `R.Error<BaseError>` if none succeeded.
9
- */
10
- onlyOk<Input, Output = Input>(getResult: (value: Input) => R.Result<Output, BaseError>): (inputs: Input[]) => R.Result<Output[], BaseError>;
11
- /** Log verbose only when R.Result is an R.Err */
12
- tapErrVerbose<T extends R.Result<unknown, BaseError>>(result: T): T;
13
- };
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.$R = void 0;
4
- const ts_belt_1 = require("@mobily/ts-belt");
5
- const error_1 = require("../lib/error");
6
- const log_1 = require("../lib/log");
7
- /** Additional helpers for https://mobily.github.io/ts-belt/api/result */
8
- exports.$R = {
9
- /**
10
- * Return a single `R.Ok<output[]>` containing an array of the output of every
11
- * `R.Result` returned by `getResult(input)` which succeeded, or a single
12
- * `R.Error<BaseError>` if none succeeded.
13
- */
14
- onlyOk(getResult) {
15
- return (inputs) => {
16
- const outputs = [];
17
- for (const value of inputs) {
18
- const result = getResult(value);
19
- if (ts_belt_1.R.isError(result))
20
- continue;
21
- outputs.push(ts_belt_1.R.getExn(result));
22
- }
23
- return outputs.length > 0
24
- ? ts_belt_1.R.Ok(outputs)
25
- : ts_belt_1.R.Error(new error_1.BaseError('No R.Ok() returned by $R.onlyOk'));
26
- };
27
- },
28
- /** Log verbose only when R.Result is an R.Err */
29
- tapErrVerbose(result) {
30
- if (ts_belt_1.R.isError(result))
31
- (0, log_1.verbose)(result._0.message);
32
- return result;
33
- },
34
- };
@@ -1,36 +0,0 @@
1
- import type { Syncpack } from '../../types';
2
- type CoreTypes = typeof coreTypes;
3
- export type CoreTypeName = keyof CoreTypes;
4
- declare const coreTypes: {
5
- readonly dev: {
6
- readonly path: "devDependencies";
7
- readonly strategy: "versionsByName";
8
- };
9
- readonly overrides: {
10
- readonly path: "overrides";
11
- readonly strategy: "versionsByName";
12
- };
13
- readonly peer: {
14
- readonly path: "peerDependencies";
15
- readonly strategy: "versionsByName";
16
- };
17
- readonly pnpmOverrides: {
18
- readonly path: "pnpm.overrides";
19
- readonly strategy: "versionsByName";
20
- };
21
- readonly prod: {
22
- readonly path: "dependencies";
23
- readonly strategy: "versionsByName";
24
- };
25
- readonly resolutions: {
26
- readonly path: "resolutions";
27
- readonly strategy: "versionsByName";
28
- };
29
- readonly workspace: {
30
- readonly namePath: "name";
31
- readonly path: "version";
32
- readonly strategy: "name~version";
33
- };
34
- };
35
- export declare function getCoreTypes(): Syncpack.PathDefinition[];
36
- export {};
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCoreTypes = void 0;
4
- const coreTypes = {
5
- dev: {
6
- path: 'devDependencies',
7
- strategy: 'versionsByName',
8
- },
9
- overrides: {
10
- path: 'overrides',
11
- strategy: 'versionsByName',
12
- },
13
- peer: {
14
- path: 'peerDependencies',
15
- strategy: 'versionsByName',
16
- },
17
- pnpmOverrides: {
18
- path: 'pnpm.overrides',
19
- strategy: 'versionsByName',
20
- },
21
- prod: {
22
- path: 'dependencies',
23
- strategy: 'versionsByName',
24
- },
25
- resolutions: {
26
- path: 'resolutions',
27
- strategy: 'versionsByName',
28
- },
29
- workspace: {
30
- namePath: 'name',
31
- path: 'version',
32
- strategy: 'name~version',
33
- },
34
- };
35
- function getCoreTypes() {
36
- return Object.entries(coreTypes).map(([name, pathDef]) => ({ ...pathDef, name }));
37
- }
38
- exports.getCoreTypes = getCoreTypes;
@@ -1,4 +0,0 @@
1
- import type { Syncpack } from '../../types';
2
- type Options = Pick<Partial<Syncpack.Config.Public>, 'customTypes'>;
3
- export declare function getCustomTypes({ customTypes, }: Options): Syncpack.PathDefinition[];
4
- export {};
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCustomTypes = void 0;
4
- const is_object_1 = require("expect-more/dist/is-object");
5
- function getCustomTypes({ customTypes, }) {
6
- return customTypes
7
- ? Object.keys(customTypes)
8
- .map((name) => {
9
- const pathDef = customTypes[name];
10
- if (pathDef)
11
- return { ...pathDef, name };
12
- })
13
- .filter((is_object_1.isObject))
14
- : [];
15
- }
16
- exports.getCustomTypes = getCustomTypes;
@@ -1,4 +0,0 @@
1
- import type { Syncpack } from '../../types';
2
- type Options = Pick<Partial<Syncpack.Config.Public>, 'dependencyTypes' | 'types'>;
3
- export declare function getEnabledTypes(allTypes: Syncpack.PathDefinition[], { dependencyTypes, types }: Options): Syncpack.PathDefinition[];
4
- export {};
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEnabledTypes = void 0;
4
- const is_array_of_strings_1 = require("expect-more/dist/is-array-of-strings");
5
- const is_non_empty_array_1 = require("expect-more/dist/is-non-empty-array");
6
- const is_non_empty_string_1 = require("expect-more/dist/is-non-empty-string");
7
- function getEnabledTypes(allTypes, { dependencyTypes, types }) {
8
- const enabledNames = (0, is_non_empty_string_1.isNonEmptyString)(types)
9
- ? types.split(',')
10
- : (0, is_array_of_strings_1.isArrayOfStrings)(dependencyTypes)
11
- ? dependencyTypes
12
- : [];
13
- return (0, is_non_empty_array_1.isNonEmptyArray)(enabledNames)
14
- ? allTypes.filter(({ name }) => enabledNames.includes(name))
15
- : allTypes;
16
- }
17
- exports.getEnabledTypes = getEnabledTypes;
@@ -1,9 +0,0 @@
1
- import { R } from '@mobily/ts-belt';
2
- import type { Disk } from '../../lib/disk';
3
- import { BaseError } from '../../lib/error';
4
- import type { Syncpack } from '../../types';
5
- /**
6
- * Take all configuration from the command line and config file, combine it, and
7
- * set defaults for anything which hasn't been defined.
8
- */
9
- export declare function getConfig(disk: Disk, fromCli: Partial<Syncpack.Config.Cli>): R.Result<Syncpack.Config.Private, BaseError>;
@@ -1,91 +0,0 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.getConfig = void 0;
27
- const ts_belt_1 = require("@mobily/ts-belt");
28
- const error_1 = require("../../lib/error");
29
- const log_1 = require("../../lib/log");
30
- const get_core_types_1 = require("./get-core-types");
31
- const get_custom_types_1 = require("./get-custom-types");
32
- const get_enabled_types_1 = require("./get-enabled-types");
33
- const ConfigSchema = __importStar(require("./schema"));
34
- /**
35
- * Take all configuration from the command line and config file, combine it, and
36
- * set defaults for anything which hasn't been defined.
37
- */
38
- function getConfig(disk, fromCli) {
39
- const ERR_READING_CONFIG = 'Error reading config';
40
- return (0, ts_belt_1.pipe)(ts_belt_1.R.fromExecution(() => unSafeGetConfig(disk, fromCli)), ts_belt_1.R.mapError(error_1.BaseError.map(ERR_READING_CONFIG)));
41
- }
42
- exports.getConfig = getConfig;
43
- function unSafeGetConfig(disk, fromCli) {
44
- (0, log_1.verbose)('cli arguments:', fromCli);
45
- const fromRcFile = disk.readConfigFileSync(fromCli.configPath);
46
- (0, log_1.verbose)('rcfile contents:', fromRcFile);
47
- const fromPublic = ConfigSchema.Public.parse({
48
- customTypes: getConfigByName('customTypes'),
49
- dependencyTypes: fromRcFile?.dependencyTypes,
50
- filter: getConfigByName('filter'),
51
- indent: getConfigByName('indent'),
52
- semverGroups: getConfigByName('semverGroups'),
53
- semverRange: getConfigByName('semverRange'),
54
- sortAz: getConfigByName('sortAz'),
55
- sortFirst: getConfigByName('sortFirst'),
56
- source: getConfigByName('source'),
57
- types: fromCli?.types,
58
- versionGroups: getConfigByName('versionGroups'),
59
- });
60
- (0, log_1.verbose)('user config:', fromPublic);
61
- const coreTypes = (0, get_core_types_1.getCoreTypes)();
62
- const customTypes = (0, get_custom_types_1.getCustomTypes)(fromPublic);
63
- const allTypes = [...coreTypes, ...customTypes];
64
- const enabledTypes = (0, get_enabled_types_1.getEnabledTypes)(allTypes, fromPublic);
65
- const allConfig = ConfigSchema.Private.parse({
66
- ...fromPublic,
67
- allTypes,
68
- enabledTypes,
69
- defaultSemverGroup: {
70
- dependencies: ['**'],
71
- isDefault: true,
72
- packages: ['**'],
73
- range: fromPublic.semverRange,
74
- },
75
- defaultVersionGroup: {
76
- dependencies: ['**'],
77
- isDefault: true,
78
- packages: ['**'],
79
- },
80
- });
81
- allConfig.semverGroups.push(allConfig.defaultSemverGroup);
82
- allConfig.versionGroups.push(allConfig.defaultVersionGroup);
83
- (0, log_1.verbose)('final config:', allConfig);
84
- return allConfig;
85
- function getConfigByName(name) {
86
- if (typeof fromCli[name] !== 'undefined')
87
- return fromCli[name];
88
- if (typeof fromRcFile[name] !== 'undefined')
89
- return fromRcFile[name];
90
- }
91
- }
@@ -1,8 +0,0 @@
1
- export type StrategyByName = typeof strategyByName;
2
- export declare const strategyByName: {
3
- readonly 'name@version': import("./types").Strategy<"name@version">;
4
- readonly 'name~version': import("./types").Strategy<"name~version">;
5
- readonly version: import("./types").Strategy<"version">;
6
- readonly versionsByName: import("./types").Strategy<"versionsByName">;
7
- };
8
- export declare function exhaustiveCheck(strategyName: never): never;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.exhaustiveCheck = exports.strategyByName = void 0;
4
- const error_1 = require("../../../lib/error");
5
- const name_and_version_props_1 = require("./name-and-version-props");
6
- const name_and_version_string_1 = require("./name-and-version-string");
7
- const version_string_1 = require("./version-string");
8
- const versions_by_name_1 = require("./versions-by-name");
9
- exports.strategyByName = {
10
- 'name@version': name_and_version_string_1.nameAndVersionString,
11
- 'name~version': name_and_version_props_1.nameAndVersionProps,
12
- 'version': version_string_1.versionString,
13
- 'versionsByName': versions_by_name_1.versionsByName,
14
- };
15
- function exhaustiveCheck(strategyName) {
16
- throw new error_1.BaseError(`Unrecognised strategy "${strategyName}"`);
17
- }
18
- exports.exhaustiveCheck = exhaustiveCheck;
@@ -1,4 +0,0 @@
1
- import type { R } from '@mobily/ts-belt';
2
- import { BaseError } from '../../../../lib/error';
3
- import type { PackageJsonFile } from '../../../get-package-json-files/package-json-file';
4
- export declare function getNonEmptyStringProp(propPath: string, file: PackageJsonFile): R.Result<string, BaseError>;
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNonEmptyStringProp = void 0;
4
- const ts_belt_1 = require("@mobily/ts-belt");
5
- const is_non_empty_string_1 = require("expect-more/dist/is-non-empty-string");
6
- const error_1 = require("../../../../lib/error");
7
- const props_1 = require("../../../get-package-json-files/get-patterns/props");
8
- function getNonEmptyStringProp(propPath, file) {
9
- return (0, ts_belt_1.pipe)(file.contents, (0, props_1.props)(propPath, is_non_empty_string_1.isNonEmptyString), ts_belt_1.O.toResult(new error_1.BaseError(`Failed to get ${propPath} in ${file.shortPath}`)));
10
- }
11
- exports.getNonEmptyStringProp = getNonEmptyStringProp;
@@ -1,2 +0,0 @@
1
- import type { Strategy } from './types';
2
- export declare const nameAndVersionProps: Strategy<'name~version'>;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.nameAndVersionProps = void 0;
4
- const ts_belt_1 = require("@mobily/ts-belt");
5
- const is_object_1 = require("expect-more/dist/is-object");
6
- const error_1 = require("../../../lib/error");
7
- const props_1 = require("../../get-package-json-files/get-patterns/props");
8
- const get_non_empty_string_prop_1 = require("./lib/get-non-empty-string-prop");
9
- exports.nameAndVersionProps = {
10
- read(file, pathDef) {
11
- return (0, ts_belt_1.pipe)(
12
- // get name prop
13
- (0, get_non_empty_string_prop_1.getNonEmptyStringProp)(pathDef.namePath, file), ts_belt_1.R.mapError(() => new error_1.BaseError(`Strategy<name~version> failed to get ${pathDef.namePath} in ${file.shortPath}`)),
14
- // add the version prop
15
- ts_belt_1.R.flatMap((name) => (0, ts_belt_1.pipe)((0, get_non_empty_string_prop_1.getNonEmptyStringProp)(pathDef.path, file), ts_belt_1.R.map((version) => ({ name, version })), ts_belt_1.R.mapError(() => new error_1.BaseError(`Strategy<name~version> failed to get ${pathDef.path} in ${file.shortPath}`)))),
16
- // if both are non empty strings, we can return them
17
- ts_belt_1.R.map(({ name, version }) => [[name, version]]));
18
- },
19
- write(file, pathDef, [, version]) {
20
- const { contents, shortPath } = file;
21
- const isNestedPath = pathDef.path.includes('.');
22
- if (isNestedPath) {
23
- const fullPath = pathDef.path.split('.');
24
- const pathToParent = fullPath.slice(0, fullPath.length - 1).join('.');
25
- const key = fullPath.slice(-1).join('');
26
- return (0, ts_belt_1.pipe)(contents, (0, props_1.props)(pathToParent, is_object_1.isObject), ts_belt_1.O.toResult(onError()), ts_belt_1.R.tap((parent) => {
27
- parent[key] = version;
28
- }), ts_belt_1.R.mapError(onError), ts_belt_1.R.map(() => file));
29
- }
30
- else {
31
- return (0, ts_belt_1.pipe)(ts_belt_1.R.fromExecution(() => {
32
- contents[pathDef.path] = version;
33
- }), ts_belt_1.R.mapError(onError), ts_belt_1.R.map(() => file));
34
- }
35
- function onError() {
36
- const msg = `Strategy<name~version> failed to set ${pathDef.path} in ${shortPath}`;
37
- return new error_1.BaseError(msg);
38
- }
39
- },
40
- };
@@ -1,2 +0,0 @@
1
- import type { Strategy } from './types';
2
- export declare const nameAndVersionString: Strategy<'name@version'>;
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.nameAndVersionString = void 0;
4
- const ts_belt_1 = require("@mobily/ts-belt");
5
- const is_non_empty_string_1 = require("expect-more/dist/is-non-empty-string");
6
- const is_object_1 = require("expect-more/dist/is-object");
7
- const error_1 = require("../../../lib/error");
8
- const props_1 = require("../../get-package-json-files/get-patterns/props");
9
- const get_non_empty_string_prop_1 = require("./lib/get-non-empty-string-prop");
10
- exports.nameAndVersionString = {
11
- read(file, pathDef) {
12
- return (0, ts_belt_1.pipe)(
13
- // get version prop
14
- (0, get_non_empty_string_prop_1.getNonEmptyStringProp)(pathDef.path, file),
15
- // if it is a non empty string, we can read it
16
- ts_belt_1.R.flatMap((value) => {
17
- const [name, version] = value.split('@');
18
- return (0, is_non_empty_string_1.isNonEmptyString)(name) && (0, is_non_empty_string_1.isNonEmptyString)(version)
19
- ? ts_belt_1.R.Ok([[name, version]])
20
- : ts_belt_1.R.Error(new error_1.BaseError(`Strategy<name@version> failed to get ${pathDef.path} in ${file.shortPath}`));
21
- }));
22
- },
23
- write(file, pathDef, [name, version]) {
24
- const { contents, shortPath } = file;
25
- const isNestedPath = pathDef.path.includes('.');
26
- if (isNestedPath) {
27
- const fullPath = pathDef.path.split('.');
28
- const pathToParent = fullPath.slice(0, fullPath.length - 1).join('.');
29
- const key = fullPath.slice(-1).join('');
30
- return (0, ts_belt_1.pipe)(contents, (0, props_1.props)(pathToParent, is_object_1.isObject), ts_belt_1.O.toResult(onError()), ts_belt_1.R.tap((parent) => {
31
- parent[key] = `${name}@${version}`;
32
- }), ts_belt_1.R.mapError(onError), ts_belt_1.R.map(() => file));
33
- }
34
- else {
35
- return (0, ts_belt_1.pipe)(ts_belt_1.R.fromExecution(() => {
36
- contents[pathDef.path] = `${name}@${version}`;
37
- }), ts_belt_1.R.mapError(onError), ts_belt_1.R.map(() => file));
38
- }
39
- function onError() {
40
- const msg = `Strategy<name@version> failed to set ${pathDef.path} in ${shortPath}`;
41
- return new error_1.BaseError(msg);
42
- }
43
- },
44
- };
@@ -1,15 +0,0 @@
1
- import type { R } from '@mobily/ts-belt';
2
- import type { BaseError } from '../../../lib/error';
3
- import type { Syncpack } from '../../../types';
4
- import type { PackageJsonFile } from '../../get-package-json-files/package-json-file';
5
- export type PathDef<T extends Syncpack.PathDefinition['strategy']> = Syncpack.PathDefinition & {
6
- strategy: T;
7
- };
8
- /** A name/version pair */
9
- export type Entry = [string, string];
10
- export interface Strategy<T extends Syncpack.PathDefinition['strategy']> {
11
- /** Read from in-memory package.json file */
12
- read(file: PackageJsonFile, pathDef: PathDef<T>): R.Result<Entry[], BaseError>;
13
- /** Mutate in-memory package.json file */
14
- write(file: PackageJsonFile, pathDef: PathDef<T>, entry: [string, string | undefined]): R.Result<PackageJsonFile, BaseError>;
15
- }
@@ -1,2 +0,0 @@
1
- import type { Strategy } from './types';
2
- export declare const versionString: Strategy<'version'>;