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.
Files changed (44) hide show
  1. package/README.md +11 -7
  2. package/dist/cmd/assert-repo-is-clean.mjs +1 -1
  3. package/dist/cmd/check-should-run-type-checks.mjs +1 -1
  4. package/dist/cmd/format-diff-from.mjs +29 -8
  5. package/dist/cmd/format-diff-from.mjs.map +1 -1
  6. package/dist/cmd/format-uncommitted.d.mts +3 -0
  7. package/dist/cmd/format-uncommitted.d.mts.map +1 -0
  8. package/dist/cmd/format-uncommitted.mjs +59 -0
  9. package/dist/cmd/format-uncommitted.mjs.map +1 -0
  10. package/dist/cmd/gen-index-ts.mjs +1 -1
  11. package/dist/functions/diff.d.mts +32 -2
  12. package/dist/functions/diff.d.mts.map +1 -1
  13. package/dist/functions/diff.mjs +47 -29
  14. package/dist/functions/diff.mjs.map +1 -1
  15. package/dist/functions/exec-async.d.mts +2 -2
  16. package/dist/functions/exec-async.d.mts.map +1 -1
  17. package/dist/functions/format.d.mts +20 -11
  18. package/dist/functions/format.d.mts.map +1 -1
  19. package/dist/functions/format.mjs +134 -95
  20. package/dist/functions/format.mjs.map +1 -1
  21. package/dist/functions/index.mjs +2 -2
  22. package/dist/index.d.mts +1 -0
  23. package/dist/index.d.mts.map +1 -1
  24. package/dist/index.mjs +3 -2
  25. package/dist/index.mjs.map +1 -1
  26. package/package.json +2 -2
  27. package/src/cmd/assert-repo-is-clean.mts +1 -1
  28. package/src/cmd/check-should-run-type-checks.mts +1 -1
  29. package/src/cmd/format-diff-from.mts +35 -9
  30. package/src/cmd/format-uncommitted.mts +67 -0
  31. package/src/cmd/gen-index-ts.mts +1 -1
  32. package/src/functions/diff.mts +85 -32
  33. package/src/functions/diff.test.mts +569 -102
  34. package/src/functions/exec-async.mts +2 -2
  35. package/src/functions/exec-async.test.mts +77 -47
  36. package/src/functions/format.mts +224 -141
  37. package/src/functions/format.test.mts +625 -20
  38. package/src/functions/workspace-utils/run-cmd-in-stages.test.mts +266 -0
  39. package/src/index.mts +2 -0
  40. package/dist/cmd/format-untracked.d.mts +0 -3
  41. package/dist/cmd/format-untracked.d.mts.map +0 -1
  42. package/dist/cmd/format-untracked.mjs +0 -34
  43. package/dist/cmd/format-untracked.mjs.map +0 -1
  44. 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 formatFilesList = async (files, options) => {
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 'ok';
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 = await Promise.allSettled(files.map(async (filePath) => {
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 !== content) {
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
- console.error(`Error formatting ${filePath}:`, error);
55
- throw error;
72
+ if (!silent) {
73
+ console.error(`Error formatting ${filePath}:`, error);
74
+ }
75
+ return Result.err(error);
56
76
  }
57
77
  }));
58
- // Check if any formatting failed
59
- const hasErrors = results.some((result) => result.status === 'rejected');
60
- return hasErrors ? 'err' : 'ok';
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 formatFiles = async (pathGlob, options) => {
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 'ok';
115
+ return Result.ok(undefined);
82
116
  }
83
- return await formatFilesList(files, { silent });
117
+ return await formatFiles(files, { silent });
84
118
  }
