@decaf-ts/utils 1.3.2 → 1.5.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.
Files changed (88) hide show
  1. package/README.md +1 -1
  2. package/dist/utils.cjs +1 -1
  3. package/dist/utils.cjs.map +1 -1
  4. package/dist/utils.js +1 -1
  5. package/dist/utils.js.map +1 -1
  6. package/lib/cjs/bin/modules.cjs +14 -0
  7. package/lib/cjs/bin/modules.cjs.map +1 -0
  8. package/lib/cjs/bin/npm-link.cjs +14 -0
  9. package/lib/cjs/bin/npm-link.cjs.map +1 -0
  10. package/lib/cjs/bin/npm-token.cjs +14 -0
  11. package/lib/cjs/bin/npm-token.cjs.map +1 -0
  12. package/lib/cjs/bin/run-all.cjs +14 -0
  13. package/lib/cjs/bin/run-all.cjs.map +1 -0
  14. package/lib/cjs/cli/commands/help.cjs +29 -0
  15. package/lib/cjs/cli/commands/help.cjs.map +1 -0
  16. package/lib/cjs/cli/commands/index.cjs +5 -0
  17. package/lib/cjs/cli/commands/index.cjs.map +1 -1
  18. package/lib/cjs/cli/commands/modules.cjs +80 -0
  19. package/lib/cjs/cli/commands/modules.cjs.map +1 -0
  20. package/lib/cjs/cli/commands/npm-link.cjs +196 -0
  21. package/lib/cjs/cli/commands/npm-link.cjs.map +1 -0
  22. package/lib/cjs/cli/commands/npm-token.cjs +87 -0
  23. package/lib/cjs/cli/commands/npm-token.cjs.map +1 -0
  24. package/lib/cjs/cli/commands/release-chain.cjs +82 -0
  25. package/lib/cjs/cli/commands/release-chain.cjs.map +1 -1
  26. package/lib/cjs/cli/commands/run-all.cjs +78 -0
  27. package/lib/cjs/cli/commands/run-all.cjs.map +1 -0
  28. package/lib/cjs/cli/commands/tag-release-shell.cjs +229 -0
  29. package/lib/cjs/cli/commands/tag-release-shell.cjs.map +1 -0
  30. package/lib/cjs/cli/commands/tag-release.cjs +33 -2
  31. package/lib/cjs/cli/commands/tag-release.cjs.map +1 -1
  32. package/lib/cjs/index.cjs +1 -1
  33. package/lib/esm/bin/modules.js +10 -0
  34. package/lib/esm/bin/modules.js.map +1 -0
  35. package/lib/esm/bin/npm-link.js +10 -0
  36. package/lib/esm/bin/npm-link.js.map +1 -0
  37. package/lib/esm/bin/npm-token.js +10 -0
  38. package/lib/esm/bin/npm-token.js.map +1 -0
  39. package/lib/esm/bin/run-all.js +10 -0
  40. package/lib/esm/bin/run-all.js.map +1 -0
  41. package/lib/esm/cli/commands/help.js +25 -0
  42. package/lib/esm/cli/commands/help.js.map +1 -0
  43. package/lib/esm/cli/commands/index.js +5 -0
  44. package/lib/esm/cli/commands/index.js.map +1 -1
  45. package/lib/esm/cli/commands/modules.js +70 -0
  46. package/lib/esm/cli/commands/modules.js.map +1 -0
  47. package/lib/esm/cli/commands/npm-link.js +188 -0
  48. package/lib/esm/cli/commands/npm-link.js.map +1 -0
  49. package/lib/esm/cli/commands/npm-token.js +79 -0
  50. package/lib/esm/cli/commands/npm-token.js.map +1 -0
  51. package/lib/esm/cli/commands/release-chain.js +82 -0
  52. package/lib/esm/cli/commands/release-chain.js.map +1 -1
  53. package/lib/esm/cli/commands/run-all.js +70 -0
  54. package/lib/esm/cli/commands/run-all.js.map +1 -0
  55. package/lib/esm/cli/commands/tag-release-shell.js +221 -0
  56. package/lib/esm/cli/commands/tag-release-shell.js.map +1 -0
  57. package/lib/esm/cli/commands/tag-release.js +33 -2
  58. package/lib/esm/cli/commands/tag-release.js.map +1 -1
  59. package/lib/esm/index.js +1 -1
  60. package/lib/types/bin/modules.d.cts +1 -0
  61. package/lib/types/bin/modules.d.mts +1 -0
  62. package/lib/types/bin/npm-link.d.cts +1 -0
  63. package/lib/types/bin/npm-link.d.mts +1 -0
  64. package/lib/types/bin/npm-token.d.cts +1 -0
  65. package/lib/types/bin/npm-token.d.mts +1 -0
  66. package/lib/types/bin/run-all.d.cts +1 -0
  67. package/lib/types/bin/run-all.d.mts +1 -0
  68. package/lib/types/cli/commands/help.d.cts +7 -0
  69. package/lib/types/cli/commands/help.d.mts +7 -0
  70. package/lib/types/cli/commands/index.d.cts +5 -0
  71. package/lib/types/cli/commands/index.d.mts +5 -0
  72. package/lib/types/cli/commands/modules.d.cts +19 -0
  73. package/lib/types/cli/commands/modules.d.mts +19 -0
  74. package/lib/types/cli/commands/npm-link.d.cts +34 -0
  75. package/lib/types/cli/commands/npm-link.d.mts +34 -0
  76. package/lib/types/cli/commands/npm-token.d.cts +23 -0
  77. package/lib/types/cli/commands/npm-token.d.mts +23 -0
  78. package/lib/types/cli/commands/release-chain.d.cts +2 -0
  79. package/lib/types/cli/commands/release-chain.d.mts +2 -0
  80. package/lib/types/cli/commands/run-all.d.cts +22 -0
  81. package/lib/types/cli/commands/run-all.d.mts +22 -0
  82. package/lib/types/cli/commands/tag-release-shell.d.cts +57 -0
  83. package/lib/types/cli/commands/tag-release-shell.d.mts +57 -0
  84. package/lib/types/cli/commands/tag-release.d.cts +1 -0
  85. package/lib/types/cli/commands/tag-release.d.mts +1 -0
  86. package/lib/types/index.d.cts +1 -1
  87. package/lib/types/index.d.mts +1 -1
  88. package/package.json +5 -1
