@imfelixyeung/git-swarm 0.1.1 → 0.1.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 +1 -0
- package/dist/cli.js +1333 -181
- package/package.json +34 -52
package/dist/cli.js
CHANGED
|
@@ -2456,6 +2456,76 @@ var require_picomatch2 = __commonJS(function(exports, module) {
|
|
|
2456
2456
|
module.exports = picomatch;
|
|
2457
2457
|
});
|
|
2458
2458
|
|
|
2459
|
+
// node_modules/picocolors/picocolors.js
|
|
2460
|
+
var require_picocolors = __commonJS(function(exports, module) {
|
|
2461
|
+
var p = process || {};
|
|
2462
|
+
var argv = p.argv || [];
|
|
2463
|
+
var env = p.env || {};
|
|
2464
|
+
var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
|
|
2465
|
+
var formatter = (open, close, replace = open) => (input) => {
|
|
2466
|
+
let string = "" + input, index = string.indexOf(close, open.length);
|
|
2467
|
+
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
2468
|
+
};
|
|
2469
|
+
var replaceClose = (string, close, replace, index) => {
|
|
2470
|
+
let result = "", cursor = 0;
|
|
2471
|
+
do {
|
|
2472
|
+
result += string.substring(cursor, index) + replace;
|
|
2473
|
+
cursor = index + close.length;
|
|
2474
|
+
index = string.indexOf(close, cursor);
|
|
2475
|
+
} while (~index);
|
|
2476
|
+
return result + string.substring(cursor);
|
|
2477
|
+
};
|
|
2478
|
+
var createColors = (enabled = isColorSupported) => {
|
|
2479
|
+
let f = enabled ? formatter : () => String;
|
|
2480
|
+
return {
|
|
2481
|
+
isColorSupported: enabled,
|
|
2482
|
+
reset: f("\x1B[0m", "\x1B[0m"),
|
|
2483
|
+
bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
|
|
2484
|
+
dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
|
|
2485
|
+
italic: f("\x1B[3m", "\x1B[23m"),
|
|
2486
|
+
underline: f("\x1B[4m", "\x1B[24m"),
|
|
2487
|
+
inverse: f("\x1B[7m", "\x1B[27m"),
|
|
2488
|
+
hidden: f("\x1B[8m", "\x1B[28m"),
|
|
2489
|
+
strikethrough: f("\x1B[9m", "\x1B[29m"),
|
|
2490
|
+
black: f("\x1B[30m", "\x1B[39m"),
|
|
2491
|
+
red: f("\x1B[31m", "\x1B[39m"),
|
|
2492
|
+
green: f("\x1B[32m", "\x1B[39m"),
|
|
2493
|
+
yellow: f("\x1B[33m", "\x1B[39m"),
|
|
2494
|
+
blue: f("\x1B[34m", "\x1B[39m"),
|
|
2495
|
+
magenta: f("\x1B[35m", "\x1B[39m"),
|
|
2496
|
+
cyan: f("\x1B[36m", "\x1B[39m"),
|
|
2497
|
+
white: f("\x1B[37m", "\x1B[39m"),
|
|
2498
|
+
gray: f("\x1B[90m", "\x1B[39m"),
|
|
2499
|
+
bgBlack: f("\x1B[40m", "\x1B[49m"),
|
|
2500
|
+
bgRed: f("\x1B[41m", "\x1B[49m"),
|
|
2501
|
+
bgGreen: f("\x1B[42m", "\x1B[49m"),
|
|
2502
|
+
bgYellow: f("\x1B[43m", "\x1B[49m"),
|
|
2503
|
+
bgBlue: f("\x1B[44m", "\x1B[49m"),
|
|
2504
|
+
bgMagenta: f("\x1B[45m", "\x1B[49m"),
|
|
2505
|
+
bgCyan: f("\x1B[46m", "\x1B[49m"),
|
|
2506
|
+
bgWhite: f("\x1B[47m", "\x1B[49m"),
|
|
2507
|
+
blackBright: f("\x1B[90m", "\x1B[39m"),
|
|
2508
|
+
redBright: f("\x1B[91m", "\x1B[39m"),
|
|
2509
|
+
greenBright: f("\x1B[92m", "\x1B[39m"),
|
|
2510
|
+
yellowBright: f("\x1B[93m", "\x1B[39m"),
|
|
2511
|
+
blueBright: f("\x1B[94m", "\x1B[39m"),
|
|
2512
|
+
magentaBright: f("\x1B[95m", "\x1B[39m"),
|
|
2513
|
+
cyanBright: f("\x1B[96m", "\x1B[39m"),
|
|
2514
|
+
whiteBright: f("\x1B[97m", "\x1B[39m"),
|
|
2515
|
+
bgBlackBright: f("\x1B[100m", "\x1B[49m"),
|
|
2516
|
+
bgRedBright: f("\x1B[101m", "\x1B[49m"),
|
|
2517
|
+
bgGreenBright: f("\x1B[102m", "\x1B[49m"),
|
|
2518
|
+
bgYellowBright: f("\x1B[103m", "\x1B[49m"),
|
|
2519
|
+
bgBlueBright: f("\x1B[104m", "\x1B[49m"),
|
|
2520
|
+
bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
|
|
2521
|
+
bgCyanBright: f("\x1B[106m", "\x1B[49m"),
|
|
2522
|
+
bgWhiteBright: f("\x1B[107m", "\x1B[49m")
|
|
2523
|
+
};
|
|
2524
|
+
};
|
|
2525
|
+
module.exports = createColors();
|
|
2526
|
+
module.exports.createColors = createColors;
|
|
2527
|
+
});
|
|
2528
|
+
|
|
2459
2529
|
// node_modules/cli-table3/src/debug.js
|
|
2460
2530
|
var require_debug = __commonJS(function(exports, module) {
|
|
2461
2531
|
var messages = [];
|
|
@@ -4139,76 +4209,6 @@ var require_table = __commonJS(function(exports, module) {
|
|
|
4139
4209
|
module.exports = Table;
|
|
4140
4210
|
});
|
|
4141
4211
|
|
|
4142
|
-
// node_modules/picocolors/picocolors.js
|
|
4143
|
-
var require_picocolors = __commonJS(function(exports, module) {
|
|
4144
|
-
var p = process || {};
|
|
4145
|
-
var argv = p.argv || [];
|
|
4146
|
-
var env = p.env || {};
|
|
4147
|
-
var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
|
|
4148
|
-
var formatter = (open, close, replace = open) => (input) => {
|
|
4149
|
-
let string = "" + input, index = string.indexOf(close, open.length);
|
|
4150
|
-
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
4151
|
-
};
|
|
4152
|
-
var replaceClose = (string, close, replace, index) => {
|
|
4153
|
-
let result = "", cursor = 0;
|
|
4154
|
-
do {
|
|
4155
|
-
result += string.substring(cursor, index) + replace;
|
|
4156
|
-
cursor = index + close.length;
|
|
4157
|
-
index = string.indexOf(close, cursor);
|
|
4158
|
-
} while (~index);
|
|
4159
|
-
return result + string.substring(cursor);
|
|
4160
|
-
};
|
|
4161
|
-
var createColors = (enabled = isColorSupported) => {
|
|
4162
|
-
let f = enabled ? formatter : () => String;
|
|
4163
|
-
return {
|
|
4164
|
-
isColorSupported: enabled,
|
|
4165
|
-
reset: f("\x1B[0m", "\x1B[0m"),
|
|
4166
|
-
bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
|
|
4167
|
-
dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
|
|
4168
|
-
italic: f("\x1B[3m", "\x1B[23m"),
|
|
4169
|
-
underline: f("\x1B[4m", "\x1B[24m"),
|
|
4170
|
-
inverse: f("\x1B[7m", "\x1B[27m"),
|
|
4171
|
-
hidden: f("\x1B[8m", "\x1B[28m"),
|
|
4172
|
-
strikethrough: f("\x1B[9m", "\x1B[29m"),
|
|
4173
|
-
black: f("\x1B[30m", "\x1B[39m"),
|
|
4174
|
-
red: f("\x1B[31m", "\x1B[39m"),
|
|
4175
|
-
green: f("\x1B[32m", "\x1B[39m"),
|
|
4176
|
-
yellow: f("\x1B[33m", "\x1B[39m"),
|
|
4177
|
-
blue: f("\x1B[34m", "\x1B[39m"),
|
|
4178
|
-
magenta: f("\x1B[35m", "\x1B[39m"),
|
|
4179
|
-
cyan: f("\x1B[36m", "\x1B[39m"),
|
|
4180
|
-
white: f("\x1B[37m", "\x1B[39m"),
|
|
4181
|
-
gray: f("\x1B[90m", "\x1B[39m"),
|
|
4182
|
-
bgBlack: f("\x1B[40m", "\x1B[49m"),
|
|
4183
|
-
bgRed: f("\x1B[41m", "\x1B[49m"),
|
|
4184
|
-
bgGreen: f("\x1B[42m", "\x1B[49m"),
|
|
4185
|
-
bgYellow: f("\x1B[43m", "\x1B[49m"),
|
|
4186
|
-
bgBlue: f("\x1B[44m", "\x1B[49m"),
|
|
4187
|
-
bgMagenta: f("\x1B[45m", "\x1B[49m"),
|
|
4188
|
-
bgCyan: f("\x1B[46m", "\x1B[49m"),
|
|
4189
|
-
bgWhite: f("\x1B[47m", "\x1B[49m"),
|
|
4190
|
-
blackBright: f("\x1B[90m", "\x1B[39m"),
|
|
4191
|
-
redBright: f("\x1B[91m", "\x1B[39m"),
|
|
4192
|
-
greenBright: f("\x1B[92m", "\x1B[39m"),
|
|
4193
|
-
yellowBright: f("\x1B[93m", "\x1B[39m"),
|
|
4194
|
-
blueBright: f("\x1B[94m", "\x1B[39m"),
|
|
4195
|
-
magentaBright: f("\x1B[95m", "\x1B[39m"),
|
|
4196
|
-
cyanBright: f("\x1B[96m", "\x1B[39m"),
|
|
4197
|
-
whiteBright: f("\x1B[97m", "\x1B[39m"),
|
|
4198
|
-
bgBlackBright: f("\x1B[100m", "\x1B[49m"),
|
|
4199
|
-
bgRedBright: f("\x1B[101m", "\x1B[49m"),
|
|
4200
|
-
bgGreenBright: f("\x1B[102m", "\x1B[49m"),
|
|
4201
|
-
bgYellowBright: f("\x1B[103m", "\x1B[49m"),
|
|
4202
|
-
bgBlueBright: f("\x1B[104m", "\x1B[49m"),
|
|
4203
|
-
bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
|
|
4204
|
-
bgCyanBright: f("\x1B[106m", "\x1B[49m"),
|
|
4205
|
-
bgWhiteBright: f("\x1B[107m", "\x1B[49m")
|
|
4206
|
-
};
|
|
4207
|
-
};
|
|
4208
|
-
module.exports = createColors();
|
|
4209
|
-
module.exports.createColors = createColors;
|
|
4210
|
-
});
|
|
4211
|
-
|
|
4212
4212
|
// node_modules/commander/lib/error.js
|
|
4213
4213
|
class CommanderError extends Error {
|
|
4214
4214
|
constructor(exitCode, code, message) {
|
|
@@ -6256,7 +6256,7 @@ var program = new Command;
|
|
|
6256
6256
|
var package_default = {
|
|
6257
6257
|
name: "@imfelixyeung/git-swarm",
|
|
6258
6258
|
description: "Manage multiple Git repositories with ease.",
|
|
6259
|
-
version: "0.1.
|
|
6259
|
+
version: "0.1.2",
|
|
6260
6260
|
repository: {
|
|
6261
6261
|
type: "git",
|
|
6262
6262
|
url: "https://github.com/imfelixyeung/git-swarm"
|
|
@@ -6273,7 +6273,8 @@ var package_default = {
|
|
|
6273
6273
|
scripts: {
|
|
6274
6274
|
build: "bun build ./src/cli.ts --target=bun --outfile=dist/cli.js",
|
|
6275
6275
|
dev: "bun run build --watch",
|
|
6276
|
-
prepack: "bun run build",
|
|
6276
|
+
prepack: "bun run build && jq 'del(.dependencies, .devDependencies, .peerDependencies)' package.json > package.json.tmp && mv package.json.tmp package.json",
|
|
6277
|
+
postpack: "git checkout package.json",
|
|
6277
6278
|
typecheck: "tsc --noEmit",
|
|
6278
6279
|
biome: "biome check",
|
|
6279
6280
|
ci: "biome ci",
|
|
@@ -6287,7 +6288,8 @@ var package_default = {
|
|
|
6287
6288
|
"@biomejs/biome": "2.5.12",
|
|
6288
6289
|
"@changesets/changelog-github": "^1.0.1",
|
|
6289
6290
|
"@changesets/cli": "^3.0.2",
|
|
6290
|
-
"@types/bun": "latest"
|
|
6291
|
+
"@types/bun": "latest",
|
|
6292
|
+
prettier: "3.9.6"
|
|
6291
6293
|
},
|
|
6292
6294
|
publishConfig: {
|
|
6293
6295
|
access: "public",
|
|
@@ -6299,15 +6301,20 @@ var package_default = {
|
|
|
6299
6301
|
dependencies: {
|
|
6300
6302
|
"cli-table3": "^0.6.5",
|
|
6301
6303
|
commander: "^15.0.0",
|
|
6304
|
+
"date-fns": "^4.4.0",
|
|
6302
6305
|
dedent: "^1.7.2",
|
|
6303
6306
|
"p-limit": "^7.3.2",
|
|
6304
6307
|
picocolors: "^1.1.1",
|
|
6308
|
+
"pluralize-esm": "^9.0.5",
|
|
6305
6309
|
"simple-git": "^3.36.0",
|
|
6306
6310
|
tinyglobby: "^0.2.17",
|
|
6307
6311
|
zod: "^4.5.4"
|
|
6308
6312
|
}
|
|
6309
6313
|
};
|
|
6310
6314
|
|
|
6315
|
+
// src/git/worker.ts
|
|
6316
|
+
import { relative as relative2 } from "path";
|
|
6317
|
+
|
|
6311
6318
|
// node_modules/yocto-queue/index.js
|
|
6312
6319
|
class Node {
|
|
6313
6320
|
value;
|
|
@@ -6464,9 +6471,6 @@ function validateConcurrency(concurrency) {
|
|
|
6464
6471
|
}
|
|
6465
6472
|
}
|
|
6466
6473
|
|
|
6467
|
-
// src/git/discover.ts
|
|
6468
|
-
import { dirname as dirname2, relative as relative2 } from "path";
|
|
6469
|
-
|
|
6470
6474
|
// node_modules/simple-git/dist/esm/index.js
|
|
6471
6475
|
var import_file_exists = __toESM(require_dist(), 1);
|
|
6472
6476
|
|
|
@@ -10887,6 +10891,10 @@ function gitInstanceFactory(baseDir, options) {
|
|
|
10887
10891
|
init_git_response_error();
|
|
10888
10892
|
var esm_default = gitInstanceFactory;
|
|
10889
10893
|
|
|
10894
|
+
// src/git/discover.ts
|
|
10895
|
+
import { stat as stat2 } from "fs/promises";
|
|
10896
|
+
import { dirname as dirname2, join, resolve as resolve3 } from "path";
|
|
10897
|
+
|
|
10890
10898
|
// node_modules/tinyglobby/dist/index.mjs
|
|
10891
10899
|
import { readdir, readdirSync, realpath, realpathSync, stat, statSync } from "fs";
|
|
10892
10900
|
import { isAbsolute, posix, resolve as resolve2 } from "path";
|
|
@@ -16664,6 +16672,14 @@ function object(shape, params) {
|
|
|
16664
16672
|
};
|
|
16665
16673
|
return new ZodObject(def);
|
|
16666
16674
|
}
|
|
16675
|
+
function strictObject(shape, params) {
|
|
16676
|
+
return new ZodObject({
|
|
16677
|
+
type: "object",
|
|
16678
|
+
shape,
|
|
16679
|
+
catchall: never2(),
|
|
16680
|
+
...normalizeParams(params)
|
|
16681
|
+
});
|
|
16682
|
+
}
|
|
16667
16683
|
var ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => {
|
|
16668
16684
|
$ZodUnion.init(inst, def);
|
|
16669
16685
|
ZodType.init(inst, def);
|
|
@@ -16964,6 +16980,320 @@ var config2 = {
|
|
|
16964
16980
|
getOption
|
|
16965
16981
|
};
|
|
16966
16982
|
|
|
16983
|
+
// src/utils/colour.ts
|
|
16984
|
+
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
16985
|
+
var c3 = import_picocolors.default;
|
|
16986
|
+
|
|
16987
|
+
// src/git/discover.ts
|
|
16988
|
+
var failConfigRepoPath = (path, reason) => {
|
|
16989
|
+
console.error(`${c3.red("\u2717")} Config repository path ${reason}: "${path}"`);
|
|
16990
|
+
console.error(`${c3.gray("Hint:")} Run ${c3.bold("`git-swarm config refresh`")} to refresh repository paths`);
|
|
16991
|
+
process.exit(1);
|
|
16992
|
+
};
|
|
16993
|
+
var assertConfigRepoPath = async (root, path) => {
|
|
16994
|
+
const absolute = resolve3(root, path);
|
|
16995
|
+
const stats = await stat2(absolute).catch(() => null);
|
|
16996
|
+
if (stats === null || !stats.isDirectory()) {
|
|
16997
|
+
failConfigRepoPath(path, stats === null ? "not found" : "is not a directory");
|
|
16998
|
+
}
|
|
16999
|
+
try {
|
|
17000
|
+
await stat2(join(absolute, ".git"));
|
|
17001
|
+
} catch {
|
|
17002
|
+
failConfigRepoPath(path, "is not a git repository");
|
|
17003
|
+
}
|
|
17004
|
+
};
|
|
17005
|
+
async function* findGitRepositoryPaths(root, options) {
|
|
17006
|
+
if (!options.skipConfig) {
|
|
17007
|
+
const repos = await config2.get().then((c) => c.repositories);
|
|
17008
|
+
if (repos) {
|
|
17009
|
+
for (const repo of repos) {
|
|
17010
|
+
await assertConfigRepoPath(root, repo.path);
|
|
17011
|
+
yield repo.path;
|
|
17012
|
+
}
|
|
17013
|
+
return;
|
|
17014
|
+
}
|
|
17015
|
+
}
|
|
17016
|
+
const matches = await glob("**/.git", {
|
|
17017
|
+
cwd: root,
|
|
17018
|
+
dot: true,
|
|
17019
|
+
onlyFiles: false,
|
|
17020
|
+
expandDirectories: false,
|
|
17021
|
+
absolute: true
|
|
17022
|
+
});
|
|
17023
|
+
for (const path of matches) {
|
|
17024
|
+
yield dirname2(path);
|
|
17025
|
+
}
|
|
17026
|
+
}
|
|
17027
|
+
|
|
17028
|
+
// src/utils/filter-not-null.ts
|
|
17029
|
+
var filterNotNull = (array) => array.filter((t) => t !== null);
|
|
17030
|
+
|
|
17031
|
+
// node_modules/pluralize-esm/dist/index.js
|
|
17032
|
+
var pluralRules = [];
|
|
17033
|
+
var singularRules = [];
|
|
17034
|
+
var uncountables = /* @__PURE__ */ new Set;
|
|
17035
|
+
var irregularPlurals = /* @__PURE__ */ new Map;
|
|
17036
|
+
var irregularSingles = /* @__PURE__ */ new Map;
|
|
17037
|
+
var sanitizeRule = (rule) => typeof rule === "string" ? new RegExp("^".concat(rule, "$"), "i") : rule;
|
|
17038
|
+
var restoreCase = (word, token) => {
|
|
17039
|
+
if (typeof token !== "string")
|
|
17040
|
+
return word;
|
|
17041
|
+
if (word === token)
|
|
17042
|
+
return token;
|
|
17043
|
+
if (word === word.toLowerCase())
|
|
17044
|
+
return token.toLowerCase();
|
|
17045
|
+
if (word === word.toUpperCase())
|
|
17046
|
+
return token.toUpperCase();
|
|
17047
|
+
if (word[0] === word[0].toUpperCase()) {
|
|
17048
|
+
return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();
|
|
17049
|
+
}
|
|
17050
|
+
return token.toLowerCase();
|
|
17051
|
+
};
|
|
17052
|
+
var sanitizeWord = (token, word, rules) => {
|
|
17053
|
+
if (!token.length || uncountables.has(token)) {
|
|
17054
|
+
return word;
|
|
17055
|
+
}
|
|
17056
|
+
let {
|
|
17057
|
+
length: len
|
|
17058
|
+
} = rules;
|
|
17059
|
+
while (len--) {
|
|
17060
|
+
const rule = rules[len];
|
|
17061
|
+
if (rule[0].test(word)) {
|
|
17062
|
+
return word.replace(rule[0], function() {
|
|
17063
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0;_key < _len; _key++) {
|
|
17064
|
+
args[_key] = arguments[_key];
|
|
17065
|
+
}
|
|
17066
|
+
const [match, index] = args;
|
|
17067
|
+
const result = rule[1].replace(/\$(\d{1,2})/g, (_, index2) => args[index2] || "");
|
|
17068
|
+
if (match === "") {
|
|
17069
|
+
return restoreCase(word[index - 1], result);
|
|
17070
|
+
}
|
|
17071
|
+
return restoreCase(match, result);
|
|
17072
|
+
});
|
|
17073
|
+
}
|
|
17074
|
+
}
|
|
17075
|
+
return word;
|
|
17076
|
+
};
|
|
17077
|
+
var compute = (word, replaceMap, keepMap, rules) => {
|
|
17078
|
+
const token = word.toLowerCase();
|
|
17079
|
+
if (keepMap.has(token)) {
|
|
17080
|
+
return restoreCase(word, token);
|
|
17081
|
+
}
|
|
17082
|
+
if (replaceMap.has(token)) {
|
|
17083
|
+
return restoreCase(word, replaceMap.get(token));
|
|
17084
|
+
}
|
|
17085
|
+
return sanitizeWord(token, word, rules);
|
|
17086
|
+
};
|
|
17087
|
+
var mapHas = (word, replaceMap, keepMap, rules) => {
|
|
17088
|
+
const token = word.toLowerCase();
|
|
17089
|
+
if (keepMap.has(token))
|
|
17090
|
+
return true;
|
|
17091
|
+
if (replaceMap.has(token))
|
|
17092
|
+
return false;
|
|
17093
|
+
return sanitizeWord(token, token, rules) === token;
|
|
17094
|
+
};
|
|
17095
|
+
var pluralize = (word, count, inclusive) => {
|
|
17096
|
+
const pluralized = count === 1 ? pluralize.singular(word) : pluralize.plural(word);
|
|
17097
|
+
if (inclusive)
|
|
17098
|
+
return "".concat(count, " ").concat(pluralized);
|
|
17099
|
+
return pluralized;
|
|
17100
|
+
};
|
|
17101
|
+
pluralize.plural = (word) => compute(word, irregularSingles, irregularPlurals, pluralRules);
|
|
17102
|
+
pluralize.singular = (word) => compute(word, irregularPlurals, irregularSingles, singularRules);
|
|
17103
|
+
pluralize.addPluralRule = (rule, replacement) => {
|
|
17104
|
+
pluralRules.push([sanitizeRule(rule), replacement]);
|
|
17105
|
+
};
|
|
17106
|
+
pluralize.addSingularRule = (rule, replacement) => {
|
|
17107
|
+
singularRules.push([sanitizeRule(rule), replacement]);
|
|
17108
|
+
};
|
|
17109
|
+
pluralize.addIrregularRule = (single, plural) => {
|
|
17110
|
+
const _plural = plural.toLowerCase();
|
|
17111
|
+
const _single = single.toLowerCase();
|
|
17112
|
+
irregularSingles.set(_single, _plural);
|
|
17113
|
+
irregularPlurals.set(_plural, _single);
|
|
17114
|
+
};
|
|
17115
|
+
pluralize.addUncountableRule = (rule) => {
|
|
17116
|
+
if (typeof rule === "string") {
|
|
17117
|
+
uncountables.add(rule.toLowerCase());
|
|
17118
|
+
return;
|
|
17119
|
+
}
|
|
17120
|
+
pluralize.addPluralRule(rule, "$0");
|
|
17121
|
+
pluralize.addSingularRule(rule, "$0");
|
|
17122
|
+
};
|
|
17123
|
+
pluralize.isPlural = (word) => mapHas(word, irregularSingles, irregularPlurals, pluralRules);
|
|
17124
|
+
pluralize.isSingular = (word) => mapHas(word, irregularPlurals, irregularSingles, singularRules);
|
|
17125
|
+
var defaultIrregulars = [
|
|
17126
|
+
["I", "we"],
|
|
17127
|
+
["me", "us"],
|
|
17128
|
+
["he", "they"],
|
|
17129
|
+
["she", "they"],
|
|
17130
|
+
["them", "them"],
|
|
17131
|
+
["myself", "ourselves"],
|
|
17132
|
+
["yourself", "yourselves"],
|
|
17133
|
+
["itself", "themselves"],
|
|
17134
|
+
["herself", "themselves"],
|
|
17135
|
+
["himself", "themselves"],
|
|
17136
|
+
["themself", "themselves"],
|
|
17137
|
+
["is", "are"],
|
|
17138
|
+
["was", "were"],
|
|
17139
|
+
["has", "have"],
|
|
17140
|
+
["this", "these"],
|
|
17141
|
+
["that", "those"],
|
|
17142
|
+
["my", "our"],
|
|
17143
|
+
["its", "their"],
|
|
17144
|
+
["his", "their"],
|
|
17145
|
+
["her", "their"],
|
|
17146
|
+
["echo", "echoes"],
|
|
17147
|
+
["dingo", "dingoes"],
|
|
17148
|
+
["volcano", "volcanoes"],
|
|
17149
|
+
["tornado", "tornadoes"],
|
|
17150
|
+
["torpedo", "torpedoes"],
|
|
17151
|
+
["genus", "genera"],
|
|
17152
|
+
["viscus", "viscera"],
|
|
17153
|
+
["stigma", "stigmata"],
|
|
17154
|
+
["stoma", "stomata"],
|
|
17155
|
+
["dogma", "dogmata"],
|
|
17156
|
+
["lemma", "lemmata"],
|
|
17157
|
+
["schema", "schemata"],
|
|
17158
|
+
["anathema", "anathemata"],
|
|
17159
|
+
["ox", "oxen"],
|
|
17160
|
+
["axe", "axes"],
|
|
17161
|
+
["die", "dice"],
|
|
17162
|
+
["yes", "yeses"],
|
|
17163
|
+
["foot", "feet"],
|
|
17164
|
+
["eave", "eaves"],
|
|
17165
|
+
["goose", "geese"],
|
|
17166
|
+
["tooth", "teeth"],
|
|
17167
|
+
["quiz", "quizzes"],
|
|
17168
|
+
["human", "humans"],
|
|
17169
|
+
["proof", "proofs"],
|
|
17170
|
+
["carve", "carves"],
|
|
17171
|
+
["valve", "valves"],
|
|
17172
|
+
["looey", "looies"],
|
|
17173
|
+
["thief", "thieves"],
|
|
17174
|
+
["groove", "grooves"],
|
|
17175
|
+
["pickaxe", "pickaxes"],
|
|
17176
|
+
["passerby", "passersby"],
|
|
17177
|
+
["canvas", "canvases"]
|
|
17178
|
+
];
|
|
17179
|
+
var defaultPlurals = [[/s?$/i, "s"], [/[^\u0000-\u007F]$/i, "$0"], [/([^aeiou]ese)$/i, "$1"], [/(ax|test)is$/i, "$1es"], [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, "$1es"], [/(e[mn]u)s?$/i, "$1s"], [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, "$1"], [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1i"], [/(alumn|alg|vertebr)(?:a|ae)$/i, "$1ae"], [/(seraph|cherub)(?:im)?$/i, "$1im"], [/(her|at|gr)o$/i, "$1oes"], [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, "$1a"], [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, "$1a"], [/sis$/i, "ses"], [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, "$1$2ves"], [/([^aeiouy]|qu)y$/i, "$1ies"], [/([^ch][ieo][ln])ey$/i, "$1ies"], [/(x|ch|ss|sh|zz)$/i, "$1es"], [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, "$1ices"], [/\b((?:tit)?m|l)(?:ice|ouse)$/i, "$1ice"], [/(pe)(?:rson|ople)$/i, "$1ople"], [/(child)(?:ren)?$/i, "$1ren"], [/eaux$/i, "$0"], [/m[ae]n$/i, "men"], ["thou", "you"]];
|
|
17180
|
+
var defaultSingles = [[/s$/i, ""], [/(ss)$/i, "$1"], [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i, "$1fe"], [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, "$1f"], [/ies$/i, "y"], [/(dg|ss|ois|lk|ok|wn|mb|th|ch|ec|oal|is|ck|ix|sser|ts|wb)ies$/i, "$1ie"], [/\b(l|(?:neck|cross|hog|aun)?t|coll|faer|food|gen|goon|group|hipp|junk|vegg|(?:pork)?p|charl|calor|cut)ies$/i, "$1ie"], [/\b(mon|smil)ies$/i, "$1ey"], [/\b((?:tit)?m|l)ice$/i, "$1ouse"], [/(seraph|cherub)im$/i, "$1"], [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, "$1"], [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, "$1sis"], [/(movie|twelve|abuse|e[mn]u)s$/i, "$1"], [/(test)(?:is|es)$/i, "$1is"], [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, "$1us"], [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, "$1um"], [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, "$1on"], [/(alumn|alg|vertebr)ae$/i, "$1a"], [/(cod|mur|sil|vert|ind)ices$/i, "$1ex"], [/(matr|append)ices$/i, "$1ix"], [/(pe)(rson|ople)$/i, "$1rson"], [/(child)ren$/i, "$1"], [/(eau)x?$/i, "$1"], [/men$/i, "man"]];
|
|
17181
|
+
var defaultUncountables = [
|
|
17182
|
+
"adulthood",
|
|
17183
|
+
"advice",
|
|
17184
|
+
"agenda",
|
|
17185
|
+
"aid",
|
|
17186
|
+
"aircraft",
|
|
17187
|
+
"alcohol",
|
|
17188
|
+
"ammo",
|
|
17189
|
+
"analytics",
|
|
17190
|
+
"anime",
|
|
17191
|
+
"athletics",
|
|
17192
|
+
"audio",
|
|
17193
|
+
"bison",
|
|
17194
|
+
"blood",
|
|
17195
|
+
"bream",
|
|
17196
|
+
"buffalo",
|
|
17197
|
+
"butter",
|
|
17198
|
+
"carp",
|
|
17199
|
+
"cash",
|
|
17200
|
+
"chassis",
|
|
17201
|
+
"chess",
|
|
17202
|
+
"clothing",
|
|
17203
|
+
"cod",
|
|
17204
|
+
"commerce",
|
|
17205
|
+
"cooperation",
|
|
17206
|
+
"corps",
|
|
17207
|
+
"debris",
|
|
17208
|
+
"diabetes",
|
|
17209
|
+
"digestion",
|
|
17210
|
+
"elk",
|
|
17211
|
+
"energy",
|
|
17212
|
+
"equipment",
|
|
17213
|
+
"excretion",
|
|
17214
|
+
"expertise",
|
|
17215
|
+
"firmware",
|
|
17216
|
+
"flounder",
|
|
17217
|
+
"fun",
|
|
17218
|
+
"gallows",
|
|
17219
|
+
"garbage",
|
|
17220
|
+
"graffiti",
|
|
17221
|
+
"hardware",
|
|
17222
|
+
"headquarters",
|
|
17223
|
+
"health",
|
|
17224
|
+
"herpes",
|
|
17225
|
+
"highjinks",
|
|
17226
|
+
"homework",
|
|
17227
|
+
"housework",
|
|
17228
|
+
"information",
|
|
17229
|
+
"jeans",
|
|
17230
|
+
"justice",
|
|
17231
|
+
"kudos",
|
|
17232
|
+
"labour",
|
|
17233
|
+
"literature",
|
|
17234
|
+
"machinery",
|
|
17235
|
+
"mackerel",
|
|
17236
|
+
"mail",
|
|
17237
|
+
"media",
|
|
17238
|
+
"mews",
|
|
17239
|
+
"moose",
|
|
17240
|
+
"music",
|
|
17241
|
+
"mud",
|
|
17242
|
+
"manga",
|
|
17243
|
+
"news",
|
|
17244
|
+
"only",
|
|
17245
|
+
"personnel",
|
|
17246
|
+
"pike",
|
|
17247
|
+
"plankton",
|
|
17248
|
+
"pliers",
|
|
17249
|
+
"police",
|
|
17250
|
+
"pollution",
|
|
17251
|
+
"premises",
|
|
17252
|
+
"rain",
|
|
17253
|
+
"research",
|
|
17254
|
+
"rice",
|
|
17255
|
+
"salmon",
|
|
17256
|
+
"scissors",
|
|
17257
|
+
"series",
|
|
17258
|
+
"sewage",
|
|
17259
|
+
"shambles",
|
|
17260
|
+
"shrimp",
|
|
17261
|
+
"software",
|
|
17262
|
+
"staff",
|
|
17263
|
+
"swine",
|
|
17264
|
+
"tennis",
|
|
17265
|
+
"traffic",
|
|
17266
|
+
"transportation",
|
|
17267
|
+
"trout",
|
|
17268
|
+
"tuna",
|
|
17269
|
+
"wealth",
|
|
17270
|
+
"welfare",
|
|
17271
|
+
"whiting",
|
|
17272
|
+
"wildebeest",
|
|
17273
|
+
"wildlife",
|
|
17274
|
+
"you",
|
|
17275
|
+
/pok[e\u00E9]mon$/i,
|
|
17276
|
+
/[^aeiou]ese$/i,
|
|
17277
|
+
/deer$/i,
|
|
17278
|
+
/fish$/i,
|
|
17279
|
+
/measles$/i,
|
|
17280
|
+
/o[iu]s$/i,
|
|
17281
|
+
/pox$/i,
|
|
17282
|
+
/sheep$/i
|
|
17283
|
+
];
|
|
17284
|
+
for (const [single, plural] of defaultIrregulars) {
|
|
17285
|
+
pluralize.addIrregularRule(single, plural);
|
|
17286
|
+
}
|
|
17287
|
+
for (const [search, replacement] of defaultPlurals) {
|
|
17288
|
+
pluralize.addPluralRule(search, replacement);
|
|
17289
|
+
}
|
|
17290
|
+
for (const [search, replacement] of defaultSingles) {
|
|
17291
|
+
pluralize.addSingularRule(search, replacement);
|
|
17292
|
+
}
|
|
17293
|
+
for (const search of defaultUncountables) {
|
|
17294
|
+
pluralize.addUncountableRule(search);
|
|
17295
|
+
}
|
|
17296
|
+
|
|
16967
17297
|
// src/utils/array-has-overlaps.ts
|
|
16968
17298
|
var arrayHasOverlaps = (a, b) => {
|
|
16969
17299
|
return !new Set(a).isDisjointFrom(new Set(b));
|
|
@@ -16971,15 +17301,17 @@ var arrayHasOverlaps = (a, b) => {
|
|
|
16971
17301
|
|
|
16972
17302
|
// src/utils/error.ts
|
|
16973
17303
|
var catchError = (error) => error instanceof Error ? error : new Error(`${error}`, { cause: error });
|
|
17304
|
+
var reportRepoError = (path, error) => {
|
|
17305
|
+
const message = (error instanceof Error ? error.message : `${error}`).trim();
|
|
17306
|
+
console.error(`${c3.red("\u2717")} ${path}: ${message}`);
|
|
17307
|
+
return null;
|
|
17308
|
+
};
|
|
16974
17309
|
|
|
16975
17310
|
// src/utils/is-nullish.ts
|
|
16976
17311
|
var isNullish = (value) => {
|
|
16977
17312
|
return value === null || value === undefined;
|
|
16978
17313
|
};
|
|
16979
17314
|
|
|
16980
|
-
// src/utils/filter-not-null.ts
|
|
16981
|
-
var filterNotNull = (array) => array.filter((t) => t !== null);
|
|
16982
|
-
|
|
16983
17315
|
// src/git/remote.ts
|
|
16984
17316
|
var KNOWN_PROVIDERS = {
|
|
16985
17317
|
"github.com": "github",
|
|
@@ -17035,7 +17367,7 @@ var parseGitRemoteRefs = (refs) => {
|
|
|
17035
17367
|
// src/git/filter.ts
|
|
17036
17368
|
var oneOrMoreStringsFilterSchema = union([string2(), array(string2())]).transform((v) => Array.isArray(v) ? v : [v]).nullish();
|
|
17037
17369
|
var booleanFilterSchema = _enum(["true", "false"]).transform((v) => v === "true").nullish();
|
|
17038
|
-
var repoFiltersSchema =
|
|
17370
|
+
var repoFiltersSchema = strictObject({
|
|
17039
17371
|
branch: oneOrMoreStringsFilterSchema,
|
|
17040
17372
|
clean: booleanFilterSchema,
|
|
17041
17373
|
"remote.ref": oneOrMoreStringsFilterSchema,
|
|
@@ -17059,29 +17391,17 @@ var parseQueryString = (query) => {
|
|
|
17059
17391
|
}
|
|
17060
17392
|
const result = repoFiltersSchema.safeParse(rawSearch);
|
|
17061
17393
|
if (result.error) {
|
|
17062
|
-
const issue = result.error.issues.map((i) =>
|
|
17394
|
+
const issue = result.error.issues.map((i) => {
|
|
17395
|
+
if (i.code === "unrecognized_keys") {
|
|
17396
|
+
return `${pluralize("unknown filter", i.keys.length, true)}: ${i.keys.map((key) => `"${key}"`).join(", ")}`;
|
|
17397
|
+
}
|
|
17398
|
+
return `${i.path}: ${i.message}`;
|
|
17399
|
+
}).join(". ");
|
|
17063
17400
|
throw new Error(`Invalid filter query. ${issue}`);
|
|
17064
17401
|
}
|
|
17065
17402
|
return result.data;
|
|
17066
17403
|
};
|
|
17067
17404
|
var repoMatchesFilter = async (repo, filters) => {
|
|
17068
|
-
const status = await repo.git.status().catch(catchError);
|
|
17069
|
-
if (status instanceof Error) {
|
|
17070
|
-
return false;
|
|
17071
|
-
}
|
|
17072
|
-
const rawRemotes = await repo.git.getRemotes(true);
|
|
17073
|
-
const remotes = parseGitRemoteRefs(rawRemotes);
|
|
17074
|
-
if (!isNullish(filters.branch) && status.current) {
|
|
17075
|
-
if (!arrayHasOverlaps(filters.branch, [status.current])) {
|
|
17076
|
-
return false;
|
|
17077
|
-
}
|
|
17078
|
-
}
|
|
17079
|
-
if (!isNullish(filters.clean)) {
|
|
17080
|
-
const isClean = status.isClean();
|
|
17081
|
-
if (filters.clean !== isClean) {
|
|
17082
|
-
return false;
|
|
17083
|
-
}
|
|
17084
|
-
}
|
|
17085
17405
|
const remoteStringFilters = [
|
|
17086
17406
|
"ref",
|
|
17087
17407
|
"provider",
|
|
@@ -17089,58 +17409,67 @@ var repoMatchesFilter = async (repo, filters) => {
|
|
|
17089
17409
|
"host",
|
|
17090
17410
|
"name"
|
|
17091
17411
|
];
|
|
17092
|
-
|
|
17093
|
-
|
|
17094
|
-
|
|
17095
|
-
|
|
17096
|
-
|
|
17097
|
-
|
|
17412
|
+
const needsStatus = !isNullish(filters.branch) || !isNullish(filters.clean);
|
|
17413
|
+
const needsRemotes = remoteStringFilters.some((key) => !isNullish(filters[`remote.${key}`]));
|
|
17414
|
+
if (!needsStatus && !needsRemotes) {
|
|
17415
|
+
return true;
|
|
17416
|
+
}
|
|
17417
|
+
if (needsStatus) {
|
|
17418
|
+
const status = await repo.git.status().catch(catchError);
|
|
17419
|
+
if (status instanceof Error) {
|
|
17420
|
+
return false;
|
|
17421
|
+
}
|
|
17422
|
+
if (!isNullish(filters.branch) && status.current) {
|
|
17423
|
+
if (!arrayHasOverlaps(filters.branch, [status.current])) {
|
|
17098
17424
|
return false;
|
|
17099
17425
|
}
|
|
17100
17426
|
}
|
|
17101
|
-
|
|
17102
|
-
|
|
17103
|
-
|
|
17104
|
-
|
|
17105
|
-
// src/git/discover.ts
|
|
17106
|
-
async function* findGitRepositoryPaths(root, options) {
|
|
17107
|
-
if (!options.skipConfig) {
|
|
17108
|
-
const repos = await config2.get().then((c) => c.repositories);
|
|
17109
|
-
if (repos) {
|
|
17110
|
-
for (const repo of repos) {
|
|
17111
|
-
yield repo.path;
|
|
17427
|
+
if (!isNullish(filters.clean)) {
|
|
17428
|
+
const isClean = status.isClean();
|
|
17429
|
+
if (filters.clean !== isClean) {
|
|
17430
|
+
return false;
|
|
17112
17431
|
}
|
|
17113
|
-
return;
|
|
17114
17432
|
}
|
|
17115
17433
|
}
|
|
17116
|
-
|
|
17117
|
-
|
|
17118
|
-
|
|
17119
|
-
|
|
17120
|
-
|
|
17121
|
-
|
|
17122
|
-
|
|
17123
|
-
|
|
17124
|
-
|
|
17125
|
-
|
|
17126
|
-
|
|
17127
|
-
|
|
17128
|
-
|
|
17129
|
-
|
|
17130
|
-
|
|
17131
|
-
git: esm_default(path, { baseDir: path })
|
|
17132
|
-
};
|
|
17133
|
-
if (!await repoMatchesFilter(repo, filter)) {
|
|
17134
|
-
continue;
|
|
17434
|
+
if (needsRemotes) {
|
|
17435
|
+
const rawRemotes = await repo.git.getRemotes(true).catch(catchError);
|
|
17436
|
+
if (rawRemotes instanceof Error) {
|
|
17437
|
+
return false;
|
|
17438
|
+
}
|
|
17439
|
+
const remotes = parseGitRemoteRefs(rawRemotes);
|
|
17440
|
+
for (const remoteKey of remoteStringFilters) {
|
|
17441
|
+
const filterKey = `remote.${remoteKey}`;
|
|
17442
|
+
if (!isNullish(filters[filterKey])) {
|
|
17443
|
+
const needles = filters[filterKey];
|
|
17444
|
+
const haystacks = remotes.map((r) => r[remoteKey]);
|
|
17445
|
+
if (!arrayHasOverlaps(needles, haystacks)) {
|
|
17446
|
+
return false;
|
|
17447
|
+
}
|
|
17448
|
+
}
|
|
17135
17449
|
}
|
|
17136
|
-
yield repo;
|
|
17137
17450
|
}
|
|
17138
|
-
|
|
17451
|
+
return true;
|
|
17452
|
+
};
|
|
17139
17453
|
|
|
17140
17454
|
// src/git/worker.ts
|
|
17141
|
-
var forEachRepo = async (root,
|
|
17455
|
+
var forEachRepo = async (root, visit, options) => {
|
|
17142
17456
|
const limit = pLimit(options.parallel);
|
|
17143
|
-
const
|
|
17457
|
+
const paths = await Array.fromAsync(findGitRepositoryPaths(root, {
|
|
17458
|
+
skipConfig: options.skipConfig ?? false
|
|
17459
|
+
}));
|
|
17460
|
+
const repos = await Promise.all(paths.map((path) => limit(async () => {
|
|
17461
|
+
const repo = {
|
|
17462
|
+
path: {
|
|
17463
|
+
absolute: path,
|
|
17464
|
+
relative: relative2(root, path) || "."
|
|
17465
|
+
},
|
|
17466
|
+
git: esm_default(path, { baseDir: path })
|
|
17467
|
+
};
|
|
17468
|
+
if (!await repoMatchesFilter(repo, options.where)) {
|
|
17469
|
+
return null;
|
|
17470
|
+
}
|
|
17471
|
+
return repo;
|
|
17472
|
+
}))).then(filterNotNull);
|
|
17144
17473
|
const promises = repos.map((repo) => limit(() => visit(repo)));
|
|
17145
17474
|
const results = await Promise.all(promises);
|
|
17146
17475
|
return results;
|
|
@@ -17184,13 +17513,18 @@ var checkoutCommand = new Command("checkout").description("Switch branches").arg
|
|
|
17184
17513
|
const programOptions = getProgramOptions();
|
|
17185
17514
|
const root = process.cwd();
|
|
17186
17515
|
const table = new CliTable({ head: ["path", "result"] });
|
|
17187
|
-
|
|
17516
|
+
let failed = false;
|
|
17517
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17188
17518
|
const result = await git.checkout(branch).catch(catchError);
|
|
17189
17519
|
if (result instanceof Error) {
|
|
17190
|
-
|
|
17520
|
+
failed = true;
|
|
17521
|
+
return reportRepoError(path.relative, result);
|
|
17191
17522
|
}
|
|
17192
17523
|
return [path.relative, branch];
|
|
17193
17524
|
}, programOptions);
|
|
17525
|
+
if (failed) {
|
|
17526
|
+
process.exitCode = 1;
|
|
17527
|
+
}
|
|
17194
17528
|
table.push(...filterNotNull(results));
|
|
17195
17529
|
console.log(table.toString());
|
|
17196
17530
|
});
|
|
@@ -17318,10 +17652,6 @@ ${indent}`);
|
|
|
17318
17652
|
return value;
|
|
17319
17653
|
}
|
|
17320
17654
|
|
|
17321
|
-
// src/utils/colour.ts
|
|
17322
|
-
var import_picocolors = __toESM(require_picocolors(), 1);
|
|
17323
|
-
var c3 = import_picocolors.default;
|
|
17324
|
-
|
|
17325
17655
|
// src/program/commands/config/init/command.ts
|
|
17326
17656
|
var initCommand = new Command("init").description(dedent_default`
|
|
17327
17657
|
Initialises a git swarm config.
|
|
@@ -17334,9 +17664,10 @@ var initCommand = new Command("init").description(dedent_default`
|
|
|
17334
17664
|
}
|
|
17335
17665
|
const programOptions = getProgramOptions();
|
|
17336
17666
|
const root = process.cwd();
|
|
17337
|
-
const repos = await
|
|
17667
|
+
const repos = await forEachRepo(root, async (repo) => repo, {
|
|
17668
|
+
...programOptions,
|
|
17338
17669
|
skipConfig: true
|
|
17339
|
-
})
|
|
17670
|
+
});
|
|
17340
17671
|
repos.sort((a, b) => a.path.relative.localeCompare(b.path.relative));
|
|
17341
17672
|
const configData = {
|
|
17342
17673
|
...defaultConfig,
|
|
@@ -17358,9 +17689,10 @@ var refreshCommand = new Command("refresh").description(dedent_default`
|
|
|
17358
17689
|
const oldConfig = await config2.get();
|
|
17359
17690
|
const programOptions = getProgramOptions();
|
|
17360
17691
|
const root = process.cwd();
|
|
17361
|
-
const repos = await
|
|
17692
|
+
const repos = await forEachRepo(root, async (repo) => repo, {
|
|
17693
|
+
...programOptions,
|
|
17362
17694
|
skipConfig: true
|
|
17363
|
-
})
|
|
17695
|
+
});
|
|
17364
17696
|
repos.sort((a, b) => a.path.relative.localeCompare(b.path.relative));
|
|
17365
17697
|
const configData = {
|
|
17366
17698
|
...oldConfig,
|
|
@@ -17396,10 +17728,12 @@ var diffCommand = new Command("diff").description("Show changes across all repos
|
|
|
17396
17728
|
const programOptions = getProgramOptions();
|
|
17397
17729
|
const root = process.cwd();
|
|
17398
17730
|
const diffArgs = options.cached ? ["--cached"] : [];
|
|
17399
|
-
|
|
17731
|
+
let failed = false;
|
|
17732
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17400
17733
|
const summary = await git.diffSummary(rev ? [rev, ...diffArgs] : diffArgs).catch(catchError);
|
|
17401
17734
|
if (summary instanceof Error) {
|
|
17402
|
-
|
|
17735
|
+
failed = true;
|
|
17736
|
+
return reportRepoError(path.relative, summary);
|
|
17403
17737
|
}
|
|
17404
17738
|
if (summary.changed === 0) {
|
|
17405
17739
|
return null;
|
|
@@ -17408,6 +17742,7 @@ var diffCommand = new Command("diff").description("Show changes across all repos
|
|
|
17408
17742
|
}, programOptions);
|
|
17409
17743
|
const diffs = filterNotNull(results);
|
|
17410
17744
|
if (diffs.length === 0) {
|
|
17745
|
+
process.exitCode = failed ? 1 : 0;
|
|
17411
17746
|
return;
|
|
17412
17747
|
}
|
|
17413
17748
|
const head = options.stat ? ["path", "files", "insertions", "deletions"] : ["path", "file", "changes", "insertions", "deletions"];
|
|
@@ -17463,7 +17798,7 @@ var printLines = (prefix, lines) => {
|
|
|
17463
17798
|
var execCommand = new Command("exec").description("Run a command in every repository").option("-v, --verbose", "use compact output format").passThroughOptions().argument("<command...>", "the command and arguments to run").action(async (command, options) => {
|
|
17464
17799
|
const programOptions = getProgramOptions();
|
|
17465
17800
|
const root = process.cwd();
|
|
17466
|
-
const results = await forEachRepo(root,
|
|
17801
|
+
const results = await forEachRepo(root, async ({ path }) => runCommand(path.relative, path.absolute, command), programOptions);
|
|
17467
17802
|
if (options.verbose) {
|
|
17468
17803
|
const maxWidth = Math.max(...results.map((result) => `[${result.path}]`.length));
|
|
17469
17804
|
for (const result of results) {
|
|
@@ -17487,10 +17822,10 @@ var execCommand = new Command("exec").description("Run a command in every reposi
|
|
|
17487
17822
|
// src/program/commands/fetch/command.ts
|
|
17488
17823
|
var getFetchSummary = (result) => {
|
|
17489
17824
|
const chunks = [
|
|
17490
|
-
result.branches.length ?
|
|
17491
|
-
result.tags.length ?
|
|
17492
|
-
result.updated.length ? `${result.updated.length
|
|
17493
|
-
result.deleted.length ? `${result.deleted.length
|
|
17825
|
+
result.branches.length ? pluralize("new branch", result.branches.length, true) : null,
|
|
17826
|
+
result.tags.length ? pluralize("new tag", result.tags.length, true) : null,
|
|
17827
|
+
result.updated.length ? `${pluralize("branch", result.updated.length, true)} updated` : null,
|
|
17828
|
+
result.deleted.length ? `${pluralize("branch", result.deleted.length, true)} deleted` : null
|
|
17494
17829
|
].filter(Boolean);
|
|
17495
17830
|
return chunks.join(", ") || "already up-to-date";
|
|
17496
17831
|
};
|
|
@@ -17498,13 +17833,18 @@ var fetchCommand = new Command("fetch").description("Download objects and refs f
|
|
|
17498
17833
|
const programOptions = getProgramOptions();
|
|
17499
17834
|
const root = process.cwd();
|
|
17500
17835
|
const table = new CliTable({ head: ["path", "result"] });
|
|
17501
|
-
|
|
17836
|
+
let failed = false;
|
|
17837
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17502
17838
|
const result = await git.fetch(options?.prune ? ["--prune"] : []).catch(catchError);
|
|
17503
17839
|
if (result instanceof Error) {
|
|
17504
|
-
|
|
17840
|
+
failed = true;
|
|
17841
|
+
return reportRepoError(path.relative, result);
|
|
17505
17842
|
}
|
|
17506
17843
|
return [path.relative, getFetchSummary(result)];
|
|
17507
17844
|
}, programOptions);
|
|
17845
|
+
if (failed) {
|
|
17846
|
+
process.exitCode = 1;
|
|
17847
|
+
}
|
|
17508
17848
|
table.push(...filterNotNull(results));
|
|
17509
17849
|
console.log(table.toString());
|
|
17510
17850
|
});
|
|
@@ -17528,10 +17868,10 @@ var findBranchCommand = new Command("find-branch").description("Search repositor
|
|
|
17528
17868
|
const table = new CliTable({
|
|
17529
17869
|
head: ["path", "result"]
|
|
17530
17870
|
});
|
|
17531
|
-
const results = await forEachRepo(root,
|
|
17871
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17532
17872
|
const result = await git.branch().catch(catchError);
|
|
17533
17873
|
if (result instanceof Error) {
|
|
17534
|
-
return
|
|
17874
|
+
return reportRepoError(path.relative, result);
|
|
17535
17875
|
}
|
|
17536
17876
|
const found = getBranchSummary(branch, result.all);
|
|
17537
17877
|
if (found) {
|
|
@@ -17540,7 +17880,7 @@ var findBranchCommand = new Command("find-branch").description("Search repositor
|
|
|
17540
17880
|
return null;
|
|
17541
17881
|
}, programOptions);
|
|
17542
17882
|
const matches = filterNotNull(results);
|
|
17543
|
-
console.log(`${c3.gray("branch")} ${c3.bold(branch)} ${c3.gray(`found in ${matches.length
|
|
17883
|
+
console.log(`${c3.gray("branch")} ${c3.bold(branch)} ${c3.gray(`found in ${pluralize("repo", matches.length, true)}:`)}`);
|
|
17544
17884
|
if (matches.length === 0) {
|
|
17545
17885
|
return;
|
|
17546
17886
|
}
|
|
@@ -17552,10 +17892,10 @@ var findBranchCommand = new Command("find-branch").description("Search repositor
|
|
|
17552
17892
|
var grepCommand = new Command("grep").description("Search for a pattern across all repositories").passThroughOptions().argument("<pattern>", "the search pattern").argument("[options...]", "git-grep search options", []).action(async (pattern, grepOptions) => {
|
|
17553
17893
|
const programOptions = getProgramOptions();
|
|
17554
17894
|
const root = process.cwd();
|
|
17555
|
-
const results = await forEachRepo(root,
|
|
17895
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17556
17896
|
const result = await git.grep(pattern, grepOptions).catch(catchError);
|
|
17557
17897
|
if (result instanceof Error) {
|
|
17558
|
-
return
|
|
17898
|
+
return reportRepoError(path.relative, result);
|
|
17559
17899
|
}
|
|
17560
17900
|
const lines = [];
|
|
17561
17901
|
for (const [file, matches] of Object.entries(result.results)) {
|
|
@@ -17595,8 +17935,793 @@ var listCommand = new Command("list").description("List repositories discovered
|
|
|
17595
17935
|
const table = new CliTable({
|
|
17596
17936
|
head: ["path"]
|
|
17597
17937
|
});
|
|
17598
|
-
|
|
17599
|
-
|
|
17938
|
+
const repos = await forEachRepo(root, async ({ path }) => path.relative, programOptions);
|
|
17939
|
+
for (const relative of repos) {
|
|
17940
|
+
table.push([relative]);
|
|
17941
|
+
}
|
|
17942
|
+
console.log(table.toString());
|
|
17943
|
+
});
|
|
17944
|
+
|
|
17945
|
+
// node_modules/date-fns/constants.js
|
|
17946
|
+
var daysInYear = 365.2425;
|
|
17947
|
+
var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;
|
|
17948
|
+
var minTime = -maxTime;
|
|
17949
|
+
var minutesInMonth = 43200;
|
|
17950
|
+
var minutesInDay = 1440;
|
|
17951
|
+
var secondsInHour = 3600;
|
|
17952
|
+
var secondsInDay = secondsInHour * 24;
|
|
17953
|
+
var secondsInWeek = secondsInDay * 7;
|
|
17954
|
+
var secondsInYear = secondsInDay * daysInYear;
|
|
17955
|
+
var secondsInMonth = secondsInYear / 12;
|
|
17956
|
+
var secondsInQuarter = secondsInMonth * 3;
|
|
17957
|
+
var constructFromSymbol = Symbol.for("constructDateFrom");
|
|
17958
|
+
|
|
17959
|
+
// node_modules/date-fns/constructFrom.js
|
|
17960
|
+
function constructFrom(date, value) {
|
|
17961
|
+
if (typeof date === "function")
|
|
17962
|
+
return date(value);
|
|
17963
|
+
if (date && typeof date === "object" && constructFromSymbol in date)
|
|
17964
|
+
return date[constructFromSymbol](value);
|
|
17965
|
+
if (date instanceof Date)
|
|
17966
|
+
return new date.constructor(value);
|
|
17967
|
+
return new Date(value);
|
|
17968
|
+
}
|
|
17969
|
+
|
|
17970
|
+
// node_modules/date-fns/toDate.js
|
|
17971
|
+
function toDate(argument, context) {
|
|
17972
|
+
return constructFrom(context || argument, argument);
|
|
17973
|
+
}
|
|
17974
|
+
|
|
17975
|
+
// node_modules/date-fns/_lib/defaultOptions.js
|
|
17976
|
+
var defaultOptions3 = {};
|
|
17977
|
+
function getDefaultOptions() {
|
|
17978
|
+
return defaultOptions3;
|
|
17979
|
+
}
|
|
17980
|
+
|
|
17981
|
+
// node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js
|
|
17982
|
+
function getTimezoneOffsetInMilliseconds(date) {
|
|
17983
|
+
const _date = toDate(date);
|
|
17984
|
+
const utcDate = new Date(Date.UTC(_date.getFullYear(), _date.getMonth(), _date.getDate(), _date.getHours(), _date.getMinutes(), _date.getSeconds(), _date.getMilliseconds()));
|
|
17985
|
+
utcDate.setUTCFullYear(_date.getFullYear());
|
|
17986
|
+
return +date - +utcDate;
|
|
17987
|
+
}
|
|
17988
|
+
|
|
17989
|
+
// node_modules/date-fns/_lib/normalizeDates.js
|
|
17990
|
+
function normalizeDates(context, ...dates) {
|
|
17991
|
+
const normalize = constructFrom.bind(null, context || dates.find((date) => typeof date === "object"));
|
|
17992
|
+
return dates.map(normalize);
|
|
17993
|
+
}
|
|
17994
|
+
|
|
17995
|
+
// node_modules/date-fns/compareAsc.js
|
|
17996
|
+
function compareAsc(dateLeft, dateRight) {
|
|
17997
|
+
const diff = +toDate(dateLeft) - +toDate(dateRight);
|
|
17998
|
+
if (diff < 0)
|
|
17999
|
+
return -1;
|
|
18000
|
+
else if (diff > 0)
|
|
18001
|
+
return 1;
|
|
18002
|
+
return diff;
|
|
18003
|
+
}
|
|
18004
|
+
|
|
18005
|
+
// node_modules/date-fns/constructNow.js
|
|
18006
|
+
function constructNow(date) {
|
|
18007
|
+
return constructFrom(date, Date.now());
|
|
18008
|
+
}
|
|
18009
|
+
|
|
18010
|
+
// node_modules/date-fns/differenceInCalendarMonths.js
|
|
18011
|
+
function differenceInCalendarMonths(laterDate, earlierDate, options) {
|
|
18012
|
+
const [laterDate_, earlierDate_] = normalizeDates(options?.in, laterDate, earlierDate);
|
|
18013
|
+
const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();
|
|
18014
|
+
const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();
|
|
18015
|
+
return yearsDiff * 12 + monthsDiff;
|
|
18016
|
+
}
|
|
18017
|
+
|
|
18018
|
+
// node_modules/date-fns/_lib/getRoundingMethod.js
|
|
18019
|
+
function getRoundingMethod(method) {
|
|
18020
|
+
return (number) => {
|
|
18021
|
+
const round = method ? Math[method] : Math.trunc;
|
|
18022
|
+
const result = round(number);
|
|
18023
|
+
return result === 0 ? 0 : result;
|
|
18024
|
+
};
|
|
18025
|
+
}
|
|
18026
|
+
|
|
18027
|
+
// node_modules/date-fns/differenceInMilliseconds.js
|
|
18028
|
+
function differenceInMilliseconds(laterDate, earlierDate) {
|
|
18029
|
+
return +toDate(laterDate) - +toDate(earlierDate);
|
|
18030
|
+
}
|
|
18031
|
+
|
|
18032
|
+
// node_modules/date-fns/endOfDay.js
|
|
18033
|
+
function endOfDay(date, options) {
|
|
18034
|
+
const _date = toDate(date, options?.in);
|
|
18035
|
+
_date.setHours(23, 59, 59, 999);
|
|
18036
|
+
return _date;
|
|
18037
|
+
}
|
|
18038
|
+
|
|
18039
|
+
// node_modules/date-fns/endOfMonth.js
|
|
18040
|
+
function endOfMonth(date, options) {
|
|
18041
|
+
const _date = toDate(date, options?.in);
|
|
18042
|
+
const month = _date.getMonth();
|
|
18043
|
+
_date.setFullYear(_date.getFullYear(), month + 1, 0);
|
|
18044
|
+
_date.setHours(23, 59, 59, 999);
|
|
18045
|
+
return _date;
|
|
18046
|
+
}
|
|
18047
|
+
|
|
18048
|
+
// node_modules/date-fns/isLastDayOfMonth.js
|
|
18049
|
+
function isLastDayOfMonth(date, options) {
|
|
18050
|
+
const _date = toDate(date, options?.in);
|
|
18051
|
+
return +endOfDay(_date, options) === +endOfMonth(_date, options);
|
|
18052
|
+
}
|
|
18053
|
+
|
|
18054
|
+
// node_modules/date-fns/differenceInMonths.js
|
|
18055
|
+
function differenceInMonths(laterDate, earlierDate, options) {
|
|
18056
|
+
const [laterDate_, workingLaterDate, earlierDate_] = normalizeDates(options?.in, laterDate, laterDate, earlierDate);
|
|
18057
|
+
const sign = compareAsc(workingLaterDate, earlierDate_);
|
|
18058
|
+
const difference = Math.abs(differenceInCalendarMonths(workingLaterDate, earlierDate_));
|
|
18059
|
+
if (difference < 1)
|
|
18060
|
+
return 0;
|
|
18061
|
+
if (workingLaterDate.getMonth() === 1 && workingLaterDate.getDate() > 27)
|
|
18062
|
+
workingLaterDate.setDate(30);
|
|
18063
|
+
workingLaterDate.setMonth(workingLaterDate.getMonth() - sign * difference);
|
|
18064
|
+
let isLastMonthNotFull = compareAsc(workingLaterDate, earlierDate_) === -sign;
|
|
18065
|
+
if (isLastDayOfMonth(laterDate_) && difference === 1 && compareAsc(laterDate_, earlierDate_) === 1) {
|
|
18066
|
+
isLastMonthNotFull = false;
|
|
18067
|
+
}
|
|
18068
|
+
const result = sign * (difference - +isLastMonthNotFull);
|
|
18069
|
+
return result === 0 ? 0 : result;
|
|
18070
|
+
}
|
|
18071
|
+
|
|
18072
|
+
// node_modules/date-fns/differenceInSeconds.js
|
|
18073
|
+
function differenceInSeconds(laterDate, earlierDate, options) {
|
|
18074
|
+
const diff = differenceInMilliseconds(laterDate, earlierDate) / 1000;
|
|
18075
|
+
return getRoundingMethod(options?.roundingMethod)(diff);
|
|
18076
|
+
}
|
|
18077
|
+
|
|
18078
|
+
// node_modules/date-fns/locale/en-US/_lib/formatDistance.js
|
|
18079
|
+
var formatDistanceLocale = {
|
|
18080
|
+
lessThanXSeconds: {
|
|
18081
|
+
one: "less than a second",
|
|
18082
|
+
other: "less than {{count}} seconds"
|
|
18083
|
+
},
|
|
18084
|
+
xSeconds: {
|
|
18085
|
+
one: "1 second",
|
|
18086
|
+
other: "{{count}} seconds"
|
|
18087
|
+
},
|
|
18088
|
+
halfAMinute: "half a minute",
|
|
18089
|
+
lessThanXMinutes: {
|
|
18090
|
+
one: "less than a minute",
|
|
18091
|
+
other: "less than {{count}} minutes"
|
|
18092
|
+
},
|
|
18093
|
+
xMinutes: {
|
|
18094
|
+
one: "1 minute",
|
|
18095
|
+
other: "{{count}} minutes"
|
|
18096
|
+
},
|
|
18097
|
+
aboutXHours: {
|
|
18098
|
+
one: "about 1 hour",
|
|
18099
|
+
other: "about {{count}} hours"
|
|
18100
|
+
},
|
|
18101
|
+
xHours: {
|
|
18102
|
+
one: "1 hour",
|
|
18103
|
+
other: "{{count}} hours"
|
|
18104
|
+
},
|
|
18105
|
+
xDays: {
|
|
18106
|
+
one: "1 day",
|
|
18107
|
+
other: "{{count}} days"
|
|
18108
|
+
},
|
|
18109
|
+
aboutXWeeks: {
|
|
18110
|
+
one: "about 1 week",
|
|
18111
|
+
other: "about {{count}} weeks"
|
|
18112
|
+
},
|
|
18113
|
+
xWeeks: {
|
|
18114
|
+
one: "1 week",
|
|
18115
|
+
other: "{{count}} weeks"
|
|
18116
|
+
},
|
|
18117
|
+
aboutXMonths: {
|
|
18118
|
+
one: "about 1 month",
|
|
18119
|
+
other: "about {{count}} months"
|
|
18120
|
+
},
|
|
18121
|
+
xMonths: {
|
|
18122
|
+
one: "1 month",
|
|
18123
|
+
other: "{{count}} months"
|
|
18124
|
+
},
|
|
18125
|
+
aboutXYears: {
|
|
18126
|
+
one: "about 1 year",
|
|
18127
|
+
other: "about {{count}} years"
|
|
18128
|
+
},
|
|
18129
|
+
xYears: {
|
|
18130
|
+
one: "1 year",
|
|
18131
|
+
other: "{{count}} years"
|
|
18132
|
+
},
|
|
18133
|
+
overXYears: {
|
|
18134
|
+
one: "over 1 year",
|
|
18135
|
+
other: "over {{count}} years"
|
|
18136
|
+
},
|
|
18137
|
+
almostXYears: {
|
|
18138
|
+
one: "almost 1 year",
|
|
18139
|
+
other: "almost {{count}} years"
|
|
18140
|
+
}
|
|
18141
|
+
};
|
|
18142
|
+
var formatDistance = (token, count, options) => {
|
|
18143
|
+
let result;
|
|
18144
|
+
const tokenValue = formatDistanceLocale[token];
|
|
18145
|
+
if (typeof tokenValue === "string") {
|
|
18146
|
+
result = tokenValue;
|
|
18147
|
+
} else if (count === 1) {
|
|
18148
|
+
result = tokenValue.one;
|
|
18149
|
+
} else {
|
|
18150
|
+
result = tokenValue.other.replace("{{count}}", count.toString());
|
|
18151
|
+
}
|
|
18152
|
+
if (options?.addSuffix) {
|
|
18153
|
+
if (options.comparison && options.comparison > 0) {
|
|
18154
|
+
return "in " + result;
|
|
18155
|
+
} else {
|
|
18156
|
+
return result + " ago";
|
|
18157
|
+
}
|
|
18158
|
+
}
|
|
18159
|
+
return result;
|
|
18160
|
+
};
|
|
18161
|
+
|
|
18162
|
+
// node_modules/date-fns/locale/_lib/buildFormatLongFn.js
|
|
18163
|
+
function buildFormatLongFn(args) {
|
|
18164
|
+
return (options = {}) => {
|
|
18165
|
+
const width = options.width ? String(options.width) : args.defaultWidth;
|
|
18166
|
+
const format = args.formats[width] || args.formats[args.defaultWidth];
|
|
18167
|
+
return format;
|
|
18168
|
+
};
|
|
18169
|
+
}
|
|
18170
|
+
|
|
18171
|
+
// node_modules/date-fns/locale/en-US/_lib/formatLong.js
|
|
18172
|
+
var dateFormats = {
|
|
18173
|
+
full: "EEEE, MMMM do, y",
|
|
18174
|
+
long: "MMMM do, y",
|
|
18175
|
+
medium: "MMM d, y",
|
|
18176
|
+
short: "MM/dd/yyyy"
|
|
18177
|
+
};
|
|
18178
|
+
var timeFormats = {
|
|
18179
|
+
full: "h:mm:ss a zzzz",
|
|
18180
|
+
long: "h:mm:ss a z",
|
|
18181
|
+
medium: "h:mm:ss a",
|
|
18182
|
+
short: "h:mm a"
|
|
18183
|
+
};
|
|
18184
|
+
var dateTimeFormats = {
|
|
18185
|
+
full: "{{date}} 'at' {{time}}",
|
|
18186
|
+
long: "{{date}} 'at' {{time}}",
|
|
18187
|
+
medium: "{{date}}, {{time}}",
|
|
18188
|
+
short: "{{date}}, {{time}}"
|
|
18189
|
+
};
|
|
18190
|
+
var formatLong = {
|
|
18191
|
+
date: buildFormatLongFn({
|
|
18192
|
+
formats: dateFormats,
|
|
18193
|
+
defaultWidth: "full"
|
|
18194
|
+
}),
|
|
18195
|
+
time: buildFormatLongFn({
|
|
18196
|
+
formats: timeFormats,
|
|
18197
|
+
defaultWidth: "full"
|
|
18198
|
+
}),
|
|
18199
|
+
dateTime: buildFormatLongFn({
|
|
18200
|
+
formats: dateTimeFormats,
|
|
18201
|
+
defaultWidth: "full"
|
|
18202
|
+
})
|
|
18203
|
+
};
|
|
18204
|
+
|
|
18205
|
+
// node_modules/date-fns/locale/en-US/_lib/formatRelative.js
|
|
18206
|
+
var formatRelativeLocale = {
|
|
18207
|
+
lastWeek: "'last' eeee 'at' p",
|
|
18208
|
+
yesterday: "'yesterday at' p",
|
|
18209
|
+
today: "'today at' p",
|
|
18210
|
+
tomorrow: "'tomorrow at' p",
|
|
18211
|
+
nextWeek: "eeee 'at' p",
|
|
18212
|
+
other: "P"
|
|
18213
|
+
};
|
|
18214
|
+
var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token];
|
|
18215
|
+
|
|
18216
|
+
// node_modules/date-fns/locale/_lib/buildLocalizeFn.js
|
|
18217
|
+
function buildLocalizeFn(args) {
|
|
18218
|
+
return (value, options) => {
|
|
18219
|
+
const context = options?.context ? String(options.context) : "standalone";
|
|
18220
|
+
let valuesArray;
|
|
18221
|
+
if (context === "formatting" && args.formattingValues) {
|
|
18222
|
+
const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
|
|
18223
|
+
const width = options?.width ? String(options.width) : defaultWidth;
|
|
18224
|
+
valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
|
|
18225
|
+
} else {
|
|
18226
|
+
const defaultWidth = args.defaultWidth;
|
|
18227
|
+
const width = options?.width ? String(options.width) : args.defaultWidth;
|
|
18228
|
+
valuesArray = args.values[width] || args.values[defaultWidth];
|
|
18229
|
+
}
|
|
18230
|
+
const index = args.argumentCallback ? args.argumentCallback(value) : value;
|
|
18231
|
+
return valuesArray[index];
|
|
18232
|
+
};
|
|
18233
|
+
}
|
|
18234
|
+
|
|
18235
|
+
// node_modules/date-fns/locale/en-US/_lib/localize.js
|
|
18236
|
+
var eraValues = {
|
|
18237
|
+
narrow: ["B", "A"],
|
|
18238
|
+
abbreviated: ["BC", "AD"],
|
|
18239
|
+
wide: ["Before Christ", "Anno Domini"]
|
|
18240
|
+
};
|
|
18241
|
+
var quarterValues = {
|
|
18242
|
+
narrow: ["1", "2", "3", "4"],
|
|
18243
|
+
abbreviated: ["Q1", "Q2", "Q3", "Q4"],
|
|
18244
|
+
wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]
|
|
18245
|
+
};
|
|
18246
|
+
var monthValues = {
|
|
18247
|
+
narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
|
|
18248
|
+
abbreviated: [
|
|
18249
|
+
"Jan",
|
|
18250
|
+
"Feb",
|
|
18251
|
+
"Mar",
|
|
18252
|
+
"Apr",
|
|
18253
|
+
"May",
|
|
18254
|
+
"Jun",
|
|
18255
|
+
"Jul",
|
|
18256
|
+
"Aug",
|
|
18257
|
+
"Sep",
|
|
18258
|
+
"Oct",
|
|
18259
|
+
"Nov",
|
|
18260
|
+
"Dec"
|
|
18261
|
+
],
|
|
18262
|
+
wide: [
|
|
18263
|
+
"January",
|
|
18264
|
+
"February",
|
|
18265
|
+
"March",
|
|
18266
|
+
"April",
|
|
18267
|
+
"May",
|
|
18268
|
+
"June",
|
|
18269
|
+
"July",
|
|
18270
|
+
"August",
|
|
18271
|
+
"September",
|
|
18272
|
+
"October",
|
|
18273
|
+
"November",
|
|
18274
|
+
"December"
|
|
18275
|
+
]
|
|
18276
|
+
};
|
|
18277
|
+
var dayValues = {
|
|
18278
|
+
narrow: ["S", "M", "T", "W", "T", "F", "S"],
|
|
18279
|
+
short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
|
|
18280
|
+
abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
|
|
18281
|
+
wide: [
|
|
18282
|
+
"Sunday",
|
|
18283
|
+
"Monday",
|
|
18284
|
+
"Tuesday",
|
|
18285
|
+
"Wednesday",
|
|
18286
|
+
"Thursday",
|
|
18287
|
+
"Friday",
|
|
18288
|
+
"Saturday"
|
|
18289
|
+
]
|
|
18290
|
+
};
|
|
18291
|
+
var dayPeriodValues = {
|
|
18292
|
+
narrow: {
|
|
18293
|
+
am: "a",
|
|
18294
|
+
pm: "p",
|
|
18295
|
+
midnight: "mi",
|
|
18296
|
+
noon: "n",
|
|
18297
|
+
morning: "morning",
|
|
18298
|
+
afternoon: "afternoon",
|
|
18299
|
+
evening: "evening",
|
|
18300
|
+
night: "night"
|
|
18301
|
+
},
|
|
18302
|
+
abbreviated: {
|
|
18303
|
+
am: "AM",
|
|
18304
|
+
pm: "PM",
|
|
18305
|
+
midnight: "midnight",
|
|
18306
|
+
noon: "noon",
|
|
18307
|
+
morning: "morning",
|
|
18308
|
+
afternoon: "afternoon",
|
|
18309
|
+
evening: "evening",
|
|
18310
|
+
night: "night"
|
|
18311
|
+
},
|
|
18312
|
+
wide: {
|
|
18313
|
+
am: "a.m.",
|
|
18314
|
+
pm: "p.m.",
|
|
18315
|
+
midnight: "midnight",
|
|
18316
|
+
noon: "noon",
|
|
18317
|
+
morning: "morning",
|
|
18318
|
+
afternoon: "afternoon",
|
|
18319
|
+
evening: "evening",
|
|
18320
|
+
night: "night"
|
|
18321
|
+
}
|
|
18322
|
+
};
|
|
18323
|
+
var formattingDayPeriodValues = {
|
|
18324
|
+
narrow: {
|
|
18325
|
+
am: "a",
|
|
18326
|
+
pm: "p",
|
|
18327
|
+
midnight: "mi",
|
|
18328
|
+
noon: "n",
|
|
18329
|
+
morning: "in the morning",
|
|
18330
|
+
afternoon: "in the afternoon",
|
|
18331
|
+
evening: "in the evening",
|
|
18332
|
+
night: "at night"
|
|
18333
|
+
},
|
|
18334
|
+
abbreviated: {
|
|
18335
|
+
am: "AM",
|
|
18336
|
+
pm: "PM",
|
|
18337
|
+
midnight: "midnight",
|
|
18338
|
+
noon: "noon",
|
|
18339
|
+
morning: "in the morning",
|
|
18340
|
+
afternoon: "in the afternoon",
|
|
18341
|
+
evening: "in the evening",
|
|
18342
|
+
night: "at night"
|
|
18343
|
+
},
|
|
18344
|
+
wide: {
|
|
18345
|
+
am: "a.m.",
|
|
18346
|
+
pm: "p.m.",
|
|
18347
|
+
midnight: "midnight",
|
|
18348
|
+
noon: "noon",
|
|
18349
|
+
morning: "in the morning",
|
|
18350
|
+
afternoon: "in the afternoon",
|
|
18351
|
+
evening: "in the evening",
|
|
18352
|
+
night: "at night"
|
|
18353
|
+
}
|
|
18354
|
+
};
|
|
18355
|
+
var ordinalNumber = (dirtyNumber, _options) => {
|
|
18356
|
+
const number = Number(dirtyNumber);
|
|
18357
|
+
const rem100 = number % 100;
|
|
18358
|
+
if (rem100 > 20 || rem100 < 10) {
|
|
18359
|
+
switch (rem100 % 10) {
|
|
18360
|
+
case 1:
|
|
18361
|
+
return number + "st";
|
|
18362
|
+
case 2:
|
|
18363
|
+
return number + "nd";
|
|
18364
|
+
case 3:
|
|
18365
|
+
return number + "rd";
|
|
18366
|
+
}
|
|
18367
|
+
}
|
|
18368
|
+
return number + "th";
|
|
18369
|
+
};
|
|
18370
|
+
var localize = {
|
|
18371
|
+
ordinalNumber,
|
|
18372
|
+
era: buildLocalizeFn({
|
|
18373
|
+
values: eraValues,
|
|
18374
|
+
defaultWidth: "wide"
|
|
18375
|
+
}),
|
|
18376
|
+
quarter: buildLocalizeFn({
|
|
18377
|
+
values: quarterValues,
|
|
18378
|
+
defaultWidth: "wide",
|
|
18379
|
+
argumentCallback: (quarter) => quarter - 1
|
|
18380
|
+
}),
|
|
18381
|
+
month: buildLocalizeFn({
|
|
18382
|
+
values: monthValues,
|
|
18383
|
+
defaultWidth: "wide"
|
|
18384
|
+
}),
|
|
18385
|
+
day: buildLocalizeFn({
|
|
18386
|
+
values: dayValues,
|
|
18387
|
+
defaultWidth: "wide"
|
|
18388
|
+
}),
|
|
18389
|
+
dayPeriod: buildLocalizeFn({
|
|
18390
|
+
values: dayPeriodValues,
|
|
18391
|
+
defaultWidth: "wide",
|
|
18392
|
+
formattingValues: formattingDayPeriodValues,
|
|
18393
|
+
defaultFormattingWidth: "wide"
|
|
18394
|
+
})
|
|
18395
|
+
};
|
|
18396
|
+
|
|
18397
|
+
// node_modules/date-fns/locale/_lib/buildMatchFn.js
|
|
18398
|
+
function buildMatchFn(args) {
|
|
18399
|
+
return (string, options = {}) => {
|
|
18400
|
+
const width = options.width;
|
|
18401
|
+
const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
|
|
18402
|
+
const matchResult = string.match(matchPattern);
|
|
18403
|
+
if (!matchResult) {
|
|
18404
|
+
return null;
|
|
18405
|
+
}
|
|
18406
|
+
const matchedString = matchResult[0];
|
|
18407
|
+
const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
|
|
18408
|
+
const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : findKey(parsePatterns, (pattern) => pattern.test(matchedString));
|
|
18409
|
+
let value;
|
|
18410
|
+
value = args.valueCallback ? args.valueCallback(key) : key;
|
|
18411
|
+
value = options.valueCallback ? options.valueCallback(value) : value;
|
|
18412
|
+
const rest = string.slice(matchedString.length);
|
|
18413
|
+
return { value, rest };
|
|
18414
|
+
};
|
|
18415
|
+
}
|
|
18416
|
+
function findKey(object, predicate) {
|
|
18417
|
+
for (const key in object) {
|
|
18418
|
+
if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) {
|
|
18419
|
+
return key;
|
|
18420
|
+
}
|
|
18421
|
+
}
|
|
18422
|
+
return;
|
|
18423
|
+
}
|
|
18424
|
+
function findIndex(array, predicate) {
|
|
18425
|
+
for (let key = 0;key < array.length; key++) {
|
|
18426
|
+
if (predicate(array[key])) {
|
|
18427
|
+
return key;
|
|
18428
|
+
}
|
|
18429
|
+
}
|
|
18430
|
+
return;
|
|
18431
|
+
}
|
|
18432
|
+
|
|
18433
|
+
// node_modules/date-fns/locale/_lib/buildMatchPatternFn.js
|
|
18434
|
+
function buildMatchPatternFn(args) {
|
|
18435
|
+
return (string, options = {}) => {
|
|
18436
|
+
const matchResult = string.match(args.matchPattern);
|
|
18437
|
+
if (!matchResult)
|
|
18438
|
+
return null;
|
|
18439
|
+
const matchedString = matchResult[0];
|
|
18440
|
+
const parseResult = string.match(args.parsePattern);
|
|
18441
|
+
if (!parseResult)
|
|
18442
|
+
return null;
|
|
18443
|
+
let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
|
|
18444
|
+
value = options.valueCallback ? options.valueCallback(value) : value;
|
|
18445
|
+
const rest = string.slice(matchedString.length);
|
|
18446
|
+
return { value, rest };
|
|
18447
|
+
};
|
|
18448
|
+
}
|
|
18449
|
+
|
|
18450
|
+
// node_modules/date-fns/locale/en-US/_lib/match.js
|
|
18451
|
+
var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
|
|
18452
|
+
var parseOrdinalNumberPattern = /\d+/i;
|
|
18453
|
+
var matchEraPatterns = {
|
|
18454
|
+
narrow: /^(b|a)/i,
|
|
18455
|
+
abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
|
|
18456
|
+
wide: /^(before christ|before common era|anno domini|common era)/i
|
|
18457
|
+
};
|
|
18458
|
+
var parseEraPatterns = {
|
|
18459
|
+
any: [/^b/i, /^(a|c)/i]
|
|
18460
|
+
};
|
|
18461
|
+
var matchQuarterPatterns = {
|
|
18462
|
+
narrow: /^[1234]/i,
|
|
18463
|
+
abbreviated: /^q[1234]/i,
|
|
18464
|
+
wide: /^[1234](th|st|nd|rd)? quarter/i
|
|
18465
|
+
};
|
|
18466
|
+
var parseQuarterPatterns = {
|
|
18467
|
+
any: [/1/i, /2/i, /3/i, /4/i]
|
|
18468
|
+
};
|
|
18469
|
+
var matchMonthPatterns = {
|
|
18470
|
+
narrow: /^[jfmasond]/i,
|
|
18471
|
+
abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
|
|
18472
|
+
wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
|
|
18473
|
+
};
|
|
18474
|
+
var parseMonthPatterns = {
|
|
18475
|
+
narrow: [
|
|
18476
|
+
/^j/i,
|
|
18477
|
+
/^f/i,
|
|
18478
|
+
/^m/i,
|
|
18479
|
+
/^a/i,
|
|
18480
|
+
/^m/i,
|
|
18481
|
+
/^j/i,
|
|
18482
|
+
/^j/i,
|
|
18483
|
+
/^a/i,
|
|
18484
|
+
/^s/i,
|
|
18485
|
+
/^o/i,
|
|
18486
|
+
/^n/i,
|
|
18487
|
+
/^d/i
|
|
18488
|
+
],
|
|
18489
|
+
any: [
|
|
18490
|
+
/^ja/i,
|
|
18491
|
+
/^f/i,
|
|
18492
|
+
/^mar/i,
|
|
18493
|
+
/^ap/i,
|
|
18494
|
+
/^may/i,
|
|
18495
|
+
/^jun/i,
|
|
18496
|
+
/^jul/i,
|
|
18497
|
+
/^au/i,
|
|
18498
|
+
/^s/i,
|
|
18499
|
+
/^o/i,
|
|
18500
|
+
/^n/i,
|
|
18501
|
+
/^d/i
|
|
18502
|
+
]
|
|
18503
|
+
};
|
|
18504
|
+
var matchDayPatterns = {
|
|
18505
|
+
narrow: /^[smtwf]/i,
|
|
18506
|
+
short: /^(su|mo|tu|we|th|fr|sa)/i,
|
|
18507
|
+
abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
|
|
18508
|
+
wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
|
|
18509
|
+
};
|
|
18510
|
+
var parseDayPatterns = {
|
|
18511
|
+
narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
|
|
18512
|
+
any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
|
|
18513
|
+
};
|
|
18514
|
+
var matchDayPeriodPatterns = {
|
|
18515
|
+
narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
|
|
18516
|
+
any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
|
|
18517
|
+
};
|
|
18518
|
+
var parseDayPeriodPatterns = {
|
|
18519
|
+
any: {
|
|
18520
|
+
am: /^a/i,
|
|
18521
|
+
pm: /^p/i,
|
|
18522
|
+
midnight: /^mi/i,
|
|
18523
|
+
noon: /^no/i,
|
|
18524
|
+
morning: /morning/i,
|
|
18525
|
+
afternoon: /afternoon/i,
|
|
18526
|
+
evening: /evening/i,
|
|
18527
|
+
night: /night/i
|
|
18528
|
+
}
|
|
18529
|
+
};
|
|
18530
|
+
var match = {
|
|
18531
|
+
ordinalNumber: buildMatchPatternFn({
|
|
18532
|
+
matchPattern: matchOrdinalNumberPattern,
|
|
18533
|
+
parsePattern: parseOrdinalNumberPattern,
|
|
18534
|
+
valueCallback: (value) => parseInt(value, 10)
|
|
18535
|
+
}),
|
|
18536
|
+
era: buildMatchFn({
|
|
18537
|
+
matchPatterns: matchEraPatterns,
|
|
18538
|
+
defaultMatchWidth: "wide",
|
|
18539
|
+
parsePatterns: parseEraPatterns,
|
|
18540
|
+
defaultParseWidth: "any"
|
|
18541
|
+
}),
|
|
18542
|
+
quarter: buildMatchFn({
|
|
18543
|
+
matchPatterns: matchQuarterPatterns,
|
|
18544
|
+
defaultMatchWidth: "wide",
|
|
18545
|
+
parsePatterns: parseQuarterPatterns,
|
|
18546
|
+
defaultParseWidth: "any",
|
|
18547
|
+
valueCallback: (index) => index + 1
|
|
18548
|
+
}),
|
|
18549
|
+
month: buildMatchFn({
|
|
18550
|
+
matchPatterns: matchMonthPatterns,
|
|
18551
|
+
defaultMatchWidth: "wide",
|
|
18552
|
+
parsePatterns: parseMonthPatterns,
|
|
18553
|
+
defaultParseWidth: "any"
|
|
18554
|
+
}),
|
|
18555
|
+
day: buildMatchFn({
|
|
18556
|
+
matchPatterns: matchDayPatterns,
|
|
18557
|
+
defaultMatchWidth: "wide",
|
|
18558
|
+
parsePatterns: parseDayPatterns,
|
|
18559
|
+
defaultParseWidth: "any"
|
|
18560
|
+
}),
|
|
18561
|
+
dayPeriod: buildMatchFn({
|
|
18562
|
+
matchPatterns: matchDayPeriodPatterns,
|
|
18563
|
+
defaultMatchWidth: "any",
|
|
18564
|
+
parsePatterns: parseDayPeriodPatterns,
|
|
18565
|
+
defaultParseWidth: "any"
|
|
18566
|
+
})
|
|
18567
|
+
};
|
|
18568
|
+
|
|
18569
|
+
// node_modules/date-fns/locale/en-US.js
|
|
18570
|
+
var enUS = {
|
|
18571
|
+
code: "en-US",
|
|
18572
|
+
formatDistance,
|
|
18573
|
+
formatLong,
|
|
18574
|
+
formatRelative,
|
|
18575
|
+
localize,
|
|
18576
|
+
match,
|
|
18577
|
+
options: {
|
|
18578
|
+
weekStartsOn: 0,
|
|
18579
|
+
firstWeekContainsDate: 1
|
|
18580
|
+
}
|
|
18581
|
+
};
|
|
18582
|
+
// node_modules/date-fns/formatDistance.js
|
|
18583
|
+
function formatDistance2(laterDate, earlierDate, options) {
|
|
18584
|
+
const defaultOptions = getDefaultOptions();
|
|
18585
|
+
const locale = options?.locale ?? defaultOptions.locale ?? enUS;
|
|
18586
|
+
const minutesInAlmostTwoDays = 2520;
|
|
18587
|
+
const comparison = compareAsc(laterDate, earlierDate);
|
|
18588
|
+
if (isNaN(comparison))
|
|
18589
|
+
throw new RangeError("Invalid time value");
|
|
18590
|
+
const localizeOptions = Object.assign({}, options, {
|
|
18591
|
+
addSuffix: options?.addSuffix,
|
|
18592
|
+
comparison
|
|
18593
|
+
});
|
|
18594
|
+
const [laterDate_, earlierDate_] = normalizeDates(options?.in, ...comparison > 0 ? [earlierDate, laterDate] : [laterDate, earlierDate]);
|
|
18595
|
+
const seconds = differenceInSeconds(earlierDate_, laterDate_);
|
|
18596
|
+
const offsetInSeconds = (getTimezoneOffsetInMilliseconds(earlierDate_) - getTimezoneOffsetInMilliseconds(laterDate_)) / 1000;
|
|
18597
|
+
const minutes = Math.round((seconds - offsetInSeconds) / 60);
|
|
18598
|
+
let months;
|
|
18599
|
+
if (minutes < 2) {
|
|
18600
|
+
if (options?.includeSeconds) {
|
|
18601
|
+
if (seconds < 5) {
|
|
18602
|
+
return locale.formatDistance("lessThanXSeconds", 5, localizeOptions);
|
|
18603
|
+
} else if (seconds < 10) {
|
|
18604
|
+
return locale.formatDistance("lessThanXSeconds", 10, localizeOptions);
|
|
18605
|
+
} else if (seconds < 20) {
|
|
18606
|
+
return locale.formatDistance("lessThanXSeconds", 20, localizeOptions);
|
|
18607
|
+
} else if (seconds < 40) {
|
|
18608
|
+
return locale.formatDistance("halfAMinute", 0, localizeOptions);
|
|
18609
|
+
} else if (seconds < 60) {
|
|
18610
|
+
return locale.formatDistance("lessThanXMinutes", 1, localizeOptions);
|
|
18611
|
+
} else {
|
|
18612
|
+
return locale.formatDistance("xMinutes", 1, localizeOptions);
|
|
18613
|
+
}
|
|
18614
|
+
} else {
|
|
18615
|
+
if (minutes === 0) {
|
|
18616
|
+
return locale.formatDistance("lessThanXMinutes", 1, localizeOptions);
|
|
18617
|
+
} else {
|
|
18618
|
+
return locale.formatDistance("xMinutes", minutes, localizeOptions);
|
|
18619
|
+
}
|
|
18620
|
+
}
|
|
18621
|
+
} else if (minutes < 45) {
|
|
18622
|
+
return locale.formatDistance("xMinutes", minutes, localizeOptions);
|
|
18623
|
+
} else if (minutes < 90) {
|
|
18624
|
+
return locale.formatDistance("aboutXHours", 1, localizeOptions);
|
|
18625
|
+
} else if (minutes < minutesInDay) {
|
|
18626
|
+
const hours = Math.round(minutes / 60);
|
|
18627
|
+
return locale.formatDistance("aboutXHours", hours, localizeOptions);
|
|
18628
|
+
} else if (minutes < minutesInAlmostTwoDays) {
|
|
18629
|
+
return locale.formatDistance("xDays", 1, localizeOptions);
|
|
18630
|
+
} else if (minutes < minutesInMonth) {
|
|
18631
|
+
const days = Math.round(minutes / minutesInDay);
|
|
18632
|
+
return locale.formatDistance("xDays", days, localizeOptions);
|
|
18633
|
+
} else if (minutes < minutesInMonth * 2) {
|
|
18634
|
+
months = Math.round(minutes / minutesInMonth);
|
|
18635
|
+
return locale.formatDistance("aboutXMonths", months, localizeOptions);
|
|
18636
|
+
}
|
|
18637
|
+
months = differenceInMonths(earlierDate_, laterDate_);
|
|
18638
|
+
if (months < 12) {
|
|
18639
|
+
const nearestMonth = Math.round(minutes / minutesInMonth);
|
|
18640
|
+
return locale.formatDistance("xMonths", nearestMonth, localizeOptions);
|
|
18641
|
+
} else {
|
|
18642
|
+
const monthsSinceStartOfYear = months % 12;
|
|
18643
|
+
const years = Math.trunc(months / 12);
|
|
18644
|
+
if (monthsSinceStartOfYear < 3) {
|
|
18645
|
+
return locale.formatDistance("aboutXYears", years, localizeOptions);
|
|
18646
|
+
} else if (monthsSinceStartOfYear < 9) {
|
|
18647
|
+
return locale.formatDistance("overXYears", years, localizeOptions);
|
|
18648
|
+
} else {
|
|
18649
|
+
return locale.formatDistance("almostXYears", years + 1, localizeOptions);
|
|
18650
|
+
}
|
|
18651
|
+
}
|
|
18652
|
+
}
|
|
18653
|
+
|
|
18654
|
+
// node_modules/date-fns/formatDistanceToNow.js
|
|
18655
|
+
function formatDistanceToNow(date, options) {
|
|
18656
|
+
return formatDistance2(date, constructNow(date), options);
|
|
18657
|
+
}
|
|
18658
|
+
|
|
18659
|
+
// src/program/commands/log/command.ts
|
|
18660
|
+
var logCommand = new Command("log").description("Show commit logs across all repositories").argument("[rev]", "the revision or revision range to log").option("--after <date>", "show commits more recent than a specific date").option("--before <date>", "show commits older than a specific date").option("--exact-date", "show the exact commit date instead of a relative time").option("--author", "show the author of each commit").action(async (rev, options) => {
|
|
18661
|
+
const programOptions = getProgramOptions();
|
|
18662
|
+
const root = process.cwd();
|
|
18663
|
+
const logArgs = [
|
|
18664
|
+
...rev ? [rev] : [],
|
|
18665
|
+
...options.after ? [`--after=${options.after}`] : [],
|
|
18666
|
+
...options.before ? [`--before=${options.before}`] : []
|
|
18667
|
+
];
|
|
18668
|
+
const log = await forEachRepo(root, async ({ path, git }) => {
|
|
18669
|
+
const result = await git.log(["--stat=4096", ...logArgs]).catch(catchError);
|
|
18670
|
+
if (result instanceof Error) {
|
|
18671
|
+
return reportRepoError(path.relative, result);
|
|
18672
|
+
}
|
|
18673
|
+
if (result.all.length === 0) {
|
|
18674
|
+
return null;
|
|
18675
|
+
}
|
|
18676
|
+
return { path: path.relative, log: result };
|
|
18677
|
+
}, programOptions);
|
|
18678
|
+
const logs = filterNotNull(log);
|
|
18679
|
+
if (logs.length === 0) {
|
|
18680
|
+
return;
|
|
18681
|
+
}
|
|
18682
|
+
const rows = [];
|
|
18683
|
+
for (const { path, log } of logs) {
|
|
18684
|
+
for (const entry of log.all) {
|
|
18685
|
+
rows.push({
|
|
18686
|
+
path,
|
|
18687
|
+
hash: entry.hash.slice(0, 7),
|
|
18688
|
+
message: entry.message,
|
|
18689
|
+
date: options.exactDate ? entry.date : formatDistanceToNow(new Date(entry.date), {
|
|
18690
|
+
addSuffix: true
|
|
18691
|
+
}),
|
|
18692
|
+
time: new Date(entry.date).getTime(),
|
|
18693
|
+
author: entry.author_name,
|
|
18694
|
+
files: entry.diff?.changed ?? 0,
|
|
18695
|
+
insertions: entry.diff?.insertions ?? 0,
|
|
18696
|
+
deletions: entry.diff?.deletions ?? 0
|
|
18697
|
+
});
|
|
18698
|
+
}
|
|
18699
|
+
}
|
|
18700
|
+
rows.sort((a, b) => b.time - a.time);
|
|
18701
|
+
const head = [
|
|
18702
|
+
"path",
|
|
18703
|
+
"hash",
|
|
18704
|
+
"date",
|
|
18705
|
+
...options.author ? ["author"] : [],
|
|
18706
|
+
"message",
|
|
18707
|
+
"files",
|
|
18708
|
+
"insertions",
|
|
18709
|
+
"deletions"
|
|
18710
|
+
];
|
|
18711
|
+
const table = new CliTable({
|
|
18712
|
+
head
|
|
18713
|
+
});
|
|
18714
|
+
for (const row of rows) {
|
|
18715
|
+
table.push([
|
|
18716
|
+
row.path,
|
|
18717
|
+
row.hash,
|
|
18718
|
+
c3.gray(row.date),
|
|
18719
|
+
...options.author ? [row.author] : [],
|
|
18720
|
+
row.message,
|
|
18721
|
+
String(row.files),
|
|
18722
|
+
c3.green(`+${row.insertions}`),
|
|
18723
|
+
c3.red(`-${row.deletions}`)
|
|
18724
|
+
]);
|
|
17600
18725
|
}
|
|
17601
18726
|
console.log(table.toString());
|
|
17602
18727
|
});
|
|
@@ -17608,7 +18733,7 @@ var getPullSummary = (result) => {
|
|
|
17608
18733
|
}
|
|
17609
18734
|
const { insertions, deletions } = result.summary;
|
|
17610
18735
|
const chunks = [
|
|
17611
|
-
`${result.files.length
|
|
18736
|
+
`${pluralize("file", result.files.length, true)} changed`,
|
|
17612
18737
|
insertions ? `+${insertions}` : null,
|
|
17613
18738
|
deletions ? `-${deletions}` : null
|
|
17614
18739
|
];
|
|
@@ -17618,13 +18743,18 @@ var pullCommand = new Command("pull").description("Fetch from and integrate with
|
|
|
17618
18743
|
const programOptions = getProgramOptions();
|
|
17619
18744
|
const root = process.cwd();
|
|
17620
18745
|
const table = new CliTable({ head: ["path", "result"] });
|
|
17621
|
-
|
|
18746
|
+
let failed = false;
|
|
18747
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17622
18748
|
const result = await git.pull(remote ?? undefined, branch ?? undefined).catch(catchError);
|
|
17623
18749
|
if (result instanceof Error) {
|
|
17624
|
-
|
|
18750
|
+
failed = true;
|
|
18751
|
+
return reportRepoError(path.relative, result);
|
|
17625
18752
|
}
|
|
17626
18753
|
return [path.relative, getPullSummary(result)];
|
|
17627
18754
|
}, programOptions);
|
|
18755
|
+
if (failed) {
|
|
18756
|
+
process.exitCode = 1;
|
|
18757
|
+
}
|
|
17628
18758
|
table.push(...filterNotNull(results));
|
|
17629
18759
|
console.log(table.toString());
|
|
17630
18760
|
});
|
|
@@ -17680,10 +18810,10 @@ var remoteCommand = new Command("remote").description("List remotes for each rep
|
|
|
17680
18810
|
"name"
|
|
17681
18811
|
]
|
|
17682
18812
|
});
|
|
17683
|
-
const results = await forEachRepo(root,
|
|
18813
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17684
18814
|
const remotes = await git.getRemotes(true).catch(catchError);
|
|
17685
18815
|
if (remotes instanceof Error) {
|
|
17686
|
-
return
|
|
18816
|
+
return reportRepoError(path.relative, remotes);
|
|
17687
18817
|
}
|
|
17688
18818
|
const parsed = parseGitRemoteRefs(remotes);
|
|
17689
18819
|
if (parsed.length === 0) {
|
|
@@ -17711,7 +18841,7 @@ var getStatusSummary = (status) => {
|
|
|
17711
18841
|
return c3.green("clean");
|
|
17712
18842
|
}
|
|
17713
18843
|
if (status.not_added.length) {
|
|
17714
|
-
return c3.red(
|
|
18844
|
+
return c3.red(pluralize("untracked item", status.not_added.length, true));
|
|
17715
18845
|
}
|
|
17716
18846
|
return c3.gray("unknown");
|
|
17717
18847
|
};
|
|
@@ -17721,11 +18851,10 @@ var statusCommand = new Command("status").description("Show the working tree sta
|
|
|
17721
18851
|
const table = new CliTable({
|
|
17722
18852
|
head: ["path", "branch", "tracking", "status"]
|
|
17723
18853
|
});
|
|
17724
|
-
const results = await forEachRepo(root,
|
|
18854
|
+
const results = await forEachRepo(root, async ({ path, git }) => {
|
|
17725
18855
|
const status = await git.status().catch(catchError);
|
|
17726
18856
|
if (status instanceof Error) {
|
|
17727
|
-
|
|
17728
|
-
return null;
|
|
18857
|
+
return reportRepoError(path.relative, status);
|
|
17729
18858
|
}
|
|
17730
18859
|
return [
|
|
17731
18860
|
path.relative,
|
|
@@ -17739,23 +18868,46 @@ var statusCommand = new Command("status").description("Show the working tree sta
|
|
|
17739
18868
|
});
|
|
17740
18869
|
|
|
17741
18870
|
// src/program/options/parallel.ts
|
|
17742
|
-
var
|
|
17743
|
-
|
|
18871
|
+
var toParallel = (value) => {
|
|
18872
|
+
const parallel = Number(value);
|
|
18873
|
+
if (!Number.isInteger(parallel) || parallel < 0) {
|
|
18874
|
+
throw new InvalidArgumentError("expected a non-negative integer (0 = unlimited, 1 = sequential)");
|
|
18875
|
+
}
|
|
18876
|
+
if (parallel === 0) {
|
|
18877
|
+
return Infinity;
|
|
18878
|
+
}
|
|
18879
|
+
return parallel;
|
|
18880
|
+
};
|
|
18881
|
+
var valueDescription = (value) => {
|
|
18882
|
+
switch (true) {
|
|
18883
|
+
case value === 0:
|
|
18884
|
+
return "unlimited";
|
|
18885
|
+
case value === 1:
|
|
18886
|
+
return "sequential";
|
|
18887
|
+
default:
|
|
18888
|
+
return value.toLocaleString();
|
|
18889
|
+
}
|
|
18890
|
+
};
|
|
18891
|
+
var defaultValue = toParallel(await config2.getOption("parallel"));
|
|
18892
|
+
var parallelOption = new Option("--parallel <count>", "run git in parallel, 0 = unlimited").default(defaultValue, valueDescription(defaultValue)).argParser(toParallel);
|
|
17744
18893
|
|
|
17745
18894
|
// src/program/options/where.ts
|
|
17746
18895
|
var defaultWhere = await config2.getOption("where");
|
|
17747
18896
|
var whereOption = new Option("--where <query>", "filter repos by a query string").default(parseQueryString(defaultWhere), defaultWhere || "all repos").argParser((value) => {
|
|
17748
|
-
|
|
17749
|
-
|
|
17750
|
-
|
|
18897
|
+
try {
|
|
18898
|
+
return parseQueryString(value);
|
|
18899
|
+
} catch (error) {
|
|
18900
|
+
if (error instanceof Error) {
|
|
18901
|
+
throw new InvalidArgumentError(error.message);
|
|
18902
|
+
}
|
|
18903
|
+
throw error;
|
|
17751
18904
|
}
|
|
17752
|
-
return parsed;
|
|
17753
18905
|
});
|
|
17754
18906
|
|
|
17755
18907
|
// src/program/index.ts
|
|
17756
18908
|
var program2 = new Command;
|
|
17757
18909
|
var getProgramOptions = () => program2.opts();
|
|
17758
|
-
program2.name("git-swarm").description(package_default.description).version(package_default.version).enablePositionalOptions().addOption(parallelOption).addOption(whereOption).addCommand(checkoutCommand).addCommand(configCommand).addCommand(diffCommand).addCommand(execCommand).addCommand(fetchCommand).addCommand(findBranchCommand).addCommand(grepCommand).addCommand(listCommand).addCommand(pullCommand).addCommand(remoteCommand).addCommand(statusCommand);
|
|
18910
|
+
program2.name("git-swarm").description(package_default.description).version(package_default.version).enablePositionalOptions().addOption(parallelOption).addOption(whereOption).addCommand(checkoutCommand).addCommand(configCommand).addCommand(diffCommand).addCommand(execCommand).addCommand(fetchCommand).addCommand(findBranchCommand).addCommand(grepCommand).addCommand(listCommand).addCommand(logCommand).addCommand(pullCommand).addCommand(remoteCommand).addCommand(statusCommand);
|
|
17759
18911
|
|
|
17760
18912
|
// src/cli.ts
|
|
17761
18913
|
program2.parse();
|