ts-repo-utils 6.0.5 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -7
- package/dist/cmd/assert-repo-is-clean.mjs +1 -1
- package/dist/cmd/check-should-run-type-checks.mjs +1 -1
- package/dist/cmd/format-diff-from.mjs +29 -8
- package/dist/cmd/format-diff-from.mjs.map +1 -1
- package/dist/cmd/format-uncommitted.d.mts +3 -0
- package/dist/cmd/format-uncommitted.d.mts.map +1 -0
- package/dist/cmd/format-uncommitted.mjs +59 -0
- package/dist/cmd/format-uncommitted.mjs.map +1 -0
- package/dist/cmd/gen-index-ts.mjs +1 -1
- package/dist/functions/diff.d.mts +32 -2
- package/dist/functions/diff.d.mts.map +1 -1
- package/dist/functions/diff.mjs +47 -29
- package/dist/functions/diff.mjs.map +1 -1
- package/dist/functions/exec-async.d.mts +2 -2
- package/dist/functions/exec-async.d.mts.map +1 -1
- package/dist/functions/format.d.mts +20 -11
- package/dist/functions/format.d.mts.map +1 -1
- package/dist/functions/format.mjs +134 -95
- package/dist/functions/format.mjs.map +1 -1
- package/dist/functions/index.mjs +2 -2
- package/dist/index.d.mts +1 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/cmd/assert-repo-is-clean.mts +1 -1
- package/src/cmd/check-should-run-type-checks.mts +1 -1
- package/src/cmd/format-diff-from.mts +35 -9
- package/src/cmd/format-uncommitted.mts +67 -0
- package/src/cmd/gen-index-ts.mts +1 -1
- package/src/functions/diff.mts +85 -32
- package/src/functions/diff.test.mts +569 -102
- package/src/functions/exec-async.mts +2 -2
- package/src/functions/exec-async.test.mts +77 -47
- package/src/functions/format.mts +224 -141
- package/src/functions/format.test.mts +625 -20
- package/src/functions/workspace-utils/run-cmd-in-stages.test.mts +266 -0
- package/src/index.mts +2 -0
- package/dist/cmd/format-untracked.d.mts +0 -3
- package/dist/cmd/format-untracked.d.mts.map +0 -1
- package/dist/cmd/format-untracked.mjs +0 -34
- package/dist/cmd/format-untracked.mjs.map +0 -1
- package/src/cmd/format-untracked.mts +0 -31
|
@@ -1,28 +1,40 @@
|
|
|
1
1
|
import * as prettier from 'prettier';
|
|
2
|
-
import { Result, Arr } from 'ts-data-forge';
|
|
2
|
+
import { Result, Arr, isNotUndefined } from 'ts-data-forge';
|
|
3
3
|
import '../node-global.mjs';
|
|
4
|
-
import { getDiffFrom, getUntrackedFiles } from './diff.mjs';
|
|
4
|
+
import { getDiffFrom, getUntrackedFiles, getModifiedFiles, getStagedFiles } from './diff.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Format a list of files using Prettier
|
|
8
8
|
*
|
|
9
9
|
* @param files - Array of file paths to format
|
|
10
|
-
* @returns 'ok' if successful, 'err' if any errors occurred
|
|
11
10
|
*/
|
|
12
|
-
const
|
|
11
|
+
const formatFiles = async (files, options) => {
|
|
13
12
|
const silent = options?.silent ?? false;
|
|
14
13
|
if (files.length === 0) {
|
|
15
14
|
if (!silent) {
|
|
16
15
|
echo('No files to format');
|
|
17
16
|
}
|
|
18
|
-
return
|
|
17
|
+
return Result.ok(undefined);
|
|
19
18
|
}
|
|
20
19
|
if (!silent) {
|
|
21
20
|
echo(`Formatting ${files.length} files...`);
|
|
22
21
|
}
|
|
23
22
|
// Format each file
|
|
24
|
-
const results =
|
|
23
|
+
const results =
|
|
24
|
+
// NOTE: Using Promise.allSettled to ensure all files are processed even if some fail
|
|
25
|
+
await Promise.allSettled(files.map(async (filePath) => {
|
|
25
26
|
try {
|
|
27
|
+
// Check if file exists first
|
|
28
|
+
try {
|
|
29
|
+
await fs.access(filePath);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// File doesn't exist, skip it
|
|
33
|
+
if (!silent) {
|
|
34
|
+
echo(`Skipping non-existent file: ${filePath}`);
|
|
35
|
+
}
|
|
36
|
+
return Result.ok(undefined);
|
|
37
|
+
}
|
|
26
38
|
// Read file content
|
|
27
39
|
const content = await fs.readFile(filePath, 'utf8');
|
|
28
40
|
// Resolve prettier config for this file
|
|
@@ -35,7 +47,7 @@ const formatFilesList = async (files, options) => {
|
|
|
35
47
|
if (!silent) {
|
|
36
48
|
echo(`Skipping ignored file: ${filePath}`);
|
|
37
49
|
}
|
|
38
|
-
return;
|
|
50
|
+
return Result.ok(undefined);
|
|
39
51
|
}
|
|
40
52
|
// Format the content
|
|
41
53
|
const formatted = await prettier.format(content, {
|
|
@@ -43,29 +55,51 @@ const formatFilesList = async (files, options) => {
|
|
|
43
55
|
filepath: filePath,
|
|
44
56
|
});
|
|
45
57
|
// Only write if content changed
|
|
46
|
-
if (formatted
|
|
58
|
+
if (formatted === content) {
|
|
59
|
+
if (!silent) {
|
|
60
|
+
echo(`Unchanged: ${filePath}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
47
64
|
await fs.writeFile(filePath, formatted, 'utf8');
|
|
48
65
|
if (!silent) {
|
|
49
66
|
echo(`Formatted: ${filePath}`);
|
|
50
67
|
}
|
|
51
68
|
}
|
|
69
|
+
return Result.ok(undefined);
|
|
52
70
|
}
|
|
53
71
|
catch (error) {
|
|
54
|
-
|
|
55
|
-
|
|
72
|
+
if (!silent) {
|
|
73
|
+
console.error(`Error formatting ${filePath}:`, error);
|
|
74
|
+
}
|
|
75
|
+
return Result.err(error);
|
|
56
76
|
}
|
|
57
77
|
}));
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
78
|
+
if (results.every((r) => r.status === 'fulfilled')) {
|
|
79
|
+
const fulfilled = results.map((r) => r.value);
|
|
80
|
+
if (fulfilled.every(Result.isOk)) {
|
|
81
|
+
return Result.ok(undefined);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const errors = fulfilled
|
|
85
|
+
.filter(Result.isErr)
|
|
86
|
+
.map((r) => r.value);
|
|
87
|
+
return Result.err(errors);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const errors = results
|
|
92
|
+
.filter((r) => r.status === 'rejected')
|
|
93
|
+
.map((r) => r.reason);
|
|
94
|
+
return Result.err(errors);
|
|
95
|
+
}
|
|
61
96
|
};
|
|
62
97
|
/**
|
|
63
98
|
* Format files matching the given glob pattern using Prettier
|
|
64
99
|
*
|
|
65
100
|
* @param pathGlob - Glob pattern to match files
|
|
66
|
-
* @returns 'ok' if successful, 'err' if any errors occurred
|
|
67
101
|
*/
|
|
68
|
-
const
|
|
102
|
+
const formatFilesGlob = async (pathGlob, options) => {
|
|
69
103
|
const silent = options?.silent ?? false;
|
|
70
104
|
try {
|
|
71
105
|
// Find all files matching the glob
|
|
@@ -78,63 +112,56 @@ const formatFiles = async (pathGlob, options) => {
|
|
|
78
112
|
if (!silent) {
|
|
79
113
|
echo('No files found matching pattern:', pathGlob);
|
|
80
114
|
}
|
|
81
|
-
return
|
|
115
|
+
return Result.ok(undefined);
|
|
82
116
|
}
|
|
83
|
-
return await
|
|
117
|
+
return await formatFiles(files, { silent });
|
|
84
118
|
}
|
|
85
119
|
catch (error) {
|
|
86
|
-
|
|
87
|
-
|
|
120
|
+
if (!silent) {
|
|
121
|
+
console.error('Error in formatFiles:', error);
|
|
122
|
+
}
|
|
123
|
+
return Result.err(error);
|
|
88
124
|
}
|
|
89
125
|
};
|
|
90
126
|
/**
|
|
91
127
|
* Format only files that have been changed (git status)
|
|
92
128
|
*
|
|
93
129
|
* @param options - Options for formatting
|
|
94
|
-
* @returns 'ok' if successful, 'err' if any errors occurred
|
|
95
130
|
*/
|
|
96
|
-
const
|
|
97
|
-
const silent = options
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
});
|
|
131
|
+
const formatUncommittedFiles = async (options) => {
|
|
132
|
+
const { untracked = true, modified = true, staged = true, silent = false, } = options ?? {};
|
|
133
|
+
const mut_files = [];
|
|
134
|
+
if (untracked) {
|
|
135
|
+
const untrackedFilesResult = await getUntrackedFiles({ silent });
|
|
102
136
|
if (Result.isErr(untrackedFilesResult)) {
|
|
103
|
-
console.error('Error getting changed files:', untrackedFilesResult.value);
|
|
104
|
-
return 'err';
|
|
105
|
-
}
|
|
106
|
-
const files = untrackedFilesResult.value;
|
|
107
|
-
if (files.length === 0) {
|
|
108
137
|
if (!silent) {
|
|
109
|
-
|
|
138
|
+
console.error('Error getting changed files:', untrackedFilesResult.value);
|
|
110
139
|
}
|
|
111
|
-
return
|
|
140
|
+
return untrackedFilesResult;
|
|
112
141
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return filePath;
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
if (!silent) {
|
|
124
|
-
echo(`Skipping non-existent file: ${filePath}`);
|
|
125
|
-
}
|
|
126
|
-
return undefined;
|
|
142
|
+
mut_files.push(...untrackedFilesResult.value);
|
|
143
|
+
}
|
|
144
|
+
if (modified) {
|
|
145
|
+
const diffFilesResult = await getModifiedFiles({ silent });
|
|
146
|
+
if (Result.isErr(diffFilesResult)) {
|
|
147
|
+
if (!silent) {
|
|
148
|
+
console.error('Error getting changed files:', diffFilesResult.value);
|
|
127
149
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
.map((result) => result.value);
|
|
132
|
-
return await formatFilesList(existingFiles, { silent });
|
|
150
|
+
return diffFilesResult;
|
|
151
|
+
}
|
|
152
|
+
mut_files.push(...diffFilesResult.value);
|
|
133
153
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
154
|
+
if (staged) {
|
|
155
|
+
const stagedFilesResult = await getStagedFiles({ silent });
|
|
156
|
+
if (Result.isErr(stagedFilesResult)) {
|
|
157
|
+
if (!silent) {
|
|
158
|
+
console.error('Error getting changed files:', stagedFilesResult.value);
|
|
159
|
+
}
|
|
160
|
+
return stagedFilesResult;
|
|
161
|
+
}
|
|
162
|
+
mut_files.push(...stagedFilesResult.value);
|
|
137
163
|
}
|
|
164
|
+
return formatFiles(Arr.uniq(mut_files), { silent });
|
|
138
165
|
};
|
|
139
166
|
/**
|
|
140
167
|
* Format only files that differ from the specified base branch or commit
|
|
@@ -144,57 +171,69 @@ const formatUntracked = async (options) => {
|
|
|
144
171
|
* @param options - Options for formatting
|
|
145
172
|
* @param options.includeUntracked - Include untracked files in addition to diff
|
|
146
173
|
* files (default is true)
|
|
174
|
+
* @param options.includeStaged - Include staged files in addition to diff files
|
|
175
|
+
* (default is true)
|
|
147
176
|
* @param options.silent - Silent mode to suppress command output (default is
|
|
148
177
|
* false)
|
|
149
|
-
* @returns 'ok' if successful, 'err' if any errors occurred
|
|
150
178
|
*/
|
|
151
179
|
const formatDiffFrom = async (base, options) => {
|
|
152
|
-
const silent = options?.silent ?? false;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
180
|
+
// const silent = options?.silent ?? false;
|
|
181
|
+
const { silent = false, includeUntracked = true, includeModified = true, includeStaged = true, } = options ?? {};
|
|
182
|
+
// Get files that differ from base branch/commit (excluding deleted files)
|
|
183
|
+
const diffFromBaseResult = await getDiffFrom(base, {
|
|
184
|
+
silent,
|
|
185
|
+
});
|
|
186
|
+
if (Result.isErr(diffFromBaseResult)) {
|
|
187
|
+
if (!silent) {
|
|
159
188
|
console.error('Error getting changed files:', diffFromBaseResult.value);
|
|
160
|
-
return 'err';
|
|
161
189
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
190
|
+
return diffFromBaseResult;
|
|
191
|
+
}
|
|
192
|
+
const diffFiles = diffFromBaseResult.value;
|
|
193
|
+
const mut_allFiles = diffFiles.slice();
|
|
194
|
+
// If includeUntracked is true, also get untracked files
|
|
195
|
+
for (const { type, flag, fn } of [
|
|
196
|
+
{ type: 'untracked', flag: includeUntracked, fn: getUntrackedFiles },
|
|
197
|
+
{ type: 'modified', flag: includeModified, fn: getModifiedFiles },
|
|
198
|
+
{ type: 'staged', flag: includeStaged, fn: getStagedFiles },
|
|
199
|
+
]) {
|
|
200
|
+
if (flag) {
|
|
201
|
+
// eslint-disable-next-line no-await-in-loop
|
|
202
|
+
const filesResult = await fn({ silent });
|
|
203
|
+
if (Result.isErr(filesResult)) {
|
|
204
|
+
if (!silent) {
|
|
205
|
+
console.error(`Error getting ${type} files:`, filesResult.value);
|
|
206
|
+
}
|
|
207
|
+
return filesResult;
|
|
172
208
|
}
|
|
173
|
-
const
|
|
209
|
+
const files = filesResult.value;
|
|
174
210
|
// Combine and deduplicate files
|
|
175
|
-
mut_allFiles
|
|
176
|
-
if (!silent) {
|
|
177
|
-
echo(`Formatting files that differ from ${base} and untracked files:`, mut_allFiles);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
if (!silent) {
|
|
182
|
-
echo(`Formatting files that differ from ${base}:`, mut_allFiles);
|
|
183
|
-
}
|
|
211
|
+
mut_allFiles.push(...files);
|
|
184
212
|
}
|
|
185
|
-
if (mut_allFiles.length === 0) {
|
|
186
|
-
if (!silent) {
|
|
187
|
-
echo(`No files to format`);
|
|
188
|
-
}
|
|
189
|
-
return 'ok';
|
|
190
|
-
}
|
|
191
|
-
return await formatFilesList(mut_allFiles, { silent });
|
|
192
213
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
214
|
+
const allFiles = Arr.uniq(mut_allFiles);
|
|
215
|
+
if (!silent) {
|
|
216
|
+
const includedFileTypes = [
|
|
217
|
+
includeUntracked ? 'untracked files' : undefined,
|
|
218
|
+
includeModified ? 'modified files' : undefined,
|
|
219
|
+
includeStaged ? 'staged files' : undefined,
|
|
220
|
+
].filter(isNotUndefined);
|
|
221
|
+
const message = [
|
|
222
|
+
`Formatting files that differ from ${base}`,
|
|
223
|
+
includedFileTypes
|
|
224
|
+
.map((s, i) => i !== includedFileTypes.length - 1 ? `, ${s}` : ` and ${s}`)
|
|
225
|
+
.join(''),
|
|
226
|
+
].join('');
|
|
227
|
+
echo(`${message}:`, allFiles);
|
|
228
|
+
}
|
|
229
|
+
if (allFiles.length === 0) {
|
|
230
|
+
if (!silent) {
|
|
231
|
+
echo('No files to format');
|
|
232
|
+
}
|
|
233
|
+
return Result.ok(undefined);
|
|
196
234
|
}
|
|
235
|
+
return formatFiles(allFiles, { silent });
|
|
197
236
|
};
|
|
198
237
|
|
|
199
|
-
export { formatDiffFrom, formatFiles,
|
|
238
|
+
export { formatDiffFrom, formatFiles, formatFilesGlob, formatUncommittedFiles };
|
|
200
239
|
//# sourceMappingURL=format.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.mjs","sources":["../../src/functions/format.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"format.mjs","sources":["../../src/functions/format.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/functions/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { assertExt } from './assert-ext.mjs';
|
|
2
2
|
export { assertPathExists, pathExists } from './assert-path-exists.mjs';
|
|
3
3
|
export { assertRepoIsClean, repoIsDirty } from './assert-repo-is-clean.mjs';
|
|
4
|
-
export { getDiffFrom, getUntrackedFiles } from './diff.mjs';
|
|
4
|
+
export { getDiffFrom, getModifiedFiles, getStagedFiles, getUntrackedFiles } from './diff.mjs';
|
|
5
5
|
export { $ } from './exec-async.mjs';
|
|
6
|
-
export { formatDiffFrom, formatFiles,
|
|
6
|
+
export { formatDiffFrom, formatFiles, formatFilesGlob, formatUncommittedFiles } from './format.mjs';
|
|
7
7
|
export { genIndex } from './gen-index.mjs';
|
|
8
8
|
export { checkShouldRunTypeChecks } from './should-run.mjs';
|
|
9
9
|
export { executeParallel, executeStages } from './workspace-utils/execute-parallel.mjs';
|
package/dist/index.d.mts
CHANGED
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.mts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.mts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
export { assertExt } from './functions/assert-ext.mjs';
|
|
2
2
|
export { assertPathExists, pathExists } from './functions/assert-path-exists.mjs';
|
|
3
3
|
export { assertRepoIsClean, repoIsDirty } from './functions/assert-repo-is-clean.mjs';
|
|
4
|
-
export { getDiffFrom, getUntrackedFiles } from './functions/diff.mjs';
|
|
4
|
+
export { getDiffFrom, getModifiedFiles, getStagedFiles, getUntrackedFiles } from './functions/diff.mjs';
|
|
5
5
|
export { $ } from './functions/exec-async.mjs';
|
|
6
|
-
export { formatDiffFrom, formatFiles,
|
|
6
|
+
export { formatDiffFrom, formatFiles, formatFilesGlob, formatUncommittedFiles } from './functions/format.mjs';
|
|
7
7
|
export { genIndex } from './functions/gen-index.mjs';
|
|
8
8
|
export { checkShouldRunTypeChecks } from './functions/should-run.mjs';
|
|
9
9
|
export { executeParallel, executeStages } from './functions/workspace-utils/execute-parallel.mjs';
|
|
10
10
|
export { getWorkspacePackages } from './functions/workspace-utils/get-workspace-packages.mjs';
|
|
11
11
|
export { runCmdInParallelAcrossWorkspaces } from './functions/workspace-utils/run-cmd-in-parallel.mjs';
|
|
12
12
|
export { runCmdInStagesAcrossWorkspaces } from './functions/workspace-utils/run-cmd-in-stages.mjs';
|
|
13
|
+
export { Result } from 'ts-data-forge';
|
|
13
14
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-repo-utils",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript"
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"assert-repo-is-clean": "./src/cmd/assert-repo-is-clean.mts",
|
|
28
28
|
"check-should-run-type-checks": "./src/cmd/check-should-run-type-checks.mts",
|
|
29
29
|
"format-diff-from": "./src/cmd/format-diff-from.mts",
|
|
30
|
-
"format-
|
|
30
|
+
"format-uncommitted": "./src/cmd/format-uncommitted.mts",
|
|
31
31
|
"gen-index-ts": "./src/cmd/gen-index-ts.mts"
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env -S npx tsx
|
|
2
2
|
|
|
3
3
|
import * as cmd from 'cmd-ts';
|
|
4
|
+
import { Result } from 'ts-data-forge';
|
|
4
5
|
import { formatDiffFrom } from '../functions/index.mjs';
|
|
5
6
|
|
|
6
7
|
const cmdDef = cmd.command({
|
|
7
8
|
name: 'format-diff-from-cli',
|
|
8
|
-
version: '6.0
|
|
9
|
+
version: '6.2.0',
|
|
9
10
|
args: {
|
|
10
11
|
base: cmd.positional({
|
|
11
12
|
type: cmd.string,
|
|
12
13
|
displayName: 'base',
|
|
13
14
|
description: 'Base branch name or commit hash to compare against',
|
|
14
15
|
}),
|
|
15
|
-
|
|
16
|
-
long: '
|
|
16
|
+
excludeUntracked: cmd.flag({
|
|
17
|
+
long: 'exclude-untracked',
|
|
17
18
|
type: cmd.optional(cmd.boolean),
|
|
18
19
|
description:
|
|
19
|
-
'
|
|
20
|
+
'Exclude untracked files in addition to diff files (default: false)',
|
|
21
|
+
}),
|
|
22
|
+
excludeModified: cmd.flag({
|
|
23
|
+
long: 'exclude-modified',
|
|
24
|
+
type: cmd.optional(cmd.boolean),
|
|
25
|
+
description:
|
|
26
|
+
'Exclude modified files in addition to diff files (default: false)',
|
|
27
|
+
}),
|
|
28
|
+
excludeStaged: cmd.flag({
|
|
29
|
+
long: 'exclude-staged',
|
|
30
|
+
type: cmd.optional(cmd.boolean),
|
|
31
|
+
description:
|
|
32
|
+
'Exclude staged files in addition to diff files (default: false)',
|
|
20
33
|
}),
|
|
21
34
|
silent: cmd.flag({
|
|
22
35
|
long: 'silent',
|
|
@@ -25,7 +38,13 @@ const cmdDef = cmd.command({
|
|
|
25
38
|
}),
|
|
26
39
|
},
|
|
27
40
|
handler: (args) => {
|
|
28
|
-
main(
|
|
41
|
+
main({
|
|
42
|
+
base: args.base,
|
|
43
|
+
excludeUntracked: args.excludeUntracked ?? false,
|
|
44
|
+
excludeModified: args.excludeModified ?? false,
|
|
45
|
+
excludeStaged: args.excludeStaged ?? false,
|
|
46
|
+
silent: args.silent ?? false,
|
|
47
|
+
}).catch((error) => {
|
|
29
48
|
console.error('An error occurred:', error);
|
|
30
49
|
process.exit(1);
|
|
31
50
|
});
|
|
@@ -35,13 +54,20 @@ const cmdDef = cmd.command({
|
|
|
35
54
|
const main = async (
|
|
36
55
|
args: Readonly<{
|
|
37
56
|
base: string;
|
|
38
|
-
|
|
39
|
-
|
|
57
|
+
excludeUntracked: boolean;
|
|
58
|
+
excludeModified: boolean;
|
|
59
|
+
excludeStaged: boolean;
|
|
60
|
+
silent: boolean;
|
|
40
61
|
}>,
|
|
41
62
|
): Promise<void> => {
|
|
42
|
-
const result = await formatDiffFrom(args.base,
|
|
63
|
+
const result = await formatDiffFrom(args.base, {
|
|
64
|
+
includeUntracked: !args.excludeUntracked,
|
|
65
|
+
includeModified: !args.excludeModified,
|
|
66
|
+
includeStaged: !args.excludeStaged,
|
|
67
|
+
silent: args.silent,
|
|
68
|
+
});
|
|
43
69
|
|
|
44
|
-
if (result
|
|
70
|
+
if (Result.isErr(result)) {
|
|
45
71
|
process.exit(1);
|
|
46
72
|
}
|
|
47
73
|
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env -S npx tsx
|
|
2
|
+
|
|
3
|
+
import * as cmd from 'cmd-ts';
|
|
4
|
+
import { Result } from 'ts-data-forge';
|
|
5
|
+
import { formatUncommittedFiles } from '../functions/index.mjs';
|
|
6
|
+
|
|
7
|
+
const cmdDef = cmd.command({
|
|
8
|
+
name: 'format-uncommitted-cli',
|
|
9
|
+
version: '6.2.0',
|
|
10
|
+
args: {
|
|
11
|
+
excludeUntracked: cmd.flag({
|
|
12
|
+
long: 'exclude-untracked',
|
|
13
|
+
type: cmd.optional(cmd.boolean),
|
|
14
|
+
description:
|
|
15
|
+
'Exclude untracked files in addition to diff files (default: false)',
|
|
16
|
+
}),
|
|
17
|
+
excludeModified: cmd.flag({
|
|
18
|
+
long: 'exclude-modified',
|
|
19
|
+
type: cmd.optional(cmd.boolean),
|
|
20
|
+
description:
|
|
21
|
+
'Exclude modified files in addition to diff files (default: false)',
|
|
22
|
+
}),
|
|
23
|
+
excludeStaged: cmd.flag({
|
|
24
|
+
long: 'exclude-staged',
|
|
25
|
+
type: cmd.optional(cmd.boolean),
|
|
26
|
+
description:
|
|
27
|
+
'Exclude staged files in addition to diff files (default: false)',
|
|
28
|
+
}),
|
|
29
|
+
silent: cmd.flag({
|
|
30
|
+
long: 'silent',
|
|
31
|
+
type: cmd.optional(cmd.boolean),
|
|
32
|
+
description: 'If true, suppresses output messages (default: false)',
|
|
33
|
+
}),
|
|
34
|
+
},
|
|
35
|
+
handler: (args) => {
|
|
36
|
+
main({
|
|
37
|
+
excludeUntracked: args.excludeUntracked ?? false,
|
|
38
|
+
excludeModified: args.excludeModified ?? false,
|
|
39
|
+
excludeStaged: args.excludeStaged ?? false,
|
|
40
|
+
silent: args.silent ?? false,
|
|
41
|
+
}).catch((error) => {
|
|
42
|
+
console.error('An error occurred:', error);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const main = async (
|
|
49
|
+
args: Readonly<{
|
|
50
|
+
excludeUntracked: boolean;
|
|
51
|
+
excludeModified: boolean;
|
|
52
|
+
excludeStaged: boolean;
|
|
53
|
+
silent: boolean;
|
|
54
|
+
}>,
|
|
55
|
+
): Promise<void> => {
|
|
56
|
+
const result = await formatUncommittedFiles({
|
|
57
|
+
untracked: !args.excludeUntracked,
|
|
58
|
+
modified: !args.excludeModified,
|
|
59
|
+
staged: !args.excludeStaged,
|
|
60
|
+
silent: args.silent,
|
|
61
|
+
});
|
|
62
|
+
if (Result.isErr(result)) {
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
await cmd.run(cmdDef, process.argv.slice(2));
|
package/src/cmd/gen-index-ts.mts
CHANGED