syncpack 8.5.14 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +194 -108
  2. package/dist/bin-fix-mismatches/fix-mismatches-cli.d.ts +2 -2
  3. package/dist/bin-fix-mismatches/fix-mismatches-cli.js +1 -1
  4. package/dist/bin-fix-mismatches/fix-mismatches.d.ts +2 -2
  5. package/dist/bin-fix-mismatches/fix-mismatches.js +35 -8
  6. package/dist/bin-fix-mismatches/index.js +9 -18
  7. package/dist/bin-format/format-cli.d.ts +2 -2
  8. package/dist/bin-format/format-cli.js +1 -1
  9. package/dist/bin-format/format.d.ts +2 -2
  10. package/dist/bin-format/index.js +2 -0
  11. package/dist/bin-lint-semver-ranges/index.js +10 -19
  12. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.d.ts +2 -2
  13. package/dist/bin-lint-semver-ranges/lint-semver-ranges-cli.js +1 -1
  14. package/dist/bin-lint-semver-ranges/lint-semver-ranges.d.ts +2 -2
  15. package/dist/bin-lint-semver-ranges/lint-semver-ranges.js +13 -14
  16. package/dist/bin-list/index.js +9 -18
  17. package/dist/bin-list/list-cli.d.ts +2 -2
  18. package/dist/bin-list/list-cli.js +1 -1
  19. package/dist/bin-list/list.d.ts +2 -2
  20. package/dist/bin-list/list.js +2 -2
  21. package/dist/bin-list-mismatches/index.js +9 -18
  22. package/dist/bin-list-mismatches/list-mismatches-cli.d.ts +2 -2
  23. package/dist/bin-list-mismatches/list-mismatches-cli.js +1 -1
  24. package/dist/bin-list-mismatches/list-mismatches.d.ts +2 -2
  25. package/dist/bin-list-mismatches/list-mismatches.js +6 -6
  26. package/dist/bin-set-semver-ranges/index.js +10 -19
  27. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.d.ts +2 -2
  28. package/dist/bin-set-semver-ranges/set-semver-ranges-cli.js +1 -1
  29. package/dist/bin-set-semver-ranges/set-semver-ranges.d.ts +2 -2
  30. package/dist/constants.d.ts +11 -7
  31. package/dist/constants.js +11 -22
  32. package/dist/get-context/$R.d.ts +13 -0
  33. package/dist/get-context/$R.js +56 -0
  34. package/dist/{lib/get-context → get-context}/get-all-instances.d.ts +0 -0
  35. package/dist/{lib/get-context → get-context}/get-all-instances.js +1 -1
  36. package/dist/get-context/get-config/get-core-types.d.ts +36 -0
  37. package/dist/get-context/get-config/get-core-types.js +68 -0
  38. package/dist/get-context/get-config/get-custom-types.d.ts +4 -0
  39. package/dist/get-context/get-config/get-custom-types.js +28 -0
  40. package/dist/get-context/get-config/get-enabled-types.d.ts +4 -0
  41. package/dist/get-context/get-config/get-enabled-types.js +19 -0
  42. package/dist/get-context/get-config/index.d.ts +7 -0
  43. package/dist/get-context/get-config/index.js +115 -0
  44. package/dist/get-context/get-config/path-strategy/index.d.ts +8 -0
  45. package/dist/get-context/get-config/path-strategy/index.js +18 -0
  46. package/dist/get-context/get-config/path-strategy/lib/get-non-empty-string-prop.d.ts +4 -0
  47. package/dist/get-context/get-config/path-strategy/lib/get-non-empty-string-prop.js +11 -0
  48. package/dist/get-context/get-config/path-strategy/name-and-version-props.d.ts +2 -0
  49. package/dist/get-context/get-config/path-strategy/name-and-version-props.js +66 -0
  50. package/dist/get-context/get-config/path-strategy/name-and-version-string.d.ts +2 -0
  51. package/dist/get-context/get-config/path-strategy/name-and-version-string.js +60 -0
  52. package/dist/get-context/get-config/path-strategy/types.d.ts +15 -0
  53. package/dist/{lib/get-context/get-config/config.js → get-context/get-config/path-strategy/types.js} +0 -0
  54. package/dist/get-context/get-config/path-strategy/version-string.d.ts +2 -0
  55. package/dist/get-context/get-config/path-strategy/version-string.js +60 -0
  56. package/dist/get-context/get-config/path-strategy/versions-by-name.d.ts +2 -0
  57. package/dist/get-context/get-config/path-strategy/versions-by-name.js +39 -0
  58. package/dist/get-context/get-config/schema/base-group.d.ts +6 -0
  59. package/dist/get-context/get-config/schema/base-group.js +9 -0
  60. package/dist/get-context/get-config/schema/index.d.ts +1276 -0
  61. package/dist/get-context/get-config/schema/index.js +104 -0
  62. package/dist/get-context/get-config/schema/paths.d.ts +89 -0
  63. package/dist/get-context/get-config/schema/paths.js +33 -0
  64. package/dist/get-context/get-config/schema/semver-group.d.ts +101 -0
  65. package/dist/get-context/get-config/schema/semver-group.js +50 -0
  66. package/dist/get-context/get-config/schema/semver-range.d.ts +2 -0
  67. package/dist/get-context/get-config/schema/semver-range.js +16 -0
  68. package/dist/get-context/get-config/schema/version-group.d.ts +151 -0
  69. package/dist/get-context/get-config/schema/version-group.js +31 -0
  70. package/dist/get-context/get-groups/get-semver-groups.d.ts +4 -0
  71. package/dist/{lib/get-context → get-context}/get-groups/get-semver-groups.js +2 -1
  72. package/dist/get-context/get-groups/get-version-groups.d.ts +4 -0
  73. package/dist/{lib/get-context → get-context}/get-groups/get-version-groups.js +2 -1
  74. package/dist/{lib/get-context → get-context}/get-groups/semver-group/index.d.ts +10 -11
  75. package/dist/get-context/get-groups/semver-group/index.js +56 -0
  76. package/dist/{lib/get-context → get-context}/get-groups/version-group/index.d.ts +5 -6
  77. package/dist/{lib/get-context → get-context}/get-groups/version-group/index.js +0 -0
  78. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/get-highest-version.d.ts +0 -0
  79. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/get-highest-version.js +2 -2
  80. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/index.d.ts +3 -1
  81. package/dist/{lib/get-context → get-context}/get-groups/version-group/instance-group/index.js +10 -9
  82. package/dist/get-context/get-package-json-files/get-file-paths.d.ts +14 -0
  83. package/dist/get-context/get-package-json-files/get-file-paths.js +40 -0
  84. package/dist/get-context/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +4 -0
  85. package/dist/get-context/get-package-json-files/get-patterns/get-lerna-patterns.js +19 -0
  86. package/dist/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +4 -0
  87. package/dist/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.js +23 -0
  88. package/dist/get-context/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +4 -0
  89. package/dist/get-context/get-package-json-files/get-patterns/get-yarn-patterns.js +20 -0
  90. package/dist/get-context/get-package-json-files/get-patterns/index.d.ts +11 -0
  91. package/dist/get-context/get-package-json-files/get-patterns/index.js +70 -0
  92. package/dist/get-context/get-package-json-files/get-patterns/lib/get-array-of-strings.d.ts +1 -0
  93. package/dist/get-context/get-package-json-files/get-patterns/lib/get-array-of-strings.js +10 -0
  94. package/dist/get-context/get-package-json-files/get-patterns/props.d.ts +6 -0
  95. package/dist/get-context/get-package-json-files/get-patterns/props.js +48 -0
  96. package/dist/{lib/get-context → get-context}/get-package-json-files/get-patterns/read-json-safe.d.ts +4 -3
  97. package/dist/get-context/get-package-json-files/get-patterns/read-json-safe.js +20 -0
  98. package/dist/get-context/get-package-json-files/get-patterns/read-yaml-safe.d.ts +4 -0
  99. package/dist/get-context/get-package-json-files/get-patterns/read-yaml-safe.js +11 -0
  100. package/dist/get-context/get-package-json-files/index.d.ts +5 -0
  101. package/dist/get-context/get-package-json-files/index.js +16 -0
  102. package/dist/{lib/get-context → get-context}/get-package-json-files/package-json-file/index.d.ts +7 -6
  103. package/dist/{lib/get-context → get-context}/get-package-json-files/package-json-file/index.js +28 -38
  104. package/dist/{lib/get-context → get-context}/get-package-json-files/package-json-file/instance.d.ts +6 -6
  105. package/dist/get-context/get-package-json-files/package-json-file/instance.js +62 -0
  106. package/dist/{lib/get-context → get-context}/index.d.ts +4 -5
  107. package/dist/{lib/get-context → get-context}/index.js +1 -1
  108. package/dist/lib/disk.d.ts +11 -11
  109. package/dist/lib/error.d.ts +12 -0
  110. package/dist/lib/error.js +43 -0
  111. package/dist/lib/exit-if-invalid.d.ts +2 -2
  112. package/dist/lib/is-semver.d.ts +2 -2
  113. package/dist/lib/set-semver-range.d.ts +2 -2
  114. package/dist/lib/show-help-on-error.d.ts +2 -0
  115. package/dist/lib/show-help-on-error.js +16 -0
  116. package/dist/lib/write-if-changed.d.ts +2 -2
  117. package/dist/option.d.ts +4 -10
  118. package/dist/option.js +6 -16
  119. package/dist/types.d.ts +88 -0
  120. package/dist/{lib/get-context/get-config/internal-config.js → types.js} +0 -0
  121. package/package.json +4 -3
  122. package/dist/lib/get-context/get-config/config.d.ts +0 -151
  123. package/dist/lib/get-context/get-config/index.d.ts +0 -8
  124. package/dist/lib/get-context/get-config/index.js +0 -160
  125. package/dist/lib/get-context/get-config/internal-config.d.ts +0 -24
  126. package/dist/lib/get-context/get-groups/get-semver-groups.d.ts +0 -4
  127. package/dist/lib/get-context/get-groups/get-version-groups.d.ts +0 -4
  128. package/dist/lib/get-context/get-groups/semver-group/index.js +0 -33
  129. package/dist/lib/get-context/get-package-json-files/get-file-paths.d.ts +0 -12
  130. package/dist/lib/get-context/get-package-json-files/get-file-paths.js +0 -55
  131. package/dist/lib/get-context/get-package-json-files/get-patterns/get-lerna-patterns.d.ts +0 -3
  132. package/dist/lib/get-context/get-package-json-files/get-patterns/get-lerna-patterns.js +0 -40
  133. package/dist/lib/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.d.ts +0 -3
  134. package/dist/lib/get-context/get-package-json-files/get-patterns/get-pnpm-patterns.js +0 -45
  135. package/dist/lib/get-context/get-package-json-files/get-patterns/get-yarn-patterns.d.ts +0 -3
  136. package/dist/lib/get-context/get-package-json-files/get-patterns/get-yarn-patterns.js +0 -46
  137. package/dist/lib/get-context/get-package-json-files/get-patterns/index.d.ts +0 -10
  138. package/dist/lib/get-context/get-package-json-files/get-patterns/index.js +0 -79
  139. package/dist/lib/get-context/get-package-json-files/get-patterns/props.d.ts +0 -7
  140. package/dist/lib/get-context/get-package-json-files/get-patterns/props.js +0 -43
  141. package/dist/lib/get-context/get-package-json-files/get-patterns/read-json-safe.js +0 -41
  142. package/dist/lib/get-context/get-package-json-files/get-patterns/read-yaml-safe.d.ts +0 -3
  143. package/dist/lib/get-context/get-package-json-files/get-patterns/read-yaml-safe.js +0 -34
  144. package/dist/lib/get-context/get-package-json-files/index.d.ts +0 -5
  145. package/dist/lib/get-context/get-package-json-files/index.js +0 -40
  146. package/dist/lib/get-context/get-package-json-files/package-json-file/instance.js +0 -46
  147. package/dist/lib/get-context/get-package-json-files/tap.d.ts +0 -15
  148. package/dist/lib/get-context/get-package-json-files/tap.js +0 -56
  149. package/dist/lib/get-context/get-package-json-files/try-catch.d.ts +0 -5
  150. package/dist/lib/get-context/get-package-json-files/try-catch.js +0 -13
