pushwork 1.0.4 → 1.0.7

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 (195) hide show
  1. package/README.md +87 -328
  2. package/dist/.pushwork/automerge/3P/Dm3ekE2pmjGnWvDaG3vSR7ww98/snapshot/aa2349c94955ea561f698720142f9d884a6872d9f82dc332d578c216beb0df0e +0 -0
  3. package/dist/.pushwork/automerge/st/orage-adapter-id +1 -0
  4. package/dist/.pushwork/config.json +15 -0
  5. package/dist/.pushwork/snapshot.json +7 -0
  6. package/dist/cli.js +231 -170
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands.d.ts +51 -0
  9. package/dist/commands.d.ts.map +1 -0
  10. package/dist/commands.js +799 -0
  11. package/dist/commands.js.map +1 -0
  12. package/dist/core/change-detection.d.ts +6 -19
  13. package/dist/core/change-detection.d.ts.map +1 -1
  14. package/dist/core/change-detection.js +101 -80
  15. package/dist/core/change-detection.js.map +1 -1
  16. package/dist/{config/index.d.ts → core/config.d.ts} +13 -3
  17. package/dist/core/config.d.ts.map +1 -0
  18. package/dist/{config/index.js → core/config.js} +55 -73
  19. package/dist/core/config.js.map +1 -0
  20. package/dist/core/index.d.ts +1 -0
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +1 -1
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/move-detection.d.ts +12 -50
  25. package/dist/core/move-detection.d.ts.map +1 -1
  26. package/dist/core/move-detection.js +58 -139
  27. package/dist/core/move-detection.js.map +1 -1
  28. package/dist/core/snapshot.d.ts +0 -4
  29. package/dist/core/snapshot.d.ts.map +1 -1
  30. package/dist/core/snapshot.js +2 -11
  31. package/dist/core/snapshot.js.map +1 -1
  32. package/dist/core/sync-engine.d.ts +5 -11
  33. package/dist/core/sync-engine.d.ts.map +1 -1
  34. package/dist/core/sync-engine.js +220 -362
  35. package/dist/core/sync-engine.js.map +1 -1
  36. package/dist/index.d.ts +0 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +0 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/types/config.d.ts +43 -67
  41. package/dist/types/config.d.ts.map +1 -1
  42. package/dist/types/config.js +6 -0
  43. package/dist/types/config.js.map +1 -1
  44. package/dist/types/documents.d.ts +15 -3
  45. package/dist/types/documents.d.ts.map +1 -1
  46. package/dist/types/documents.js.map +1 -1
  47. package/dist/types/index.d.ts.map +1 -1
  48. package/dist/types/index.js +0 -3
  49. package/dist/types/index.js.map +1 -1
  50. package/dist/types/snapshot.d.ts +3 -21
  51. package/dist/types/snapshot.d.ts.map +1 -1
  52. package/dist/types/snapshot.js +0 -14
  53. package/dist/types/snapshot.js.map +1 -1
  54. package/dist/utils/content.d.ts.map +1 -1
  55. package/dist/utils/content.js +2 -6
  56. package/dist/utils/content.js.map +1 -1
  57. package/dist/utils/directory.d.ts +10 -0
  58. package/dist/utils/directory.d.ts.map +1 -0
  59. package/dist/utils/directory.js +37 -0
  60. package/dist/utils/directory.js.map +1 -0
  61. package/dist/utils/fs.d.ts +15 -2
  62. package/dist/utils/fs.d.ts.map +1 -1
  63. package/dist/utils/fs.js +63 -53
  64. package/dist/utils/fs.js.map +1 -1
  65. package/dist/utils/index.d.ts +1 -1
  66. package/dist/utils/index.d.ts.map +1 -1
  67. package/dist/utils/index.js +1 -4
  68. package/dist/utils/index.js.map +1 -1
  69. package/dist/utils/mime-types.d.ts.map +1 -1
  70. package/dist/utils/mime-types.js +11 -4
  71. package/dist/utils/mime-types.js.map +1 -1
  72. package/dist/utils/network-sync.d.ts +0 -6
  73. package/dist/utils/network-sync.d.ts.map +1 -1
  74. package/dist/utils/network-sync.js +55 -99
  75. package/dist/utils/network-sync.js.map +1 -1
  76. package/dist/utils/output.d.ts +129 -0
  77. package/dist/utils/output.d.ts.map +1 -0
  78. package/dist/utils/output.js +375 -0
  79. package/dist/utils/output.js.map +1 -0
  80. package/dist/utils/repo-factory.d.ts +2 -6
  81. package/dist/utils/repo-factory.d.ts.map +1 -1
  82. package/dist/utils/repo-factory.js +8 -22
  83. package/dist/utils/repo-factory.js.map +1 -1
  84. package/dist/utils/string-similarity.d.ts +14 -0
  85. package/dist/utils/string-similarity.d.ts.map +1 -0
  86. package/dist/utils/string-similarity.js +43 -0
  87. package/dist/utils/string-similarity.js.map +1 -0
  88. package/dist/utils/trace.d.ts +19 -0
  89. package/dist/utils/trace.d.ts.map +1 -0
  90. package/dist/utils/trace.js +68 -0
  91. package/dist/utils/trace.js.map +1 -0
  92. package/package.json +17 -12
  93. package/src/cli.ts +326 -252
  94. package/src/commands.ts +988 -0
  95. package/src/core/change-detection.ts +199 -162
  96. package/src/{config/index.ts → core/config.ts} +65 -82
  97. package/src/core/index.ts +1 -1
  98. package/src/core/move-detection.ts +74 -180
  99. package/src/core/snapshot.ts +2 -12
  100. package/src/core/sync-engine.ts +248 -499
  101. package/src/index.ts +0 -10
  102. package/src/types/config.ts +50 -72
  103. package/src/types/documents.ts +16 -3
  104. package/src/types/index.ts +0 -5
  105. package/src/types/snapshot.ts +1 -23
  106. package/src/utils/content.ts +2 -6
  107. package/src/utils/directory.ts +50 -0
  108. package/src/utils/fs.ts +67 -56
  109. package/src/utils/index.ts +1 -6
  110. package/src/utils/mime-types.ts +12 -4
  111. package/src/utils/network-sync.ts +79 -137
  112. package/src/utils/output.ts +450 -0
  113. package/src/utils/repo-factory.ts +13 -31
  114. package/src/utils/string-similarity.ts +54 -0
  115. package/src/utils/trace.ts +70 -0
  116. package/test/integration/exclude-patterns.test.ts +6 -15
  117. package/test/integration/fuzzer.test.ts +308 -391
  118. package/test/integration/init-sync.test.ts +89 -0
  119. package/test/integration/sync-deletion.test.ts +2 -61
  120. package/test/integration/sync-flow.test.ts +4 -24
  121. package/test/jest.setup.ts +34 -0
  122. package/test/unit/deletion-behavior.test.ts +3 -14
  123. package/test/unit/enhanced-mime-detection.test.ts +0 -22
  124. package/test/unit/snapshot.test.ts +2 -29
  125. package/test/unit/sync-convergence.test.ts +3 -198
  126. package/test/unit/sync-timing.test.ts +0 -44
  127. package/test/unit/utils.test.ts +0 -2
  128. package/tsconfig.json +3 -3
  129. package/dist/browser/browser-sync-engine.d.ts +0 -64
  130. package/dist/browser/browser-sync-engine.d.ts.map +0 -1
  131. package/dist/browser/browser-sync-engine.js +0 -303
  132. package/dist/browser/browser-sync-engine.js.map +0 -1
  133. package/dist/browser/filesystem-adapter.d.ts +0 -84
  134. package/dist/browser/filesystem-adapter.d.ts.map +0 -1
  135. package/dist/browser/filesystem-adapter.js +0 -413
  136. package/dist/browser/filesystem-adapter.js.map +0 -1
  137. package/dist/browser/index.d.ts +0 -36
  138. package/dist/browser/index.d.ts.map +0 -1
  139. package/dist/browser/index.js +0 -90
  140. package/dist/browser/index.js.map +0 -1
  141. package/dist/browser/types.d.ts +0 -70
  142. package/dist/browser/types.d.ts.map +0 -1
  143. package/dist/browser/types.js +0 -6
  144. package/dist/browser/types.js.map +0 -1
  145. package/dist/cli/commands.d.ts +0 -77
  146. package/dist/cli/commands.d.ts.map +0 -1
  147. package/dist/cli/commands.js +0 -904
  148. package/dist/cli/commands.js.map +0 -1
  149. package/dist/cli/index.d.ts +0 -2
  150. package/dist/cli/index.d.ts.map +0 -1
  151. package/dist/cli/index.js +0 -19
  152. package/dist/cli/index.js.map +0 -1
  153. package/dist/config/index.d.ts.map +0 -1
  154. package/dist/config/index.js.map +0 -1
  155. package/dist/core/isomorphic-snapshot.d.ts +0 -58
  156. package/dist/core/isomorphic-snapshot.d.ts.map +0 -1
  157. package/dist/core/isomorphic-snapshot.js +0 -204
  158. package/dist/core/isomorphic-snapshot.js.map +0 -1
  159. package/dist/platform/browser-filesystem.d.ts +0 -26
  160. package/dist/platform/browser-filesystem.d.ts.map +0 -1
  161. package/dist/platform/browser-filesystem.js +0 -91
  162. package/dist/platform/browser-filesystem.js.map +0 -1
  163. package/dist/platform/filesystem.d.ts +0 -29
  164. package/dist/platform/filesystem.d.ts.map +0 -1
  165. package/dist/platform/filesystem.js +0 -65
  166. package/dist/platform/filesystem.js.map +0 -1
  167. package/dist/platform/node-filesystem.d.ts +0 -21
  168. package/dist/platform/node-filesystem.d.ts.map +0 -1
  169. package/dist/platform/node-filesystem.js +0 -93
  170. package/dist/platform/node-filesystem.js.map +0 -1
  171. package/dist/utils/content-similarity.d.ts +0 -53
  172. package/dist/utils/content-similarity.d.ts.map +0 -1
  173. package/dist/utils/content-similarity.js +0 -155
  174. package/dist/utils/content-similarity.js.map +0 -1
  175. package/dist/utils/fs-browser.d.ts +0 -57
  176. package/dist/utils/fs-browser.d.ts.map +0 -1
  177. package/dist/utils/fs-browser.js +0 -311
  178. package/dist/utils/fs-browser.js.map +0 -1
  179. package/dist/utils/fs-node.d.ts +0 -53
  180. package/dist/utils/fs-node.d.ts.map +0 -1
  181. package/dist/utils/fs-node.js +0 -220
  182. package/dist/utils/fs-node.js.map +0 -1
  183. package/dist/utils/isomorphic.d.ts +0 -29
  184. package/dist/utils/isomorphic.d.ts.map +0 -1
  185. package/dist/utils/isomorphic.js +0 -139
  186. package/dist/utils/isomorphic.js.map +0 -1
  187. package/dist/utils/pure.d.ts +0 -25
  188. package/dist/utils/pure.d.ts.map +0 -1
  189. package/dist/utils/pure.js +0 -112
  190. package/dist/utils/pure.js.map +0 -1
  191. package/src/cli/commands.ts +0 -1207
  192. package/src/cli/index.ts +0 -2
  193. package/src/utils/content-similarity.ts +0 -194
  194. package/test/README-TESTING-GAPS.md +0 -174
  195. package/test/unit/content-similarity.test.ts +0 -236
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Clean terminal output manager (Singleton)
3
+ * - Progress stays on one line (spinner updates in place)
4
+ * - No emojis
5
+ * - Background colors for section headers
6
+ * - Minimal output
7
+ * - Supports scrolling task lines (max-lines)
8
+ */
9
+ export declare class Output {
10
+ #private;
11
+ private static instance;
12
+ private spinner;
13
+ private taskStartTime;
14
+ private taskOriginalMessage;
15
+ private taskCurrentMessage;
16
+ private taskLines;
17
+ private taskMaxLines;
18
+ private constructor();
19
+ /**
20
+ * Get the singleton instance
21
+ */
22
+ static getInstance(): Output;
23
+ /**
24
+ * Reset the singleton (useful for testing)
25
+ */
26
+ static reset(): void;
27
+ /**
28
+ * Start a task with spinner - updates in place
29
+ * Completes any previous task before starting the new one
30
+ * @param message - The task message
31
+ * @param maxLines - Maximum number of task lines to show (0 = unlimited, lines scroll)
32
+ */
33
+ task(message: string, maxLines?: number): void;
34
+ /**
35
+ * Update spinner text (stays on same line)
36
+ */
37
+ update(message: string): void;
38
+ /**
39
+ * Add a line to the active task (appears below spinner, scrolls if max-lines set)
40
+ * Lines are dimmed and temporary - they disappear when task completes unless kept
41
+ * If no task is active, displays as a regular log message
42
+ */
43
+ taskLine(message: string, keepOnComplete?: boolean): void;
44
+ /**
45
+ * Clear all task lines (useful when you want to reset the scrolling window)
46
+ */
47
+ clearTaskLines(): void;
48
+ /**
49
+ * Complete task with optional duration display
50
+ * Defaults to showing the original task message with duration
51
+ * Task lines marked with keepOnComplete will be preserved, others are cleared
52
+ */
53
+ done(message?: string, showTime?: boolean): void;
54
+ /**
55
+ * Show an object as a table of key-value pairs
56
+ * Filters out undefined values and applies optional transforms
57
+ * Automatically calculates key padding from max key length
58
+ */
59
+ obj(obj: Record<string, any>, keyTransform?: (key: string) => string, valueTransform?: (value: any, key: string) => string): void;
60
+ /**
61
+ * Display array as bulleted list
62
+ * Each item shown with dim bullet and white text
63
+ */
64
+ arr(items: any[]): void;
65
+ /**
66
+ * Show plain message with optional color
67
+ */
68
+ log(message: string, color?: "red" | "green" | "yellow" | "blue" | "cyan" | "magenta" | "gray" | "dim"): void;
69
+ /**
70
+ * Show success message (green text)
71
+ */
72
+ success(message: string): void;
73
+ /**
74
+ * Show success block (green background label + optional message)
75
+ */
76
+ successBlock(label: string, message?: string): void;
77
+ /**
78
+ * Show success message (green text)
79
+ */
80
+ spicy(message: string): void;
81
+ /**
82
+ * Show success block (green background label + optional message)
83
+ */
84
+ spicyBlock(label: string, message?: string): void;
85
+ /**
86
+ * Show message with rainbow gradient
87
+ */
88
+ rainbow(message: string): void;
89
+ /**
90
+ * Show info message (dim text)
91
+ */
92
+ info(message: string): void;
93
+ /**
94
+ * Show info block (grey background label + optional message)
95
+ */
96
+ infoBlock(label: string, message?: string): void;
97
+ /**
98
+ * Show error message (red text) - fails spinner if running
99
+ */
100
+ error(message: string | Error | unknown): void;
101
+ /**
102
+ * Show error block (red background label + optional message) - fails spinner if running
103
+ */
104
+ errorBlock(label: string, message?: string): void;
105
+ /**
106
+ * Show warning message (yellow text)
107
+ */
108
+ warn(message: string): void;
109
+ /**
110
+ * Show warning block (yellow background label + optional message)
111
+ */
112
+ warnBlock(label: string, message?: string): void;
113
+ /**
114
+ * Show detailed error information and exit the program
115
+ * Use this when an unexpected/unrecoverable error occurs
116
+ * Shows error message and stack trace, then exits
117
+ */
118
+ crash(error: unknown, exitCode?: number): never;
119
+ /**
120
+ * Exit with code
121
+ */
122
+ exit(code?: number): never;
123
+ }
124
+ /**
125
+ * Global singleton output instance
126
+ * Import and use this anywhere in your code
127
+ */
128
+ export declare const out: Output;
129
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,qBAAa,MAAM;;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,YAAY,CAAa;IAEjC,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM;IAO5B;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAQpB;;;;;OAKG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,IAAI;IAcjD;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,IAAI;IAkBhE;;OAEG;IACH,cAAc,IAAI,IAAI;IAiCtB;;;;OAIG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,IAAI;IAuCtD;;;;OAIG;IACH,GAAG,CACD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EACtC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GACnD,IAAI;IA0BP;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI;IASvB;;OAEG;IACH,GAAG,CACD,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EACF,KAAK,GACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,MAAM,GACN,SAAS,GACT,MAAM,GACN,KAAK,GACR,IAAI;IAWP;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI;IAOvD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK5B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI;IAOrD;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA8B9B;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK3B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI;IAOpD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,IAAI;IAmB9C;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI;IAarD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK3B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,IAAI;IAOpD;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAE,MAAU,GAAG,KAAK;IAuBlD;;OAEG;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK;CAoB3B;AAED;;;GAGG;AACH,eAAO,MAAM,GAAG,QAAuB,CAAC"}
@@ -0,0 +1,375 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ var _Output_instances, _Output_updateTaskDisplay, _Output_stopTask;
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.out = exports.Output = void 0;
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const ora_1 = __importDefault(require("ora"));
15
+ /**
16
+ * Clean terminal output manager (Singleton)
17
+ * - Progress stays on one line (spinner updates in place)
18
+ * - No emojis
19
+ * - Background colors for section headers
20
+ * - Minimal output
21
+ * - Supports scrolling task lines (max-lines)
22
+ */
23
+ class Output {
24
+ constructor() {
25
+ _Output_instances.add(this);
26
+ this.spinner = null;
27
+ this.taskStartTime = null;
28
+ this.taskOriginalMessage = null; // Original task message for done()
29
+ this.taskCurrentMessage = null; // Current display message (can be updated)
30
+ this.taskLines = []; // Lines written during active task
31
+ this.taskMaxLines = 0; // 0 = unlimited
32
+ }
33
+ /**
34
+ * Get the singleton instance
35
+ */
36
+ static getInstance() {
37
+ if (!Output.instance) {
38
+ Output.instance = new Output();
39
+ }
40
+ return Output.instance;
41
+ }
42
+ /**
43
+ * Reset the singleton (useful for testing)
44
+ */
45
+ static reset() {
46
+ if (Output.instance?.spinner) {
47
+ Output.instance.spinner.stop();
48
+ Output.instance.spinner.clear();
49
+ }
50
+ Output.instance = null;
51
+ }
52
+ /**
53
+ * Start a task with spinner - updates in place
54
+ * Completes any previous task before starting the new one
55
+ * @param message - The task message
56
+ * @param maxLines - Maximum number of task lines to show (0 = unlimited, lines scroll)
57
+ */
58
+ task(message, maxLines = 0) {
59
+ // Complete any existing task first
60
+ if (this.spinner) {
61
+ this.done();
62
+ }
63
+ this.taskStartTime = Date.now();
64
+ this.taskOriginalMessage = message;
65
+ this.taskCurrentMessage = message;
66
+ this.taskMaxLines = maxLines;
67
+ this.taskLines = [];
68
+ this.spinner = (0, ora_1.default)(message).start();
69
+ }
70
+ /**
71
+ * Update spinner text (stays on same line)
72
+ */
73
+ update(message) {
74
+ if (this.spinner) {
75
+ this.taskCurrentMessage = message;
76
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_updateTaskDisplay).call(this);
77
+ }
78
+ }
79
+ /**
80
+ * Add a line to the active task (appears below spinner, scrolls if max-lines set)
81
+ * Lines are dimmed and temporary - they disappear when task completes unless kept
82
+ * If no task is active, displays as a regular log message
83
+ */
84
+ taskLine(message, keepOnComplete = false) {
85
+ if (!this.spinner) {
86
+ // No active task, just log normally as regular output
87
+ this.info(message);
88
+ return;
89
+ }
90
+ // Add to task lines buffer with keep flag
91
+ this.taskLines.push(keepOnComplete ? `[keep]${message}` : message);
92
+ // If max lines set, trim from the start (scroll)
93
+ if (this.taskMaxLines > 0 && this.taskLines.length > this.taskMaxLines) {
94
+ this.taskLines = this.taskLines.slice(-this.taskMaxLines);
95
+ }
96
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_updateTaskDisplay).call(this);
97
+ }
98
+ /**
99
+ * Clear all task lines (useful when you want to reset the scrolling window)
100
+ */
101
+ clearTaskLines() {
102
+ this.taskLines = [];
103
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_updateTaskDisplay).call(this);
104
+ }
105
+ /**
106
+ * Complete task with optional duration display
107
+ * Defaults to showing the original task message with duration
108
+ * Task lines marked with keepOnComplete will be preserved, others are cleared
109
+ */
110
+ done(message, showTime = true) {
111
+ if (!this.spinner)
112
+ return;
113
+ let text = message || this.taskOriginalMessage || "done";
114
+ if (showTime && this.taskStartTime) {
115
+ const durationMs = Date.now() - this.taskStartTime;
116
+ const durationText = (() => {
117
+ switch (true) {
118
+ case durationMs < 1000:
119
+ return `${durationMs}ms`;
120
+ case durationMs < 2000:
121
+ return `${(durationMs / 1000).toFixed(2)}s`;
122
+ default:
123
+ return `${(durationMs / 1000).toFixed(1)}s`;
124
+ }
125
+ })();
126
+ text += chalk_1.default.dim(` (${durationText})`);
127
+ }
128
+ // Clear multiline text and set to just completion message
129
+ this.spinner.text = text;
130
+ this.spinner.succeed();
131
+ this.spinner = null;
132
+ // Print kept task lines after completion
133
+ const keptLines = this.taskLines.filter((line) => line.startsWith("[keep]"));
134
+ for (const line of keptLines) {
135
+ console.log(chalk_1.default.dim(` ${line.slice(6)}`));
136
+ }
137
+ this.taskStartTime = null;
138
+ this.taskOriginalMessage = null;
139
+ this.taskCurrentMessage = null;
140
+ this.taskLines = [];
141
+ this.taskMaxLines = 0;
142
+ }
143
+ /**
144
+ * Show an object as a table of key-value pairs
145
+ * Filters out undefined values and applies optional transforms
146
+ * Automatically calculates key padding from max key length
147
+ */
148
+ obj(obj, keyTransform, valueTransform) {
149
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
150
+ // Filter out undefined values and apply key transform
151
+ const entries = [];
152
+ for (const [key, value] of Object.entries(obj)) {
153
+ if (value === undefined)
154
+ continue;
155
+ const displayKey = keyTransform ? keyTransform(key) : key;
156
+ entries.push([key, displayKey, value]);
157
+ }
158
+ // Calculate max key length for padding
159
+ const maxKeyLength = Math.max(...entries.map(([, displayKey]) => displayKey.length));
160
+ // Print each entry
161
+ for (const [key, displayKey, value] of entries) {
162
+ const displayValue = valueTransform
163
+ ? valueTransform(value, key)
164
+ : String(value);
165
+ const keyFormatted = chalk_1.default.dim(displayKey.padEnd(maxKeyLength + 2));
166
+ console.log(`${keyFormatted}${displayValue}`);
167
+ }
168
+ }
169
+ /**
170
+ * Display array as bulleted list
171
+ * Each item shown with dim bullet and white text
172
+ */
173
+ arr(items) {
174
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
175
+ for (const item of items) {
176
+ const bullet = chalk_1.default.dim("• ");
177
+ console.log(`${bullet}${String(item)}`);
178
+ }
179
+ }
180
+ /**
181
+ * Show plain message with optional color
182
+ */
183
+ log(message, color) {
184
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
185
+ if (color) {
186
+ const colorFn = color === "dim" ? chalk_1.default.dim : chalk_1.default[color];
187
+ console.log(colorFn(message));
188
+ }
189
+ else {
190
+ console.log(message);
191
+ }
192
+ }
193
+ /**
194
+ * Show success message (green text)
195
+ */
196
+ success(message) {
197
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
198
+ console.log(chalk_1.default.green(message));
199
+ }
200
+ /**
201
+ * Show success block (green background label + optional message)
202
+ */
203
+ successBlock(label, message = "") {
204
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
205
+ console.log(`\n${chalk_1.default.bgGreen.black(` ${label} `)}${message && ` ${message}`}`);
206
+ }
207
+ /**
208
+ * Show success message (green text)
209
+ */
210
+ spicy(message) {
211
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
212
+ console.log(chalk_1.default.cyan(message));
213
+ }
214
+ /**
215
+ * Show success block (green background label + optional message)
216
+ */
217
+ spicyBlock(label, message = "") {
218
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
219
+ console.log(`\n${chalk_1.default.bgCyan.black(` ${label} `)}${message && ` ${message}`}`);
220
+ }
221
+ /**
222
+ * Show message with rainbow gradient
223
+ */
224
+ rainbow(message) {
225
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
226
+ // Rainbow colors in order
227
+ const colors = [
228
+ chalk_1.default.red,
229
+ chalk_1.default.rgb(255, 165, 0), // orange
230
+ chalk_1.default.yellow,
231
+ chalk_1.default.green,
232
+ chalk_1.default.cyan,
233
+ chalk_1.default.blue,
234
+ chalk_1.default.magenta,
235
+ ];
236
+ const chars = message.split("");
237
+ const colorCount = colors.length;
238
+ // Spread colors across the string
239
+ const rainbow = chars
240
+ .map((char, i) => {
241
+ // Calculate which color to use based on position
242
+ const colorIndex = Math.floor((i / chars.length) * colorCount);
243
+ const color = colors[Math.min(colorIndex, colorCount - 1)];
244
+ return color(char);
245
+ })
246
+ .join("");
247
+ console.log(rainbow);
248
+ }
249
+ /**
250
+ * Show info message (dim text)
251
+ */
252
+ info(message) {
253
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
254
+ console.log(chalk_1.default.dim(message));
255
+ }
256
+ /**
257
+ * Show info block (grey background label + optional message)
258
+ */
259
+ infoBlock(label, message = "") {
260
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
261
+ console.log(`\n${chalk_1.default.bgGrey.white(` ${label} `)}${message && ` ${message}`}`);
262
+ }
263
+ /**
264
+ * Show error message (red text) - fails spinner if running
265
+ */
266
+ error(message) {
267
+ if (this.spinner) {
268
+ this.spinner.fail("failed");
269
+ this.spinner = null;
270
+ this.taskStartTime = null;
271
+ this.taskOriginalMessage = null;
272
+ this.taskCurrentMessage = null;
273
+ }
274
+ console.log(chalk_1.default.red(message instanceof Error
275
+ ? message.message
276
+ : message instanceof Object
277
+ ? JSON.stringify(message)
278
+ : String(message)));
279
+ }
280
+ /**
281
+ * Show error block (red background label + optional message) - fails spinner if running
282
+ */
283
+ errorBlock(label, message = "") {
284
+ if (this.spinner) {
285
+ this.spinner.fail("failed");
286
+ this.spinner = null;
287
+ this.taskStartTime = null;
288
+ this.taskOriginalMessage = null;
289
+ this.taskCurrentMessage = null;
290
+ }
291
+ console.log(`\n${chalk_1.default.bgRed.white(` ${label} `)}${message && ` ${message}`}`);
292
+ }
293
+ /**
294
+ * Show warning message (yellow text)
295
+ */
296
+ warn(message) {
297
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
298
+ console.log(chalk_1.default.yellow(message));
299
+ }
300
+ /**
301
+ * Show warning block (yellow background label + optional message)
302
+ */
303
+ warnBlock(label, message = "") {
304
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
305
+ console.log(`\n${chalk_1.default.bgYellow.black(` ${label} `)}${message && ` ${message}`}`);
306
+ }
307
+ /**
308
+ * Show detailed error information and exit the program
309
+ * Use this when an unexpected/unrecoverable error occurs
310
+ * Shows error message and stack trace, then exits
311
+ */
312
+ crash(error, exitCode = 1) {
313
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
314
+ if (error instanceof Error) {
315
+ // Error type and message
316
+ console.log(chalk_1.default.red(`${error.name}: ${error.message}`));
317
+ // Stack trace
318
+ if (error.stack) {
319
+ console.log("");
320
+ console.log(chalk_1.default.dim("Stack trace:"));
321
+ const stackLines = error.stack.split("\n").slice(1); // Skip first line (error message)
322
+ stackLines.forEach((line) => console.log(chalk_1.default.dim(` ${line.trim()}`)));
323
+ }
324
+ }
325
+ else {
326
+ console.log(chalk_1.default.red(String(error)));
327
+ }
328
+ process.exit(exitCode);
329
+ }
330
+ /**
331
+ * Exit with code
332
+ */
333
+ exit(code) {
334
+ __classPrivateFieldGet(this, _Output_instances, "m", _Output_stopTask).call(this);
335
+ process.exit(code || 0);
336
+ }
337
+ }
338
+ exports.Output = Output;
339
+ _Output_instances = new WeakSet(), _Output_updateTaskDisplay = function _Output_updateTaskDisplay() {
340
+ if (!this.spinner)
341
+ return;
342
+ const currentText = this.taskCurrentMessage || this.spinner.text.split("\n")[0] || "";
343
+ // If no task lines, show just the spinner message
344
+ if (this.taskLines.length === 0) {
345
+ this.spinner.text = currentText;
346
+ return;
347
+ }
348
+ // Build multiline text: spinner message + task lines below
349
+ const taskLinesText = this.taskLines
350
+ .map((line) => {
351
+ const cleanLine = line.startsWith("[keep]") ? line.slice(6) : line;
352
+ return chalk_1.default.dim(` ${cleanLine}`);
353
+ })
354
+ .join("\n");
355
+ // Set spinner text to include task lines (ora handles multiline rendering)
356
+ this.spinner.text = `${currentText}\n${taskLinesText}`;
357
+ }, _Output_stopTask = function _Output_stopTask() {
358
+ if (this.spinner) {
359
+ this.spinner.stop();
360
+ this.spinner.clear();
361
+ this.spinner = null;
362
+ }
363
+ this.taskStartTime = null;
364
+ this.taskOriginalMessage = null;
365
+ this.taskCurrentMessage = null;
366
+ this.taskLines = [];
367
+ this.taskMaxLines = 0;
368
+ };
369
+ Output.instance = null;
370
+ /**
371
+ * Global singleton output instance
372
+ * Import and use this anywhere in your code
373
+ */
374
+ exports.out = Output.getInstance();
375
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAA0B;AAC1B,8CAA+B;AAE/B;;;;;;;GAOG;AACH,MAAa,MAAM;IASjB;;QAPQ,YAAO,GAAe,IAAI,CAAC;QAC3B,kBAAa,GAAkB,IAAI,CAAC;QACpC,wBAAmB,GAAkB,IAAI,CAAC,CAAC,mCAAmC;QAC9E,uBAAkB,GAAkB,IAAI,CAAC,CAAC,2CAA2C;QACrF,cAAS,GAAa,EAAE,CAAC,CAAC,mCAAmC;QAC7D,iBAAY,GAAW,CAAC,CAAC,CAAC,gBAAgB;IAE3B,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,OAAe,EAAE,WAAmB,CAAC;QACxC,mCAAmC;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAA,aAAG,EAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAe;QACpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;YAClC,uBAAA,IAAI,oDAAmB,MAAvB,IAAI,CAAqB,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,OAAe,EAAE,iBAA0B,KAAK;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,sDAAsD;YACtD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEnE,iDAAiD;QACjD,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACvE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5D,CAAC;QAED,uBAAA,IAAI,oDAAmB,MAAvB,IAAI,CAAqB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,uBAAA,IAAI,oDAAmB,MAAvB,IAAI,CAAqB,CAAC;IAC5B,CAAC;IA8BD;;;;OAIG;IACH,IAAI,CAAC,OAAgB,EAAE,WAAoB,IAAI;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,IAAI,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAC;QACzD,IAAI,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACnD,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;gBACzB,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,UAAU,GAAG,IAAI;wBACpB,OAAO,GAAG,UAAU,IAAI,CAAC;oBAC3B,KAAK,UAAU,GAAG,IAAI;wBACpB,OAAO,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC9C;wBACE,OAAO,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YACL,IAAI,IAAI,eAAK,CAAC,GAAG,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC;QAC1C,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAC1B,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,GAAG,CACD,GAAwB,EACxB,YAAsC,EACtC,cAAoD;QAEpD,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QAEjB,sDAAsD;QACtD,MAAM,OAAO,GAAiC,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CACtD,CAAC;QAEF,mBAAmB;QACnB,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,cAAc;gBACjC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC5B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,MAAM,YAAY,GAAG,eAAK,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,YAAY,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,KAAY;QACd,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CACD,OAAe,EACf,KAQS;QAET,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QAEjB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe;QACrB,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAa,EAAE,UAAkB,EAAE;QAC9C,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,KAAK,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE,EAAE,CACpE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe;QACnB,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,KAAa,EAAE,UAAkB,EAAE;QAC5C,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,KAAK,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE,EAAE,CACnE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAe;QACrB,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QAEjB,0BAA0B;QAC1B,MAAM,MAAM,GAAG;YACb,eAAK,CAAC,GAAG;YACT,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS;YACjC,eAAK,CAAC,MAAM;YACZ,eAAK,CAAC,KAAK;YACX,eAAK,CAAC,IAAI;YACV,eAAK,CAAC,IAAI;YACV,eAAK,CAAC,OAAO;SACd,CAAC;QAEF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAEjC,kCAAkC;QAClC,MAAM,OAAO,GAAG,KAAK;aAClB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACf,iDAAiD;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe;QAClB,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAa,EAAE,UAAkB,EAAE;QAC3C,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,KAAK,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE,EAAE,CACnE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAiC;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,OAAO,YAAY,KAAK;YACtB,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,OAAO,YAAY,MAAM;gBAC3B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBACzB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACpB,CACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,KAAa,EAAE,UAAkB,EAAE;QAC5C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,GAAG,CACT,KAAK,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE,EAAE,CAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAe;QAClB,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAa,EAAE,UAAkB,EAAE;QAC3C,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,KAAK,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,OAAO,IAAI,IAAI,OAAO,EAAE,EAAE,CACrE,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAc,EAAE,WAAmB,CAAC;QACxC,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QAEjB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,yBAAyB;YACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAE1D,cAAc;YACd,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;gBACvF,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAC3C,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,IAAa;QAChB,uBAAA,IAAI,2CAAU,MAAd,IAAI,CAAY,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC;;AA/ZH,wBAgbC;;IA9UG,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO;IAE1B,MAAM,WAAW,GACf,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEpE,kDAAkD;IAClD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;QAChC,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,OAAO,eAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,2EAA2E;IAC3E,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,WAAW,KAAK,aAAa,EAAE,CAAC;AACzD,CAAC;IA8SC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACpB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACxB,CAAC;AA9ac,eAAQ,GAAkB,IAAI,AAAtB,CAAuB;AAibhD;;;GAGG;AACU,QAAA,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC"}
@@ -1,11 +1,7 @@
1
1
  import { Repo } from "@automerge/automerge-repo";
