speccore 1.0.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 (196) hide show
  1. package/README.en.md +401 -0
  2. package/README.md +401 -0
  3. package/bin/speccore +2 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +450 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/archive.d.ts +10 -0
  9. package/dist/commands/archive.d.ts.map +1 -0
  10. package/dist/commands/archive.js +138 -0
  11. package/dist/commands/archive.js.map +1 -0
  12. package/dist/commands/audit.d.ts +10 -0
  13. package/dist/commands/audit.d.ts.map +1 -0
  14. package/dist/commands/audit.js +278 -0
  15. package/dist/commands/audit.js.map +1 -0
  16. package/dist/commands/baseline.d.ts +13 -0
  17. package/dist/commands/baseline.d.ts.map +1 -0
  18. package/dist/commands/baseline.js +227 -0
  19. package/dist/commands/baseline.js.map +1 -0
  20. package/dist/commands/bugfix.d.ts +13 -0
  21. package/dist/commands/bugfix.d.ts.map +1 -0
  22. package/dist/commands/bugfix.js +181 -0
  23. package/dist/commands/bugfix.js.map +1 -0
  24. package/dist/commands/change.d.ts +14 -0
  25. package/dist/commands/change.d.ts.map +1 -0
  26. package/dist/commands/change.js +150 -0
  27. package/dist/commands/change.js.map +1 -0
  28. package/dist/commands/config.d.ts +7 -0
  29. package/dist/commands/config.d.ts.map +1 -0
  30. package/dist/commands/config.js +110 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/dashboard.d.ts +9 -0
  33. package/dist/commands/dashboard.d.ts.map +1 -0
  34. package/dist/commands/dashboard.js +209 -0
  35. package/dist/commands/dashboard.js.map +1 -0
  36. package/dist/commands/demo.d.ts +10 -0
  37. package/dist/commands/demo.d.ts.map +1 -0
  38. package/dist/commands/demo.js +151 -0
  39. package/dist/commands/demo.js.map +1 -0
  40. package/dist/commands/execute.d.ts +18 -0
  41. package/dist/commands/execute.d.ts.map +1 -0
  42. package/dist/commands/execute.js +127 -0
  43. package/dist/commands/execute.js.map +1 -0
  44. package/dist/commands/global-status.d.ts +9 -0
  45. package/dist/commands/global-status.d.ts.map +1 -0
  46. package/dist/commands/global-status.js +135 -0
  47. package/dist/commands/global-status.js.map +1 -0
  48. package/dist/commands/goal.d.ts +15 -0
  49. package/dist/commands/goal.d.ts.map +1 -0
  50. package/dist/commands/goal.js +282 -0
  51. package/dist/commands/goal.js.map +1 -0
  52. package/dist/commands/handover.d.ts +11 -0
  53. package/dist/commands/handover.d.ts.map +1 -0
  54. package/dist/commands/handover.js +169 -0
  55. package/dist/commands/handover.js.map +1 -0
  56. package/dist/commands/health.d.ts +7 -0
  57. package/dist/commands/health.d.ts.map +1 -0
  58. package/dist/commands/health.js +80 -0
  59. package/dist/commands/health.js.map +1 -0
  60. package/dist/commands/help.d.ts +10 -0
  61. package/dist/commands/help.d.ts.map +1 -0
  62. package/dist/commands/help.js +93 -0
  63. package/dist/commands/help.js.map +1 -0
  64. package/dist/commands/history.d.ts +9 -0
  65. package/dist/commands/history.d.ts.map +1 -0
  66. package/dist/commands/history.js +87 -0
  67. package/dist/commands/history.js.map +1 -0
  68. package/dist/commands/impact.d.ts +12 -0
  69. package/dist/commands/impact.d.ts.map +1 -0
  70. package/dist/commands/impact.js +238 -0
  71. package/dist/commands/impact.js.map +1 -0
  72. package/dist/commands/import.d.ts +15 -0
  73. package/dist/commands/import.d.ts.map +1 -0
  74. package/dist/commands/import.js +366 -0
  75. package/dist/commands/import.js.map +1 -0
  76. package/dist/commands/init.d.ts +6 -0
  77. package/dist/commands/init.d.ts.map +1 -0
  78. package/dist/commands/init.js +564 -0
  79. package/dist/commands/init.js.map +1 -0
  80. package/dist/commands/iteration/create.d.ts +7 -0
  81. package/dist/commands/iteration/create.d.ts.map +1 -0
  82. package/dist/commands/iteration/create.js +141 -0
  83. package/dist/commands/iteration/create.js.map +1 -0
  84. package/dist/commands/iteration/split.d.ts +9 -0
  85. package/dist/commands/iteration/split.d.ts.map +1 -0
  86. package/dist/commands/iteration/split.js +165 -0
  87. package/dist/commands/iteration/split.js.map +1 -0
  88. package/dist/commands/iteration-from-global.d.ts +11 -0
  89. package/dist/commands/iteration-from-global.d.ts.map +1 -0
  90. package/dist/commands/iteration-from-global.js +294 -0
  91. package/dist/commands/iteration-from-global.js.map +1 -0
  92. package/dist/commands/plan.d.ts +12 -0
  93. package/dist/commands/plan.d.ts.map +1 -0
  94. package/dist/commands/plan.js +126 -0
  95. package/dist/commands/plan.js.map +1 -0
  96. package/dist/commands/progress.d.ts +10 -0
  97. package/dist/commands/progress.d.ts.map +1 -0
  98. package/dist/commands/progress.js +89 -0
  99. package/dist/commands/progress.js.map +1 -0
  100. package/dist/commands/rename.d.ts +14 -0
  101. package/dist/commands/rename.d.ts.map +1 -0
  102. package/dist/commands/rename.js +298 -0
  103. package/dist/commands/rename.js.map +1 -0
  104. package/dist/commands/report.d.ts +10 -0
  105. package/dist/commands/report.d.ts.map +1 -0
  106. package/dist/commands/report.js +124 -0
  107. package/dist/commands/report.js.map +1 -0
  108. package/dist/commands/research.d.ts +14 -0
  109. package/dist/commands/research.d.ts.map +1 -0
  110. package/dist/commands/research.js +181 -0
  111. package/dist/commands/research.js.map +1 -0
  112. package/dist/commands/retro.d.ts +10 -0
  113. package/dist/commands/retro.d.ts.map +1 -0
  114. package/dist/commands/retro.js +130 -0
  115. package/dist/commands/retro.js.map +1 -0
  116. package/dist/commands/spec.d.ts +8 -0
  117. package/dist/commands/spec.d.ts.map +1 -0
  118. package/dist/commands/spec.js +155 -0
  119. package/dist/commands/spec.js.map +1 -0
  120. package/dist/commands/status.d.ts +7 -0
  121. package/dist/commands/status.d.ts.map +1 -0
  122. package/dist/commands/status.js +48 -0
  123. package/dist/commands/status.js.map +1 -0
  124. package/dist/commands/sync-global.d.ts +13 -0
  125. package/dist/commands/sync-global.d.ts.map +1 -0
  126. package/dist/commands/sync-global.js +218 -0
  127. package/dist/commands/sync-global.js.map +1 -0
  128. package/dist/commands/sync.d.ts +13 -0
  129. package/dist/commands/sync.d.ts.map +1 -0
  130. package/dist/commands/sync.js +170 -0
  131. package/dist/commands/sync.js.map +1 -0
  132. package/dist/commands/task/new.d.ts +13 -0
  133. package/dist/commands/task/new.d.ts.map +1 -0
  134. package/dist/commands/task/new.js +195 -0
  135. package/dist/commands/task/new.js.map +1 -0
  136. package/dist/commands/template-add.d.ts +12 -0
  137. package/dist/commands/template-add.d.ts.map +1 -0
  138. package/dist/commands/template-add.js +65 -0
  139. package/dist/commands/template-add.js.map +1 -0
  140. package/dist/commands/validate.d.ts +10 -0
  141. package/dist/commands/validate.d.ts.map +1 -0
  142. package/dist/commands/validate.js +37 -0
  143. package/dist/commands/validate.js.map +1 -0
  144. package/dist/commands/welcome.d.ts +9 -0
  145. package/dist/commands/welcome.d.ts.map +1 -0
  146. package/dist/commands/welcome.js +166 -0
  147. package/dist/commands/welcome.js.map +1 -0
  148. package/dist/core/context.d.ts +31 -0
  149. package/dist/core/context.d.ts.map +1 -0
  150. package/dist/core/context.js +145 -0
  151. package/dist/core/context.js.map +1 -0
  152. package/dist/core/global-layer.d.ts +124 -0
  153. package/dist/core/global-layer.d.ts.map +1 -0
  154. package/dist/core/global-layer.js +456 -0
  155. package/dist/core/global-layer.js.map +1 -0
  156. package/dist/core/index.d.ts +8 -0
  157. package/dist/core/index.d.ts.map +1 -0
  158. package/dist/core/index.js +24 -0
  159. package/dist/core/index.js.map +1 -0
  160. package/dist/core/intent-recognition.d.ts +48 -0
  161. package/dist/core/intent-recognition.d.ts.map +1 -0
  162. package/dist/core/intent-recognition.js +485 -0
  163. package/dist/core/intent-recognition.js.map +1 -0
  164. package/dist/core/state.d.ts +26 -0
  165. package/dist/core/state.d.ts.map +1 -0
  166. package/dist/core/state.js +187 -0
  167. package/dist/core/state.js.map +1 -0
  168. package/dist/core/template-engine.d.ts +28 -0
  169. package/dist/core/template-engine.d.ts.map +1 -0
  170. package/dist/core/template-engine.js +57 -0
  171. package/dist/core/template-engine.js.map +1 -0
  172. package/dist/core/validator.d.ts +26 -0
  173. package/dist/core/validator.d.ts.map +1 -0
  174. package/dist/core/validator.js +246 -0
  175. package/dist/core/validator.js.map +1 -0
  176. package/dist/core/yaml-parser.d.ts +25 -0
  177. package/dist/core/yaml-parser.d.ts.map +1 -0
  178. package/dist/core/yaml-parser.js +113 -0
  179. package/dist/core/yaml-parser.js.map +1 -0
  180. package/dist/index.d.ts +2 -0
  181. package/dist/index.d.ts.map +1 -0
  182. package/dist/index.js +18 -0
  183. package/dist/index.js.map +1 -0
  184. package/dist/utils/file.d.ts +29 -0
  185. package/dist/utils/file.d.ts.map +1 -0
  186. package/dist/utils/file.js +126 -0
  187. package/dist/utils/file.js.map +1 -0
  188. package/dist/utils/git.d.ts +25 -0
  189. package/dist/utils/git.d.ts.map +1 -0
  190. package/dist/utils/git.js +77 -0
  191. package/dist/utils/git.js.map +1 -0
  192. package/dist/utils/logger.d.ts +41 -0
  193. package/dist/utils/logger.d.ts.map +1 -0
  194. package/dist/utils/logger.js +184 -0
  195. package/dist/utils/logger.js.map +1 -0
  196. package/package.json +49 -0
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.parseYamlFile = parseYamlFile;
40
+ exports.validateApiContract = validateApiContract;
41
+ exports.yamlToJson = yamlToJson;
42
+ exports.extractEndpoints = extractEndpoints;
43
+ const fs_extra_1 = require("fs-extra");
44
+ const js_yaml_1 = __importDefault(require("js-yaml"));
45
+ /**
46
+ * Parse a YAML file and return structured data
47
+ */
48
+ async function parseYamlFile(filePath) {
49
+ try {
50
+ if (!(await (0, fs_extra_1.pathExists)(filePath))) {
51
+ return { success: false, error: 'File not found' };
52
+ }
53
+ const { readFile } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
54
+ const content = await readFile(filePath, 'utf-8');
55
+ const data = js_yaml_1.default.load(content);
56
+ return { success: true, data };
57
+ }
58
+ catch (error) {
59
+ return {
60
+ success: false,
61
+ error: error instanceof Error ? error.message : 'Unknown error'
62
+ };
63
+ }
64
+ }
65
+ /**
66
+ * Validate API contract YAML structure
67
+ */
68
+ function validateApiContract(data) {
69
+ const errors = [];
70
+ if (!data) {
71
+ errors.push('Empty YAML data');
72
+ return errors;
73
+ }
74
+ // Check required fields
75
+ if (!data.api) {
76
+ errors.push('Missing "api" section');
77
+ }
78
+ else {
79
+ if (!data.api.path) {
80
+ errors.push('Missing API path');
81
+ }
82
+ if (!data.api.method) {
83
+ errors.push('Missing API method');
84
+ }
85
+ }
86
+ if (!data.request) {
87
+ errors.push('Missing "request" section');
88
+ }
89
+ if (!data.response) {
90
+ errors.push('Missing "response" section');
91
+ }
92
+ return errors;
93
+ }
94
+ /**
95
+ * Convert YAML to JSON string
96
+ */
97
+ function yamlToJson(data) {
98
+ return JSON.stringify(data, null, 2);
99
+ }
100
+ /**
101
+ * Extract API endpoints from YAML content
102
+ */
103
+ function extractEndpoints(data) {
104
+ const endpoints = [];
105
+ if (data && data.api) {
106
+ endpoints.push({
107
+ path: data.api.path || '',
108
+ method: data.api.method || 'GET'
109
+ });
110
+ }
111
+ return endpoints;
112
+ }
113
+ //# sourceMappingURL=yaml-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-parser.js","sourceRoot":"","sources":["../../src/core/yaml-parser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,sCAiBC;AAKD,kDA6BC;AAKD,gCAEC;AAKD,4CAWC;AAvFD,uCAAgD;AAChD,sDAA2B;AAS3B;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,IAAA,qBAAU,EAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,UAAU,GAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,iBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,IAAS;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,IAAS;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,IAAS;IACxC,MAAM,SAAS,GAA4C,EAAE,CAAC;IAE9D,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,SAAS,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;YACzB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK;SACjC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './core';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./core"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yCAAuB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Read a file as string, return empty string if not found
3
+ */
4
+ export declare function readFileSafe(filePath: string): Promise<string>;
5
+ /**
6
+ * Write file with auto directory creation
7
+ */
8
+ export declare function writeFileSafe(filePath: string, content: string): Promise<void>;
9
+ /**
10
+ * Copy directory with overwrite support
11
+ */
12
+ export declare function copyDir(src: string, dest: string, overwrite?: boolean): Promise<void>;
13
+ /**
14
+ * Check if file exists and is readable
15
+ */
16
+ export declare function isReadable(filePath: string): Promise<boolean>;
17
+ /**
18
+ * Get file extension without dot
19
+ */
20
+ export declare function getExtension(filePath: string): string;
21
+ /**
22
+ * Replace file extension
23
+ */
24
+ export declare function replaceExtension(filePath: string, newExt: string): string;
25
+ /**
26
+ * Find files matching pattern in directory
27
+ */
28
+ export declare function findFiles(dir: string, pattern: RegExp): Promise<string[]>;
29
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASpE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAOzF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAMzE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkB/E"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.readFileSafe = readFileSafe;
37
+ exports.writeFileSafe = writeFileSafe;
38
+ exports.copyDir = copyDir;
39
+ exports.isReadable = isReadable;
40
+ exports.getExtension = getExtension;
41
+ exports.replaceExtension = replaceExtension;
42
+ exports.findFiles = findFiles;
43
+ const fs_extra_1 = require("fs-extra");
44
+ const path_1 = require("path");
45
+ /**
46
+ * Read a file as string, return empty string if not found
47
+ */
48
+ async function readFileSafe(filePath) {
49
+ try {
50
+ if (await (0, fs_extra_1.pathExists)(filePath)) {
51
+ return await (0, fs_extra_1.readFile)(filePath, 'utf-8');
52
+ }
53
+ }
54
+ catch (error) {
55
+ // Ignore errors
56
+ }
57
+ return '';
58
+ }
59
+ /**
60
+ * Write file with auto directory creation
61
+ */
62
+ async function writeFileSafe(filePath, content) {
63
+ await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(filePath));
64
+ await (0, fs_extra_1.writeFile)(filePath, content, 'utf-8');
65
+ }
66
+ /**
67
+ * Copy directory with overwrite support
68
+ */
69
+ async function copyDir(src, dest, overwrite = false) {
70
+ if (overwrite) {
71
+ if (await (0, fs_extra_1.pathExists)(dest)) {
72
+ await (0, fs_extra_1.remove)(dest);
73
+ }
74
+ }
75
+ await (0, fs_extra_1.copy)(src, dest);
76
+ }
77
+ /**
78
+ * Check if file exists and is readable
79
+ */
80
+ async function isReadable(filePath) {
81
+ try {
82
+ await (0, fs_extra_1.readFile)(filePath, 'utf-8');
83
+ return true;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ /**
90
+ * Get file extension without dot
91
+ */
92
+ function getExtension(filePath) {
93
+ return (0, path_1.basename)(filePath).split('.').pop() || '';
94
+ }
95
+ /**
96
+ * Replace file extension
97
+ */
98
+ function replaceExtension(filePath, newExt) {
99
+ const ext = getExtension(filePath);
100
+ if (ext) {
101
+ return filePath.slice(0, -ext.length - 1) + '.' + newExt;
102
+ }
103
+ return filePath + '.' + newExt;
104
+ }
105
+ /**
106
+ * Find files matching pattern in directory
107
+ */
108
+ async function findFiles(dir, pattern) {
109
+ const { readdir } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
110
+ const files = [];
111
+ async function scan(currentDir) {
112
+ const entries = await readdir(currentDir, { withFileTypes: true });
113
+ for (const entry of entries) {
114
+ const fullPath = (0, path_1.join)(currentDir, entry.name);
115
+ if (entry.isDirectory()) {
116
+ await scan(fullPath);
117
+ }
118
+ else if (pattern.test(entry.name)) {
119
+ files.push(fullPath);
120
+ }
121
+ }
122
+ }
123
+ await scan(dir);
124
+ return files;
125
+ }
126
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Get current Git user name
3
+ */
4
+ export declare function getGitUser(): string;
5
+ /**
6
+ * Get current Git user email
7
+ */
8
+ export declare function getGitEmail(): string;
9
+ /**
10
+ * Get current branch name
11
+ */
12
+ export declare function getCurrentBranch(): string;
13
+ /**
14
+ * Get last commit hash (short)
15
+ */
16
+ export declare function getLastCommit(): string;
17
+ /**
18
+ * Check if current directory is a git repository
19
+ */
20
+ export declare function isGitRepo(): boolean;
21
+ /**
22
+ * Get repository root path
23
+ */
24
+ export declare function getRepoRoot(): string;
25
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAOnC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAMpC"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGitUser = getGitUser;
4
+ exports.getGitEmail = getGitEmail;
5
+ exports.getCurrentBranch = getCurrentBranch;
6
+ exports.getLastCommit = getLastCommit;
7
+ exports.isGitRepo = isGitRepo;
8
+ exports.getRepoRoot = getRepoRoot;
9
+ const child_process_1 = require("child_process");
10
+ /**
11
+ * Get current Git user name
12
+ */
13
+ function getGitUser() {
14
+ try {
15
+ return (0, child_process_1.execSync)('git config user.name', { encoding: 'utf-8' }).trim();
16
+ }
17
+ catch {
18
+ return 'unknown';
19
+ }
20
+ }
21
+ /**
22
+ * Get current Git user email
23
+ */
24
+ function getGitEmail() {
25
+ try {
26
+ return (0, child_process_1.execSync)('git config user.email', { encoding: 'utf-8' }).trim();
27
+ }
28
+ catch {
29
+ return 'unknown';
30
+ }
31
+ }
32
+ /**
33
+ * Get current branch name
34
+ */
35
+ function getCurrentBranch() {
36
+ try {
37
+ return (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
38
+ }
39
+ catch {
40
+ return 'unknown';
41
+ }
42
+ }
43
+ /**
44
+ * Get last commit hash (short)
45
+ */
46
+ function getLastCommit() {
47
+ try {
48
+ return (0, child_process_1.execSync)('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim();
49
+ }
50
+ catch {
51
+ return 'unknown';
52
+ }
53
+ }
54
+ /**
55
+ * Check if current directory is a git repository
56
+ */
57
+ function isGitRepo() {
58
+ try {
59
+ (0, child_process_1.execSync)('git rev-parse --git-dir', { stdio: 'ignore' });
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ /**
67
+ * Get repository root path
68
+ */
69
+ function getRepoRoot() {
70
+ try {
71
+ return (0, child_process_1.execSync)('git rev-parse --show-toplevel', { encoding: 'utf-8' }).trim();
72
+ }
73
+ catch {
74
+ return process.cwd();
75
+ }
76
+ }
77
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";;AAKA,gCAMC;AAKD,kCAMC;AAKD,4CAMC;AAKD,sCAMC;AAKD,8BAOC;AAKD,kCAMC;AAnED,iDAAyC;AAEzC;;GAEG;AACH,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,OAAO,IAAA,wBAAQ,EAAC,+BAA+B,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'success';
2
+ export declare class Logger {
3
+ private logFile?;
4
+ private verbose;
5
+ constructor(options?: {
6
+ logFile?: string;
7
+ verbose?: boolean;
8
+ });
9
+ log(level: LogLevel, message: string, ...args: unknown[]): void;
10
+ debug(message: string, ...args: unknown[]): void;
11
+ info(message: string, ...args: unknown[]): void;
12
+ warn(message: string, ...args: unknown[]): void;
13
+ error(message: string, ...args: unknown[]): void;
14
+ success(message: string, ...args: unknown[]): void;
15
+ private colorize;
16
+ close(): void;
17
+ }
18
+ export declare const logger: Logger;
19
+ export declare class ProgressBar {
20
+ private total;
21
+ private current;
22
+ private width;
23
+ constructor(total: number, width?: number);
24
+ update(current: number): void;
25
+ increment(step?: number): void;
26
+ private render;
27
+ }
28
+ export declare class Spinner {
29
+ private message;
30
+ private interval?;
31
+ private frames;
32
+ private frameIndex;
33
+ constructor(message: string);
34
+ start(): void;
35
+ stop(message?: string): void;
36
+ fail(message?: string): void;
37
+ }
38
+ export declare function formatTable(headers: string[], rows: string[][]): string;
39
+ export declare function formatJsonOutput(data: unknown): string;
40
+ export declare function writeOutput(content: string, outputPath?: string): Promise<void>;
41
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvE,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IAY7D,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAW/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIlD,OAAO,CAAC,QAAQ;IAahB,KAAK,IAAI,IAAI;CAGd;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC;AAGnC,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK;IAMrC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,CAAC,IAAI,SAAI,GAAG,IAAI;IAKzB,OAAO,CAAC,MAAM;CAcf;AAGD,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,EAAE,MAAM;IAI3B,KAAK,IAAI,IAAI;IAQb,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5B,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;CAO7B;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAiBvE;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEtD;AAGD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUrF"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Spinner = exports.ProgressBar = exports.logger = exports.Logger = void 0;
37
+ exports.formatTable = formatTable;
38
+ exports.formatJsonOutput = formatJsonOutput;
39
+ exports.writeOutput = writeOutput;
40
+ const fs_1 = require("fs");
41
+ class Logger {
42
+ constructor(options) {
43
+ this.verbose = options?.verbose ?? false;
44
+ if (options?.logFile) {
45
+ const dir = options.logFile.substring(0, options.logFile.lastIndexOf('/'));
46
+ if (dir && !(0, fs_1.existsSync)(dir)) {
47
+ (0, fs_1.mkdirSync)(dir, { recursive: true });
48
+ }
49
+ this.logFile = (0, fs_1.createWriteStream)(options.logFile, { flags: 'a' });
50
+ }
51
+ }
52
+ log(level, message, ...args) {
53
+ const timestamp = new Date().toISOString();
54
+ const formatted = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
55
+ if (this.verbose || level !== 'debug') {
56
+ console.log(this.colorize(level, formatted), ...args);
57
+ }
58
+ this.logFile?.write(`${formatted}\n`);
59
+ }
60
+ debug(message, ...args) {
61
+ this.log('debug', message, ...args);
62
+ }
63
+ info(message, ...args) {
64
+ this.log('info', message, ...args);
65
+ }
66
+ warn(message, ...args) {
67
+ this.log('warn', message, ...args);
68
+ }
69
+ error(message, ...args) {
70
+ this.log('error', message, ...args);
71
+ }
72
+ success(message, ...args) {
73
+ this.log('success', message, ...args);
74
+ }
75
+ colorize(level, message) {
76
+ const colors = {
77
+ debug: '\x1b[90m', // Gray
78
+ info: '\x1b[36m', // Cyan
79
+ warn: '\x1b[33m', // Yellow
80
+ error: '\x1b[31m', // Red
81
+ success: '\x1b[32m' // Green
82
+ };
83
+ const reset = '\x1b[0m';
84
+ return `${colors[level]}${message}${reset}`;
85
+ }
86
+ close() {
87
+ this.logFile?.end();
88
+ }
89
+ }
90
+ exports.Logger = Logger;
91
+ // Global logger instance
92
+ exports.logger = new Logger();
93
+ // Progress bar utility
94
+ class ProgressBar {
95
+ constructor(total, width = 40) {
96
+ this.total = total;
97
+ this.current = 0;
98
+ this.width = width;
99
+ }
100
+ update(current) {
101
+ this.current = current;
102
+ this.render();
103
+ }
104
+ increment(step = 1) {
105
+ this.current += step;
106
+ this.render();
107
+ }
108
+ render() {
109
+ const progress = Math.min(this.current / this.total, 1);
110
+ const filled = Math.round(this.width * progress);
111
+ const empty = this.width - filled;
112
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
113
+ const percentage = Math.round(progress * 100);
114
+ process.stdout.write(`\r[${bar}] ${percentage}% (${this.current}/${this.total})`);
115
+ if (this.current >= this.total) {
116
+ process.stdout.write('\n');
117
+ }
118
+ }
119
+ }
120
+ exports.ProgressBar = ProgressBar;
121
+ // Spinner utility
122
+ class Spinner {
123
+ constructor(message) {
124
+ this.frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
125
+ this.frameIndex = 0;
126
+ this.message = message;
127
+ }
128
+ start() {
129
+ this.interval = setInterval(() => {
130
+ const frame = this.frames[this.frameIndex % this.frames.length];
131
+ process.stdout.write(`\r${frame} ${this.message}...`);
132
+ this.frameIndex++;
133
+ }, 80);
134
+ }
135
+ stop(message) {
136
+ if (this.interval) {
137
+ clearInterval(this.interval);
138
+ this.interval = undefined;
139
+ }
140
+ process.stdout.write(`\r✅ ${message || this.message}\n`);
141
+ }
142
+ fail(message) {
143
+ if (this.interval) {
144
+ clearInterval(this.interval);
145
+ this.interval = undefined;
146
+ }
147
+ process.stdout.write(`\r❌ ${message || this.message}\n`);
148
+ }
149
+ }
150
+ exports.Spinner = Spinner;
151
+ // Table formatter
152
+ function formatTable(headers, rows) {
153
+ const colWidths = headers.map((h, i) => {
154
+ const maxContent = Math.max(...rows.map(r => (r[i] || '').length));
155
+ return Math.max(h.length, maxContent);
156
+ });
157
+ const separator = colWidths.map(w => '-'.repeat(w + 2)).join('|');
158
+ const formatRow = (cells) => {
159
+ return cells.map((c, i) => ` ${(c || '').padEnd(colWidths[i])} `).join('|');
160
+ };
161
+ return [
162
+ formatRow(headers),
163
+ separator,
164
+ ...rows.map(formatRow)
165
+ ].join('\n');
166
+ }
167
+ // JSON output formatter
168
+ function formatJsonOutput(data) {
169
+ return JSON.stringify(data, null, 2);
170
+ }
171
+ // Output file helper
172
+ async function writeOutput(content, outputPath) {
173
+ if (outputPath) {
174
+ const { writeFile, ensureDir } = await Promise.resolve().then(() => __importStar(require('fs-extra')));
175
+ const { dirname } = await Promise.resolve().then(() => __importStar(require('path')));
176
+ await ensureDir(dirname(outputPath));
177
+ await writeFile(outputPath, content, 'utf-8');
178
+ exports.logger.success(`Output saved to: ${outputPath}`);
179
+ }
180
+ else {
181
+ console.log(content);
182
+ }
183
+ }
184
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}