@sorrell/cli-utilities 1.0.43 → 1.0.47

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 (48) hide show
  1. package/Distribution/FileSystem/FileSystem.Internal.Types.d.ts +27 -0
  2. package/Distribution/FileSystem/FileSystem.Internal.Types.d.ts.map +1 -0
  3. package/Distribution/FileSystem/FileSystem.Internal.Types.js +8 -0
  4. package/Distribution/FileSystem/FileSystem.Internal.Types.js.map +1 -0
  5. package/Distribution/FileSystem/FileSystem.Internal.d.ts +35 -0
  6. package/Distribution/FileSystem/FileSystem.Internal.d.ts.map +1 -0
  7. package/Distribution/FileSystem/FileSystem.Internal.js +178 -0
  8. package/Distribution/FileSystem/FileSystem.Internal.js.map +1 -0
  9. package/Distribution/FileSystem/FileSystem.Types.Internal.d.ts +23 -0
  10. package/Distribution/FileSystem/FileSystem.Types.Internal.d.ts.map +1 -0
  11. package/Distribution/FileSystem/FileSystem.Types.Internal.js +8 -0
  12. package/Distribution/FileSystem/FileSystem.Types.Internal.js.map +1 -0
  13. package/Distribution/FileSystem/FileSystem.Types.d.ts +21 -0
  14. package/Distribution/FileSystem/FileSystem.Types.d.ts.map +1 -0
  15. package/Distribution/FileSystem/FileSystem.Types.js +8 -0
  16. package/Distribution/FileSystem/FileSystem.Types.js.map +1 -0
  17. package/Distribution/FileSystem/FileSystem.d.ts +20 -0
  18. package/Distribution/FileSystem/FileSystem.d.ts.map +1 -0
  19. package/Distribution/FileSystem/FileSystem.js +76 -0
  20. package/Distribution/FileSystem/FileSystem.js.map +1 -0
  21. package/Distribution/FileSystem/index.d.ts +9 -0
  22. package/Distribution/FileSystem/index.d.ts.map +1 -0
  23. package/Distribution/FileSystem/index.js +9 -0
  24. package/Distribution/FileSystem/index.js.map +1 -0
  25. package/Distribution/Git/Git.Internal.Types.d.ts +12 -0
  26. package/Distribution/Git/Git.Internal.Types.d.ts.map +1 -0
  27. package/Distribution/Git/Git.Internal.Types.js +8 -0
  28. package/Distribution/Git/Git.Internal.Types.js.map +1 -0
  29. package/Distribution/Git/Git.Types.d.ts +12 -0
  30. package/Distribution/Git/Git.Types.d.ts.map +1 -0
  31. package/Distribution/Git/Git.Types.js +8 -0
  32. package/Distribution/Git/Git.Types.js.map +1 -0
  33. package/Distribution/Git/Git.d.ts +28 -0
  34. package/Distribution/Git/Git.d.ts.map +1 -0
  35. package/Distribution/Git/Git.js +43 -0
  36. package/Distribution/Git/Git.js.map +1 -0
  37. package/Distribution/Git/index.d.ts +9 -0
  38. package/Distribution/Git/index.d.ts.map +1 -0
  39. package/Distribution/Git/index.js +9 -0
  40. package/Distribution/Git/index.js.map +1 -0
  41. package/Distribution/PackageConfig/PackageConfig.d.ts.map +1 -1
  42. package/Distribution/PackageConfig/PackageConfig.js.map +1 -1
  43. package/Distribution/index.d.ts +4 -2
  44. package/Distribution/index.d.ts.map +1 -1
  45. package/Distribution/index.js +4 -2
  46. package/Distribution/index.js.map +1 -1
  47. package/ReadMe.md +17 -0
  48. package/package.json +21 -12
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @file FileSystem.Types.Internal.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export type FDeletePhase = "Scanning" | "Deleting" | "Done";
8
+ export type FDeleteEntryKind = "File" | "Directory" | "Other";
9
+ export type FDeleteEntry = {
10
+ EntryPath: string;
11
+ Kind: FDeleteEntryKind;
12
+ Size: number;
13
+ };
14
+ export type FDeleteProgress = {
15
+ Phase: FDeletePhase;
16
+ CurrentPath: string | null;
17
+ DiscoveredEntries: number;
18
+ TotalEntries: number;
19
+ DeletedEntries: number;
20
+ TotalBytes: number;
21
+ DeletedBytes: number;
22
+ };
23
+ export type FTerminalDeleteProgressRenderer = {
24
+ Update: (Progress: FDeleteProgress) => void;
25
+ Error: (ErrorValue: unknown) => void;
26
+ };
27
+ //# sourceMappingURL=FileSystem.Internal.Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Internal.Types.d.ts","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Internal.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GAClB,UAAU,GACV,UAAU,GACV,MAAM,CAAC;AAEb,MAAM,MAAM,gBAAgB,GACtB,MAAM,GACN,WAAW,GACX,OAAO,CAAC;AAEd,MAAM,MAAM,YAAY,GACpB;IACI,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,MAAM,eAAe,GACvB;IACI,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC;AAEN,MAAM,MAAM,+BAA+B,GACvC;IACI,MAAM,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,KAAK,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file FileSystem.Types.Internal.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=FileSystem.Internal.Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Internal.Types.js","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Internal.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @file FileSystem.Internal.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import type { FDeleteEntry, FDeleteProgress, FTerminalDeleteProgressRenderer } from "./FileSystem.Internal.Types.js";
8
+ import type { FDeleteWithProgressOptions } from "./FileSystem.Types.js";
9
+ /**
10
+ * Determines whether a given {@link ErrorValue} represents a missing file error.
11
+ *
12
+ * @param ErrorValue - The value to test.
13
+ *
14
+ * @returns {boolean} Whether the given {@link ErrorValue} is an object representing
15
+ * a missing file error.
16
+ */
17
+ export declare function IsMissingFileError(ErrorValue: unknown): boolean;
18
+ /**
19
+ * Build a plan of files to delete, so that the deletion progress
20
+ * can be displayed to the user.
21
+ *
22
+ * @param RootPath - The root path of the files to delete.
23
+ * @param Progress - The {@link FDeleteProgress} object tracking the deletion.
24
+ * @param Options - The options for this deletion.
25
+ *
26
+ * @returns {Promise<Array<FDeleteEntry>>} The entries to delete.
27
+ */
28
+ export declare function BuildDeletionPlan(RootPath: string, Progress: FDeleteProgress, Options: FDeleteWithProgressOptions): Promise<Array<FDeleteEntry>>;
29
+ export declare function CreateScanningMessage(Progress: FDeleteProgress): string;
30
+ export declare function CreateDeletingMessage(Progress: FDeleteProgress): string;
31
+ export declare function CreateDoneMessage(Progress: FDeleteProgress): string;
32
+ export declare function CreateErrorMessage(ErrorValue: unknown): string;
33
+ export declare function FormatBytes(Bytes: number): string;
34
+ export declare function CreateTerminalDeleteProgressRenderer(Options: FDeleteWithProgressOptions): FTerminalDeleteProgressRenderer;
35
+ //# sourceMappingURL=FileSystem.Internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Internal.d.ts","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Internal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACR,YAAY,EACZ,eAAe,EACf,+BAA+B,EAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAExE;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAQ/D;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,0BAA0B,GACpC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAmE9B;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAGvE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAWvE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAGnE;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,CAQ9D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAajD;AAED,wBAAgB,oCAAoC,CAChD,OAAO,EAAE,0BAA0B,GACpC,+BAA+B,CAuGjC"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @file FileSystem.Internal.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import * as Path from "path";
8
+ import { progress as CreateProgress, spinner as CreateSpinner } from "@clack/prompts";
9
+ import { promises as Fs } from "fs";
10
+ /**
11
+ * Determines whether a given {@link ErrorValue} represents a missing file error.
12
+ *
13
+ * @param ErrorValue - The value to test.
14
+ *
15
+ * @returns {boolean} Whether the given {@link ErrorValue} is an object representing
16
+ * a missing file error.
17
+ */
18
+ export function IsMissingFileError(ErrorValue) {
19
+ return (typeof ErrorValue === "object" &&
20
+ ErrorValue !== null &&
21
+ "code" in ErrorValue &&
22
+ ErrorValue.code === "ENOENT");
23
+ }
24
+ /**
25
+ * Build a plan of files to delete, so that the deletion progress
26
+ * can be displayed to the user.
27
+ *
28
+ * @param RootPath - The root path of the files to delete.
29
+ * @param Progress - The {@link FDeleteProgress} object tracking the deletion.
30
+ * @param Options - The options for this deletion.
31
+ *
32
+ * @returns {Promise<Array<FDeleteEntry>>} The entries to delete.
33
+ */
34
+ export async function BuildDeletionPlan(RootPath, Progress, Options) {
35
+ const Entries = [];
36
+ /* eslint-disable-next-line jsdoc/require-jsdoc */
37
+ async function Visit(CurrentPath) {
38
+ Options.Signal?.throwIfAborted();
39
+ Progress.Phase = "Scanning";
40
+ Progress.CurrentPath = CurrentPath;
41
+ Options.OnProgress?.({ ...Progress });
42
+ let Stats;
43
+ try {
44
+ Stats = await Fs.lstat(CurrentPath);
45
+ }
46
+ catch (ErrorValue) {
47
+ if (IsMissingFileError(ErrorValue)) {
48
+ return;
49
+ }
50
+ throw ErrorValue;
51
+ }
52
+ if (Stats.isDirectory()) {
53
+ const Children = await Fs.readdir(CurrentPath, { withFileTypes: true });
54
+ for (const Child of Children) {
55
+ await Visit(Path.join(CurrentPath, Child.name));
56
+ }
57
+ Entries.push({
58
+ EntryPath: CurrentPath,
59
+ Kind: "Directory",
60
+ Size: 0
61
+ });
62
+ }
63
+ else {
64
+ const Size = Stats.isFile() ? Stats.size : 0;
65
+ Entries.push({
66
+ EntryPath: CurrentPath,
67
+ Kind: Stats.isFile() ? "File" : "Other",
68
+ Size
69
+ });
70
+ Progress.TotalBytes += Size;
71
+ }
72
+ Progress.DiscoveredEntries = Entries.length;
73
+ Options.OnProgress?.({ ...Progress });
74
+ }
75
+ await Visit(RootPath);
76
+ return Entries;
77
+ }
78
+ export function CreateScanningMessage(Progress) {
79
+ return `Scanning... ${Progress.DiscoveredEntries} entries, ${FormatBytes(Progress.TotalBytes)} found`;
80
+ }
81
+ export function CreateDeletingMessage(Progress) {
82
+ const Percent = Progress.TotalEntries === 0
83
+ ? 100
84
+ : (Progress.DeletedEntries / Progress.TotalEntries) * 100;
85
+ return (`Deleting... ${Progress.DeletedEntries}/${Progress.TotalEntries} entries ` +
86
+ `(${Percent.toFixed(1)}%), ` +
87
+ `${FormatBytes(Progress.DeletedBytes)} / ${FormatBytes(Progress.TotalBytes)}`);
88
+ }
89
+ export function CreateDoneMessage(Progress) {
90
+ return `Deleted ${Progress.DeletedEntries} entries, ${FormatBytes(Progress.DeletedBytes)}.`;
91
+ }
92
+ export function CreateErrorMessage(ErrorValue) {
93
+ if (ErrorValue instanceof Error) {
94
+ return `Delete failed: ${ErrorValue.message}`;
95
+ }
96
+ return "Delete failed.";
97
+ }
98
+ export function FormatBytes(Bytes) {
99
+ const Units = ["B", "KB", "MB", "GB", "TB"];
100
+ let Value = Bytes;
101
+ let UnitIndex = 0;
102
+ while (Value >= 1024 && UnitIndex < Units.length - 1) {
103
+ Value /= 1024;
104
+ UnitIndex += 1;
105
+ }
106
+ return `${Value.toFixed(UnitIndex === 0 ? 0 : 1)} ${Units[UnitIndex]}`;
107
+ }
108
+ export function CreateTerminalDeleteProgressRenderer(Options) {
109
+ if (Options.ShouldRenderTerminalProgress === false) {
110
+ return {
111
+ Error() {
112
+ return;
113
+ },
114
+ Update() {
115
+ return;
116
+ }
117
+ };
118
+ }
119
+ const ScanningSpinner = CreateSpinner({ indicator: "timer" });
120
+ let HasStartedScanningSpinner = false;
121
+ let HasStoppedScanningSpinner = false;
122
+ let DeletionProgress = null;
123
+ let LastRenderedDeletedEntries = 0;
124
+ return {
125
+ Error(ErrorValue) {
126
+ const Message = CreateErrorMessage(ErrorValue);
127
+ if (DeletionProgress !== null) {
128
+ DeletionProgress.error(Message);
129
+ return;
130
+ }
131
+ if (HasStartedScanningSpinner && !HasStoppedScanningSpinner) {
132
+ ScanningSpinner.stop(Message);
133
+ }
134
+ },
135
+ Update(Progress) {
136
+ if (Progress.Phase === "Scanning") {
137
+ const Message = CreateScanningMessage(Progress);
138
+ if (!HasStartedScanningSpinner) {
139
+ ScanningSpinner.start(Message);
140
+ HasStartedScanningSpinner = true;
141
+ }
142
+ else {
143
+ ScanningSpinner.message(Message);
144
+ }
145
+ return;
146
+ }
147
+ if (!HasStoppedScanningSpinner) {
148
+ if (HasStartedScanningSpinner) {
149
+ ScanningSpinner.stop(`Scanned ${Progress.DiscoveredEntries} entries ` +
150
+ `(${FormatBytes(Progress.TotalBytes)}).`);
151
+ }
152
+ HasStoppedScanningSpinner = true;
153
+ }
154
+ if (Progress.Phase === "Deleting") {
155
+ if (DeletionProgress === null) {
156
+ DeletionProgress = CreateProgress({
157
+ max: Math.max(Progress.TotalEntries, 1),
158
+ style: "block"
159
+ });
160
+ DeletionProgress.start(CreateDeletingMessage(Progress));
161
+ }
162
+ const DeletedEntryDelta = Progress.DeletedEntries - LastRenderedDeletedEntries;
163
+ if (DeletedEntryDelta > 0) {
164
+ DeletionProgress.advance(DeletedEntryDelta, CreateDeletingMessage(Progress));
165
+ LastRenderedDeletedEntries = Progress.DeletedEntries;
166
+ }
167
+ else {
168
+ DeletionProgress.message(CreateDeletingMessage(Progress));
169
+ }
170
+ return;
171
+ }
172
+ if (DeletionProgress !== null) {
173
+ DeletionProgress.stop(CreateDoneMessage(Progress));
174
+ }
175
+ }
176
+ };
177
+ }
178
+ //# sourceMappingURL=FileSystem.Internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Internal.js","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file FileSystem.Types.Internal.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export type FDeletePhase = "Scanning" | "Deleting" | "Done";
8
+ export type FDeleteEntryKind = "File" | "Directory" | "Other";
9
+ export type FDeleteEntry = {
10
+ EntryPath: string;
11
+ Kind: FDeleteEntryKind;
12
+ Size: number;
13
+ };
14
+ export type FDeleteProgress = {
15
+ Phase: FDeletePhase;
16
+ CurrentPath: string | null;
17
+ DiscoveredEntries: number;
18
+ TotalEntries: number;
19
+ DeletedEntries: number;
20
+ TotalBytes: number;
21
+ DeletedBytes: number;
22
+ };
23
+ //# sourceMappingURL=FileSystem.Types.Internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Types.Internal.d.ts","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Types.Internal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GAClB,UAAU,GACV,UAAU,GACV,MAAM,CAAC;AAEb,MAAM,MAAM,gBAAgB,GACtB,MAAM,GACN,WAAW,GACX,OAAO,CAAC;AAEd,MAAM,MAAM,YAAY,GACpB;IACI,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,MAAM,eAAe,GACvB;IACI,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file FileSystem.Types.Internal.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=FileSystem.Types.Internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Types.Internal.js","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Types.Internal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @file FileSystem.Types.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import type { FDeleteProgress } from "./FileSystem.Internal.Types.js";
8
+ import type { TFunction } from "@sorrell/utilities/functional";
9
+ /**
10
+ * @property {TFunction<FDeleteProgress>} OnProgress - The callback that is called
11
+ * upon deleting files.
12
+ * @property {boolean} ShouldRenderTerminalProgress - Should the progress be rendered
13
+ * in the terminal (default is `true`).
14
+ * @property {AbortSignal} Signal - A signal to abort the deletion.
15
+ */
16
+ export type FDeleteWithProgressOptions = {
17
+ OnProgress?: TFunction<FDeleteProgress>;
18
+ ShouldRenderTerminalProgress?: boolean;
19
+ Signal?: AbortSignal;
20
+ };
21
+ //# sourceMappingURL=FileSystem.Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Types.d.ts","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,MAAM,0BAA0B,GAClC;IACI,UAAU,CAAC,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IACxC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file FileSystem.Types.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=FileSystem.Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.Types.js","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @file FileSystem.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import type { FDeleteWithProgressOptions } from "./FileSystem.Types.js";
8
+ /**
9
+ * Recursively delete a given {@link RootPath}, and display the progress in
10
+ * the terminal.
11
+ *
12
+ * @param RootPath - The path to recursively delete.
13
+ * @param Options - The {@link FDeleteWithProgressOptions} object specifying
14
+ * options for this deletion.
15
+ *
16
+ * @returns {Promise<void>} The {@link Promise} that is fulfilled upon the deletion
17
+ * of the given {@link RootPath}.
18
+ */
19
+ export declare function DeleteWithProgress(RootPath: string, Options?: FDeleteWithProgressOptions): Promise<void>;
20
+ //# sourceMappingURL=FileSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAKxE;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,0BAAgC,GAC1C,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @file FileSystem.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import { BuildDeletionPlan, CreateTerminalDeleteProgressRenderer, IsMissingFileError } from "./FileSystem.Internal.js";
8
+ import { promises as Fs } from "fs";
9
+ /* eslint-disable jsdoc/require-example */
10
+ /**
11
+ * Recursively delete a given {@link RootPath}, and display the progress in
12
+ * the terminal.
13
+ *
14
+ * @param RootPath - The path to recursively delete.
15
+ * @param Options - The {@link FDeleteWithProgressOptions} object specifying
16
+ * options for this deletion.
17
+ *
18
+ * @returns {Promise<void>} The {@link Promise} that is fulfilled upon the deletion
19
+ * of the given {@link RootPath}.
20
+ */
21
+ export async function DeleteWithProgress(RootPath, Options = {}) {
22
+ const TerminalProgressRenderer = CreateTerminalDeleteProgressRenderer(Options);
23
+ const ProgressOptions = {
24
+ ...Options,
25
+ OnProgress(Progress) {
26
+ TerminalProgressRenderer.Update(Progress);
27
+ Options.OnProgress?.({ ...Progress });
28
+ }
29
+ };
30
+ const Progress = {
31
+ CurrentPath: null,
32
+ DeletedBytes: 0,
33
+ DeletedEntries: 0,
34
+ DiscoveredEntries: 0,
35
+ Phase: "Scanning",
36
+ TotalBytes: 0,
37
+ TotalEntries: 0
38
+ };
39
+ try {
40
+ const Entries = await BuildDeletionPlan(RootPath, Progress, ProgressOptions);
41
+ Progress.Phase = "Deleting";
42
+ Progress.TotalEntries = Entries.length;
43
+ Progress.CurrentPath = null;
44
+ ProgressOptions.OnProgress?.({ ...Progress });
45
+ for (const Entry of Entries) {
46
+ ProgressOptions.Signal?.throwIfAborted();
47
+ Progress.CurrentPath = Entry.EntryPath;
48
+ ProgressOptions.OnProgress?.({ ...Progress });
49
+ try {
50
+ if (Entry.Kind === "Directory") {
51
+ await Fs.rmdir(Entry.EntryPath);
52
+ }
53
+ else {
54
+ await Fs.unlink(Entry.EntryPath);
55
+ }
56
+ }
57
+ catch (ErrorValue) {
58
+ if (!IsMissingFileError(ErrorValue)) {
59
+ throw ErrorValue;
60
+ }
61
+ }
62
+ Progress.DeletedEntries += 1;
63
+ Progress.DeletedBytes += Entry.Size;
64
+ ProgressOptions.OnProgress?.({ ...Progress });
65
+ }
66
+ Progress.Phase = "Done";
67
+ Progress.CurrentPath = null;
68
+ ProgressOptions.OnProgress?.({ ...Progress });
69
+ }
70
+ catch (ErrorValue) {
71
+ TerminalProgressRenderer.Error(ErrorValue);
72
+ throw ErrorValue;
73
+ }
74
+ }
75
+ /* eslint-enable jsdoc/require-example */
76
+ //# sourceMappingURL=FileSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../Source/FileSystem/FileSystem.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,iBAAiB,EACjB,oCAAoC,EACpC,kBAAkB,EACrB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AAEpC,0CAA0C;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,QAAgB,EAChB,UAAsC,EAAG;IAGzC,MAAM,wBAAwB,GAC1B,oCAAoC,CAAC,OAAO,CAAC,CAAC;IAElD,MAAM,eAAe,GACjB;QACI,GAAG,OAAO;QACV,UAAU,CAAC,QAAyB;YAEhC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1C,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;KACJ,CAAC;IAEN,MAAM,QAAQ,GACV;QACI,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,iBAAiB,EAAE,CAAC;QACpB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;KAClB,CAAC;IAEN,IACA,CAAC;QACG,MAAM,OAAO,GAAwB,MAAM,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QAElG,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC;QAC5B,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;QACvC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAE9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAC3B,CAAC;YACG,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YAEzC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC;YACvC,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;YAE9C,IACA,CAAC;gBACG,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAC9B,CAAC;oBACG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC;qBAED,CAAC;oBACG,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;YACD,OAAO,UAAU,EACjB,CAAC;gBACG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EACnC,CAAC;oBACG,MAAM,UAAU,CAAC;gBACrB,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;YAC7B,QAAQ,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC;YAEpC,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;QACxB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,eAAe,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,UAAU,EACjB,CAAC;QACG,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,UAAU,CAAC;IACrB,CAAC;AACL,CAAC;AAED,yCAAyC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file index.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export * from "./FileSystem.js";
8
+ export * from "./FileSystem.Types.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../Source/FileSystem/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file index.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export * from "./FileSystem.js";
8
+ export * from "./FileSystem.Types.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../Source/FileSystem/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @file Git.Internal.Types.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ /** The data used in {@link RepoNotCleanError}. */
8
+ export type FRepoNotCleanErrorData = Readonly<{
9
+ RepositoryPath: string;
10
+ StatusOutput: string;
11
+ }>;
12
+ //# sourceMappingURL=Git.Internal.Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.Internal.Types.d.ts","sourceRoot":"","sources":["../../Source/Git/Git.Internal.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,kDAAkD;AAClD,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,CAAC;IACL,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file Git.Internal.Types.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=Git.Internal.Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.Internal.Types.js","sourceRoot":"","sources":["../../Source/Git/Git.Internal.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @file Git.Types.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import type { CommandExecutor, Error } from "@effect/platform";
8
+ import type { RepoNotCleanError } from "./Git.js";
9
+ import type { Effect } from "effect";
10
+ /** The {@link Effect.Effect | effect} returned by {@link RequireCleanGitRepository}. */
11
+ export type ERequireCleanRepo = Effect.Effect<void, RepoNotCleanError | Error.PlatformError, CommandExecutor.CommandExecutor>;
12
+ //# sourceMappingURL=Git.Types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.Types.d.ts","sourceRoot":"","sources":["../../Source/Git/Git.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAA6B,MAAM,UAAU,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GACzB,MAAM,CAAC,MAAM,CACT,IAAI,EACJ,iBAAiB,GAAG,KAAK,CAAC,aAAa,EACvC,eAAe,CAAC,eAAe,CAClC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file Git.Types.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=Git.Types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.Types.js","sourceRoot":"","sources":["../../Source/Git/Git.Types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @file Git.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import type { ERequireCleanRepo } from "./Git.Types.js";
8
+ import type { FRepoNotCleanErrorData } from "./Git.Internal.Types.js";
9
+ declare const RepoNotCleanError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
10
+ readonly _tag: "RepoNotCleanError";
11
+ } & Readonly<A>;
12
+ /** The error that is thrown when the current `git` repo must be clean, but is not. */
13
+ export declare class RepoNotCleanError extends RepoNotCleanError_base<FRepoNotCleanErrorData> {
14
+ }
15
+ /**
16
+ * Get an {@link Effect.Effect | effect} that causes the program to fail if a given `git`
17
+ * repo is not clean.
18
+ *
19
+ * @param RepositoryPath - The *optional* path to a directory in the repository. If no path is specified,
20
+ * then the current working directory is used.
21
+ *
22
+ * @returns {ERequireCleanRepo} An {@link Effect.Effect | effect} that causes the program to fail
23
+ * if the `git` repo at the given {@link RepositoryPath} (or CWD if no {@link RepositoryPath} is specified)
24
+ * is not clean.
25
+ */
26
+ export declare function RequireCleanGitRepository(RepositoryPath?: string): ERequireCleanRepo;
27
+ export {};
28
+ //# sourceMappingURL=Git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.d.ts","sourceRoot":"","sources":["../../Source/Git/Git.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;;;;AAEtE,sFAAsF;AACtF,qBAAa,iBAAkB,SAAQ,uBAAsC,sBAAsB,CAAC;CAAI;AAIxG;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA0BpF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @file Git.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ import { Data, Effect } from "effect";
8
+ import { Command } from "@effect/platform";
9
+ /** The error that is thrown when the current `git` repo must be clean, but is not. */
10
+ export class RepoNotCleanError extends Data.TaggedError("RepoNotCleanError") {
11
+ }
12
+ ;
13
+ /* eslint-disable jsdoc/require-example */
14
+ /**
15
+ * Get an {@link Effect.Effect | effect} that causes the program to fail if a given `git`
16
+ * repo is not clean.
17
+ *
18
+ * @param RepositoryPath - The *optional* path to a directory in the repository. If no path is specified,
19
+ * then the current working directory is used.
20
+ *
21
+ * @returns {ERequireCleanRepo} An {@link Effect.Effect | effect} that causes the program to fail
22
+ * if the `git` repo at the given {@link RepositoryPath} (or CWD if no {@link RepositoryPath} is specified)
23
+ * is not clean.
24
+ */
25
+ export function RequireCleanGitRepository(RepositoryPath) {
26
+ return Effect.gen(function* () {
27
+ if (RepositoryPath === undefined) {
28
+ RepositoryPath = process.cwd();
29
+ }
30
+ const StatusCommand = Command
31
+ .make("git", "status", "--porcelain=v1")
32
+ .pipe(Command.workingDirectory(RepositoryPath));
33
+ const StatusOutput = yield* Command.string(StatusCommand);
34
+ if (StatusOutput.trim().length > 0) {
35
+ return yield* Effect.fail(new RepoNotCleanError({
36
+ RepositoryPath,
37
+ StatusOutput
38
+ }));
39
+ }
40
+ });
41
+ }
42
+ /* eslint-enable jsdoc/require-example */
43
+ //# sourceMappingURL=Git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Git.js","sourceRoot":"","sources":["../../Source/Git/Git.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C,sFAAsF;AACtF,MAAM,OAAO,iBAAkB,SAAQ,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAyB;CAAI;AAAA,CAAC;AAEzG,0CAA0C;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,yBAAyB,CAAC,cAAuB;IAE7D,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEvB,IAAI,cAAc,KAAK,SAAS,EAChC,CAAC;YACG,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,aAAa,GACf,OAAO;aACF,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC;aACvC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;QAExD,MAAM,YAAY,GAAW,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAElE,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAClC,CAAC;YACG,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACrB,IAAI,iBAAiB,CAAC;gBAClB,cAAc;gBACd,YAAY;aACf,CAAC,CACL,CAAC;QACN,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,yCAAyC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file index.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export * from "./Git.js";
8
+ export * from "./Git.Types.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../Source/Git/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @file index.ts
3
+ * @author Gage Sorrell <gage@sorrell.sh>
4
+ * @copyright (c) 2026 Gage Sorrell
5
+ * @license MIT
6
+ */
7
+ export * from "./Git.js";
8
+ export * from "./Git.Types.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../Source/Git/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PackageConfig.d.ts","sourceRoot":"","sources":["../../Source/PackageConfig/PackageConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAmC,cAAc,IAAI,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACjG,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGhG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAC1B,YAAY,SAAS,eAAe,EACpC,WAAW,EAEX,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,EAC/D,eAAe,CAAC,EAAE,GAAI,MAAO,OAAO,GACrC,oBAAoB,CAAC,cAAc,CA+CrC"}
1
+ {"version":3,"file":"PackageConfig.d.ts","sourceRoot":"","sources":["../../Source/PackageConfig/PackageConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAmC,cAAc,IAAI,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACjG,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGhG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAC1B,YAAY,SAAS,eAAe,EACpC,WAAW,EAEX,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,EAC/D,eAAe,CAAC,EAAE,GAAI,MAAO,OAAO,GACrC,oBAAoB,CAAC,cAAc,CAgDrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PackageConfig.js","sourceRoot":"","sources":["../../Source/PackageConfig/PackageConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,cAAc,CAI1B,WAAmB,EACnB,cAA+D,EAC/D,eAAoC;IAGpC,MAAM,oBAAoB,GAA0B,2BAA2B,CAC3E,WAAW,EACX,cAAc,EACd,eAAe,CAClB,CAAC;IAEF,OAAO,oBAAoB,CAAC,IAAI,CAC5B;QACI,IAAI,EAAE,CAAQ,aAAmC,EAAE,EAAE;YAEjD,OAAO,oBAAoB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,QAA6C,EAAE,EAAE,CAC7D,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CACpC,CAAC;QACN,CAAC;QAED,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CACpC;YACI,KAAK,EAAE,uBAAuB,CAAC,KAAK;YAEpC,IAAI,EAAE,CACF,YAAmC,EACnC,aAA6C,EAC7C,KAAc,EAChB,EAAE;gBAEA,OAAO,oBAAoB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,QAA6C,EAAE,EAAE,CAC7D,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAC9D,CACJ,CAAC;YACN,CAAC;YAED,iBAAiB,EAAE,CAAC,YAAmC,EAAE,EAAE;gBAEvD,OAAO,oBAAoB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,QAA6C,EAAE,EAAE,CAC7D,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,CACrD,CACJ,CAAC;YACN,CAAC;SACJ,CACJ;KACJ,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"PackageConfig.js","sourceRoot":"","sources":["../../Source/PackageConfig/PackageConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,cAAc,IAAI,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAEjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,cAAc,CAI1B,WAAmB,EACnB,cAA+D,EAC/D,eAAoC;IAGpC,MAAM,oBAAoB,GACtB,2BAA2B,CACvB,WAAW,EACX,cAAc,EACd,eAAe,CAClB,CAAC;IAEN,OAAO,oBAAoB,CAAC,IAAI,CAC5B;QACI,IAAI,EAAE,CAAQ,aAAmC,EAAE,EAAE;YAEjD,OAAO,oBAAoB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,QAA6C,EAAE,EAAE,CAC7D,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CACpC,CAAC;QACN,CAAC;QAED,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CACpC;YACI,KAAK,EAAE,uBAAuB,CAAC,KAAK;YAEpC,IAAI,EAAE,CACF,YAAmC,EACnC,aAA6C,EAC7C,KAAc,EAChB,EAAE;gBAEA,OAAO,oBAAoB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,QAA6C,EAAE,EAAE,CAC7D,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,KAAK,CAAC,CAC9D,CACJ,CAAC;YACN,CAAC;YAED,iBAAiB,EAAE,CAAC,YAAmC,EAAE,EAAE;gBAEvD,OAAO,oBAAoB,CAAC,IAAI,CAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,QAA6C,EAAE,EAAE,CAC7D,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,CACrD,CACJ,CAAC;YACN,CAAC;SACJ,CACJ;KACJ,CACJ,CAAC;AACN,CAAC"}
@@ -4,10 +4,12 @@
4
4
  * @copyright (c) 2026 Gage Sorrell
5
5
  * @license MIT
6
6
  */
7
- export * from "./Inquirer/Confirm.js";
8
7
  export * as Command from "./Command/index.js";
8
+ export * as English from "./English/index.js";
9
+ export * as PackageConfig from "./PackageConfig/index.js";
9
10
  export * as Listr from "./Listr/index.js";
10
- export * as Inquirer from "./Inquirer/index.js";
11
+ export * as Fs from "./FileSystem/index.js";
12
+ export * as Git from "./Git/index.js";
11
13
  export * as PseudoTerminal from "./PseudoTerminal/index.js";
12
14
  export * as Format from "./Format/index.js";
13
15
  export * as Ora from "./Ora/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../Source/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../Source/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,cAAc,0BAA0B,CAAC"}
@@ -4,10 +4,12 @@
4
4
  * @copyright (c) 2026 Gage Sorrell
5
5
  * @license MIT
6
6
  */
7
- export * from "./Inquirer/Confirm.js";
8
7
  export * as Command from "./Command/index.js";
8
+ export * as English from "./English/index.js";
9
+ export * as PackageConfig from "./PackageConfig/index.js";
9
10
  export * as Listr from "./Listr/index.js";
10
- export * as Inquirer from "./Inquirer/index.js";
11
+ export * as Fs from "./FileSystem/index.js";
12
+ export * as Git from "./Git/index.js";
11
13
  export * as PseudoTerminal from "./PseudoTerminal/index.js";
12
14
  export * as Format from "./Format/index.js";
13
15
  export * as Ora from "./Ora/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../Source/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../Source/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,cAAc,0BAA0B,CAAC"}
package/ReadMe.md ADDED
@@ -0,0 +1,17 @@
1
+ *Copyright &copy; 2026 Gage Sorrell. Released under the [MIT license](./License.md).*
2
+
3
+ # `@sorrell/cli-utilities`
4
+
5
+ **Purpose.**&ensp;General-purpose utilities for CLI applications, written in TypeScript.
6
+
7
+ ## Installation
8
+
9
+ In your NodeJS project,
10
+
11
+ ```bash
12
+ npm install @sorrell/cli-utilities
13
+ ```
14
+
15
+ ## Documentation
16
+
17
+ `@TODO` [Documentation is available here.](https://link.sorrell.sh/cli-utils)
package/package.json CHANGED
@@ -1,16 +1,19 @@
1
1
  {
2
2
  "name": "@sorrell/cli-utilities",
3
- "version": "1.0.43",
4
- "description": "Utilities for CLI tools.",
3
+ "version": "1.0.47",
4
+ "description": "Utilities developing CLI tools with TypeScript.",
5
5
  "keywords": [
6
6
  "cli",
7
7
  "utility",
8
8
  "utilities",
9
9
  "typescript",
10
10
  "ts",
11
+ "sorrell",
11
12
  "inquirer",
12
13
  "ora",
13
- "commander"
14
+ "commander",
15
+ "clack",
16
+ "prompts"
14
17
  ],
15
18
  "homepage": "https://github.com/GageSorrell/SorrellWm/tree/Master/Package/CliUtilities",
16
19
  "bugs": {
@@ -40,6 +43,18 @@
40
43
  "require": "./Distribution/Format/index.js",
41
44
  "types": "./Distribution/Format/index.d.ts"
42
45
  },
46
+ "./fs": {
47
+ "default": "./Distribution/FileSystem/index.js",
48
+ "import": "./Distribution/FileSystem/index.js",
49
+ "require": "./Distribution/FileSystem/index.js",
50
+ "types": "./Distribution/FileSystem/index.d.ts"
51
+ },
52
+ "./git": {
53
+ "default": "./Distribution/Git/index.js",
54
+ "import": "./Distribution/Git/index.js",
55
+ "require": "./Distribution/Git/index.js",
56
+ "types": "./Distribution/Git/index.d.ts"
57
+ },
43
58
  "./inquirer": {
44
59
  "default": "./Distribution/Inquirer/index.js",
45
60
  "import": "./Distribution/Inquirer/index.js",
@@ -65,24 +80,18 @@
65
80
  "types": "./Distribution/PseudoTerminal/index.d.ts"
66
81
  }
67
82
  },
68
- "main": "./Distribution/index.js",
69
- "types": "./Distribution/index.d.ts",
70
83
  "scripts": {
71
84
  "build": "tsc -p tsconfig.json"
72
85
  },
73
86
  "devDependencies": {
74
- "@types/node": "^25.5.0",
75
- "@typescript/native-preview": "^7.0.0-dev.20260326.1",
87
+ "@types/node": "^24.12.2",
76
88
  "package-json-type": "^1.1.2"
77
89
  },
78
90
  "dependencies": {
91
+ "@clack/prompts": "^1.4.0",
79
92
  "@effect/platform": "^0.96.0",
80
- "@inquirer/core": "^11.1.7",
81
- "@inquirer/prompts": "^8.3.2",
82
- "@inquirer/type": "^4.0.4",
83
93
  "@listr2/prompt-adapter-enquirer": "^4.2.1",
84
- "@sorrell/inquirer-file-selector": "^1.0.4",
85
- "@sorrell/utilities": "^1.1.60",
94
+ "@sorrell/utilities": "^1.2.4",
86
95
  "chalk": "^5.6.2",
87
96
  "cli-table3": "^0.6.5",
88
97
  "clipboardy": "^5.3.1",