2
- export interface RepoFactoryOptions {
3
- enableNetwork?: boolean;
4
- syncServer?: string;
5
- syncServerStorageId?: string;
6
- }
2
+ import { DirectoryConfig } from "../types";
7
3
  /**
8
4
  * Create an Automerge repository with configuration-based setup
9
5
  */
10
- export declare function createRepo(workingDir: string, options?: RepoFactoryOptions): Promise<Repo>;
6
+ export declare function createRepo(workingDir: string, config: DirectoryConfig): Promise<Repo>;
11
7
  //# sourceMappingURL=repo-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-factory.d.ts","sourceRoot":"","sources":["../../src/utils/repo-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,2BAA2B,CAAC;AAO5D,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsCf"}
1
+ {"version":3,"file":"repo-factory.d.ts","sourceRoot":"","sources":["../../src/utils/repo-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,2BAA2B,CAAC;AAI5D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -32,45 +32,31 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
35
  Object.defineProperty(exports, "__esModule", { value: true });
39
36
  exports.createRepo = createRepo;
40
37
  const automerge_repo_1 = require("@automerge/automerge-repo");
41
38
  const automerge_repo_storage_nodefs_1 = require("@automerge/automerge-repo-storage-nodefs");
42
39
  const automerge_repo_network_websocket_1 = require("@automerge/automerge-repo-network-websocket");
43
40
  const path = __importStar(require("path"));
44
- const chalk_1 = __importDefault(require("chalk"));
45
- const config_1 = require("../config");
46
41
  /**
47
42
  * Create an Automerge repository with configuration-based setup
48
43
  */
49
- async function createRepo(workingDir, options = {}) {
50
- const configManager = new config_1.ConfigManager(workingDir);
51
- const config = await configManager.getMerged();
44
+ async function createRepo(workingDir, config) {
52
45
  const syncToolDir = path.join(workingDir, ".pushwork");
53
46
  const storage = new automerge_repo_storage_nodefs_1.NodeFSStorageAdapter(path.join(syncToolDir, "automerge"));
54
47
  const repoConfig = { storage };
55
- // Determine network settings - options override config
56
- const enableNetwork = options.enableNetwork ?? true;
57
- const syncServer = options.syncServer ?? config.sync_server;
58
- const syncServerStorageId = options.syncServerStorageId ?? config.sync_server_storage_id;
59
- // Add network adapter only if explicitly enabled and sync server is configured
60
- if (enableNetwork && syncServer) {
61
- const networkAdapter = new automerge_repo_network_websocket_1.BrowserWebSocketClientAdapter(syncServer);
48
+ // Add network adapter only if sync is enabled and server is configured
49
+ if (config.sync_enabled && config.sync_server) {
50
+ const networkAdapter = new automerge_repo_network_websocket_1.BrowserWebSocketClientAdapter(config.sync_server);
62
51
  repoConfig.network = [networkAdapter];
63
52
  repoConfig.enableRemoteHeadsGossiping = true;
64
- console.log(chalk_1.default.gray(` ✓ Network sync enabled: ${syncServer}`));
65
- }
66
- else {
67
- console.log(chalk_1.default.gray(" ✓ Local-only mode (network sync disabled)"));
68
53
  }
69
54
  const repo = new automerge_repo_1.Repo(repoConfig);
70
55
  // Subscribe to the sync server storage for network sync
71
- if (enableNetwork && syncServer && syncServerStorageId) {
72
- repo.subscribeToRemotes([syncServerStorageId]);
73
- console.log(chalk_1.default.gray(` ✓ Subscribed to sync server storage: ${syncServerStorageId}`));
56
+ if (config.sync_enabled &&
57
+ config.sync_server &&
58
+ config.sync_server_storage_id) {
59
+ repo.subscribeToRemotes([config.sync_server_storage_id]);
74
60
  }
75
61
  return repo;
76
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repo-factory.js","sourceRoot":"","sources":["../../src/utils/repo-factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,gCAyCC;AAzDD,8DAA4D;AAC5D,4FAAgF;AAChF,kGAA4F;AAC5F,2CAA6B;AAC7B,kDAA0B;AAC1B,sCAA0C;AAQ1C;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,UAA8B,EAAE;IAEhC,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,oDAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAE9E,MAAM,UAAU,GAAQ,EAAE,OAAO,EAAE,CAAC;IAEpC,uDAAuD;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC;IAC5D,MAAM,mBAAmB,GACvB,OAAO,CAAC,mBAAmB,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAE/D,+EAA+E;IAC/E,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,IAAI,gEAA6B,CAAC,UAAU,CAAC,CAAC;QACrE,UAAU,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;QACtC,UAAU,CAAC,0BAA0B,GAAG,IAAI,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,qBAAI,CAAC,UAAU,CAAC,CAAC;IAElC,wDAAwD;IACxD,IAAI,aAAa,IAAI,UAAU,IAAI,mBAAmB,EAAE,CAAC;QACvD,IAAI,CAAC,kBAAkB,CAAC,CAAC,mBAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CACR,0CAA0C,mBAAmB,EAAE,CAChE,CACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"repo-factory.js","sourceRoot":"","sources":["../../src/utils/repo-factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,gCA8BC;AAvCD,8DAA4D;AAC5D,4FAAgF;AAChF,kGAA4F;AAC5F,2CAA6B;AAG7B;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,MAAuB;IAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,oDAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAE9E,MAAM,UAAU,GAAQ,EAAE,OAAO,EAAE,CAAC;IAEpC,uEAAuE;IACvE,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,IAAI,gEAA6B,CACtD,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,UAAU,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;QACtC,UAAU,CAAC,0BAA0B,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,qBAAI,CAAC,UAAU,CAAC,CAAC;IAElC,wDAAwD;IACxD,IACE,MAAM,CAAC,YAAY;QACnB,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,sBAAsB,EAC7B,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,sBAAmC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+
3
+ * Calculate similarity between two strings
4
+
5
+ * @param {string} str1 First string to match
6
+ * @param {string} str2 Second string to match
7
+ * @param {number} [substringLength=2] Optional. Length of substring to be used in calculating similarity. Default 2.
8
+ * @param {boolean} [caseSensitive=false] Optional. Whether you want to consider case in string matching. Default false;
9
+
10
+ * @returns Number between 0 and 1, with 0 being a low match score.
11
+
12
+ */
13
+ export declare const stringSimilarity: (str1: string, str2: string, substringLength?: number, caseSensitive?: boolean) => number;
14
+ //# sourceMappingURL=string-similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-similarity.d.ts","sourceRoot":"","sources":["../../src/utils/string-similarity.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,kBAAiB,MAAU,EAC3B,gBAAe,OAAe,WAkC/B,CAAC"}