syncpack 10.6.1 → 10.7.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.
package/README.md CHANGED
@@ -45,17 +45,20 @@ List all dependencies required by your packages.
45
45
  List dependencies which are required by multiple packages, where the version is not the same across
46
46
  every package.
47
47
 
48
+ ### [prompt](https://jamiemason.github.io/syncpack/prompt)
49
+
50
+ Displays a series of prompts to fix mismatches which syncpack cannot fix automatically.
51
+
48
52
  ### [set-semver-ranges](https://jamiemason.github.io/syncpack/set-semver-ranges)
49
53
 
50
54
  Ensure dependency versions used within `"dependencies"`, `"devDependencies"` etc follow a consistent
51
55
  format.
52
56
 
53
- ## Breaking Changes
57
+ ### [update](https://jamiemason.github.io/syncpack/update)
54
58
 
55
- Version [9.0.0](https://github.com/JamieMason/syncpack/releases/tag/9.0.0) required some breaking
56
- API changes to add support for a new
57
- [`customTypes`](https://jamiemason.github.io/syncpack/config/custom-types) feature, but they are
58
- very simple to make.
59
+ Interactively update packages to the latest versions from the npm registry, wherever they are in
60
+ your monorepo. You can update every dependency, just dev/peer/prod dependencies, just packages which
61
+ match a name filter, and more.
59
62
 
60
63
  ## Badges
61
64
 
@@ -1,2 +1,2 @@
1
1
  import type { VersionEffects } from '../create-program/effects';
2
- export declare const fixMismatchesEffects: VersionEffects;
2
+ export declare const fixMismatchesEffects: VersionEffects<void>;
@@ -37,40 +37,40 @@ const constants_1 = require("../constants");
37
37
  const delete_1 = require("../get-version-groups/lib/delete");
38
38
  const log_group_header_1 = require("../lib/log-group-header");
39
39
  exports.fixMismatchesEffects = {
40
- FilteredOut() {
40
+ onFilteredOut() {
41
41
  return Effect.unit();
42
42
  },
43
- Ignored() {
43
+ onIgnored() {
44
44
  return Effect.unit();
45
45
  },
46
- Valid() {
46
+ onValid() {
47
47
  return Effect.unit();
48
48
  },
49
- Banned: (input) => {
49
+ onBanned(input) {
50
50
  return Effect.sync(() => removeVersions(input));
51
51
  },
52
- HighestSemverMismatch: (input) => {
52
+ onHighestSemverMismatch(input) {
53
53
  return Effect.sync(() => setVersions(input));
54
54
  },
55
- LowestSemverMismatch: (input) => {
55
+ onLowestSemverMismatch(input) {
56
56
  return Effect.sync(() => setVersions(input));
57
57
  },
58
- PinnedMismatch: (input) => {
58
+ onPinnedMismatch(input) {
59
59
  return Effect.sync(() => setVersions(input));
60
60
  },
61
- SameRangeMismatch: (input) => {
61
+ onSameRangeMismatch(input) {
62
62
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logSameRangeMismatch));
63
63
  },
64
- SnappedToMismatch: (input) => {
64
+ onSnappedToMismatch(input) {
65
65
  return Effect.sync(() => setVersions(input));
66
66
  },
67
- UnsupportedMismatch: (input) => {
67
+ onUnsupportedMismatch(input) {
68
68
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logUnsupportedMismatch));
69
69
  },
70
- WorkspaceMismatch: (input) => {
70
+ onWorkspaceMismatch(input) {
71
71
  return Effect.sync(() => setVersions(input));
72
72
  },
73
- TearDown(ctx) {
73
+ onComplete(ctx) {
74
74
  return Effect.sync(() => deleteEmptyObjects(ctx));
75
75
  },
76
76
  };
@@ -1,2 +1,2 @@
1
1
  import type { SemverRangeEffects } from '../create-program/effects';
2
- export declare const lintSemverRangesEffects: SemverRangeEffects;
2
+ export declare const lintSemverRangesEffects: SemverRangeEffects<void>;
@@ -33,25 +33,25 @@ const chalk_1 = __importDefault(require("chalk"));
33
33
  const constants_1 = require("../constants");
34
34
  const log_group_header_1 = require("../lib/log-group-header");
35
35
  exports.lintSemverRangesEffects = {
36
- FilteredOut() {
36
+ onFilteredOut() {
37
37
  return Effect.unit();
38
38
  },
39
- Ignored() {
39
+ onIgnored() {
40
40
  return Effect.unit();
41
41
  },
42
- Valid() {
42
+ onValid() {
43
43
  return Effect.unit();
44
44
  },
45
- SemverRangeMismatch(input) {
45
+ onSemverRangeMismatch(input) {
46
46
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logRangeMismatch));
47
47
  },
48
- UnsupportedVersion(input) {
48
+ onUnsupportedVersion(input) {
49
49
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logUnsupportedVersion));
50
50
  },
51
- WorkspaceSemverRangeMismatch(input) {
51
+ onWorkspaceSemverRangeMismatch(input) {
52
52
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logRangeMismatch));
53
53
  },
54
- TearDown() {
54
+ onComplete() {
55
55
  return Effect.unit();
56
56
  },
57
57
  };
@@ -1,2 +1,2 @@
1
1
  import type { VersionEffects } from '../create-program/effects';
2
- export declare const listEffects: VersionEffects;
2
+ export declare const listEffects: VersionEffects<void>;
@@ -36,40 +36,40 @@ const get_unique_versions_1 = require("../get-version-groups/lib/get-unique-vers
36
36
  const is_supported_1 = require("../guards/is-supported");
37
37
  const log_group_header_1 = require("../lib/log-group-header");
38
38
  exports.listEffects = {
39
- FilteredOut() {
39
+ onFilteredOut() {
40
40
  return Effect.unit();
41
41
  },
42
- Ignored(input) {
42
+ onIgnored(input) {
43
43
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logIgnored));
44
44
  },
45
- Valid(input) {
45
+ onValid(input) {
46
46
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logValid));
47
47
  },
48
- Banned(input) {
48
+ onBanned(input) {
49
49
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logBanned));
50
50
  },
51
- HighestSemverMismatch(input) {
51
+ onHighestSemverMismatch(input) {
52
52
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logFixableMismatch));
53
53
  },
54
- LowestSemverMismatch(input) {
54
+ onLowestSemverMismatch(input) {
55
55
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logFixableMismatch));
56
56
  },
57
- PinnedMismatch(input) {
57
+ onPinnedMismatch(input) {
58
58
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logFixableMismatch));
59
59
  },
60
- SameRangeMismatch(input) {
60
+ onSameRangeMismatch(input) {
61
61
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logUnfixableMismatch));
62
62
  },
63
- SnappedToMismatch(input) {
63
+ onSnappedToMismatch(input) {
64
64
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logFixableMismatch));
65
65
  },
66
- UnsupportedMismatch(input) {
66
+ onUnsupportedMismatch(input) {
67
67
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logUnfixableMismatch));
68
68
  },
69
- WorkspaceMismatch(input) {
69
+ onWorkspaceMismatch(input) {
70
70
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logFixableMismatch));
71
71
  },
72
- TearDown() {
72
+ onComplete() {
73
73
  return Effect.unit();
74
74
  },
75
75
  };
@@ -1,2 +1,2 @@
1
1
  import type { VersionEffects } from '../create-program/effects';
2
- export declare const listMismatchesEffects: VersionEffects;
2
+ export declare const listMismatchesEffects: VersionEffects<void>;
@@ -34,40 +34,40 @@ const os_1 = require("os");
34
34
  const constants_1 = require("../constants");
35
35
  const log_group_header_1 = require("../lib/log-group-header");
36
36
  exports.listMismatchesEffects = {
37
- FilteredOut() {
37
+ onFilteredOut() {
38
38
  return Effect.unit();
39
39
  },
40
- Ignored() {
40
+ onIgnored() {
41
41
  return Effect.unit();
42
42
  },
43
- Valid() {
43
+ onValid() {
44
44
  return Effect.unit();
45
45
  },
46
- Banned(input) {
46
+ onBanned(input) {
47
47
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logBanned));
48
48
  },
49
- HighestSemverMismatch(input) {
49
+ onHighestSemverMismatch(input) {
50
50
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logHighLowSemverMismatch));
51
51
  },
52
- LowestSemverMismatch(input) {
52
+ onLowestSemverMismatch(input) {
53
53
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logHighLowSemverMismatch));
54
54
  },
55
- PinnedMismatch(input) {
55
+ onPinnedMismatch(input) {
56
56
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logPinnedMismatch));
57
57
  },
58
- SameRangeMismatch(input) {
58
+ onSameRangeMismatch(input) {
59
59
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logSameRangeMismatch));
60
60
  },
61
- SnappedToMismatch(input) {
61
+ onSnappedToMismatch(input) {
62
62
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logSnappedToMismatch));
63
63
  },
64
- UnsupportedMismatch(input) {
64
+ onUnsupportedMismatch(input) {
65
65
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logUnsupportedMismatch));
66
66
  },
67
- WorkspaceMismatch(input) {
67
+ onWorkspaceMismatch(input) {
68
68
  return Effect.sync(() => (0, Function_1.pipe)(input, logHeader, logWorkspaceMismatch));
69
69
  },
70
- TearDown() {
70
+ onComplete() {
71
71
  return Effect.unit();
72
72
  },
73
73
  };
@@ -1,2 +1,2 @@
1
1
  import type { VersionEffects } from '../create-program/effects';
2
- export declare const promptEffects: VersionEffects;
2
+ export declare const promptEffects: VersionEffects<void>;
@@ -35,40 +35,40 @@ const tags_1 = require("../env/tags");
35
35
  const get_unique_versions_1 = require("../get-version-groups/lib/get-unique-versions");
36
36
  const log_group_header_1 = require("../lib/log-group-header");
37
37
  exports.promptEffects = {
38
- FilteredOut() {
38
+ onFilteredOut() {
39
39
  return Effect.unit();
40
40
  },
41
- Ignored() {
41
+ onIgnored() {
42
42
  return Effect.unit();
43
43
  },
44
- Valid() {
44
+ onValid() {
45
45
  return Effect.unit();
46
46
  },
47
- Banned() {
47
+ onBanned() {
48
48
  return Effect.unit();
49
49
  },
50
- HighestSemverMismatch() {
50
+ onHighestSemverMismatch() {
51
51
  return Effect.unit();
52
52
  },
53
- LowestSemverMismatch() {
53
+ onLowestSemverMismatch() {
54
54
  return Effect.unit();
55
55
  },
56
- PinnedMismatch() {
56
+ onPinnedMismatch() {
57
57
  return Effect.unit();
58
58
  },
59
- SameRangeMismatch(input) {
59
+ onSameRangeMismatch(input) {
60
60
  return (0, Function_1.pipe)(Effect.sync(() => logHeader(input)), Effect.flatMap(askForNextVersion));
61
61
  },
62
- SnappedToMismatch() {
62
+ onSnappedToMismatch() {
63
63
  return Effect.unit();
64
64
  },
65
- UnsupportedMismatch(input) {
65
+ onUnsupportedMismatch(input) {
66
66
  return (0, Function_1.pipe)(Effect.sync(() => logHeader(input)), Effect.flatMap(askForNextVersion));
67
67
  },
68
- WorkspaceMismatch() {
68
+ onWorkspaceMismatch() {
69
69
  return Effect.unit();
70
70
  },
71
- TearDown() {
71
+ onComplete() {
72
72
  return Effect.unit();
73
73
  },
74
74
  };
@@ -1,2 +1,2 @@
1
1
  import type { SemverRangeEffects } from '../create-program/effects';
2
- export declare const setSemverRangesEffects: SemverRangeEffects;
2
+ export declare const setSemverRangesEffects: SemverRangeEffects<void>;
@@ -31,25 +31,25 @@ const Effect = __importStar(require("@effect/io/Effect"));
31
31
  const chalk_1 = __importDefault(require("chalk"));
32
32
  const constants_1 = require("../constants");
33
33
  exports.setSemverRangesEffects = {
34
- FilteredOut() {
34
+ onFilteredOut() {
35
35
  return Effect.unit();
36
36
  },
37
- Ignored() {
37
+ onIgnored() {
38
38
  return Effect.unit();
39
39
  },
40
- Valid() {
40
+ onValid() {
41
41
  return Effect.unit();
42
42
  },
43
- SemverRangeMismatch(input) {
43
+ onSemverRangeMismatch(input) {
44
44
  return Effect.sync(() => setVersions(input));
45
45
  },
46
- UnsupportedVersion(input) {
46
+ onUnsupportedVersion(input) {
47
47
  return Effect.sync(() => logUnsupportedVersion(input));
48
48
  },
49
- WorkspaceSemverRangeMismatch(input) {
49
+ onWorkspaceSemverRangeMismatch(input) {
50
50
  return Effect.sync(() => setVersions(input));
51
51
  },
52
- TearDown() {
52
+ onComplete() {
53
53
  return Effect.unit();
54
54
  },
55
55
  };
@@ -0,0 +1,11 @@
1
+ import type { VersionEffectInput as Input, VersionEffects } from '../create-program/effects';
2
+ import type { VersionGroupReport } from '../get-version-groups';
3
+ interface InputWithVersions {
4
+ input: Input<VersionGroupReport.Any>;
5
+ versions: {
6
+ all: string[];
7
+ latest: string;
8
+ };
9
+ }
10
+ export declare const updateEffects: VersionEffects<InputWithVersions | void>;
11
+ export {};
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.updateEffects = void 0;
30
+ const Data = __importStar(require("@effect/data/Data"));
31
+ const Function_1 = require("@effect/data/Function");
32
+ const Effect = __importStar(require("@effect/io/Effect"));
33
+ const Schema = __importStar(require("@effect/schema/Schema"));
34
+ const chalk_1 = __importDefault(require("chalk"));
35
+ const https_1 = __importDefault(require("https"));
36
+ const ora_1 = __importDefault(require("ora"));
37
+ const prompts_1 = __importDefault(require("prompts"));
38
+ const unwrap_1 = require("tightrope/result/unwrap");
39
+ const constants_1 = require("../constants");
40
+ const get_highest_version_1 = require("../get-version-groups/lib/get-highest-version");
41
+ const get_unique_versions_1 = require("../get-version-groups/lib/get-unique-versions");
42
+ const log_verbose_1 = require("../lib/log-verbose");
43
+ const set_semver_range_1 = require("../lib/set-semver-range");
44
+ let spinner;
45
+ let fetchCount = 0;
46
+ exports.updateEffects = {
47
+ onFilteredOut() {
48
+ return Effect.unit();
49
+ },
50
+ onIgnored() {
51
+ return Effect.unit();
52
+ },
53
+ onValid(input) {
54
+ return fetchPackageVersions(input);
55
+ },
56
+ onBanned() {
57
+ return Effect.unit();
58
+ },
59
+ onHighestSemverMismatch(input) {
60
+ return fetchPackageVersions(input);
61
+ },
62
+ onLowestSemverMismatch() {
63
+ return Effect.unit();
64
+ },
65
+ onPinnedMismatch() {
66
+ return Effect.unit();
67
+ },
68
+ onSameRangeMismatch(input) {
69
+ return fetchPackageVersions(input);
70
+ },
71
+ onSnappedToMismatch() {
72
+ return Effect.unit();
73
+ },
74
+ onUnsupportedMismatch() {
75
+ return Effect.unit();
76
+ },
77
+ onWorkspaceMismatch() {
78
+ return Effect.unit();
79
+ },
80
+ onComplete(ctx, results) {
81
+ return promptForUpdates(results);
82
+ },
83
+ };
84
+ const safeGetVersion = Schema.parseEither(Schema.struct({
85
+ 'dist-tags': Schema.struct({ latest: Schema.string }),
86
+ 'time': Schema.record(Schema.string, Schema.string),
87
+ }));
88
+ class HttpError extends Data.TaggedClass('HttpError') {
89
+ }
90
+ class JsonParseError extends Data.TaggedClass('JsonParseError') {
91
+ }
92
+ function fetchPackageVersions(input) {
93
+ if (!spinner)
94
+ spinner = (0, ora_1.default)().start();
95
+ fetchCount++;
96
+ spinner.text = chalk_1.default.blue(`Checked updates for ${fetchCount} dependencies`);
97
+ return (0, Function_1.pipe)(fetchUrl(`https://registry.npmjs.org/${input.report.name}`), Effect.flatMap(safeGetVersion), Effect.map((struct) => ({
98
+ input,
99
+ versions: {
100
+ all: Object.keys(struct.time).filter((key) => key !== 'modified' && key !== 'created'),
101
+ latest: struct['dist-tags'].latest,
102
+ },
103
+ })), Effect.catchTags({
104
+ HttpError(err) {
105
+ return Effect.sync(() => {
106
+ (0, log_verbose_1.logVerbose)(`HttpError for "${input.report.name}" ${err}`);
107
+ });
108
+ },
109
+ JsonParseError(err) {
110
+ return Effect.sync(() => {
111
+ (0, log_verbose_1.logVerbose)(`JsonParseError for "${input.report.name}" ${err}`);
112
+ });
113
+ },
114
+ ParseError(err) {
115
+ return Effect.sync(() => {
116
+ (0, log_verbose_1.logVerbose)(`ParseError for "${input.report.name}" ${err}`);
117
+ });
118
+ },
119
+ }));
120
+ }
121
+ function promptForUpdates(results) {
122
+ spinner.stop();
123
+ return (0, Function_1.pipe)(Effect.Do(), Effect.bind('choices', () => Effect.sync(() => results.reduce((arr, result) => {
124
+ if (!result)
125
+ return arr;
126
+ if (!['SameRange', 'Standard'].includes(result.input.group._tag))
127
+ return arr;
128
+ const input = result.input;
129
+ const latestVersion = result.versions.latest;
130
+ const uniqueVersions = (0, get_unique_versions_1.getUniqueVersions)(input.report.instances);
131
+ const highestVersion = (0, unwrap_1.unwrap)((0, get_highest_version_1.getHighestVersion)(uniqueVersions));
132
+ const exactHighestVersion = (0, set_semver_range_1.setSemverRange)('', highestVersion);
133
+ if (exactHighestVersion === latestVersion)
134
+ return arr;
135
+ const semverRange = (0, set_semver_range_1.getSemverRange)(highestVersion);
136
+ const latestWithRange = (0, set_semver_range_1.setSemverRange)(semverRange, latestVersion);
137
+ arr.push({
138
+ result,
139
+ selected: true,
140
+ title: (0, chalk_1.default) `NAME {red OLD} ARROW {green NEW}`
141
+ .replace('NAME', input.report.name)
142
+ .replace('OLD', uniqueVersions.join(chalk_1.default.dim(', ')))
143
+ .replace('ARROW', constants_1.ICON.rightArrow)
144
+ .replace('NEW', latestWithRange),
145
+ });
146
+ return arr;
147
+ }, []))), Effect.bind('chosenUpdates', ({ choices }) => Effect.tryCatchPromise(() => (0, prompts_1.default)([
148
+ {
149
+ name: 'indexes',
150
+ type: 'multiselect',
151
+ message: 'Choose which packages to upgrade',
152
+ instructions: true,
153
+ // @ts-expect-error optionsPerPage *does* exist https://github.com/terkelg/prompts#options-7
154
+ optionsPerPage: 50,
155
+ choices: choices,
156
+ },
157
+ ])
158
+ .then(({ indexes = [] }) => ({ choices, indexes }))
159
+ .then(({ choices, indexes }) => indexes.map((i) => choices[i].result)), () => new Error('Prompt failed'))), Effect.flatMap(({ chosenUpdates }) => Effect.sync(() => {
160
+ chosenUpdates.forEach(({ input, versions }) => {
161
+ input.report.instances.forEach((instance) => {
162
+ const semverRange = (0, set_semver_range_1.getSemverRange)(instance.version);
163
+ const latestWithRange = (0, set_semver_range_1.setSemverRange)(semverRange, versions.latest);
164
+ instance.setVersion(latestWithRange);
165
+ });
166
+ });
167
+ })), Effect.catchAll(() => Effect.unit()));
168
+ }
169
+ // @TODO: add a cache with a short TTL on disk in $TMPDIR
170
+ function fetchUrl(url) {
171
+ return (0, Function_1.pipe)(Effect.async((resume) => {
172
+ https_1.default
173
+ .get(url, (res) => {
174
+ let body = '';
175
+ res.setEncoding('utf8');
176
+ res.on('data', (chunk) => {
177
+ body = `${body}${chunk}`;
178
+ });
179
+ res.on('end', () => {
180
+ resume(Effect.succeed(body));
181
+ });
182
+ })
183
+ .on('error', (err) => {
184
+ resume(Effect.fail(new HttpError({ error: String(err) })));
185
+ });
186
+ }), Effect.flatMap((body) => Effect.tryCatch(() => JSON.parse(body), (err) => new JsonParseError({ error: String(err) }))));
187
+ }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ const Effect = __importStar(require("@effect/io/Effect"));
31
+ const chalk_1 = __importDefault(require("chalk"));
32
+ const commander_1 = require("commander");
33
+ const default_env_1 = require("../env/default-env");
34
+ const show_help_on_error_1 = require("../lib/show-help-on-error");
35
+ const option_1 = require("../option");
36
+ const update_1 = require("./update");
37
+ commander_1.program.description(' Update to the latest versions on the npm registry.');
38
+ commander_1.program.on('--help', () => {
39
+ console.log((0, chalk_1.default) `
40
+ Examples:
41
+ {dim # uses defaults for resolving packages}
42
+ syncpack update
43
+ {dim # uses packages defined by --source when provided}
44
+ syncpack update --source {yellow "apps/*/package.json"}
45
+ {dim # multiple globs can be provided like this}
46
+ syncpack update --source {yellow "apps/*/package.json"} --source {yellow "core/*/package.json"}
47
+ {dim # uses dependencies regular expression defined by --filter when provided}
48
+ syncpack update --filter {yellow "typescript|tslint"}
49
+ {dim # only inspect "devDependencies"}
50
+ syncpack update --types dev
51
+ {dim # only inspect "devDependencies" and "peerDependencies"}
52
+ syncpack update --types dev,peer
53
+
54
+ Resolving Packages:
55
+ 1. If {yellow --source} globs are provided, use those.
56
+ 2. If using Pnpm Workspaces, read {yellow packages} from {yellow pnpm-workspace.yaml} in the root of the project.
57
+ 3. If using Yarn Workspaces, read {yellow workspaces} from {yellow package.json}.
58
+ 4. If using Lerna, read {yellow packages} from {yellow lerna.json}.
59
+ 5. Default to {yellow "package.json"} and {yellow "packages/*/package.json"}.
60
+
61
+ Reference:
62
+ globs {blue.underline https://github.com/isaacs/node-glob#glob-primer}
63
+ lerna.json {blue.underline https://github.com/lerna/lerna#lernajson}
64
+ Yarn Workspaces {blue.underline https://yarnpkg.com/lang/en/docs/workspaces}
65
+ Pnpm Workspaces {blue.underline https://pnpm.js.org/en/workspaces}
66
+ `);
67
+ });
68
+ (0, show_help_on_error_1.showHelpOnError)(commander_1.program);
69
+ commander_1.program
70
+ .option(...option_1.option.source)
71
+ .option(...option_1.option.filter)
72
+ .option(...option_1.option.config)
73
+ .option(...option_1.option.types)
74
+ .parse(process.argv);
75
+ Effect.runPromise((0, update_1.update)({
76
+ configPath: commander_1.program.opts().config,
77
+ filter: commander_1.program.opts().filter,
78
+ source: commander_1.program.opts().source,
79
+ types: commander_1.program.opts().types,
80
+ }, default_env_1.defaultEnv));
@@ -0,0 +1,4 @@
1
+ import * as Effect from '@effect/io/Effect';
2
+ import { type CliConfig } from '../config/types';
3
+ import type { DefaultEnv } from '../env/default-env';
4
+ export declare function update(cli: Partial<CliConfig>, env: DefaultEnv): Effect.Effect<never, never, void | import("../get-context").Ctx>;
@@ -0,0 +1,47 @@
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.update = void 0;
27
+ const Context = __importStar(require("@effect/data/Context"));
28
+ const Function_1 = require("@effect/data/Function");
29
+ const Effect = __importStar(require("@effect/io/Effect"));
30
+ // import { setSemverRangesEffects } from '../bin-set-semver-ranges/effects';
31
+ const types_1 = require("../config/types");
32
+ // import { createSemverRangesProgram } from '../create-program/semver-ranges';
33
+ const versions_1 = require("../create-program/versions");
34
+ const create_env_1 = require("../env/create-env");
35
+ const exit_if_invalid_1 = require("../env/exit-if-invalid");
36
+ const tags_1 = require("../env/tags");
37
+ const write_if_changed_1 = require("../env/write-if-changed");
38
+ const create_error_handlers_1 = require("../error-handlers/create-error-handlers");
39
+ const default_error_handlers_1 = require("../error-handlers/default-error-handlers");
40
+ const get_context_1 = require("../get-context");
41
+ const effects_1 = require("./effects");
42
+ function update(cli, env) {
43
+ return (0, Function_1.pipe)((0, get_context_1.getContext)(), Effect.flatMap((ctx) => (0, versions_1.createVersionsProgram)(ctx, effects_1.updateEffects)),
44
+ // Effect.flatMap((ctx) => createSemverRangesProgram(ctx, setSemverRangesEffects)),
45
+ Effect.flatMap(write_if_changed_1.writeIfChanged), Effect.flatMap(exit_if_invalid_1.exitIfInvalid), Effect.catchTags((0, create_error_handlers_1.createErrorHandlers)(default_error_handlers_1.defaultErrorHandlers)), Effect.withParallelism(10), Effect.provideContext((0, Function_1.pipe)(Context.empty(), Context.add(types_1.CliConfigTag, cli), Context.add(tags_1.EnvTag, (0, create_env_1.createEnv)(env)))));
46
+ }
47
+ exports.update = update;
package/dist/bin.js CHANGED
@@ -28,5 +28,8 @@ commander_1.program
28
28
  })
29
29
  .command('set-semver-ranges', 'set semver ranges to the given format', {
30
30
  executableFile: './bin-set-semver-ranges/index.js',
31
+ })
32
+ .command('update', 'update to the latest versions on the npm registry', {
33
+ executableFile: './bin-update/index.js',
31
34
  })
32
35
  .parse(process.argv);
@@ -3,7 +3,6 @@ import type { Env } from '../env/create-env';
3
3
  import type { Ctx } from '../get-context';
4
4
  import type { AnySemverGroup, SemverGroupReport as SR } from '../get-semver-groups';
5
5
  import type { AnyVersionGroup, VersionGroupReport as VR } from '../get-version-groups';
6
- type R = Effect.Effect<Env | never, never, void>;
7
6
  export interface SemverRangeEffectInput<T> {
8
7
  ctx: Ctx;
9
8
  group: AnySemverGroup;
@@ -16,27 +15,26 @@ export interface VersionEffectInput<T> {
16
15
  index: number;
17
16
  report: T;
18
17
  }
19
- export interface SemverRangeEffects {
20
- FilteredOut: (input: SemverRangeEffectInput<SR.FilteredOut>) => R;
21
- Ignored: (input: SemverRangeEffectInput<SR.Ignored>) => R;
22
- SemverRangeMismatch: (input: SemverRangeEffectInput<SR.SemverRangeMismatch>) => R;
23
- UnsupportedVersion: (input: SemverRangeEffectInput<SR.UnsupportedVersion>) => R;
24
- Valid: (input: SemverRangeEffectInput<SR.Valid>) => R;
25
- WorkspaceSemverRangeMismatch: (input: SemverRangeEffectInput<SR.WorkspaceSemverRangeMismatch>) => R;
26
- TearDown: (ctx: Ctx) => R;
18
+ export interface SemverRangeEffects<A> {
19
+ onFilteredOut: (input: SemverRangeEffectInput<SR.FilteredOut>) => Effect.Effect<Env | never, never, A>;
20
+ onIgnored: (input: SemverRangeEffectInput<SR.Ignored>) => Effect.Effect<Env | never, never, A>;
21
+ onSemverRangeMismatch: (input: SemverRangeEffectInput<SR.SemverRangeMismatch>) => Effect.Effect<Env | never, never, A>;
22
+ onUnsupportedVersion: (input: SemverRangeEffectInput<SR.UnsupportedVersion>) => Effect.Effect<Env | never, never, A>;
23
+ onValid: (input: SemverRangeEffectInput<SR.Valid>) => Effect.Effect<Env | never, never, A>;
24
+ onWorkspaceSemverRangeMismatch: (input: SemverRangeEffectInput<SR.WorkspaceSemverRangeMismatch>) => Effect.Effect<Env | never, never, A>;
25
+ onComplete: (ctx: Ctx, results: A[]) => Effect.Effect<Env | never, never, A>;
27
26
  }
28
- export interface VersionEffects {
29
- Banned: (input: VersionEffectInput<VR.Banned>) => R;
30
- FilteredOut: (input: VersionEffectInput<VR.FilteredOut>) => R;
31
- HighestSemverMismatch: (input: VersionEffectInput<VR.HighestSemverMismatch>) => R;
32
- Ignored: (input: VersionEffectInput<VR.Ignored>) => R;
33
- LowestSemverMismatch: (input: VersionEffectInput<VR.LowestSemverMismatch>) => R;
34
- PinnedMismatch: (input: VersionEffectInput<VR.PinnedMismatch>) => R;
35
- SameRangeMismatch: (input: VersionEffectInput<VR.SameRangeMismatch>) => R;
36
- SnappedToMismatch: (input: VersionEffectInput<VR.SnappedToMismatch>) => R;
37
- UnsupportedMismatch: (input: VersionEffectInput<VR.UnsupportedMismatch>) => R;
38
- Valid: (input: VersionEffectInput<VR.Valid>) => R;
39
- WorkspaceMismatch: (input: VersionEffectInput<VR.WorkspaceMismatch>) => R;
40
- TearDown: (ctx: Ctx) => R;
27
+ export interface VersionEffects<A> {
28
+ onBanned: (input: VersionEffectInput<VR.Banned>) => Effect.Effect<Env | never, never, A>;
29
+ onFilteredOut: (input: VersionEffectInput<VR.FilteredOut>) => Effect.Effect<Env | never, never, A>;
30
+ onHighestSemverMismatch: (input: VersionEffectInput<VR.HighestSemverMismatch>) => Effect.Effect<Env | never, never, A>;
31
+ onIgnored: (input: VersionEffectInput<VR.Ignored>) => Effect.Effect<Env | never, never, A>;
32
+ onLowestSemverMismatch: (input: VersionEffectInput<VR.LowestSemverMismatch>) => Effect.Effect<Env | never, never, A>;
33
+ onPinnedMismatch: (input: VersionEffectInput<VR.PinnedMismatch>) => Effect.Effect<Env | never, never, A>;
34
+ onSameRangeMismatch: (input: VersionEffectInput<VR.SameRangeMismatch>) => Effect.Effect<Env | never, never, A>;
35
+ onSnappedToMismatch: (input: VersionEffectInput<VR.SnappedToMismatch>) => Effect.Effect<Env | never, never, A>;
36
+ onUnsupportedMismatch: (input: VersionEffectInput<VR.UnsupportedMismatch>) => Effect.Effect<Env | never, never, A>;
37
+ onValid: (input: VersionEffectInput<VR.Valid>) => Effect.Effect<Env | never, never, A>;
38
+ onWorkspaceMismatch: (input: VersionEffectInput<VR.WorkspaceMismatch>) => Effect.Effect<Env | never, never, A>;
39
+ onComplete: (ctx: Ctx, results: A[]) => Effect.Effect<Env | never, never, A>;
41
40
  }
42
- export {};
@@ -4,4 +4,4 @@ import type { Env } from '../env/create-env';
4
4
  import type { Ctx } from '../get-context';
5
5
  import type { SemverGroupConfigError } from '../get-semver-groups';
6
6
  import type { SemverRangeEffects } from './effects';
7
- export declare function createSemverRangesProgram(ctx: Ctx, effects: SemverRangeEffects): Effect.Effect<Env, SemverGroupConfigError | DeprecatedTypesError, Ctx>;
7
+ export declare function createSemverRangesProgram<T extends SemverRangeEffects<any>>(ctx: Ctx, effects: T): Effect.Effect<Env, SemverGroupConfigError | DeprecatedTypesError, Ctx>;
@@ -30,14 +30,26 @@ const Effect = __importStar(require("@effect/io/Effect"));
30
30
  const Match = __importStar(require("@effect/match"));
31
31
  const get_semver_groups_1 = require("../get-semver-groups");
32
32
  function createSemverRangesProgram(ctx, effects) {
33
- return (0, Function_1.pipe)((0, get_semver_groups_1.getSemverGroups)(ctx), Effect.flatMap((semverGroups) => Effect.all(semverGroups.map((group) => Effect.all(group.inspect().map((reportEffect, index) => (0, Function_1.pipe)((0, Unify_1.unify)(reportEffect), Effect.flatMap((0, Function_1.pipe)(Match.type(), Match.tagsExhaustive({
34
- FilteredOut: (report) => (0, Function_1.pipe)(effects.FilteredOut({ ctx, group, index, report }), Effect.map(() => report)),
35
- Ignored: (report) => (0, Function_1.pipe)(effects.Ignored({ ctx, group, index, report }), Effect.map(() => report)),
36
- Valid: (report) => (0, Function_1.pipe)(effects.Valid({ ctx, group, index, report }), Effect.map(() => report)),
33
+ return (0, Function_1.pipe)((0, get_semver_groups_1.getSemverGroups)(ctx), Effect.flatMap((semverGroups) => Effect.allPar(semverGroups.flatMap((group) => group.inspect().map((reportEffect, index) => (0, Function_1.pipe)((0, Unify_1.unify)(reportEffect), Effect.flatMap((0, Function_1.pipe)(Match.type(), Match.tagsExhaustive({
34
+ FilteredOut(report) {
35
+ return effects.onFilteredOut({ ctx, group, index, report });
36
+ },
37
+ Ignored(report) {
38
+ return effects.onIgnored({ ctx, group, index, report });
39
+ },
40
+ Valid(report) {
41
+ return effects.onValid({ ctx, group, index, report });
42
+ },
37
43
  }))), Effect.catchTags({
38
- SemverRangeMismatch: (report) => (0, Function_1.pipe)(effects.SemverRangeMismatch({ ctx, group, index, report }), Effect.map(() => report)),
39
- UnsupportedVersion: (report) => (0, Function_1.pipe)(effects.UnsupportedVersion({ ctx, group, index, report }), Effect.map(() => report)),
40
- WorkspaceSemverRangeMismatch: (report) => (0, Function_1.pipe)(effects.WorkspaceSemverRangeMismatch({ ctx, group, index, report }), Effect.map(() => report)),
41
- }))))))), Effect.flatMap(() => effects.TearDown(ctx)), Effect.map(() => ctx));
44
+ SemverRangeMismatch(report) {
45
+ return effects.onSemverRangeMismatch({ ctx, group, index, report });
46
+ },
47
+ UnsupportedVersion(report) {
48
+ return effects.onUnsupportedVersion({ ctx, group, index, report });
49
+ },
50
+ WorkspaceSemverRangeMismatch(report) {
51
+ return effects.onWorkspaceSemverRangeMismatch({ ctx, group, index, report });
52
+ },
53
+ })))))), Effect.flatMap((results) => effects.onComplete(ctx, results)), Effect.map(() => ctx));
42
54
  }
43
55
  exports.createSemverRangesProgram = createSemverRangesProgram;
@@ -4,4 +4,4 @@ import type { Env } from '../env/create-env';
4
4
  import type { Ctx } from '../get-context';
5
5
  import type { VersionGroupConfigError } from '../get-version-groups';
6
6
  import type { VersionEffects } from './effects';
7
- export declare function createVersionsProgram(ctx: Ctx, effects: VersionEffects): Effect.Effect<Env, VersionGroupConfigError | DeprecatedTypesError, Ctx>;
7
+ export declare function createVersionsProgram<T extends VersionEffects<any>>(ctx: Ctx, effects: T): Effect.Effect<Env, VersionGroupConfigError | DeprecatedTypesError, Ctx>;
@@ -30,19 +30,41 @@ const Effect = __importStar(require("@effect/io/Effect"));
30
30
  const Match = __importStar(require("@effect/match"));
31
31
  const get_version_groups_1 = require("../get-version-groups");
32
32
  function createVersionsProgram(ctx, effects) {
33
- return (0, Function_1.pipe)((0, get_version_groups_1.getVersionGroups)(ctx), Effect.flatMap((versionGroups) => Effect.all(versionGroups.map((group) => Effect.all(group.inspect().map((reportEffect, index) => (0, Function_1.pipe)((0, Unify_1.unify)(reportEffect), Effect.flatMap((0, Function_1.pipe)(Match.type(), Match.tagsExhaustive({
34
- FilteredOut: (report) => (0, Function_1.pipe)(effects.FilteredOut({ ctx, group, index, report }), Effect.map(() => report)),
35
- Ignored: (report) => (0, Function_1.pipe)(effects.Ignored({ ctx, group, index, report }), Effect.map(() => report)),
36
- Valid: (report) => (0, Function_1.pipe)(effects.Valid({ ctx, group, index, report }), Effect.map(() => report)),
33
+ return (0, Function_1.pipe)((0, get_version_groups_1.getVersionGroups)(ctx), Effect.flatMap((versionGroups) => Effect.allPar(versionGroups.flatMap((group) => group.inspect().map((reportEffect, index) => (0, Function_1.pipe)((0, Unify_1.unify)(reportEffect), Effect.flatMap((0, Function_1.pipe)(Match.type(), Match.tagsExhaustive({
34
+ FilteredOut(report) {
35
+ return effects.onFilteredOut({ ctx, group, index, report });
36
+ },
37
+ Ignored(report) {
38
+ return effects.onIgnored({ ctx, group, index, report });
39
+ },
40
+ Valid(report) {
41
+ return effects.onValid({ ctx, group, index, report });
42
+ },
37
43
  }))), Effect.catchTags({
38
- Banned: (report) => (0, Function_1.pipe)(effects.Banned({ ctx, group, index, report }), Effect.map(() => report)),
39
- HighestSemverMismatch: (report) => (0, Function_1.pipe)(effects.HighestSemverMismatch({ ctx, group, index, report }), Effect.map(() => report)),
40
- LowestSemverMismatch: (report) => (0, Function_1.pipe)(effects.LowestSemverMismatch({ ctx, group, index, report }), Effect.map(() => report)),
41
- PinnedMismatch: (report) => (0, Function_1.pipe)(effects.PinnedMismatch({ ctx, group, index, report }), Effect.map(() => report)),
42
- SameRangeMismatch: (report) => (0, Function_1.pipe)(effects.SameRangeMismatch({ ctx, group, index, report }), Effect.map(() => report)),
43
- SnappedToMismatch: (report) => (0, Function_1.pipe)(effects.SnappedToMismatch({ ctx, group, index, report }), Effect.map(() => report)),
44
- UnsupportedMismatch: (report) => (0, Function_1.pipe)(effects.UnsupportedMismatch({ ctx, group, index, report }), Effect.map(() => report)),
45
- WorkspaceMismatch: (report) => (0, Function_1.pipe)(effects.WorkspaceMismatch({ ctx, group, index, report }), Effect.map(() => report)),
46
- }))))))), Effect.flatMap(() => effects.TearDown(ctx)), Effect.map(() => ctx));
44
+ Banned(report) {
45
+ return effects.onBanned({ ctx, group, index, report });
46
+ },
47
+ HighestSemverMismatch(report) {
48
+ return effects.onHighestSemverMismatch({ ctx, group, index, report });
49
+ },
50
+ LowestSemverMismatch(report) {
51
+ return effects.onLowestSemverMismatch({ ctx, group, index, report });
52
+ },
53
+ PinnedMismatch(report) {
54
+ return effects.onPinnedMismatch({ ctx, group, index, report });
55
+ },
56
+ SameRangeMismatch(report) {
57
+ return effects.onSameRangeMismatch({ ctx, group, index, report });
58
+ },
59
+ SnappedToMismatch(report) {
60
+ return effects.onSnappedToMismatch({ ctx, group, index, report });
61
+ },
62
+ UnsupportedMismatch(report) {
63
+ return effects.onUnsupportedMismatch({ ctx, group, index, report });
64
+ },
65
+ WorkspaceMismatch(report) {
66
+ return effects.onWorkspaceMismatch({ ctx, group, index, report });
67
+ },
68
+ })))))), Effect.flatMap((results) => effects.onComplete(ctx, results)), Effect.map(() => ctx));
47
69
  }
48
70
  exports.createVersionsProgram = createVersionsProgram;
@@ -1,2 +1,3 @@
1
1
  import type { SemverRange } from '../config/types';
2
+ export declare function getSemverRange(version: string): SemverRange;
2
3
  export declare function setSemverRange(semverRange: SemverRange, version: string): string;
@@ -1,10 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setSemverRange = void 0;
3
+ exports.setSemverRange = exports.getSemverRange = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  const is_loose_semver_1 = require("../guards/is-loose-semver");
6
6
  const is_semver_1 = require("../guards/is-semver");
7
7
  const is_valid_semver_range_1 = require("../guards/is-valid-semver-range");
8
+ function getSemverRange(version) {
9
+ if (version === '*')
10
+ return version;
11
+ const from1stNumber = version.search(/[0-9]/);
12
+ const semverRange = version.slice(0, from1stNumber);
13
+ return (0, is_valid_semver_range_1.isValidSemverRange)(semverRange) ? semverRange : '';
14
+ }
15
+ exports.getSemverRange = getSemverRange;
8
16
  function setSemverRange(semverRange, version) {
9
17
  if (!(0, is_semver_1.isSemver)(version) || !(0, is_valid_semver_range_1.isValidSemverRange)(semverRange))
10
18
  return version;
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": "10.6.1",
4
+ "version": "10.7.2",
5
5
  "author": "Jamie Mason <jamie@foldleft.io> (https://github.com/JamieMason)",
6
6
  "bin": {
7
7
  "syncpack": "dist/bin.js",
@@ -12,7 +12,8 @@
12
12
  "syncpack-list": "dist/bin-list/index.js",
13
13
  "syncpack-list-mismatches": "dist/bin-list-mismatches/index.js",
14
14
  "syncpack-prompt": "dist/bin-prompt/index.js",
15
- "syncpack-set-semver-ranges": "dist/bin-set-semver-ranges/index.js"
15
+ "syncpack-set-semver-ranges": "dist/bin-set-semver-ranges/index.js",
16
+ "syncpack-update": "dist/bin-update/index.js"
16
17
  },
17
18
  "bugs": "https://github.com/JamieMason/syncpack/issues",
18
19
  "contributors": [
@@ -30,42 +31,46 @@
30
31
  "Tom Fletcher (https://github.com/tom-fletcher)"
31
32
  ],
32
33
  "dependencies": {
33
- "@effect/data": "0.12.5",
34
- "@effect/io": "0.26.0",
35
- "@effect/match": "0.24.4",
34
+ "@effect/data": "0.12.9",
35
+ "@effect/io": "0.27.0",
36
+ "@effect/match": "0.24.5",
37
+ "@effect/schema": "0.21.0",
36
38
  "chalk": "4.1.2",
37
39
  "commander": "11.0.0",
38
40
  "cosmiconfig": "8.2.0",
39
41
  "enquirer": "2.3.6",
40
42
  "fs-extra": "11.1.1",
41
43
  "globby": "11.1.0",
42
- "minimatch": "9.0.1",
44
+ "minimatch": "9.0.2",
45
+ "ora": "5.4.1",
46
+ "prompts": "2.4.2",
43
47
  "read-yaml-file": "2.1.0",
44
- "semver": "7.5.2",
48
+ "semver": "7.5.3",
45
49
  "tightrope": "0.1.0",
46
50
  "ts-toolbelt": "9.6.0"
47
51
  },
48
52
  "devDependencies": {
49
- "@tsconfig/node14": "1.0.3",
53
+ "@tsconfig/node18": "18.2.0",
50
54
  "@types/fs-extra": "11.0.1",
51
55
  "@types/jest": "29.5.2",
52
56
  "@types/node": "14.18.36",
57
+ "@types/prompts": "2.4.4",
53
58
  "@types/semver": "7.5.0",
54
- "@typescript-eslint/eslint-plugin": "5.59.11",
55
- "@typescript-eslint/parser": "5.59.11",
56
- "eslint": "8.43.0",
59
+ "@typescript-eslint/eslint-plugin": "5.60.1",
60
+ "@typescript-eslint/parser": "5.60.1",
61
+ "eslint": "8.44.0",
57
62
  "eslint-plugin-import": "2.27.5",
58
- "eslint-plugin-jest": "27.2.1",
63
+ "eslint-plugin-jest": "27.2.2",
59
64
  "expect-more-jest": "5.5.0",
60
65
  "jest": "29.5.0",
61
66
  "prettier": "2.8.8",
62
67
  "rimraf": "5.0.1",
63
- "ts-jest": "29.1.0",
68
+ "ts-jest": "29.1.1",
64
69
  "ts-node": "10.9.1",
65
- "typescript": "5.1.3"
70
+ "typescript": "5.1.6"
66
71
  },
67
72
  "engines": {
68
- "node": ">=14"
73
+ "node": ">=18"
69
74
  },
70
75
  "files": [
71
76
  "dist"