@juit/check-updates 2.0.7 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // updater.ts
31
+ var updater_exports = {};
32
+ __export(updater_exports, {
33
+ Updater: () => Updater
34
+ });
35
+ module.exports = __toCommonJS(updater_exports);
36
+ var import_node_assert = __toESM(require("node:assert"), 1);
37
+ var import_node_events = require("node:events");
38
+ var import_promises = require("node:fs/promises");
39
+ var import_node_path = require("node:path");
40
+ var import_semver = __toESM(require("semver"), 1);
41
+ var import_debug = require("./debug.cjs");
42
+ var import_npmrc = require("./npmrc.cjs");
43
+ var dependencyTypes = [
44
+ "dependencies",
45
+ "devDependencies",
46
+ "peerDependencies",
47
+ "optionalDependencies"
48
+ ];
49
+ var Workspaces = class {
50
+ _versions = {};
51
+ _emitter = new import_node_events.EventEmitter();
52
+ get length() {
53
+ return Object.entries(this._versions).length;
54
+ }
55
+ onUpdate(handler) {
56
+ this._emitter.on("update", handler);
57
+ }
58
+ register(name, version) {
59
+ (0, import_node_assert.default)(!this._versions[name], `Package "${name}" already registered`);
60
+ this._versions[name] = version || "0.0.0";
61
+ }
62
+ update(name, version) {
63
+ (0, import_node_assert.default)(this._versions[name], `Package "${name}" not registered`);
64
+ const oldVersion = this._versions[name] || "0.0.0";
65
+ (0, import_node_assert.default)(import_semver.default.gte(version, oldVersion), `Package "${name}" new version ${version} less than old ${oldVersion}`);
66
+ if (import_semver.default.eq(version, oldVersion))
67
+ return;
68
+ this._versions[name] = version;
69
+ this._emitter.emit("update", name, version);
70
+ }
71
+ has(name) {
72
+ return !!this._versions[name];
73
+ }
74
+ *[Symbol.iterator]() {
75
+ for (const [name, version] of Object.entries(this._versions)) {
76
+ yield [name, version];
77
+ }
78
+ }
79
+ };
80
+ var Updater = class _Updater {
81
+ constructor(_packageFile, _options, _cache, _workspaces = new Workspaces()) {
82
+ this._packageFile = _packageFile;
83
+ this._options = _options;
84
+ this._cache = _cache;
85
+ this._workspaces = _workspaces;
86
+ this._packageFile = (0, import_node_path.resolve)(_packageFile);
87
+ this._debug = (0, import_debug.makeDebug)(_options.debug);
88
+ this._children = [];
89
+ _workspaces.onUpdate((name, version) => {
90
+ if (!this._packageData)
91
+ return;
92
+ for (const type of dependencyTypes) {
93
+ const dependencies = this._packageData[type];
94
+ if (!dependencies)
95
+ continue;
96
+ if (!dependencies[name])
97
+ continue;
98
+ if (dependencies[name] === version)
99
+ continue;
100
+ dependencies[name] = version;
101
+ this._changed = true;
102
+ this._bump();
103
+ }
104
+ });
105
+ }
106
+ _packageData;
107
+ _npmRc;
108
+ _originalVersion;
109
+ _debug;
110
+ _children;
111
+ _changed = false;
112
+ get name() {
113
+ (0, import_node_assert.default)(this._packageData, "Updater not initialized");
114
+ return this._packageData.name;
115
+ }
116
+ get version() {
117
+ (0, import_node_assert.default)(this._packageData, "Updater not initialized");
118
+ return this._packageData.version || "0.0.0";
119
+ }
120
+ set version(version) {
121
+ (0, import_node_assert.default)(this._originalVersion && this._packageData, "Updater not initialized");
122
+ (0, import_node_assert.default)(import_semver.default.lte(this._originalVersion, version), [
123
+ `Unable to set version for "${this.packageFile}" to "${version}"`,
124
+ `as it's less than original version "${this._originalVersion}"`
125
+ ].join(" "));
126
+ if (import_semver.default.eq(this._originalVersion, version))
127
+ return;
128
+ if (this._packageData.version === version)
129
+ return;
130
+ this._changed = true;
131
+ console.log(`Updating ${this._details} version to ${import_debug.Y}${version}${import_debug.X}`);
132
+ this._packageData.version = version;
133
+ if (this.name)
134
+ this._workspaces.update(this.name, version);
135
+ }
136
+ get packageFile() {
137
+ return (0, import_node_path.relative)(process.cwd(), this._packageFile);
138
+ }
139
+ get changed() {
140
+ if (this._changed)
141
+ return true;
142
+ return this._children.reduce((changed, child) => changed || child.changed, false);
143
+ }
144
+ async init() {
145
+ this._debug("Reading package file", this.packageFile);
146
+ const json = await (0, import_promises.readFile)(this._packageFile, "utf8");
147
+ const data = this._packageData = JSON.parse(json);
148
+ (0, import_node_assert.default)(
149
+ data && typeof data === "object" && !Array.isArray(data),
150
+ `File ${this.packageFile} is not a valid "pacakge.json" file`
151
+ );
152
+ const npmrc = await (0, import_npmrc.readNpmRc)(this._packageFile);
153
+ if (data.name)
154
+ this._workspaces.register(data.name, data.version);
155
+ this._originalVersion = data.version || "0.0.0";
156
+ if (this._options.workspaces && data.workspaces) {
157
+ for (const path of data.workspaces) {
158
+ const packageFile = (0, import_node_path.resolve)(this._packageFile, "..", path, "package.json");
159
+ const updater = new _Updater(packageFile, this._options, this._cache, this._workspaces);
160
+ this._children.push(await updater.init());
161
+ }
162
+ }
163
+ this._packageData = data;
164
+ this._npmRc = npmrc;
165
+ return this;
166
+ }
167
+ get _details() {
168
+ let string = `${import_debug.G}${this.packageFile}${import_debug.X}`;
169
+ if (this.name || this.version) {
170
+ string += ` [${import_debug.Y}`;
171
+ if (this.name)
172
+ string += `${this.name}`;
173
+ if (this.name && this.version)
174
+ string += " ";
175
+ if (this.version)
176
+ string += `${this.version}`;
177
+ string += `${import_debug.X}]`;
178
+ }
179
+ return string;
180
+ }
181
+ _bump() {
182
+ (0, import_node_assert.default)(this._originalVersion, "Updater not initialized");
183
+ if (this._options.bump) {
184
+ this.version = import_semver.default.inc(this._originalVersion, this._options.bump) || this._originalVersion;
185
+ }
186
+ }
187
+ /** Update a single dependency, returning the highest matching version */
188
+ async _updateDependency(name, rangeString) {
189
+ (0, import_node_assert.default)(this._npmRc, "Updater not initialized");
190
+ if (this._workspaces.has(name)) {
191
+ this._debug(`Not processing workspace package ${import_debug.Y}${name}${import_debug.X}`);
192
+ return rangeString;
193
+ }
194
+ const match = /^\s*([~^])\s*(\d+(\.\d+(\.\d+)?)?)\s*$/.exec(rangeString);
195
+ if (!match) {
196
+ this._debug(`Not processing range ${import_debug.G}${rangeString}${import_debug.X} for ${import_debug.Y}${name}${import_debug.X}`);
197
+ return rangeString;
198
+ }
199
+ const [, specifier = "", version = ""] = match;
200
+ if (!this._options.strict) {
201
+ const r = rangeString;
202
+ rangeString = `>=${version}`;
203
+ if (specifier === "~")
204
+ rangeString += ` <${import_semver.default.inc(version, "major")}`;
205
+ this._debug(`Extending version for ${import_debug.Y}${name}${import_debug.X} from ${import_debug.G}${r}${import_debug.X} to ${import_debug.G}${rangeString}${import_debug.X}`);
206
+ }
207
+ const range = new import_semver.default.Range(rangeString);
208
+ const versions = await this._cache.getVersions(name, this._npmRc);
209
+ for (const v of versions) {
210
+ if (range.test(v))
211
+ return `${specifier}${v}`;
212
+ }
213
+ return `${specifier}${version}`;
214
+ }
215
+ /** Update a dependencies group, populating the "updated" version field */
216
+ async _updateDependenciesGroup(type) {
217
+ (0, import_node_assert.default)(this._packageData, "Updater not initialized");
218
+ const dependencies = this._packageData[type];
219
+ if (!dependencies)
220
+ return [];
221
+ const promises = Object.entries(dependencies).map(async ([name, declared]) => {
222
+ const updated = await this._updateDependency(name, declared);
223
+ if (!this._options.debug)
224
+ process.stdout.write(".");
225
+ if (updated === declared)
226
+ return;
227
+ dependencies[name] = updated;
228
+ return { name, declared, updated, type };
229
+ });
230
+ return (await Promise.all(promises)).filter((change) => !!change);
231
+ }
232
+ /** Update dependencies and return the version number of this package */
233
+ async update() {
234
+ (0, import_node_assert.default)(this._packageData, "Updater not initialized");
235
+ for (const child of this._children)
236
+ await child.update();
237
+ process.stdout.write(`Processing ${this._details} `);
238
+ if (this._options.debug)
239
+ process.stdout.write("\n");
240
+ const changes = await this._updateDependenciesGroup("dependencies");
241
+ if (changes.length || !this._options.quick) {
242
+ changes.push(...await this._updateDependenciesGroup("devDependencies"));
243
+ changes.push(...await this._updateDependenciesGroup("optionalDependencies"));
244
+ changes.push(...await this._updateDependenciesGroup("peerDependencies"));
245
+ }
246
+ if (this._options.debug)
247
+ process.stdout.write("Updated with");
248
+ if (!changes.length)
249
+ return void console.log(` ${import_debug.R}no changes${import_debug.X}`);
250
+ this._changed = true;
251
+ changes.sort(({ name: a }, { name: b }) => a < b ? -1 : a > b ? 1 : 0);
252
+ console.log(` ${import_debug.R}${changes.length} changes${import_debug.X}`);
253
+ let lname = 0;
254
+ let ldeclared = 0;
255
+ let lupdated = 0;
256
+ for (const { name, declared, updated } of changes) {
257
+ lname = lname > name.length ? lname : name.length;
258
+ ldeclared = ldeclared > declared.length ? ldeclared : declared.length;
259
+ lupdated = lupdated > updated.length ? lupdated : updated.length;
260
+ }
261
+ for (const { name, declared, updated, type } of changes) {
262
+ const kind = type === "devDependencies" ? "dev" : type === "peerDependencies" ? "peer" : type === "optionalDependencies" ? "optional" : "main";
263
+ console.log([
264
+ ` * ${import_debug.Y}${name.padEnd(lname)}${import_debug.X}`,
265
+ ` : ${import_debug.G}${declared.padStart(ldeclared)}${import_debug.X}`,
266
+ ` -> ${import_debug.G}${updated.padEnd(lupdated)} ${import_debug.B}${kind}${import_debug.X}`
267
+ ].join(""));
268
+ }
269
+ this._bump();
270
+ }
271
+ align(version) {
272
+ if (this._workspaces.length < 2) {
273
+ return this._debug(`No workspaces found in ${this._details}`);
274
+ }
275
+ if (!version) {
276
+ let aligned = "0.0.0";
277
+ for (const [, version2] of this._workspaces) {
278
+ if (import_semver.default.gt(version2, aligned))
279
+ aligned = version2;
280
+ }
281
+ version = aligned;
282
+ }
283
+ this.version = version;
284
+ for (const child of this._children)
285
+ child.version = version;
286
+ console.log(`Workspaces versions aligned to ${import_debug.Y}${version}${import_debug.X}`);
287
+ }
288
+ /** Write out the new package file */
289
+ async write() {
290
+ (0, import_node_assert.default)(this._packageData, "Updater not initialized");
291
+ for (const type of dependencyTypes) {
292
+ const dependencies = Object.entries(this._packageData[type] || {});
293
+ if (dependencies.length) {
294
+ this._packageData[type] = dependencies.sort(([nameA], [nameB]) => nameA.localeCompare(nameB)).reduce((deps, [name, version]) => {
295
+ deps[name] = version;
296
+ return deps;
297
+ }, {});
298
+ } else {
299
+ delete this._packageData[type];
300
+ }
301
+ }
302
+ const json = JSON.stringify(this._packageData, null, 2);
303
+ this._debug(`${import_debug.Y}>>>`, this.packageFile, `<<<${import_debug.X}
304
+ ${json}`);
305
+ await (0, import_promises.writeFile)(this.packageFile, json + "\n");
306
+ for (const child of this._children)
307
+ await child.write();
308
+ }
309
+ };
310
+ // Annotate the CommonJS export names for ESM import in node:
311
+ 0 && (module.exports = {
312
+ Updater
313
+ });
314
+ //# sourceMappingURL=updater.cjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/updater.ts"],
4
+ "mappings": "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",
5
+ "names": ["assert", "semver", "version"]
6
+ }
@@ -0,0 +1,50 @@
1
+ import type { ReleaseType } from 'semver';
2
+ import type { VersionsCache } from './versions';
3
+ export type UpdaterOptions = {
4
+ bump: ReleaseType | undefined;
5
+ debug: boolean;
6
+ quick: boolean;
7
+ strict: boolean;
8
+ workspaces: boolean;
9
+ };
10
+ declare class Workspaces {
11
+ private _versions;
12
+ private _emitter;
13
+ get length(): number;
14
+ onUpdate(handler: (name: string, version: string) => void): void;
15
+ register(name: string, version?: string): void;
16
+ update(name: string, version: string): void;
17
+ has(name: string): boolean;
18
+ [Symbol.iterator](): Generator<[name: string, version: string]>;
19
+ }
20
+ export declare class Updater {
21
+ private readonly _packageFile;
22
+ private readonly _options;
23
+ private readonly _cache;
24
+ private readonly _workspaces;
25
+ private _packageData?;
26
+ private _npmRc?;
27
+ private _originalVersion?;
28
+ private _debug;
29
+ private _children;
30
+ private _changed;
31
+ constructor(_packageFile: string, _options: UpdaterOptions, _cache: VersionsCache, _workspaces?: Workspaces);
32
+ get name(): string | undefined;
33
+ get version(): string;
34
+ set version(version: string);
35
+ get packageFile(): string;
36
+ get changed(): boolean;
37
+ init(): Promise<this>;
38
+ private get _details();
39
+ private _bump;
40
+ /** Update a single dependency, returning the highest matching version */
41
+ private _updateDependency;
42
+ /** Update a dependencies group, populating the "updated" version field */
43
+ private _updateDependenciesGroup;
44
+ /** Update dependencies and return the version number of this package */
45
+ update(): Promise<void>;
46
+ align(version?: string): void;
47
+ /** Write out the new package file */
48
+ write(): Promise<void>;
49
+ }
50
+ export {};
@@ -0,0 +1,279 @@
1
+ // updater.ts
2
+ import assert from "node:assert";
3
+ import { EventEmitter } from "node:events";
4
+ import { readFile, writeFile } from "node:fs/promises";
5
+ import { relative, resolve } from "node:path";
6
+ import semver from "semver";
7
+ import { B, G, R, X, Y, makeDebug } from "./debug.mjs";
8
+ import { readNpmRc } from "./npmrc.mjs";
9
+ var dependencyTypes = [
10
+ "dependencies",
11
+ "devDependencies",
12
+ "peerDependencies",
13
+ "optionalDependencies"
14
+ ];
15
+ var Workspaces = class {
16
+ _versions = {};
17
+ _emitter = new EventEmitter();
18
+ get length() {
19
+ return Object.entries(this._versions).length;
20
+ }
21
+ onUpdate(handler) {
22
+ this._emitter.on("update", handler);
23
+ }
24
+ register(name, version) {
25
+ assert(!this._versions[name], `Package "${name}" already registered`);
26
+ this._versions[name] = version || "0.0.0";
27
+ }
28
+ update(name, version) {
29
+ assert(this._versions[name], `Package "${name}" not registered`);
30
+ const oldVersion = this._versions[name] || "0.0.0";
31
+ assert(semver.gte(version, oldVersion), `Package "${name}" new version ${version} less than old ${oldVersion}`);
32
+ if (semver.eq(version, oldVersion))
33
+ return;
34
+ this._versions[name] = version;
35
+ this._emitter.emit("update", name, version);
36
+ }
37
+ has(name) {
38
+ return !!this._versions[name];
39
+ }
40
+ *[Symbol.iterator]() {
41
+ for (const [name, version] of Object.entries(this._versions)) {
42
+ yield [name, version];
43
+ }
44
+ }
45
+ };
46
+ var Updater = class _Updater {
47
+ constructor(_packageFile, _options, _cache, _workspaces = new Workspaces()) {
48
+ this._packageFile = _packageFile;
49
+ this._options = _options;
50
+ this._cache = _cache;
51
+ this._workspaces = _workspaces;
52
+ this._packageFile = resolve(_packageFile);
53
+ this._debug = makeDebug(_options.debug);
54
+ this._children = [];
55
+ _workspaces.onUpdate((name, version) => {
56
+ if (!this._packageData)
57
+ return;
58
+ for (const type of dependencyTypes) {
59
+ const dependencies = this._packageData[type];
60
+ if (!dependencies)
61
+ continue;
62
+ if (!dependencies[name])
63
+ continue;
64
+ if (dependencies[name] === version)
65
+ continue;
66
+ dependencies[name] = version;
67
+ this._changed = true;
68
+ this._bump();
69
+ }
70
+ });
71
+ }
72
+ _packageData;
73
+ _npmRc;
74
+ _originalVersion;
75
+ _debug;
76
+ _children;
77
+ _changed = false;
78
+ get name() {
79
+ assert(this._packageData, "Updater not initialized");
80
+ return this._packageData.name;
81
+ }
82
+ get version() {
83
+ assert(this._packageData, "Updater not initialized");
84
+ return this._packageData.version || "0.0.0";
85
+ }
86
+ set version(version) {
87
+ assert(this._originalVersion && this._packageData, "Updater not initialized");
88
+ assert(semver.lte(this._originalVersion, version), [
89
+ `Unable to set version for "${this.packageFile}" to "${version}"`,
90
+ `as it's less than original version "${this._originalVersion}"`
91
+ ].join(" "));
92
+ if (semver.eq(this._originalVersion, version))
93
+ return;
94
+ if (this._packageData.version === version)
95
+ return;
96
+ this._changed = true;
97
+ console.log(`Updating ${this._details} version to ${Y}${version}${X}`);
98
+ this._packageData.version = version;
99
+ if (this.name)
100
+ this._workspaces.update(this.name, version);
101
+ }
102
+ get packageFile() {
103
+ return relative(process.cwd(), this._packageFile);
104
+ }
105
+ get changed() {
106
+ if (this._changed)
107
+ return true;
108
+ return this._children.reduce((changed, child) => changed || child.changed, false);
109
+ }
110
+ async init() {
111
+ this._debug("Reading package file", this.packageFile);
112
+ const json = await readFile(this._packageFile, "utf8");
113
+ const data = this._packageData = JSON.parse(json);
114
+ assert(
115
+ data && typeof data === "object" && !Array.isArray(data),
116
+ `File ${this.packageFile} is not a valid "pacakge.json" file`
117
+ );
118
+ const npmrc = await readNpmRc(this._packageFile);
119
+ if (data.name)
120
+ this._workspaces.register(data.name, data.version);
121
+ this._originalVersion = data.version || "0.0.0";
122
+ if (this._options.workspaces && data.workspaces) {
123
+ for (const path of data.workspaces) {
124
+ const packageFile = resolve(this._packageFile, "..", path, "package.json");
125
+ const updater = new _Updater(packageFile, this._options, this._cache, this._workspaces);
126
+ this._children.push(await updater.init());
127
+ }
128
+ }
129
+ this._packageData = data;
130
+ this._npmRc = npmrc;
131
+ return this;
132
+ }
133
+ get _details() {
134
+ let string = `${G}${this.packageFile}${X}`;
135
+ if (this.name || this.version) {
136
+ string += ` [${Y}`;
137
+ if (this.name)
138
+ string += `${this.name}`;
139
+ if (this.name && this.version)
140
+ string += " ";
141
+ if (this.version)
142
+ string += `${this.version}`;
143
+ string += `${X}]`;
144
+ }
145
+ return string;
146
+ }
147
+ _bump() {
148
+ assert(this._originalVersion, "Updater not initialized");
149
+ if (this._options.bump) {
150
+ this.version = semver.inc(this._originalVersion, this._options.bump) || this._originalVersion;
151
+ }
152
+ }
153
+ /** Update a single dependency, returning the highest matching version */
154
+ async _updateDependency(name, rangeString) {
155
+ assert(this._npmRc, "Updater not initialized");
156
+ if (this._workspaces.has(name)) {
157
+ this._debug(`Not processing workspace package ${Y}${name}${X}`);
158
+ return rangeString;
159
+ }
160
+ const match = /^\s*([~^])\s*(\d+(\.\d+(\.\d+)?)?)\s*$/.exec(rangeString);
161
+ if (!match) {
162
+ this._debug(`Not processing range ${G}${rangeString}${X} for ${Y}${name}${X}`);
163
+ return rangeString;
164
+ }
165
+ const [, specifier = "", version = ""] = match;
166
+ if (!this._options.strict) {
167
+ const r = rangeString;
168
+ rangeString = `>=${version}`;
169
+ if (specifier === "~")
170
+ rangeString += ` <${semver.inc(version, "major")}`;
171
+ this._debug(`Extending version for ${Y}${name}${X} from ${G}${r}${X} to ${G}${rangeString}${X}`);
172
+ }
173
+ const range = new semver.Range(rangeString);
174
+ const versions = await this._cache.getVersions(name, this._npmRc);
175
+ for (const v of versions) {
176
+ if (range.test(v))
177
+ return `${specifier}${v}`;
178
+ }
179
+ return `${specifier}${version}`;
180
+ }
181
+ /** Update a dependencies group, populating the "updated" version field */
182
+ async _updateDependenciesGroup(type) {
183
+ assert(this._packageData, "Updater not initialized");
184
+ const dependencies = this._packageData[type];
185
+ if (!dependencies)
186
+ return [];
187
+ const promises = Object.entries(dependencies).map(async ([name, declared]) => {
188
+ const updated = await this._updateDependency(name, declared);
189
+ if (!this._options.debug)
190
+ process.stdout.write(".");
191
+ if (updated === declared)
192
+ return;
193
+ dependencies[name] = updated;
194
+ return { name, declared, updated, type };
195
+ });
196
+ return (await Promise.all(promises)).filter((change) => !!change);
197
+ }
198
+ /** Update dependencies and return the version number of this package */
199
+ async update() {
200
+ assert(this._packageData, "Updater not initialized");
201
+ for (const child of this._children)
202
+ await child.update();
203
+ process.stdout.write(`Processing ${this._details} `);
204
+ if (this._options.debug)
205
+ process.stdout.write("\n");
206
+ const changes = await this._updateDependenciesGroup("dependencies");
207
+ if (changes.length || !this._options.quick) {
208
+ changes.push(...await this._updateDependenciesGroup("devDependencies"));
209
+ changes.push(...await this._updateDependenciesGroup("optionalDependencies"));
210
+ changes.push(...await this._updateDependenciesGroup("peerDependencies"));
211
+ }
212
+ if (this._options.debug)
213
+ process.stdout.write("Updated with");
214
+ if (!changes.length)
215
+ return void console.log(` ${R}no changes${X}`);
216
+ this._changed = true;
217
+ changes.sort(({ name: a }, { name: b }) => a < b ? -1 : a > b ? 1 : 0);
218
+ console.log(` ${R}${changes.length} changes${X}`);
219
+ let lname = 0;
220
+ let ldeclared = 0;
221
+ let lupdated = 0;
222
+ for (const { name, declared, updated } of changes) {
223
+ lname = lname > name.length ? lname : name.length;
224
+ ldeclared = ldeclared > declared.length ? ldeclared : declared.length;
225
+ lupdated = lupdated > updated.length ? lupdated : updated.length;
226
+ }
227
+ for (const { name, declared, updated, type } of changes) {
228
+ const kind = type === "devDependencies" ? "dev" : type === "peerDependencies" ? "peer" : type === "optionalDependencies" ? "optional" : "main";
229
+ console.log([
230
+ ` * ${Y}${name.padEnd(lname)}${X}`,
231
+ ` : ${G}${declared.padStart(ldeclared)}${X}`,
232
+ ` -> ${G}${updated.padEnd(lupdated)} ${B}${kind}${X}`
233
+ ].join(""));
234
+ }
235
+ this._bump();
236
+ }
237
+ align(version) {
238
+ if (this._workspaces.length < 2) {
239
+ return this._debug(`No workspaces found in ${this._details}`);
240
+ }
241
+ if (!version) {
242
+ let aligned = "0.0.0";
243
+ for (const [, version2] of this._workspaces) {
244
+ if (semver.gt(version2, aligned))
245
+ aligned = version2;
246
+ }
247
+ version = aligned;
248
+ }
249
+ this.version = version;
250
+ for (const child of this._children)
251
+ child.version = version;
252
+ console.log(`Workspaces versions aligned to ${Y}${version}${X}`);
253
+ }
254
+ /** Write out the new package file */
255
+ async write() {
256
+ assert(this._packageData, "Updater not initialized");
257
+ for (const type of dependencyTypes) {
258
+ const dependencies = Object.entries(this._packageData[type] || {});
259
+ if (dependencies.length) {
260
+ this._packageData[type] = dependencies.sort(([nameA], [nameB]) => nameA.localeCompare(nameB)).reduce((deps, [name, version]) => {
261
+ deps[name] = version;
262
+ return deps;
263
+ }, {});
264
+ } else {
265
+ delete this._packageData[type];
266
+ }
267
+ }
268
+ const json = JSON.stringify(this._packageData, null, 2);
269
+ this._debug(`${Y}>>>`, this.packageFile, `<<<${X}
270
+ ${json}`);
271
+ await writeFile(this.packageFile, json + "\n");
272
+ for (const child of this._children)
273
+ await child.write();
274
+ }
275
+ };
276
+ export {
277
+ Updater
278
+ };
279
+ //# sourceMappingURL=updater.mjs.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/updater.ts"],
4
+ "mappings": "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",
5
+ "names": ["version"]
6
+ }