85
119
  catch (error) {
86
- console.error('Error in formatFiles:', error);
87
- return 'err';
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 formatUntracked = async (options) => {
97
- const silent = options?.silent ?? false;
98
- try {
99
- const untrackedFilesResult = await getUntrackedFiles({
100
- silent,
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
- echo('No changed files to format');
138
+ console.error('Error getting changed files:', untrackedFilesResult.value);
110
139
  }
111
- return 'ok';
140
+ return untrackedFilesResult;
112
141
  }
113
- if (!silent) {
114
- echo('Formatting changed files:', files);
115
- }
116
- // Filter out non-existent files before formatting
117
- const fileExistenceChecks = await Promise.allSettled(files.map(async (filePath) => {
118
- try {
119
- await fs.readFile(filePath, 'utf8');
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
- const existingFiles = fileExistenceChecks
130
- .filter((result) => result.status === 'fulfilled' && result.value !== undefined)
131
- .map((result) => result.value);
132
- return await formatFilesList(existingFiles, { silent });
150
+ return diffFilesResult;
151
+ }
152
+ mut_files.push(...diffFilesResult.value);
133
153
  }
134
- catch (error) {
135
- console.error('Error in formatUntracked:', error);
136
- return 'err';
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
- try {
154
- // Get files that differ from base branch/commit (excluding deleted files)
155
- const diffFromBaseResult = await getDiffFrom(base, {
156
- silent,
157
- });
158
- if (Result.isErr(diffFromBaseResult)) {
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
- const diffFiles = diffFromBaseResult.value;
163
- let mut_allFiles = diffFiles;
164
- // If includeUntracked is true, also get untracked files
165
- if (options?.includeUntracked ?? true) {
166
- const untrackedFilesResult = await getUntrackedFiles({
167
- silent,
168
- });
169
- if (Result.isErr(untrackedFilesResult)) {
170
- console.error('Error getting untracked files:', untrackedFilesResult.value);
171
- return 'err';
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 untrackedFiles = untrackedFilesResult.value;
209
+ const files = filesResult.value;
174
210
  // Combine and deduplicate files
175
- mut_allFiles = Arr.uniq([...diffFiles, ...untrackedFiles]);
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
- catch (error) {
194
- console.error('Error in formatDiffFrom:', error);
195
- return 'err';
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, formatFilesList, formatUntracked };
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":"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"}
1
+ {"version":3,"file":"format.mjs","sources":["../../src/functions/format.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -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, formatFilesList, formatUntracked } from './format.mjs';
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
@@ -1,2 +1,3 @@
1
1
  export * from './functions/index.mjs';
2
+ export { Result } from 'ts-data-forge';
2
3
  //# sourceMappingURL=index.d.mts.map
@@ -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, formatFilesList, formatUntracked } from './functions/format.mjs';
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
@@ -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.5",
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-untracked": "./src/cmd/format-untracked.mts",
30
+ "format-uncommitted": "./src/cmd/format-uncommitted.mts",
31
31
  "gen-index-ts": "./src/cmd/gen-index-ts.mts"
32
32
  },
33
33
  "files": [
@@ -5,7 +5,7 @@ import { assertRepoIsClean } from '../functions/index.mjs';
5
5
 
6
6
  const cmdDef = cmd.command({
7
7
  name: 'assert-repo-is-clean-cli',
8
- version: '6.0.5',
8
+ version: '6.2.0',
9
9
  args: {
10
10
  silent: cmd.flag({
11
11
  long: 'silent',
@@ -5,7 +5,7 @@ import { checkShouldRunTypeChecks } from '../functions/index.mjs';
5
5
 
6
6
  const cmdDef = cmd.command({
7
7
  name: 'check-should-run-type-checks-cli',
8
- version: '6.0.5',
8
+ version: '6.2.0',
9
9
  args: {
10
10
  pathsIgnore: cmd.multioption({
11
11
  long: 'paths-ignore',
@@ -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.5',
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
- includeUntracked: cmd.flag({
16
- long: 'include-untracked',
16
+ excludeUntracked: cmd.flag({
17
+ long: 'exclude-untracked',
17
18
  type: cmd.optional(cmd.boolean),
18
19
  description:
19
- 'Include untracked files in addition to diff files (default: true)',
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(args).catch((error) => {
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
- includeUntracked?: boolean;
39
- silent?: boolean;
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, args);
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 === 'err') {
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));
@@ -38,7 +38,7 @@ const nonEmptyArray = <T extends cmd.Type<any, any>>(
38
38
 
39
39
  const cmdDef = cmd.command({
40
40
  name: 'gen-index-ts-cli',
41
- version: '6.0.5',
41
+ version: '6.2.0',
42
42
  args: {
43
43
  // required args
44
44
  targetDirectory: cmd.positional({