package/README.md CHANGED
@@ -8,20 +8,26 @@
8
8
  [![Build Status](https://img.shields.io/github/actions/workflow/status/JamieMason/syncpack/ci.yaml?branch=master)](https://github.com/JamieMason/syncpack/actions)
9
9
  [![Maintainability](https://api.codeclimate.com/v1/badges/516439365fdd0e3c6526/maintainability)](https://codeclimate.com/github/JamieMason/syncpack/maintainability)
10
10
 
11
- ## 🌩 Installation
11
+ ## Installation
12
12
 
13
13
  ```bash
14
- npm install --global syncpack
14
+ npm install --save-dev syncpack
15
15
  ```
16
16
 
17
- ## 🤖 GitHub Action
18
-
19
- As of May 2022 there is now a
20
- [Syncpack GitHub Action](https://github.com/marketplace/actions/syncpack-synchronise-monorepo-dependency-versions).
21
- It is new and less stable than syncpack itself, but please give it a try and
22
- [give your feedback](https://github.com/JamieMason/syncpack-github-action/issues/new).
17
+ > ### Breaking Changes
18
+ >
19
+ > Version [9.0.0](https://github.com/JamieMason/syncpack/releases/tag/9.0.0)
20
+ > required some breaking API changes to add support for a new
21
+ > [`customTypes`](#customtypes) feature, but they are very simple to make.
22
+ >
23
+ > ### GitHub Action
24
+ >
25
+ > As of May 2022 there is now a
26
+ > [Syncpack GitHub Action](https://github.com/marketplace/actions/syncpack-synchronise-monorepo-dependency-versions).
27
+ > It is new and less stable than syncpack itself, but please give it a try and
28
+ > [give your feedback](https://github.com/JamieMason/syncpack-github-action/issues/new).
23
29
 
24
- ## 📝 Commands
30
+ ## Commands
25
31
 
26
32
  ### fix-mismatches
27
33
 
@@ -37,15 +43,9 @@ See [`versionGroups`](#versiongroups) if you have advanced requirements.
37
43
  ```
38
44
  -s, --source [pattern] glob pattern for package.json files to read from
39
45
  -f, --filter [pattern] only include dependencies whose name matches this regex
40
- -p, --prod include dependencies
41
- -d, --dev include devDependencies
42
- -P, --peer include peerDependencies
43
- -R, --resolutions include resolutions (yarn)
44
- -o, --overrides include overrides (npm)
45
- -O, --pnpmOverrides include overrides (pnpm)
46
- -w, --workspace include locally developed package versions
47
- -i, --indent [value] override indentation. defaults to " "
46
+ -t, --types <names> only include dependencies matching these types (eg. types=dev,prod,myCustomType)
48
47
  -c, --config <path> path to a syncpack config file
48
+ -i, --indent [value] override indentation. defaults to " "
49
49
  -h, --help display help for command
50
50
  ```
51
51
 
@@ -64,9 +64,9 @@ syncpack fix-mismatches --source "apps/*/package.json" --source "core/*/package.
64
64
  # uses dependencies regular expression defined by --filter when provided
65
65
  syncpack fix-mismatches --filter "typescript|tslint"
66
66
  # only inspect "devDependencies"
67
- syncpack fix-mismatches --dev
67
+ syncpack fix-mismatches --types dev
68
68
  # only inspect "devDependencies" and "peerDependencies"
69
- syncpack fix-mismatches --dev --peer
69
+ syncpack fix-mismatches --types dev,peer
70
70
  # indent package.json with 4 spaces instead of 2
71
71
  syncpack fix-mismatches --indent " "
72
72
  ```
@@ -85,8 +85,8 @@ Shorthand properties are used where available, such as the `"repository"` and
85
85
 
86
86
  ```
87
87
  -s, --source [pattern] glob pattern for package.json files to read from
88
- -i, --indent [value] override indentation. defaults to " "
89
88
  -c, --config <path> path to a syncpack config file
89
+ -i, --indent [value] override indentation. defaults to " "
90
90
  -h, --help display help for command
91
91
  ```
92
92
 
@@ -120,16 +120,10 @@ See [`semverGroups`](#semvergroups) if you have advanced requirements.
120
120
 
121
121
  ```
122
122
  -s, --source [pattern] glob pattern for package.json files to read from
123
- -p, --prod include dependencies
124
- -d, --dev include devDependencies
125
- -P, --peer include peerDependencies
126
- -R, --resolutions include resolutions (yarn)
127
- -o, --overrides include overrides (npm)
128
- -O, --pnpmOverrides include overrides (pnpm)
129
123
  -f, --filter [pattern] only include dependencies whose name matches this regex
130
124
  -r, --semver-range <range> see supported ranges below. defaults to ""
131
125
  -c, --config <path> path to a syncpack config file
132
- -w, --workspace include locally developed package versions
126
+ -t, --types <names> only include dependencies matching these types (eg. types=dev,prod,myCustomType)
133
127
  -h, --help display help for command
134
128
  ```
135
129
 
@@ -150,9 +144,9 @@ syncpack lint-semver-ranges --filter "typescript|tslint"
150
144
  # use ~ range instead of default ""
151
145
  syncpack lint-semver-ranges --semver-range ~
152
146
  # use ~ range in "devDependencies"
153
- syncpack lint-semver-ranges --dev --semver-range ~
147
+ syncpack lint-semver-ranges --types dev --semver-range ~
154
148
  # use ~ range in "devDependencies" and "peerDependencies"
155
- syncpack lint-semver-ranges --dev --peer --semver-range ~
149
+ syncpack lint-semver-ranges --types dev,peer semver-range ~
156
150
  ```
157
151
 
158
152
  </details>
@@ -166,15 +160,9 @@ List all dependencies required by your packages.
166
160
 
167
161
  ```
168
162
  -s, --source [pattern] glob pattern for package.json files to read from
169
- -p, --prod include dependencies
170
- -d, --dev include devDependencies
171
- -P, --peer include peerDependencies
172
- -R, --resolutions include resolutions (yarn)
173
- -o, --overrides include overrides (npm)
174
- -O, --pnpmOverrides include overrides (pnpm)
175
163
  -f, --filter [pattern] only include dependencies whose name matches this regex
176
164
  -c, --config <path> path to a syncpack config file
177
- -w, --workspace include locally developed package versions
165
+ -t, --types <names> only include dependencies matching these types (eg. types=dev,prod,myCustomType)
178
166
  -h, --help display help for command
179
167
  ```
180
168
 
@@ -193,9 +181,9 @@ syncpack list --source "apps/*/package.json" --source "core/*/package.json"
193
181
  # uses dependencies regular expression defined by --filter when provided
194
182
  syncpack list --filter "typescript|tslint"
195
183
  # only inspect "devDependencies"
196
- syncpack list --dev
184
+ syncpack list --types dev
197
185
  # only inspect "devDependencies" and "peerDependencies"
198
- syncpack list --dev --peer
186
+ syncpack list --types dev,peer
199
187
  ```
200
188
 
201
189
  </details>
@@ -212,15 +200,9 @@ See [`versionGroups`](#versiongroups) if you have advanced requirements.
212
200
 
213
201
  ```
214
202
  -s, --source [pattern] glob pattern for package.json files to read from
215
- -p, --prod include dependencies
216
- -d, --dev include devDependencies
217
- -P, --peer include peerDependencies
218
- -R, --resolutions include resolutions (yarn)
219
- -o, --overrides include overrides (npm)
220
- -O, --pnpmOverrides include overrides (pnpm)
221
203
  -f, --filter [pattern] only include dependencies whose name matches this regex
222
204
  -c, --config <path> path to a syncpack config file
223
- -w, --workspace include locally developed package versions
205
+ -t, --types <names> only include dependencies matching these types (eg. types=dev,prod,myCustomType)
224
206
  -h, --help display help for command
225
207
  ```
226
208
 
@@ -239,9 +221,9 @@ syncpack list-mismatches --source "apps/*/package.json" --source "core/*/package
239
221
  # uses dependencies regular expression defined by --filter when provided
240
222
  syncpack list-mismatches --filter "typescript|tslint"
241
223
  # only inspect "devDependencies"
242
- syncpack list-mismatches --dev
224
+ syncpack list-mismatches --types dev
243
225
  # only inspect "devDependencies" and "peerDependencies"
244
- syncpack list-mismatches --dev --peer
226
+ syncpack list-mismatches --types dev,peer
245
227
  ```
246
228
 
247
229
  </details>
@@ -258,18 +240,11 @@ See [`semverGroups`](#semvergroups) if you have advanced requirements.
258
240
 
259
241
  ```
260
242
  -s, --source [pattern] glob pattern for package.json files to read from
261
- -r, --semver-range <range> see supported ranges below. defaults to ""
262
243
  -f, --filter [pattern] only include dependencies whose name matches this regex
263
- -p, --prod include dependencies
264
- -d, --dev include devDependencies
265
- -P, --peer include peerDependencies
266
- -R, --resolutions include resolutions (yarn)
267
- -o, --overrides include overrides (npm)
268
- -O, --pnpmOverrides include overrides (pnpm)
269
- -w, --workspace include locally developed package versions
270
- -i, --indent [value] override indentation. defaults to " "
271
- -r, --semver-range <range> see supported ranges below. defaults to ""
272
244
  -c, --config <path> path to a syncpack config file
245
+ -r, --semver-range <range> see supported ranges below. defaults to ""
246
+ -t, --types <names> only include dependencies matching these types (eg. types=dev,prod,myCustomType)
247
+ -i, --indent [value] override indentation. defaults to " "
273
248
  -h, --help display help for command
274
249
  ```
275
250
 
@@ -290,16 +265,16 @@ syncpack set-semver-ranges --filter "typescript|tslint"
290
265
  # use ~ range instead of default ""
291
266
  syncpack set-semver-ranges --semver-range ~
292
267
  # set ~ range in "devDependencies"
293
- syncpack set-semver-ranges --dev --semver-range ~
268
+ syncpack set-semver-ranges --types dev --semver-range ~
294
269
  # set ~ range in "devDependencies" and "peerDependencies"
295
- syncpack set-semver-ranges --dev --peer --semver-range ~
270
+ syncpack set-semver-ranges --types dev,peer --semver-range ~
296
271
  # indent package.json with 4 spaces instead of 2
297
272
  syncpack set-semver-ranges --indent " "
298
273
  ```
299
274
 
300
275
  </details>
301
276
 
302
- ## 🛠 Configuration File
277
+ ## Configuration File
303
278
 
304
279
  Creating a configuration file is optional, syncpack will search up the directory
305
280
  tree in the following places:
@@ -319,15 +294,17 @@ configuration file (if present), you can use the `--config` option.
319
294
 
320
295
  ```json
321
296
  {
322
- "dev": true,
297
+ "dependencyTypes": [
298
+ "dev",
299
+ "overrides",
300
+ "peer",
301
+ "pnpmOverrides",
302
+ "prod",
303
+ "resolutions",
304
+ "workspace"
305
+ ],
323
306
  "filter": ".",
324
307
  "indent": " ",
325
- "overrides": true,
326
- "peer": true,
327
- "pnpmOverrides": true,
328
- "prod": true,
329
- "resolutions": true,
330
- "workspace": true,
331
308
  "semverGroups": [],
332
309
  "semverRange": "",
333
310
  "sortAz": [
@@ -345,42 +322,84 @@ configuration file (if present), you can use the `--config` option.
345
322
  }
346
323
  ```
347
324
 
348
- ### `dev`, `peer`, `prod`, `resolutions`, `overrides`, `pnpmOverrides`, and `workspace`
325
+ ### Configuration Options
349
326
 
350
- Whether to search within `devDependencies`, `peerDependencies`, `dependencies`,
351
- `resolutions` (Yarn), `overrides` (npm), `pnpmOverrides` (pnpm), and the
352
- `version` property of the package.json files of your own packages developed
353
- within your `workspace` respectively.
327
+ #### `--type` / `dependencyTypes`
354
328
 
355
- All of these locations are searched by default but they can be disabled
356
- individually in your config file. If any are set via the command line options
357
- `--dev`, `--peer`, `--prod`, `--resolutions`, `--overrides`, `--pnpmOverrides`,
358
- or `--workspace` then only the options you provide will be searched.
329
+ All of the properties in the table below are searched by default, but can be
330
+ disabled via the `dependencyTypes` property of your config file or the `--types`
331
+ option on the command line.
359
332
 
360
- ### `filter`
333
+ - If `dependencyTypes` is unset or is an empty array, nothing is disabled.
334
+ - If `dependencyTypes` is set, only those listed will be enabled.
335
+ - If `--types` is set, it takes precedence and only its values will be used.
361
336
 
362
- A string which will be passed to `new RegExp()` to match against package names
363
- that should be included.
337
+ In this example, only dependencies found in `dependencies` and `devDependencies`
338
+ will be inspected by syncpack.
364
339
 
365
- > ⚠️ `filter` was originally intended as a convenience to be used from the
366
- > command line to filter the output of `syncpack list`, **it is not recommended
367
- > to add this to your config file to manage your project more generally**.
368
- >
369
- > Instead use [`versionGroups`](#versiongroups) and/or
370
- > [`semverGroups`](#semvergroups).
340
+ ```json
341
+ {
342
+ "dependencyTypes": ["dev", "prod"]
343
+ }
344
+ ```
345
+
346
+ | Value | Property in package.json |
347
+ | --------------- | ------------------------ |
348
+ | `dev` | `.devDependencies` |
349
+ | `overrides` | `.overrides` |
350
+ | `peer` | `.peerDependencies` |
351
+ | `pnpmOverrides` | `.pnpm.overrides` |
352
+ | `prod` | `.dependencies` |
353
+ | `resolutions` | `.resolutions` |
354
+ | `workspace` | `.version` |
355
+
356
+ This list can be extended with your own `customTypes`, so you can find and fix
357
+ versions found in other parts of your package.json files.
358
+
359
+ ##### The `workspace` type
360
+
361
+ This option synchronises the versions of your dependencies with the `version`
362
+ properties of the package.json files developed in your own local
363
+ workspace/project, when they relate to eachother.
364
+
365
+ Take this example, `@your-repo/fetch` is developed in your repo:
366
+
367
+ ```jsonc
368
+ {
369
+ "name": "@your-repo/fetch",
370
+ "version": "1.0.2"
371
+ // ...rest of the file
372
+ }
373
+ ```
371
374
 
372
- ### `indent`
375
+ and another package developed in your repo depends on it:
376
+
377
+ ```jsonc
378
+ {
379
+ "name": "@your-repo/ui",
380
+ // ...other stuff
381
+ "dependencies": {
382
+ "@your-repo/fetch": "0.9.4"
383
+ }
384
+ // ...rest of the file
385
+ }
386
+ ```
387
+
388
+ When `workspace` is enabled, syncpack will fix `@your-repo/ui` so it depends on
389
+ version `1.0.2` of `@your-repo/fetch`.
390
+
391
+ #### `indent`
373
392
 
374
393
  The character(s) to be used to indent your package.json files when writing to
375
394
  disk.
376
395
 
377
- ### `semverRange`
396
+ #### `semverRange`
378
397
 
379
398
  Defaulted to `""` to ensure that exact dependency versions are used instead of
380
399
  loose ranges, but this can be overridden in your config file or via the
381
400
  `--semver-range` command line option.
382
401
 
383
- #### Supported Ranges
402
+ ##### Supported Ranges
384
403
 
385
404
  ```
386
405
  < <1.4.2
@@ -393,27 +412,82 @@ loose ranges, but this can be overridden in your config file or via the
393
412
  * *
394
413
  ```
395
414
 
396
- ### `sortAz`
415
+ #### `sortAz`
397
416
 
398
417
  When using the `format` command, determines which fields within package.json
399
418
  files should be sorted alphabetically. When the value is an Object, its keys are
400
419
  sorted alphabetically. When the value is an Array, its values are sorted
401
420
  alphabetically. There is no equivalent CLI Option for this configuration.
402
421
 
403
- ### `sortFirst`
422
+ #### `sortFirst`
404
423
 
405
424
  When using the `format` command, determines which fields within package.json
406
425
  files should appear at the top, and in what order. There is no equivalent CLI
407
426
  Option for this configuration.
408
427
 
409
- ### `source`
428
+ #### `source`
410
429
 
411
430
  Defaults to `["package.json", "packages/*/package.json"]` to match most Projects
412
431
  using Lerna or Yarn Workspaces, but this can be overridden in your config file
413
432
  or via multiple `--source` command line options. Supports any patterns supported
414
433
  by [glob](https://github.com/isaacs/node-glob).
415
434
 
416
- ### `versionGroups`
435
+ #### `customTypes`
436
+
437
+ Extend syncpack to find and fix versions in your packages which are not
438
+ available by default. Custom types behave like any other dependency, so can be
439
+ included in [versionGroups](#versiongroups) or [semverGroups](#semvergroups)
440
+ etc.
441
+
442
+ The example below adds support for synchronising versions found in:
443
+
444
+ 1. The
445
+ [`engines`](https://docs.npmjs.com/cli/v9/configuring-npm/package-json#engines)
446
+ object.
447
+ 1. The [`packageManager`](https://nodejs.org/api/packages.html#packagemanager)
448
+ string.
449
+
450
+ ```json
451
+ {
452
+ "customTypes": {
453
+ "engines": {
454
+ "path": "engines",
455
+ "strategy": "versionsByName"
456
+ },
457
+ "packageManager": {
458
+ "path": "packageManager",
459
+ "strategy": "name@version"
460
+ }
461
+ }
462
+ }
463
+ ```
464
+
465
+ ##### `customTypes[name]`
466
+
467
+ The key of each custom type is its name, this can be used in the following
468
+ places to toggle when it is enabled:
469
+
470
+ 1. [`--type` / `dependencyTypes`](#--type--dependencytypes).
471
+ 1. [`versionGroup.dependencyTypes`](#versiongroupdependencytypes)
472
+ 1. [`semverGroup.dependencyTypes`](#semvergroupdependencytypes)
473
+
474
+ ##### `customTypes[name].path`
475
+
476
+ Where the version can be found in each package.json file, such as `engines`,
477
+ `packageManager` or `some.nested.property`.
478
+
479
+ ##### `customTypes[name].strategy`
480
+
481
+ A strategy defines how syncpack needs to read and write dependency names and
482
+ versions, there are 3 to choose from:
483
+
484
+ | Name | Example |
485
+ | ---------------- | -------------------------------------- |
486
+ | `name@version` | `pnpm@7.27.0` |
487
+ | `version` | `12.4.2` |
488
+ | `versionsByName` | `{"pnpm":"7.27.0", "semver": "7.3.8"}` |
489
+
490
+ #### `versionGroups`
417
491
 
418
492
  The most common use case for version groups is when some of the packages in your
419
493
  Monorepo are considered alpha (or legacy). Since those packages are much further
@@ -468,7 +542,7 @@ to apply to an entire package:
468
542
 
469
543
  See [`semverGroups`](#semverGroups) for more examples, they work the same way.
470
544
 
471
- #### `versionGroup.dependencies`
545
+ ##### `versionGroup.dependencies`
472
546
 
473
547
  Required. An array of minimatch glob patterns which should match the key of
474
548
  dependencies defined in your package.json files.
@@ -479,7 +553,7 @@ dependencies defined in your package.json files.
479
553
  | `["@aws-sdk/**"]` | Any dependency with the scope `@aws-sdk` |
480
554
  | `["react", "react-dom"]` | Specific dependencies by name |
481
555
 
482
- #### `versionGroup.packages`
556
+ ##### `versionGroup.packages`
483
557
 
484
558
  Required. An array of minimatch glob patterns which should match the `name`
485
559
  property of packages developed within your monorepo.
@@ -490,7 +564,7 @@ property of packages developed within your monorepo.
490
564
  | `["@my-repo/**"]` | Any package with the scope `@my-repo` |
491
565
  | `["my-server", "my-client"]` | Specific packages by name |
492
566
 
493
- #### `versionGroup.dependencyTypes`
567
+ ##### `versionGroup.dependencyTypes`
494
568
 
495
569
  Optional. If set, will result in only the dependency types included in that
496
570
  array being considered a match for this version group.
@@ -511,7 +585,7 @@ used in `dependencies` or `devDependencies`.
511
585
  }
512
586
  ```
513
587
 
514
- #### `versionGroup.isBanned`
588
+ ##### `versionGroup.isBanned`
515
589
 
516
590
  Remove dependencies which you've decided should never be allowed.
517
591
 
@@ -527,7 +601,7 @@ Remove dependencies which you've decided should never be allowed.
527
601
  }
528
602
  ```
529
603
 
530
- #### `versionGroup.isIgnored`
604
+ ##### `versionGroup.isIgnored`
531
605
 
532
606
  Have syncpack ignore these dependencies completely.
533
607
 
@@ -543,7 +617,7 @@ Have syncpack ignore these dependencies completely.
543
617
  }
544
618
  ```
545
619
 
546
- #### `versionGroup.pinVersion`
620
+ ##### `versionGroup.pinVersion`
547
621
 
548
622
  Pin the version of all dependencies in this group to match this specific version
549
623
  you've defined.
@@ -560,13 +634,13 @@ you've defined.
560
634
  }
561
635
  ```
562
636
 
563
- ### `semverGroups`
637
+ #### `semverGroups`
564
638
 
565
639
  Allow some packages to have different semver range rules to the rest of your
566
640
  monorepo. Each dependency can only belong to one semver group, the first rule
567
641
  which matches a given dependency and package will apply.
568
642
 
569
- #### Example use cases
643
+ ##### Example use cases
570
644
 
571
645
  1: Every dependency of `@myrepo/library` should have a semver range of `~`,
572
646
  regardless of what the rest of the monorepo uses:
@@ -648,28 +722,40 @@ and peer dependencies can be broader.
648
722
  }
649
723
  ```
650
724
 
651
- #### `semverGroup.range`
725
+ ##### `semverGroup.range`
652
726
 
653
727
  Which of the [Supported Ranges](#supported-ranges) this group should use.
654
728
 
655
- #### `semverGroup.dependencies`
729
+ ##### `semverGroup.dependencies`
656
730
 
657
731
  Works the same as [`versionGroup.dependencies`](#versiongroupdependencies).
658
732
 
659
- #### `semverGroup.isIgnored`
733
+ ##### `semverGroup.isIgnored`
660
734
 
661
735
  Works the same as [`versionGroup.isIgnored`](#versiongroupisignored).
662
736
 
663
- #### `semverGroup.packages`
737
+ ##### `semverGroup.packages`
664
738
 
665
739
  Works the same as [`versionGroup.packages`](#versiongrouppackages).
666
740
 
667
- #### `semverGroup.dependencyTypes`
741
+ ##### `semverGroup.dependencyTypes`
668
742
 
669
743
  Works the same as
670
744
  [`versionGroup.dependencyTypes`](#versiongroupdependencytypes).
671
745
 
672
- ## 🕵🏾‍♀️ Resolving Packages
746
+ #### `filter`
747
+
748
+ A string which will be passed to `new RegExp()` to match against package names
749
+ that should be included.
750
+
751
+ > ⚠️ `filter` was originally intended as a convenience to be used from the
752
+ > command line to filter the output of `syncpack list`, **it is not recommended
753
+ > to add this to your config file to manage your project more generally**.
754
+ >
755
+ > Instead use [`versionGroups`](#versiongroups) and/or
756
+ > [`semverGroups`](#semvergroups).
757
+
758
+ ## Resolving Packages
673
759
 
674
760
  package.json files are resolved in this order of precendence:
675
761
 
@@ -687,7 +773,7 @@ package.json files are resolved in this order of precendence:
687
773
  > 👋 Always add quotes around your `--source` patterns
688
774
  > [[more info](https://github.com/JamieMason/syncpack/issues/66#issuecomment-1146011769)].
689
775
 
690
- ## 🙋🏿‍♀️ Getting Help
776
+ ## Getting Help
691
777
 
692
778
  Get help with issues by creating a [Bug Report] or discuss ideas by opening a
693
779
  [Feature Request].
@@ -697,7 +783,7 @@ Get help with issues by creating a [Bug Report] or discuss ideas by opening a
697
783
  [feature request]:
698
784
  https://github.com/JamieMason/syncpack/issues/new?template=feature_request.md
699
785
 
700
- ## 👀 Other Projects
786
+ ## Other Projects
701
787
 
702
788
  If you find my Open Source projects useful, please share them ❤️
703
789
 
@@ -1,3 +1,3 @@
1
1
  import type { Disk } from '../lib/disk';
2
- import type { Config } from '../lib/get-context/get-config/config';
3
- export declare function fixMismatchesCli(input: Partial<Config.All>, disk: Disk): void;
2
+ import type { Syncpack } from '../types';
3
+ export declare function fixMismatchesCli(input: Partial<Syncpack.Config.Cli>, disk: Disk): void;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  exports.__esModule = true;
3
3
  exports.fixMismatchesCli = void 0;
4
- var get_context_1 = require("../lib/get-context");
4
+ var get_context_1 = require("../get-context");
5
5
  var write_if_changed_1 = require("../lib/write-if-changed");
6
6
  var fix_mismatches_1 = require("./fix-mismatches");
7
7
  function fixMismatchesCli(input, disk) {
@@ -1,2 +1,2 @@
1
- import type { Context } from '../lib/get-context';
2
- export declare function fixMismatches(ctx: Context): Context;
1
+ import type { Syncpack } from '../types';
2
+ export declare function fixMismatches(ctx: Syncpack.Ctx): Syncpack.Ctx;
@@ -1,4 +1,20 @@
1
1
  "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
2
18
  exports.__esModule = true;
3
19
  exports.fixMismatches = void 0;
4
20
  var expect_more_1 = require("expect-more");
@@ -11,20 +27,31 @@ function fixMismatches(ctx) {
11
27
  // Set the correct version on each instance.
12
28
  invalidGroups.forEach(function (instanceGroup) {
13
29
  var nextVersion = instanceGroup.getExpectedVersion();
30
+ if (nextVersion === '')
31
+ console.trace(instanceGroup);
14
32
  instanceGroup.instances.forEach(function (instance) {
15
33
  return instance.setVersion(nextVersion);
16
34
  });
17
35
  });
18
36
  });
19
- /** Remove eg `{"dependencies": {}, "devDependencies": {}}` */
20
- ctx.packageJsonFiles.forEach(function (packageJsonFile) {
21
- ctx.dependencyTypes.forEach(function (dependencyType) {
22
- var deps = packageJsonFile.contents[dependencyType];
23
- if (deps && Object.values(deps).every(expect_more_1.isUndefined)) {
24
- delete packageJsonFile.contents[dependencyType];
25
- }
26
- });
37
+ ctx.packageJsonFiles.forEach(function (file) {
38
+ removeEmptyObjects(file.contents);
27
39
  });
28
40
  return ctx;
41
+ /** Remove eg { "dependencies": {}, "devDependencies": {} }` */
42
+ function removeEmptyObjects(parent) {
43
+ if ((0, expect_more_1.isObject)(parent)) {
44
+ Object.entries(parent).forEach(function (_a) {
45
+ var _b = __read(_a, 2), key = _b[0], child = _b[1];
46
+ if ((0, expect_more_1.isObject)(child) &&
47
+ ((0, expect_more_1.isEmptyObject)(child) || Object.values(child).every(expect_more_1.isUndefined))) {
48
+ delete parent[key];
49
+ }
50
+ else {
51
+ removeEmptyObjects(child);
52
+ }
53
+ });
54
+ }
55
+ }
29
56
  }
30
57
  exports.fixMismatches = fixMismatches;