@@ -0,0 +1,188 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { execSync } from "node:child_process";
4
+ import { Command } from "./../command.js";
5
+ import { readGitModulesDeep } from "./modules.js";
6
+ import { printCommandHelp } from "./help.js";
7
+ const options = {
8
+ maxTraversal: {
9
+ type: "string",
10
+ default: "2",
11
+ },
12
+ excludes: {
13
+ type: "string",
14
+ multiple: true,
15
+ default: ["@decaf-ts/utils", "@decaf-ts/logging"],
16
+ },
17
+ include: {
18
+ type: "string",
19
+ multiple: true,
20
+ default: [],
21
+ },
22
+ operation: {
23
+ type: "string",
24
+ default: "link",
25
+ },
26
+ };
27
+ function getScope(packageName) {
28
+ return packageName.split("/")[0] || "";
29
+ }
30
+ function getPackageName(packageName) {
31
+ return packageName.split("/")[1] || packageName;
32
+ }
33
+ function getDependencyList(pkg) {
34
+ return [
35
+ ...Object.keys(pkg.dependencies || {}),
36
+ ...Object.keys(pkg.devDependencies || {}),
37
+ ...Object.keys(pkg.peerDependencies || {}),
38
+ ];
39
+ }
40
+ function normalizeList(value) {
41
+ if (Array.isArray(value)) {
42
+ return value.map((item) => `${item}`.trim()).filter(Boolean);
43
+ }
44
+ if (typeof value === "string" && value.length > 0) {
45
+ return value
46
+ .split(",")
47
+ .map((item) => item.trim())
48
+ .filter(Boolean);
49
+ }
50
+ return [];
51
+ }
52
+ function matchesPattern(value, pattern) {
53
+ return (value === pattern ||
54
+ path.basename(value) === pattern ||
55
+ value.endsWith(`/${pattern}`));
56
+ }
57
+ export class NpmLinkCommand extends Command {
58
+ constructor() {
59
+ super("NpmLinkCommand", options);
60
+ }
61
+ help() {
62
+ printCommandHelp(this.log, "npm-link", "Link or unlink decaf-ts package outputs across linked modules.", "npm-link [options]", [
63
+ {
64
+ flag: "--max-traversal <depth>",
65
+ description: "How many nested .gitmodules levels to traverse",
66
+ defaultValue: "2",
67
+ },
68
+ {
69
+ flag: "--excludes <items...>",
70
+ description: "Dependency names or patterns to ignore",
71
+ defaultValue: "@decaf-ts/utils,@decaf-ts/logging",
72
+ },
73
+ {
74
+ flag: "--include <items...>",
75
+ description: "Module names or paths to target explicitly",
76
+ },
77
+ {
78
+ flag: "--operation <name>",
79
+ description: "Operation to run in each module",
80
+ defaultValue: "link",
81
+ },
82
+ {
83
+ flag: "-h, --help",
84
+ description: "Show this help text and exit",
85
+ },
86
+ ], [
87
+ "link creates symlinks for decaf-ts dependencies",
88
+ "unlink removes those links and reinstalls dependencies",
89
+ "any other operation is passed through to npm in each selected module",
90
+ ], [
91
+ "npm-link --operation link",
92
+ "npm-link --operation unlink",
93
+ "npm-link --operation install --include packages/app",
94
+ ]);
95
+ }
96
+ async run(answers) {
97
+ const maxTraversal = Number.parseInt(`${answers.maxTraversal || "2"}`, 10);
98
+ const include = normalizeList(answers.include);
99
+ const excludes = normalizeList(answers.excludes);
100
+ const defaultExcludes = ["@decaf-ts/utils", "@decaf-ts/logging"];
101
+ const operation = `${answers.operation || "link"}`.trim() || "link";
102
+ const outerPkg = JSON.parse(fs.readFileSync(path.join(process.cwd(), "package.json"), "utf8"));
103
+ const scope = getScope(outerPkg.name);
104
+ const modules = readGitModulesDeep(process.cwd(), Number.isFinite(maxTraversal) ? maxTraversal : 2);
105
+ const selectedModules = modules.filter((moduleName) => include.length > 0
106
+ ? include.some((pattern) => matchesPattern(moduleName, pattern))
107
+ : true);
108
+ const shouldIgnoreDependency = (dependency) => (excludes.length > 0 ? excludes : defaultExcludes).some((pattern) => matchesPattern(dependency, pattern));
109
+ for (const moduleName of selectedModules) {
110
+ const moduleRoot = path.join(process.cwd(), moduleName);
111
+ let pkg;
112
+ try {
113
+ pkg = JSON.parse(fs.readFileSync(path.join(moduleRoot, "package.json"), "utf8"));
114
+ }
115
+ catch {
116
+ continue;
117
+ }
118
+ const dependencies = getDependencyList(pkg).filter((dep) => dep.startsWith(scope));
119
+ if (operation === "link") {
120
+ for (const dependency of dependencies) {
121
+ if (shouldIgnoreDependency(dependency))
122
+ continue;
123
+ const innerCodePath = dependency.endsWith("styles") ? "dist" : "lib";
124
+ const packageName = getPackageName(dependency);
125
+ try {
126
+ const packageRoot = path.join(moduleRoot, "node_modules", scope, packageName);
127
+ const dependencyTarget = path.join(moduleRoot, "node_modules", dependency);
128
+ const sourcePath = path.join(process.cwd(), packageName, innerCodePath);
129
+ const linkPath = path.join(packageRoot, innerCodePath);
130
+ if (!fs.existsSync(sourcePath)) {
131
+ console.log(`Skipping ${dependency} as it does not exist in the master repository`);
132
+ continue;
133
+ }
134
+ console.log(`linking ${dependency} as a dependency of ${moduleName}`);
135
+ fs.rmSync(dependencyTarget, { force: true, recursive: true });
136
+ fs.mkdirSync(packageRoot, { recursive: true });
137
+ fs.rmSync(linkPath, { force: true, recursive: true });
138
+ fs.symlinkSync(path.relative(packageRoot, sourcePath), linkPath, "dir");
139
+ }
140
+ catch (error) {
141
+ console.log(`Failed to link ${dependency} as a dependency of ${moduleName}: ${error}`);
142
+ process.exit(1);
143
+ }
144
+ }
145
+ continue;
146
+ }
147
+ if (operation === "unlink") {
148
+ for (const dependency of dependencies) {
149
+ if (shouldIgnoreDependency(dependency))
150
+ continue;
151
+ console.log(`unlinking ${dependency} as a dependency of ${moduleName}`);
152
+ try {
153
+ fs.rmSync(path.join(moduleRoot, "node_modules", dependency), {
154
+ force: true,
155
+ recursive: true,
156
+ });
157
+ }
158
+ catch {
159
+ process.exit(1);
160
+ }
161
+ }
162
+ try {
163
+ execSync("npm run do-install", {
164
+ cwd: moduleRoot,
165
+ env: process.env,
166
+ stdio: "inherit",
167
+ });
168
+ }
169
+ catch {
170
+ process.exit(1);
171
+ }
172
+ continue;
173
+ }
174
+ console.log(`${operation}ing ${moduleName}`);
175
+ try {
176
+ execSync(`npm ${operation}`, {
177
+ cwd: moduleRoot,
178
+ env: process.env,
179
+ stdio: "inherit",
180
+ });
181
+ }
182
+ catch {
183
+ process.exit(1);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ //# sourceMappingURL=npm-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-link.js","sourceRoot":"","sources":["../../../../src/cli/commands/npm-link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { Command } from "./../command.js";
4
+ import { readGitModulesDeep } from "./modules.js";
5
+ import { printCommandHelp } from "./help.js";
6
+ const options = {
7
+ maxTraversal: {
8
+ type: "string",
9
+ default: "2",
10
+ },
11
+ tokenFiles: {
12
+ type: "string",
13
+ multiple: true,
14
+ default: [".token", ".npmtoken"],
15
+ },
16
+ };
17
+ function normalizeList(value) {
18
+ if (Array.isArray(value)) {
19
+ return value.map((item) => `${item}`.trim()).filter(Boolean);
20
+ }
21
+ if (typeof value === "string" && value.length > 0) {
22
+ return value
23
+ .split(",")
24
+ .map((item) => item.trim())
25
+ .filter(Boolean);
26
+ }
27
+ return [];
28
+ }
29
+ export class NpmTokenCommand extends Command {
30
+ constructor() {
31
+ super("NpmTokenCommand", options);
32
+ }
33
+ help() {
34
+ printCommandHelp(this.log, "npm-token", "Link token files into every module discovered in .gitmodules.", "npm-token [options]", [
35
+ {
36
+ flag: "--max-traversal <depth>",
37
+ description: "How many nested .gitmodules levels to traverse",
38
+ defaultValue: "2",
39
+ },
40
+ {
41
+ flag: "--token-files <files...>",
42
+ description: "Token files to link into each selected module",
43
+ defaultValue: ".token,.npmtoken",
44
+ },
45
+ {
46
+ flag: "-h, --help",
47
+ description: "Show this help text and exit",
48
+ },
49
+ ], [
50
+ "The command creates symlinks from each selected module back to the token files in the repository root.",
51
+ ], [
52
+ "npm-token",
53
+ "npm-token --token-files .token .npmtoken secrets/npm.token",
54
+ ]);
55
+ }
56
+ async run(answers) {
57
+ const maxTraversal = Number.parseInt(`${answers.maxTraversal || "2"}`, 10);
58
+ const tokenFiles = normalizeList(answers.tokenFiles);
59
+ const effectiveTokenFiles = tokenFiles.length > 0 ? tokenFiles : [".token", ".npmtoken"];
60
+ const modules = readGitModulesDeep(process.cwd(), Number.isFinite(maxTraversal) ? maxTraversal : 2);
61
+ for (const moduleName of modules) {
62
+ const moduleRoot = path.join(process.cwd(), moduleName);
63
+ try {
64
+ for (const tokenFile of effectiveTokenFiles) {
65
+ console.log(`linking ${tokenFile} to ${moduleName}`);
66
+ fs.rmSync(path.join(moduleRoot, tokenFile), {
67
+ force: true,
68
+ recursive: true,
69
+ });
70
+ fs.symlinkSync(path.join("..", tokenFile), path.join(moduleRoot, tokenFile));
71
+ }
72
+ }
73
+ catch {
74
+ process.exit(1);
75
+ }
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=npm-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-token.js","sourceRoot":"","sources":["../../../../src/cli/commands/npm-token.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { DefaultCommandOptions } from "./../constants.js";
3
3
  import { dispatchReleaseChainWorkflow, runReleaseChain, } from "./../../release-chain/index.js";
4
4
  import { getPackage } from "./../../utils/index.js";
5
5
  import { execSync } from "node:child_process";
6
+ import { printCommandHelp } from "./help.js";
6
7
  const releaseChainArgs = {
7
8
  meta: {
8
9
  type: "string",
@@ -55,6 +56,46 @@ export class ReleaseChainCommand extends Command {
55
56
  constructor() {
56
57
  super("ReleaseChain", Object.assign({}, DefaultCommandOptions, releaseChainArgs));
57
58
  }
59
+ help() {
60
+ printCommandHelp(this.log, "release-chain", "Run the release-chain workflow locally across repositories.", "release-chain [options]", [
61
+ { flag: "--meta <url>", description: "Meta repository URL" },
62
+ {
63
+ flag: "--branch <name>",
64
+ description: "Branch to update downstream repositories",
65
+ defaultValue: "main or detected branch",
66
+ },
67
+ {
68
+ flag: "--current <owner/repo>",
69
+ description: "Current repository slug to resume after in the chain",
70
+ },
71
+ {
72
+ flag: "--package <name>",
73
+ description: "Override detected package name",
74
+ },
75
+ {
76
+ flag: "--token <token>",
77
+ description: "GitHub token for cloning and pushing",
78
+ },
79
+ {
80
+ flag: "--submodule-file <file>",
81
+ description: "Override submodule file name",
82
+ },
83
+ {
84
+ flag: "--submodule-path <path>",
85
+ description: "Use a local submodule file instead of downloading",
86
+ },
87
+ {
88
+ flag: "--target-base <branch>",
89
+ description: "Base branch for downstream pull requests",
90
+ },
91
+ {
92
+ flag: "-h, --help",
93
+ description: "Show this help text and exit",
94
+ },
95
+ ], [
96
+ "Missing meta or branch values are detected from git and environment variables when possible.",
97
+ ]);
98
+ }
58
99
  async run(options) {
59
100
  const answerMap = options;
60
101
  const packageName = answerMap.package ||
@@ -83,6 +124,47 @@ export class ReleaseChainDispatchCommand extends Command {
83
124
  constructor() {
84
125
  super("ReleaseChainDispatch", Object.assign({}, DefaultCommandOptions, releaseChainArgs));
85
126
  }
127
+ help() {
128
+ printCommandHelp(this.log, "release-chain-dispatch", "Dispatch the release-chain GitHub Actions workflow.", "release-chain-dispatch [options]", [
129
+ { flag: "--meta <url>", description: "Meta repository URL" },
130
+ {
131
+ flag: "--branch <name>",
132
+ description: "Branch to evaluate in downstream repositories",
133
+ defaultValue: "main or detected branch",
134
+ },
135
+ {
136
+ flag: "--current <owner/repo>",
137
+ description: "Repository slug that triggered the release chain",
138
+ },
139
+ {
140
+ flag: "--workflow <file>",
141
+ description: "Workflow file name",
142
+ defaultValue: "release-chain.yaml",
143
+ },
144
+ {
145
+ flag: "--repo <owner/repo>",
146
+ description: "Target repository slug where the workflow lives",
147
+ },
148
+ {
149
+ flag: "--token <token>",
150
+ description: "GitHub token for dispatching workflows",
151
+ },
152
+ {
153
+ flag: "--ref <ref>",
154
+ description: "Git ref to dispatch the workflow on",
155
+ },
156
+ {
157
+ flag: "--target-base <branch>",
158
+ description: "Base branch for downstream pull requests",
159
+ },
160
+ {
161
+ flag: "-h, --help",
162
+ description: "Show this help text and exit",
163
+ },
164
+ ], [
165
+ "Missing meta or branch values are detected from git and environment variables when possible.",
166
+ ]);
167
+ }
86
168
  async run(options) {
87
169
  const answerMap = options;
88
170
  const metaRepo = answerMap.meta || detectRemoteUrl();
@@ -1 +1 @@
1
- {"version":3,"file":"release-chain.js","sourceRoot":"","sources":["../../../../src/cli/commands/release-chain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,wBAAmB;AAErC,OAAO,EAAE,qBAAqB,EAAwB,0BAAqB;AAC3E,OAAO,EACL,4BAA4B,EAC5B,eAAe,GAChB,uCAA4B;AAC7B,OAAO,EAAE,UAAU,EAAE,+BAAoB;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,gBAAgB,GAAG;IACvB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,EAAE;KACvD;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,oBAAoB;YAChC,OAAO,CAAC,GAAG,CAAC,eAAe;YAC3B,MAAM;KACT;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;KAC3E;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;KACZ;IACD,KAAK,EAAE;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE;KAC/C;IACD,aAAa,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;KAC9C;IACD,aAAa,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE;KACnD;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,oBAAoB;KACpE;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;KAC9C;IACD,GAAG,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;KAC7C;IACD,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;KAChD;CACF,CAAC;AAMF,MAAM,OAAO,mBAAoB,SAAQ,OAGxC;IACC;QACE,KAAK,CACH,cAAc,EACd,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,EAAE,gBAAgB,CAExD,CACF,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,GAAG,CACjB,OAEuB;QAEvB,MAAM,SAAS,GAAG,OAAgC,CAAC;QACnD,MAAM,WAAW,GACd,SAAS,CAAC,OAAkB;YAC5B,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAuB,EAAE,IAAI,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,QAAQ,GAAI,SAAS,CAAC,IAAe,IAAI,eAAe,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,MAAM,GAAI,SAAS,CAAC,MAAiB,IAAI,YAAY,EAAE,CAAC;QAE9D,MAAM,eAAe,CAAC;YACpB,WAAW,EAAE,QAAQ;YACrB,MAAM;YACN,WAAW,EAAE,SAAS,CAAC,OAAiB;YACxC,WAAW;YACX,KAAK,EAAE,SAAS,CAAC,KAAe;YAChC,aAAa,EAAG,SAAS,CAAC,aAAwB,IAAI,SAAS;YAC/D,aAAa,EAAG,SAAS,CAAC,aAAwB,IAAI,SAAS;YAC/D,gBAAgB,EAAG,SAAS,CAAC,UAAqB,IAAI,SAAS;SAChE,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,OAGhD;IACC;QACE,KAAK,CACH,sBAAsB,EACtB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,EAAE,gBAAgB,CAExD,CACF,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,GAAG,CACjB,OAEuB;QAEvB,MAAM,SAAS,GAAG,OAAgC,CAAC;QACnD,MAAM,QAAQ,GAAI,SAAS,CAAC,IAAe,IAAI,eAAe,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAI,SAAS,CAAC,MAAiB,IAAI,YAAY,EAAE,CAAC;QAE9D,MAAM,4BAA4B,CAAC;YACjC,WAAW,EAAE,QAAQ;YACrB,MAAM;YACN,YAAY,EAAG,SAAS,CAAC,QAAmB,IAAI,oBAAoB;YACpE,QAAQ,EAAE,SAAS,CAAC,IAAc;YAClC,WAAW,EAAE,SAAS,CAAC,OAAiB;YACxC,KAAK,EAAE,SAAS,CAAC,KAAe;YAChC,GAAG,EAAG,SAAS,CAAC,GAAc,IAAI,MAAM;YACxC,gBAAgB,EAAG,SAAS,CAAC,UAAqB,IAAI,SAAS;SAChE,CAAC,CAAC;IACL,CAAC;CACF;AAED,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,oCAAoC,EAAE;YACpD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACnB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,iCAAiC,EAAE;YACjD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"release-chain.js","sourceRoot":"","sources":["../../../../src/cli/commands/release-chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { execSync } from "node:child_process";
4
+ import { Command } from "./../command.js";
5
+ import { readGitModules } from "./modules.js";
6
+ import { printCommandHelp } from "./help.js";
7
+ const options = {
8
+ basePath: {
9
+ type: "string",
10
+ default: process.cwd(),
11
+ },
12
+ command: {
13
+ type: "string",
14
+ default: undefined,
15
+ },
16
+ };
17
+ export class RunAllCommand extends Command {
18
+ constructor() {
19
+ super("RunAllCommand", options);
20
+ }
21
+ help() {
22
+ printCommandHelp(this.log, "run-all", "Run a shell command in every module listed in .gitmodules.", "run-all [options] --command <cmd>", [
23
+ {
24
+ flag: "--base-path <path>",
25
+ description: "Directory to read .gitmodules from",
26
+ defaultValue: "current working directory",
27
+ },
28
+ {
29
+ flag: "--command <cmd>",
30
+ description: "Shell command to execute in each module",
31
+ },
32
+ {
33
+ flag: "-h, --help",
34
+ description: "Show this help text and exit",
35
+ },
36
+ ], [
37
+ "The command fails fast if any module invocation fails.",
38
+ ], [
39
+ "run-all --command npm test",
40
+ "run-all --base-path ../repo --command npm run lint",
41
+ ]);
42
+ }
43
+ async run(answers) {
44
+ const basePath = typeof answers.basePath === "string" && answers.basePath.trim().length > 0
45
+ ? answers.basePath.trim()
46
+ : process.cwd();
47
+ const command = typeof answers.command === "string" ? answers.command.trim() : "";
48
+ if (command.length === 0) {
49
+ throw new Error("run-all requires a command to execute");
50
+ }
51
+ const modules = readGitModules(basePath);
52
+ for (const moduleName of modules) {
53
+ const moduleRoot = path.join(basePath, moduleName);
54
+ if (!fs.existsSync(moduleRoot))
55
+ continue;
56
+ console.log(`running ${command} ${moduleName}`);
57
+ try {
58
+ execSync(command, {
59
+ cwd: moduleRoot,
60
+ env: process.env,
61
+ stdio: "inherit",
62
+ });
63
+ }
64
+ catch {
65
+ process.exit(1);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ //# sourceMappingURL=run-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-all.js","sourceRoot":"","sources":["../../../../src/cli/commands/run-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,wBAAmB;AAErC,OAAO,EAAE,cAAc,EAAE,qBAAkB;AAC3C,OAAO,EAAE,gBAAgB,EAAE,kBAAe;AAE1C,MAAM,OAAO,GAAG;IACd,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE;KACvB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,SAAS;KACnB;CACF,CAAC;AAEF,MAAM,OAAO,aAAc,SAAQ,OAA6B;IAC9D;QACE,KAAK,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAEkB,IAAI;QACrB,gBAAgB,CACd,IAAI,CAAC,GAAG,EACR,SAAS,EACT,4DAA4D,EAC5D,mCAAmC,EACnC;YACE;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,WAAW,EAAE,oCAAoC;gBACjD,YAAY,EAAE,2BAA2B;aAC1C;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,yCAAyC;aACvD;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,8BAA8B;aAC5C;SACF,EACD;YACE,wDAAwD;SACzD,EACD;YACE,4BAA4B;YAC5B,oDAAoD;SACrD,CACF,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,GAAG,CACjB,OAIG;QAEH,MAAM,QAAQ,GACZ,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACxE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;YACzB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,MAAM,UAAU,IAAI,OAAO,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,SAAS;YAEzC,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,EAAE;oBAChB,GAAG,EAAE,UAAU;oBACf,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}