coding-agent-benchmarks 0.2.1 → 0.3.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 (184) hide show
  1. package/README.md +171 -10
  2. package/dist/User.d.ts +10 -0
  3. package/dist/User.d.ts.map +1 -0
  4. package/dist/User.js +3 -0
  5. package/dist/User.js.map +1 -0
  6. package/dist/adapters/claudeCodeCLI.d.ts +1 -1
  7. package/dist/adapters/claudeCodeCLI.d.ts.map +1 -1
  8. package/dist/adapters/claudeCodeCLI.js +44 -32
  9. package/dist/adapters/claudeCodeCLI.js.map +1 -1
  10. package/dist/adapters/copilotCLI.d.ts.map +1 -1
  11. package/dist/adapters/copilotCLI.js +28 -16
  12. package/dist/adapters/copilotCLI.js.map +1 -1
  13. package/dist/config/defaultScenarios.d.ts +6 -0
  14. package/dist/config/defaultScenarios.d.ts.map +1 -0
  15. package/dist/config/defaultScenarios.js +209 -0
  16. package/dist/config/defaultScenarios.js.map +1 -0
  17. package/dist/config/environment.d.ts +51 -0
  18. package/dist/config/environment.d.ts.map +1 -0
  19. package/dist/config/environment.js +57 -0
  20. package/dist/config/environment.js.map +1 -0
  21. package/dist/config/parser.d.ts +6 -0
  22. package/dist/config/parser.d.ts.map +1 -0
  23. package/dist/config/parser.js +87 -0
  24. package/dist/config/parser.js.map +1 -0
  25. package/dist/evaluator.d.ts +4 -9
  26. package/dist/evaluator.d.ts.map +1 -1
  27. package/dist/evaluator.js +4 -12
  28. package/dist/evaluator.js.map +1 -1
  29. package/dist/examples/file-upload-example.d.ts +2 -0
  30. package/dist/examples/file-upload-example.d.ts.map +1 -0
  31. package/dist/examples/file-upload-example.js +37 -0
  32. package/dist/examples/file-upload-example.js.map +1 -0
  33. package/dist/examples/typedEventEmitterExample.d.ts +5 -0
  34. package/dist/examples/typedEventEmitterExample.d.ts.map +1 -0
  35. package/dist/examples/typedEventEmitterExample.js +44 -0
  36. package/dist/examples/typedEventEmitterExample.js.map +1 -0
  37. package/dist/index.d.ts +2 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +3 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/registration/database.d.ts +13 -0
  42. package/dist/registration/database.d.ts.map +1 -0
  43. package/dist/registration/database.js +35 -0
  44. package/dist/registration/database.js.map +1 -0
  45. package/dist/registration/email.d.ts +17 -0
  46. package/dist/registration/email.d.ts.map +1 -0
  47. package/dist/registration/email.js +40 -0
  48. package/dist/registration/email.js.map +1 -0
  49. package/dist/registration/emailService.d.ts +13 -0
  50. package/dist/registration/emailService.d.ts.map +1 -0
  51. package/dist/registration/emailService.js +26 -0
  52. package/dist/registration/emailService.js.map +1 -0
  53. package/dist/registration/example.d.ts +2 -0
  54. package/dist/registration/example.d.ts.map +1 -0
  55. package/dist/registration/example.js +37 -0
  56. package/dist/registration/example.js.map +1 -0
  57. package/dist/registration/index.d.ts +7 -0
  58. package/dist/registration/index.d.ts.map +1 -0
  59. package/dist/registration/index.js +15 -0
  60. package/dist/registration/index.js.map +1 -0
  61. package/dist/registration/password.d.ts +3 -0
  62. package/dist/registration/password.d.ts.map +1 -0
  63. package/dist/registration/password.js +27 -0
  64. package/dist/registration/password.js.map +1 -0
  65. package/dist/registration/passwordHasher.d.ts +8 -0
  66. package/dist/registration/passwordHasher.d.ts.map +1 -0
  67. package/dist/registration/passwordHasher.js +39 -0
  68. package/dist/registration/passwordHasher.js.map +1 -0
  69. package/dist/registration/registrationService.d.ts +14 -0
  70. package/dist/registration/registrationService.d.ts.map +1 -0
  71. package/dist/registration/registrationService.js +49 -0
  72. package/dist/registration/registrationService.js.map +1 -0
  73. package/dist/registration/service.d.ts +14 -0
  74. package/dist/registration/service.d.ts.map +1 -0
  75. package/dist/registration/service.js +48 -0
  76. package/dist/registration/service.js.map +1 -0
  77. package/dist/registration/types.d.ts +22 -0
  78. package/dist/registration/types.d.ts.map +1 -0
  79. package/dist/registration/types.js +3 -0
  80. package/dist/registration/types.js.map +1 -0
  81. package/dist/registration/userRepository.d.ts +12 -0
  82. package/dist/registration/userRepository.d.ts.map +1 -0
  83. package/dist/registration/userRepository.js +28 -0
  84. package/dist/registration/userRepository.js.map +1 -0
  85. package/dist/registration/validator.d.ts +7 -0
  86. package/dist/registration/validator.d.ts.map +1 -0
  87. package/dist/registration/validator.js +44 -0
  88. package/dist/registration/validator.js.map +1 -0
  89. package/dist/registration/validators.d.ts +5 -0
  90. package/dist/registration/validators.d.ts.map +1 -0
  91. package/dist/registration/validators.js +60 -0
  92. package/dist/registration/validators.js.map +1 -0
  93. package/dist/reporter.d.ts.map +1 -1
  94. package/dist/reporter.js +59 -34
  95. package/dist/reporter.js.map +1 -1
  96. package/dist/runner.js +2 -1
  97. package/dist/runner.js.map +1 -1
  98. package/dist/sync/cache.d.ts +14 -0
  99. package/dist/sync/cache.d.ts.map +1 -0
  100. package/dist/sync/cache.js +73 -0
  101. package/dist/sync/cache.js.map +1 -0
  102. package/dist/sync/index.d.ts +7 -0
  103. package/dist/sync/index.d.ts.map +1 -0
  104. package/dist/sync/index.js +20 -0
  105. package/dist/sync/index.js.map +1 -0
  106. package/dist/sync/resolver.d.ts +12 -0
  107. package/dist/sync/resolver.d.ts.map +1 -0
  108. package/dist/sync/resolver.js +43 -0
  109. package/dist/sync/resolver.js.map +1 -0
  110. package/dist/sync/service.d.ts +20 -0
  111. package/dist/sync/service.d.ts.map +1 -0
  112. package/dist/sync/service.js +162 -0
  113. package/dist/sync/service.js.map +1 -0
  114. package/dist/sync/source.d.ts +21 -0
  115. package/dist/sync/source.d.ts.map +1 -0
  116. package/dist/sync/source.js +58 -0
  117. package/dist/sync/source.js.map +1 -0
  118. package/dist/sync/types.d.ts +56 -0
  119. package/dist/sync/types.d.ts.map +1 -0
  120. package/dist/sync/types.js +21 -0
  121. package/dist/sync/types.js.map +1 -0
  122. package/dist/types.d.ts +6 -6
  123. package/dist/types.d.ts.map +1 -1
  124. package/dist/utils/baselineManager.d.ts +2 -1
  125. package/dist/utils/baselineManager.d.ts.map +1 -1
  126. package/dist/utils/baselineManager.js +1 -0
  127. package/dist/utils/baselineManager.js.map +1 -1
  128. package/dist/utils/cache.d.ts +11 -0
  129. package/dist/utils/cache.d.ts.map +1 -0
  130. package/dist/utils/cache.js +28 -0
  131. package/dist/utils/cache.js.map +1 -0
  132. package/dist/utils/config-merger.d.ts +11 -0
  133. package/dist/utils/config-merger.d.ts.map +1 -0
  134. package/dist/utils/config-merger.js +36 -0
  135. package/dist/utils/config-merger.js.map +1 -0
  136. package/dist/utils/configParser.d.ts +9 -0
  137. package/dist/utils/configParser.d.ts.map +1 -0
  138. package/dist/utils/configParser.js +51 -0
  139. package/dist/utils/configParser.js.map +1 -0
  140. package/dist/utils/database-providers.d.ts +23 -0
  141. package/dist/utils/database-providers.d.ts.map +1 -0
  142. package/dist/utils/database-providers.js +48 -0
  143. package/dist/utils/database-providers.js.map +1 -0
  144. package/dist/utils/errorHandler.d.ts +10 -0
  145. package/dist/utils/errorHandler.d.ts.map +1 -0
  146. package/dist/utils/errorHandler.js +58 -0
  147. package/dist/utils/errorHandler.js.map +1 -0
  148. package/dist/utils/fetchUserData.d.ts +11 -0
  149. package/dist/utils/fetchUserData.d.ts.map +1 -0
  150. package/dist/utils/fetchUserData.js +31 -0
  151. package/dist/utils/fetchUserData.js.map +1 -0
  152. package/dist/utils/file-upload-handler.d.ts +46 -0
  153. package/dist/utils/file-upload-handler.d.ts.map +1 -0
  154. package/dist/utils/file-upload-handler.js +110 -0
  155. package/dist/utils/file-upload-handler.js.map +1 -0
  156. package/dist/utils/gitUtils.d.ts +2 -1
  157. package/dist/utils/gitUtils.d.ts.map +1 -1
  158. package/dist/utils/gitUtils.js +85 -18
  159. package/dist/utils/gitUtils.js.map +1 -1
  160. package/dist/utils/statistics.d.ts +9 -0
  161. package/dist/utils/statistics.d.ts.map +1 -0
  162. package/dist/utils/statistics.js +26 -0
  163. package/dist/utils/statistics.js.map +1 -0
  164. package/dist/utils/storage-providers.d.ts +24 -0
  165. package/dist/utils/storage-providers.d.ts.map +1 -0
  166. package/dist/utils/storage-providers.js +38 -0
  167. package/dist/utils/storage-providers.js.map +1 -0
  168. package/dist/utils/transformArray.d.ts +18 -0
  169. package/dist/utils/transformArray.d.ts.map +1 -0
  170. package/dist/utils/transformArray.js +21 -0
  171. package/dist/utils/transformArray.js.map +1 -0
  172. package/dist/utils/typedEventEmitter.d.ts +18 -0
  173. package/dist/utils/typedEventEmitter.d.ts.map +1 -0
  174. package/dist/utils/typedEventEmitter.js +62 -0
  175. package/dist/utils/typedEventEmitter.js.map +1 -0
  176. package/dist/utils/userUtils.d.ts +9 -0
  177. package/dist/utils/userUtils.d.ts.map +1 -0
  178. package/dist/utils/userUtils.js +14 -0
  179. package/dist/utils/userUtils.js.map +1 -0
  180. package/dist/validators/llmJudge.d.ts +1 -1
  181. package/dist/validators/llmJudge.d.ts.map +1 -1
  182. package/dist/validators/llmJudge.js +40 -41
  183. package/dist/validators/llmJudge.js.map +1 -1
  184. package/package.json +1 -1
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Cache = void 0;
4
+ class Cache {
5
+ constructor() {
6
+ this.store = new Map();
7
+ }
8
+ get(key) {
9
+ return this.store.get(key);
10
+ }
11
+ set(key, value) {
12
+ this.store.set(key, value);
13
+ }
14
+ has(key) {
15
+ return this.store.has(key);
16
+ }
17
+ delete(key) {
18
+ return this.store.delete(key);
19
+ }
20
+ clear() {
21
+ this.store.clear();
22
+ }
23
+ get size() {
24
+ return this.store.size;
25
+ }
26
+ }
27
+ exports.Cache = Cache;
28
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;IAGhB;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAa,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AA9BD,sBA8BC"}
@@ -0,0 +1,11 @@
1
+ type DeepReadonly<T> = {
2
+ readonly [P in keyof T]: T[P] extends object ? T[P] extends Function ? T[P] : DeepReadonly<T[P]> : T[P];
3
+ };
4
+ type ConfigValue = string | number | boolean | null | ConfigObject | ConfigArray;
5
+ type ConfigObject = {
6
+ [key: string]: ConfigValue;
7
+ };
8
+ type ConfigArray = readonly ConfigValue[];
9
+ export declare const createConfig: <T extends ConfigObject>(defaultConfig: T, userConfig?: Partial<T>) => DeepReadonly<T>;
10
+ export {};
11
+ //# sourceMappingURL=config-merger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.d.ts","sourceRoot":"","sources":["../../src/utils/config-merger.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACxC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GACnB,CAAC,CAAC,CAAC,CAAC,GACJ,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACpB,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AAEF,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,YAAY,GAAG,WAAW,CAAC;AACjF,KAAK,YAAY,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAAE,CAAC;AACnD,KAAK,WAAW,GAAG,SAAS,WAAW,EAAE,CAAC;AA0C1C,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,YAAY,EACjD,eAAe,CAAC,EAChB,aAAY,OAAO,CAAC,CAAC,CAAM,KAC1B,YAAY,CAAC,CAAC,CAGhB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createConfig = void 0;
4
+ const isObject = (value) => {
5
+ return value !== null && typeof value === "object" && !Array.isArray(value);
6
+ };
7
+ const deepFreeze = (obj) => {
8
+ Object.freeze(obj);
9
+ Object.getOwnPropertyNames(obj).forEach((prop) => {
10
+ const value = obj[prop];
11
+ if (value && typeof value === "object") {
12
+ deepFreeze(value);
13
+ }
14
+ });
15
+ return obj;
16
+ };
17
+ const deepMerge = (target, source) => {
18
+ const result = { ...target };
19
+ Object.keys(source).forEach((key) => {
20
+ const sourceValue = source[key];
21
+ const targetValue = result[key];
22
+ if (isObject(sourceValue) && isObject(targetValue)) {
23
+ result[key] = deepMerge(targetValue, sourceValue);
24
+ }
25
+ else if (sourceValue !== undefined) {
26
+ result[key] = sourceValue;
27
+ }
28
+ });
29
+ return result;
30
+ };
31
+ const createConfig = (defaultConfig, userConfig = {}) => {
32
+ const merged = deepMerge(defaultConfig, userConfig);
33
+ return deepFreeze(merged);
34
+ };
35
+ exports.createConfig = createConfig;
36
+ //# sourceMappingURL=config-merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../src/utils/config-merger.ts"],"names":[],"mappings":";;;AAYA,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAyB,EAAE;IACzD,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAI,GAAM,EAAmB,EAAE;IAChD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEnB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAI,GAA+B,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAsB,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAChB,MAAS,EACT,MAAkB,EACf,EAAE;IACL,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAClC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,WAA2B,EAC3B,WAA2B,CACG,CAAC;QACnC,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,WAA0C,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEK,MAAM,YAAY,GAAG,CAC1B,aAAgB,EAChB,aAAyB,EAAE,EACV,EAAE;IACnB,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC;AANW,QAAA,YAAY,gBAMvB"}
@@ -0,0 +1,9 @@
1
+ export interface ConfigObject {
2
+ apiUrl: string;
3
+ timeout: number;
4
+ retryAttempts: number;
5
+ enableCache: boolean;
6
+ headers: Record<string, string>;
7
+ }
8
+ export declare const parseConfig: (filePath: string) => ConfigObject;
9
+ //# sourceMappingURL=configParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configParser.d.ts","sourceRoot":"","sources":["../../src/utils/configParser.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,YAa9C,CAAC"}
@@ -0,0 +1,51 @@
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.parseConfig = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const parseConfig = (filePath) => {
39
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
40
+ const parsedData = JSON.parse(fileContent);
41
+ const config = {
42
+ apiUrl: parsedData.apiUrl,
43
+ timeout: parsedData.timeout,
44
+ retryAttempts: parsedData.retryAttempts,
45
+ enableCache: parsedData.enableCache,
46
+ headers: parsedData.headers,
47
+ };
48
+ return config;
49
+ };
50
+ exports.parseConfig = parseConfig;
51
+ //# sourceMappingURL=configParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configParser.js","sourceRoot":"","sources":["../../src/utils/configParser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AAUlB,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAgB,EAAE;IAC5D,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAiB;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,aAAa,EAAE,UAAU,CAAC,aAAa;QACvC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAbW,QAAA,WAAW,eAatB"}
@@ -0,0 +1,23 @@
1
+ import { DatabaseProvider, UploadedFile } from './file-upload-handler';
2
+ export declare class PostgresDatabaseProvider implements DatabaseProvider {
3
+ private readonly connectionString;
4
+ private readonly tableName;
5
+ constructor(connectionString: string, tableName?: string);
6
+ createUploadRecord(file: UploadedFile): Promise<string>;
7
+ private generateId;
8
+ }
9
+ export declare class MongoDatabaseProvider implements DatabaseProvider {
10
+ private readonly connectionString;
11
+ private readonly collectionName;
12
+ constructor(connectionString: string, collectionName?: string);
13
+ createUploadRecord(file: UploadedFile): Promise<string>;
14
+ private generateObjectId;
15
+ }
16
+ export declare class SQLiteDatabaseProvider implements DatabaseProvider {
17
+ private readonly dbPath;
18
+ private readonly tableName;
19
+ constructor(dbPath: string, tableName?: string);
20
+ createUploadRecord(file: UploadedFile): Promise<string>;
21
+ private generateId;
22
+ }
23
+ //# sourceMappingURL=database-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-providers.d.ts","sourceRoot":"","sources":["../../src/utils/database-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,qBAAa,wBAAyB,YAAW,gBAAgB;IAE7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,gBAAgB,EAAE,MAAM,EACxB,SAAS,GAAE,MAAuB;IAG/C,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,UAAU;CAGnB;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAE1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,gBAAgB,EAAE,MAAM,EACxB,cAAc,GAAE,MAAuB;IAGpD,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,gBAAgB;CAKzB;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAE3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAuB;IAG/C,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,UAAU;CAGnB"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLiteDatabaseProvider = exports.MongoDatabaseProvider = exports.PostgresDatabaseProvider = void 0;
4
+ class PostgresDatabaseProvider {
5
+ constructor(connectionString, tableName = 'file_uploads') {
6
+ this.connectionString = connectionString;
7
+ this.tableName = tableName;
8
+ }
9
+ async createUploadRecord(file) {
10
+ const id = this.generateId();
11
+ return id;
12
+ }
13
+ generateId() {
14
+ return `upload_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
15
+ }
16
+ }
17
+ exports.PostgresDatabaseProvider = PostgresDatabaseProvider;
18
+ class MongoDatabaseProvider {
19
+ constructor(connectionString, collectionName = 'file_uploads') {
20
+ this.connectionString = connectionString;
21
+ this.collectionName = collectionName;
22
+ }
23
+ async createUploadRecord(file) {
24
+ const id = this.generateObjectId();
25
+ return id;
26
+ }
27
+ generateObjectId() {
28
+ const timestamp = Math.floor(Date.now() / 1000).toString(16);
29
+ const random = Math.random().toString(16).substring(2, 18);
30
+ return timestamp + random;
31
+ }
32
+ }
33
+ exports.MongoDatabaseProvider = MongoDatabaseProvider;
34
+ class SQLiteDatabaseProvider {
35
+ constructor(dbPath, tableName = 'file_uploads') {
36
+ this.dbPath = dbPath;
37
+ this.tableName = tableName;
38
+ }
39
+ async createUploadRecord(file) {
40
+ const id = this.generateId();
41
+ return id;
42
+ }
43
+ generateId() {
44
+ return `upload_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
45
+ }
46
+ }
47
+ exports.SQLiteDatabaseProvider = SQLiteDatabaseProvider;
48
+ //# sourceMappingURL=database-providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-providers.js","sourceRoot":"","sources":["../../src/utils/database-providers.ts"],"names":[],"mappings":";;;AAEA,MAAa,wBAAwB;IACnC,YACmB,gBAAwB,EACxB,YAAoB,cAAc;QADlC,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,cAAS,GAAT,SAAS,CAAyB;IAClD,CAAC;IAEJ,KAAK,CAAC,kBAAkB,CAAC,IAAkB;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,UAAU;QAChB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;CACF;AAdD,4DAcC;AAED,MAAa,qBAAqB;IAChC,YACmB,gBAAwB,EACxB,iBAAyB,cAAc;QADvC,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,mBAAc,GAAd,cAAc,CAAyB;IACvD,CAAC;IAEJ,KAAK,CAAC,kBAAkB,CAAC,IAAkB;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,gBAAgB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,SAAS,GAAG,MAAM,CAAC;IAC5B,CAAC;CACF;AAhBD,sDAgBC;AAED,MAAa,sBAAsB;IACjC,YACmB,MAAc,EACd,YAAoB,cAAc;QADlC,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAyB;IAClD,CAAC;IAEJ,KAAK,CAAC,kBAAkB,CAAC,IAAkB;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,UAAU;QAChB,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC/E,CAAC;CACF;AAdD,wDAcC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Error handling and formatting utilities
3
+ */
4
+ /**
5
+ * Format and display error messages with appropriate styling
6
+ */
7
+ export declare const processCLIError: (error: unknown, context?: {
8
+ adapter?: string;
9
+ }) => void;
10
+ //# sourceMappingURL=errorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,UAAU;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC7B,IAgBF,CAAC"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Error handling and formatting utilities
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.processCLIError = void 0;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ /**
12
+ * Format and display error messages with appropriate styling
13
+ */
14
+ const processCLIError = (error, context) => {
15
+ const errorMessage = String(error);
16
+ const isInteractive = process.stdout.isTTY === true;
17
+ // Unknown adapter type error
18
+ if (errorMessage.includes("Unknown adapter type")) {
19
+ displayUnknownAdapterError(context?.adapter, isInteractive);
20
+ return;
21
+ }
22
+ // Generic error
23
+ if (isInteractive) {
24
+ console.error(chalk_1.default.red("Error:"), errorMessage);
25
+ }
26
+ else {
27
+ console.error("Error:", errorMessage);
28
+ }
29
+ };
30
+ exports.processCLIError = processCLIError;
31
+ /**
32
+ * Display a formatted error message for unknown adapter types
33
+ */
34
+ const displayUnknownAdapterError = (providedAdapter, isInteractive = true) => {
35
+ const validAdapters = ["copilot", "claude-code"];
36
+ if (isInteractive) {
37
+ console.error("");
38
+ console.error(chalk_1.default.red.bold("\u2717 Invalid adapter type"));
39
+ console.error("");
40
+ if (providedAdapter) {
41
+ console.error(` ${chalk_1.default.gray("You specified:")} ${chalk_1.default.yellow(providedAdapter)}`);
42
+ }
43
+ console.error(` ${chalk_1.default.gray("Valid options:")} ${validAdapters.map((a) => chalk_1.default.green(a)).join(", ")}`);
44
+ console.error("");
45
+ console.error(chalk_1.default.gray(" Example: npx coding-agent-benchmarks evaluate --adapter claude-code"));
46
+ console.error("");
47
+ }
48
+ else {
49
+ // Non-interactive mode: simple, parseable output
50
+ console.error("Error: Invalid adapter type");
51
+ if (providedAdapter) {
52
+ console.error(` You specified: ${providedAdapter}`);
53
+ }
54
+ console.error(` Valid options: ${validAdapters.join(", ")}`);
55
+ console.error(" Example: npx coding-agent-benchmarks evaluate --adapter copilot");
56
+ }
57
+ };
58
+ //# sourceMappingURL=errorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/utils/errorHandler.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,kDAA0B;AAG1B;;GAEG;AACI,MAAM,eAAe,GAAG,CAC7B,KAAc,EACd,OAA8B,EACxB,EAAE;IACR,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IAEpD,6BAA6B;IAC7B,IAAI,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAClD,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;AACH,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B;AAEF;;GAEG;AACH,MAAM,0BAA0B,GAAG,CACjC,eAAwB,EACxB,aAAa,GAAG,IAAI,EACd,EAAE;IACR,MAAM,aAAa,GAAkB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEhE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,KAAK,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,eAAK,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,KAAK,CACX,KAAK,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,IAAI,CACR,uEAAuE,CACxE,CACF,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,iDAAiD;QACjD,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,eAAe,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CACX,mEAAmE,CACpE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ interface User {
2
+ readonly id: number;
3
+ readonly name: string;
4
+ readonly email: string;
5
+ readonly username: string;
6
+ readonly createdAt: Date;
7
+ }
8
+ declare const fetchUserData: (userId: number) => Promise<User>;
9
+ export { fetchUserData };
10
+ export type { User };
11
+ //# sourceMappingURL=fetchUserData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUserData.d.ts","sourceRoot":"","sources":["../../src/utils/fetchUserData.ts"],"names":[],"mappings":"AAAA,UAAU,IAAI;IACZ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAUD,QAAA,MAAM,aAAa,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CA6BzD,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,IAAI,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchUserData = void 0;
4
+ const fetchUserData = async (userId) => {
5
+ try {
6
+ const response = await fetch(`https://api.example.com/users/${userId}`);
7
+ if (!response.ok) {
8
+ throw new Error(`HTTP error: ${response.status} ${response.statusText}`);
9
+ }
10
+ const rawData = await response.json();
11
+ if (!rawData.id || !rawData.name || !rawData.email || !rawData.username) {
12
+ throw new Error('Invalid user data: missing required fields');
13
+ }
14
+ const user = {
15
+ id: rawData.id,
16
+ name: rawData.name,
17
+ email: rawData.email,
18
+ username: rawData.username,
19
+ createdAt: new Date(rawData.created_at),
20
+ };
21
+ return user;
22
+ }
23
+ catch (error) {
24
+ if (error instanceof Error) {
25
+ throw new Error(`Failed to fetch user data: ${error.message}`);
26
+ }
27
+ throw new Error('Failed to fetch user data: Unknown error');
28
+ }
29
+ };
30
+ exports.fetchUserData = fetchUserData;
31
+ //# sourceMappingURL=fetchUserData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUserData.js","sourceRoot":"","sources":["../../src/utils/fetchUserData.ts"],"names":[],"mappings":";;;AAgBA,MAAM,aAAa,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;IAC5D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAqB,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,IAAI,GAAS;YACjB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC;AAEO,sCAAa"}
@@ -0,0 +1,46 @@
1
+ export interface UploadConfig {
2
+ readonly maxFileSize: number;
3
+ readonly allowedFileTypes: readonly string[];
4
+ readonly storageType: 'disk' | 'cloud';
5
+ readonly storagePath: string;
6
+ readonly cloudProvider?: CloudStorageProvider;
7
+ readonly generateThumbnails: boolean;
8
+ readonly thumbnailSize?: {
9
+ width: number;
10
+ height: number;
11
+ };
12
+ readonly databaseProvider: DatabaseProvider;
13
+ }
14
+ export interface UploadedFile {
15
+ readonly originalName: string;
16
+ readonly sanitizedName: string;
17
+ readonly mimeType: string;
18
+ readonly size: number;
19
+ readonly path: string;
20
+ readonly hash: string;
21
+ readonly thumbnailPath?: string;
22
+ }
23
+ export interface CloudStorageProvider {
24
+ upload(file: Buffer, filename: string): Promise<string>;
25
+ }
26
+ export interface DatabaseProvider {
27
+ createUploadRecord(file: UploadedFile): Promise<string>;
28
+ }
29
+ export interface ValidationResult {
30
+ readonly valid: boolean;
31
+ readonly error?: string;
32
+ }
33
+ export declare class FileUploadHandler {
34
+ private readonly config;
35
+ constructor(config: UploadConfig);
36
+ handleUpload(fileBuffer: Buffer, originalFilename: string, mimeType: string): Promise<UploadedFile>;
37
+ private validateFile;
38
+ private sanitizeFilename;
39
+ private generateHash;
40
+ private generateUniqueFilename;
41
+ private saveToDisk;
42
+ private isImage;
43
+ private generateThumbnail;
44
+ private resizeImage;
45
+ }
46
+ //# sourceMappingURL=file-upload-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-handler.d.ts","sourceRoot":"","sources":["../../src/utils/file-upload-handler.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAE3C,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC;IAuCxB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,sBAAsB;YAQhB,UAAU;IASxB,OAAO,CAAC,OAAO;YAID,iBAAiB;YA6BjB,WAAW;CAQ1B"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileUploadHandler = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const crypto_1 = require("crypto");
7
+ class FileUploadHandler {
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async handleUpload(fileBuffer, originalFilename, mimeType) {
12
+ const validation = this.validateFile(fileBuffer, mimeType);
13
+ if (!validation.valid) {
14
+ throw new Error(`File validation failed: ${validation.error}`);
15
+ }
16
+ const sanitizedFilename = this.sanitizeFilename(originalFilename);
17
+ const fileHash = this.generateHash(fileBuffer);
18
+ const uniqueFilename = this.generateUniqueFilename(sanitizedFilename, fileHash);
19
+ let filePath;
20
+ if (this.config.storageType === 'disk') {
21
+ filePath = await this.saveToDisk(fileBuffer, uniqueFilename);
22
+ }
23
+ else {
24
+ if (!this.config.cloudProvider) {
25
+ throw new Error('Cloud provider not configured');
26
+ }
27
+ filePath = await this.config.cloudProvider.upload(fileBuffer, uniqueFilename);
28
+ }
29
+ const uploadedFile = {
30
+ originalName: originalFilename,
31
+ sanitizedName: sanitizedFilename,
32
+ mimeType,
33
+ size: fileBuffer.length,
34
+ path: filePath,
35
+ hash: fileHash,
36
+ };
37
+ if (this.config.generateThumbnails && this.isImage(mimeType)) {
38
+ const thumbnailPath = await this.generateThumbnail(fileBuffer, uniqueFilename, mimeType);
39
+ return { ...uploadedFile, thumbnailPath };
40
+ }
41
+ await this.config.databaseProvider.createUploadRecord(uploadedFile);
42
+ return uploadedFile;
43
+ }
44
+ validateFile(fileBuffer, mimeType) {
45
+ if (fileBuffer.length > this.config.maxFileSize) {
46
+ return {
47
+ valid: false,
48
+ error: `File size ${fileBuffer.length} exceeds maximum ${this.config.maxFileSize}`,
49
+ };
50
+ }
51
+ if (!this.config.allowedFileTypes.includes(mimeType)) {
52
+ return {
53
+ valid: false,
54
+ error: `File type ${mimeType} is not allowed`,
55
+ };
56
+ }
57
+ return { valid: true };
58
+ }
59
+ sanitizeFilename(filename) {
60
+ const ext = (0, path_1.extname)(filename);
61
+ const name = (0, path_1.basename)(filename, ext);
62
+ const sanitized = name
63
+ .replace(/[^a-zA-Z0-9.-]/g, '_')
64
+ .replace(/_{2,}/g, '_')
65
+ .replace(/^_+|_+$/g, '')
66
+ .toLowerCase();
67
+ const safeName = sanitized || 'unnamed';
68
+ return `${safeName}${ext.toLowerCase()}`;
69
+ }
70
+ generateHash(buffer) {
71
+ return (0, crypto_1.createHash)('sha256').update(buffer).digest('hex');
72
+ }
73
+ generateUniqueFilename(sanitizedFilename, hash) {
74
+ const timestamp = Date.now();
75
+ const ext = (0, path_1.extname)(sanitizedFilename);
76
+ const name = (0, path_1.basename)(sanitizedFilename, ext);
77
+ const shortHash = hash.substring(0, 8);
78
+ return `${name}_${timestamp}_${shortHash}${ext}`;
79
+ }
80
+ async saveToDisk(buffer, filename) {
81
+ const fullPath = (0, path_1.join)(this.config.storagePath, filename);
82
+ await fs_1.promises.mkdir(this.config.storagePath, { recursive: true });
83
+ await fs_1.promises.writeFile(fullPath, buffer);
84
+ return fullPath;
85
+ }
86
+ isImage(mimeType) {
87
+ return mimeType.startsWith('image/');
88
+ }
89
+ async generateThumbnail(buffer, filename, mimeType) {
90
+ const thumbnailFilename = `thumb_${filename}`;
91
+ const thumbnailPath = (0, path_1.join)(this.config.storagePath, 'thumbnails', thumbnailFilename);
92
+ await fs_1.promises.mkdir((0, path_1.join)(this.config.storagePath, 'thumbnails'), { recursive: true });
93
+ const resizedBuffer = await this.resizeImage(buffer, this.config.thumbnailSize?.width || 200, this.config.thumbnailSize?.height || 200, mimeType);
94
+ if (this.config.storageType === 'disk') {
95
+ await fs_1.promises.writeFile(thumbnailPath, resizedBuffer);
96
+ }
97
+ else {
98
+ if (!this.config.cloudProvider) {
99
+ throw new Error('Cloud provider not configured');
100
+ }
101
+ await this.config.cloudProvider.upload(resizedBuffer, `thumbnails/${thumbnailFilename}`);
102
+ }
103
+ return thumbnailPath;
104
+ }
105
+ async resizeImage(buffer, width, height, mimeType) {
106
+ return buffer;
107
+ }
108
+ }
109
+ exports.FileUploadHandler = FileUploadHandler;
110
+ //# sourceMappingURL=file-upload-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-upload-handler.js","sourceRoot":"","sources":["../../src/utils/file-upload-handler.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,10 @@ export declare const getChangedFiles: (workspaceRoot: string) => string[];
23
23
  * Get files that changed between two git status snapshots
24
24
  * @param before Git status output before operation
25
25
  * @param after Git status output after operation
26
+ * @param workspaceRoot The workspace root to resolve directory contents
26
27
  * @returns Array of file paths that were added or modified
27
28
  */
28
- export declare const getChangedFilesDiff: (before: string, after: string) => string[];
29
+ export declare const getChangedFilesDiff: (before: string, after: string, workspaceRoot?: string) => string[];
29
30
  /**
30
31
  * Get the git root directory
31
32
  * @returns Absolute path to git root
@@ -1 +1 @@
1
- {"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,KAAG,MAU7D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM,KAAG,MAAM,EAqB3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,KAAG,MAAM,EAG7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAqBzE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAO,MAS7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,OAWnD,CAAC"}
1
+ {"version":3,"file":"gitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/gitUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,KAAG,MAU7D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,cAAc,MAAM,KAAG,MAAM,EAwB3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,KAAG,MAAM,EAG7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,gBAAgB,MAAM,KACrB,MAAM,EAyBR,CAAC;AA+BF;;;GAGG;AACH,eAAO,MAAM,UAAU,QAAO,MAS7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,WAAW,MAAM,KAAG,OAWnD,CAAC"}